diff --git a/Project/GateWay/MDK/GateWay.uvoptx b/Project/GateWay/MDK/GateWay.uvoptx
index 740478b..82ab462 100644
--- a/Project/GateWay/MDK/GateWay.uvoptx
+++ b/Project/GateWay/MDK/GateWay.uvoptx
@@ -135,7 +135,7 @@
0
JL2CM3
- -U4294967295 -O78 -S4 -ZTIFSpeedSel2000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_otp.FLM -FS03000C00 -FL03FC -FP0($$Device:HC32F460KETA$FlashARM\HC32F460_otp.FLM) -FF1HC32F460_512K.FLM -FS10 -FL180000 -FP1($$Device:HC32F460KETA$FlashARM\HC32F460_512K.FLM)
+ -U12345678 -O78 -S4 -ZTIFSpeedSel2000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_otp.FLM -FS03000C00 -FL03FC -FP0($$Device:HC32F460KETA$FlashARM\HC32F460_otp.FLM) -FF1HC32F460_512K.FLM -FS10 -FL180000 -FP1($$Device:HC32F460KETA$FlashARM\HC32F460_512K.FLM)
0
@@ -250,7 +250,7 @@
0
1
- 1
+ 0
0
0
0
@@ -410,7 +410,7 @@
0
JL2CM3
- -U4294967295 -O78 -S4 -ZTIFSpeedSel2000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO14 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_otp.FLM -FS03000C00 -FL03FC -FP0($$Device:HC32F460KETA$FlashARM\HC32F460_otp.FLM) -FF1HC32F460_512K.FLM -FS10 -FL180000 -FP1($$Device:HC32F460KETA$FlashARM\HC32F460_512K.FLM)
+ -U12345678 -O78 -S4 -ZTIFSpeedSel2000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO14 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_otp.FLM -FS03000C00 -FL03FC -FP0($$Device:HC32F460KETA$FlashARM\HC32F460_otp.FLM) -FF1HC32F460_512K.FLM -FS10 -FL180000 -FP1($$Device:HC32F460KETA$FlashARM\HC32F460_512K.FLM)
0
@@ -428,40 +428,7 @@
-
-
- 0
- 0
- 1004
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\source\User\Src\Public.c
-
-
-
-
- 1
- 0
- 1006
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\source\User\Src\Public.c
-
-
-
-
+
0
@@ -513,7 +480,7 @@
0
1
- 1
+ 0
0
0
0
@@ -729,6 +696,18 @@
0
0
+
+ 2
+ 14
+ 1
+ 0
+ 0
+ 0
+ ..\source\User\Src\EthTask.c
+ EthTask.c
+ 0
+ 0
+
@@ -739,7 +718,7 @@
0
3
- 14
+ 15
1
0
0
@@ -751,7 +730,7 @@
3
- 15
+ 16
1
0
0
@@ -763,7 +742,7 @@
3
- 16
+ 17
1
0
0
@@ -775,7 +754,7 @@
3
- 17
+ 18
1
0
0
@@ -787,7 +766,7 @@
3
- 18
+ 19
1
0
0
@@ -799,7 +778,7 @@
3
- 19
+ 20
1
0
0
@@ -811,7 +790,7 @@
3
- 20
+ 21
1
0
0
@@ -823,7 +802,7 @@
3
- 21
+ 22
1
0
0
@@ -835,7 +814,7 @@
3
- 22
+ 23
1
0
0
@@ -847,7 +826,7 @@
3
- 23
+ 24
1
0
0
@@ -859,7 +838,7 @@
3
- 24
+ 25
1
0
0
@@ -871,7 +850,7 @@
3
- 25
+ 26
1
0
0
@@ -883,7 +862,7 @@
3
- 26
+ 27
1
0
0
@@ -895,7 +874,7 @@
3
- 27
+ 28
1
0
0
@@ -907,7 +886,7 @@
3
- 28
+ 29
1
0
0
@@ -919,7 +898,7 @@
3
- 29
+ 30
1
0
0
@@ -931,7 +910,7 @@
3
- 30
+ 31
1
0
0
@@ -951,7 +930,7 @@
0
4
- 31
+ 32
1
0
0
@@ -971,7 +950,7 @@
0
5
- 32
+ 33
1
0
0
@@ -983,7 +962,7 @@
5
- 33
+ 34
1
0
0
@@ -1003,7 +982,7 @@
0
6
- 34
+ 35
1
0
0
@@ -1015,7 +994,7 @@
6
- 35
+ 36
1
0
0
@@ -1027,7 +1006,7 @@
6
- 36
+ 37
1
0
0
@@ -1039,7 +1018,7 @@
6
- 37
+ 38
1
0
0
@@ -1059,7 +1038,7 @@
0
7
- 38
+ 39
1
0
0
@@ -1089,7 +1068,7 @@
::RTOS
- 0
+ 1
0
0
1
diff --git a/Project/GateWay/MDK/GateWay.uvprojx b/Project/GateWay/MDK/GateWay.uvprojx
index e88e94b..a3220d2 100644
--- a/Project/GateWay/MDK/GateWay.uvprojx
+++ b/Project/GateWay/MDK/GateWay.uvprojx
@@ -493,6 +493,11 @@
1
..\source\User\Src\utils.c
+
+ EthTask.c
+ 1
+ ..\source\User\Src\EthTask.c
+
@@ -1419,6 +1424,11 @@
1
..\source\User\Src\utils.c
+
+ EthTask.c
+ 1
+ ..\source\User\Src\EthTask.c
+
diff --git a/Project/GateWay/MDK/RTE/RTOS/board.c b/Project/GateWay/MDK/RTE/RTOS/board.c
index 7b3b1e8..4252c91 100644
--- a/Project/GateWay/MDK/RTE/RTOS/board.c
+++ b/Project/GateWay/MDK/RTE/RTOS/board.c
@@ -11,6 +11,9 @@
#include
#include
#include "bsp.h"
+#include "main.h"
+
+extern GateWayPara_t GateWay;
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
/*
@@ -73,16 +76,24 @@ void rt_hw_board_init(void)
static int uart_init(void)
{
//#error "TODO 2: Enable the hardware uart and config baudrate."
- DbgUart_Config(500000);
- return 0;
+ DbgOrCat1Uart_Config(500000);
+// RS485Ch1_Config(500000);
+ return 0;
}
INIT_BOARD_EXPORT(uart_init);
void rt_hw_console_output(const char *str)
{
-//#error "TODO 3: Output the string 'str' through the uart."
rt_enter_critical();
- DebugUartSend((uint8_t *)str, strlen(str));
+ if(GateWay.ConfigPara.DebugChannel == DEBUG_CH_RS485_1) {
+ RS485Ch1UartSend((uint8_t *)str, strlen(str));
+ }
+ else if(GateWay.ConfigPara.DebugChannel == DEBUG_CH_RS485_2) {
+ RS485Ch2UartSend((uint8_t *)str, strlen(str));
+ }
+ else {
+ DebugOrCat1UartSend((uint8_t *)str, strlen(str));
+ }
rt_exit_critical();
}
diff --git a/Project/GateWay/source/Module/GateWay_Debug/DebugCmd.c b/Project/GateWay/source/Module/GateWay_Debug/DebugCmd.c
index 772cdc8..6fa0799 100644
--- a/Project/GateWay/source/Module/GateWay_Debug/DebugCmd.c
+++ b/Project/GateWay/source/Module/GateWay_Debug/DebugCmd.c
@@ -1,6 +1,7 @@
#include "main.h"
#include "bsp.h"
#include "CatOneTask.h"
+#include "EthTask.h"
#include "RS485Task.h"
#include "Public.h"
#include
@@ -9,7 +10,7 @@
#define DBG_RX_LEN_MAX 128
//#define DBG_LOG(...) rt_kprintf(__VA_ARGS__)
-#define DEBUG_CMD_CNT 31
+#define DEBUG_CMD_CNT 29
#define DEBUG_BUFF_SIZE_MAX 512
#define DEBUG_BUFSIZE 200
@@ -106,7 +107,7 @@ void Debug_Thread_Entry(void *parameter)
if(DebugRev_Sem == RT_NULL) {
rt_kprintf("DebugRev Sem Create Failed!\r\n");
}
- rt_kprintf("DebugRev Thread is running!\r\n");
+ rt_kprintf("DebugRev Thread is running!\r\n");
while(1) {
result = rt_sem_take(DebugRev_Sem, RT_WAITING_FOREVER);
@@ -119,16 +120,21 @@ void Debug_Thread_Entry(void *parameter)
}
/*****************************************************************************************
-* 函数名称: RS485Ch2RxIrqCallback
-* 功能描述: RS485通道1中断处理回调函数
+* 函数名称: DbgOrCat1RxIrqCallback
+* 功能描述: 调试和Cat1中断处理回调函数
* 参 数: rData 接收到的数据
* 返 回 值: 无
*****************************************************************************************/
-void DbgRxIrqCallback(uint8_t rData)
+void DbgOrCat1RxIrqCallback(uint8_t rData)
{
- if(DebugRxTimeOut1mSCnt == 0)
+ if(GateWay->ConfigPara.Comm == CATONE_COMM) {
+ Cat1IrqCallback(rData);
+ return;
+ }
+
+ if(DebugRxTimeOut1mSCnt == 0)
DebugRxLen = 0;
-
+
DebugRxTimeOut1mSCnt = 3;
if(DebugRxLen < DBG_RX_LEN_MAX) {
DebugRxBuff[DebugRxLen++] = rData;
@@ -136,11 +142,16 @@ void DbgRxIrqCallback(uint8_t rData)
}
-void DebugRxOverhandler(void)
+void DebugOrCat1RxOverhandler(void)
{
+ if(GateWay->ConfigPara.Comm == CATONE_COMM) {
+ Cat1OverHandler();
+ return;
+ }
+
if(DebugRxTimeOut1mSCnt > 0)
DebugRxTimeOut1mSCnt--;
-
+
if(DebugRxLen > 2 && DebugRxTimeOut1mSCnt == 0) {
DebugRxTimeOut1mSCnt = 20;
rt_sem_release(DebugRev_Sem);
@@ -231,12 +242,12 @@ void DebugCmdCat1OnOff(int argc, char *argv[])
DBG_LOG("\r\n");
if(argc < 2)
return;
-
+
if(strcmp(argv[1], "?") == 0) {
DBG_LOG("Debug Cmd: cat1 arg1\r\n");
DBG_LOG(" brief --> Turn the Cat1_DBG on or off.\r\n");
DBG_LOG(" arg1 --> on/off\r\n\r\n");
- return;
+ return;
}
if(strcmp(argv[1], "on") == 0) {
@@ -247,6 +258,27 @@ void DebugCmdCat1OnOff(int argc, char *argv[])
}
}
+void DebugCmdEthOnOff(int argc, char *argv[])
+{
+ DBG_LOG("\r\n");
+ if(argc < 2)
+ return;
+
+ if(strcmp(argv[1], "?") == 0) {
+ DBG_LOG("Debug Cmd: eth arg1\r\n");
+ DBG_LOG(" brief --> Turn the Eth_DBG on or off.\r\n");
+ DBG_LOG(" arg1 --> on/off\r\n\r\n");
+ return;
+ }
+
+ if(strcmp(argv[1], "on") == 0) {
+ ETHOnOff(true);
+ }
+ else if(strcmp(argv[1], "off") == 0) {
+ ETHOnOff(false);
+ }
+}
+
/*****************************************************************************************
* 函数名称: DebugCmdCat1OnOff
* 功能描述: CAT1调试信息开关
@@ -673,18 +705,24 @@ void DebugCmdSetComm(int argc, char *argv[])
DBG_LOG("\r\n");
if(argc < 2)
return;
-
+
if(strcmp(argv[1], "?") == 0) {
DBG_LOG("Debug Cmd: comm arg1\r\n");
DBG_LOG(" brief --> Set gateway and service communication methods.\r\n");
DBG_LOG(" arg1 --> para: (cat1, eth),Cat1 or ETH communication.\r\n\r\n");
return;
}
-
+
if(strcmp(argv[1], "cat1") == 0) {
+ if(GateWay->ConfigPara.DebugChannel == DEBUG_CH_DBG) {
+ DBG_LOG("dch is dbg, USART1 occupied. Please switch dch to ch1/ch2 first.\r\n");
+ return;
+ }
GateWay->SvrRegFlag = false;
GateWay->ConfigPara.Comm = CATONE_COMM;
ETHStop();
+ ETH_OFF();
+ DbgOrCat1Uart_Config(115200);
CAT1_ON();
CatOneReset();
DBG_LOG("Set the communication method to Cat1.\r\n");
@@ -697,45 +735,17 @@ void DebugCmdSetComm(int argc, char *argv[])
CatOneStop();
rt_thread_delay(3000);
CAT1_PWR_KEY_SET();
+ DBG_ON();
}
GateWay->SvrRegFlag = false;
GateWay->ConfigPara.Comm = ETH_COMM;
+ DbgOrCat1Uart_Config(500000);
ETH_ON();
ETHReset();
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
}
}
-/*****************************************************************************************
-* 函数名称: DebugCmdSetCollTime
-* 功能描述: 设置数据采集间隔
-* 参 数: argc, 输入参数数量
- argv, 输入参数
-* 返 回 值: 无
-*****************************************************************************************/
-void DebugCmdSetCollTime(int argc, char *argv[])
-{
- DBG_LOG("\r\n");
- if(argc < 2)
- return;
-
- if(strcmp(argv[1], "?") == 0) {
- DBG_LOG("Debug Cmd: sct para\r\n");
- DBG_LOG(" brief --> Set the data collection interval.\r\n");
- DBG_LOG(" arg1 --> para: (10~3600),Set the range from 10 to 3600 seconds.\r\n\r\n");
- return;
- }
-
- int time = atoi(argv[1]);
- if(time < 10 || time > 7200) {
- DBG_LOG("RS485 Cmd Para Error!\r\n");
- return;
- }
- GateWay->ConfigPara.CommUnitReadInterval = time;
- DBG_LOG("Set the collection time interval to %d seconds.\r\n", time);
- WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
-}
-
/*****************************************************************************************
* 函数名称: DebugCmdReadHisData
* 功能描述: 读取历史数据
@@ -1166,7 +1176,12 @@ void DebugCmdSelDebugChannel(int argc, char *argv[])
}
if(strcmp(argv[1], "dbg") == 0) {
+ if(GateWay->ConfigPara.Comm == CATONE_COMM) {
+ DBG_LOG("comm is cat1, USART1 occupied. Please switch comm to eth first.\r\n");
+ return;
+ }
DBG_LOG("Select Debug Channel is dbg\r\n");
+ DbgOrCat1Uart_Config(500000);
GateWay->ConfigPara.DebugChannel = DEBUG_CH_DBG;
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
}
@@ -1948,6 +1963,7 @@ const DBGFunType DebugFun[DEBUG_CMD_CNT] = {
"help", DebugCmdHelp,
"main", DebugCmdMainOnOff,
"cat1", DebugCmdCat1OnOff,
+ "eth", DebugCmdEthOnOff,
"rs485", DebugCmdRS485Ctrl,
"cudel", DebugCmdDelCommUnit,
"culs", DebugCmdLsCommUnit,
diff --git a/Project/GateWay/source/Module/GateWay_Debug/DebugCmd.h b/Project/GateWay/source/Module/GateWay_Debug/DebugCmd.h
index 1dd66bd..802a6f5 100644
--- a/Project/GateWay/source/Module/GateWay_Debug/DebugCmd.h
+++ b/Project/GateWay/source/Module/GateWay_Debug/DebugCmd.h
@@ -2,6 +2,6 @@
#define __DEBUG_CMD_H
void Debug_Thread_Entry(void *parameter);
-void DebugRxOverhandler(void);
+void DebugOrCat1RxOverhandler(void);
void Debug_Printf(char *format, ...);
#endif
diff --git a/Project/GateWay/source/User/Inc/CatOneTask.h b/Project/GateWay/source/User/Inc/CatOneTask.h
index adf5b77..d7356f3 100644
--- a/Project/GateWay/source/User/Inc/CatOneTask.h
+++ b/Project/GateWay/source/User/Inc/CatOneTask.h
@@ -1,28 +1,11 @@
#ifndef __CAT_ONE_TASK_H
-#define __CAT_ONE_TASK_H
+#define __CAT_ONE_TASK_H
#include "main.h"
#include "Public.h"
#define CAT_ONE_REV_TIMEOUT_MAX (10 * 60 * 1000)
#define CAT_ONE_REV_LEN_MAX 512
-#define CAT_ONE_POW_ON() CAT1_POW_ON()
-#define CAT_ONE_POW_OFF() CAT1_POW_OFF()
-
-#define CAT_ONE_LINKA_GET() CAT1_LINKA_GET()
-#define CAT_ONE_LINKB_GET() CAT1_LINKB_GET()
-
-#define CAT_ONE_DELAY_1MS(X)
-
-// ETH状态机相关宏定义
-#define ETH_RESET_DELAY_TIME_MAX (5 * 60 * 1000)
-#define ETH_LINK_WAIT_TIME_MAX (10 * 1000)
-#define ETH_REG_TIMEOUT_MAX (30 * 1000)
-#define ETH_SEND_TIMEOUT_MAX (5 * 1000)
-#define ETH_RECV_TIMEOUT_MAX (60 * 1000)
-#define ETH_SEND_RETRY_MAX 3
-#define ETH_FIRST_REG_DELAY (5 * 1000)
-
typedef enum {
CAT_ONE_AT_NULL,
CAT_ONE_AT, //开机检测
@@ -58,17 +41,6 @@ typedef enum {
CAT_ONE_CLOSE_TCP,
}CatOneStatus_m;
-typedef enum {
- ETH_IDEL,
- ETH_RESET,
- ETH_WAIT_LINK,
- ETH_REG_SVR,
- ETH_WAIT_SEND,
- ETH_SEND_DATA,
- ETH_WAIT_RECV,
- ETH_OFF,
-}EthStatus_m;
-
typedef enum {
CAT_ONE_RET_NULL,
CAT_ONE_RET_OK,
@@ -102,38 +74,26 @@ typedef struct {
char SIM[32];
CatOneNetType_m NetType;
bool TcpConnFlag;
-
+
bool LBSFlag;
int Longitude;
int Latitude;
char CatOneSendBuff[1024];
-
- GateWayPara GateWay;
+
+ GateWayPara GateWay;
DataRevCallBack CatOneRevCallBack;
-
- // ETH状态机相关字段
- EthStatus_m EthStatus;
- uint32_t EthResetDelayCnt;
- uint32_t EthLinkWaitCnt;
- uint32_t EthRecvTimeoutCnt;
- uint8_t EthSendRetryCnt;
- bool EthFirstRegFlag;
}CatOne_t, *pCatOne_t;
-CatOneRetStatus_m CatOneSend(uint8_t *sData, uint16_t sLen);
-void CatOneStart(void);
void CatOneStop(void);
void CatOneReset(void);
-void ETHStop(void);
-void ETHReset(void);
void Cat1DBGOnOff(bool OnOff);
void CatOneGetLocationInfo(int *Longitude, int *Latitude);
void CatOneGetIMEIAndSIM(char *Imei, char *Sim);
bool CatOneGetStatus(void);
bool CatOneEthSendQueue(uint8_t *sData, uint16_t sLen);
void CatOneTriggerRegister(void);
-void ETHTriggerRegister(void);
-void CatOne_Eth_Thread_Entry(void *parameter);
-void EthRxOverhandler(void);
+void CatOne_Thread_Entry(void *parameter);
+void Cat1IrqCallback(uint8_t rData);
+void Cat1OverHandler(void);
void CatReadImeiOrSim(char *Imei, char *Sim);
#endif
diff --git a/Project/GateWay/source/User/Inc/EthTask.h b/Project/GateWay/source/User/Inc/EthTask.h
new file mode 100644
index 0000000..b86544c
--- /dev/null
+++ b/Project/GateWay/source/User/Inc/EthTask.h
@@ -0,0 +1,47 @@
+#ifndef __ETH_TASK_H
+#define __ETH_TASK_H
+#include "main.h"
+#include "Public.h"
+
+#define ETH_RX_LEN_MAX 512
+
+#define ETH_RESET_DELAY_TIME_MAX (5 * 60 * 1000)
+#define ETH_LINK_WAIT_TIME_MAX (10 * 1000)
+#define ETH_RECV_TIMEOUT_MAX (60 * 1000)
+#define ETH_SEND_RETRY_MAX 3
+#define ETH_FIRST_REG_DELAY (5 * 1000)
+
+typedef enum {
+ ETH_IDEL,
+ ETH_RESET,
+ ETH_WAIT_LINK,
+ ETH_REG_SVR,
+ ETH_WAIT_SEND,
+ ETH_SEND_DATA,
+ ETH_WAIT_RECV,
+ ETH_OFF,
+} EthStatus_m;
+
+typedef struct {
+ EthStatus_m Status;
+ uint32_t ResetDelayCnt;
+ uint32_t LinkWaitCnt;
+ uint32_t RecvTimeoutCnt;
+ uint8_t SendRetryCnt;
+ bool FirstRegFlag;
+
+ GateWayPara GateWay;
+
+ uint8_t TxBuff[ETH_RX_LEN_MAX];
+ uint16_t TxLen;
+ uint8_t Payload[ETH_RX_LEN_MAX];
+ char SendASCII[ETH_RX_LEN_MAX * 2];
+} EthTask_t;
+
+void Eth_Thread_Entry(void *parameter);
+void EthIrqCallbackHandler(uint8_t rData);
+void EthOverHandler(void);
+void ETHStop(void);
+void ETHReset(void);
+void ETHTriggerRegister(void);
+#endif
diff --git a/Project/GateWay/source/User/Inc/bsp.h b/Project/GateWay/source/User/Inc/bsp.h
index e65b691..2722cc3 100644
--- a/Project/GateWay/source/User/Inc/bsp.h
+++ b/Project/GateWay/source/User/Inc/bsp.h
@@ -63,36 +63,62 @@
#define RTC_IRQn Int001_IRQn
-#define LORA_DIO0_IRQn Int005_IRQn
-
-#define DBGUART_IRQn Int006_IRQn
-#define DBGUART_EI_IRQn Int007_IRQn
-
-#define RS485CH1_UART_IRQn Int008_IRQn
-#define RS485CH1_UART_EI_IRQn Int009_IRQn
-
-#define RS485CH2_UART_IRQn Int010_IRQn
-#define RS485CH2_UART_EI_IRQn Int011_IRQn
-
-#define ETH_OR_CAT1_UART_IRQn Int012_IRQn
-#define ETH_OR_CAT1_UART_EI_IRQn Int013_IRQn
-
#define DBG_RXPIN_IRQn Int002_IRQn
+#define LORA_DIO0_IRQn Int005_IRQn
-//DEBUG
-#define DBG_USART_CH (M4_USART1)
-#define DBG_USART_RX_PORT (PortA)
-#define DBG_USART_RX_PIN (Pin11)
-#define DBG_USART_TX_PORT (PortA)
-#define DBG_USART_TX_PIN (Pin12)
-#define DBG_USART_RX_FUNC (Func_Usart1_Rx)
-#define DBG_USART_TX_FUNC (Func_Usart1_Tx)
-#define DBG_USART_RI_NUM (INT_USART1_RI)
-#define DBG_USART_EI_NUM (INT_USART1_EI)
-#define DBG_USART_TI_NUM (INT_USART1_TI)
-#define DBG_USART_TCI_NUM (INT_USART1_TCI)
-#define DBG_FCG1_PERIPH (PWC_FCG1_PERIPH_USART1)
+#define DBG_OR_CAT1_UART_IRQn Int006_IRQn
+#define DBG_OR_CAT1_UART_EI_IRQn Int007_IRQn
+
+#define ETH_UART_IRQn Int008_IRQn
+#define ETH_UART_EI_IRQn Int009_IRQn
+
+#define RS485CH1_UART_IRQn Int010_IRQn
+#define RS485CH1_UART_EI_IRQn Int011_IRQn
+
+#define RS485CH2_UART_IRQn Int012_IRQn
+#define RS485CH2_UART_EI_IRQn Int013_IRQn
+
+
+//DEBUG or CAT1
+#define DBG_OR_CAT1_USART_CH (M4_USART1)
+#define DBG_OR_CAT1_USART_RX_PORT (PortA)
+#define DBG_OR_CAT1_USART_RX_PIN (Pin11)
+#define DBG_OR_CAT1_USART_TX_PORT (PortA)
+#define DBG_OR_CAT1_USART_TX_PIN (Pin12)
+#define DBG_OR_CAT1_USART_RX_FUNC (Func_Usart1_Rx)
+#define DBG_OR_CAT1_USART_TX_FUNC (Func_Usart1_Tx)
+#define DBG_OR_CAT1_USART_RI_NUM (INT_USART1_RI)
+#define DBG_OR_CAT1_USART_EI_NUM (INT_USART1_EI)
+#define DBG_OR_CAT1_USART_TI_NUM (INT_USART1_TI)
+#define DBG_OR_CAT1_USART_TCI_NUM (INT_USART1_TCI)
+#define DBG_OR_CAT1_FCG1_PERIPH (PWC_FCG1_PERIPH_USART1)
+
+#define DBG_OR_CAT1_CTRL_PORT (PortB)
+#define DBG_OR_CAT1_CTRL_PIN (Pin08)
+
+#if (HARDWARE_VERSION == 12)
+#define DBG_ON() PORT_SetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN)
+#define CAT1_ON() PORT_ResetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN)
+#elif (HARDWARE_VERSION >= 13)
+#define DBG_ON() PORT_ResetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN)
+#define CAT1_ON() PORT_SetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN)
+#endif
+
+#define CAT1_PWR_KEY_PORT (PortA)
+#define CAT1_PWR_KEY_PIN (Pin03)
+#define CAT1_PWR_KEY_CLR() PORT_SetBits(CAT1_PWR_KEY_PORT, CAT1_PWR_KEY_PIN)
+#define CAT1_PWR_KEY_SET() PORT_ResetBits(CAT1_PWR_KEY_PORT, CAT1_PWR_KEY_PIN)
+
+#define CAT1_RESET_PORT (PortA)
+#define CAT1_RESET_PIN (Pin00)
+#define CAT1_RESET_CLR() PORT_SetBits(CAT1_RESET_PORT, CAT1_RESET_PIN)
+#define CAT1_RESET_SET() PORT_ResetBits(CAT1_RESET_PORT, CAT1_RESET_PIN)
+
+#define CAT1_WAKEUP_PORT (PortA)
+#define CAT1_WAKEUP_PIN (Pin02)
+#define CAT1_WAKEUP_CLR() PORT_SetBits(CAT1_WAKEUP_PORT, CAT1_WAKEUP_PIN)
+#define CAT1_WAKEUP_SET() PORT_ResetBits(CAT1_WAKEUP_PORT, CAT1_WAKEUP_PIN)
//RS485 Ch1
#define RS485_CH1_USART_CH (M4_USART2)
@@ -152,45 +178,22 @@
//#define RS485_CH2_VOL_5V() PORT_SetBits(RS485_CH2_VOL_CTRL_PORT, RS485_CH2_VOL_CTRL_PIN)
//#define RS485_CH2_VOL_12V() PORT_ResetBits(RS485_CH2_VOL_CTRL_PORT, RS485_CH2_VOL_CTRL_PIN)
-//ETH OR CAT1
-#define ETH_OR_CAT1_USART_CH (M4_USART4)
-#define ETH_OR_CAT1_USART_RX_PORT (PortB)
-#define ETH_OR_CAT1_USART_RX_PIN (Pin09)
-#define ETH_OR_CAT1_USART_TX_PORT (PortC)
-#define ETH_OR_CAT1_USART_TX_PIN (Pin13)
-#define ETH_OR_CAT1_USART_RX_FUNC (Func_Usart4_Rx)
-#define ETH_OR_CAT1_USART_TX_FUNC (Func_Usart4_Tx)
-#define ETH_OR_CAT1_USART_RI_NUM (INT_USART4_RI)
-#define ETH_OR_CAT1_USART_EI_NUM (INT_USART4_EI)
-#define ETH_OR_CAT1_USART_TI_NUM (INT_USART4_TI)
-#define ETH_OR_CAT1_USART_TCI_NUM (INT_USART4_TCI)
-#define ETH_OR_CAT1_FCG1_PERIPH (PWC_FCG1_PERIPH_USART4)
+//ETH
+#define ETH_USART_CH (M4_USART4)
+#define ETH_USART_RX_PORT (PortB)
+#define ETH_USART_RX_PIN (Pin09)
+#define ETH_USART_TX_PORT (PortC)
+#define ETH_USART_TX_PIN (Pin13)
+#define ETH_USART_RX_FUNC (Func_Usart4_Rx)
+#define ETH_USART_TX_FUNC (Func_Usart4_Tx)
+#define ETH_USART_RI_NUM (INT_USART4_RI)
+#define ETH_USART_EI_NUM (INT_USART4_EI)
+#define ETH_USART_TI_NUM (INT_USART4_TI)
+#define ETH_USART_TCI_NUM (INT_USART4_TCI)
+#define ETH_FCG1_PERIPH (PWC_FCG1_PERIPH_USART4)
-#define ETH_OR_CAT1_CTRL_PORT (PortB)
-#define ETH_OR_CAT1_CTRL_PIN (Pin08)
-
-#if (HARDWARE_VERSION == 12)
-#define ETH_ON() PORT_SetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN)
-#define CAT1_ON() PORT_ResetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN)
-#elif (HARDWARE_VERSION >= 13)
-#define ETH_ON() PORT_ResetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN)
-#define CAT1_ON() PORT_SetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN)
-#endif
-
-//#define ETH_OR_CAT1_TX_CTRL_PORT (PortH)
-//#define ETH_OR_CAT1_TX_CTRL_PIN (Pin02)
-//#define ETH_ON() { PORT_SetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN); PORT_SetBits(ETH_OR_CAT1_TX_CTRL_PORT, ETH_OR_CAT1_TX_CTRL_PIN); }
-//#define CAT1_ON() { PORT_ResetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN); PORT_ResetBits(ETH_OR_CAT1_TX_CTRL_PORT, ETH_OR_CAT1_TX_CTRL_PIN);}
-
-#define CAT1_PWR_KEY_PORT (PortA)
-#define CAT1_PWR_KEY_PIN (Pin03)
-#define CAT1_PWR_KEY_CLR() PORT_SetBits(CAT1_PWR_KEY_PORT, CAT1_PWR_KEY_PIN)
-#define CAT1_PWR_KEY_SET() PORT_ResetBits(CAT1_PWR_KEY_PORT, CAT1_PWR_KEY_PIN)
-
-#define CAT1_RESET_PORT (PortA)
-#define CAT1_RESET_PIN (Pin00)
-#define CAT1_RESET_CLR() PORT_SetBits(CAT1_RESET_PORT, CAT1_RESET_PIN)
-#define CAT1_RESET_SET() PORT_ResetBits(CAT1_RESET_PORT, CAT1_RESET_PIN)
+#define ETH_ON() ETH_RESET_SET()
+#define ETH_OFF() ETH_RESET_CLR()
#define ETH_RESET_PORT (PortB)
#define ETH_RESET_PIN (Pin05)
@@ -377,9 +380,10 @@ typedef struct {
void BSP_Init(void);
-void DbgUart_Config(uint32_t BaudRate);
-void DebugUartSend(uint8_t *sData, uint16_t sLen);
-void DbgRxIrqCallback(uint8_t rData);
+void DbgOrCat1Uart_Config(uint32_t BaudRate);
+void DebugOrCat1UartSend(uint8_t *sData, uint16_t sLen);
+void DbgOrCat1RxIrqCallback(uint8_t rData);
+void Cat1RxIrqCallback(uint8_t rData);
void RS485Ch1_Config(uint32_t BaudRate);
void RS485Ch1UartSend(uint8_t *sData, uint16_t sLen);
@@ -389,8 +393,9 @@ void RS485Ch2_Config(uint32_t BaudRate);
void RS485Ch2UartSend(uint8_t *sData, uint16_t sLen);
void RS485Ch2RxIrqCallback(uint8_t rData);
-void EthOrCat1UartSend(uint8_t *sData, uint16_t sLen);
-void EthOrCat1RxIrqCallback(uint8_t rData);
+void Eth_Config(uint32_t BaudRate);
+void EthUartSend(uint8_t *sData, uint16_t sLen);
+void EthIrqCallbackHandler(uint8_t rData);
void LoraTxRxIrqCallback(void);
diff --git a/Project/GateWay/source/User/Src/CatOneTask.c b/Project/GateWay/source/User/Src/CatOneTask.c
index b31a2c0..4615825 100644
--- a/Project/GateWay/source/User/Src/CatOneTask.c
+++ b/Project/GateWay/source/User/Src/CatOneTask.c
@@ -4,71 +4,45 @@
static rt_sem_t CatOneRev_Sem = RT_NULL;
static rt_sem_t CatOneIRQ_Sem = RT_NULL;
-static rt_sem_t EthIRQ_Sem = RT_NULL;
static rt_thread_t Cat1Rev_Thread = RT_NULL;
static uint8_t CAT1DispEn = false;
static CatOne_t CatOne;
-static char CatOneEthRxBuff[CAT_ONE_REV_LEN_MAX];
-static uint16_t CatOneEthRxLen;
+static char CatOneRxBuff[CAT_ONE_REV_LEN_MAX];
+static uint16_t CatOneRxLen;
-static uint8_t CatOneEthTxBuff[CAT_ONE_REV_LEN_MAX];
-static uint16_t CatOneEthTxLen;
+static uint8_t CatOneTxBuff[CAT_ONE_REV_LEN_MAX];
+static uint16_t CatOneTxLen;
static uint8_t Payload[CAT_ONE_REV_LEN_MAX];
static char CommUnitSendASCII[CAT_ONE_REV_LEN_MAX * 2];
-
-static uint8_t EthRevTimeOutCnt;
+static uint8_t Cat1RevTimeOutCnt;
static uint16_t CatSendErrCnt = 0;
-// ETH状态机相关变量已移至 CatOne_t 结构体中
-
#define CAT1_DBG_LOG(...) { if(CAT1DispEn) Debug_Printf(__VA_ARGS__);}
-//#define CAT1_DBG_ARRAY(ARRAY, SIZE) { if(CAT1DispEn) {DBG_ARRAY(ARRAY,SIZE)}}
#define CATONE_RESET_DELAY_TIME_MAX (5 * 60 * 1000)
-//const char *CatOneATCmdStr[16] = {
-// "NULL",
-// "AT\r\n", //开机检测
-// "ATE0\r\n", //关回显
-// "AT+CPIN?\r\n", //识卡
-//// "AT+CIMI\r\n", //IMEI
-// "AT+CGSN=1\r\n",
-// "AT+LCCID\r\n", //读卡号
-// "AT+CEREG?\r\n", //查询注册状态
-// "AT+CGPADDR=1\r\n", //查询IP地址
-// "AT+CSQ\r\n", //查询信号强度
-// "AT+LDNSGIP=gxjt.cui635.cn\r\n",
-// "AT+LBS=0\r\n", //获取基站定位信息
-// "AT+LIPOPEN=", //设置TCP服务器地址和端口,AT+LIPOPEN="TCP","114.55.52.96",6803
-// "AT+LIPSEND=", //发送数据, AT+LIPSEND=0,1,20,"31313131313131323232323232"
-// "AT+LIPCLOSE=0\r\n",//断开连接
-// "AT+LBSPARA=http://locator-aep.xiot.senthink.com:80/locator/v0.1/locate,B84E427D95B1DF4A3F49B18DDF714C72\r\n",
-// "AT+CCLK?\r\n", //获取时间
-//};
-
const char *CatOneATCmdStr[16] = {
"NULL",
"AT\r\n", //开机检测
"ATE0\r\n", //关回显
"AT+CPIN?\r\n", //识卡
-// "AT+CIMI\r\n", //IMEI
"AT+CGSN=1\r\n",
- "AT+QCCID\r\n", //读卡号
+ "AT+QCCID\r\n", //读卡号
"AT+CEREG?\r\n", //查询注册状态
"AT+CGPADDR=1\r\n", //查询IP地址
"AT+CSQ\r\n", //查询信号强度
"AT+LDNSGIP=gxjt.cui635.cn\r\n",
"AT+QLBS\r\n", //获取基站定位信息
- "AT+QIOPEN=", //设置TCP服务器地址和端口,AT+LIPOPEN="TCP","114.55.52.96",6803
- "AT+QISEND=", //发送数据, AT+LIPSEND=0,1,20,"31313131313131323232323232"
- "AT+QICLOSE=0\r\n",//断开连接
+ "AT+QIOPEN=", //设置TCP服务器地址和端口
+ "AT+QISEND=", //发送数据
+ "AT+QICLOSE=0\r\n", //断开连接
"AT+QLBSCFG=\"server\",http://locator-aep.xiot.senthink.com:80/locator/v0.1/locate\r\n",
- "AT+QLBSCFG=\"token\",45B516D3078467E84DD2CFBF3532A4CB\r\n",
- "AT+CCLK?\r\n", //获取时间
+ "AT+QLBSCFG=\"token\",45B516D3078467E84DD2CFBF3532A4CB\r\n",
+ "AT+CCLK?\r\n", //获取时间
};
void Cat1DBGOnOff(bool OnOff)
@@ -81,53 +55,23 @@ void Cat1DBGOnOff(bool OnOff)
}
const CatOneATCMD_m CatOneModeSetCmdArray[] = {
- CAT_ONE_AT_NULL,
- CAT_ONE_AT,
- CAT_ONE_ATE0,
- //CAT_ONE_LBSPARA,
+ CAT_ONE_AT_NULL,
+ CAT_ONE_AT,
+ CAT_ONE_ATE0,
CAT_ONE_LCCID,
CAT_ONE_IMEI,
- CAT_ONE_CPIN,
- CAT_ONE_CEREG,
+ CAT_ONE_CPIN,
+ CAT_ONE_CEREG,
CAT_ONE_CSQ,
- //CAT_ONE_LDNSGIP,
- //CAT_ONE_LBS,
CAT_ONE_CCLK,
CAT_ONE_AT_CMD_END
};
-//CatOneRetStatus_m CatOneSend(uint8_t *sData, uint16_t sLen)
-//{
-// rt_err_t result;
-//
-// if(CatOne.Cat1Status != CAT_ONE_IDEL && CatOne.Cat1Status != CAT_ONE_WAIT_SEND)
-// return CAT_ONE_RET_ERR;
-//
-// //CatOne.Cat1Status = CAT_ONE_RESET;
-// result = rt_mq_send(CatOneRev_MQ, sData, sLen);
-// if(result != RT_EOK) {
-// CAT1_DBG_LOG("CatOne MQ Send ERR...\r\n");
-// return CAT_ONE_RET_ERR;
-// }
-// CAT1_DBG_LOG("CatOne Send Message: \r\n", sData);
-// return CAT_ONE_RET_OK;
-//}
-
void CatOneStop(void)
{
CatOne.Cat1Status = CAT_ONE_OFF;
}
-void ETHStop(void)
-{
- CatOne.EthStatus = ETH_OFF;
-}
-
-void ETHReset(void)
-{
- CatOne.EthStatus = ETH_RESET;
-}
-
void CatOneGetLocationInfo(int *Longitude, int *Latitude)
{
if(CatOne.LBSFlag) {
@@ -146,7 +90,6 @@ void CatOneGetIMEIAndSIM(char *Imei, char *Sim)
memcpy(Sim, CatOne.SIM, 20);
}
-//返回true-busy, false-Idle
bool CatOneGetStatus(void)
{
if(CatOne.Cat1Status == CAT_ONE_IDEL)
@@ -159,36 +102,36 @@ void CatOneReset(void)
CatOne.Cat1Status = CAT_ONE_RESET;
}
-void CatTimeSync(char *Data)
+void CatTimeSync(char *Data)
{
struct tm sTimet;
time_t sTime;
- char *p;
-
+ char *p;
+
p = strchr(Data, '\"');
if(p == NULL)
return;
-
- int ret = sscanf(p, "\"%d/%d/%d,%d:%d:%d+",
+
+ int ret = sscanf(p, "\"%d/%d/%d,%d:%d:%d+",
&sTimet.tm_year, &sTimet.tm_mon, &sTimet.tm_mday,
&sTimet.tm_hour, &sTimet.tm_min, & sTimet.tm_sec);
if(ret != 6) {
- int ret = sscanf(p, "\"%d/%d/%d,%d:%d:%d-",
+ int ret = sscanf(p, "\"%d/%d/%d,%d:%d:%d-",
&sTimet.tm_year, &sTimet.tm_mon, &sTimet.tm_mday,
&sTimet.tm_hour, &sTimet.tm_min, & sTimet.tm_sec);
if(ret != 6)
return;
}
-
+
sTimet.tm_isdst = 0;
if(sTimet.tm_year < 24 || sTimet.tm_year > 50)
return;
sTimet.tm_year += 100;
-
+
if(sTimet.tm_mon > 12 || sTimet.tm_mon == 0)
return;
sTimet.tm_mon--;
-
+
sTime = mktime(&sTimet);
TimeSync(sTime);
CAT1_DBG_LOG("Set Time:");
@@ -199,10 +142,10 @@ void CatOneAtCmdAnalyze(char *RxBuff)
{
char *p;
int ret;
-
+
CatOne.ATCmdRet = CAT_ONE_RET_OK;
CAT1_DBG_LOG(RxBuff);
-
+
switch(CatOne.AtCmd) {
case CAT_ONE_AT:
case CAT_ONE_ATE0:
@@ -213,7 +156,7 @@ void CatOneAtCmdAnalyze(char *RxBuff)
CatOne.ATCmdRet = CAT_ONE_RET_ERR;
}
break;
-
+
case CAT_ONE_IMEI:
if(strstr(RxBuff, "OK") == NULL) {
CatOne.ATCmdRet = CAT_ONE_RET_ERR;
@@ -229,19 +172,15 @@ void CatOneAtCmdAnalyze(char *RxBuff)
else {
memset(CatOne.IMEI, 0, 15);
}
-// ret = sscanf(p, "+CGSN: \"%s\"\r\n", CatOne.IMEI);
-// if(ret != 1) {
-// memset(CatOne.IMEI, 0, 15);
-// }
CatOne.IMEI[15] = 0;
break;
-
- case CAT_ONE_CCLK:
+
+ case CAT_ONE_CCLK:
if(strstr(RxBuff, "+CCLK") != NULL) {
CatTimeSync(RxBuff);
}
break;
-
+
case CAT_ONE_LCCID:
if(strstr(RxBuff, "OK") == NULL) {
CatOne.ATCmdRet = CAT_ONE_RET_ERR;
@@ -256,7 +195,7 @@ void CatOneAtCmdAnalyze(char *RxBuff)
memset(CatOne.SIM, 0, 32);
}
break;
-
+
case CAT_ONE_LBS:
p = strstr(RxBuff, "+QLBS");
if(p != NULL) {
@@ -290,32 +229,32 @@ void CatOneAtCmdAnalyze(char *RxBuff)
}
return;
}
-
+
case CAT_ONE_CPIN:
if(strstr(RxBuff, "READY") == NULL) {
CatOne.ATCmdRet = CAT_ONE_RET_ERR;
}
break;
-
+
case CAT_ONE_CEREG:
if(strstr(RxBuff, "CEREG: 0,1") == NULL) {
CatOne.CatOne1mSDelayCnt = 3000;
CatOne.ATCmdRet = CAT_ONE_RET_ERR;
}
break;
-
+
case CAT_ONE_CGPADDR:
if(strstr(RxBuff, "+CGPADDR") == NULL) {
CatOne.ATCmdRet = CAT_ONE_RET_ERR;
}
break;
-
+
case CAT_ONE_CSQ:
if(strstr(RxBuff, "+CSQ") == NULL) {
CatOne.ATCmdRet = CAT_ONE_RET_ERR;
}
break;
-
+
case CAT_ONE_LTPCLOSE:
if(strstr(RxBuff, "CLOSE OK") != NULL) {
break;
@@ -328,20 +267,20 @@ void CatOneAtCmdAnalyze(char *RxBuff)
}
CatOne.ATCmdRet = CAT_ONE_RET_ERR;
break;
- case CAT_ONE_AT_NULL:
+ case CAT_ONE_AT_NULL:
p = strstr(RxBuff, "+LIPURC");
if(p != NULL) {
char rData[120];
uint8_t hData[60];
int rLen, hLen, ret;
-
+
if(strstr(p, "+LIPURC: 0,0") != NULL) {
CAT1_DBG_LOG("TCP connection disconnected.\r\n\r\n");
CatOne.TcpConnFlag = false;
CatOne.Cat1Status = CAT_ONE_OFF;
return;
}
-
+
ret = sscanf(p, "+LIPURC: 0,1,%d,%s\r\n", &rLen, rData);
if(ret == 2) {
if(rLen < 24)
@@ -354,13 +293,12 @@ void CatOneAtCmdAnalyze(char *RxBuff)
else {
return;
}
- //CatOne.Cat1Status = CAT_ONE_CLOSE_TCP;
- rt_sem_release(CatOneRev_Sem);//接收任务
+ rt_sem_release(CatOneRev_Sem);
return;
}
default:
CatOne.ATCmdRet = CAT_ONE_RET_ERR;
-
+
}
if(CatOne.ATCmdRet == CAT_ONE_RET_OK) {
CatOne.Cat1Status = CatOne.NextStatus;
@@ -377,35 +315,35 @@ void CatOneAtCmdSend(CatOneATCMD_m Cmd, uint32_t Dly, CatOneStatus_m NextStatus)
{
CatOne.AtCmd = Cmd;
if(CatOne.AtCmd == CAT_ONE_LIPSEND) {
- HexToAscii(CatOneEthTxBuff, CommUnitSendASCII, CatOneEthTxLen);
- sprintf(CatOne.CatOneSendBuff,"AT+LIPSEND=0,1,%d,\"%s\"\r\n",CatOneEthTxLen * 2, CommUnitSendASCII);
+ HexToAscii(CatOneTxBuff, CommUnitSendASCII, CatOneTxLen);
+ sprintf(CatOne.CatOneSendBuff,"AT+LIPSEND=0,1,%d,\"%s\"\r\n",CatOneTxLen * 2, CommUnitSendASCII);
CatOne.GateWay->BatteryReadDlyCnt = 30;
}
else if(CatOne.AtCmd == CAT_ONE_LIPOPEN) {
- sprintf(CatOne.CatOneSendBuff,"AT+LIPOPEN=\"TCP\",\"%d.%d.%d.%d\",%d\r\n",
- CatOne.GateWay->ConfigPara.LTENet.DestAddr[0],
- CatOne.GateWay->ConfigPara.LTENet.DestAddr[1],
+ sprintf(CatOne.CatOneSendBuff,"AT+LIPOPEN=\"TCP\",\"%d.%d.%d.%d\",%d\r\n",
+ CatOne.GateWay->ConfigPara.LTENet.DestAddr[0],
+ CatOne.GateWay->ConfigPara.LTENet.DestAddr[1],
CatOne.GateWay->ConfigPara.LTENet.DestAddr[2],
- CatOne.GateWay->ConfigPara.LTENet.DestAddr[3],
+ CatOne.GateWay->ConfigPara.LTENet.DestAddr[3],
CatOne.GateWay->ConfigPara.LTENet.DestPort);
}
else {
strcpy(CatOne.CatOneSendBuff, CatOneATCmdStr[CatOne.AtCmd]);
}
CAT1_DBG_LOG(CatOne.CatOneSendBuff);
- EthRevTimeOutCnt = 0;
- EthOrCat1UartSend((uint8_t *)CatOne.CatOneSendBuff, strlen(CatOne.CatOneSendBuff));
+ Cat1RevTimeOutCnt = 0;
+ DebugOrCat1UartSend((uint8_t *)CatOne.CatOneSendBuff, strlen(CatOne.CatOneSendBuff));
CatOne.CatOne1mSDelayCnt = Dly;
CatOne.Cat1Status = CAT_ONE_WAIT_REV;
CatOne.NextStatus = NextStatus;
}
-int GateWayRegister(uint8_t *TxBuff)
+static int GateWayRegister(uint8_t *TxBuff)
{
uint16_t UnitCommCnt = 0;
uint8_t *p = &TxBuff[0];
uint16_t len = 5;
-
+
if(CatOne.GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true && CatOne.GateWay->ConfigPara.Rs485Ch1.Enable == true) {
UnitCommCnt++;
memcpy(&p[len], CatOne.GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0], 6);
@@ -439,7 +377,7 @@ void CatOneLoopHandler(void)
static rt_err_t result;
uint16_t ret;
static uint8_t Cat1RevErrCnt = 0;
-
+
switch(CatOne.Cat1Status){
case CAT_ONE_IDEL:
rt_thread_delay(1);
@@ -450,7 +388,7 @@ void CatOneLoopHandler(void)
CatOne.Cat1Status = CAT_ONE_RESET;
}
break;
-
+
case CAT_ONE_WAIT_REV:
result = rt_sem_take(CatOneRev_Sem, CatOne.CatOne1mSDelayCnt);
if(result != RT_EOK) {
@@ -459,7 +397,7 @@ void CatOneLoopHandler(void)
CatOneAtCmdSend(CatOne.AtCmd, 2000, CatOne.NextStatus);
CAT1_DBG_LOG("Cat1 Ret TimeOut, ReSend(%d)...\r\n", CatOne.AtCmdResendCnt);
}
- else { //3次错误,关机
+ else {
CAT1_DBG_LOG("Cat1 error, Close!\r\n");
if(CatOne.AtCmd == CAT_ONE_LIPSEND)
CatOne.Cat1Status = CAT_ONE_CLOSE_TCP;
@@ -468,7 +406,7 @@ void CatOneLoopHandler(void)
}
}
break;
-
+
case CAT_ONE_INIT:
CatOne.AtCmdIdx++;
if(CatOneModeSetCmdArray[CatOne.AtCmdIdx] != CAT_ONE_AT_CMD_END) {
@@ -489,31 +427,31 @@ void CatOneLoopHandler(void)
case CAT_ONE_TCP_CONN:
CatOneAtCmdSend(CAT_ONE_LIPOPEN, 2000, CAT_ONE_WAIT_CONN);
break;
-
+
case CAT_ONE_WAIT_CONN:
if(CatOne.TcpConnFlag) {
if(CatOne.GateWay->SvrRegFlag == false)
CatOne.Cat1Status = CAT_ONE_REG_SVR;
- else
+ else
CatOne.Cat1Status = CAT_ONE_WAIT_SEND;
}
break;
-
- case CAT_ONE_REG_SVR: //注册服务器
- ret = GateWayRegister(CatOneEthTxBuff);
- rt_mq_send(CatOne.GateWay->NetSendData_MQ, CatOneEthTxBuff, ret);
+
+ case CAT_ONE_REG_SVR:
+ ret = GateWayRegister(CatOneTxBuff);
+ rt_mq_send(CatOne.GateWay->NetSendData_MQ, CatOneTxBuff, ret);
CatOne.Cat1Status = CAT_ONE_WAIT_SEND;
break;
-
+
case CAT_ONE_WAIT_SEND:
result = rt_mq_recv(CatOne.GateWay->NetSendData_MQ, Payload, CAT_ONE_REV_LEN_MAX, 1000);
if(result == RT_EOK) {
- CatSendErrCnt = 0;
- CatOneEthTxLen = NetCommOrgData(CatOne.GateWay, Payload, CatOneEthTxBuff);
+ CatSendErrCnt = 0;
+ CatOneTxLen = NetCommOrgData(CatOne.GateWay, Payload, CatOneTxBuff);
CatOne.Cat1Status = CAT_ONE_SEND_DATA;
}
else {
- if(CatOne.Cat1Status == CAT_ONE_RESET || CatOne.Cat1Status == CAT_ONE_OFF) //外部命令执行,状态改变
+ if(CatOne.Cat1Status == CAT_ONE_RESET || CatOne.Cat1Status == CAT_ONE_OFF)
return;
if(!CatOne.TcpConnFlag) {
CatOne.Cat1Status = CAT_ONE_OFF;
@@ -530,8 +468,8 @@ void CatOneLoopHandler(void)
}
}
break;
-
- case CAT_ONE_SEND_DATA:
+
+ case CAT_ONE_SEND_DATA:
CatOne.AtCmdResendCnt = 3;
Cat1RevErrCnt++;
if(Cat1RevErrCnt > 10) {
@@ -542,7 +480,7 @@ void CatOneLoopHandler(void)
}
CatOneAtCmdSend(CAT_ONE_LIPSEND, 5000, CAT_ONE_REV_DATA);
break;
-
+
case CAT_ONE_REV_DATA:
result = rt_sem_take(CatOneRev_Sem, CatOne.CatOne1mSDelayCnt);
if(result != RT_EOK) {
@@ -554,7 +492,7 @@ void CatOneLoopHandler(void)
else {
Cat1RevErrCnt = 0;
}
- if(CatOne.GateWay->SvrRegFlag == false) //设备没注册,关闭4G,等待下一次重新注册
+ if(CatOne.GateWay->SvrRegFlag == false)
CatOne.Cat1Status = CAT_ONE_OFF;
else
CatOne.Cat1Status = CAT_ONE_WAIT_SEND;
@@ -564,9 +502,8 @@ void CatOneLoopHandler(void)
CatOne.AtCmdResendCnt = 3;
CatOneAtCmdSend(CAT_ONE_LTPCLOSE, 1000, CAT_ONE_OFF);
break;
-
+
case CAT_ONE_OFF:
- //CAT1_POW_OFF();
CAT1_RESET_SET();
CAT1_PWR_KEY_CLR();
rt_thread_delay(3000);
@@ -576,15 +513,16 @@ void CatOneLoopHandler(void)
CAT1_DBG_LOG("Cat1 Power Off!\r\n");
CatOne.Cat1Status = CAT_ONE_IDEL;
CatOne.ResetDelayCnt = CATONE_RESET_DELAY_TIME_MAX;
+ DBG_ON();
break;
-
+
case CAT_ONE_RESET:
CatSendErrCnt = 0;
CatOne.GateWay->SvrRegFlag = false;
CAT1_DBG_LOG("Cat1 Reset!\r\n");
+ CAT1_ON();
CAT1_RESET_CLR();
CAT1_PWR_KEY_SET();
- //CAT1_POW_ON();
rt_thread_delay(50);
CAT1_RESET_SET();
CAT1_PWR_KEY_CLR();
@@ -594,156 +532,6 @@ void CatOneLoopHandler(void)
CatOne.AtCmdIdx = 0;
rt_thread_delay(1000);
CatOne.GateWay->BatteryReadDlyCnt = 60;
- break;
- }
-}
-
-void EthLoopHandler(void)
-{
- rt_err_t result;
-
- switch(CatOne.EthStatus) {
- case ETH_IDEL:
- rt_thread_delay(1);
- if(CatOne.EthResetDelayCnt > 0) {
- CatOne.EthResetDelayCnt--;
- }
- else {
- CatOne.EthStatus = ETH_RESET;
- }
- break;
-
- case ETH_RESET:
- CAT1_DBG_LOG("ETH Reset!\r\n");
- ETH_RESET_CLR();
- rt_thread_delay(10);
- ETH_RESET_SET();
- rt_thread_delay(2000); // 延长复位后稳定时间到2秒
- CatOne.EthStatus = ETH_WAIT_LINK;
- CatOne.EthLinkWaitCnt = 0;
- CatOne.EthFirstRegFlag = true; // 重置首次注册标志
- break;
-
- case ETH_WAIT_LINK:
- if(CatOne.EthLinkWaitCnt == 0) {
- /* 首次进入等待链路状态,等待模块完全启动 */
- CAT1_DBG_LOG("ETH Waiting for module ready...\r\n");
- rt_thread_delay(2000);
- }
- if(ETH_LINK_GET() == Reset) {
- CAT1_DBG_LOG("ETH Link OK!\r\n");
- if(CatOne.GateWay->SvrRegFlag == false) {
- CatOne.EthStatus = ETH_REG_SVR;
- }
- else {
- CatOne.EthStatus = ETH_WAIT_SEND;
- }
- }
- else {
- CatOne.EthLinkWaitCnt++;
- if(CatOne.EthLinkWaitCnt >= ETH_LINK_WAIT_TIME_MAX) {
- CAT1_DBG_LOG("ETH Link Timeout, Reset!\r\n");
- CatOne.EthStatus = ETH_OFF;
- }
- rt_thread_delay(1);
- }
- break;
-
- case ETH_REG_SVR:
- {
- // 首次注册时添加延迟,等待系统稳定
- if(CatOne.EthFirstRegFlag) {
- CAT1_DBG_LOG("ETH First Register, waiting for system stable...\r\n");
- rt_thread_delay(ETH_FIRST_REG_DELAY);
- CatOne.EthFirstRegFlag = false;
- }
-
- uint8_t ret = GateWayRegister(CatOneEthTxBuff);
- rt_mq_send(CatOne.GateWay->NetSendData_MQ, CatOneEthTxBuff, ret);
- CAT1_DBG_LOG("ETH Register Server...\r\n");
- CatOne.EthStatus = ETH_WAIT_SEND;
- CatOne.EthSendRetryCnt = 0; // 重置重试计数器
- }
- break;
-
- case ETH_WAIT_SEND:
- result = rt_mq_recv(CatOne.GateWay->NetSendData_MQ, Payload, CAT_ONE_REV_LEN_MAX, 100);
- if(result == RT_EOK) {
- CatOneEthTxLen = NetCommOrgData(CatOne.GateWay, Payload, CatOneEthTxBuff);
- CatOne.EthStatus = ETH_SEND_DATA;
- }
- else {
- if(CatOne.EthStatus == ETH_RESET || CatOne.EthStatus == ETH_OFF)
- return;
- if(ETH_LINK_GET() != Reset) {
- CAT1_DBG_LOG("ETH Link Lost!\r\n");
- CatOne.EthStatus = ETH_OFF;
- }
- else {
- rt_thread_delay(1);
- }
- }
- break;
-
- case ETH_SEND_DATA:
- HexToAscii(CatOneEthTxBuff, CommUnitSendASCII, CatOneEthTxLen);
- EthRevTimeOutCnt = 0;
- EthOrCat1UartSend((uint8_t *)CommUnitSendASCII, CatOneEthTxLen * 2);
- CommUnitSendASCII[CatOneEthTxLen * 2] = 0;
- CAT1_DBG_LOG("Eth Send: %s\r\n", CommUnitSendASCII);
-
- CatOne.EthStatus = ETH_WAIT_RECV;
- CatOne.EthRecvTimeoutCnt = 0;
- CatOne.EthSendRetryCnt = 0;
- break;
-
- case ETH_WAIT_RECV:
- rt_thread_delay(1);
- CatOne.EthRecvTimeoutCnt++;
-
- if(CatOne.EthRecvTimeoutCnt >= ETH_RECV_TIMEOUT_MAX) {
- CAT1_DBG_LOG("ETH Recv Timeout!\r\n");
- CatOne.EthSendRetryCnt++;
- if(CatOne.EthSendRetryCnt >= ETH_SEND_RETRY_MAX) {
- CAT1_DBG_LOG("ETH Send Retry Max, Reset!\r\n");
- CatOne.EthStatus = ETH_OFF;
- }
- else {
- if(CatOne.GateWay->SvrRegFlag == false) {
- CatOne.EthStatus = ETH_REG_SVR;
- }
- else {
- CatOne.EthStatus = ETH_WAIT_SEND;
- }
- }
- }
-
- if(ETH_LINK_GET() != Reset) {
- CAT1_DBG_LOG("ETH Link Lost During Wait!\r\n");
- CatOne.EthStatus = ETH_OFF;
- }
-
- if(CatOne.GateWay->SvrRegFlag == true) {
- CAT1_DBG_LOG("ETH Register Success!\r\n");
- CatOne.EthStatus = ETH_WAIT_SEND;
- CatOne.EthRecvTimeoutCnt = 0;
- CatOne.EthSendRetryCnt = 0;
- }
-
- break;
-
- case ETH_OFF:
- CAT1_DBG_LOG("ETH Power Off!\r\n");
- CatOne.GateWay->SvrRegFlag = false;
- //ETH_RESET_CLR();
- //rt_thread_delay(3000);
- //ETH_RESET_SET();
- CatOne.EthStatus = ETH_IDEL;
- CatOne.EthResetDelayCnt = ETH_RESET_DELAY_TIME_MAX;
- break;
-
- default:
- CatOne.EthStatus = ETH_RESET;
break;
}
}
@@ -764,70 +552,44 @@ static void CatOneInit(GateWayPara GateWay)
CatOne.CatOneRevCallBack = GateWay->SvrRevCallBack;
}
-void CatOneEthRev_Thread_Entry(void *parameter)
+void CatOneRev_Thread_Entry(void *parameter)
{
rt_err_t result;
char RxBuffTemp[CAT_ONE_REV_LEN_MAX];
- uint8_t HexData[CAT_ONE_REV_LEN_MAX / 2];
-
+
GateWayPara GateWay = (GateWayPara)parameter;
-
- rt_kprintf("CatOneTthRev Thread is running!\r\n");
-
+
+ rt_kprintf("CatOneRev Thread is running!\r\n");
+
while(1) {
- if(GateWay->ConfigPara.Comm == CATONE_COMM) {
- result = rt_sem_take(CatOneIRQ_Sem, 500);
- if(result == RT_EOK) {
- memcpy(RxBuffTemp, CatOneEthRxBuff, CatOneEthRxLen);
- RxBuffTemp[CatOneEthRxLen] = 0;
- CatOneAtCmdAnalyze(RxBuffTemp);
- memset(CatOneEthRxBuff, 0x00, CAT_ONE_REV_LEN_MAX);
- CatOneEthRxLen = 0;
- }
- //CatOneEthRxLen = 0;
- }
- else if(GateWay->ConfigPara.Comm == ETH_COMM) {
- result = rt_sem_take(EthIRQ_Sem, 500);
- if(result == RT_EOK) {
- memcpy(RxBuffTemp, CatOneEthRxBuff, CatOneEthRxLen);
- RxBuffTemp[CatOneEthRxLen] = 0;
- CAT1_DBG_LOG("Eth Rev: %s\r\n",RxBuffTemp);
- memset(HexData, 0x00, CatOneEthRxLen / 2);
- uint8_t ret = AsciiToHex(RxBuffTemp, HexData, CatOneEthRxLen);
- if(ret > 0)
- GateWay->SvrRevCallBack(GateWay, HexData, ret);
- memset(CatOneEthRxBuff, 0x00, CAT_ONE_REV_LEN_MAX);
- CatOneEthRxLen = 0;
- }
- //CatOneEthRxLen = 0;
+ result = rt_sem_take(CatOneIRQ_Sem, 500);
+ if(result == RT_EOK) {
+ memcpy(RxBuffTemp, CatOneRxBuff, CatOneRxLen);
+ RxBuffTemp[CatOneRxLen] = 0;
+ CatOneAtCmdAnalyze(RxBuffTemp);
+ memset(CatOneRxBuff, 0x00, CAT_ONE_REV_LEN_MAX);
+ CatOneRxLen = 0;
}
}
}
-void CatOne_Eth_Thread_Entry(void *parameter)
+void CatOne_Thread_Entry(void *parameter)
{
GateWayPara GateWay = (GateWayPara)parameter;
-
- CatOneRev_Sem = rt_sem_create("cat1r_sem", 0, RT_IPC_FLAG_FIFO);
+
+ CatOneRev_Sem = rt_sem_create("cat1r_sem", 0, RT_IPC_FLAG_FIFO);
if(CatOneRev_Sem == RT_NULL) {
- rt_kprintf("CatOne Sem Create Failed!\r\n");
+ rt_kprintf("CatOneRev Sem Create Failed!\r\n");
}
-
- EthIRQ_Sem = rt_sem_create("eth_sem", 0, RT_IPC_FLAG_FIFO);
- if(EthIRQ_Sem == RT_NULL) {
- rt_kprintf("Eth Sem Create Failed!\r\n");
- }
-
- CatOneIRQ_Sem = rt_sem_create("cat1_sem", 0, RT_IPC_FLAG_FIFO);
+
+ CatOneIRQ_Sem = rt_sem_create("cat1i_sem", 0, RT_IPC_FLAG_FIFO);
if(CatOneIRQ_Sem == RT_NULL) {
rt_kprintf("CatOneIRQ Sem Create Failed!\r\n");
}
-
+
CatOneInit(GateWay);
- ETH_RESET_CLR();
- rt_thread_delay(10);
- ETH_RESET_SET();
- Cat1Rev_Thread = rt_thread_create("Cat1Rev", CatOneEthRev_Thread_Entry, parameter, 3000, 3, 20);
+
+ Cat1Rev_Thread = rt_thread_create("Cat1Rev", CatOneRev_Thread_Entry, parameter, 3000, 3, 20);
if (Cat1Rev_Thread != RT_NULL) {
rt_thread_startup(Cat1Rev_Thread);
}
@@ -835,44 +597,37 @@ void CatOne_Eth_Thread_Entry(void *parameter)
rt_kprintf("CatOneRev Thread Create Failed! Exit...\r\n");
return;
}
- rt_kprintf("CatOne Thread is running!\r\n");
+ rt_kprintf("CatOne Thread is running!\r\n");
while(1) {
- //rt_mutex_take(GateWay->UartRevMutex, RT_WAITING_FOREVER);
- if(GateWay->ConfigPara.Comm == CATONE_COMM)
- CatOneLoopHandler();
- else if(GateWay->ConfigPara.Comm == ETH_COMM)
- EthLoopHandler();
- else
- rt_thread_delay(1);
- //rt_mutex_release(GateWay->UartRevMutex);
+ if(GateWay->ConfigPara.Comm != CATONE_COMM) {
+ rt_thread_delay(100);
+ continue;
+ }
+ CatOneLoopHandler();
}
}
-
-void EthOrCat1RxIrqCallback(uint8_t rData)
-{
- if(EthRevTimeOutCnt == 0)
- CatOneEthRxLen = 0;
-
- if(CatOneEthRxLen < CAT_ONE_REV_LEN_MAX) {
- CatOneEthRxBuff[CatOneEthRxLen++] = rData;
- }
-
- EthRevTimeOutCnt = 3;
-}
-
-void EthRxOverhandler(void)
+void Cat1IrqCallback(uint8_t rData)
{
- if(EthRevTimeOutCnt > 0)
- EthRevTimeOutCnt--;
+ if(Cat1RevTimeOutCnt == 0)
+ CatOneRxLen = 0;
- if(CatOneEthRxLen > 5 && EthRevTimeOutCnt == 0) {
- EthRevTimeOutCnt = 20;
- if(CatOne.GateWay->ConfigPara.Comm == CATONE_COMM)
- rt_sem_release(CatOneIRQ_Sem);
- else
- rt_sem_release(EthIRQ_Sem);
+ if(CatOneRxLen < CAT_ONE_REV_LEN_MAX) {
+ CatOneRxBuff[CatOneRxLen++] = rData;
+ }
+
+ Cat1RevTimeOutCnt = 3;
+}
+
+void Cat1OverHandler(void)
+{
+ if(Cat1RevTimeOutCnt > 0)
+ Cat1RevTimeOutCnt--;
+
+ if(CatOneRxLen > 5 && Cat1RevTimeOutCnt == 0) {
+ Cat1RevTimeOutCnt = 20;
+ rt_sem_release(CatOneIRQ_Sem);
}
}
@@ -890,12 +645,7 @@ void CatReadImeiOrSim(char *Imei, char *Sim)
void CatOneTriggerRegister(void)
{
- ETHStop();
- CAT1_ON();
- CatOneReset();
-}
-
-void ETHTriggerRegister(void)
-{
- CatOne.EthStatus = ETH_REG_SVR;
+ CatOneStop();
+ CAT1_ON();
+ CatOneReset();
}
diff --git a/Project/GateWay/source/User/Src/EthTask.c b/Project/GateWay/source/User/Src/EthTask.c
new file mode 100644
index 0000000..11d98fd
--- /dev/null
+++ b/Project/GateWay/source/User/Src/EthTask.c
@@ -0,0 +1,311 @@
+#include "EthTask.h"
+#include "Public.h"
+#include "DebugCmd.h"
+
+static rt_sem_t EthIRQ_Sem = RT_NULL;
+static rt_thread_t EthRev_Thread = RT_NULL;
+
+static EthTask_t Eth;
+
+static char EthRxBuff[ETH_RX_LEN_MAX];
+static uint16_t EthRxLen;
+static uint8_t EthRevTimeOutCnt;
+
+static uint8_t Payload[ETH_RX_LEN_MAX];
+static char CommUnitSendASCII[ETH_RX_LEN_MAX * 2];
+
+static bool EthDispEn = false;
+
+#define ETH_DBG_LOG(...) { if(EthDispEn) Debug_Printf(__VA_ARGS__);}
+
+void ETHOnOff(bool OnOff)
+{
+ EthDispEn = OnOff;
+ if(OnOff)
+ Debug_Printf("\r\nEth Display Enable!\r\n\r\n");
+ else
+ Debug_Printf("\r\nEth Display Disable!\r\n\r\n");
+}
+
+void ETHStop(void)
+{
+ Eth.Status = ETH_OFF;
+}
+
+void ETHReset(void)
+{
+ Eth.Status = ETH_RESET;
+}
+
+void ETHTriggerRegister(void)
+{
+ Eth.Status = ETH_REG_SVR;
+}
+
+static int GateWayRegister(uint8_t *TxBuff)
+{
+ uint16_t UnitCommCnt = 0;
+ uint8_t *p = &TxBuff[0];
+ uint16_t len = 5;
+
+ if(Eth.GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true && Eth.GateWay->ConfigPara.Rs485Ch1.Enable == true) {
+ UnitCommCnt++;
+ memcpy(&p[len], Eth.GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0], 6);
+ len += 6;
+ }
+ if(Eth.GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true && Eth.GateWay->ConfigPara.Rs485Ch2.Enable == true) {
+ UnitCommCnt++;
+ memcpy(&p[len], Eth.GateWay->ConfigPara.Rs485Ch2.CUPara.Para.Mac[0], 6);
+ len += 6;
+ }
+ for(int i = 0; i < COMMUNIT_NUM_MAX; i++) {
+ if(Eth.GateWay->ConfigPara.CommUnitArray[i].RegFlag == true) {
+ for(int j = 0; j < Eth.GateWay->ConfigPara.CommUnitArray[i].SensorN; j++)
+ {
+ memcpy(&p[len], Eth.GateWay->ConfigPara.CommUnitArray[i].Mac[j], 6);
+ len += 6;
+ UnitCommCnt++;
+ }
+ }
+ }
+ TxBuff[0] = (len - 3) & 0x00ff;
+ TxBuff[1] = ((len - 3) >> 8) & 0x00ff;
+ TxBuff[2] = NET_COMM_CMD_REG;
+ TxBuff[3] = UnitCommCnt & 0x00ff;
+ TxBuff[4] = (UnitCommCnt >> 8) & 0x00ff;
+ return len;
+}
+
+void EthLoopHandler(void)
+{
+ rt_err_t result;
+
+ switch(Eth.Status) {
+ case ETH_IDEL:
+ rt_thread_delay(1);
+ if(Eth.ResetDelayCnt > 0) {
+ Eth.ResetDelayCnt--;
+ }
+ else {
+ Eth.Status = ETH_RESET;
+ }
+ break;
+
+ case ETH_RESET:
+ ETH_DBG_LOG("ETH Reset!\r\n");
+ ETH_RESET_CLR();
+ rt_thread_delay(10);
+ ETH_RESET_SET();
+ rt_thread_delay(2000);
+ Eth.Status = ETH_WAIT_LINK;
+ Eth.LinkWaitCnt = 0;
+ Eth.FirstRegFlag = true;
+ break;
+
+ case ETH_WAIT_LINK:
+ if(Eth.LinkWaitCnt == 0) {
+ ETH_DBG_LOG("ETH Waiting for module ready...\r\n");
+ rt_thread_delay(2000);
+ }
+ if(ETH_LINK_GET() == Reset) {
+ ETH_DBG_LOG("ETH Link OK!\r\n");
+ if(Eth.GateWay->SvrRegFlag == false) {
+ Eth.Status = ETH_REG_SVR;
+ }
+ else {
+ Eth.Status = ETH_WAIT_SEND;
+ }
+ }
+ else {
+ Eth.LinkWaitCnt++;
+ if(Eth.LinkWaitCnt >= ETH_LINK_WAIT_TIME_MAX) {
+ ETH_DBG_LOG("ETH Link Timeout, Reset!\r\n");
+ Eth.Status = ETH_OFF;
+ }
+ rt_thread_delay(1);
+ }
+ break;
+
+ case ETH_REG_SVR:
+ {
+ if(Eth.FirstRegFlag) {
+ ETH_DBG_LOG("ETH First Register, waiting for system stable...\r\n");
+ rt_thread_delay(ETH_FIRST_REG_DELAY);
+ Eth.FirstRegFlag = false;
+ }
+
+ uint8_t ret = GateWayRegister(Eth.TxBuff);
+ rt_mq_send(Eth.GateWay->NetSendData_MQ, Eth.TxBuff, ret);
+ ETH_DBG_LOG("ETH Register Server...\r\n");
+ Eth.Status = ETH_WAIT_SEND;
+ Eth.SendRetryCnt = 0;
+ }
+ break;
+
+ case ETH_WAIT_SEND:
+ result = rt_mq_recv(Eth.GateWay->NetSendData_MQ, Payload, ETH_RX_LEN_MAX, 100);
+ if(result == RT_EOK) {
+ Eth.TxLen = NetCommOrgData(Eth.GateWay, Payload, Eth.TxBuff);
+ Eth.Status = ETH_SEND_DATA;
+ }
+ else {
+ if(Eth.Status == ETH_RESET || Eth.Status == ETH_OFF)
+ return;
+ if(ETH_LINK_GET() != Reset) {
+ ETH_DBG_LOG("ETH Link Lost!\r\n");
+ Eth.Status = ETH_OFF;
+ }
+ else {
+ rt_thread_delay(1);
+ }
+ }
+ break;
+
+ case ETH_SEND_DATA:
+ HexToAscii(Eth.TxBuff, CommUnitSendASCII, Eth.TxLen);
+ EthRevTimeOutCnt = 0;
+ EthUartSend((uint8_t *)CommUnitSendASCII, Eth.TxLen * 2);
+ CommUnitSendASCII[Eth.TxLen * 2] = 0;
+ ETH_DBG_LOG("Eth Send: %s\r\n", CommUnitSendASCII);
+
+ Eth.Status = ETH_WAIT_RECV;
+ Eth.RecvTimeoutCnt = 0;
+ Eth.SendRetryCnt = 0;
+ break;
+
+ case ETH_WAIT_RECV:
+ rt_thread_delay(1);
+ Eth.RecvTimeoutCnt++;
+
+ if(Eth.RecvTimeoutCnt >= ETH_RECV_TIMEOUT_MAX) {
+ ETH_DBG_LOG("ETH Recv Timeout!\r\n");
+ Eth.SendRetryCnt++;
+ if(Eth.SendRetryCnt >= ETH_SEND_RETRY_MAX) {
+ ETH_DBG_LOG("ETH Send Retry Max, Reset!\r\n");
+ Eth.Status = ETH_OFF;
+ }
+ else {
+ if(Eth.GateWay->SvrRegFlag == false) {
+ Eth.Status = ETH_REG_SVR;
+ }
+ else {
+ Eth.Status = ETH_WAIT_SEND;
+ }
+ }
+ }
+
+ if(ETH_LINK_GET() != Reset) {
+ ETH_DBG_LOG("ETH Link Lost During Wait!\r\n");
+ Eth.Status = ETH_OFF;
+ }
+
+ if(Eth.GateWay->SvrRegFlag == true) {
+ ETH_DBG_LOG("ETH Register Success!\r\n");
+ Eth.Status = ETH_WAIT_SEND;
+ Eth.RecvTimeoutCnt = 0;
+ Eth.SendRetryCnt = 0;
+ }
+
+ break;
+
+ case ETH_OFF:
+ ETH_DBG_LOG("ETH Power Off!\r\n");
+ Eth.GateWay->SvrRegFlag = false;
+ Eth.Status = ETH_IDEL;
+ Eth.ResetDelayCnt = ETH_RESET_DELAY_TIME_MAX;
+ break;
+
+ default:
+ Eth.Status = ETH_RESET;
+ break;
+ }
+}
+
+static void EthInit(GateWayPara GateWay)
+{
+ memset(&Eth, 0x00, sizeof(EthTask_t));
+ Eth.Status = ETH_RESET;
+ Eth.GateWay = GateWay;
+}
+
+void EthIrqCallbackHandler(uint8_t rData)
+{
+ if(EthRevTimeOutCnt == 0)
+ EthRxLen = 0;
+
+ if(EthRxLen < ETH_RX_LEN_MAX) {
+ EthRxBuff[EthRxLen++] = rData;
+ }
+
+ EthRevTimeOutCnt = 3;
+}
+
+void EthOverHandler(void)
+{
+ if(EthRevTimeOutCnt > 0)
+ EthRevTimeOutCnt--;
+
+ if(EthRxLen > 5 && EthRevTimeOutCnt == 0) {
+ EthRevTimeOutCnt = 20;
+ rt_sem_release(EthIRQ_Sem);
+ }
+}
+
+static void EthRev_Thread_Entry(void *parameter)
+{
+ rt_err_t result;
+ char RxBuffTemp[ETH_RX_LEN_MAX];
+ uint8_t HexData[ETH_RX_LEN_MAX / 2];
+
+ GateWayPara GateWay = (GateWayPara)parameter;
+
+ rt_kprintf("EthRev Thread is running!\r\n");
+
+ while(1) {
+ result = rt_sem_take(EthIRQ_Sem, 500);
+ if(result == RT_EOK) {
+ memcpy(RxBuffTemp, EthRxBuff, EthRxLen);
+ RxBuffTemp[EthRxLen] = 0;
+ ETH_DBG_LOG("Eth Rev: %s\r\n", RxBuffTemp);
+ memset(HexData, 0x00, EthRxLen / 2);
+ uint8_t ret = AsciiToHex(RxBuffTemp, HexData, EthRxLen);
+ if(ret > 0)
+ GateWay->SvrRevCallBack(GateWay, HexData, ret);
+ memset(EthRxBuff, 0x00, ETH_RX_LEN_MAX);
+ EthRxLen = 0;
+ }
+ }
+}
+
+void Eth_Thread_Entry(void *parameter)
+{
+ GateWayPara GateWay = (GateWayPara)parameter;
+
+ EthIRQ_Sem = rt_sem_create("ethi_sem", 0, RT_IPC_FLAG_FIFO);
+ if(EthIRQ_Sem == RT_NULL) {
+ rt_kprintf("EthIRQ Sem Create Failed!\r\n");
+ }
+
+ EthInit(GateWay);
+ ETH_RESET_CLR();
+ rt_thread_delay(10);
+ ETH_RESET_SET();
+
+ EthRev_Thread = rt_thread_create("EthRev", EthRev_Thread_Entry, parameter, 3000, 3, 20);
+ if (EthRev_Thread != RT_NULL) {
+ rt_thread_startup(EthRev_Thread);
+ }
+ else {
+ rt_kprintf("EthRev Thread Create Failed! Exit...\r\n");
+ return;
+ }
+ rt_kprintf("Eth Thread is running!\r\n");
+
+ while(1) {
+ if(GateWay->ConfigPara.Comm != ETH_COMM) {
+ rt_thread_delay(100);
+ continue;
+ }
+ EthLoopHandler();
+ }
+}
diff --git a/Project/GateWay/source/User/Src/LoraTask.c b/Project/GateWay/source/User/Src/LoraTask.c
index 05c32d9..f099278 100644
--- a/Project/GateWay/source/User/Src/LoraTask.c
+++ b/Project/GateWay/source/User/Src/LoraTask.c
@@ -41,7 +41,7 @@ void LoraIRQ_Thread_Entry(void *parameter)
rt_err_t result;
static uint16_t LoraErrCnt = 0;
- Debug_Printf("LoraRev Thread is running!\r\n");
+ Debug_Printf("LoraRev Thread is running!\r\n");
while(1) {
if(GateWay->ConfigPara.Lora.OnOff == false) {
rt_thread_delay(100);
@@ -57,7 +57,7 @@ void LoraIRQ_Thread_Entry(void *parameter)
LoraErrCnt++;
if(LoraErrCnt > LORA_ERR_RESET_DLY_MAX) { //15分钟内没有收到lora数据重启lora模块
LoraErrCnt = 0;
- Debug_Printf("Lora Reset!\r\n");
+ Debug_Printf("Lora Reset!\r\n");
Sx1276LoRaInit(LoraRevCallBack);
}
}
@@ -97,7 +97,7 @@ void Lora_Thread_Entry(void *parameter)
rt_thread_startup(LoraIRQ_Thread);
Sx1276LoRaInit(LoraRevCallBack);
- Debug_Printf("Lora Thread is running!\r\n");
+ Debug_Printf("Lora Thread is running!\r\n");
#ifdef LORA_LOWPOWER
while(1) {
if(GateWay->ConfigPara.Lora.OnOff == false) {
diff --git a/Project/GateWay/source/User/Src/Public.c b/Project/GateWay/source/User/Src/Public.c
index da72f67..dcde891 100644
--- a/Project/GateWay/source/User/Src/Public.c
+++ b/Project/GateWay/source/User/Src/Public.c
@@ -653,7 +653,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
// int16_t Rssi;
// int8_t Snr;
// SX1276LoCalcRssiSnr(&Rssi, &Snr);
- MAIN_DBG_LOG("\r\nCUMac:%02X-%02X-%02X-%02X-%02X-%02X, Bat: %d%, SN: %d,Rssi:%d, Snr:%d\r\n",
+ MAIN_DBG_LOG("\r\nCUMac:%02X-%02X-%02X-%02X-%02X-%02X, Bat: %d%, SN: %d, Rssi:%d, Snr:%d\r\n",
CUHeader->DevMac[0], CUHeader->DevMac[1], CUHeader->DevMac[2], CUHeader->DevMac[3], CUHeader->DevMac[4], CUHeader->DevMac[5],
GateWay->ConfigPara.CommUnitArray[CommUnitIdx].BatLevel,
GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorN,
diff --git a/Project/GateWay/source/User/Src/bsp.c b/Project/GateWay/source/User/Src/bsp.c
index a4e66a9..0b1dea2 100644
--- a/Project/GateWay/source/User/Src/bsp.c
+++ b/Project/GateWay/source/User/Src/bsp.c
@@ -209,57 +209,57 @@ static void Xtal32_ClockConfig(void)
****************************************************************************************/
/*****************************************************************************************
-* 函数名称: DbgUartRec
-* 功能描述: 调试串口接收函数
+* 函数名称: DbgOrCat1UartRec
+* 功能描述: 调试和Cat1串口接收函数
* 参 数: 无
* 返 回 值: 返回收到的字符
*****************************************************************************************/
-static uint8_t DbgUartRec(void)
+static uint8_t DbgOrCat1UartRec(void)
{
- uint16_t u16Data = USART_RecData(DBG_USART_CH);
+ uint16_t u16Data = USART_RecData(DBG_OR_CAT1_USART_CH);
return (uint8_t)u16Data;
}
/*****************************************************************************************
-* 函数名称: DBGUsartErrIrqCallback
+* 函数名称: DBGOrCat1UsartErrIrqCallback
* 功能描述: 调试串口错误中断回调函数
* 参 数: 无
* 返 回 值: 无
*****************************************************************************************/
-static void DBGUsartErrIrqCallback(void)
+static void DBGOrCat1UsartErrIrqCallback(void)
{
- if(DBG_USART_CH->SR_f.ORE) {
- DBG_USART_CH->CR1_f.CORE = 1;
- USART_RecData(DBG_USART_CH);
+ if(DBG_OR_CAT1_USART_CH->SR_f.ORE) {
+ DBG_OR_CAT1_USART_CH->CR1_f.CORE = 1;
+ USART_RecData(DBG_OR_CAT1_USART_CH);
}
- if(DBG_USART_CH->SR_f.PE)
- DBG_USART_CH->CR1_f.CPE = 1;
+ if(DBG_OR_CAT1_USART_CH->SR_f.PE)
+ DBG_OR_CAT1_USART_CH->CR1_f.CPE = 1;
- if(DBG_USART_CH->SR_f.FE)
- DBG_USART_CH->CR1_f.CFE = 1;
+ if(DBG_OR_CAT1_USART_CH->SR_f.FE)
+ DBG_OR_CAT1_USART_CH->CR1_f.CFE = 1;
}
/*****************************************************************************************
-* 函数名称: DbgUsartRxIrqCallback
-* 功能描述: 调试串口接收中断回调函数
+* 函数名称: DbgOrCatUsartRxIrqCallback
+* 功能描述: 调试和Cat1串口接收中断回调函数
* 参 数: 无
* 返 回 值: 无
*****************************************************************************************/
-static void DbgUsartRxIrqCallback(void)
+static void DbgOrCat1UsartRxIrqCallback(void)
{
- uint8_t rData = DbgUartRec();
- DbgRxIrqCallback(rData);
+ uint8_t rData = DbgOrCat1UartRec();
+ DbgOrCat1RxIrqCallback(rData);
}
/*****************************************************************************************
-* 函数名称: DbgUart_Config
-* 功能描述: 调试串口配置函数
+* 函数名称: DbgOrCat1Uart_Config
+* 功能描述: 调试和cat1串口配置函数
* 参 数: BaudRate 串口波特率
* 返 回 值: 无
*****************************************************************************************/
-void DbgUart_Config(uint32_t BaudRate)
+void DbgOrCat1Uart_Config(uint32_t BaudRate)
{
stc_usart_uart_init_t stcInitCfg;
stc_irq_regi_conf_t stcIrqRegiCfg;
@@ -269,8 +269,8 @@ void DbgUart_Config(uint32_t BaudRate)
MEM_ZERO_STRUCT(stcPortInit);
stcPortInit.enPinOType = Pin_OType_Cmos;
- PORT_Init(DBG_USART_RX_PORT, DBG_USART_RX_PIN, &stcPortInit);
- PORT_Init(DBG_USART_TX_PORT, DBG_USART_TX_PIN, &stcPortInit);
+ PORT_Init(DBG_OR_CAT1_USART_RX_PORT, DBG_OR_CAT1_USART_RX_PIN, &stcPortInit);
+ PORT_Init(DBG_OR_CAT1_USART_TX_PORT, DBG_OR_CAT1_USART_TX_PIN, &stcPortInit);
stcInitCfg.enClkMode = UsartIntClkCkNoOutput;
stcInitCfg.enClkDiv = UsartClkDiv_1;
@@ -282,35 +282,35 @@ void DbgUart_Config(uint32_t BaudRate)
stcInitCfg.enDetectMode = UsartStartBitFallEdge;
stcInitCfg.enHwFlow = UsartRtsEnable;
- PWC_Fcg1PeriphClockCmd(DBG_FCG1_PERIPH, Enable);
+ PWC_Fcg1PeriphClockCmd(DBG_OR_CAT1_FCG1_PERIPH, Enable);
- PORT_SetFunc(DBG_USART_RX_PORT, DBG_USART_RX_PIN, DBG_USART_RX_FUNC, Disable);
- PORT_SetFunc(DBG_USART_TX_PORT, DBG_USART_TX_PIN, DBG_USART_TX_FUNC, Disable);
+ PORT_SetFunc(DBG_OR_CAT1_USART_RX_PORT, DBG_OR_CAT1_USART_RX_PIN, DBG_OR_CAT1_USART_RX_FUNC, Disable);
+ PORT_SetFunc(DBG_OR_CAT1_USART_TX_PORT, DBG_OR_CAT1_USART_TX_PIN, DBG_OR_CAT1_USART_TX_FUNC, Disable);
- enRet = USART_UART_Init(DBG_USART_CH, &stcInitCfg);
+ enRet = USART_UART_Init(DBG_OR_CAT1_USART_CH, &stcInitCfg);
if(enRet != Ok) {
Error_Handler();
}
- enRet = USART_SetBaudrate(DBG_USART_CH, BaudRate);
+ enRet = USART_SetBaudrate(DBG_OR_CAT1_USART_CH, BaudRate);
if(enRet != Ok) {
Error_Handler();
}
- stcIrqRegiCfg.enIRQn = DBGUART_IRQn;
- stcIrqRegiCfg.pfnCallback = &DbgUsartRxIrqCallback;
- stcIrqRegiCfg.enIntSrc = DBG_USART_RI_NUM;
+ stcIrqRegiCfg.enIRQn = DBG_OR_CAT1_UART_IRQn;
+ stcIrqRegiCfg.pfnCallback = &DbgOrCat1UsartRxIrqCallback;
+ stcIrqRegiCfg.enIntSrc = DBG_OR_CAT1_USART_RI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
/* Set USART RX error IRQ */
- stcIrqRegiCfg.enIRQn = DBGUART_EI_IRQn;
- stcIrqRegiCfg.pfnCallback = &DBGUsartErrIrqCallback;
- stcIrqRegiCfg.enIntSrc = DBG_USART_EI_NUM;
+ stcIrqRegiCfg.enIRQn = DBG_OR_CAT1_UART_EI_IRQn;
+ stcIrqRegiCfg.pfnCallback = &DBGOrCat1UsartErrIrqCallback;
+ stcIrqRegiCfg.enIntSrc = DBG_OR_CAT1_USART_EI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
@@ -320,7 +320,7 @@ void DbgUart_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &UsartTxIrqCallback;
stcIrqRegiCfg.enIntSrc = USART_TI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
@@ -329,27 +329,27 @@ void DbgUart_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &UsartTxCmpltIrqCallback;
stcIrqRegiCfg.enIntSrc = USART_TCI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
#endif
- USART_FuncCmd(DBG_USART_CH, UsartTx, Enable);
- USART_FuncCmd(DBG_USART_CH, UsartRx, Enable);
- USART_FuncCmd(DBG_USART_CH, UsartRxInt, Enable);
+ USART_FuncCmd(DBG_OR_CAT1_USART_CH, UsartTx, Enable);
+ USART_FuncCmd(DBG_OR_CAT1_USART_CH, UsartRx, Enable);
+ USART_FuncCmd(DBG_OR_CAT1_USART_CH, UsartRxInt, Enable);
}
/*****************************************************************************************
-* 函数名称: DebugUartSend
-* 功能描述: 调试串口发送函数
+* 函数名称: DebugOrCat1UartSend
+* 功能描述: 调试和Cat1串口发送函数
* 参 数: sData 发送数据入口指针
sLen 发送数据长度
* 返 回 值: 无
*****************************************************************************************/
-void DebugUartSend(uint8_t *sData, uint16_t sLen)
+void DebugOrCat1UartSend(uint8_t *sData, uint16_t sLen)
{
for(int i = 0; i < sLen; i++) {
- USART_SendData(DBG_USART_CH, sData[i]);
- while(USART_GetStatus(DBG_USART_CH, UsartTxComplete) == Reset);
+ USART_SendData(DBG_OR_CAT1_USART_CH, sData[i]);
+ while(USART_GetStatus(DBG_OR_CAT1_USART_CH, UsartTxComplete) == Reset);
}
}
@@ -450,7 +450,7 @@ void RS485Ch1_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &RS485Ch1UsartRxIrqCallback;
stcIrqRegiCfg.enIntSrc = RS485_CH1_USART_RI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
@@ -460,7 +460,7 @@ void RS485Ch1_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &RS485Ch1UsartErrIrqCallback;
stcIrqRegiCfg.enIntSrc = RS485_CH1_USART_EI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
@@ -470,7 +470,7 @@ void RS485Ch1_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &UsartTxIrqCallback;
stcIrqRegiCfg.enIntSrc = USART_TI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
@@ -479,7 +479,7 @@ void RS485Ch1_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &UsartTxCmpltIrqCallback;
stcIrqRegiCfg.enIntSrc = USART_TCI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
#endif
@@ -600,7 +600,7 @@ void RS485Ch2_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &RS485Ch2UsartRxIrqCallback;
stcIrqRegiCfg.enIntSrc = RS485_CH2_USART_RI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
@@ -610,7 +610,7 @@ void RS485Ch2_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &RS485Ch2UsartErrIrqCallback;
stcIrqRegiCfg.enIntSrc = RS485_CH2_USART_EI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
@@ -620,7 +620,7 @@ void RS485Ch2_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &UsartTxIrqCallback;
stcIrqRegiCfg.enIntSrc = USART_TI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
@@ -629,7 +629,7 @@ void RS485Ch2_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &UsartTxCmpltIrqCallback;
stcIrqRegiCfg.enIntSrc = USART_TCI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
#endif
@@ -662,57 +662,57 @@ void RS485Ch2UartSend(uint8_t *sData, uint16_t sLen)
****************************************************************************************/
/*****************************************************************************************
-* 函数名称: EthOrCat1UartRec
-* 功能描述: cat1和eth串口接收函数
+* 函数名称: EthUartRec
+* 功能描述: eth串口接收函数
* 参 数: 无
* 返 回 值: 返回收到的字符
*****************************************************************************************/
-static uint8_t EthOrCat1UartRec(void)
+static uint8_t EthUartRec(void)
{
- uint16_t u16Data = USART_RecData(ETH_OR_CAT1_USART_CH);
+ uint16_t u16Data = USART_RecData(ETH_USART_CH);
return (uint8_t)u16Data;
}
/*****************************************************************************************
-* 函数名称: RS485Ch1UsartErrIrqCallback
-* 功能描述: cat1和eth串口错误中断回调函数
+* 函数名称: EthUsartErrIrqCallback
+* 功能描述: eth串口错误中断回调函数
* 参 数: 无
* 返 回 值: 无
*****************************************************************************************/
-static void EthOrCat1UsartErrIrqCallback(void)
+static void EthUsartErrIrqCallback(void)
{
- if(ETH_OR_CAT1_USART_CH->SR_f.ORE) {
- ETH_OR_CAT1_USART_CH->CR1_f.CORE = 1;
- USART_RecData(ETH_OR_CAT1_USART_CH);
+ if(ETH_USART_CH->SR_f.ORE) {
+ ETH_USART_CH->CR1_f.CORE = 1;
+ USART_RecData(ETH_USART_CH);
}
- if(ETH_OR_CAT1_USART_CH->SR_f.PE)
- ETH_OR_CAT1_USART_CH->CR1_f.CPE = 1;
+ if(ETH_USART_CH->SR_f.PE)
+ ETH_USART_CH->CR1_f.CPE = 1;
- if(ETH_OR_CAT1_USART_CH->SR_f.FE)
- ETH_OR_CAT1_USART_CH->CR1_f.CFE = 1;
+ if(ETH_USART_CH->SR_f.FE)
+ ETH_USART_CH->CR1_f.CFE = 1;
}
/*****************************************************************************************
-* 函数名称: RS485Ch1UsartRxIrqCallback
-* 功能描述: cat1和eth串口接收中断回调函数
+* 函数名称: EthUsartRxIrqCallback
+* 功能描述: eth串口接收中断回调函数
* 参 数: 无
* 返 回 值: 无
*****************************************************************************************/
-static void EthOrCat1UsartRxIrqCallback(void)
+static void EthUsartRxIrqCallback(void)
{
- uint8_t rData =EthOrCat1UartRec();
- EthOrCat1RxIrqCallback(rData);
+ uint8_t rData =EthUartRec();
+ EthIrqCallbackHandler(rData);
}
/*****************************************************************************************
-* 函数名称: RS485Ch1_Config
-* 功能描述: cat1和eth串口配置函数
+* 函数名称: Eth_Config
+* 功能描述: eth串口配置函数
* 参 数: BaudRate 串口波特率
* 返 回 值: 无
*****************************************************************************************/
-void EthOrCat1_Config(uint32_t BaudRate)
+void Eth_Config(uint32_t BaudRate)
{
stc_usart_uart_init_t stcInitCfg;
stc_irq_regi_conf_t stcIrqRegiCfg;
@@ -722,8 +722,8 @@ void EthOrCat1_Config(uint32_t BaudRate)
MEM_ZERO_STRUCT(stcPortInit);
stcPortInit.enPinOType = Pin_OType_Cmos;
- PORT_Init(ETH_OR_CAT1_USART_RX_PORT, ETH_OR_CAT1_USART_RX_PIN, &stcPortInit);
- PORT_Init(ETH_OR_CAT1_USART_TX_PORT, ETH_OR_CAT1_USART_TX_PIN, &stcPortInit);
+ PORT_Init(ETH_USART_RX_PORT, ETH_USART_RX_PIN, &stcPortInit);
+ PORT_Init(ETH_USART_TX_PORT, ETH_USART_TX_PIN, &stcPortInit);
stcInitCfg.enClkMode = UsartIntClkCkNoOutput;
stcInitCfg.enClkDiv = UsartClkDiv_1;
@@ -735,35 +735,35 @@ void EthOrCat1_Config(uint32_t BaudRate)
stcInitCfg.enDetectMode = UsartStartBitFallEdge;
stcInitCfg.enHwFlow = UsartRtsEnable;
- PWC_Fcg1PeriphClockCmd(ETH_OR_CAT1_FCG1_PERIPH, Enable);
+ PWC_Fcg1PeriphClockCmd(ETH_FCG1_PERIPH, Enable);
- PORT_SetFunc(ETH_OR_CAT1_USART_RX_PORT, ETH_OR_CAT1_USART_RX_PIN, ETH_OR_CAT1_USART_RX_FUNC, Disable);
- PORT_SetFunc(ETH_OR_CAT1_USART_TX_PORT, ETH_OR_CAT1_USART_TX_PIN, ETH_OR_CAT1_USART_TX_FUNC, Disable);
+ PORT_SetFunc(ETH_USART_RX_PORT, ETH_USART_RX_PIN, ETH_USART_RX_FUNC, Disable);
+ PORT_SetFunc(ETH_USART_TX_PORT, ETH_USART_TX_PIN, ETH_USART_TX_FUNC, Disable);
- enRet = USART_UART_Init(ETH_OR_CAT1_USART_CH, &stcInitCfg);
+ enRet = USART_UART_Init(ETH_USART_CH, &stcInitCfg);
if(enRet != Ok) {
Error_Handler();
}
- enRet = USART_SetBaudrate(ETH_OR_CAT1_USART_CH, BaudRate);
+ enRet = USART_SetBaudrate(ETH_USART_CH, BaudRate);
if(enRet != Ok) {
Error_Handler();
}
- stcIrqRegiCfg.enIRQn = ETH_OR_CAT1_UART_IRQn;
- stcIrqRegiCfg.pfnCallback = &EthOrCat1UsartRxIrqCallback;
- stcIrqRegiCfg.enIntSrc = ETH_OR_CAT1_USART_RI_NUM;
+ stcIrqRegiCfg.enIRQn = ETH_UART_IRQn;
+ stcIrqRegiCfg.pfnCallback = &EthUsartRxIrqCallback;
+ stcIrqRegiCfg.enIntSrc = ETH_USART_RI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
/* Set USART RX error IRQ */
- stcIrqRegiCfg.enIRQn = ETH_OR_CAT1_UART_EI_IRQn;
- stcIrqRegiCfg.pfnCallback = &EthOrCat1UsartErrIrqCallback;
- stcIrqRegiCfg.enIntSrc = ETH_OR_CAT1_USART_EI_NUM;
+ stcIrqRegiCfg.enIRQn = ETH_UART_EI_IRQn;
+ stcIrqRegiCfg.pfnCallback = &EthUsartErrIrqCallback;
+ stcIrqRegiCfg.enIntSrc = ETH_USART_EI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
@@ -773,7 +773,7 @@ void EthOrCat1_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &UsartTxIrqCallback;
stcIrqRegiCfg.enIntSrc = USART_TI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
@@ -782,27 +782,27 @@ void EthOrCat1_Config(uint32_t BaudRate)
stcIrqRegiCfg.pfnCallback = &UsartTxCmpltIrqCallback;
stcIrqRegiCfg.enIntSrc = USART_TCI_NUM;
enIrqRegistration(&stcIrqRegiCfg);
- NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+ NVIC_SetPriority(stcIrqRegiCfg.enIRQn, ETH_USART_TCI_NUM);
NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
#endif
- USART_FuncCmd(ETH_OR_CAT1_USART_CH, UsartTx, Enable);
- USART_FuncCmd(ETH_OR_CAT1_USART_CH, UsartRx, Enable);
- USART_FuncCmd(ETH_OR_CAT1_USART_CH, UsartRxInt, Enable);
+ USART_FuncCmd(ETH_USART_CH, UsartTx, Enable);
+ USART_FuncCmd(ETH_USART_CH, UsartRx, Enable);
+ USART_FuncCmd(ETH_USART_CH, UsartRxInt, Enable);
}
/*****************************************************************************************
-* 函数名称: EthOrCat1UartSend
-* 功能描述: cat1和eth串口发送函数
+* 函数名称: EthUartSend
+* 功能描述: eth串口发送函数
* 参 数: sData 发送数据入口指针
sLen 发送数据长度
* 返 回 值: 无
*****************************************************************************************/
-void EthOrCat1UartSend(uint8_t *sData, uint16_t sLen)
+void EthUartSend(uint8_t *sData, uint16_t sLen)
{
for(int i = 0; i < sLen; i++) {
- USART_SendData(ETH_OR_CAT1_USART_CH, sData[i]);
- while(USART_GetStatus(ETH_OR_CAT1_USART_CH, UsartTxComplete) == Reset);
+ USART_SendData(ETH_USART_CH, sData[i]);
+ while(USART_GetStatus(ETH_USART_CH, UsartTxComplete) == Reset);
}
}
@@ -859,25 +859,24 @@ static void GPIO_Config(void)
// PORT_Init(RS485_CH1_VOL_CTRL_PORT, RS485_CH1_VOL_CTRL_PIN, &stcPortInit);
// RS485_CH1_VOL_5V();
-
+
PORT_Init(RS485_CH2_CTRL_PORT, RS485_CH2_CTRL_PIN, &stcPortInit);
RS485_CH2_RX();
PORT_Init(RS485_CH2_POW_PORT, RS485_CH2_POW_PIN, &stcPortInit);
RS485_CH2_POW_OFF();
-
+
// PORT_Init(RS485_CH2_VOL_CTRL_PORT, RS485_CH2_VOL_CTRL_PIN, &stcPortInit);
// RS485_CH1_VOL_5V();
-
- PORT_Init(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN, &stcPortInit);
-// PORT_Init(ETH_OR_CAT1_TX_CTRL_PORT, ETH_OR_CAT1_TX_CTRL_PIN, &stcPortInit);
- ETH_ON();
-
+
PORT_Init(CAT1_PWR_KEY_PORT, CAT1_PWR_KEY_PIN, &stcPortInit);
CAT1_PWR_KEY_SET();
PORT_Init(CAT1_RESET_PORT, CAT1_RESET_PIN, &stcPortInit);
CAT1_RESET_CLR();
+
+// PORT_Init(CAT1_WAKEUP_PORT, CAT1_WAKEUP_PIN, &stcPortInit);
+// CAT1_WAKEUP_SET();
// PORT_Init(CAT1_POW_PORT, CAT1_POW_PIN, &stcPortInit);
// CAT1_POW_OFF();
@@ -911,7 +910,12 @@ static void GPIO_Config(void)
PORT_Init(LORA_POW_PORT, LORA_POW_PIN, &stcPortInit);
LORA_POW_OFF();
-
+
+ //stcPortInit.enPullUp = Enable;
+ PORT_Init(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN, &stcPortInit);
+ DBG_ON();
+
+ stcPortInit.enPullUp = Enable;
stcPortInit.enPinMode = Pin_Mode_In;
PORT_Init(ETH_LINK_PORT, ETH_LINK_PIN, &stcPortInit);
@@ -1194,7 +1198,7 @@ static void Rtc_Config(void)
// stcIrqRegiConf.pfnCallback = &RtcPeriod_IrqCallback;
// enIrqRegistration(&stcIrqRegiConf);
// NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);
-// NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
+// NVIC_SetPriority(stcIrqRegiConf.enIRQn, ETH_USART_TCI_NUM);
// NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);
// enIntWakeupEnable(RtcPeriodWU);
// /* Enable period interrupt */
@@ -1652,7 +1656,7 @@ int dev_boot_write_param(boot_para_t Param)
// PWC_ClkRecover();
// //SystemClockConfig();
// Spi_Config();
-// DbgUart_Config(500000);
+// DbgOrCat1Uart_Config(115200);
// //GPIO_Config();
// //SysTick_Resume();
// SysTick_Init(1000);
@@ -1710,8 +1714,8 @@ void BSP_Init(void)
SystemClockConfig();
Xtal32_ClockConfig();
- DbgUart_Config(500000);
- EthOrCat1_Config(115200);
+ DbgOrCat1Uart_Config(500000);
+ Eth_Config(115200);
// RS485Ch1_Config(9600);
// RS485Ch2_Config(9600);
#if USE_SD_CARD
@@ -1745,12 +1749,12 @@ __weak void LoraTxRxIrqCallback(void)
}
/*****************************************************************************************
-* 函数名称: DbgRxIrqCallback
+* 函数名称: DbgOrCat1RxIrqCallback
* 功能描述: 调试串口接收中断外部重定向回调函数
* 参 数: 无
* 返 回 值: 无
*****************************************************************************************/
-__weak void DbgRxIrqCallback(uint8_t rData)
+__weak void DbgOrCat1RxIrqCallback(uint8_t rData)
{
}
@@ -1778,12 +1782,34 @@ __weak void RS485Ch2RxIrqCallback(uint8_t rData)
}
/*****************************************************************************************
-* 函数名称: EthOrCat1RxIrqCallback
-* 功能描述: Eth和Cat1串口接收中断外部重定向回调函数
+* 函数名称: Cat1IrqCallback
+* 功能描述: Cat1串口接收中断外部重定向回调函数
* 参 数: 无
* 返 回 值: 无
*****************************************************************************************/
-__weak void EthOrCat1RxIrqCallback(uint8_t rData)
+__weak void Cat1IrqCallback(uint8_t rData)
+{
+
+}
+
+/*****************************************************************************************
+* 函数名称: Cat1OverHandler
+* 功能描述: Cat1串口接收超时回调
+* 参 数: 无
+* 返 回 值: 无
+*****************************************************************************************/
+__weak void Cat1OverHandler(void)
+{
+
+}
+
+/*****************************************************************************************
+* 函数名称: EthIrqCallbackHandler
+* 功能描述: Eth串口接收中断外部重定向回调函数
+* 参 数: 无
+* 返 回 值: 无
+*****************************************************************************************/
+__weak void EthIrqCallbackHandler(uint8_t rData)
{
}
diff --git a/Project/GateWay/source/User/Src/main.c b/Project/GateWay/source/User/Src/main.c
index cd7f46b..7dc1a94 100644
--- a/Project/GateWay/source/User/Src/main.c
+++ b/Project/GateWay/source/User/Src/main.c
@@ -2,8 +2,8 @@
#include
#include "main.h"
#include "CatOneTask.h"
+#include "EthTask.h"
#include "LoraTask.h"
-#include "CatOneTask.h"
#include "RS485Task.h"
#include "DebugCmd.h"
#include "spiflash.h"
@@ -34,7 +34,8 @@ static const uint8_t GateWayMac_BL10[6] = {0x81, 0x00, 0x00, 0x06, 0x00, 0x0A};
bool MainDispEn = true;
static rt_thread_t Lora_Thread = RT_NULL;
-static rt_thread_t Cat1Eth_Thread = RT_NULL;
+static rt_thread_t Cat1_Thread = RT_NULL;
+static rt_thread_t Eth_Thread = RT_NULL;
static rt_thread_t RS485Ch1_Thread = RT_NULL;
static rt_thread_t RS485Ch2_Thread = RT_NULL;
static rt_thread_t Debug_Thread = RT_NULL;
@@ -92,35 +93,6 @@ void SDCardTest(void)
}
#endif
-void InfTest(void)
-{
- uint8_t sData[10] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A};
- RS485_CH1_RX();
- RS485_CH1_POW_ON();
- rt_thread_delay(100);
- RS485_CH1_POW_OFF();
-
- RS485_CH2_POW_ON();
- rt_thread_delay(100);
- RS485_CH2_POW_OFF();
-
- POWER_LED_OFF();
- POWER_LED_ON();
- LORA_RX_LED_SET();
- LORA_RX_LED_CLR();
- RS485_CH1_TX();
- RS485_CH2_RX();
- RS485Ch1_Config(500000);
- RS485Ch2_Config(500000);
- RS485Ch1UartSend(sData, 10);
- rt_thread_delay(100);
-
- RS485_CH2_TX();
- RS485_CH1_RX();
- RS485Ch2UartSend(sData, 10);
- rt_thread_delay(100);
-// SDCardTest();
-}
void GateWayInit(void)
{
@@ -186,8 +158,7 @@ void GateWayInit(void)
#if MAC_ADDR_TYPE == 0
memcpy(GateWay.ConfigPara.GwMac, GateWayMac_Test, 6);
-// GateWay.ConfigPara.DebugChannel = DEBUG_CH_RS485_1;
- GateWay.ConfigPara.DebugChannel = DEBUG_CH_DBG;
+ GateWay.ConfigPara.DebugChannel = DEBUG_CH_RS485_1;
#elif MAC_ADDR_TYPE == 1
memcpy(GateWay.ConfigPara.GwMac, GateWayMac_BL1, 6);
GateWay.ConfigPara.DebugChannel = DEBUG_CH_RS485_1;
@@ -318,12 +289,14 @@ void GateWayInit(void)
else
rt_kprintf("History Num: 0\r\n");
if(GateWay.ConfigPara.Comm == CATONE_COMM) {
+ DbgOrCat1Uart_Config(115200);
CAT1_ON();
}
else {
+ DBG_ON();
ETH_ON();
- rt_thread_delay(1000);
- ETHReset();
+ rt_thread_delay(1000);
+ ETHReset();
}
}
@@ -418,9 +391,15 @@ int main(void)
else
return -1;
- Cat1Eth_Thread = rt_thread_create("Cat1Eth", CatOne_Eth_Thread_Entry, &GateWay, 4096, 3, 20);
- if (Cat1Eth_Thread != RT_NULL)
- rt_thread_startup(Cat1Eth_Thread);
+ Cat1_Thread = rt_thread_create("Cat1", CatOne_Thread_Entry, &GateWay, 4096, 3, 20);
+ if (Cat1_Thread != RT_NULL)
+ rt_thread_startup(Cat1_Thread);
+ else
+ return -1;
+
+ Eth_Thread = rt_thread_create("Eth", Eth_Thread_Entry, &GateWay, 4096, 3, 20);
+ if (Eth_Thread != RT_NULL)
+ rt_thread_startup(Eth_Thread);
else
return -1;
@@ -437,9 +416,9 @@ int main(void)
POWER_LED_OFF();
}
}
- EthRxOverhandler();
+ EthOverHandler();
RS485RxOverhandler();
- DebugRxOverhandler();
+ DebugOrCat1RxOverhandler();
if(OneSecondDlyCnt % 200 == 0) {
FeedDog();
LORA_RX_TOGGLE();