开机初始化蓝牙地址和设备名
authorSnickerSun <snickersun@163.com>
Tue, 26 Mar 2024 11:48:03 +0000 (19:48 +0800)
committerSnickerSun <snickersun@163.com>
Tue, 26 Mar 2024 11:48:03 +0000 (19:48 +0800)
code/sdk/application/brandy/brandy_standard/thread_pri_init.c
code/sdk/drivers/peripheral/utils/custom_utils.c

index ef82258..1c90a91 100755 (executable)
@@ -321,6 +321,7 @@ static void thread_main(const void *unused)
 #if DSP_EXIST == YES\r
     audio_init();\r
 #endif\r
+    init_btaddr_btname();\r
     board_version_class_print();\r
     uapi_watchdog_kick();\r
     thread_init();\r
index f45a257..06e4662 100644 (file)
@@ -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;
+
 }