/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2020. All rights reserved. * * Description: task_driver_event.c * * Author: saimen * * Create: 2024-4-20 *--------------------------------------------------------------------------*/ //lib #include #include #include //os #include "securec.h" #include "common_def.h" #include "debug_print.h" #include "soc_osal.h" #include "cmsis_os2.h" //sdk //drv //user #include "sys_typedef.h" #include "sys_config.h" #include "task_driver_event.h" /********************************************************************************************************************** * DEFINE */ #define ENABLE_STATIC_PRINT_INFO false #define ENABLE_STATIC_PRINT_WARN true #define ENABLE_STATIC_PRINT_ERROR true #if ENABLE_STATIC_PRINT_INFO #define static_print_debug(...) sys_common_printf(__VA_ARGS__) #else #define static_print_debug(...) #endif #if ENABLE_STATIC_PRINT_WARN #define static_print_warn(...) sys_common_printf(__VA_ARGS__) #else #define static_print_warn(...) #endif #if ENABLE_STATIC_PRINT_ERROR #define static_print_error(...) sys_common_printf(__VA_ARGS__) #else #define static_print_error(...) #endif #define QUEUE_DRIVER_EVENT_COUNT 16 /********************************************************************************************************************** * VARIABLES */ static unsigned long g_queue_driver_event; static unsigned int *g_task_driver_event_handle; /********************************************************************************************************************** * PUBLIC FUNCTIONS */ unsigned int *tjd_task_driver_event_get_task_handle(void) { return g_task_driver_event_handle; } unsigned long tjd_task_driver_event_get_queue_id(void) { return g_queue_driver_event; } void tjd_task_driver_event_entry(void *param) { unused(param); int32_t ret = OSAL_FAILURE; queue_default_info_t msg_data; unsigned int msg_size = sizeof(queue_default_info_t); while (1) { (void)memset_s(&msg_data, sizeof(msg_data), 0, sizeof(msg_data)); ret = osal_msg_queue_read_copy(g_queue_driver_event, &msg_data, &msg_size, OSAL_MSGQ_WAIT_FOREVER); if (ret != OSAL_SUCCESS) { continue; } static_print_debug("queue_driver_event_default_info_t: service_node:0x%X-0x%X-%d\r\n", msg_data.param, msg_data.func_event_handler, msg_data.value); if(msg_data.func_event_handler) { ret = msg_data.func_event_handler(msg_data.param); } osal_kfree(msg_data.payload); } } void tjd_task_driver_event_init(unsigned short stack_depth, unsigned short priority) { osal_msg_queue_create("tjd_q_driver_event", QUEUE_DRIVER_EVENT_COUNT, &g_queue_driver_event, 0, sizeof(queue_default_info_t)); #define APP_MAIN_STACK_SIZE 0x800 #define TASK_PRIORITY_APP (osPriority_t)(osPriorityAboveNormal2)//17 osThreadAttr_t task_attr = { "tjd_t_driver_event", 0, NULL, 0, NULL, APP_MAIN_STACK_SIZE, TASK_PRIORITY_APP, 0, 0 }; if(stack_depth>APP_MAIN_STACK_SIZE){ task_attr.stack_size = stack_depth; } if(priority>TASK_PRIORITY_APP){ //task_attr.priority = priority; } task_attr.stack_mem = memalign(16, task_attr.stack_size);//add g_task_driver_event_handle = osThreadNew(tjd_task_driver_event_entry, NULL, &task_attr); static_print_warn("tjd_task_driver_event_init() END: task-0x%X queue-0x%X-%d\r\n", g_task_driver_event_handle, g_queue_driver_event, sizeof(queue_default_info_t)); } /********************************************************************************************************************** * TEST FUNCTIONS */ static unsigned long s_test_param; signed int tjd_task_driver_event_test_handle(void *param) { unsigned long *p_param = (unsigned long *)param; static_print_debug("tjd_task_driver_event_test_handle(): param=%d\r\n", *p_param); s_test_param++; return 0; //默认返回0,也可以自定义。 } void tjd_task_driver_event_test_send(void) { queue_default_info_t msg_data = { tjd_task_driver_event_test_handle, &s_test_param, NULL, NULL }; osal_msg_queue_write_copy(tjd_task_driver_event_get_queue_id(), (void *)&msg_data, sizeof(queue_default_info_t), 0); }