#endif
#define AUTO_OTA_RETRY_TIMES 5
-#define AUTO_OTA_SEM_TIMEOUT (60*60*1000) /* 等待信号量超时时间,考虑资源大包传输时间长场景 */
+#define AUTO_OTA_SEM_TIMEOUT (60*10*1000) /* 等待信号量超时时间,考虑资源大包传输时间长场景 */
#define AUTO_OTA_DELAY_MS 100
#define AUTO_OTA_SPP_TASK_STACK_SIZE 2048
#define AUTO_OTA_SPP_TASK_PRI 20
#define ADDR_MAC_LEN 6
#define AUTO_OTA_RECORD_DEV_MAX_NUM 200 /* 设计成客户可定制 */
-#define AUTO_OTA_SCAN_WAIT_TIME (25*1000) /* 客户可定制 */
+#define AUTO_OTA_SCAN_WAIT_TIME (5*1000) /* 客户可定制 */
#define AUTO_OTA_UPDATE_RSSI_WAIT_TIME (20*1000) /* 客户可定制 */
#define AUTO_OTA_INQUERY_DEV_NUM 20 /* 客户可定制 */
#define AUTO_OTA_OPRATE_DELAY_MS (2*1000) /* 客户可定制 */
for (uint16_t i = 0; i < AUTO_OTA_RECORD_DEV_MAX_NUM; i++) {
if (g_auto_ota_record_dev[i].has_been_updated == 1 &&
memcmp(g_auto_ota_record_dev[i].addr, addr, ADDR_MAC_LEN) == 0) {
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "no need to record dev_mac: ****%02x%02x%02x%02x\r\n",
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "no need to record dev_mac: ****%02x%02x%02x%02x\r\n",
g_auto_ota_record_dev[i].addr[3], g_auto_ota_record_dev[i].addr[2], g_auto_ota_record_dev[i].addr[1],
g_auto_ota_record_dev[i].addr[0]);
WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "taken index = %d\r\n", i);
node->cod = cod;
node->rssi = 0xffff;
- osal_list_add_tail((struct osal_list_head *)node, &g_auto_ota_found_dev_list_head);
+
+ if (auto_ota_dev_found(bd_addr.addr) != true)
+ {
+ osal_list_add_tail((struct osal_list_head *)node, &g_auto_ota_found_dev_list_head);
+ }
+ else
+ {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "%02X:%02X:%02X:%02X:%02X:%02X".bd_addr.addr[5].bd_addr.addr[4],bd_addr.addr[3],
+ // bd_addr.addr[2],bd_addr.addr[1],bd_addr.addr[0]); /* addr下标 0 1 2 3 */
+ }
}
osDelay(100);
} else {
osDelay(AUTO_OTA_ACL_CONN_DELAY);
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "to connect acl succ\r\n");
+ if(bt_is_acl_connected(&(dev_info->bd_addr))==false)
+ {
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "to connect acl fail\r\n");
+ return false;
+ }
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "to connect acl succ\r\n");
return true;
}
}
}
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "no found_device\n");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "no found_device\n");
return false;
}
}
-static bool auto_ota_upg_check(void)
+bool auto_ota_upg_check(void)
{
errcode_t ret = ERRCODE_SUCC;
return false;
}
+ init_ota_spp_TRANSFER_timer();
+
free(dst_ver);
dst_ver = NULL;
return true;
current_time = uapi_tcxo_get_ms();
if (current_time - start_time > AUTO_OTA_SPP_RECONN_TIMEOUT || is_connected == true) {
WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "spp connect %s.\r\n", is_connected == true ? "Succ" : "Fail");
+ //如果连接spp失败则记录该表
+ if(is_connected==false)
+ {
+ auto_ota_dev_add(addr->addr);
+
+ }
break;
}
}
-
+ osDelay(AUTO_OTA_OPRATE_DELAY_MS);
/* 升级版本号校验 */
bool res = auto_ota_upg_check();
if (res != true) {
WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "addr: ****%02x%02x%02x%02x",
bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0]); /* mac下标 0 1 2 3 */
char uuid[] = {"1101"};
+
if (state == GAP_ACL_STATE_CONNECTED) {
if (g_anti_back_link_flag == true) {
WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "anti back link addr: ****%02x%02x%02x%02x",
}
bool res = auto_ota_spp_connect(uuid, bd_addr);
+
WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "auto_ota_spp_connect %d", res);
if (res != true) {
(void)osSemaphoreRelease(g_auto_ota_transmit_done_sem);
(void)memcpy_s(g_auto_ota_mac_tmp, ADDR_MAC_LEN, (const char *)bd_addr->addr, ADDR_MAC_LEN);
g_anti_back_link_flag = true;
}
+ else if(state == GAP_ACL_STATE_DISCONNECTED && memcmp((void*)g_auto_ota_mac_tmp,(void*)bd_addr->addr, ADDR_MAC_LEN)== 0)
+ {
+ //if (res != true)
+ // if (g_anti_back_link_flag == true) {
+ // WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "anti back link addr: ****%02x%02x%02x%02x",
+ // bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0]); /* mac下标 0 1 2 3 */
+ // return;
+ // }
+ // if(g_anti_back_link_flag==true)
+ // {
+ // (void)osSemaphoreRelease(g_auto_ota_transmit_done_sem);
+ // return;
+ // }
+ }
}
void auto_ota_gap_register_callbacks(void)
return;
}
}
+// ""
+//100001061128
+static uint8_t address_num=0;
+
+char *ota_addrss[50]={0};
+// char * str= "0f0001061128";
+// "D60001061128","500001061128"};
+
+void add_need_ota_addrss(char *str)
+{
+ ota_addrss[address_num]=(char *)malloc(13);
+ memset_s(ota_addrss[address_num],13,0,strlen(str)+1);
+ memcpy_s( ota_addrss[address_num],13,str,strlen(str)+1);
+ address_num++;
+}
+void init_addrlist(void)
+{
+ for (int i = 0; i <address_num; i++)
+ {
+ if(strlen(ota_addrss[i])==12)
+ AT_auto_ota_add_node_to_found_dev_list((uint8_t *)ota_addrss[i]);
+ else
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "ota_addrss is illegality\r\n");
+ }
+
+}
+
+static osTimerId_t ota_spp_TRANSFER_timer=NULL;
+
+static uint8_t Release_spp_TRANSFER_timer_flag=0;
+static void spp_transfer_Timer_CallBack(int data)
+{
+ if(osSemaphoreGetCount(g_auto_ota_transmit_done_sem)==0)
+ {
+ Release_spp_TRANSFER_timer_flag++;
+ if(Release_spp_TRANSFER_timer_flag>=3)
+ {
+ Release_spp_TRANSFER_timer_flag=0;
+ (void)osSemaphoreRelease(g_auto_ota_transmit_done_sem);
+ osTimerStop(ota_spp_TRANSFER_timer);
+ osTimerDelete(ota_spp_TRANSFER_timer);
+ ota_spp_TRANSFER_timer=NULL;
+
+ auto_ota_dev_add(g_auto_ota_mac_tmp);
+
+ }
+
+ }
+
+}
+
+void stop_spp_timer(void)
+{
+ osTimerStop(ota_spp_TRANSFER_timer);
+ osTimerDelete(ota_spp_TRANSFER_timer);
+ ota_spp_TRANSFER_timer=NULL;
+
+ return;
+}
+
+void init_ota_spp_TRANSFER_timer(void)
+{
+
+ osTimerStop(ota_spp_TRANSFER_timer);
+ osTimerDelete(ota_spp_TRANSFER_timer);
+ ota_spp_TRANSFER_timer=NULL;
+
+ Release_spp_TRANSFER_timer_flag=0;
+
+ uint32_t tick;
+ osStatus_t retTimer;
+
+ ota_spp_TRANSFER_timer = osTimerNew((osTimerFunc_t)spp_transfer_Timer_CallBack, osTimerPeriodic, NULL, NULL);
+ tick =3000;// osMs2Tick(1000);
+ retTimer = osTimerStart(ota_spp_TRANSFER_timer, tick);
+ if (retTimer != osOK && ota_spp_TRANSFER_timer != NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer);
+ osTimerDelete(ota_spp_TRANSFER_timer);
+ ota_spp_TRANSFER_timer = NULL;
+ return ;
+ }
+}
+
void auto_ota_task_main(void)
{
auto_ota_dev_init();
auto_ota_task_init();
+
if (auto_ota_enable_bt() != ERRCODE_SUCC) {
return;
osDelay(AUTO_OTA_OPRATE_DELAY_MS);
WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "gap_remove_all_pairs ok and auto_ota_bt_start_discovery\r\n");
/* scan */
- if (auto_ota_bt_start_discovery() != true) {
- osDelay(AUTO_OTA_DELAY_MS);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "start discovery fail, auto retry...\r\n");
- continue;
- }
-
+ // if (auto_ota_bt_start_discovery() != true) {
+ // osDelay(AUTO_OTA_DELAY_MS);
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "start discovery fail, auto retry...\r\n");
+ // continue;
+ // }
+
+ auto_ota_reset_found_dev_list();
osDelay(AUTO_OTA_SCAN_WAIT_TIME); /* 保证能扫到设备 */
+ init_addrlist();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "gap_br_cancel_discovery \r\n");
- (void)gap_br_cancel_discovery();
- osDelay(AUTO_OTA_UPDATE_RSSI_WAIT_TIME);
+ //(void)gap_br_cancel_discovery();
+ //osDelay(AUTO_OTA_UPDATE_RSSI_WAIT_TIME);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_MSG_CENTER, "auto_ota_sort_found_dev_list \r\n");
auto_ota_sort_found_dev_list(); /* 根据rssi降序排序 */
/* connect */