
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
76 lines
2.4 KiB
C
76 lines
2.4 KiB
C
/*----------------------------------------------------------------------------
|
|
* 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);
|
|
}
|
|
|