4 Commits

Author SHA1 Message Date
4ac270475b added image validation and signature 2021-01-10 14:03:50 +01:00
0f38c893d9 cleanup 2021-01-09 17:41:40 +01:00
f1fb982e21 fix: https and first ota process 2021-01-08 23:08:07 +01:00
1ff0de1f49 https image ota 2021-01-08 20:12:03 +01:00
8 changed files with 206 additions and 200 deletions

View File

@ -61,10 +61,9 @@ https_client_ret_t https_clientInitialize()
break; break;
default: default:
i32RetHTTPClient = HTTPS_CLIENT_ERROR; i32RetHTTPClient = HTTPS_CLIENT_ERROR;
ESP_LOGE(TAG, "Unknown error while init"); ESP_LOGE(TAG, "Unknown error while init https client");
break; break;
} }
return i32RetHTTPClient; return i32RetHTTPClient;
} }
@ -72,19 +71,20 @@ https_client_ret_t https_clientRetrieveData(char* pu8Data, uint32_t* pu32DataLen
{ {
https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK; https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK;
int32_t i32RetRetrieveData = ESP_OK; int32_t i32RetRetrieveData = ESP_OK;
bzero(pu8Data, *pu32DataLenght);
bool bRetriveData = true; bool bRetriveData = true;
bzero(pu8Data, *pu32DataLenght);
*pu32BytesRead = 0U;
while (bRetriveData) while (bRetriveData)
{ {
//Reading HTTP response //Reading HTTP response
i32RetRetrieveData = mbedtls_ssl_read(&sHTTPS_ClientConfig.ssl, (unsigned char *)pu8Data, *pu32DataLenght); i32RetRetrieveData = mbedtls_ssl_read(&sHTTPS_ClientConfig.ssl, (unsigned char *)(pu8Data+(*pu32BytesRead)), ((*pu32DataLenght)-(*pu32BytesRead)));
if(i32RetRetrieveData > 0) if(i32RetRetrieveData > 0)
{ {
//Data received //Data received
*pu32BytesRead = *pu32BytesRead + i32RetRetrieveData; *pu32BytesRead = *pu32BytesRead + i32RetRetrieveData;
*pu32DataLenght = *pu32DataLenght - *pu32BytesRead;
if(*pu32DataLenght > 0) if(*pu32DataLenght > 0)
{ {
@ -102,6 +102,7 @@ https_client_ret_t https_clientRetrieveData(char* pu8Data, uint32_t* pu32DataLen
{ {
//all data read --> stop reading //all data read --> stop reading
bRetriveData = false; bRetriveData = false;
pu32BytesRead = 0;
} }
if(i32RetRetrieveData == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) if(i32RetRetrieveData == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY)
@ -118,15 +119,15 @@ https_client_ret_t https_clientDeinitialize()
{ {
https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK; https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK;
i32RetHTTPClient = mbedtls_ssl_close_notify(&sHTTPS_ClientConfig.ssl); i32RetHTTPClient = mbedtls_ssl_close_notify(&sHTTPS_ClientConfig.ssl); //close session
if(i32RetHTTPClient != ESP_OK) if(i32RetHTTPClient != ESP_OK)
{ {
ESP_LOGE(TAG, "mbedtls_ssl_close_notify returned 0x%x", i32RetHTTPClient); ESP_LOGE(TAG, "mbedtls_ssl_close_notify returned 0x%x", i32RetHTTPClient);
} }
mbedtls_ssl_session_reset(&sHTTPS_ClientConfig.ssl); mbedtls_ssl_session_reset(&sHTTPS_ClientConfig.ssl); //reset embedssl
mbedtls_net_free(&sHTTPS_ClientConfig.server_fd); mbedtls_net_free(&sHTTPS_ClientConfig.server_fd); //free ram
return i32RetHTTPClient; return i32RetHTTPClient;
} }
@ -265,7 +266,7 @@ https_client_ret_t https_clientSendRequest()
https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK; https_client_ret_t i32RetHTTPClient = HTTPS_CLIENT_OK;
int32_t i32RetSendRequest = ESP_OK; int32_t i32RetSendRequest = ESP_OK;
uint32_t u32WrittenBytes = 0; uint32_t u32WrittenBytes = 0;
bool bWrite = true; bool bWrite = true; //flag to stop loop
//Writing HTTP request //Writing HTTP request
while((u32WrittenBytes < strlen(REQUEST)) && bWrite) while((u32WrittenBytes < strlen(REQUEST)) && bWrite)

View File

@ -44,7 +44,6 @@
#define CONFIG_OTA_HTTPS_SERVER_COMMON_NAME "exmaple.com" #define CONFIG_OTA_HTTPS_SERVER_COMMON_NAME "exmaple.com"
#endif #endif
#define HTTPS_CLIENT_OK 0 #define HTTPS_CLIENT_OK 0
#define HTTPS_CLIENT_ERROR -1 #define HTTPS_CLIENT_ERROR -1
#define HTTPS_CLIENT_ERROR_INIT_EMBEDTLS -2 #define HTTPS_CLIENT_ERROR_INIT_EMBEDTLS -2

View File

@ -16,7 +16,6 @@
#include "https_client.h" #include "https_client.h"
bool bNewerVersion(const char* pu8Local, const char* pu8Remote); bool bNewerVersion(const char* pu8Local, const char* pu8Remote);
esp_err_t errExtractVersionNumber(const char* pu8Data, uint32_t* pu32DataLenght, char* pc8RemoteVersionNumber); esp_err_t errExtractVersionNumber(const char* pu8Data, uint32_t* pu32DataLenght, char* pc8RemoteVersionNumber);
esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint32_t* pu32StartOffset); esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint32_t* pu32StartOffset);

View File

@ -1,43 +1,34 @@
#include "mesh_ota.h" #include "mesh_ota.h"
/* /*
* 999.999.999 * 999.999.999
* Return true if remote version is newer (higher) than local version * Return true if remote version is newer (higher) than local version
*/ */
bool bNewerVersion(const char* pu8Local, const char* pu8Remote) { bool bNewerVersion(const char* pu8Local, const char* pu8Remote)
{
char u8LocalTmp[12]; //local version
char u8RemoteTmp[12]; //remote version
char* pu8saveptrLocal; //context for strok_r
char* pu8saveptrRemote; //context for strok_r
bool bReturn = false; //flag to stop loop
uint8_t u8Index = 0; //numbers counter in version string
char u8LocalTmp[12]; strcpy(u8LocalTmp, pu8Local); //copy in tmp
char u8RemoteTmp[12]; strcpy(u8RemoteTmp, pu8Remote); //copy in tmp
char* pu8saveptrLocal; char* pu8TokenLocal = strtok_r(u8LocalTmp, ".", &pu8saveptrLocal); //split tokens
char* pu8saveptrRemote; char* pu8TokenRemote = strtok_r(u8RemoteTmp, ".", &pu8saveptrRemote); //split tokens
strcpy(u8LocalTmp, pu8Local);
strcpy(u8RemoteTmp, pu8Remote);
char* pu8TokenLocal = strtok_r(u8LocalTmp, ".", &pu8saveptrLocal);
char* pu8TokenRemote = strtok_r(u8RemoteTmp, ".", &pu8saveptrRemote) ;
bool bReturn = false;
uint8_t u8Index = 0;
while( (u8Index <= 2) && (bReturn == false)) {
while( (u8Index <= 2) && (bReturn == false)) //loop through tokens
{
u8Index++; u8Index++;
if(atoi(pu8TokenLocal) < atoi(pu8TokenRemote)) if(atoi(pu8TokenLocal) < atoi(pu8TokenRemote))
{ {
bReturn = true; bReturn = true; //version number difference --> stop loop
} }
pu8TokenLocal = strtok_r(NULL, ".", &pu8saveptrLocal); //split tokens
pu8TokenLocal = strtok_r(NULL, ".", &pu8saveptrLocal); pu8TokenRemote = strtok_r(NULL, ".", &pu8saveptrRemote); //split tokens
pu8TokenRemote = strtok_r(NULL, ".", &pu8saveptrRemote) ;
} }
return bReturn; return bReturn;
} }
@ -45,30 +36,26 @@ esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint3
{ {
/* /*
Offset value Offset value
0 = E9 0 = 0xE9 (first byte in image --> magic byte)
48 = first digit of version number 48 = first digit of version number
*/ */
esp_err_t errReturn = ESP_OK; esp_err_t errReturn = ESP_OK;
bool bImageStartOffsetFound = false; bool bImageStartOffsetFound = false;
*pu32StartOffset = 0U;
uint32_t u32DataIndex = 0; uint32_t u32DataIndex = 0;
uint32_t u32FirstDotOffset = 0; uint32_t u32FirstDotOffset = 0;
uint32_t u32SecondDotOffset = 0; uint32_t u32SecondDotOffset = 0;
uint8_t u8FirstDotIndex = 0; uint8_t u8FirstDotIndex = 0;
uint8_t u8SecondDotIndex = 0; uint8_t u8SecondDotIndex = 0;
*pu32StartOffset = 0U; //reset offset to zero
while((u32DataIndex < *pu32DataLenght) && (bImageStartOffsetFound == false)) while((u32DataIndex < *pu32DataLenght) && (bImageStartOffsetFound == false))
{ {
//search for magic byte //search for magic byte
if(pu8Data[u32DataIndex] == 0xe9) if(pu8Data[u32DataIndex] == 0xe9)
{ {
//magic byte found //magic byte found
//printf("\n magic byte found: %i\n", u32DataIndex);
while ((u8FirstDotIndex < 3) && (u32FirstDotOffset == 0)) while ((u8FirstDotIndex < 3) && (u32FirstDotOffset == 0))
{ {
//search first dot in version number //search first dot in version number
@ -76,9 +63,8 @@ esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint3
{ {
if((pu8Data[(u32DataIndex+49+u8FirstDotIndex)] == 0x2e)) if((pu8Data[(u32DataIndex+49+u8FirstDotIndex)] == 0x2e))
{ {
//first do found //first dot found
u32FirstDotOffset = (u32DataIndex+49+u8FirstDotIndex); u32FirstDotOffset = (u32DataIndex+49+u8FirstDotIndex);
//printf("First dot offset: %i\n", u32FirstDotOffset);
} }
} }
u8FirstDotIndex++; u8FirstDotIndex++;
@ -86,15 +72,13 @@ esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint3
while ((u8SecondDotIndex < 3) && (u32SecondDotOffset == 0) && (u32FirstDotOffset != 0)) while ((u8SecondDotIndex < 3) && (u32SecondDotOffset == 0) && (u32FirstDotOffset != 0))
{ {
//search first dot in version number //search first dot in version number
if((u32FirstDotOffset+(u8SecondDotIndex+2)) < *pu32DataLenght) if((u32FirstDotOffset+(u8SecondDotIndex+2)) < *pu32DataLenght)
{ {
if((pu8Data[(u32FirstDotOffset+(u8SecondDotIndex+2))] == 0x2e)) if((pu8Data[(u32FirstDotOffset+(u8SecondDotIndex+2))] == 0x2e))
{ {
//second do found //second dot found
u32SecondDotOffset = (u32FirstDotOffset+(u8SecondDotIndex+2)); u32SecondDotOffset = (u32FirstDotOffset+(u8SecondDotIndex+2));
//printf("Second dot offset: %i\n", u32SecondDotOffset);
} }
} }
u8SecondDotIndex++; u8SecondDotIndex++;
@ -115,10 +99,7 @@ esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint3
u8SecondDotIndex = 0; u8SecondDotIndex = 0;
} }
} }
u32DataIndex++; u32DataIndex++;
//putchar(pu8Data[i]);
//printf("%x ", pu8Data[u32DataIndex]);
} }
if(bImageStartOffsetFound == false) if(bImageStartOffsetFound == false)
@ -131,25 +112,17 @@ esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint3
esp_err_t errExtractVersionNumber(const char* pu8Data, uint32_t* pu32DataLenght, char* pc8RemoteVersionNumber) esp_err_t errExtractVersionNumber(const char* pu8Data, uint32_t* pu32DataLenght, char* pc8RemoteVersionNumber)
{ {
strcpy(pc8RemoteVersionNumber, "999.999.999"); //init value
uint32_t u32StartOffset; uint32_t u32StartOffset;
esp_err_t err = ESP_OK;
esp_err_t err = errFindImageStart(pu8Data, pu32DataLenght, &u32StartOffset); strcpy(pc8RemoteVersionNumber, "999.999.999"); //init value
err = errFindImageStart(pu8Data, pu32DataLenght, &u32StartOffset); //get image start offset
if(err == ESP_OK) if(err == ESP_OK)
{ {
//image found
//printf("\nImage start found: %i\n", u32StartOffset); strncpy(pc8RemoteVersionNumber, pu8Data+(u32StartOffset+48), 11); //copy version number
strncpy(pc8RemoteVersionNumber, pu8Data+(u32StartOffset+48), 11);
pc8RemoteVersionNumber[12] = '\0'; pc8RemoteVersionNumber[12] = '\0';
//printf("remote version number %s\n\n", pc8RemoteVersionNumber);
} }
return err; return err;
} }

View File

@ -1,7 +1,6 @@
#ifndef H_TEST_IMAGE_HEX #ifndef H_TEST_IMAGE_HEX
#define H_TEST_IMAGE_HEX #define H_TEST_IMAGE_HEX
//with http response + 0.0.1 //with http response + 0.0.1
char dataWithHttpRespone0_0_1[] = char dataWithHttpRespone0_0_1[] =
{ {
@ -32,7 +31,6 @@ char dataWithHttpRespone0_0_1[] =
0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74
}; };
//without http response + 0.0.1 //without http response + 0.0.1
char dataWithoutHttpRespone0_0_1[] = char dataWithoutHttpRespone0_0_1[] =
{ {
@ -80,7 +78,6 @@ char dataWithoutHttpRespone999_999_999[] =
}; };
//with http response + 999.999.999 //with http response + 999.999.999
char dataWithHttpRespone999_999_999[] = char dataWithHttpRespone999_999_999[] =
{ {
@ -171,5 +168,4 @@ char dataWithHttpRespone999_99_999[] =
0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x65, 0x6e, 0x64, 0x72, 0x69, 0x6b, 0x2f, 0x65, 0x73, 0x70, 0x2f, 0x65, 0x73, 0x70, 0x2d, 0x69, 0x64, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74,
}; };
#endif /* H_TEST_IMAGE_HEX */ #endif /* H_TEST_IMAGE_HEX */

View File

@ -2,7 +2,6 @@
#include "unity.h" #include "unity.h"
#include "mesh_ota.h" #include "mesh_ota.h"
#include "test_image_hex.h" #include "test_image_hex.h"
// ### ### ### distinguish newer image version ### ### ### // ### ### ### distinguish newer image version ### ### ###

View File

@ -13,7 +13,6 @@
#include "mesh_ota.h" #include "mesh_ota.h"
#define RX_SIZE (1234) #define RX_SIZE (1234)
#define TX_SIZE (1234) #define TX_SIZE (1234)
@ -491,9 +490,14 @@ static void test(void *pvParameters)
char buffer[1024U]; char buffer[1024U];
uint32_t u32BytesRead = 0; uint32_t u32BytesRead = 0;
char pcRemoteVersionNumber[12]; char pcRemoteVersionNumber[12];
const esp_partition_t * currentPartition;
const esp_partition_t * otaPartition;
static esp_ota_handle_t otaHandle;
uint32_t u32StartOffset;
esp_app_desc_t otaPartitionDesc;
ESP_LOGI(MESH_TAG, "Hello World"); ESP_LOGI(MESH_TAG, "Hello World");
const esp_partition_t * currentPartition = esp_ota_get_boot_partition(); currentPartition = esp_ota_get_boot_partition();
ESP_LOGI(MESH_TAG, "Type: %d", (*currentPartition).subtype); ESP_LOGI(MESH_TAG, "Type: %d", (*currentPartition).subtype);
ESP_LOGI(MESH_TAG, "Start address: %d", (*currentPartition).address); ESP_LOGI(MESH_TAG, "Start address: %d", (*currentPartition).address);
ESP_LOGI(MESH_TAG, "Size: %d", (*currentPartition).size); ESP_LOGI(MESH_TAG, "Size: %d", (*currentPartition).size);
@ -507,9 +511,8 @@ static void test(void *pvParameters)
ESP_LOGI(MESH_TAG, "currentPartition Timestamp: %s %s", (curPartitionDesc).date, (curPartitionDesc).time); ESP_LOGI(MESH_TAG, "currentPartition Timestamp: %s %s", (curPartitionDesc).date, (curPartitionDesc).time);
https_clientInitialize(); https_clientInitialize();
https_clientRetrieveData(buffer, &u32BufferLenght, &u32BytesRead); https_clientRetrieveData(buffer, &u32BufferLenght, &u32BytesRead);
ESP_LOGI(MESH_TAG, "Data received: %i", u32BytesRead);
err = errExtractVersionNumber(buffer, &u32BytesRead, pcRemoteVersionNumber); err = errExtractVersionNumber(buffer, &u32BytesRead, pcRemoteVersionNumber);
if(err == ESP_OK) if(err == ESP_OK)
@ -518,21 +521,58 @@ static void test(void *pvParameters)
{ {
ESP_LOGI(MESH_TAG, "Newer Version available"); ESP_LOGI(MESH_TAG, "Newer Version available");
//write ota //write ota
otaPartition= esp_ota_get_next_update_partition(currentPartition);
err = errFindImageStart(buffer, &u32BufferLenght, &u32StartOffset);
ESP_LOGI(MESH_TAG, "first byte offset: %i", u32StartOffset);
ESP_LOGI(MESH_TAG, "first byte: %x", buffer[u32StartOffset]);
err = esp_ota_begin(otaPartition, OTA_SIZE_UNKNOWN, &otaHandle);
ESP_ERROR_CHECK(err);
do
{
ESP_LOGI(MESH_TAG, "OTA-Data written: %i", u32BytesRead);
err = esp_ota_write(otaHandle, (const void*) buffer+u32StartOffset, (u32BytesRead-u32StartOffset));
u32StartOffset = 0U;
https_clientRetrieveData(buffer, &u32BufferLenght, &u32BytesRead);
} }
while (u32BytesRead > 0);
err = esp_ota_end(otaHandle);
ESP_ERROR_CHECK(err);
err = esp_ota_get_partition_description(otaPartition, &otaPartitionDesc);
ESP_ERROR_CHECK(err);
ESP_LOGI(MESH_TAG, "otaPartition project_name: %s", (otaPartitionDesc).project_name);
err = esp_ota_set_boot_partition(otaPartition);
ESP_ERROR_CHECK(err);
//esp_restart();
}
else
{
ESP_LOGI(MESH_TAG, "NO newer Version available");
}
}
else
{
ESP_LOGI(MESH_TAG, "errExtractVersionNumber failed: %i", err);
} }
https_clientDeinitialize(); https_clientDeinitialize();
ESP_LOGI(MESH_TAG, "\nend of task\n");
while(1) while(1)
{ {
vTaskDelay(1000 / portTICK_PERIOD_MS);
} }
} }
void app_main(void) void app_main(void)
{ {
ESP_LOGI(MESH_TAG, "hardcoded: 0.0.1");
/* /*
err = nvs_flash_erase(); err = nvs_flash_erase();
if(err != ESP_OK){ if(err != ESP_OK){
@ -607,16 +647,14 @@ void app_main(void)
esp_mesh_is_root_fixed() ? "root fixed" : "root not fixed", esp_mesh_is_root_fixed() ? "root fixed" : "root not fixed",
esp_mesh_get_topology(), esp_mesh_get_topology() ? "(chain)":"(tree)", esp_mesh_is_ps_enabled()); esp_mesh_get_topology(), esp_mesh_get_topology() ? "(chain)":"(tree)", esp_mesh_is_ps_enabled());
for(;;)
for(;;) { {
if(gpio_get_level(0) == 0){ if(gpio_get_level(0) == 0){
break; break;
} }
vTaskDelay(1000 / portTICK_PERIOD_MS); vTaskDelay(1000 / portTICK_PERIOD_MS);
} }
xTaskCreate(&test, "test_task", 8192, NULL, 5, NULL); xTaskCreate(&test, "test_task", 8192, NULL, 5, NULL);
} }

View File

@ -67,11 +67,12 @@ CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0
# #
# Security features # Security features
# #
CONFIG_SECURE_SIGNED_ON_BOOT=y
CONFIG_SECURE_SIGNED_ON_UPDATE=y CONFIG_SECURE_SIGNED_ON_UPDATE=y
CONFIG_SECURE_SIGNED_APPS=y CONFIG_SECURE_SIGNED_APPS=y
CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT=y CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT=y
CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME=y CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME=y
# CONFIG_SECURE_SIGNED_ON_BOOT_NO_SECURE_BOOT is not set CONFIG_SECURE_SIGNED_ON_BOOT_NO_SECURE_BOOT=y
CONFIG_SECURE_SIGNED_ON_UPDATE_NO_SECURE_BOOT=y CONFIG_SECURE_SIGNED_ON_UPDATE_NO_SECURE_BOOT=y
# CONFIG_SECURE_BOOT is not set # CONFIG_SECURE_BOOT is not set
CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES=y CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES=y
@ -127,7 +128,7 @@ CONFIG_ESPTOOLPY_MONITOR_BAUD=115200
CONFIG_PARTITION_TABLE_CUSTOM=y CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_OFFSET=0x8000 CONFIG_PARTITION_TABLE_OFFSET=0x10000
CONFIG_PARTITION_TABLE_MD5=y CONFIG_PARTITION_TABLE_MD5=y
# end of Partition Table # end of Partition Table
@ -159,7 +160,7 @@ CONFIG_MESH_AP_CONNECTIONS=6
CONFIG_MESH_ROUTE_TABLE_SIZE=50 CONFIG_MESH_ROUTE_TABLE_SIZE=50
CONFIG_OTA_HTTPS_SERVER_COMMON_NAME="ota.hendrikschutter.com" CONFIG_OTA_HTTPS_SERVER_COMMON_NAME="ota.hendrikschutter.com"
CONFIG_OTA_HTTPS_SERVER_PORT="443" CONFIG_OTA_HTTPS_SERVER_PORT="443"
CONFIG_OTA_HTTPS_URL="https://ota.hendrikschutter.com/hello-world.bin" CONFIG_OTA_HTTPS_URL="https://ota.hendrikschutter.com/mesh_ota.bin"
CONFIG_OTA_HTTPS_AUTH="b3RhOnB3" CONFIG_OTA_HTTPS_AUTH="b3RhOnB3"
# end of Mesh OTA Configuration # end of Mesh OTA Configuration