MDK5_CortexM0_ota_rle_x3 差分算法库

为方便技术交流探讨,特建一个QQ群:47954837   ,欢迎加入!

接上篇文章,目前编译出基 CortexM0的 差分算法库,供开发者下载,交流学习使用,以下是库的头文件。

 

/******************************************************************************
*
*                    ota-rle_x3.lib 使用须知
*   
*      1.ota-rle_x3.lib(以下称该库)支持在内存受限系统的差分文件的解压还原算法,
*        主要应用于单片机(不限于)的差分升级领域,版权属于开发者所有;
*      2.该库免费提供给开发者交流、学习、研究使用,请勿私自应用于商业领域,如若违
*        反使用条款,版权所有者有权进行法律追溯; 
*      3.禁止对该库的反编译、解密等破坏原程序设计的违法操作;
*      4.允许以交流、学习、研究使用为目的的复制与传播,但在转载时不可更改该文件内
*        容,包含该库的使用须知;
*      5.该库所有权属于@QQ172569891所有人。 26/11/2020  上海
*
*******************************************************************************/

/*******************************************************************************
*                   ota-rle_x3.lib 使用说明
* 1.使用该库需要调用2个函数,unpack_init(),注册5个回调函数,分别是old
*   app的flash_read,patch包 flash_read,new包的 flash_read,new包的flash_write,
*   事件回调函数(如 接收到 E_SUCCESS表示文件还原成功,并通过param告知用户新固件
*   的长度,方便用户做后续的flash搬运操作);unpack_start();启动差分包还原算法,
*   执行结果通过回调告知
* 2.flash_read&flash_write 回调函数原型见是 buffer_in_cb&buffer_out_cb,其中offset
*   代表相应flash存储位置的便宜地址(非绝对地址,用户需要在回调中增加相应偏移,以指向
*   实际的物理地址,如 old_flash 的绝对起始地址在0x8001000,用户在进行flash操作的时候要
*   加上这个偏移)
* 3.主要的内存消耗:= MAX_CHUNK_BUFFER_SIZE*3 + MAX_FLASH_RW_SECTOR_SIZE*2
* 
* 4.文件压缩工具请进QQ群 47954837索要
********************************************************************************/


#ifndef __HEADFILE_RLE_X3_UNPACK__
#define __HEADFILE_RLE_X3_UNPACK__
#include <string.h>

#ifndef NULL
#define NULL    0
#endif

#ifndef TRUE
#define TRUE 1
#endif

#ifndef FALSE
#define FALSE   0
#endif

#define ALGORITHM_VER  "122001"
#define PID_VID   0x052C0001                   //厂家&产品 ID
#define MAX_APP_FLASH_SIZE   100*1024UL       //应用程序的最大flash分配空间

#define ENABLE_DEBUG_MSG    TRUE             //调试信息打印功能开关   
#define MAX_CHUNK_BUFFER_SIZE   128         //文件解压缓存大小,不小于128
#define MAX_FLASH_RW_SECTOR_SIZE  256       //flash 读写操作大小,不小于128 

typedef enum
{
    E_SUCCESS,
	E_FILE_HEAD_ERR,
	E_PID_VID_ERR,
	E_FLASH_NOT_ENOUGH_ERR,
	E_DIFF_ALGORITHM_ERR,
	E_FILE_CRC32_ERR,
	E_FILE_CHECK_ERR,
	E_PARAMS_ERR,
	E_FILE_ERROR,
	E_FILE_CRC_ERR,
	E_PATCH_CTRL_ERR,
	E_PATCH_OFFSET_ERR,
	E_PATCH_RW_LEN_ERR,
	E_PATCH_NOUTRANGE_ERR,
	E_PATCH_CRC_ERR,


}state_en;

typedef  int (*buffer_in_cb)(int offset,char *in,int len);
typedef  int (*buffer_out_cb)(int offset,char *out,int len);
typedef  void (*ota_event_cb)(int event_id,int param);

state_en unpack_init(buffer_in_cb old_f,buffer_in_cb patch_f,
					 buffer_in_cb r_new_f,buffer_out_cb new_f,
					 ota_event_cb event_cb);
void unpack_start();

#endif

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页