add trDataTolog() function

This commit is contained in:
CSSC-WORK\murmur 2023-07-26 16:26:53 +08:00
parent 5e655d77f4
commit 78abcf0b1a
7 changed files with 192 additions and 79 deletions

View File

@ -70,7 +70,7 @@ void checkTT()
repGetTT(); //持续更新 repGetTT(); //持续更新
} }
static void getFileData_thread_entry(void) static void upSendFile_thread_entry(void)
{ {
//等待事件 //等待事件
extern struct rt_event hw_check; //硬件条件 extern struct rt_event hw_check; //硬件条件
@ -78,13 +78,6 @@ static void getFileData_thread_entry(void)
static rt_uint8_t d[10][200] = { }; static rt_uint8_t d[10][200] = { };
static rt_uint8_t s[10] = { }; static rt_uint8_t s[10] = { };
// while (tcpInit() != RT_EOK)
// {
// LOG_W("TT server is not ready.");
// rt_thread_mdelay(100);
// }
// LOG_D("TT server is ready.");
while (1) while (1)
{ {
if (rt_event_recv(&hw_check, ALL_READY, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, if (rt_event_recv(&hw_check, ALL_READY, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
@ -103,8 +96,6 @@ static void getFileData_thread_entry(void)
for (size_t var = 0; var < len; var++) for (size_t var = 0; var < len; var++)
{ {
sendMsg(d[var], s[var]); sendMsg(d[var], s[var]);
// LOG_D("i = %d", var);
// LOG_HEX("d", 27, d[var], s[var]);
} }
tcpClose(); tcpClose();
LOG_I("Done."); LOG_I("Done.");
@ -115,10 +106,10 @@ static void getFileData_thread_entry(void)
} }
//MSH_CMD_EXPORT(getFileData_thread_entry,tet); //MSH_CMD_EXPORT(getFileData_thread_entry,tet);
static void gg(void) static void upSendFile(void)
{ {
/* 创建 serial 线程 */ /* 创建 serial 线程 */
rt_thread_t thread = rt_thread_create("PSmsg", getFileData_thread_entry, RT_NULL, 1024 * 12, 27, 10); rt_thread_t thread = rt_thread_create("upSendFile", upSendFile_thread_entry, RT_NULL, 1024 * 12, 27, 10);
/* 创建成功则启动线程 */ /* 创建成功则启动线程 */
if (thread != RT_NULL) if (thread != RT_NULL)
{ {
@ -126,13 +117,13 @@ static void gg(void)
} }
else else
{ {
LOG_E("thread 'PSmsg' create failure."); LOG_E("thread 'upSendFile' create failure.");
return; return;
} }
} }
static void try() static void chkAndSendFile_thread_entry()
{ {
static rt_err_t rst = RT_ERROR; static rt_err_t rst = RT_ERROR;
updatecfg(); updatecfg();
@ -178,44 +169,23 @@ static void try()
} }
} }
//continue; //continue;
//发送数据 //发送数据
//可能有多个待发文件,每个文件打包后为一个二维数组 //可能有多个待发文件,每个文件打包后为一个二维数组
// 如果先打包后发送,需要三维数组,和大内存占用 //如果先打包后发送,需要三维数组,和大内存占用
// 故改为“打包-发送”轮询操作 //故改为“打包-发送”轮询操作
//gg(); // upSendFile();
#ifdef _NO
char *f="1023_05_19_15_29_59_254.txt";
// pack file
// static rt_uint8_t d[10][200] = { };
// static rt_uint8_t s[10] = { };
rt_uint8_t len = 0;
// LOG_D("%p--%p",d,s);
// LOG_I("pack %s ...",f);
len = pack_File(f, 0, d, s);
rt_kprintf("len is %d\n", len);
if (len)
{
for (size_t var = 0; var < len; ++var)
{
// LOG_HEX("d",27,d[var],s[var]);
}
LOG_I("Done.");
}
#endif
LOG_I("----------------------------"); LOG_I("----------------------------");
//initEvent();
// rt_thread_mdelay(100);
} }
} }
void smsg() void chkAndSendFile()
{ {
/* 创建 serial 线程 */ /* 创建 serial 线程 */
rt_thread_t thread = rt_thread_create("checkSta", try, RT_NULL, 1024 * 5, 24, 10); rt_thread_t thread = rt_thread_create("chk&send", chkAndSendFile_thread_entry, RT_NULL, 1024 * 5, 24, 10);
/* 创建成功则启动线程 */ /* 创建成功则启动线程 */
if (thread != RT_NULL) if (thread != RT_NULL)
{ {
@ -223,7 +193,7 @@ void smsg()
} }
else else
{ {
LOG_E("thread 'checkSta' create failure."); LOG_E("thread 'chk&send' create failure.");
return; return;
} }
} }
@ -262,8 +232,8 @@ void deiniCnt()
#define FUNC_DEMO #define FUNC_DEMO
#ifdef FUNC_DEMO //测试时导出命令到控制台 #ifdef FUNC_DEMO //测试时导出命令到控制台
MSH_CMD_EXPORT(smsg, smsg); MSH_CMD_EXPORT(chkAndSendFile, chkAndSendFile);
MSH_CMD_EXPORT(gg, file); MSH_CMD_EXPORT(upSendFile, upSendFile);
MSH_CMD_EXPORT(iniCnt,tcp连接); MSH_CMD_EXPORT(iniCnt,tcp连接);
MSH_CMD_EXPORT(deiniCnt,tcp连接); MSH_CMD_EXPORT(deiniCnt,tcp连接);
#endif #endif

View File

@ -15,6 +15,57 @@
#define LOG_LVL LOG_LVL_DBG #define LOG_LVL LOG_LVL_DBG
#include <ulog.h> #include <ulog.h>
/**
* ASCII字符形式存入log
* @param din
* @param len
* @return 1-0-
*/
int trDataTolog(uint8_t *din, size_t len, uint8_t isTx)
{
char rootDir[22] = ROOT_PATH_LOG;
mkdir(rootDir, 0);
char tstmp[30] = "";
char fn[50] = "";
strcat(fn,rootDir);
strcat(fn,"20");
strcat(fn,date2Str(tstmp));//以小时为独立文件
fn[strlen(fn)-3]='\0';
strcat(fn,"/");
mkdir(fn, 0);
strcat(fn,tstmp);
strcat(fn,".log");
int fd = open(fn, O_WRONLY | O_CREAT | O_APPEND);
if (fd < 0)
{
LOG_E("open file %s failed!", fn);
return -RT_ERROR;
}
else
{
char log[300]="";
char tmp[200]="";
strcat(log,getTimestmp(tmp));
strcat(log,isTx?" [T]: ":" [R]: ");
// strcat(log,bytes2str(din, len, 16, " ", tmp));
strcat(log,din);
strcat(log,"\r\n");
int rst = write(fd, log, strlen(log));
if (rst != strlen(log))
{
LOG_E("write to file %s failed!", fn);
close(fd);
return -RT_ERROR;
}
close(fd);
return RT_EOK;
}
}
RT_WEAK int set_cfg(const char *k, const char*v) RT_WEAK int set_cfg(const char *k, const char*v)
{ {
return; return;
@ -115,6 +166,7 @@ void upSend_thread_entry(void* parameter)
{ {
tcpClose(); tcpClose();
LOG_I("send to TT Done."); LOG_I("send to TT Done.");
}; };
} }
return 0; return 0;
@ -127,6 +179,28 @@ void upSend_thread_entry(void* parameter)
*/ */
RT_WEAK int upSend(uint8_t *din, size_t len) RT_WEAK int upSend(uint8_t *din, size_t len)
{ {
LOG_D("try to upsend to TT.");
uint8_t sta = 1;
while (0 && !isTTjh()) //判断TT状态
{
static uint8_t trycnt = 0;
rt_thread_mdelay(4000);
trycnt += 1;
if (trycnt > 3)
{
sta = 0; //try 3 time
break;
}
}
if (!sta) {
//cache to file
LOG_W("TT is not ready, try to cache %d bytes data to file.",len);
cacheDataToFile(din, len);
// trDataTolog(din, len, 1);
return -RT_ERROR;
}
//此函数有打包操作,需线程操作 //此函数有打包操作,需线程操作
// LOG_D("upsend."); // LOG_D("upsend.");
// return 0; // return 0;
@ -137,16 +211,17 @@ RT_WEAK int upSend(uint8_t *din, size_t len)
msg.len=len; msg.len=len;
/* 创建 serial 线程 */ /* 创建 serial 线程 */
rt_thread_t thread = rt_thread_create("upSend", upSend_thread_entry, (void *) &msg, 1024 * 10, 27, 10); rt_thread_t thread = rt_thread_create("upSend", upSend_thread_entry, (void *) &msg, 1024 * 5, 27, 10);
/* 创建成功则启动线程 */ /* 创建成功则启动线程 */
if (thread != RT_NULL) if (thread != RT_NULL)
{ {
rt_thread_startup(thread); rt_thread_startup(thread);
return RT_EOK;
} }
else else
{ {
LOG_E("thread 'upSend' create failure."); LOG_E("thread 'upSend' create failure.");
return; return -RT_ERROR;
} }
} }
@ -567,7 +642,7 @@ void ttRunCMD(uint8_t *din, size_t len)
} }
RT_WEAK int xpParse(uint8_t * din, size_t len) RT_WEAK int formatAndSendTo3S(uint8_t * din, size_t len)
{ {
// LOG_D("直接调用小彭的函数进行处理。"); // LOG_D("直接调用小彭的函数进行处理。");
char str[200] = "RCV:"; char str[200] = "RCV:";
@ -642,7 +717,7 @@ void parse3SData(uint8_t *din, size_t count)
{ {
// //
xpParse(din,count); formatAndSendTo3S(din,count);
} }
if (din[2] == ADDR_ANJI) if (din[2] == ADDR_ANJI)
{ {
@ -656,7 +731,14 @@ void parse3SData(uint8_t *din, size_t count)
reportDepth(din, count); reportDepth(din, count);
break; break;
default: default:
cacheData(din, count); if (isTTon())
{//如果TT为开机状态具备通信状态待商榷则不缓存直接发
upSend(din, count);
}
else {
cacheDataToFile(din, count);
}
} }
// upSend(din, count); // upSend(din, count);
} }
@ -736,6 +818,40 @@ void parseTTData(uint8_t *din, size_t len)
} }
/**
* get file size
* @param file file name whith fullpath
*/
unsigned long getFileSize(char *file)
{
struct stat stat;
char *fullpath, *path;
#ifdef DFS_USING_WORKDIR
/* open current working directory */
path = rt_strdup("/");
#endif
/* build full path for each file */
fullpath = dfs_normalize_path(path, file);
rt_memset(&stat, 0, sizeof(struct stat));
if (dfs_file_stat(fullpath, &stat) == 0)
{
return (unsigned long) stat.st_size;
}
else
{
return 0;
}
}
void d_getFileSize(int argc, char ** argv)
{
// char *f;
uint16_t size = (uint16_t)getFileSize(argv[1]);
LOG_D("size = %d Byte.",size);
}
/** /**
* *
@ -743,11 +859,11 @@ void parseTTData(uint8_t *din, size_t len)
* @param len * @param len
* @return 0---1-- * @return 0---1--
*/ */
int cacheData(uint8_t *din, size_t len) int cacheDataToFile(uint8_t *din, size_t len)
{ {
LOG_I("FUNC = cache and upsend"); LOG_I("FUNC = cache and upsend");
static int cnt = 0; static uint16_t cnt = 0;
LOG_D("cached size=%d", cnt); LOG_D("already cached %d bytes.", cnt);
char rootDir[22] = "/sd/rxdata/"; char rootDir[22] = "/sd/rxdata/";
mkdir(rootDir, 0); mkdir(rootDir, 0);
@ -772,10 +888,10 @@ int cacheData(uint8_t *din, size_t len)
strcat(f, rootDir); strcat(f, rootDir);
// strcpy(f,rootDir); // strcpy(f,rootDir);
strcat(f, "23_07_19_16_38_36_36.bin"); strcat(f, "23_07_19_16_38_36_36.bin");
LOG_D("need to creat new file"); // LOG_D("need to creat new file");
strncpy(f + strlen(rootDir), ts, strlen(ts)); strncpy(f + strlen(rootDir), ts, strlen(ts));
} }
LOG_D("f=%s", f); // LOG_D("f=%s", f);
int fd = open(f, O_WRONLY | O_CREAT | O_APPEND); int fd = open(f, O_WRONLY | O_CREAT | O_APPEND);
if (fd < 0) if (fd < 0)
{ {
@ -793,6 +909,7 @@ int cacheData(uint8_t *din, size_t len)
} }
cnt += len; cnt += len;
close(fd); close(fd);
LOG_I("cached %d bytes data to '%s'.",cnt,f);
} }
return RT_EOK; return RT_EOK;
@ -802,7 +919,7 @@ void d_cacheData()
uint8_t demo[200]; uint8_t demo[200];
size_t len = sizeof(demo); size_t len = sizeof(demo);
memset(demo,0xAB,len); memset(demo,0xAB,len);
cacheData(demo, len); cacheDataToFile(demo, len);
} }
@ -819,7 +936,9 @@ void parseRS232(uint8_t *din, size_t len)
//check //check
if (memcmp(din,asciiHead,sizeof(asciiHead)) == 0) { if (memcmp(din,asciiHead,sizeof(asciiHead)) == 0) {
//ascii //ascii
trDataTolog(din, len, 0);
LOG_I("type = ASCII"); LOG_I("type = ASCII");
uint8_t index[10]; uint8_t index[10];
uint8_t tmpHead[]={0x35, 0x41, 0x41, 0x35}; uint8_t tmpHead[]={0x35, 0x41, 0x41, 0x35};
size_t n=isInByte(din, len, tmpHead, sizeof(tmpHead), index); size_t n=isInByte(din, len, tmpHead, sizeof(tmpHead), index);
@ -847,6 +966,8 @@ void parseRS232(uint8_t *din, size_t len)
else//如果不是ASCII则统一按HEX计// if (memcmp(din,hexHead,sizeof(hexHead)) == 0) else//如果不是ASCII则统一按HEX计// if (memcmp(din,hexHead,sizeof(hexHead)) == 0)
{ {
//hex //hex
char tmp[200]="";
trDataTolog(bytes2str(din, len, 16, " ", tmp), strlen(tmp), 0);
LOG_I("type = HEX"); LOG_I("type = HEX");
uint8_t index[10]; uint8_t index[10];
@ -891,6 +1012,7 @@ MSH_CMD_EXPORT(selfTest,sysSelfTest);
MSH_CMD_EXPORT(d_packLocMsg,dpackLocMsg); MSH_CMD_EXPORT(d_packLocMsg,dpackLocMsg);
MSH_CMD_EXPORT(packAndSendLoc,packAndSendLoc); MSH_CMD_EXPORT(packAndSendLoc,packAndSendLoc);
MSH_CMD_EXPORT(d_cacheData,d_cacheData); MSH_CMD_EXPORT(d_cacheData,d_cacheData);
MSH_CMD_EXPORT(d_getFileSize,d_getFileSize);
#endif #endif

View File

@ -79,6 +79,7 @@ enum
#define ADDR_TT 0x41 #define ADDR_TT 0x41
#define ADDR_3S 0x32 #define ADDR_3S 0x32
#define ROOT_PATH_LOG "/sd/log/"
#define ROOT_PATH_DATA "/sd/rxdata/"
#endif /* APPLICATIONS_FUNC_FUNC_H_ */ #endif /* APPLICATIONS_FUNC_FUNC_H_ */

View File

@ -389,12 +389,24 @@ void getTT(int argc, char **argv)
/* 导出到自动初始化 */ /* 导出到自动初始化 */
MSH_CMD_EXPORT(getTT, "getTT 3 1" means try 3 times with 1 second interval.); MSH_CMD_EXPORT(getTT, "getTT 3 1" means try 3 times with 1 second interval.);
//MSH_CMD_EXPORT_ALIAS(webclient_get_data, gTTinfo, GET info of TT server.); //MSH_CMD_EXPORT_ALIAS(webclient_get_data, gTTinfo, GET info of TT server.);
/**
* TT是否为开机状态
* @return 1-0-
*/
int isTTon(void) int isTTon(void)
{ {
return !rt_pin_read(TT_EN); return !rt_pin_read(TT_EN);
} }
/**
* TT是否激活
* @return 1-0-
*/
int isTTjh(void)
{
return atoi(TTinfo->jh);
}
void repGetTT_thread_entry(void* parameter) void repGetTT_thread_entry(void* parameter)
{ {
while(!isTTon())//第一次运行时未上电则等待 while(!isTTon())//第一次运行时未上电则等待

View File

@ -79,7 +79,8 @@ void hexFile_thread_entry(void* parameter)
rt_uint8_t *buffer = RT_NULL; rt_uint8_t *buffer = RT_NULL;
#define READ_BUFFER_SIZE 512 #define READ_BUFFER_SIZE 512
buffer = (rt_uint8_t *) malloc(READ_BUFFER_SIZE); buffer = (rt_uint8_t *) malloc(READ_BUFFER_SIZE);
rt_kprintf("------Start------\n"); rt_kprintf("\n------Start------\n");
LOG_D("size = %d bytes.",file_size);
for (size_t i = 0; i < file_size; i += READ_BUFFER_SIZE) for (size_t i = 0; i < file_size; i += READ_BUFFER_SIZE)
{ {
if ((file_size - i) < READ_BUFFER_SIZE) if ((file_size - i) < READ_BUFFER_SIZE)
@ -153,7 +154,29 @@ char *time2Str(char *str)
return str; return str;
} }
char *date2Str(char *str)
{
uint8_t t[10];
size_t len=time2Byte(t);
bytes2str(t, len, 10, "_", str);
// len = strlen(str);
str[11]='\0';
return str;
}
char *getTimestmp(char *str)
{
uint8_t t[10];
size_t len=time2Byte(t);
str[0]='\0';
strcat(str,"20");
bytes2str(t, len, 10, "-", str+2);
str[10]='_';
len = strlen(str);
str[len]='\0';
return str;
}
void tm2str(int argc, char **argv) void tm2str(int argc, char **argv)
@ -161,6 +184,8 @@ void tm2str(int argc, char **argv)
char s[30]; char s[30];
time2Str(s); time2Str(s);
LOG_I("result is %s",s); LOG_I("result is %s",s);
getTimestmp(s);
LOG_I("result is %s",s);
} }
MSH_CMD_EXPORT(tm2str,) MSH_CMD_EXPORT(tm2str,)

View File

@ -282,6 +282,9 @@ int sendMsg(const rt_uint8_t *msg, size_t len)
}; };
#endif #endif
char str[400];
bytes2str(msg, len, 16, " ", str);
trDataTolog(str, strlen(str), 1);
return RT_EOK; return RT_EOK;
} }

View File

@ -119,26 +119,6 @@ static void serial_thread_entry(void *parameter)
LOG_I("%d Bytes received from RS232",rx_length); LOG_I("%d Bytes received from RS232",rx_length);
LOG_HEX("232rx:",16,rx_buffer,rx_length);//print what received. LOG_HEX("232rx:",16,rx_buffer,rx_length);//print what received.
parseRS232(rx_buffer, rx_length); parseRS232(rx_buffer, rx_length);
#ifdef TR_ACK
/* 回传收到的消息 */
rt_device_write(serial, 0, rx_buffer+rx_length, rx_length);
#endif
// if (0 && currLen > 1024) //大于1k则存盘
// {
//
// int fd =open(f,O_WRONLY | O_CREAT|O_APPEND);
// if(fd <0)
// {
// LOG_E("open file %s failed!", f);
// }
// else
// {
// write(fd,rx_buffer,rx_length);
// close(fd);
// currLen = 0;
// rx_length=0;
// }
// }
} }
} }
@ -202,7 +182,7 @@ static int uart_dma_sample(int argc, char *argv[])
/* 创建 serial 线程 */ /* 创建 serial 线程 */
rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024*2, 25+1, 10); rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024*5, 25+1, 10);
/* 创建成功则启动线程 */ /* 创建成功则启动线程 */
if (thread != RT_NULL) if (thread != RT_NULL)
{ {