添加预留的OS初始化接口
This commit is contained in:
@@ -74,7 +74,7 @@ typedef struct {
|
|||||||
struct list_head msg_list; // 消息链表
|
struct list_head msg_list; // 消息链表
|
||||||
} has_static_sub_list_t;
|
} has_static_sub_list_t;
|
||||||
static has_static_sub_list_t g_sub_list[] = SUBSCIBE_INFO;
|
static has_static_sub_list_t g_sub_list[] = SUBSCIBE_INFO;
|
||||||
static unsigned char g_sub_list_index[MODULE_MAX] = {0}; // 订阅表id索引
|
static unsigned char g_sub_list_index[MODULE_MAX]; // 订阅表id索引
|
||||||
|
|
||||||
|
|
||||||
/* 检查ID是否合法,id:检查的ID,ret:不合法时return的值 */
|
/* 检查ID是否合法,id:检查的ID,ret:不合法时return的值 */
|
||||||
@@ -92,6 +92,7 @@ if (g_sub_list_index[(id)] == MODULE_MAX) { \
|
|||||||
int has_msg_init()
|
int has_msg_init()
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
|
/* 设置无效,标记是否初始化 */
|
||||||
memset(g_sub_list_index, MODULE_MAX, sizeof(g_sub_list_index));
|
memset(g_sub_list_index, MODULE_MAX, sizeof(g_sub_list_index));
|
||||||
#ifdef MSG_OPT_PUB_LIST
|
#ifdef MSG_OPT_PUB_LIST
|
||||||
memset(g_pub_list, 0, sizeof(g_pub_list));
|
memset(g_pub_list, 0, sizeof(g_pub_list));
|
||||||
@@ -103,6 +104,11 @@ int has_msg_init()
|
|||||||
MSG_ASSERT; // 配置都能写错,必须进断言
|
MSG_ASSERT; // 配置都能写错,必须进断言
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
/* 已经被初始化了,配置错误 */
|
||||||
|
if (g_sub_list_index[g_sub_list[i].module_id] != MODULE_MAX) {
|
||||||
|
msg_printf("[msg]warning: msg two same module id:%d\n", g_sub_list[i].module_id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* 检查订阅表ID是否配置正确 */
|
/* 检查订阅表ID是否配置正确 */
|
||||||
for (j = 0; j < (MODULE_MAX - 1); j++) {
|
for (j = 0; j < (MODULE_MAX - 1); j++) {
|
||||||
@@ -124,12 +130,13 @@ int has_msg_init()
|
|||||||
}
|
}
|
||||||
g_sub_list_index[g_sub_list[i].module_id] = i; // 索引表赋值
|
g_sub_list_index[g_sub_list[i].module_id] = i; // 索引表赋值
|
||||||
#ifdef MSG_OPT_PUB_LIST
|
#ifdef MSG_OPT_PUB_LIST
|
||||||
/* 构建发布表 */
|
/* 通知发布者,需要发给此模块 */
|
||||||
for (int k = 0; k < g_sub_list[i].sub_module_cnt; k++) {
|
for (int k = 0; k < g_sub_list[i].sub_module_cnt; k++) { // 寻找发布者
|
||||||
if (g_pub_list[g_sub_list[i].sub_module[k]].pub_num == 0) {
|
if (g_pub_list[g_sub_list[i].sub_module[k]].pub_num == 0) {
|
||||||
msg_mutex_init(&g_pub_list[g_sub_list[i].sub_module[k]].buffer_mutex);
|
msg_mutex_init(&g_pub_list[g_sub_list[i].sub_module[k]].buffer_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 注册所找到发布者的发布表 */
|
||||||
g_pub_list[g_sub_list[i].sub_module[k]].pub_module[g_pub_list[g_sub_list[i].sub_module[k]].pub_num] = g_sub_list[i].module_id;
|
g_pub_list[g_sub_list[i].sub_module[k]].pub_module[g_pub_list[g_sub_list[i].sub_module[k]].pub_num] = g_sub_list[i].module_id;
|
||||||
g_pub_list[g_sub_list[i].sub_module[k]].pub_num ++;
|
g_pub_list[g_sub_list[i].sub_module[k]].pub_num ++;
|
||||||
}
|
}
|
||||||
@@ -164,6 +171,92 @@ int has_msg_init()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int has_msg_init_module(has_module_ID_e module_id)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
/* 检查ID */
|
||||||
|
if ((module_id >= MODULE_MAX) || (module_id == INVALID_ID)) {
|
||||||
|
msg_printf("%s:module_id:%d is invalid\n", __func__, module_id);
|
||||||
|
MSG_ASSERT; // 配置都能写错,必须进断言
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/* 初始化该模块订阅表 */
|
||||||
|
for (i = 0; i < (sizeof(g_sub_list) / sizeof(g_sub_list[0])); i++)
|
||||||
|
{
|
||||||
|
if (g_sub_list[i].module_id == module_id) {
|
||||||
|
// g_sub_list_index[module_id] = MODULE_MAX;
|
||||||
|
// #ifdef MSG_OPT_PUB_LIST
|
||||||
|
// g_pub_list[module_id].pub_num = 0;
|
||||||
|
// #endif
|
||||||
|
/* 已经被初始化了,配置错误 */
|
||||||
|
if (g_sub_list_index[module_id] != MODULE_MAX) {
|
||||||
|
msg_printf("[msg]warning: msg two same module id:%d\n", module_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* 检查订阅表ID是否配置正确 */
|
||||||
|
for (j = 0; j < (MODULE_MAX - 1); j++) {
|
||||||
|
if (g_sub_list[i].sub_module[j] == INVALID_ID) {
|
||||||
|
break;
|
||||||
|
} else if (g_sub_list[i].sub_module[j] >= MODULE_MAX) {
|
||||||
|
msg_printf("sub_module id:%d is invalid, module:id %d\nplease check the macro:"
|
||||||
|
" SUBSCIBE_INFO row:%d, sub list:%d\n", g_sub_list[i].sub_module[j], module_id, i, j);
|
||||||
|
MSG_ASSERT; // 配置都能写错,必须进断言
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 检查订阅数量是否配置正确 */
|
||||||
|
if (g_sub_list[i].sub_module_cnt != j) {
|
||||||
|
msg_printf("sub_module_cnt is config as %d, which actually is %d, please check the"
|
||||||
|
" macro: SUBSCIBE_INFO row:%d\n", g_sub_list[i].sub_module_cnt, j, i);
|
||||||
|
MSG_ASSERT; // 配置都能写错,必须进断言
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
g_sub_list_index[module_id] = i; // 索引表赋值
|
||||||
|
|
||||||
|
#ifdef MSG_OPT_PUB_LIST
|
||||||
|
/* 通知发布者,需要发给此模块 */
|
||||||
|
for (int k = 0; k < g_sub_list[i].sub_module_cnt; k++) { // 寻找发布者
|
||||||
|
if (g_pub_list[g_sub_list[i].sub_module[k]].pub_num == 0) {
|
||||||
|
msg_mutex_init(&g_pub_list[g_sub_list[i].sub_module[k]].buffer_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 注册所找到发布者的发布表 */
|
||||||
|
g_pub_list[g_sub_list[i].sub_module[k]].pub_module[g_pub_list[g_sub_list[i].sub_module[k]].pub_num] = module_id;
|
||||||
|
g_pub_list[g_sub_list[i].sub_module[k]].pub_num ++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
msg_mutex_init(&g_sub_list[i].msg_mutex); // 初始化该模块互斥量
|
||||||
|
INIT_LIST_HEAD(&g_sub_list[i].msg_list); // 初始化订阅链表
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* 初始化发布表 */
|
||||||
|
#ifdef MSG_OPT_DEBUG
|
||||||
|
if (i == (sizeof(g_sub_list) / sizeof(g_sub_list[0]))) {
|
||||||
|
msg_debug("module:%d never subscribe any module\n", module_id);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 如果是OS初始化,则用下列类似调用方式,先清除
|
||||||
|
需要初始化的模块再调用 has_msg_init_module 传相应ID */
|
||||||
|
int has_msg_os_init()
|
||||||
|
{
|
||||||
|
/* 设置无效,标记是否初始化 */
|
||||||
|
memset(g_sub_list_index, MODULE_MAX, sizeof(g_sub_list_index));
|
||||||
|
#ifdef MSG_OPT_PUB_LIST
|
||||||
|
memset(g_pub_list, 0, sizeof(g_pub_list));
|
||||||
|
#endif
|
||||||
|
// for(;;)
|
||||||
|
// has_msg_init_module(GUI);
|
||||||
|
// has_msg_init_module(SENSOR);
|
||||||
|
// has_msg_init_module(ACM);
|
||||||
|
// has_msg_init_module(WIFI);
|
||||||
|
// has_msg_init_module(VOICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int has_msg_publish(has_module_ID_e module_id, void *buffer, unsigned int length)
|
int has_msg_publish(has_module_ID_e module_id, void *buffer, unsigned int length)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user