Skip to content

Commit 1a51dfe

Browse files
committed
add thread br ota file generate and fix some issue
1 parent 9024489 commit 1a51dfe

File tree

4 files changed

+42
-40
lines changed

4 files changed

+42
-40
lines changed

config/esp32/components/chip/CMakeLists.txt

+17-8
Original file line numberDiff line numberDiff line change
@@ -345,8 +345,8 @@ endif()
345345

346346
set(args_gn "${CMAKE_CURRENT_BINARY_DIR}/args.gn")
347347
add_custom_command(OUTPUT "${args_gn}"
348-
COMMAND ${python}
349-
${CMAKE_CURRENT_LIST_DIR}/create_args_gn.py
348+
COMMAND ${python}
349+
${CMAKE_CURRENT_LIST_DIR}/create_args_gn.py
350350
"${CMAKE_BINARY_DIR}"
351351
"${idf_path}"
352352
"${CMAKE_CURRENT_LIST_DIR}/chip.c"
@@ -468,10 +468,19 @@ endif()
468468

469469
# Build Matter OTA image
470470
if (CONFIG_CHIP_OTA_IMAGE_BUILD)
471-
chip_ota_image(chip-ota-image
472-
INPUT_FILES ${BUILD_DIR}/${CMAKE_PROJECT_NAME}.bin
473-
OUTPUT_FILE ${BUILD_DIR}/${CMAKE_PROJECT_NAME}-ota.bin
474-
)
475-
# Adding dependecy as app target so that this runs after images are ready
476-
add_dependencies(chip-ota-image app)
471+
if (CONFIG_OPENTHREAD_BORDER_ROUTER AND CONFIG_AUTO_UPDATE_RCP)
472+
chip_ota_image(chip-ota-image
473+
INPUT_FILES ${BUILD_DIR}/ota_with_rcp_image
474+
OUTPUT_FILE ${BUILD_DIR}/ota_with_rcp_image-ota.bin
475+
)
476+
# Adding dependecy as app target so that this runs after images are ready
477+
add_dependencies(chip-ota-image gen_ota_image)
478+
else()
479+
chip_ota_image(chip-ota-image
480+
INPUT_FILES ${BUILD_DIR}/${CMAKE_PROJECT_NAME}.bin
481+
OUTPUT_FILE ${BUILD_DIR}/${CMAKE_PROJECT_NAME}-ota.bin
482+
)
483+
# Adding dependecy as app target so that this runs after images are ready
484+
add_dependencies(chip-ota-image app)
485+
endif()
477486
endif()

examples/thread-br-app/esp32/README.md

+3-9
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,6 @@ the Thread network.
9797

9898
### Generate OTA Firmware For BR
9999

100-
After enable the option `CONFIG_CREATE_OTA_IMAGE_WITH_RCP_FW` in menuconfig,
101-
will generate OTA image with rcp firmware in build process, named
102-
`ota_with_rcp_image` in build folder.
103-
104-
Then can add a Matter OTA header for the ota_with_rcp_image file.
105-
106-
```
107-
./ota_image_tool.py create -v 65521 -p 32768 --version 1 --version-str "v1.0" -da sha256 build/ota_with_rcp_image ota_with_rcp_image.ota
108-
```
100+
After enable the option `CONFIG_CREATE_OTA_IMAGE_WITH_RCP_FW` and
101+
`CONFIG_CHIP_OTA_IMAGE_BUILD` in menuconfig, will generate OTA image with rcp
102+
firmware, named `ota_with_rcp_image_ota.bin` in build folder.

src/platform/ESP32/OTAImageProcessorImpl.cpp

+20-21
Original file line numberDiff line numberDiff line change
@@ -281,26 +281,25 @@ esp_err_t OTAImageProcessorImpl::DeltaOTAWriteCallback(const uint8_t * buf, size
281281
#endif // CONFIG_ENABLE_DELTA_OTA
282282

283283
#if defined(CONFIG_AUTO_UPDATE_RCP) && defined(CONFIG_OPENTHREAD_BORDER_ROUTER)
284-
esp_err_t OTAImageProcessorImpl::ProcessRcpImage(intptr_t context, const uint8_t * buffer, uint32_t bufLen)
284+
esp_err_t OTAImageProcessorImpl::ProcessRcpImage(const uint8_t * buffer, uint32_t bufLen)
285285
{
286-
esp_err_t err = ESP_OK;
287-
auto * imageProcessor = reinterpret_cast<OTAImageProcessorImpl *>(context);
286+
esp_err_t err = ESP_OK;
288287

289-
if (!imageProcessor->mRcpDone)
288+
if (!this->mRcpFirmwareDownloaded)
290289
{
291290
size_t rcpOtaReceivedLen = 0;
292-
err = esp_rcp_ota_receive(imageProcessor->mRcpOtaHandle, buffer, bufLen, &rcpOtaReceivedLen);
291+
err = esp_rcp_ota_receive(this->mRcpOtaHandle, buffer, bufLen, &rcpOtaReceivedLen);
293292

294-
if (esp_rcp_ota_get_state(imageProcessor->mRcpOtaHandle) == ESP_RCP_OTA_STATE_FINISHED)
293+
if (esp_rcp_ota_get_state(this->mRcpOtaHandle) == ESP_RCP_OTA_STATE_FINISHED)
295294
{
296-
imageProcessor->mBrFirmwareSize = esp_rcp_ota_get_subfile_size(imageProcessor->mRcpOtaHandle, FILETAG_HOST_FIRMWARE);
297-
err = esp_ota_write(imageProcessor->mOTAUpdateHandle, buffer + rcpOtaReceivedLen, bufLen - rcpOtaReceivedLen);
298-
imageProcessor->mRcpDone = true;
295+
this->mBrFirmwareSize = esp_rcp_ota_get_subfile_size(this->mRcpOtaHandle, FILETAG_HOST_FIRMWARE);
296+
err = esp_ota_write(this->mOTAUpdateHandle, buffer + rcpOtaReceivedLen, bufLen - rcpOtaReceivedLen);
297+
this->mRcpFirmwareDownloaded = true;
299298
}
300299
}
301-
else if (imageProcessor->mBrFirmwareSize > 0)
300+
else if (this->mBrFirmwareSize > 0)
302301
{
303-
err = esp_ota_write(imageProcessor->mOTAUpdateHandle, buffer, bufLen);
302+
err = esp_ota_write(this->mOTAUpdateHandle, buffer, bufLen);
304303
}
305304
else
306305
{
@@ -369,9 +368,9 @@ void OTAImageProcessorImpl::HandlePrepareDownload(intptr_t context)
369368
#endif // CONFIG_ENABLE_ENCRYPTED_OTA
370369

371370
#if defined(CONFIG_AUTO_UPDATE_RCP) && defined(CONFIG_OPENTHREAD_BORDER_ROUTER)
372-
imageProcessor->mRcpOtaHandle = 0;
373-
imageProcessor->mBrFirmwareSize = 0;
374-
imageProcessor->mRcpDone = false;
371+
imageProcessor->mRcpOtaHandle = 0;
372+
imageProcessor->mBrFirmwareSize = 0;
373+
imageProcessor->mRcpFirmwareDownloaded = false;
375374
if (esp_rcp_ota_begin(&imageProcessor->mRcpOtaHandle) != ESP_OK)
376375
{
377376
return;
@@ -424,9 +423,9 @@ void OTAImageProcessorImpl::HandleFinalize(intptr_t context)
424423
#elif defined(CONFIG_AUTO_UPDATE_RCP) && defined(CONFIG_OPENTHREAD_BORDER_ROUTER)
425424
esp_err_t err = esp_rcp_ota_end(imageProcessor->mRcpOtaHandle);
426425
err |= esp_ota_end(imageProcessor->mOTAUpdateHandle);
427-
imageProcessor->mRcpOtaHandle = 0;
428-
imageProcessor->mBrFirmwareSize = 0;
429-
imageProcessor->mRcpDone = false;
426+
imageProcessor->mRcpOtaHandle = 0;
427+
imageProcessor->mBrFirmwareSize = 0;
428+
imageProcessor->mRcpFirmwareDownloaded = false;
430429
#else
431430
esp_err_t err = esp_ota_end(imageProcessor->mOTAUpdateHandle);
432431
#endif // CONFIG_ENABLE_DELTA_OTA
@@ -473,9 +472,9 @@ void OTAImageProcessorImpl::HandleAbort(intptr_t context)
473472
{
474473
ESP_LOGE(TAG, "ESP RCP OTA abort failed");
475474
}
476-
imageProcessor->mRcpOtaHandle = 0;
477-
imageProcessor->mBrFirmwareSize = 0;
478-
imageProcessor->mRcpDone = false;
475+
imageProcessor->mRcpOtaHandle = 0;
476+
imageProcessor->mBrFirmwareSize = 0;
477+
imageProcessor->mRcpFirmwareDownloaded = false;
479478
#endif
480479

481480
if (esp_ota_abort(imageProcessor->mOTAUpdateHandle) != ESP_OK)
@@ -541,7 +540,7 @@ void OTAImageProcessorImpl::HandleProcessBlock(intptr_t context)
541540
// Apply the patch and writes that data to the passive partition.
542541
err = esp_delta_ota_feed_patch(imageProcessor->mDeltaOTAUpdateHandle, blockToWrite.data() + index, blockToWrite.size() - index);
543542
#elif defined(CONFIG_AUTO_UPDATE_RCP) && defined(CONFIG_OPENTHREAD_BORDER_ROUTER)
544-
err = imageProcessor->ProcessRcpImage(context, blockToWrite.data(), blockToWrite.size());
543+
err = imageProcessor->ProcessRcpImage(blockToWrite.data(), blockToWrite.size());
545544
#else
546545
err = esp_ota_write(imageProcessor->mOTAUpdateHandle, blockToWrite.data(), blockToWrite.size());
547546
#endif // CONFIG_ENABLE_DELTA_OTA

src/platform/ESP32/OTAImageProcessorImpl.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,9 @@ class OTAImageProcessorImpl : public OTAImageProcessorInterface
108108

109109
#if defined(CONFIG_AUTO_UPDATE_RCP) && defined(CONFIG_OPENTHREAD_BORDER_ROUTER)
110110
esp_rcp_ota_handle_t mRcpOtaHandle;
111-
bool mRcpDone;
111+
bool mRcpFirmwareDownloaded;
112112
uint32_t mBrFirmwareSize;
113-
esp_err_t ProcessRcpImage(intptr_t context, const uint8_t * buffer, uint32_t bufLen);
113+
esp_err_t ProcessRcpImage(const uint8_t * buffer, uint32_t bufLen);
114114
#endif
115115
};
116116

0 commit comments

Comments
 (0)