自动ota优化 1384/2
authorhcj <1224667075@qq.com>
Mon, 11 Nov 2024 08:17:43 +0000 (16:17 +0800)
committerhcj <1224667075@qq.com>
Mon, 11 Nov 2024 08:17:43 +0000 (16:17 +0800)
code/sdk/application/wearable/auto_ota/auto_ota_service.c
code/sdk/application/wearable/auto_ota/auto_ota_service.h
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp
code/sdk/application/wearable/service/msg_center/src/ota/msg_center_ota.cpp

index ffa79a8..c7c743c 100644 (file)
@@ -31,13 +31,13 @@ extern "C" {
 #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) /* 客户可定制 */
@@ -125,7 +125,7 @@ bool auto_ota_dev_found(uint8_t *addr)
     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);
@@ -274,7 +274,16 @@ void AT_auto_ota_add_node_to_found_dev_list(uint8_t *char_addr)
 
     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 */
+    }
 }
 
 
@@ -369,12 +378,17 @@ static bool auto_ota_get_top_dev_to_connect(void)
                 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;
 }
 
@@ -419,7 +433,7 @@ void write_ver_txt(uint8_t V_1,uint8_t V_2,uint8_t V_3)
 
 }
 
-static bool auto_ota_upg_check(void)
+bool auto_ota_upg_check(void)
 {
     errcode_t ret = ERRCODE_SUCC;
 
@@ -462,6 +476,8 @@ static bool auto_ota_upg_check(void)
         return false;
     }
 
+    init_ota_spp_TRANSFER_timer();
+
     free(dst_ver);
     dst_ver = NULL;
     return true;
@@ -519,10 +535,16 @@ bool auto_ota_spp_connect(const char *spp_uuid, const bd_addr_t *addr)
         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) {
@@ -539,6 +561,7 @@ static void auto_ota_acl_state_changed_callback(const bd_addr_t *bd_addr, gap_ac
     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",
@@ -547,6 +570,7 @@ static void auto_ota_acl_state_changed_callback(const bd_addr_t *bd_addr, gap_ac
         }
         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);
@@ -556,6 +580,20 @@ static void auto_ota_acl_state_changed_callback(const bd_addr_t *bd_addr, gap_ac
         (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)
@@ -610,6 +648,89 @@ void auto_ota_task_init(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)
 {
@@ -617,6 +738,7 @@ void auto_ota_task_main(void)
 
     auto_ota_dev_init();
     auto_ota_task_init();
+    
 
     if (auto_ota_enable_bt() != ERRCODE_SUCC) {
         return;
@@ -638,16 +760,18 @@ void auto_ota_task_main(void)
         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 */
index 94cb52e..92a2c64 100644 (file)
@@ -20,11 +20,20 @@ void auto_ota_dev_add(uint8_t *addr);
 bool auto_ota_dev_del(uint8_t *addr);
 void auto_ota_dev_show(void);
 void auto_ota_task_main(void);
+void add_need_ota_addrss(char *str);
 
 void AT_auto_ota_add_node_to_found_dev_list(uint8_t *char_addr);
 
 void write_ver_txt(uint8_t V_1,uint8_t V_2,uint8_t V_3);
 
+
+bool auto_ota_upg_check(void);
+
+
+void stop_spp_timer(void);
+
+void init_ota_spp_TRANSFER_timer(void);
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index 9b5af9e..feb1237 100644 (file)
@@ -173,8 +173,13 @@ static int bluetooth_init_all(void)
     BtInitCallBacks();\r
     uapi_pbap_pce_reg_callback();\r
     BtA2dpInit();\r
-  \r
 \r
+    if(uapi_dev_runtime_get_safemode_flag())\r
+    {\r
+        uapi_dev_runtime_atuoota_status_status(1);\r
+        BtInitSpp();\r
+    }\r
+   \r
     /*******************ble init ****************/\r
     wrapper_ble_register();\r
 #ifdef SUPPORT_ALIPAY_SEC\r
@@ -803,7 +808,7 @@ void BtGapPairStatusChangedCallback(const bd_addr_t *bdAddr, int status)
     {\r
         return;\r
     }\r
-    \r
+\r
     if ((gap_get_device_class(bdAddr) & 0x200) != 0) \r
     {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapPairStatusChangedCallback: Mobile Phone Device");\r
@@ -813,7 +818,7 @@ void BtGapPairStatusChangedCallback(const bd_addr_t *bdAddr, int status)
         if(cm_custom_ble_service_on_flag() && !get_ble_pair()&& (status == GAP_PAIR_PAIRED))\r
         {\r
             send_pair_succ((bd_addr_t*)bdAddr);\r
-            \r
+\r
             hand_watch_first_time_Paired();\r
 \r
             set_br_pair(1);\r
index 5c0f6a3..f4db194 100644 (file)
@@ -100,8 +100,8 @@ bool SafeModeManagerPresenter::OnClick(UIView &view, const ClickEvent &event) {
     static int sppinit=0;
     if (sppinit == 0)
     {
-      BtInitSpp();
-      uapi_dev_runtime_atuoota_status_status(1);
+      //BtInitSpp();
+     
       sppinit = 1;
     } 
   }
index c0af26c..3cd6842 100644 (file)
@@ -103,9 +103,9 @@ void SafeModeManagerView::InitView() {
       {{&backgroundBLE_, {43, 120}},
        {&btnBLE_, {245, 120}, BLE_OTA},
        {&labelBLEStatus_, "BLE OTA", {90, 153}}},
-      {{&backgroundAutoOTA_, {43, 0}},
-       {&btnAutoOTA_, {245, 0}, AUTO_OTA},
-       {&labelAutoOTAStatus_, "Auto OTA", {90, 0}}},
+      // {{&backgroundAutoOTA_, {43, 0}},
+      //  {&btnAutoOTA_, {245, 0}, AUTO_OTA},
+      //  {&labelAutoOTAStatus_, "Auto OTA", {90, 0}}},
       {{&backgroundFactoryReset_, {43, 0}},
        {&btnFactoryReset_, {245, 0}, FACTORY_RESET_SAFE},
        {&labelFactoryResetStatus_, "Factory Reset", {90, 0}}},
index 12c458b..75bc531 100644 (file)
@@ -277,6 +277,11 @@ errcode_t msg_center_ota_rec_upg_check_result(uint8_t cmd_id, uint8_t type, void
     uint8_t upg_check_result = *tlv_payload;
 
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "upg_check_result = %d\r\n", upg_check_result);
+    
+    #ifdef SUPPORT_AUTO_OTA
+        stop_spp_timer();
+    #endif
+
     if (upg_check_result) {
         msg_center_ota_upgrade_start();
     } else {