From f4170d06e680371ac870ca9f8aa9051d33e96ad4 Mon Sep 17 00:00:00 2001 From: "CSSC-WORK\\murmur" Date: Mon, 21 Aug 2023 17:18:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BC=80=E7=AA=97=E6=A0=87?= =?UTF-8?q?=E5=BF=97=EF=BC=8C=E5=AE=8C=E5=96=84=E7=9B=B8=E5=85=B3=E9=80=BB?= =?UTF-8?q?=E8=BE=91=20=E6=9B=B4=E6=96=B0FRAME=5FDATA=5FLEN=5FMAX=E7=9A=84?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/alarmer.c | 1 + applications/core.c | 44 ++++++++++++++++++++++++++++---------- applications/cryp.c | 12 +++++------ applications/func/func.c | 25 ++++++++-------------- applications/getinfo.c | 22 ++++++++++--------- applications/main.c | 2 ++ applications/ttTR.c | 2 +- applications/ttmsg/ttmsg.c | 3 ++- applications/ttmsg/ttmsg.h | 2 +- drivers/drv_eth.c | 13 +++++++++-- 10 files changed, 77 insertions(+), 49 deletions(-) diff --git a/applications/alarmer.c b/applications/alarmer.c index 035656d..439ae5b 100644 --- a/applications/alarmer.c +++ b/applications/alarmer.c @@ -66,6 +66,7 @@ void poTT_callback(rt_alarm_t alarm, time_t timestamp) { LOG_D("power UP TT."); initTT(); + setWindowMode(); } void pdTT_callback(rt_alarm_t alarm, time_t timestamp) { diff --git a/applications/core.c b/applications/core.c index b14e78b..b415921 100644 --- a/applications/core.c +++ b/applications/core.c @@ -282,6 +282,9 @@ void getAndSendFile() } } + //发送完毕 +// rt_sem_take(sem, timeout) + resetTM(); } static void chkAndSendFile_thread_entry() @@ -294,6 +297,7 @@ static void chkAndSendFile_thread_entry() RT_WAITING_FOREVER, RT_NULL) == RT_EOK) //条件1满足 { LOG_I("等待TT就绪"); + LOG_I("当前规则为:连续%d个采集周期TT信号质量不低于%d",scfg.minTTPeriCnt,scfg.minTTsinal); initTT(); } @@ -348,7 +352,8 @@ void chkAndSendFile() INIT_APP_EXPORT(chkAndSendFile); static rt_timer_t tmrToPNTT=RT_NULL; -static int isInWindow=0;//winow 关闭时复位 +static uint8_t isWindowMode=0;//自动或手动引起TT开机 + /** * 关闭超时定时器,定时时间到后关闭TT */ @@ -360,8 +365,15 @@ void stopTM() rt_timer_stop(tmrToPNTT); rt_timer_stop(tmrToPNTT); } + +void setWindowMode(void) +{ + isWindowMode = 1; + stopTM(); +} /** * 重启超时定时器,定时时间到后关闭TT + * 逻辑是非开窗(包括自动、手动)状态下TT无接收数据则启动关机倒计时 */ void resetTM() { @@ -369,7 +381,7 @@ void resetTM() if (tmrToPNTT == RT_NULL) { return; } - if (isInWindow) { + if (isWindowMode) { stopTM(); return; } @@ -380,13 +392,16 @@ void resetTM() rt_timer_start(tmrToPNTT); LOG_D("%d minutes from now to power down TT.",scfg.timeout); } -void d_getRemain() +void d_remain() { - LOG_D("=%d=",rt_tick_from_millisecond(10*60*1000)); + if (tmrToPNTT == RT_NULL) { + LOG_I("tmrToPNTT is NULL"); + return; + } rt_tick_t arg1,arg2; - arg1=rt_timer_control(tmrToPNTT, RT_TIMER_CTRL_GET_TIME, (void*)&arg1); - arg2=rt_timer_control(tmrToPNTT, RT_TIMER_CTRL_GET_REMAIN_TIME, (void*)&arg2); - LOG_D("tm=%d-%d",arg1,arg2); + rt_timer_control(tmrToPNTT, RT_TIMER_CTRL_GET_TIME, (void*)&arg1); + rt_timer_control(tmrToPNTT, RT_TIMER_CTRL_GET_REMAIN_TIME, (void*)&arg2); + LOG_D("%d / %d min",arg2/60000,arg1/60000); } /* 定时器超时函数 */ @@ -404,7 +419,7 @@ static void timeoutFunc(void *parameter) void initTT_thread_entry() { pwTT_thread_entry("1"); - rt_thread_mdelay(15000);//wait TT to boot up +// rt_thread_mdelay(15000);//wait TT to boot up while (1) { if (!isTTon()) { @@ -420,15 +435,20 @@ void initTT_thread_entry() if (!isEthUP()) { //只初始化一次 LOG_D("init eth..."); + rt_pin_write(ETH_RESET_PIN, PIN_HIGH); if (rt_hw_stm32_eth_init() == RT_EOK) { LOG_D("eth inited DONE."); +// lwip_sys_init(); }; //激活网口 } else if (!isTCPok()) //判断TCP连接是否正常,异常自动重连 { // LOG_W("TT server is not ready,--%d",isTCPok()); - tcpInit(); +// tcpInit(); + if (tcpInit() != RT_EOK) { + cmd_free(); + } // rt_thread_mdelay(1000); if (isTCPok()) { @@ -459,6 +479,7 @@ void deInitTT_thread_entry() rt_hw_stm32_eth_deinit(); //qu激活网口 // rt_thread_mdelay(3000); pwTT_thread_entry("0"); + stopTM(); // if (0&& tmrToPNTT) // { // rt_timer_delete(tmrToPNTT); //关闭倒计时 @@ -527,7 +548,8 @@ MSH_CMD_EXPORT(fileIsReady,fileIsReady); MSH_CMD_EXPORT(chkAndSendFile, chkAndSendFile); //MSH_CMD_EXPORT(upSendFile, upSendFile); MSH_CMD_EXPORT(initTT,初始化TT); -MSH_CMD_EXPORT(deInitTT,初始化TT); -MSH_CMD_EXPORT(d_getRemain,d_getRemain); +MSH_CMD_EXPORT(deInitTT,去初始化TT); +MSH_CMD_EXPORT(d_remain,剩余超时时间); +MSH_CMD_EXPORT(resetTM,resetTM); MSH_CMD_EXPORT(d_upSendFile,d_upSendFile); #endif diff --git a/applications/cryp.c b/applications/cryp.c index 313449b..fedf75b 100644 --- a/applications/cryp.c +++ b/applications/cryp.c @@ -21,7 +21,7 @@ #define KEY_LEN 32//密钥长度 #endif -size_t aes_128_cbc_pkcs7(rt_uint8_t *data, size_t len, rt_uint8_t *dout) +size_t aes_256_cbc_pkcs7(rt_uint8_t *data, size_t len, rt_uint8_t *dout) { // AES-256 // 工作模式 CBC ,填充模式 PKCS7,不同语言要保持一致。 @@ -61,7 +61,7 @@ size_t aes_128_cbc_pkcs7(rt_uint8_t *data, size_t len, rt_uint8_t *dout) } -size_t aes_128_cbc_pkcs7_de(rt_uint8_t *data, size_t len, rt_uint8_t *dout) +size_t aes_256_cbc_pkcs7_de(rt_uint8_t *data, size_t len, rt_uint8_t *dout) { // AES-256 // 工作模式 CBC ,填充模式 PKCS7,不同语言要保持一致。 @@ -115,8 +115,7 @@ size_t aes_128_cbc_pkcs7_de(rt_uint8_t *data, size_t len, rt_uint8_t *dout) */ size_t decryp_data(const uint8_t *din, size_t len, uint8_t *dout) { - size_t nlen = aes_128_cbc_pkcs7_de(din, len, dout); - return nlen; + return aes_256_cbc_pkcs7_de(din, len, dout); } /** @@ -128,8 +127,7 @@ size_t decryp_data(const uint8_t *din, size_t len, uint8_t *dout) */ size_t cryp_data(const uint8_t *din, int len, uint8_t *dout) { - size_t nlen = aes_128_cbc_pkcs7(din, len, dout); - return nlen; + return aes_256_cbc_pkcs7(din, len, dout); } void aes_string_test(int argc, char **argv) { @@ -188,7 +186,7 @@ void aes_file(const char *fin, const char *fout) read(fd_in, buffer, file_size); - size_t len = aes_128_cbc_pkcs7(buffer, file_size, outbuffer); + size_t len = aes_256_cbc_pkcs7(buffer, file_size, outbuffer); write(fd_out, outbuffer, len); LOG_I("AESed to %s done. File size from %d bytes to %d.\n", fout,file_size, len); diff --git a/applications/func/func.c b/applications/func/func.c index b4a2316..d7cd078 100644 --- a/applications/func/func.c +++ b/applications/func/func.c @@ -346,7 +346,9 @@ void openWindow(int t) { //开启TT - pwTT_thread_entry("1");//开机 +// pwTT_thread_entry("1");//开机 + initTT(); + setWindowMode(); if (!t) { LOG_D("手动开窗完成,需手动关窗。"); return; @@ -355,8 +357,8 @@ void openWindow(int t) //设置定时器,定时器到则关窗 /* 创建定时器,单次定时器 */ rt_timer_t timer1; - timer1 = rt_timer_create("window", pwTT_thread_entry, - 0, rt_tick_from_millisecond(t*60*1000), + timer1 = rt_timer_create("window", deInitTT(), + RT_NULL, rt_tick_from_millisecond(t*60*1000), RT_TIMER_FLAG_ONE_SHOT); /* 启动定时器 */ if (timer1 != RT_NULL) @@ -372,6 +374,7 @@ void openWindow(int t) void closeWindow() { // pwTT_thread_entry("0");//关 机 + deInitTT(); LOG_D("手动关窗完成。"); } @@ -1253,21 +1256,11 @@ void parseRS232(uint8_t *din, size_t len) */ int isEthUP() { - //static void netdev_list_if(void) in netdev.c - -// struct netdev *netdev = RT_NULL; -// netdev = netdev_get_by_name(argv[1]); -// if (netdev == RT_NULL) -// { -// LOG_D("none"); -// } -// else { -// LOG_D("--%d",netdev->flags); -// } + //netdev.c extern struct netdev *netdev_default; - int rst = (netdev_default->flags & 0x01U) ? 1:0; + int rst = (netdev_default->flags & 0x01U) ? 1:0; //0x01 = NETDEV_FLAG_UP // LOG_D("eth is %s.",rst?"up":"down"); - +// rst &= (netdev_default->flags & 0x04U) ? 1:0;//0x04 NETDEV_FLAG_LINK_UP return rst; } diff --git a/applications/getinfo.c b/applications/getinfo.c index 7f75a01..c9a7d5e 100644 --- a/applications/getinfo.c +++ b/applications/getinfo.c @@ -179,12 +179,12 @@ static void rulecheck(void) { //默认为 TT连续5个周期为激活状态且信号强度不低于5。 //满足加1,不满足清零 - static rt_uint16_t okCnt=0; + static size_t okCnt=0; if (!okCnt) { - LOG_D("当前规则为:连续%d个采集周期TT信号质量不低于%d",scfg.minTTPeriCnt,scfg.minTTsinal); +// LOG_D("当前规则为:连续%d个采集周期TT信号质量不低于%d",scfg.minTTPeriCnt,scfg.minTTsinal); } int xh=atoi(TTinfo->xh); - if (xh == 99) { + if (xh > 90) { xh=0; } if (atoi(TTinfo->jh) && !(xh < scfg.minTTsinal) ) {// @@ -193,13 +193,13 @@ static void rulecheck(void) } else { okCnt = 0; -// LOG_W("不符合。"); + LOG_W("不符合。"); return; } if (okCnt >= scfg.minTTPeriCnt) { //TT具备发送条件 TTIsReady(); -// LOG_I("符合规则,TT具备发送状态。"); + LOG_I("符合规则,TT具备发送状态。"); okCnt = scfg.minTTPeriCnt -1; } // if (okCnt > minTTPeriCnt) { @@ -222,7 +222,7 @@ static void tt_parse(rt_uint8_t *data) root = cJSON_Parse((const char *) data); if (!root) { - rt_kprintf("No memory for cJSON root!\n"); + LOG_W("JSON string is not ok, or No memory for cJSON root!"); return; } object = cJSON_GetObjectItem(root, "data"); @@ -314,8 +314,7 @@ static int webclient_get_data(const char *url) LOG_D("webclient GET request response data :"); LOG_D("%s", buffer); - - if (buffer) + if (buffer && length && buffer[length-1] == 0x7d) //0x7d='}' { tt_parse(buffer); web_free(buffer); @@ -414,8 +413,8 @@ uint8_t getXh(void) void repGetTT_thread_entry(void* parameter) { - while(!isTCPok())//第一次运行时未上电则等待 - {} +// while(!isTCPok())//第一次运行时未上电则等待 +// {} while(isTCPok())//中间未上电则退出 { for (size_t var = 0; var < (sizeof(infoH) / sizeof(infoH[0])); var++) //轮询每个参数 @@ -430,6 +429,7 @@ void repGetTT_thread_entry(void* parameter) } if (webclient_get_data(url) != RT_EOK) { + LOG_E("---------"); web_free(url); strcpy(TTinfo->sim,"-"); strcpy(TTinfo->xh,"-"); @@ -460,6 +460,8 @@ void repGetTT_thread_entry(void* parameter) */ void repGetTT(void) { + while(!isTCPok())//第一次运行时未上电则等待 + {} memset(rstInfo,0x3f,RST_LEN);//初始化 /* 创建 serial 线程 */ rt_thread_t thread = rt_thread_create("repGetTT", repGetTT_thread_entry, RT_NULL, 1024 * 3, 27, 10); diff --git a/applications/main.c b/applications/main.c index 0ecc07d..3867c07 100644 --- a/applications/main.c +++ b/applications/main.c @@ -37,6 +37,7 @@ int main(void) rt_pin_mode(LED_HEART, PIN_MODE_OUTPUT); rt_pin_mode(LED_HEART_DEBUG, PIN_MODE_OUTPUT); rt_pin_mode(ETH_RESET_PIN, PIN_MODE_OUTPUT); + rt_pin_write(ETH_RESET_PIN, PIN_LOW); rt_pin_mode(TT_EN, PIN_MODE_OUTPUT); rt_pin_write(TT_EN, PIN_LOW); @@ -50,6 +51,7 @@ int main(void) // sysEventInit(); if (isInWindowZone()) {//开机检查是否在开窗区间内,是则给TT开机 initTT(); + setWindowMode(); // pwTT_thread_entry("1"); } diff --git a/applications/ttTR.c b/applications/ttTR.c index fc18109..819754f 100644 --- a/applications/ttTR.c +++ b/applications/ttTR.c @@ -178,7 +178,7 @@ void tcpRecMQ_thread_entry(void) { // LOG_D("%d Bytes received.",msg.size); // LOG_HEX("tcpTT", 16, msg.data, msg.size); - resetTM(); +// resetTM(); int result = rt_mq_send(&TTrx_mq, &msg, sizeof(msg)); if (result == -RT_EFULL) { diff --git a/applications/ttmsg/ttmsg.c b/applications/ttmsg/ttmsg.c index b914586..24c7ac0 100644 --- a/applications/ttmsg/ttmsg.c +++ b/applications/ttmsg/ttmsg.c @@ -327,12 +327,13 @@ rt_uint8_t pack_File(const char *fin, rt_uint8_t flag, const rt_uint8_t (*dout)[ //crypt before pack uint8_t tmp[200]; uint8_t len = cryptSingleMsg(buffer, block_size, tmp); +// LOG_HEX("crypt msg",16,tmp,len); uint8_t col = packMsg(&cfg, tmp, len, dout[index]); // uint8_t col = packMsg(&cfg, buffer, block_size, dout[index]); arrLen[index] = col; // LOG_D("index/row bef-aft"); -// LOG_D("%5d/%3d %3d-%3d",index+1,row,block_size,col); +// LOG_D("%5d/%3d %3d-%3d",index+1,row,len,col); // LOG_HEX("per msg",27,dout[index],col); } diff --git a/applications/ttmsg/ttmsg.h b/applications/ttmsg/ttmsg.h index d3f6ec6..d2812b9 100644 --- a/applications/ttmsg/ttmsg.h +++ b/applications/ttmsg/ttmsg.h @@ -19,7 +19,7 @@ //#include "posix/string.h" #include -#define FRAME_DATA_LEN_MAX (180-16) +#define FRAME_DATA_LEN_MAX (180-10-20) #define STR_LEN_MAX 30 /* diff --git a/drivers/drv_eth.c b/drivers/drv_eth.c index 94db512..0eb001c 100644 --- a/drivers/drv_eth.c +++ b/drivers/drv_eth.c @@ -635,9 +635,11 @@ int rt_hw_stm32_eth_init(void) if (tid != RT_NULL) { rt_thread_startup(tid); +// LOG_I("√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√"); } else { +// LOG_E("----------------------------------"); state = -RT_ERROR; } __exit: @@ -675,9 +677,10 @@ void rt_hw_stm32_eth_deinit() // HAL_ETH_DeInit(&EthHandle); rt_timer_delete(stm32_eth_device.poll_link_timer); eth_device_deinit(&(stm32_eth_device.parent)); - + rt_pin_write(ETH_RESET_PIN, PIN_LOW); if (Rx_Buff) { + rt_free(Rx_Buff); } @@ -695,9 +698,15 @@ void rt_hw_stm32_eth_deinit() { rt_free(DMATxDscrTab); } + HAL_ETH_DeInit(&EthHandle); + __HAL_RCC_ETH_CLK_DISABLE() ; } MSH_CMD_EXPORT(rt_hw_stm32_eth_deinit, 去初始化网络。); - +void setLinkUp() +{ + /* send link up. */ + eth_device_linkchange(&stm32_eth_device.parent, RT_TRUE); +} //INIT_DEVICE_EXPORT(rt_hw_stm32_eth_init); //MSH_CMD_EXPORT(rt_hw_stm32_eth_init, 初始化网络。);