diff --git a/components/esp_modem/test/target_ota/bin/blink.bin b/components/esp_modem/test/target_ota/bin/blink.bin new file mode 100644 index 00000000000..aea9e250a08 Binary files /dev/null and b/components/esp_modem/test/target_ota/bin/blink.bin differ diff --git a/components/esp_modem/test/target_ota/components/manual_ota/manual_ota.cpp b/components/esp_modem/test/target_ota/components/manual_ota/manual_ota.cpp index 1bac93ec90b..c78c9b4e466 100644 --- a/components/esp_modem/test/target_ota/components/manual_ota/manual_ota.cpp +++ b/components/esp_modem/test/target_ota/components/manual_ota/manual_ota.cpp @@ -17,7 +17,7 @@ static const char *TAG = "manual_ota"; bool manual_ota::begin() { if (status != state::UNDEF) { - ESP_LOGE(TAG, "Invalid state"); + ESP_LOGE(TAG, "Invalid state for manual_ota::perform"); return false; } const esp_partition_t *configured = esp_ota_get_boot_partition(); @@ -31,6 +31,7 @@ bool manual_ota::begin() status = state::INIT; max_buffer_size_ = size_ * 1024; if (mode_ == mode::BATCH) { +#ifdef CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT esp_transport_handle_t tcp = esp_transport_tcp_init(); ssl_ = esp_transport_batch_tls_init(tcp, max_buffer_size_); http_.config_.transport = ssl_; @@ -40,7 +41,10 @@ bool manual_ota::begin() if (!esp_transport_batch_set_cn(ssl_, common_name_)) { return fail(); } - +#else + ESP_LOGE(TAG, "mode::BATCH Cannot be used without CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT"); + return false; +#endif } if (!http_.init()) { @@ -76,7 +80,7 @@ bool manual_ota::begin() bool manual_ota::perform() { if (status != state::IMAGE_CHECK && status != state::START) { - ESP_LOGE(TAG, "Invalid state"); + ESP_LOGE(TAG, "Invalid state for manual_ota::perform"); return false; } esp_err_t err = esp_http_client_open(http_.handle_, 0); diff --git a/components/esp_modem/test/target_ota/components/manual_ota/transport_batch_tls.cpp b/components/esp_modem/test/target_ota/components/manual_ota/transport_batch_tls.cpp index 9e041da57fa..8f9f31b91e1 100644 --- a/components/esp_modem/test/target_ota/components/manual_ota/transport_batch_tls.cpp +++ b/components/esp_modem/test/target_ota/components/manual_ota/transport_batch_tls.cpp @@ -12,7 +12,8 @@ class TlsTransport: public Tls { public: - explicit TlsTransport(esp_transport_handle_t parent) : Tls(), transport_(parent), read_len(0), offset(0) {} + explicit TlsTransport(esp_transport_handle_t parent): + Tls(), transport_(parent), last_timeout(0), read_len(0), offset(0) {} int send(const unsigned char *buf, size_t len) override; int recv(unsigned char *buf, size_t len) override; static bool set_func(esp_transport_handle_t tls_transport); @@ -122,7 +123,10 @@ int TlsTransport::transport::connect(esp_transport_handle_t t, const char *host, ESP_LOGI(TAG, "Failed to handshake"); return ret; } - tls->get_session(); + if (!tls->get_session()) { + // we're not able to save session, report an error and continue (next connection will be slower) + ESP_LOGW(TAG, "Failed to save session"); + } ESP_LOGI(TAG, "After handshake"); return 0; } @@ -238,7 +242,7 @@ bool TlsTransport::prepare_buffer(size_t max_size) return true; } -int esp_transport_batch_tls_pre_read(esp_transport_handle_t t, int len, int timeout_ms) +int esp_transport_batch_tls_pre_read(esp_transport_handle_t t, size_t len, int timeout_ms) { auto tls = static_cast(esp_transport_get_context_data(t)); return tls->preread(len, timeout_ms); diff --git a/components/esp_modem/test/target_ota/components/manual_ota/transport_batch_tls.hpp b/components/esp_modem/test/target_ota/components/manual_ota/transport_batch_tls.hpp index 5d36123e9cf..8528eced176 100644 --- a/components/esp_modem/test/target_ota/components/manual_ota/transport_batch_tls.hpp +++ b/components/esp_modem/test/target_ota/components/manual_ota/transport_batch_tls.hpp @@ -22,7 +22,7 @@ esp_transport_handle_t esp_transport_batch_tls_init(esp_transport_handle_t paren * @param timeout_ms Timeout in ms * @return true If read from the parent transport completed successfully */ -bool esp_transport_batch_tls_pre_read(esp_transport_handle_t t, int len, int timeout_ms); +bool esp_transport_batch_tls_pre_read(esp_transport_handle_t t, size_t len, int timeout_ms); /** * @brief Set the CA Certificate to verify the server diff --git a/components/esp_modem/test/target_ota/main/ota_test.cpp b/components/esp_modem/test/target_ota/main/ota_test.cpp index 53ff43d83b8..8eeb6c3c008 100644 --- a/components/esp_modem/test/target_ota/main/ota_test.cpp +++ b/components/esp_modem/test/target_ota/main/ota_test.cpp @@ -50,7 +50,9 @@ class StatusHandler { void remove_mqtt() { +#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 0) esp_mqtt_client_unregister_event(mqtt, MQTT_EVENT_ANY, on_event); +#endif mqtt = nullptr; } @@ -152,6 +154,10 @@ void ota_task(void *ctx) ota.http_.config_.cert_pem = ca_cert_pem; ota.size_ = 32; ota.common_name_ = CONFIG_TEST_OTA_CN; +#ifndef CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT + // will have to use NORMAL mode, before custom transport is supported in IDF + ota.mode_ = manual_ota::mode::NORMAL; +#endif ota.begin(); while (true) { @@ -257,11 +263,13 @@ extern "C" void app_main(void) esp_modem::SignalGroup ota_done{}; +#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 2, 0) // now stop the LCP keepalive before performing OTA esp_netif_ppp_config_t cfg; ESP_ERROR_CHECK(esp_netif_ppp_get_params(esp_netif, &cfg)); cfg.ppp_lcp_echo_disabled = true; ESP_ERROR_CHECK(esp_netif_ppp_set_params(esp_netif, &cfg)); +#endif // Run the OTA in a separate task to keep sending commands to the modem at the same time xTaskCreate(ota_task, "ota_task", 8192, &ota_done, 5, nullptr); diff --git a/components/esp_modem/test/target_ota/sdkconfig.ci.1 b/components/esp_modem/test/target_ota/sdkconfig.ci.1 new file mode 100644 index 00000000000..7dc50a58919 --- /dev/null +++ b/components/esp_modem/test/target_ota/sdkconfig.ci.1 @@ -0,0 +1,2 @@ +CONFIG_TEST_DEVICE_PPPD_SERVER=y +CONFIG_ESP_MODEM_CMUX_DEFRAGMENT_PAYLOAD=n diff --git a/components/esp_modem/test/target_ota/sdkconfig.ci.2 b/components/esp_modem/test/target_ota/sdkconfig.ci.2 new file mode 100644 index 00000000000..da6e474f7c9 --- /dev/null +++ b/components/esp_modem/test/target_ota/sdkconfig.ci.2 @@ -0,0 +1,4 @@ +CONFIG_TEST_DEVICE_MODEM_GENERIC=y +CONFIG_TEST_OTA_URI="https://raw.githubusercontent.com/espressif/esp-protocols/master/components/esp_modem/test/target_ota/bin/blink.bin" +CONFIG_TEST_OTA_CA_CERT="MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0yMTA0MTQwMDAwMDBaFw0zMTA0MTMyMzU5NTlaME8xCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxKTAnBgNVBAMTIERpZ2lDZXJ0IFRMUyBSU0EgU0hBMjU2IDIwMjAgQ0ExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwUuzZUdwvN1PWNvsnO3DZuUfMRNUrUpmRh8sCuxkB+Uu3Ny5CiDt3+PE0J6aqXodgojlEVbbHp9YwlHnLDQNLtKS4VbL8Xlfs7uHyiUDe5pSQWYQYE9XE0nw6Ddng9/n00tnTCJRpt8OmRDtV1F0JuJ9x8piLhMbfyOIJVNvwTRYAIuE//i+p1hJInuWraKImxW8oHzf6VGo1bDtN+I2tIJLYrVJmuzHZ9bjPvXj1hJeRPG/cUJ9WIQDgLGBAfr5yjK7tI4nhyfFK3TUqNaX3sNk+crOU6JWvHgXjkkDKa77SU+kFbnO8lwZV21reacroicgE7XQPUDTITAHk+qZ9QIDAQABo4IBgjCCAX4wEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUt2ui6qiqhIx56rTaD5iyxZV2ufQwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBABggrBgEFBQcwAoY0aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNydDBCBgNVHR8EOzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9iYWxSb290Q0EuY3JsMD0GA1UdIAQ2MDQwCwYJYIZIAYb9bAIBMAcGBWeBDAEBMAgGBmeBDAECATAIBgZngQwBAgIwCAYGZ4EMAQIDMA0GCSqGSIb3DQEBCwUAA4IBAQCAMs5eC91uWg0Kr+HWhMvAjvqFcO3aXbMM9yt1QP6FCvrzMXi3cEsaiVi6gL3zax3pfs8LulicWdSQ0/1s/dCYbbdxglvPbQtaCdB73sRD2Cqk3p5BJl+7j5nL3a7hqG+fh/50tx8bIKuxT8b1Z11dmzzp/2n3YWzW2fP9NsarA4h20ksudYbj/NhVfSbCEXffPgK2fPOre3qGNm+499iTcc+G33Mw+nur7SpZyEKEOxEXGlLzyQ4UfaJbcme6ce1XR2bFuAJKZTRei9AqPCCcUZlM51Ke92sRKw2Sfh3oius2FkOH6ipjv3U/697EA7sKPPcw7+uvTPyLNhBzPvOk" +CONFIG_TEST_OTA_CN="github.com" diff --git a/components/esp_modem/test/target_ota/sdkconfig.ci.3 b/components/esp_modem/test/target_ota/sdkconfig.ci.3 new file mode 100644 index 00000000000..01d7661de18 --- /dev/null +++ b/components/esp_modem/test/target_ota/sdkconfig.ci.3 @@ -0,0 +1,4 @@ +CONFIG_TEST_DEVICE_PPPD_SERVER=y +CONFIG_ESP_MODEM_CMUX_DEFRAGMENT_PAYLOAD=y +CONFIG_ESP_MODEM_USE_INFLATABLE_BUFFER_IF_NEEDED=y +CONFIG_TEST_USE_VFS_TERM=y diff --git a/components/esp_modem/test/target_ota/sdkconfig.defaults b/components/esp_modem/test/target_ota/sdkconfig.defaults index d4ed6a63c72..93b9c18500e 100644 --- a/components/esp_modem/test/target_ota/sdkconfig.defaults +++ b/components/esp_modem/test/target_ota/sdkconfig.defaults @@ -1,10 +1,8 @@ +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y CONFIG_PARTITION_TABLE_TWO_OTA=y -CONFIG_TEST_USE_VFS_TERM=y -CONFIG_TEST_OTA_URI="https://raw.githubusercontent.com/david-cermak/esp-network-examples/test/ota/hello_world.bin" -CONFIG_TEST_OTA_CA_CERT="MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0yMTA0MTQwMDAwMDBaFw0zMTA0MTMyMzU5NTlaME8xCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxKTAnBgNVBAMTIERpZ2lDZXJ0IFRMUyBSU0EgU0hBMjU2IDIwMjAgQ0ExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwUuzZUdwvN1PWNvsnO3DZuUfMRNUrUpmRh8sCuxkB+Uu3Ny5CiDt3+PE0J6aqXodgojlEVbbHp9YwlHnLDQNLtKS4VbL8Xlfs7uHyiUDe5pSQWYQYE9XE0nw6Ddng9/n00tnTCJRpt8OmRDtV1F0JuJ9x8piLhMbfyOIJVNvwTRYAIuE//i+p1hJInuWraKImxW8oHzf6VGo1bDtN+I2tIJLYrVJmuzHZ9bjPvXj1hJeRPG/cUJ9WIQDgLGBAfr5yjK7tI4nhyfFK3TUqNaX3sNk+crOU6JWvHgXjkkDKa77SU+kFbnO8lwZV21reacroicgE7XQPUDTITAHk+qZ9QIDAQABo4IBgjCCAX4wEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUt2ui6qiqhIx56rTaD5iyxZV2ufQwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBABggrBgEFBQcwAoY0aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNydDBCBgNVHR8EOzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9iYWxSb290Q0EuY3JsMD0GA1UdIAQ2MDQwCwYJYIZIAYb9bAIBMAcGBWeBDAEBMAgGBmeBDAECATAIBgZngQwBAgIwCAYGZ4EMAQIDMA0GCSqGSIb3DQEBCwUAA4IBAQCAMs5eC91uWg0Kr+HWhMvAjvqFcO3aXbMM9yt1QP6FCvrzMXi3cEsaiVi6gL3zax3pfs8LulicWdSQ0/1s/dCYbbdxglvPbQtaCdB73sRD2Cqk3p5BJl+7j5nL3a7hqG+fh/50tx8bIKuxT8b1Z11dmzzp/2n3YWzW2fP9NsarA4h20ksudYbj/NhVfSbCEXffPgK2fPOre3qGNm+499iTcc+G33Mw+nur7SpZyEKEOxEXGlLzyQ4UfaJbcme6ce1XR2bFuAJKZTRei9AqPCCcUZlM51Ke92sRKw2Sfh3oius2FkOH6ipjv3U/697EA7sKPPcw7+uvTPyLNhBzPvOk" -CONFIG_TEST_OTA_CN="github.com" CONFIG_COMPILER_CXX_EXCEPTIONS=y -CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT=y +# This is not supported in IDF yet +# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT=y CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=y CONFIG_ESP_MAIN_TASK_STACK_SIZE=8192 CONFIG_LWIP_PPP_SUPPORT=y