移植工程到新PCB
ttmsg.c 基本工作,但是遇到malloc内存后地址被篡改的问题,未定位。
This commit is contained in:
parent
3db47098e7
commit
bde51765d0
@ -157,7 +157,10 @@ _exit:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int compress_file(int fd_in, int *fout)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
static int fastlz_decompress_file(int fd_in, int fd_out)
|
static int fastlz_decompress_file(int fd_in, int fd_out)
|
||||||
{
|
{
|
||||||
/* Start to decompress file */
|
/* Start to decompress file */
|
||||||
|
@ -55,9 +55,9 @@ int aes_128_cbc_pkcs7(rt_uint8_t *data, rt_uint16_t len, rt_uint8_t *dout)
|
|||||||
unsigned char edata[cnt];//输出buff
|
unsigned char edata[cnt];//输出buff
|
||||||
mbedtls_aes_context ctx; //创建结构体
|
mbedtls_aes_context ctx; //创建结构体
|
||||||
mbedtls_aes_init(&ctx); //初始化
|
mbedtls_aes_init(&ctx); //初始化
|
||||||
int rst = mbedtls_aes_setkey_enc(&ctx, key, KEY_LEN * 8); //设置密钥
|
mbedtls_aes_setkey_enc(&ctx, key, KEY_LEN * 8); //设置密钥
|
||||||
// rt_kprintf("--%d\n", rst);
|
// rt_kprintf("--%d\n", rst);
|
||||||
rst = mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, (m + 1) * 16, iv, pbuff, edata); //加密
|
mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, (m + 1) * 16, iv, pbuff, edata); //加密
|
||||||
// rt_kprintf("--%d\n", rst);
|
// rt_kprintf("--%d\n", rst);
|
||||||
mbedtls_aes_free(&ctx); //释放结构体
|
mbedtls_aes_free(&ctx); //释放结构体
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ void aes_file(const char *fin, const char *fout)
|
|||||||
close(fd_out);
|
close(fd_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
return RT_EOK;
|
// return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void aes_file_test(int argc, char **argv)
|
void aes_file_test(int argc, char **argv)
|
||||||
|
@ -143,6 +143,7 @@ static void tt_parse(rt_uint8_t *data)
|
|||||||
// rt_kprintf("%5s%5s%5s%5s%15s%15s%10s\n", TTinfo->sim, TTinfo->xh, TTinfo->rw,
|
// rt_kprintf("%5s%5s%5s%5s%15s%15s%10s\n", TTinfo->sim, TTinfo->xh, TTinfo->rw,
|
||||||
// TTinfo->jh, TTinfo->jd, TTinfo->wd,TTinfo->ele);
|
// TTinfo->jh, TTinfo->jd, TTinfo->wd,TTinfo->ele);
|
||||||
|
|
||||||
|
LOG_D("Get RAW data done.");
|
||||||
cJSON_Delete(root);
|
cJSON_Delete(root);
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
@ -174,8 +175,8 @@ static int webclient_get_data(const char *url)
|
|||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// LOG_D("webclient GET request response data :");
|
LOG_D("webclient GET request response data :");
|
||||||
// LOG_D("%s", buffer);
|
LOG_D("%s", buffer);
|
||||||
|
|
||||||
tt_parse(buffer);
|
tt_parse(buffer);
|
||||||
if (buffer)
|
if (buffer)
|
||||||
@ -205,11 +206,12 @@ void getTTinfo_thread_entry(void* parameter)
|
|||||||
url = web_strdup(*(infoH + var));
|
url = web_strdup(*(infoH + var));
|
||||||
if (url == RT_NULL)
|
if (url == RT_NULL)
|
||||||
{
|
{
|
||||||
rt_kprintf("no memory for create getTT url buffer.\n");
|
LOG_E("no memory for create getTT url buffer.\n");
|
||||||
return -RT_ENOMEM;
|
// return -RT_ENOMEM;
|
||||||
}
|
}
|
||||||
webclient_get_data(url);
|
webclient_get_data(url);
|
||||||
web_free(url);
|
web_free(url);
|
||||||
|
rt_thread_mdelay(100);
|
||||||
}
|
}
|
||||||
// rt_kprintf("%5d++%5d --%5d\n",TTinfo->xh,tmp.xh,TTinfo->sim);
|
// rt_kprintf("%5d++%5d --%5d\n",TTinfo->xh,tmp.xh,TTinfo->sim);
|
||||||
// rt_kprintf("%5d%5d%5d%5d%15s%15s%10s\n", TTinfo.sim, TTinfo.xh, TTinfo.rw, TTinfo.jh, TTinfo.jd, TTinfo.wd,TTinfo.ele);
|
// rt_kprintf("%5d%5d%5d%5d%15s%15s%10s\n", TTinfo.sim, TTinfo.xh, TTinfo.rw, TTinfo.jh, TTinfo.jd, TTinfo.wd,TTinfo.ele);
|
||||||
|
@ -80,4 +80,4 @@ static int iwdg_sample(int argc, char *argv[])
|
|||||||
/* 导出到 msh 命令列表中 */
|
/* 导出到 msh 命令列表中 */
|
||||||
//MSH_CMD_EXPORT(iwdg_sample, iwdg sample);
|
//MSH_CMD_EXPORT(iwdg_sample, iwdg sample);
|
||||||
/* 导出到自动初始化 */
|
/* 导出到自动初始化 */
|
||||||
INIT_DEVICE_EXPORT(iwdg_sample);
|
//INIT_DEVICE_EXPORT(iwdg_sample);
|
||||||
|
@ -20,33 +20,18 @@
|
|||||||
* @LastEditors: murmur test@test.com
|
* @LastEditors: murmur test@test.com
|
||||||
* @LastEditTime: 2023-05-11 16:34:31
|
* @LastEditTime: 2023-05-11 16:34:31
|
||||||
* @FilePath: \TT12-MCU\applications\ttmsg\ttmsg.c
|
* @FilePath: \TT12-MCU\applications\ttmsg\ttmsg.c
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
* Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
|
* Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// #include <dfs_file.h>
|
||||||
#include <dfs_file.h>
|
|
||||||
|
|
||||||
#define LOG_TAG "ttmsg"
|
#define LOG_TAG "ttmsg"
|
||||||
#define LOG_LVL LOG_LVL_DBG
|
#define LOG_LVL LOG_LVL_DBG
|
||||||
#include <ulog.h>
|
#include <ulog.h>
|
||||||
|
|
||||||
#include "ttmsg.h"
|
#include "ttmsg.h"
|
||||||
#define STR_LEN_MAX 30
|
|
||||||
//模板
|
|
||||||
MSG msgs_tpl={
|
|
||||||
.fstart = {0x88,0xAA,0xBB,0x88},
|
|
||||||
.fnum = {0x00,0x01},
|
|
||||||
.fbak = {0x00,0x02},
|
|
||||||
.ftype = {0x70,0x21},
|
|
||||||
.fdlen = {0x00,0x00},
|
|
||||||
|
|
||||||
.ftccid = {0x37,0x32,0x32,0x32},
|
|
||||||
|
|
||||||
// .findex = {0x00,0x01,0x02,0x03,0x04,0x05},
|
|
||||||
// .fcfg = {DATA_MODE | CRY_AES},
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 按指定分隔符分割字符串
|
* @brief 按指定分隔符分割字符串
|
||||||
@ -56,29 +41,61 @@ MSG msgs_tpl={
|
|||||||
* @param out 输出字符串数组
|
* @param out 输出字符串数组
|
||||||
* @return size_t 分割后字符串个数
|
* @return size_t 分割后字符串个数
|
||||||
*/
|
*/
|
||||||
|
#ifdef USE_STRTOK
|
||||||
static size_t split(const char *str, const char *deli, char (*out)[STR_LEN_MAX])
|
static size_t split(const char *str, const char *deli, char (*out)[STR_LEN_MAX])
|
||||||
{
|
{
|
||||||
char buf[50];
|
char buf[50];
|
||||||
strcpy(buf, str); // strtok会修改字符串
|
strcpy(buf, str); // strtok会修改字符串
|
||||||
char *token = strtok(buf, deli);
|
char *token = strtok(buf, deli);
|
||||||
char *rst[STR_LEN_MAX];
|
char *rst[STR_LEN_MAX];
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
while (token)
|
while (token)
|
||||||
{
|
{
|
||||||
rst[i++] = token;
|
rst[i++] = token;
|
||||||
token = strtok(NULL, deli);
|
token = strtok(NULL, deli);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新out
|
// 更新out
|
||||||
for (size_t ii = 0; ii < i; ii++)
|
for (size_t ii = 0; ii < i; ii++)
|
||||||
{
|
{
|
||||||
// out[ii] = id[ii];
|
// out[ii] = id[ii];
|
||||||
strcpy(out[ii], rst[ii]);
|
strcpy(out[ii], rst[ii]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// strtok_r版本
|
||||||
|
static size_t split(const char *str, const char *delim, char (*out)[STR_LEN_MAX])
|
||||||
|
{
|
||||||
|
char buf[50];
|
||||||
|
strcpy(buf, str); // strtok会修改字符串
|
||||||
|
|
||||||
|
char *token = NULL;
|
||||||
|
char *saveptr = NULL;
|
||||||
|
char *rst[STR_LEN_MAX];
|
||||||
|
int idx = 0;
|
||||||
|
|
||||||
|
|
||||||
|
token = strtok_r(buf, delim, &saveptr);
|
||||||
|
while (token)
|
||||||
|
{
|
||||||
|
LOG_D("---%s---",token);
|
||||||
|
rst[idx++] = token;
|
||||||
|
token = strtok_r(NULL, delim, &saveptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新out
|
||||||
|
for (size_t ii = 0; ii < idx; ii++)
|
||||||
|
{
|
||||||
|
// out[ii] = id[ii];
|
||||||
|
strcpy(out[ii], rst[ii]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,32 +107,34 @@ static size_t split(const char *str, const char *deli, char (*out)[STR_LEN_MAX])
|
|||||||
*/
|
*/
|
||||||
static size_t getID(const char *str, unsigned char *out)
|
static size_t getID(const char *str, unsigned char *out)
|
||||||
{
|
{
|
||||||
char id[10][STR_LEN_MAX] = {};
|
char id[10][STR_LEN_MAX] = {};
|
||||||
// 分割路径
|
// 分割路径
|
||||||
size_t len = split(str, "/", id);
|
size_t len = split(str, "/", id);
|
||||||
|
|
||||||
// 分割后缀
|
// 分割后缀
|
||||||
len = split(id[len - 1], ".", id);
|
LOG_D("file is %s",id[len-1]);
|
||||||
|
len = split(id[len - 1], ".", id);
|
||||||
|
|
||||||
// 分割时间
|
// 分割时间
|
||||||
len = split(id[0], "_", id);
|
LOG_D("file name is %s",id[0]);
|
||||||
|
len = split(id[0], "_", id);
|
||||||
|
|
||||||
unsigned char tmp[len];
|
unsigned char tmp[len];
|
||||||
for (size_t i = 0; i < len; i++)
|
for (size_t i = 0; i < len; i++)
|
||||||
{
|
|
||||||
unsigned int v = atoi(id[i]);
|
|
||||||
|
|
||||||
// 去除代表20的2000
|
|
||||||
if (v > 0xff)
|
|
||||||
{
|
{
|
||||||
v = v - 2000;
|
unsigned int v = atoi(id[i]);
|
||||||
|
|
||||||
|
// 去除代表20的2000
|
||||||
|
if (v > 0xff)
|
||||||
|
{
|
||||||
|
v = v - 2000;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp[i] = v;
|
||||||
}
|
}
|
||||||
|
LOG_HEX("file ID",16,tmp,len);
|
||||||
tmp[i] = v;
|
memcpy(out, tmp, len);
|
||||||
}
|
return len;
|
||||||
|
|
||||||
memcpy(out, tmp, len);
|
|
||||||
return len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -127,148 +146,269 @@ static size_t getID(const char *str, unsigned char *out)
|
|||||||
*/
|
*/
|
||||||
rt_uint8_t packInit(MSG *tpl, const char *fin, rt_uint8_t flag)
|
rt_uint8_t packInit(MSG *tpl, const char *fin, rt_uint8_t flag)
|
||||||
{
|
{
|
||||||
//模板
|
// memset(tpl, 0, sizeof(MSG)); // 分配空间
|
||||||
MSG msgs_tpl={
|
// 模板
|
||||||
.fstart = {0x88,0xAA,0xBB,0x88},
|
MSG msgs_tpl = {
|
||||||
.fnum = {0x00,0x01},
|
.fstart = {0x88, 0xAA, 0xBB, 0x88},
|
||||||
.fbak = {0x00,0x02},
|
.fnum = {0x00, 0x01},
|
||||||
.ftype = {0x70,0x21},
|
.fbak = {0x00, 0x02},
|
||||||
.fdlen = {0x00,0x00},
|
.ftype = {
|
||||||
|
0x70, 0x21},
|
||||||
|
.fdlen = {0x00, 0x00},
|
||||||
|
|
||||||
.ftccid = {0x37,0x32,0x32,0x32},
|
.ftccid = {0x37, 0x32, 0x32, 0x32},
|
||||||
|
|
||||||
// .findex = {0x00,0x01,0x02,0x03,0x04,0x05},
|
.fcfg = flag,
|
||||||
.fcfg = flag,
|
|
||||||
};
|
};
|
||||||
|
rt_memcpy(tpl, &msgs_tpl, sizeof(MSG));
|
||||||
|
|
||||||
// char *fin="log/2023_05_05/2023_05_05_10_59_23_123";
|
size_t len = getID(fin, tpl->findex);
|
||||||
// unsigned char id[7];
|
if (len != 7)
|
||||||
size_t len = getID(fin, msgs_tpl.findex);
|
{
|
||||||
if (len != 7) {
|
LOG_E("file name %s format error", fin);
|
||||||
LOG_I("file name %s format error",fin);
|
return RT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(tpl,&msgs_tpl,sizof(msgs_tpl));
|
|
||||||
|
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: 按MSG帧格式拼接din数据后输出到dout
|
* @description: 按MSG帧格式拼接din数据后输出到dout
|
||||||
|
* @param *p_msg MSG格式配置文件
|
||||||
* @param {rt_uint8_t} *din 待打包数据
|
* @param {rt_uint8_t} *din 待打包数据
|
||||||
* @param {rt_uint8_t} len 待打包数据长度
|
* @param {rt_uint8_t} len 待打包数据长度
|
||||||
* @param {rt_uint8_t} *id 时间戳,作为数据包唯一ID
|
* @param {rt_uint8_t} *dout 打包后数据
|
||||||
* @param {rt_uint8_t} flag 参数配置,如信息类型、压缩方式、加密方式等
|
|
||||||
* @param {rt_uint8_t} *dout 输出buff
|
|
||||||
* @return {*} 打包后数据总长度
|
* @return {*} 打包后数据总长度
|
||||||
*/
|
*/
|
||||||
rt_uint8_t packMsg(MSG *p_msg, rt_uint8_t *din, rt_uint8_t len, rt_uint8_t *dout)
|
rt_uint8_t packMsg(MSG *p_msg, rt_uint8_t *din, rt_uint8_t len, rt_uint8_t *dout)
|
||||||
{
|
{
|
||||||
|
|
||||||
rt_uint8_t fralen=sizeof(MSG)+len;//len of current frame
|
rt_uint8_t fralen = sizeof(MSG) + len; // len of current frame
|
||||||
// 计算各字段
|
// 计算各字段
|
||||||
p_msg->fdlen[0]=0;//单包长度必不会超过0xFF,故高字节始终为0
|
p_msg->fdlen[0] = 0; // 单包长度必不会超过0xFF,故高字节始终为0
|
||||||
p_msg->fdlen[1]= fralen - 13;//总长度-帧头长度
|
p_msg->fdlen[1] = fralen - 13; // 总长度-帧头长度
|
||||||
// memcpy(p_msg->findex,id,6);
|
// memcpy(p_msg->findex,id,6);
|
||||||
|
|
||||||
// 将待发数据传入帧数据
|
// 将待发数据传入帧数据
|
||||||
memcpy(p_msg->fdata,din,len);
|
rt_memcpy(p_msg->fdata, din, len);
|
||||||
|
|
||||||
// 将打包后帧数据传入buff
|
// 将打包后帧数据传入buff
|
||||||
memcpy(dout,p_msg,fralen);
|
rt_memcpy(dout, p_msg, fralen);
|
||||||
|
|
||||||
// ! 释放内存
|
|
||||||
// free(p_msg);
|
|
||||||
// p_msg=NULL;
|
|
||||||
|
|
||||||
return fralen;
|
return fralen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 将din按指定长度w分割,再按MSG帧格式拼接
|
||||||
|
* @param *cfg MSG格式配置文件
|
||||||
|
* @param {rt_uint8_t} *din 待打包数据
|
||||||
|
* @param {rt_uint8_t} len 待打包数据长度
|
||||||
|
* @param {rt_uint8_t} w 分割长度
|
||||||
|
* @param {rt_uint8_t} *dout 打包后数据
|
||||||
|
* @return {*} 打包后数据总长度
|
||||||
|
*/
|
||||||
|
size_t packMsgs(MSG *cfg, rt_uint8_t *din, size_t len, rt_uint8_t w, rt_uint8_t (*dout)[200], rt_uint8_t *arrlen)
|
||||||
|
{
|
||||||
|
if (!(w > 0)) // 无效长度
|
||||||
|
{
|
||||||
|
w = len;
|
||||||
|
}
|
||||||
|
rt_uint8_t row = (len / w) + (len % w > 0 ? 1 : 0);
|
||||||
|
// rt_uint8_t packdata[row][200]; // 打包后数据
|
||||||
|
rt_uint8_t tlen[row]; // 打包后数据各维长度
|
||||||
|
rt_uint8_t index = 0;
|
||||||
|
|
||||||
|
// rt_uint8_t in[len];
|
||||||
|
// memcpy(in,din,len);
|
||||||
|
|
||||||
|
cfg->fallpiece[0]=row;
|
||||||
|
for (size_t var = 0; var < len;var += w)
|
||||||
|
{
|
||||||
|
size_t tmplen = len - var; // 当前待打包数据的长度
|
||||||
|
tmplen = tmplen > w ? w : tmplen; // 判断最后一包数据的长度
|
||||||
|
cfg->fcurpiece[0] = index+1;
|
||||||
|
size_t col = packMsg(cfg, din+var, tmplen, dout[index]);
|
||||||
|
tlen[index] = col;
|
||||||
|
index++;
|
||||||
|
LOG_D("index/row-var-tmplen");
|
||||||
|
LOG_D("%5d/%3d-%3d-%6d",index,row,var,tmplen);
|
||||||
|
LOG_HEX("per msg",27,dout[index-1],col);
|
||||||
|
LOG_D("--------");
|
||||||
|
LOG_D("addr is %d",din);
|
||||||
|
rt_thread_mdelay(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
// for (size_t i = 0; i < row; i++)
|
||||||
|
// {
|
||||||
|
// memcpy(dout[i], packdata[i], tlen[i]);
|
||||||
|
// }
|
||||||
|
memcpy(arrlen, tlen, row);
|
||||||
|
// LOG_D("--addr is %d",din);
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
size_t demo (uint8_t *din)
|
||||||
|
{
|
||||||
|
size_t s= 1024*10;
|
||||||
|
rt_uint8_t *buf = rt_malloc(s);
|
||||||
|
if (buf!=RT_NULL) {
|
||||||
|
LOG_D("mem ok, addr is %d",buf);
|
||||||
|
LOG_D("addr is %d",rt_memset(buf, 0xab, s));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LOG_E("no mem.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (size_t var = 0; var < s; ++ var) {
|
||||||
|
rt_memcpy(buf+var, din+var, 1);
|
||||||
|
}
|
||||||
|
LOG_HEX("buf",16,buf,100);
|
||||||
|
LOG_D("addr is %d",din);
|
||||||
|
if (buf) {
|
||||||
|
rt_free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将指定文件按帧协议进行切片打包,返回二维数组
|
* 将指定文件按帧协议进行切片打包,返回二维数组
|
||||||
* @param cfg MSG格式配置文件
|
* @param *cfg MSG格式配置文件
|
||||||
* @param fin 待打包文件名
|
* @param fin 待打包文件名
|
||||||
|
* @param flag 配置信息
|
||||||
* @param dout 打包后二维数组
|
* @param dout 打包后二维数组
|
||||||
|
* @param arrlen 打包后二维数组各维数组的长度
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
size_t pack_File(MSG *cfg, const char *fin, char (*dout)[200])
|
size_t pack_File(const char *fin, rt_uint8_t flag, char (*dout)[200], char *arrLen)
|
||||||
{
|
{
|
||||||
int fd_in = -1, fd_out = -1;
|
MSG cfg;
|
||||||
int ret = 0;
|
rt_memset(&cfg, 0, sizeof(MSG)); // 分配空间
|
||||||
|
rt_uint8_t rst = packInit(&cfg, fin, flag);
|
||||||
|
if (rst!= RT_EOK) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
size_t file_size = 0;
|
int fd_in = -1; //, fd_out = -1;
|
||||||
rt_uint8_t *buffer = RT_NULL;
|
|
||||||
size_t flen = 150; //每包数据初始长度,最大不超过 FRAME_DATA_LEN_MAX
|
static size_t file_size = 0;
|
||||||
|
// rt_uint8_t *buffer = RT_NULL;
|
||||||
|
size_t flen = 150; // 每包数据初始长度,最大不超过 FRAME_DATA_LEN_MAX
|
||||||
|
size_t len = 0;
|
||||||
|
|
||||||
fd_in = open(fin, O_RDONLY, 0);
|
fd_in = open(fin, O_RDONLY, 0);
|
||||||
if (fd_in < 0)
|
if (fd_in < 0)
|
||||||
{
|
{
|
||||||
rt_kprintf("[fastlz] open the input file : %s error!\n", fin);
|
LOG_E("open the input file : %s error!\n", fin);
|
||||||
ret = -1;
|
close(fd_in);
|
||||||
goto _exit;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fd_out = open(fout, O_WRONLY | O_CREAT | O_TRUNC, 0);
|
|
||||||
// if (fd_out < 0)
|
|
||||||
// {
|
|
||||||
// rt_kprintf("[fastlz] open the output file : %s error!\n", fout);
|
|
||||||
// ret = -1;
|
|
||||||
// goto _exit;
|
|
||||||
// }
|
|
||||||
|
|
||||||
file_size = lseek(fd_in, 0, SEEK_END);
|
file_size = lseek(fd_in, 0, SEEK_END);
|
||||||
|
LOG_I("file size is %d bytes.",file_size);
|
||||||
lseek(fd_in, 0, SEEK_SET);
|
lseek(fd_in, 0, SEEK_SET);
|
||||||
|
rt_uint8_t *buffer = rt_malloc(file_size);
|
||||||
//粗略调整每包大小
|
if (buffer == RT_NULL) {
|
||||||
while (file_size % flen < flen / 1.2 && flen < FRAME_DATA_LEN_MAX) //阈值约83%
|
LOG_E("No memory for read %s.",fin);
|
||||||
{
|
return 0;
|
||||||
flen += 1;
|
|
||||||
}
|
}
|
||||||
if (file_size % flen < flen / 1.2)
|
// rt_uint8_t buffer[file_size];
|
||||||
{ //到达限制仍不符合要求
|
rt_memset(buffer, 0x00, file_size);
|
||||||
flen = 150;
|
read(fd_in, buffer, file_size);
|
||||||
while (file_size % flen < flen / 2.5 && flen < FRAME_DATA_LEN_MAX) //调整阈值为40%
|
close(fd_in);
|
||||||
|
// 粗略调整每包大小
|
||||||
|
if (file_size > FRAME_DATA_LEN_MAX) {
|
||||||
|
while (file_size % flen < flen / 1.2 && flen < FRAME_DATA_LEN_MAX) // 阈值约83%
|
||||||
{
|
{
|
||||||
flen += 1;
|
flen += 1;
|
||||||
}
|
}
|
||||||
}
|
if (file_size % flen < flen / 1.2)
|
||||||
rt_uint8_t packdata[file_size/flen+1][flen];
|
{ // 到达限制仍不符合要求
|
||||||
buffer = (rt_uint8_t *) malloc(file_size);
|
flen = 150;
|
||||||
|
while (file_size % flen < flen / 2.5 && flen < FRAME_DATA_LEN_MAX) // 调整阈值为40%
|
||||||
|
{
|
||||||
for (int var = 0; var < file_size; ++flen)
|
flen += 1;
|
||||||
{
|
}
|
||||||
packMsg(cfg,buffer+var,flen,packdata[var]);
|
|
||||||
}
|
|
||||||
|
|
||||||
_exit:
|
|
||||||
if(fd_in >= 0)
|
|
||||||
{
|
|
||||||
close(fd_in);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
flen = file_size;
|
||||||
|
}
|
||||||
|
LOG_I("len of data per pack is %d Bytes.",flen);
|
||||||
|
LOG_I("cnt of packages is %d",(file_size / flen) + (file_size % flen > 0 ? 1 : 0));
|
||||||
|
// LOG_HEX("BEFORE:",16,buffer,file_size);
|
||||||
|
LOG_D("1-addr is %p",buffer);
|
||||||
|
|
||||||
// if(fd_out >= 0)
|
|
||||||
// {
|
|
||||||
// close(fd_out);
|
|
||||||
// }
|
|
||||||
// if (cmprs_buffer)
|
|
||||||
// {
|
|
||||||
// free(cmprs_buffer);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (buffer)
|
|
||||||
// {
|
|
||||||
// free(buffer);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return ret;
|
len = packMsgs(&cfg, buffer, file_size, flen, dout, arrLen);
|
||||||
|
LOG_D("2-addr is %p",buffer);
|
||||||
|
// len = demo(buffer);
|
||||||
|
|
||||||
}
|
LOG_D("len is %d",len);
|
||||||
|
LOG_I("file size is %d bytes.",file_size);
|
||||||
|
// LOG_HEX("AFTER:",16,buffer,file_size);
|
||||||
|
LOG_D("addr is %p",buffer);
|
||||||
|
|
||||||
void demomsg() {
|
|
||||||
|
|
||||||
|
if (fd_in >= 0)
|
||||||
|
{
|
||||||
|
close(fd_in);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer!=RT_NULL)
|
||||||
|
{
|
||||||
|
LOG_D("try to free buf.");
|
||||||
|
rt_free(buffer);
|
||||||
|
LOG_D("free buf done.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void pf_thread_entry(void* parameter)
|
||||||
|
{
|
||||||
|
|
||||||
|
char *f = (char *) parameter;
|
||||||
|
rt_uint8_t d[50][200];
|
||||||
|
rt_uint8_t s[50];
|
||||||
|
size_t len = pack_File(f, 0, d, s);
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
LOG_I("Done.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void pmsg(int argc, char **argv)
|
||||||
|
{
|
||||||
|
if (argc == 2)
|
||||||
|
{
|
||||||
|
static char c[STR_LEN_MAX];
|
||||||
|
strcpy(c, argv[1]);
|
||||||
|
|
||||||
|
/* 创建线程 */
|
||||||
|
rt_thread_t thread = rt_thread_create("pmsg", pf_thread_entry, (void *) c, 1024 * 30, 25, 10);
|
||||||
|
/* 创建成功则启动线程 */
|
||||||
|
if (thread != RT_NULL)
|
||||||
|
{
|
||||||
|
rt_thread_startup(thread);
|
||||||
|
// rt_kprintf("done");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_E("thread 'pmsg' create failure.");
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rt_kprintf("Usage:\n");
|
||||||
|
rt_kprintf("pmsg [input_file] pack \"input_file\" \n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#include <finsh.h>
|
||||||
|
|
||||||
|
MSH_CMD_EXPORT(pmsg, 打包文件。);
|
||||||
|
@ -11,15 +11,18 @@
|
|||||||
#define APPLICATIONS_TTMSG_TTMSG_H_
|
#define APPLICATIONS_TTMSG_TTMSG_H_
|
||||||
|
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
#include <stdio.h>
|
//#include <stdio.h>
|
||||||
#include <stdlib.h>
|
//#include <stdlib.h>
|
||||||
|
|
||||||
#include <stdint.h>
|
//#include <stdint.h>
|
||||||
#include <string.h>
|
//#include <string.h>
|
||||||
|
//#include "posix/string.h"
|
||||||
#include <dfs_file.h>
|
#include <dfs_file.h>
|
||||||
|
|
||||||
#define FRAME_DATA_LEN_MAX 180
|
#define FRAME_DATA_LEN_MAX 180
|
||||||
|
#define STR_LEN_MAX 30
|
||||||
|
|
||||||
|
/*
|
||||||
typedef enum{
|
typedef enum{
|
||||||
//
|
//
|
||||||
|
|
||||||
@ -46,8 +49,30 @@ typedef enum{
|
|||||||
//
|
//
|
||||||
|
|
||||||
}fopt_e;
|
}fopt_e;
|
||||||
|
*/
|
||||||
|
//控制字,总两字节
|
||||||
|
//加密,低2位
|
||||||
|
#define CRY_NONE 0
|
||||||
|
#define CRY_AES 1
|
||||||
|
#define CRY_RSA 2
|
||||||
|
|
||||||
#pragma pack(1)
|
//压缩,次高2位
|
||||||
|
#define COMP_NONE (0<<2)
|
||||||
|
#define COMP_FAST_LZ (1<<2)//压缩率中等,demo约1/0.62,资源占用少
|
||||||
|
#define COMP_QUICK_LZ (2<<2)
|
||||||
|
#define COMP_LZMA (3<<2)//压缩率可能最高,样例报错还未定位,猜测是内存不足
|
||||||
|
|
||||||
|
//数据类型子类,随CTRL_MODE不同而不同,共3位8种
|
||||||
|
#define MODE_0 (0<<4)
|
||||||
|
#define MODE_1 (1<<4)
|
||||||
|
// 。。。
|
||||||
|
#define MODE_7 (7<<4)
|
||||||
|
|
||||||
|
//数据类型,最高位
|
||||||
|
#define CTRL_MODE (0<<7)
|
||||||
|
#define DATA_MODE (1<<7)
|
||||||
|
|
||||||
|
//#pragma pack(1)
|
||||||
typedef struct{
|
typedef struct{
|
||||||
//帧头
|
//帧头
|
||||||
//格式是TT厂家确定的,厂家不变则不会变,13字节
|
//格式是TT厂家确定的,厂家不变则不会变,13字节
|
||||||
@ -71,7 +96,7 @@ typedef struct{
|
|||||||
|
|
||||||
}MSG;
|
}MSG;
|
||||||
|
|
||||||
rt_uint8_t packMsg(MSG *p_msg, rt_uint8_t *din, rt_uint8_t len, rt_uint8_t *dout);
|
//rt_uint8_t packMsg(MSG *p_msg, rt_uint8_t *din, rt_uint8_t len, rt_uint8_t *dout);
|
||||||
|
|
||||||
|
|
||||||
#endif /* APPLICATIONS_TTMSG_TTMSG_H_ */
|
#endif /* APPLICATIONS_TTMSG_TTMSG_H_ */
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
//#define LOG_LVL LOG_LVL_DBG
|
//#define LOG_LVL LOG_LVL_DBG
|
||||||
//#include <ulog.h>
|
//#include <ulog.h>
|
||||||
|
|
||||||
#define DBG_TAG "main"
|
#define DBG_TAG "w25q"
|
||||||
#define DBG_LVL DBG_LOG
|
#define DBG_LVL DBG_LOG
|
||||||
#include <rtdbg.h>
|
#include <rtdbg.h>
|
||||||
|
|
||||||
@ -23,8 +23,8 @@
|
|||||||
int rt_hw_spi_flash_init(void)
|
int rt_hw_spi_flash_init(void)
|
||||||
{
|
{
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
// __HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
rt_hw_spi_device_attach("spi1", "spi10", GPIOG, GPIO_PIN_8);
|
rt_hw_spi_device_attach("spi2", "spi10", GPIOB, GPIO_PIN_12);
|
||||||
|
|
||||||
if (RT_NULL == rt_sfud_flash_probe("W25Q128", "spi10"))
|
if (RT_NULL == rt_sfud_flash_probe("W25Q128", "spi10"))
|
||||||
{
|
{
|
||||||
|
@ -46,13 +46,13 @@ RT_WEAK void rt_hw_board_init()
|
|||||||
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
|
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
|
||||||
{
|
{
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
if(hspi->Instance==SPI1)
|
if(hspi->Instance==SPI2)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN SPI1_MspInit 0 */
|
/* USER CODE BEGIN SPI1_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspInit 0 */
|
/* USER CODE END SPI1_MspInit 0 */
|
||||||
/* Peripheral clock enable */
|
/* Peripheral clock enable */
|
||||||
__HAL_RCC_SPI1_CLK_ENABLE();
|
__HAL_RCC_SPI2_CLK_ENABLE();
|
||||||
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
@ -61,12 +61,17 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
|
|||||||
PB4 ------> SPI1_MISO
|
PB4 ------> SPI1_MISO
|
||||||
PB5 ------> SPI1_MOSI
|
PB5 ------> SPI1_MOSI
|
||||||
*/
|
*/
|
||||||
|
/**SPI2 GPIO Configuration
|
||||||
|
PB13 ------> SPI1_SCK
|
||||||
|
PB14 ------> SPI1_MISO
|
||||||
|
PB15 ------> SPI1_MOSI
|
||||||
|
*/
|
||||||
|
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
|
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
|
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
||||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI1_MspInit 1 */
|
/* USER CODE BEGIN SPI1_MspInit 1 */
|
||||||
|
@ -68,8 +68,8 @@ extern "C"
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define BSP_USING_UART1
|
#define BSP_USING_UART1
|
||||||
#define BSP_UART1_TX_PIN "PA9"
|
#define BSP_UART1_TX_PIN "PB6"
|
||||||
#define BSP_UART1_RX_PIN "PA10"
|
#define BSP_UART1_RX_PIN "PB7"
|
||||||
|
|
||||||
#define BSP_USING_UART3
|
#define BSP_USING_UART3
|
||||||
#define BSP_UART3_TX_PIN "PB10"
|
#define BSP_UART3_TX_PIN "PB10"
|
||||||
@ -123,8 +123,8 @@ extern "C"
|
|||||||
* such as #define HAL_SPI_MODULE_ENABLED
|
* such as #define HAL_SPI_MODULE_ENABLED
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define BSP_USING_SPI1
|
#define BSP_USING_SPI2
|
||||||
/*#define BSP_USING_SPI2*/
|
/*#define BSP_USING_SPI1*/
|
||||||
/*#define BSP_USING_SPI3*/
|
/*#define BSP_USING_SPI3*/
|
||||||
|
|
||||||
/*-------------------------- SPI CONFIG END --------------------------*/
|
/*-------------------------- SPI CONFIG END --------------------------*/
|
||||||
@ -372,7 +372,7 @@ extern "C"
|
|||||||
|
|
||||||
#define LED_HEART GET_PIN(E,3)
|
#define LED_HEART GET_PIN(E,3)
|
||||||
#ifndef ETH_RESET_PIN
|
#ifndef ETH_RESET_PIN
|
||||||
#define ETH_RESET_PIN GET_PIN(E, 7)//71
|
#define ETH_RESET_PIN GET_PIN(A, 4)//E-7
|
||||||
#endif
|
#endif
|
||||||
////#define RESET_LB GET_PIN(E, 1)
|
////#define RESET_LB GET_PIN(E, 1)
|
||||||
////#define RESET_UB GET_PIN(E, 0)
|
////#define RESET_UB GET_PIN(E, 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user