#include "user_config.h" user_config_param_s user_config_param = USER_CONFIG_STAT_DEFAULT_CONFIG; /******************************************************************************* * @函数名称 set_user_config_param_init * @函数说明 解析注册指纹采集图像 * @输入参数 param:参数 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void set_user_config_param_init(user_config_param_s *param) { memset(param,0,sizeof(user_config_param_s)); param->head = HEAD_VALUE; param->can_baud = CAN_BAUD_1000; param->npn_in_param.left_elect_level = 0; param->npn_in_param.right_elect_level = 0; memset(param->rs485_param.rs485_func, 0, EXT_FUNC_COUNT); memset(param->i2c_param.i2c_func, 0, EXT_FUNC_COUNT); param->left_ws2812b_count = WS2812B_DEFAULT_COUNT; param->right_ws2812b_count = WS2812B_DEFAULT_COUNT; param->elect_param.elect_on_timne[LEFT_IDX] = ELECT_TIME_DEFAULT; param->elect_param.elect_on_timne[RIGHT_IDX] = ELECT_TIME_DEFAULT; } /******************************************************************************* * @函数名称 check_can_baud * @函数说明 检查CAN波特率 * @输入参数 baud:波特率 * @输出参数 无 * @返回参数 无 *******************************************************************************/ bool check_can_baud(uint32_t baud) { switch(baud) { case CAN_BAUD_100: case CAN_BAUD_150: case CAN_BAUD_200: case CAN_BAUD_250: case CAN_BAUD_300: case CAN_BAUD_400: case CAN_BAUD_500: case CAN_BAUD_666: case CAN_BAUD_800: case CAN_BAUD_1000:return true; default:return false; } } /******************************************************************************* * @函数名称 FLASH_read * @函数说明 读取flash * @输入参数 addr:地址 pData:数据指针 len:数据长度 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void FLASH_read(uint32_t addr, uint8_t *pData, uint32_t len) { uint32_t i; for(i=0;ihead != HEAD_VALUE) { return false; } if(false == check_can_baud(param->can_baud)) { return false; } return true; } /******************************************************************************* * @函数名称 User_Config_Read_Config * @函数说明 读取配置信息 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void User_Config_Read_Config(void) { user_config_param_s param; /* Read the first block */ FLASH_read(CONFIG_DATAFLASH_ADDR, (uint8_t *)¶m, sizeof(user_config_param_s)); if(true == check_read_config_param(¶m)) { PRINT("rd config succ!\n"); memcpy(&user_config_param, ¶m, sizeof(user_config_param_s)); PRINT("can baud=%d\n", user_config_param.can_baud); PRINT("left ws2812b count=%d\n", user_config_param.left_ws2812b_count); PRINT("right ws2812b count=%d\n", user_config_param.right_ws2812b_count); } else{ PRINT("rd config error!\n"); set_user_config_param_init(&user_config_param); User_Config_Write_Config(); } } /******************************************************************************* * @函数名称 User_Config_Write_Config * @函数说明 写入配置信息 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void User_Config_Write_Config(void) { uint8_t buf[256] = {0xFF}; memset(buf, 0xFF, 256); memcpy(buf, (uint8_t *)&user_config_param, sizeof(user_config_param_s)); FLASH_Unlock_Fast(); /* Erase the first block */ FLASH_ErasePage_Fast(CONFIG_DATAFLASH_ADDR); /* Programming DataFlash */ FLASH_ProgramPage_Fast(CONFIG_DATAFLASH_ADDR, (uint32_t *)buf); FLASH_Lock_Fast(); } /******************************************************************************* * @函数名称 user_config_save_can_baud * @函数说明 保存can波特率 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ bool user_config_save_can_baud(uint32_t baud) { if(false == check_can_baud(baud)) { return false; } if(user_config_param.can_baud != baud) { user_config_param.can_baud = baud; User_Config_Write_Config(); } return true; } /******************************************************************************* * @函数名称 user_config_save_ws2812b_count * @函数说明 保存幻彩灯珠数量 * @输入参数 left:左边数量 * right:右边数量 * @输出参数 无 * @返回参数 无 *******************************************************************************/ bool user_config_save_ws2812b_count(uint8_t left, uint8_t right) { bool stat = false; if(left > WS2812B_MAX_COUNT || right > WS2812B_MAX_COUNT) { return false; } if(user_config_param.left_ws2812b_count != left) { user_config_param.left_ws2812b_count = left; stat = true; } if(user_config_param.right_ws2812b_count != right) { user_config_param.right_ws2812b_count = right; stat = true; } if(stat == true) { User_Config_Write_Config(); } return true; } /******************************************************************************* * @函数名称 user_config_save_elect_time * @函数说明 设置电子锁上电时间 * @输入参数 left:左边电磁锁时间 * right:右边电磁锁时间 * @输出参数 无 * @返回参数 无 *******************************************************************************/ bool user_config_save_elect_time(uint16_t left, uint16_t right) { bool stat = false; if(left < ELECT_TIME_MIN || left > ELECT_TIME_MAX || right < ELECT_TIME_MIN || right > ELECT_TIME_MAX) { return false; } if(user_config_param.elect_param.elect_on_timne[LEFT_IDX] != left) { user_config_param.elect_param.elect_on_timne[LEFT_IDX] = left; stat = true; } if(user_config_param.elect_param.elect_on_timne[RIGHT_IDX] != right) { user_config_param.elect_param.elect_on_timne[RIGHT_IDX] = right; stat = true; } if(stat == true) { User_Config_Write_Config(); } return true; } /******************************************************************************* * @函数名称 user_config_init * @函数说明 初始化 * @输入参数 无 * @输出参数 无 * @返回参数 无 *******************************************************************************/ void user_config_init(void) { User_Config_Read_Config(); }