#ifndef HAS_TASK_MSG_H #define HAS_TASK_MSG_H /* 静态订阅表 */ // TODO:后续可支持动态增加模块订阅,感觉目前没必要 typedef enum { INVALID_ID = 0, GUI, SENSOR, ACM, WIFI, VOICE, MODULE_MAX } has_module_ID_e; /* 格式:模块 订阅数量 订阅模块 */ #define SUBSCIBE_INFO \ { \ {GUI, 4, {ACM, SENSOR, WIFI, VOICE}}, \ {SENSOR, 1, {GUI}}, \ } // #define SUBSCIBE_INFO \ // { \ // {GUI, 4, {ACM, WIFI, VOICE, SENSOR}}, \ // {SENSOR, 5, {ACM, GUI, WIFI, VOICE, SENSOR}}, \ // {ACM, 4, {GUI, WIFI, VOICE, SENSOR}}, \ // {WIFI, 4, {ACM, GUI, VOICE, SENSOR}}, \ // {VOICE, 4, {ACM, WIFI, GUI, SENSOR}}, \ // } /** * @brief 消息处理回调类型 * @param module_id:发布者的id号 * @param buf:消息数据指针 * @param len:消息数据长度 * @return 0:成功 -1:失败 */ typedef int (*has_msg_handle_cb)(unsigned char module_id, const unsigned char *buf, unsigned int len); /* -------------------- 注意 Attention -------------------- */ /* 对于同一个id,不能同时在不同线程中调用 *_handle*, *_receive* 和 *delete_all* 的接口 */ /* For the same id, the *_handle*, *_receive* and *delete_all* API cannot be called in different threads at the same time */ /* 基础功能 */ int has_msg_init(void); int has_msg_os_init(void); int has_msg_init_module(has_module_ID_e module_id); // HAS OS调用 int has_msg_publish(has_module_ID_e module_id, void *buffer, unsigned int length); int has_msg_handle(has_module_ID_e module_id, has_msg_handle_cb cb, int ms_timeout); unsigned int has_msg_is_message_empty(has_module_ID_e module_id); unsigned int has_msg_get_message_number(has_module_ID_e module_id); int has_msg_delete_all_message(has_module_ID_e module_id); /* 扩展功能 */ int has_msg_handle_by_module(has_module_ID_e module_id, has_msg_handle_cb cb, has_module_ID_e pub_module_id); int has_msg_handle_latest(has_module_ID_e module_id, has_msg_handle_cb cb, int ms_timeout); unsigned int has_msg_receive(has_module_ID_e module_id, unsigned char *pub_module_id, unsigned char *buf_out, int ms_timeout); unsigned int has_msg_receive_latest(has_module_ID_e module_id, unsigned char *pub_module_id, unsigned char *buf_out, int ms_timeout); int has_msg_printf_subscribe(has_module_ID_e module_id); // int has_msg_subscribe(has_module_ID_e module_id, has_module_ID_e sub_id); // int has_msg_unsubscribe(has_module_ID_e module_id, has_module_ID_e sub_id); #endif