diff --git a/components/tinyusb_dfu/additions/include/tusb_dfu_rt.h b/components/tinyusb_dfu/additions/include/tusb_dfu_rt.h new file mode 100644 index 0000000..b34ccf6 --- /dev/null +++ b/components/tinyusb_dfu/additions/include/tusb_dfu_rt.h @@ -0,0 +1,37 @@ +// Copyright 2022 King Kévin +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "tusb.h" +#include "tinyusb.h" + +/* Public functions */ +/** + * @brief Initialize DFU runtime. + * + * @return esp_err_t + */ +esp_err_t tusb_dfu_rf_init(void); + +/** Public functions*/ + +#ifdef __cplusplus +} +#endif diff --git a/components/tinyusb_dfu/additions/src/tusb_dfu_rt.c b/components/tinyusb_dfu/additions/src/tusb_dfu_rt.c index 98b86dc..b4d18eb 100644 --- a/components/tinyusb_dfu/additions/src/tusb_dfu_rt.c +++ b/components/tinyusb_dfu/additions/src/tusb_dfu_rt.c @@ -19,13 +19,30 @@ #include "esp_partition.h" #include "esp_ota_ops.h" #include "tusb.h" +#include "tusb_dfu_rt.h" #include "sdkconfig.h" static const char *TAG = "tusb_dfu_rt"; +esp_err_t tusb_dfu_rf_init(void) +{ + // verify if factory partition exists + const esp_partition_t *factory = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL); + if (!factory) { + return ESP_ERR_NOT_FOUND; + } + // verify if ota data partition exists + const esp_partition_t *otadata = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_OTA, NULL); + if (!otadata) { + return ESP_ERR_NOT_FOUND; + } + return ESP_OK; +} + /* TinyUSB callbacks */ // Invoked on DFU_DETACH request to reboot to the bootloader +// WARNING: function linked until public function (e.g. tusb_dfu_rf_init) is called void tud_dfu_runtime_reboot_to_dfu_cb(void) { ESP_LOGI(TAG, "reboot"); @@ -42,5 +59,3 @@ void tud_dfu_runtime_reboot_to_dfu_cb(void) } esp_restart(); } - -/*********************************************************************** TinyUSB callbacks*/