#include "user_charge.h" #include "user_config.h" #include "user_adc.h" #include "my_math.h" tmosTaskID user_charge_task_id = INVALID_TASK_ID; static vUser_charge_upload_stat_func xUpload_stat = NULL; static uint16_t user_charge_task_process_event(uint8_t task_id, uint16_t events); /******************************************************************************* * @函数名称 charge_gpio_init * @函数说明 GPIO初始化 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ static void charge_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; CHARGE_GPIO_RCC_ENABLE; GPIO_InitStructure.GPIO_Pin = CHARGE_LEFT_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(CHARGE_LEFT_GPIO, &GPIO_InitStructure); CHARGE_LEFT_OFF; GPIO_InitStructure.GPIO_Pin = CHARGE_RIGHT_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(CHARGE_RIGHT_GPIO, &GPIO_InitStructure); CHARGE_RIGHT_OFF; } /******************************************************************************* * @函数名称 prvUser_charge_upload_stat * @函数说明 上报充电状态 * @输入参数 idx:左边或者右边 stat:充电状态 * @输出参数 无 * @返回参数 无 *******************************************************************************/ static void prvUser_charge_upload_stat(uint8_t idx, bool stat) { if(xUpload_stat != NULL) { xUpload_stat(idx, stat); } } /******************************************************************************* * @函数名称 user_charge_task_process_event * @函数说明 task的event处理回调函数,需要在注册task时候,传进去 * @输入参数 task_id:任务ID events:事件 * @输出参数 无 * @返回参数 无 *******************************************************************************/ static uint16_t user_charge_task_process_event(uint8_t task_id, uint16_t events) { //event 处理 if(events & (1 << CHARGE_QUEUE_LEFT_OPEN)) { CHARGE_LEFT_ON; prvUser_charge_upload_stat(LEFT_IDX, true); return (events ^ (1 << CHARGE_QUEUE_LEFT_OPEN)); //异或的方式清除该事件运行标志,并返回未运行的事件标志 } if(events & (1 << CHARGE_QUEUE_LEFT_CLOSE)) { CHARGE_LEFT_OFF; prvUser_charge_upload_stat(LEFT_IDX, false); return (events ^ (1 << CHARGE_QUEUE_LEFT_CLOSE)); //异或的方式清除该事件运行标志,并返回未运行的事件标志 } if(events & (1 << CHARGE_QUEUE_RIGHT_OPEN)) { CHARGE_RIGHT_ON; prvUser_charge_upload_stat(RIGHT_IDX, true); return (events ^ (1 << CHARGE_QUEUE_RIGHT_OPEN)); //异或的方式清除该事件运行标志,并返回未运行的事件标志 } if(events & (1 << CHARGE_QUEUE_RIGHT_CLOSE)) { CHARGE_RIGHT_OFF; prvUser_charge_upload_stat(RIGHT_IDX, false); return (events ^ (1 << CHARGE_QUEUE_RIGHT_CLOSE)); //异或的方式清除该事件运行标志,并返回未运行的事件标志 } adc_task_process_event(task_id, events); return 0; } /******************************************************************************* * @函数名称 set_user_charge_Queue * @函数说明 开始Charge任务event * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void set_user_charge_Queue(USER_CHARGE_QUEUE_TYPE type) { bStatus_t stat = tmos_start_task(user_charge_task_id, (1 << type), MS1_TO_SYSTEM_TIME(1)); } /******************************************************************************* * @函数名称 user_charge_init * @函数说明 Charge初始化 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void user_charge_init(void) { charge_gpio_init(); user_charge_task_id = TMOS_ProcessEventRegister(user_charge_task_process_event); PRINT("user_charge_task_id=%d\n", user_charge_task_id); } /******************************************************************************* * @函数名称 vUser_charge_set_upload_stat_func * @函数说明 设置上报充电状态的回调函数 * @输入参数 func:函数指针 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void vUser_charge_set_upload_stat_func(vUser_charge_upload_stat_func func) { xUpload_stat = func; }