CH579收到藍(lán)牙命令后,調(diào)用OTA_IAP_SendData函數(shù),然后調(diào)用SYS_ResetExecute,此時(shí)手機(jī)無(wú)法收到藍(lán)牙回復(fù)的包,ch579先重啟了。如果在回調(diào)函數(shù)OTA_IAPReadDataComplete里再調(diào)用SYS_ResetExecute,還是無(wú)法確保ch579已經(jīng)發(fā)送藍(lán)牙結(jié)束,依然是ch579重啟被先執(zhí)行了,請(qǐng)問(wèn)如何才能確保ch579已經(jīng)發(fā)送藍(lán)牙包成功了,然后再重啟ch579?
你好,在使用backup備份方式進(jìn)行升級(jí)時(shí),是不需要進(jìn)行調(diào)用復(fù)位的,因?yàn)轭~外有一套藍(lán)牙的服務(wù)進(jìn)行接收待升級(jí)的數(shù)據(jù)了。
如果需要自行管理,在發(fā)送完成之后會(huì)有回調(diào)函數(shù)OTA Send Comp的打印,可以根據(jù)它進(jìn)行觀察發(fā)送數(shù)據(jù)完成。
現(xiàn)在我們?cè)谶@個(gè)用例里增加了一個(gè)私有命令,手機(jī)發(fā)送命令給ch579,讓ch579保存這個(gè)命令, ch579收到命令后,發(fā)送1個(gè)字節(jié)的返回值例如OTA_IAP_SendCMDDealSta(0x00);,然后需要重啟調(diào)用SYS_ResetExecute,此時(shí)手機(jī)一直無(wú)法收到ch579發(fā)送的字節(jié),就重啟了。我再OTA_IAPReadDataComplete函數(shù)里再調(diào)用SYS_ResetExecute()函數(shù),也還是無(wú)法把這個(gè)字節(jié)0x00正常發(fā)送出來(lái),因?yàn)槭謾C(jī)一直收不到這個(gè)命令。但是如果我不調(diào)用SYS_ResetExecute()函數(shù),其他代碼不動(dòng),手機(jī)是可以收到0x00這個(gè)返回值的。
你好,請(qǐng)問(wèn)代碼里如何確保ch579已經(jīng)通過(guò)藍(lán)牙發(fā)送數(shù)據(jù)成功了?我們希望發(fā)送數(shù)據(jù)成功后,調(diào)用SYS_ResetExecute()重啟MCU。
您好,OTA_IAP_SendCMDDealSta(0x00);這邊是實(shí)現(xiàn)的功能是將數(shù)據(jù)放到一個(gè)數(shù)據(jù)等待主機(jī)去讀,OTA_IAPReadDataComplete是數(shù)組內(nèi)容產(chǎn)生變化的回調(diào),所以需要等主機(jī)讀完才可以復(fù)位的,主機(jī)發(fā)起讀,程序會(huì)進(jìn)入
static?bStatus_t?OTAProfile_ReadAttrCB(?uint16?connHandle,?gattAttribute_t?*pAttr,? ????????????????????????????uint8?*pValue,?uint16?*pLen,?uint16?offset,?uint16?maxLen,uint8?method??) { bStatus_t?status?=?SUCCESS; if?(?pAttr->type.len?==?ATT_BT_UUID_SIZE?) { //?16-bit?UUID uint16?uuid?=?BUILD_UINT16(?pAttr->type.uuid[0],?pAttr->type.uuid[1]); switch?(?uuid?) { case?OTAPROFILE_CHAR_UUID: { *pLen?=?0; if(?OTAProfileReadLen?) { *pLen?=?OTAProfileReadLen; tmos_memcpy(?pValue,?OTAProfileReadBuf,?OTAProfileReadLen?); OTAProfileReadLen?=?0; if(?OTAProfile_AppCBs?&&?OTAProfile_AppCBs->pfnOTAProfileRead?) { OTAProfile_AppCBs->pfnOTAProfileRead(OTAPROFILE_CHAR); } } break; } default: { //?Should?never?get?here!?(characteristics?3?and?4?do?not?have?read?permissions) *pLen?=?0; status?=?ATT_ERR_ATTR_NOT_FOUND; break; } } } else { //?128-bit?UUID *pLen?=?0; status?=?ATT_ERR_INVALID_HANDLE; } return?(?status?); }
可以在這個(gè)函數(shù)中去處理。