From c1235bf3f37ec78351203f6d7d8b6bf93e24860d Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期日, 29 六月 2025 17:42:30 +0800 Subject: [PATCH] 初步测试蓝牙协议和修改删除部分逻辑,完成蓝牙协议功能逻辑开发和实测,距离判断开关逻辑需要进一步确认优化,加入改附近频率设定并实测通过 --- keil/include/drivers/global_param.c | 198 ++++++++++++++++++++++++++++++------------------ 1 files changed, 123 insertions(+), 75 deletions(-) diff --git a/keil/include/drivers/global_param.c b/keil/include/drivers/global_param.c index 0bffd6c..5c1c945 100644 --- a/keil/include/drivers/global_param.c +++ b/keil/include/drivers/global_param.c @@ -3,9 +3,10 @@ //#include "dw_app.h" #include <string.h> #define FLASH_IAP_CTRL_MAP (uint32_t)0x0402E000 //the control map start address, 63K MK8000修改 - - - +#define FLASH_Authorization_MAP (uint32_t)0x0402f000 //授权标签列表起始地址 +#define AUTHORIZATION_NUM 1024 +uint32_t tag_id_authorization_list[AUTHORIZATION_NUM]; +uint32_t tag_id_authorization_list_num; uint16_t g_com_map[COM_MAP_SIZE]; uint8_t parameter_check(void) { @@ -37,94 +38,141 @@ } uint32_t save_com_map_to_flash(void) { - uint32_t result = 0; + uint32_t result = 0; if(parameter_check()) //参数错误,不保存 { return 1; } - __disable_irq(); - //result = FLASH_Prepare(FLASH_IAP_CTRL_MAP, (COM_MAP_SIZE<<1));MK8000修改 - result=flash_open(FLASH_ID0,NULL); - //MK8000没有对应函数 - if(!result){ - flash_erase(FLASH_ID0,FLASH_IAP_CTRL_MAP,FLASH_SECTOR_SIZE); - flash_write_nbytes(FLASH_ID0, FLASH_IAP_CTRL_MAP, (const uint8_t*)g_com_map, sizeof(g_com_map)); - //result = FLASH_Write(FLASH_IAP_CTRL_MAP, (const uint8_t*)g_com_map, (COM_MAP_SIZE<<1)); - } - //flash_close(FLASH_ID0); - __enable_irq(); - return result; + __disable_irq(); + //result = FLASH_Prepare(FLASH_IAP_CTRL_MAP, (COM_MAP_SIZE<<1));MK8000修改 + result=flash_open(FLASH_ID0,NULL); + //MK8000没有对应函数 + if(!result) { + flash_erase(FLASH_ID0,FLASH_IAP_CTRL_MAP,FLASH_SECTOR_SIZE); + flash_write_nbytes(FLASH_ID0, FLASH_IAP_CTRL_MAP, (const uint8_t*)g_com_map, sizeof(g_com_map)); + } + //flash_close(FLASH_ID0); + __enable_irq(); + return result; } - +uint32_t save_taglist_map_to_flash(void) +{ + uint32_t result = 0; + if(parameter_check()) //参数错误,不保存 + { + return 1; + } + __disable_irq(); + //result = FLASH_Prepare(FLASH_IAP_CTRL_MAP, (COM_MAP_SIZE<<1));MK8000修改 + result=flash_open(FLASH_ID0,NULL); + //MK8000没有对应函数 + if(!result) { + flash_erase(FLASH_ID0,FLASH_Authorization_MAP,4*FLASH_SECTOR_SIZE); + flash_write_nbytes(FLASH_ID0, FLASH_Authorization_MAP, (const uint8_t*)tag_id_authorization_list, sizeof(tag_id_authorization_list)); + //result = FLASH_Write(FLASH_IAP_CTRL_MAP, (const uint8_t*)g_com_map, (COM_MAP_SIZE<<1)); + } + //flash_close(FLASH_ID0); + __enable_irq(); + return result; +} void parameter_init(void)//注意看前面有没有关闭flash如果有则打开flash在读取,否则会出错 -{ flash_open(FLASH_ID0,NULL); - //FLASH_Read(FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, (COM_MAP_SIZE<<1));MK8000修改 - flash_read(FLASH_ID0, FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, sizeof(g_com_map)); - if(g_com_map[0] != 0x55AA)//第一次没有任何数据的话就默认这个 - { - g_com_map[0] = 0x55AA; - g_com_map[DEV_ID] =0x1234;//DEFAULT_DEV_ID; //默认设备ID +{ flash_open(FLASH_ID0,NULL); + //FLASH_Read(FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, (COM_MAP_SIZE<<1));MK8000修改 + flash_read(FLASH_ID0, FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, sizeof(g_com_map)); + if(g_com_map[0] != 0x55AA)//第一次没有任何数据的话就默认这个 + { + g_com_map[0] = 0x55AA; + g_com_map[DEV_ID] =0x1234;//DEFAULT_DEV_ID; //默认设备ID - g_com_map[COM_INTERVAL]=500; //频率2HZ - g_com_map[MAX_REPORT_ANC_NUM]=10; - g_com_map[GROUP_ID]=0; - g_com_map[DIST_OFFSET]=-31; - - g_com_map[DEV_ROLE] =0x1; //标签 + g_com_map[COM_INTERVAL]=200; //频率2HZ + g_com_map[MAX_REPORT_ANC_NUM]=10; + g_com_map[GROUP_ID]=0; + g_com_map[DIST_OFFSET]=-31; - - g_com_map[HEARTBEAT]=0; - - g_com_map[POWER]=67; //发射功率 - g_com_map[IMU_THRES]=2; - g_com_map[NOMOVESLEEP_TIME]=120; //静止休眠2分钟 - g_com_map[MOTOR_ENABLE]=1; //震动电机使能 - g_com_map[IMU_ENABLE]=1; //静止休眠使能 - - g_com_map[CNT_RESTART]=0; - g_com_map[CNT_REBOOT]=0; - g_com_map[CNT_UPDATE]=0; - g_com_map[MODBUS_MODE]=0; - g_com_map[ACTIVE_INDEX]=0; + g_com_map[DEV_ROLE] =0x1; //标签 + + g_com_map[HEARTBEAT]=0; + + g_com_map[POWER]=67; //发射功率 + g_com_map[IMU_THRES]=2; + g_com_map[NOMOVESLEEP_TIME]=120; //静止休眠2分钟 + g_com_map[MOTOR_ENABLE]=1; //震动电机使能 + g_com_map[IMU_ENABLE]=1; //静止休眠使能 + + g_com_map[CNT_RESTART]=0; + g_com_map[CNT_REBOOT]=0; + g_com_map[CNT_UPDATE]=0; + g_com_map[MOTOR_ONTIME_INDEX]=10; + g_com_map[NERA_FREQUENCY]=5;//默认切换到5hz将标签 + + g_com_map[TCP_IP_0]=0x111; + g_com_map[TCP_IP_0]=0x198; + g_com_map[TCP_IP_0]=0x60; + g_com_map[TCP_IP_0]=0x6; + g_com_map[TCP_IP_0]=1234; + g_com_map[HEIGHTOFFEST_INDEX]=0; - save_com_map_to_flash(); - } + save_com_map_to_flash(); + } + + } +uint32_t check_tag_id_authorization_list_num(void) +{ + uint32_t count = 0; + + for (uint32_t i = 0; i < AUTHORIZATION_NUM; i++) { + if (tag_id_authorization_list[i] != 0xffffffff&&tag_id_authorization_list[i] != 0) { + count++; + } + } + + return count; +} void parameter_init_anchor(void) { - flash_open(FLASH_ID0,NULL); - //FLASH_Read(FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, (COM_MAP_SIZE<<1));MK8000修改 - flash_read(FLASH_ID0, FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, sizeof(g_com_map)); - if(g_com_map[0] != 0x55AA)//第一次没有任何数据的话就默认这个 - { - g_com_map[0] = 0x55AA; - g_com_map[DEV_ID] =0x1234;//DEFAULT_DEV_ID; //默认设备ID + flash_open(FLASH_ID0,NULL); + //FLASH_Read(FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, (COM_MAP_SIZE<<1));MK8000修改 + flash_read(FLASH_ID0, FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, sizeof(g_com_map)); + if(g_com_map[0] != 0x55AA)//第一次没有任何数据的话就默认这个 + { + g_com_map[0] = 0x55AA; + g_com_map[DEV_ID] =0x1234;//DEFAULT_DEV_ID; //默认设备ID - g_com_map[COM_INTERVAL]=500; //频率2HZ - g_com_map[MAX_REPORT_ANC_NUM]=10; - g_com_map[GROUP_ID]=0; - g_com_map[DIST_OFFSET]=-31; - - g_com_map[DEV_ROLE] =0x0; //基站 + g_com_map[COM_INTERVAL]=200; //频率2HZ + g_com_map[MAX_REPORT_ANC_NUM]=10; + g_com_map[GROUP_ID]=0; + g_com_map[DIST_OFFSET]=-31; - - g_com_map[HEARTBEAT]=0; - - g_com_map[POWER]=67; //发射功率 - g_com_map[IMU_THRES]=2; - g_com_map[NOMOVESLEEP_TIME]=120; //静止休眠2分钟 - g_com_map[MOTOR_ENABLE]=1; //震动电机使能 - g_com_map[IMU_ENABLE]=1; //静止休眠使能 - - g_com_map[CNT_RESTART]=0; - g_com_map[CNT_REBOOT]=0; - g_com_map[CNT_UPDATE]=0; - g_com_map[MODBUS_MODE]=0; - g_com_map[ACTIVE_INDEX]=0; + g_com_map[DEV_ROLE] =0x0; //基站 + + g_com_map[HEARTBEAT]=0; + + g_com_map[POWER]=67; //发射功率 + g_com_map[IMU_THRES]=2; + g_com_map[NOMOVESLEEP_TIME]=120; //静止休眠2分钟 + g_com_map[MOTOR_ENABLE]=1; //震动电机使能 + g_com_map[IMU_ENABLE]=1; //静止休眠使能 + + g_com_map[CNT_RESTART]=0; + g_com_map[CNT_REBOOT]=0; + g_com_map[CNT_UPDATE]=0; + g_com_map[MODBUS_MODE]=0; + g_com_map[NERA_FREQUENCY]=5;//默认切换到5hz将标签 + + g_com_map[TCP_IP_0]=0x111; + g_com_map[TCP_IP_1]=0x198; + g_com_map[TCP_IP_2]=0x60; + g_com_map[TCP_IP_3]=0x6; + g_com_map[TCP_PORT]=0x1234; + g_com_map[HEIGHTOFFEST_INDEX]=0; - save_com_map_to_flash(); - } + save_com_map_to_flash(); + } + //新增上电获取授权标签列表 + flash_read(FLASH_ID0, FLASH_Authorization_MAP, (uint8_t*)&tag_id_authorization_list, sizeof(tag_id_authorization_list));//从flash中拿出来授权表 + tag_id_authorization_list_num=check_tag_id_authorization_list_num();//获取实际有效长度减少轮训开销 } \ No newline at end of file -- Gitblit v1.9.3