add ota algorithm for device

1. effective "Differential Upgrade" patch algorithm with high compression rate
2. effective recovery algorithm support recovery firmware in blocks which has low memory consumption and wear-leveling strategies, especially suitable for embeded devices with low RAM.
3. add sample ota bootloader project, see:
board\TencentOS_tiny_EVB_MX_Plus\KEIL\ota\ota_bootloader_recovery
4. add sample application project for download firmware through http, see:
board\TencentOS_tiny_EVB_MX_Plus\KEIL\ota\ota_application_download_through_http
5. add sample application project for download firmware through qcloud explorer console, see:
board\TencentOS_tiny_EVB_MX_Plus\KEIL\ota\ota_application_download_through_qcloud_iot_explorer
6. an OTA markdown document is pending
This commit is contained in:
daishengdong
2020-06-02 15:03:42 +08:00
parent 84faf16765
commit 5b51d50ade
177 changed files with 42367 additions and 1233 deletions

View File

@@ -0,0 +1,75 @@
/*----------------------------------------------------------------------------
* Tencent is pleased to support the open source community by making TencentOS
* available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
* If you have downloaded a copy of the TencentOS binary from Tencent, please
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
*
* If you have downloaded a copy of the TencentOS source code from Tencent,
* please note that TencentOS source code is licensed under the BSD 3-Clause
* License, except for the third-party components listed below which are
* subject to different license terms. Your integration of TencentOS into your
* own projects may require compliance with the BSD 3-Clause License, as well
* as the other licenses applicable to the third-party components included
* within TencentOS.
*---------------------------------------------------------------------------*/
#include "lzma_uncompress.h"
#include "Alloc.h"
#include "LzmaDec.h"
#include "LzmaEnc.h"
#include "stdint.h"
#include "stdlib.h"
#pragma pack(push, 1)
typedef struct lzma_props_st {
uint8_t data[LZMA_PROPS_SIZE];
} lzma_props_t;
#pragma pack(pop)
static void *lzma_wrapper_alloc(ISzAllocPtr p, size_t size)
{
(void)p;
if (size == 0) {
return 0;
}
return malloc(size);
}
static void lzma_wrapper_free(ISzAllocPtr p, void *address)
{
(void)p;
free(address);
}
static ISzAlloc wrapper_alloc = { lzma_wrapper_alloc, lzma_wrapper_free };
static lzma_err_t lzma_do_uncompress(uint8_t *dst, size_t *dst_len, const uint8_t *src, size_t *src_len, lzma_props_t *props)
{
ELzmaStatus status;
return (lzma_err_t)LzmaDecode(dst, dst_len,
src, src_len,
props->data, LZMA_PROPS_SIZE,
LZMA_FINISH_ANY, &status, &wrapper_alloc);
}
lzma_err_t lzma_uncompress(uint8_t *dst, size_t *dst_len, const uint8_t *src, size_t *src_len)
{
lzma_props_t *props;
if (*src_len <= sizeof(lzma_props_t)) {
return LZMA_ERR_MEM;
}
props = (lzma_props_t *)src;
*src_len = *src_len - sizeof(lzma_props_t);
return lzma_do_uncompress(dst, dst_len,
src + sizeof(lzma_props_t), src_len,
props);
}