72 lines
1.5 KiB
C
72 lines
1.5 KiB
C
#include "web_uri_module.h"
|
|
#include "list.h"
|
|
|
|
#include <esp_log.h>
|
|
|
|
|
|
#define URI_MODULE_MAX 8
|
|
|
|
#define TAG __FILE_NAME__
|
|
|
|
typedef struct uri_module_list_t {
|
|
struct dl_list list;
|
|
uri_module_t module;
|
|
} uri_module_list_t;
|
|
|
|
static uri_module_list_t module_arr[URI_MODULE_MAX];
|
|
static uint8_t module_count = 0;
|
|
static DEFINE_DL_LIST(list_head);
|
|
|
|
int uri_module_init(httpd_handle_t server)
|
|
{
|
|
int err;
|
|
const httpd_uri_t *uri;
|
|
uri_module_list_t *item;
|
|
uint8_t index = 0;
|
|
|
|
dl_list_for_each(item, &list_head, uri_module_list_t, list) {
|
|
err = item->module.init(&uri);
|
|
ESP_LOGI(TAG, "uri %s init", uri->uri);
|
|
if (err) {
|
|
ESP_LOGE(TAG, "%d init error", index);
|
|
}
|
|
|
|
err = httpd_register_uri_handler(server, uri);
|
|
if (err) {
|
|
ESP_LOGE(TAG, "%d %s", index, esp_err_to_name(err));
|
|
}
|
|
index++;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int uri_module_exit(httpd_handle_t server)
|
|
{
|
|
|
|
return 0;
|
|
}
|
|
|
|
int uri_module_add(uint8_t priority, uri_module_func init, uri_module_func exit)
|
|
{
|
|
ESP_LOGI(TAG, "adding module %p", init);
|
|
|
|
if (module_count >= URI_MODULE_MAX) {
|
|
ESP_LOGE(TAG, "too much module > URI_MODULE_MAX");
|
|
return 1;
|
|
}
|
|
|
|
module_arr[module_count].module.exit = exit;
|
|
module_arr[module_count].module.init = init;
|
|
module_arr[module_count].module.priority = priority;
|
|
|
|
uri_module_list_t *item;
|
|
dl_list_for_each(item, &list_head, uri_module_list_t, list) {
|
|
if (item->module.priority <= priority) {
|
|
break;
|
|
}
|
|
}
|
|
dl_list_add(&item->list, &module_arr[module_count].list);
|
|
module_count++;
|
|
return 0;
|
|
}
|