#include "user_check.h" static user_check_work_s user_check_work = { .check_delay_count = 0, .check_stat = 2, .check_on_count = USER_CHECK_MAX_COUNT, .check_off_count = USER_CHECK_MAX_COUNT, .upload_func = NULL, }; /******************************************************************************* * @函数名称 prvUser_check_out_gpio_init * @函数说明 GPIO输出初始化 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ static void prvUser_check_out_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; GPIO_InitStructure.GPIO_Pin = USER_CHECK_SW_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_30MHz; GPIO_Init(USER_CHECK_SW_GPIO, &GPIO_InitStructure); USER_CHECK_SW_ON; } /******************************************************************************* * @函数名称 prvUser_check_in_gpio_init * @函数说明 GPIO输入初始化 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ static void prvUser_check_in_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; GPIO_InitStructure.GPIO_Pin = USER_CHECK_IN_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_30MHz; GPIO_Init(USER_CHECK_IN_GPIO, &GPIO_InitStructure); } /******************************************************************************* * @函数名称 vUser_check_init * @函数说明 初始化 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void vUser_check_init(void) { USER_CHECK_GPIO_RCC_ENABLE; prvUser_check_out_gpio_init(); prvUser_check_in_gpio_init(); } /******************************************************************************* * @函数名称 vUser_check_tick * @函数说明 任务计时器 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void vUser_check_tick(void) { if(user_check_work.check_delay_count > 0) { user_check_work.check_delay_count--; } } /******************************************************************************* * @函数名称 vUser_check_in_pro * @函数说明 光敏状态检测 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ static void vUser_check_in_pro(void) { if(true == USER_CHECK_IN_IN) { user_check_work.check_off_count = USER_CHECK_MAX_COUNT; if(user_check_work.check_on_count == 0) { if(user_check_work.check_finish == false) { user_check_work.check_finish = true; if(user_check_work.check_stat != 1) { user_check_work.check_stat = 1; if(user_check_work.upload_func != NULL) { user_check_work.upload_func(false); } } } } else{ user_check_work.check_finish = false; user_check_work.check_on_count--; } } else{ user_check_work.check_on_count = USER_CHECK_MAX_COUNT; if(user_check_work.check_off_count == 0) { if(user_check_work.check_finish == false) { user_check_work.check_finish = true; if(user_check_work.check_stat != 0) { user_check_work.check_stat = 0; if(user_check_work.upload_func != NULL) { user_check_work.upload_func(true); } } } } else{ user_check_work.check_finish = false; user_check_work.check_off_count--; } } } /******************************************************************************* * @函数名称 vUser_check_pro * @函数说明 任务 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void vUser_check_pro(void) { if(user_check_work.check_delay_count == 0) { user_check_work.check_delay_count = USER_CHECK_INTERVAL; vUser_check_in_pro(); } } /******************************************************************************* * @函数名称 vUser_check_set_upload_func * @函数说明 设置光敏状态上报回调函数 * @输入参数 func:回调函数指针 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void vUser_check_set_upload_func(user_check_upload_func func) { user_check_work.upload_func = func; }