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)
{
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;
+
}