From 80095a3154bb462dc5daadbae71903b5480c52bc Mon Sep 17 00:00:00 2001 From: hcj <1224667075@qq.com> Date: Mon, 11 Nov 2024 16:17:43 +0800 Subject: [PATCH] =?utf8?q?=E8=87=AA=E5=8A=A8ota=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../wearable/auto_ota/auto_ota_service.c | 156 ++++++++++++++++-- .../wearable/auto_ota/auto_ota_service.h | 9 + .../nativeui/bluetooth/src/BluetoothModel.cpp | 11 +- .../src/SafeModeManagerPresenter.cpp | 4 +- .../src/SafeModeManagerView.cpp | 6 +- .../msg_center/src/ota/msg_center_ota.cpp | 5 + 6 files changed, 167 insertions(+), 24 deletions(-) diff --git a/code/sdk/application/wearable/auto_ota/auto_ota_service.c b/code/sdk/application/wearable/auto_ota/auto_ota_service.c index ffa79a818..c7c743c0e 100644 --- a/code/sdk/application/wearable/auto_ota/auto_ota_service.c +++ b/code/sdk/application/wearable/auto_ota/auto_ota_service.c @@ -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 =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 */ diff --git a/code/sdk/application/wearable/auto_ota/auto_ota_service.h b/code/sdk/application/wearable/auto_ota/auto_ota_service.h index 94cb52ed5..92a2c647b 100644 --- a/code/sdk/application/wearable/auto_ota/auto_ota_service.h +++ b/code/sdk/application/wearable/auto_ota/auto_ota_service.h @@ -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 } diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp index 9b5af9ea5..feb123781 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp @@ -173,8 +173,13 @@ static int bluetooth_init_all(void) BtInitCallBacks(); uapi_pbap_pce_reg_callback(); BtA2dpInit(); - + if(uapi_dev_runtime_get_safemode_flag()) + { + uapi_dev_runtime_atuoota_status_status(1); + BtInitSpp(); + } + /*******************ble init ****************/ wrapper_ble_register(); #ifdef SUPPORT_ALIPAY_SEC @@ -803,7 +808,7 @@ void BtGapPairStatusChangedCallback(const bd_addr_t *bdAddr, int status) { return; } - + if ((gap_get_device_class(bdAddr) & 0x200) != 0) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapPairStatusChangedCallback: Mobile Phone Device"); @@ -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)) { send_pair_succ((bd_addr_t*)bdAddr); - + hand_watch_first_time_Paired(); set_br_pair(1); diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp index 5c0f6a3e9..f4db1949d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp @@ -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; } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp index c0af26c34..3cd6842af 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp @@ -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}}}, diff --git a/code/sdk/application/wearable/service/msg_center/src/ota/msg_center_ota.cpp b/code/sdk/application/wearable/service/msg_center/src/ota/msg_center_ota.cpp index 12c458bda..75bc5310a 100644 --- a/code/sdk/application/wearable/service/msg_center/src/ota/msg_center_ota.cpp +++ b/code/sdk/application/wearable/service/msg_center/src/ota/msg_center_ota.cpp @@ -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 { -- 2.17.1