#include "api_json_module.h" #include #include #include #define TAG __FILE_NAME__ #define API_MODULE_MAX 10 typedef struct api_json_module_t { api_json_on_req on_req; } api_json_module_t; static api_json_module_t module_arr[API_MODULE_MAX] = {0}; static uint8_t module_count = 0; void api_json_module_dump() { for (int i = 0; i < API_MODULE_MAX; ++i) { printf("%d = %p\n", i, module_arr[i].on_req); } } int api_json_module_add(api_json_init_func func) { api_json_module_cfg_t api_module; int err; api_module.module_id = -1; api_module.on_req = NULL; err = func(&api_module); if (err) { printf("module %p init failed\n", func); return 1; } if (api_module.module_id >= API_MODULE_MAX) { printf("module ID should be smaller than API_MODULE_MAX=%d\n", API_MODULE_MAX); return 1; } if (module_arr[api_module.module_id].on_req != NULL) { printf("module ID %d is already in use\n", api_module.module_id); return 1; } module_arr[api_module.module_id].on_req = api_module.on_req; module_count++; printf("%p is added\n", func); return 0; } int api_json_module_call(uint8_t id, uint16_t cmd, api_json_req_t *in, api_json_module_async_t *out) { if (unlikely(id >= API_MODULE_MAX || module_arr[id].on_req == NULL)) { return API_JSON_BAD_REQUEST; } return module_arr[id].on_req(cmd, in, out); }