From 42e9f7d1cb64fbc81d11ad48646dad4dd65a5dee Mon Sep 17 00:00:00 2001 From: SnickerSun Date: Tue, 26 Mar 2024 19:48:03 +0800 Subject: [PATCH] =?utf8?q?=E5=BC=80=E6=9C=BA=E5=88=9D=E5=A7=8B=E5=8C=96?= =?utf8?q?=E8=93=9D=E7=89=99=E5=9C=B0=E5=9D=80=E5=92=8C=E8=AE=BE=E5=A4=87?= =?utf8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../brandy/brandy_standard/thread_pri_init.c | 1 + .../drivers/peripheral/utils/custom_utils.c | 306 +++++++++--------- 2 files changed, 159 insertions(+), 148 deletions(-) diff --git a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c index ef82258c9..1c90a9199 100755 --- a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c +++ b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c @@ -321,6 +321,7 @@ static void thread_main(const void *unused) #if DSP_EXIST == YES audio_init(); #endif + init_btaddr_btname(); board_version_class_print(); uapi_watchdog_kick(); thread_init(); diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index f45a257bb..06e466204 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils.c @@ -109,10 +109,9 @@ uint32_t zh_set_sn(uint8_t *buf_sn, uint32_t len_sn) return nv_ret_value; } -// extern "C" { - uint32_t mcu_os_sys_reset(uint8_t *para, uint32_t para_len); - void uapi_sys_shipmode(uint32_t arg); -// } + +extern uint32_t mcu_os_sys_reset(uint8_t *para, uint32_t para_len); +extern void uapi_sys_shipmode(uint32_t arg); void uapi_poweroff_device(void) { @@ -455,171 +454,182 @@ errcode_t uapi_get_btaddr(uint8_t *buf_btaddr, uint32_t *len_btaddr) return ERRCODE_SUCC; } -errcode_t init_btaddr_btname(void) + +errcode_t uapi_get_nv_btaddr(uint8_t *buf_btaddr, uint32_t *len_btaddr) { - bd_addr_t addr_info; - errcode_t res; - res = enable_bt_stack(); - if (res != 0) { - printf("bt enable fail ret 0x%X\r\n",res); +#ifdef SUPPORT_NV + if( buf_btaddr == NULL || len_btaddr == NULL || *len_btaddr == 0) return ERRCODE_FAIL; - } else { - printf("bt enable ok\r\n"); - } - - - #if 1 - - #define BT_MAC_LEN 6 - unsigned int len = BT_MAC_LEN; - unsigned char addr[BT_MAC_LEN] = {0}; - //获取蓝牙名 - unsigned char namelen = 248; - unsigned char name[248] = {0}; - srand(time(0)); - res = bluetooth_get_local_addr(&addr[0], len); - if (res == 0) { - printf("local_addr : ******%02x%02x%02x\n", addr[3], addr[4], addr[5]); - } else { - printf("bluetooth_get_local_addr err 0x%X\r\n",res); - // return ERRCODE_FAIL; + uint16_t len = 0; + btsrv_local_device_info_t btinfo = {0}; + errcode_t nvRet = uapi_nv_read(NV_ID_BTSRV_LOCAL_DEV_INFO, sizeof(btsrv_local_device_info_t), &len, &btinfo); + if (nvRet != ERRCODE_SUCC) { + *len_btaddr = 0; + return nvRet; } + uint32_t max_input_len = *len_btaddr; + memcpy_s(buf_btaddr,max_input_len,btinfo.bd_addr,sizeof(btinfo.bd_addr)); + *len_btaddr = sizeof(btinfo.bd_addr); + printf("get nv local_addr : ******%02x%02x%02x\n", buf_btaddr[2], buf_btaddr[1], buf_btaddr[0]); - //如果 - if ( addr[0] == 0x59 && - addr[1] == 0x69 && - addr[2] == 0x85 && - addr[3] == 0x06 && - addr[4] == 0x11 && - addr[5] == 0x28 ) - { - //默认是:281106856959 - addr[3] = rand() % 0xFF; - addr[4] = rand() % 0xFF; - addr[5] = rand() % 0xFF; - - memset(name,0,sizeof(name)); - sprintf((char*)name,"%02X%02X%02X%02X%02X%02X",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]); - printf("creat new local_addr : ******%02x%02x%02x , %s\n", addr[3], addr[4], addr[5],name); - - unsigned char t ; - t=addr[0]; - addr[0]=addr[5]; - addr[5]=t; - t=addr[1]; - addr[1]=addr[4]; - addr[4]=t; - t=addr[2]; - addr[2]=addr[3]; - addr[3]=t; - res = bluetooth_set_local_addr(addr, sizeof(addr)); - if (res == 0) { - printf("bluetooth_set_local_addr OK\r\n"); - memset(name,0,sizeof(name)); - res = bluetooth_get_local_addr(&addr[0], len); - if (res == 0) { - printf("check local_addr : ******%02x%02x%02x\n", addr[3], addr[4], addr[5]); - } else { - printf("check bluetooth_get_local_addr err 0x%X\r\n",res); - // return ERRCODE_FAIL; - } - printf("bluetooth_set_local_addr check name %s \r\n",name); - - } else { - printf("bluetooth_set_local_addr fail\r\n"); - return ERRCODE_FAIL; - } - } +#endif - memset(name,0,sizeof(name)); - res = bluetooth_get_local_name(name, &namelen); - if (res == 0) { - char str[256] = "^btname:"; - strcat_s(str, strlen(str) + strlen((char*)name), (char*)name); - printf("%s\r\n", &str[0]); - printf("name: %s, length: %d\n", name, namelen); - // return ERRCODE_SUCC; - } else { - printf("bluetooth_get_local_name ret = 0x%X\n",res); - // return ERRCODE_FAIL; - } + return ERRCODE_SUCC; +} +errcode_t uapi_set_nv_btaddr(uint8_t *buf_btaddr, uint32_t len_btaddr) +{ +#ifdef SUPPORT_NV + if( buf_btaddr == NULL || len_btaddr == 0) + return ERRCODE_FAIL; + + btsrv_local_device_info_t btinfo = {0}; + uint16_t len = 0; - if(strcmp((const char*)name,"WatchSoar")==0) - { - memset(name,0,sizeof(name)); - sprintf((char*)name,"WatchSoar_%02X%02X",addr[4],addr[5]); - unsigned char btname_len = strlen((const char*)name)+1; - res = bluetooth_set_local_name(name,btname_len); - printf("set new bt name %s , ret 0x%X\n",name,res); - }else{ - printf("current bt name %s\n",name); + /**先读取NV,再修改addr值*/ + errcode_t nvRet = uapi_nv_read(NV_ID_BTSRV_LOCAL_DEV_INFO, sizeof(btsrv_local_device_info_t), &len, &btinfo); + if (nvRet != ERRCODE_SUCC) { + return nvRet; } -#else - res = gap_ble_get_local_addr(&addr_info); + + + uint16_t key_len= sizeof(btinfo.bd_addr); + memcpy_s(btinfo.bd_addr,key_len,buf_btaddr,len_btaddr); + nvRet = uapi_nv_write(NV_ID_BTSRV_LOCAL_DEV_INFO, &btinfo, sizeof(btsrv_local_device_info_t)); + if (nvRet != ERRCODE_SUCC) { + /* ERROR PROCESS */ + + return nvRet; + } + printf("set nv local_addr : ******%02x%02x%02x\n", buf_btaddr[2], buf_btaddr[1], buf_btaddr[0]); - if ( addr_info.addr[0] == 0x59 && - addr_info.addr[1] == 0x69 && - addr_info.addr[2] == 0x85 && - addr_info.addr[3] == 0x06 && - addr_info.addr[4] == 0x11 && - addr_info.addr[5] == 0x28 ) - { - addr_info.addr[0] = rand() % 0xFF; - addr_info.addr[4] = rand() % 0xFF; - addr_info.addr[5] = rand() % 0xFF; - addr_info.type = 6; - res = gap_ble_set_local_addr(&addr_info); - - printf("init new bt addr %02x:%02x:%02x:%02x:%02x:%02x ret 0x%X\n", - addr_info.addr[5], addr_info.addr[4], addr_info.addr[3], - addr_info.addr[2], addr_info.addr[1], addr_info.addr[0],res); - }else{ - printf("current bt addr %02x:%02x:%02x:%02x:%02x:%02x\n", - addr_info.addr[5], addr_info.addr[4], addr_info.addr[3], - addr_info.addr[2], addr_info.addr[1], addr_info.addr[0]); - } +#endif - uint8_t ble_name[20] = {0}; - uint8_t ble_name_len = 20; - res = gap_ble_get_local_name(ble_name, &ble_name_len); + return ERRCODE_SUCC; +} - if(strcmp((const char*)ble_name,"WatchSoar")==0) - { - memset(ble_name,0,sizeof(ble_name)); - sprintf((char*)ble_name,"WatchSoar_%02X%02X",addr_info.addr[4],addr_info.addr[5]); - ble_name_len = strlen((const char*)ble_name)+1; - res = gap_ble_set_local_name(ble_name,ble_name_len); - printf("set new bt name %s , ret 0x%X\n",ble_name,res); - }else{ - printf("current bt name %s\n",ble_name); + +errcode_t uapi_get_nv_btname(uint8_t *buf_btname, uint32_t *len_btname) +{ +#ifdef SUPPORT_NV + if( buf_btname == NULL || len_btname == NULL || *len_btname == 0) + return ERRCODE_FAIL; + + uint16_t len = 0; + btsrv_local_device_info_t btinfo = {0}; + errcode_t nvRet = uapi_nv_read(NV_ID_BTSRV_LOCAL_DEV_INFO, sizeof(btsrv_local_device_info_t), &len, &btinfo); + if (nvRet != ERRCODE_SUCC) { + *len_btname = 0; + return nvRet; } + uint32_t max_input_len = *len_btname; + *len_btname = strlen((char*)btinfo.name); + memcpy_s(buf_btname,max_input_len,btinfo.name,*len_btname); + printf("get nv local_name : %s\n", buf_btname); + #endif - char uuid[] = "1101"; - char sppname[] = "COM1"; - uint8_t name_len = strlen((const char*)sppname) + 1; - uint8_t server_id = 0; - /* 创建spp */ - printf( "create spp server uuid=%s name=%s name_len=%d\n", uuid, sppname, name_len); - BtSppServerCreate(uuid, sppname, name_len); - BtSppServerAccept(server_id); + return ERRCODE_SUCC; +} - return ERRCODE_SUCC; -} -errcode_t disable_bt_service(void) +errcode_t uapi_set_nv_btname(uint8_t *buf_btname, uint32_t len_btname) { - errcode_t res = disable_bt_stack(); - if (res != 0) { - printf("bt disable fail\r\n"); + +#ifdef SUPPORT_NV + if( buf_btname == NULL || len_btname == 0) return ERRCODE_FAIL; - } else { - printf("bt disable ok\r\n"); - return ERRCODE_SUCC; + + btsrv_local_device_info_t btinfo = {0}; + uint16_t len = 0; + + /**先读取NV,再修改addr值*/ + errcode_t nvRet = uapi_nv_read(NV_ID_BTSRV_LOCAL_DEV_INFO, sizeof(btsrv_local_device_info_t), &len, &btinfo); + if (nvRet != ERRCODE_SUCC) { + return ERRCODE_FAIL; + } + + + uint16_t key_len=sizeof(btinfo.name); + memcpy_s(btinfo.name,key_len,buf_btname,len_btname); + nvRet = uapi_nv_write(NV_ID_BTSRV_LOCAL_DEV_INFO, &btinfo, sizeof(btsrv_local_device_info_t)); + if (nvRet != ERRCODE_SUCC) { + /* ERROR PROCESS */ + + return ERRCODE_FAIL; + } + printf("set nv local_name : %s\n", btinfo.name); + +#endif + return ERRCODE_SUCC; +} + + + + +errcode_t init_btaddr_btname(void) +{ + + errcode_t ret ; + srand(time(0)); + uint8_t bd_addr[BD_ADDR_LEN]={0}; + uint8_t name[BTSDK_DEVNAME_LEN]={0}; + uint32_t addrlen = sizeof(bd_addr); + ret = uapi_get_nv_btaddr(bd_addr,&addrlen); + if (ret != ERRCODE_SUCC) { + /* ERROR PROCESS */ + printf("uapi_get_nv_btaddr failed ret %d , addrlen %d\n",ret,addrlen); + return ERRCODE_FAIL; + } + //如果 281106856959 + if ( bd_addr[5] == 0x59 && + bd_addr[4] == 0x69 && + bd_addr[3] == 0x85 && + bd_addr[2] == 0x06 && + bd_addr[1] == 0x11 && + bd_addr[0] == 0x28 ) + { + //默认是:281106856959 + printf("是默认值,修改地址\n"); + bd_addr[0] = rand() % 0xFF; + bd_addr[1] = rand() % 0xFF; + bd_addr[2] = rand() % 0xFF; + printf("uapi_set_nv_btaddr : ******%02x%02x%02x\n", bd_addr[2], bd_addr[1], bd_addr[0]); + + ret = uapi_set_nv_btaddr(bd_addr, addrlen); + if (ret != ERRCODE_SUCC) { + /* ERROR PROCESS */ + printf("uapi_set_nv_btaddr failed ret %d\n",ret); + return ERRCODE_FAIL; + } + + } + + + uint32_t namelen = sizeof(name); + ret = uapi_get_nv_btname(name,&namelen); + if (ret != ERRCODE_SUCC) { + /* ERROR PROCESS */ + printf("uapi_get_nv_btname failed ret %d , namelen %d\n",ret,namelen); + return ERRCODE_FAIL; + } + + if ( strcmp((char*)name,"WatchSoar") == 0) + { + //默认是:WatchSoar + printf("是默认值,修改名称\n"); + sprintf_s((char*)(name),sizeof(name),"WatchSoar_%02X%02X",bd_addr[1],bd_addr[0]); + printf("uapi_set_nv_btname %s , namelen %d\n",name,namelen); + ret = uapi_set_nv_btname(name,strlen((char*)name)); + if (ret != ERRCODE_SUCC) { + /* ERROR PROCESS */ + printf("uapi_set_nv_btname failed ret %d , namelen %d\n",ret,namelen); + return ERRCODE_FAIL; + } } return ERRCODE_SUCC; + } -- 2.17.1