feat(uart): 分离ETH与Cat1通讯,支持UART1/Cat1/Debug互斥切换
Breaking Changes: - USART1(PA11/PA12)改为Cat1(115200)/Debug(500000)共享,SGM3157控制 - USART4(PB09/PC13)独家给ETH(115200),不再共享 - 新增EthTask独立状态机,与CatOneTask解耦运行 - 上电默认Comm=CATONE_COMM,dch=RS485_CH1 Details: - feat: 新增EthTask.c/h,ETH状态机(8态)独立运行 - refactor: CatOneTask移除ETH代码,AT发送/接收走USART1 - feat: comm cat1/eth命令增加USART1占用互斥检查 - feat: dch dbg命令增加USART1占用互斥检查 - feat: rt_kprintf根据dch通道自动路由(USART1/RS485) - feat: 新增eth on/off调试打印开关命令 - fix: 两个状态机按Comm模式判断休眠,避免误发AT - fix: bsp.c修复IRQ回调函数名不匹配(BusFault隐患) - fix: PB08(PortB Pin08)PORT_Init触发复位,改用外部上拉+POUTE单bit使能 - fix: DebugCmd命令表DEBUG_CMD_CNT与实际条目数不符(crash风险) - chore: 删除InfTest死函数、重复include、无用宏声明、EthRev_Sem等冗余代码 - chore: 更正中文标点(!→! ,→,)
This commit is contained in:
@@ -135,7 +135,7 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>JL2CM3</Key>
|
||||
<Name>-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)</Name>
|
||||
<Name>-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)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
@@ -250,7 +250,7 @@
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>1</periodic>
|
||||
<aLwin>1</aLwin>
|
||||
<aLwin>0</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
@@ -410,7 +410,7 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>JL2CM3</Key>
|
||||
<Name>-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)</Name>
|
||||
<Name>-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)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
@@ -428,40 +428,7 @@
|
||||
<Name></Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint>
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>1004</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>..\source\User\Src\Public.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>1</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>1006</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>..\source\User\Src\Public.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<Breakpoint/>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
@@ -513,7 +480,7 @@
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>1</periodic>
|
||||
<aLwin>1</aLwin>
|
||||
<aLwin>0</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
@@ -729,6 +696,18 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\source\User\Src\EthTask.c</PathWithFileName>
|
||||
<FilenameWithoutPath>EthTask.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
@@ -739,7 +718,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -751,7 +730,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -763,7 +742,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -775,7 +754,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -787,7 +766,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -799,7 +778,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -811,7 +790,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -823,7 +802,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -835,7 +814,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -847,7 +826,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -859,7 +838,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -871,7 +850,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -883,7 +862,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -895,7 +874,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -907,7 +886,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -919,7 +898,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -931,7 +910,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -951,7 +930,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -971,7 +950,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -983,7 +962,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileNumber>34</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1003,7 +982,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>34</FileNumber>
|
||||
<FileNumber>35</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1015,7 +994,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>35</FileNumber>
|
||||
<FileNumber>36</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1027,7 +1006,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>36</FileNumber>
|
||||
<FileNumber>37</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1039,7 +1018,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>37</FileNumber>
|
||||
<FileNumber>38</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1059,7 +1038,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>38</FileNumber>
|
||||
<FileNumber>39</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1089,7 +1068,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>::RTOS</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>1</RteFlg>
|
||||
|
||||
@@ -493,6 +493,11 @@
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\source\User\Src\utils.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>EthTask.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\source\User\Src\EthTask.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
@@ -1419,6 +1424,11 @@
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\source\User\Src\utils.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>EthTask.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\source\User\Src\EthTask.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
#include <rthw.h>
|
||||
#include <rtthread.h>
|
||||
#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();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "main.h"
|
||||
#include "bsp.h"
|
||||
#include "CatOneTask.h"
|
||||
#include "EthTask.h"
|
||||
#include "RS485Task.h"
|
||||
#include "Public.h"
|
||||
#include <stdlib.h>
|
||||
@@ -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,13 +120,18 @@ void Debug_Thread_Entry(void *parameter)
|
||||
}
|
||||
|
||||
/*****************************************************************************************
|
||||
* 函数名称: RS485Ch2RxIrqCallback
|
||||
* 功能描述: RS485通道1中断处理回调函数
|
||||
* 函数名称: DbgOrCat1RxIrqCallback
|
||||
* 功能描述: 调试和Cat1中断处理回调函数
|
||||
* 参 数: rData 接收到的数据
|
||||
* 返 回 值: 无
|
||||
*****************************************************************************************/
|
||||
void DbgRxIrqCallback(uint8_t rData)
|
||||
void DbgOrCat1RxIrqCallback(uint8_t rData)
|
||||
{
|
||||
if(GateWay->ConfigPara.Comm == CATONE_COMM) {
|
||||
Cat1IrqCallback(rData);
|
||||
return;
|
||||
}
|
||||
|
||||
if(DebugRxTimeOut1mSCnt == 0)
|
||||
DebugRxLen = 0;
|
||||
|
||||
@@ -136,8 +142,13 @@ void DbgRxIrqCallback(uint8_t rData)
|
||||
}
|
||||
|
||||
|
||||
void DebugRxOverhandler(void)
|
||||
void DebugOrCat1RxOverhandler(void)
|
||||
{
|
||||
if(GateWay->ConfigPara.Comm == CATONE_COMM) {
|
||||
Cat1OverHandler();
|
||||
return;
|
||||
}
|
||||
|
||||
if(DebugRxTimeOut1mSCnt > 0)
|
||||
DebugRxTimeOut1mSCnt--;
|
||||
|
||||
@@ -236,7 +247,7 @@ void DebugCmdCat1OnOff(int argc, char *argv[])
|
||||
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调试信息开关
|
||||
@@ -682,9 +714,15 @@ void DebugCmdSetComm(int argc, char *argv[])
|
||||
}
|
||||
|
||||
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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
@@ -110,30 +82,18 @@ typedef struct {
|
||||
|
||||
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
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -4,58 +4,32 @@
|
||||
|
||||
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+CEREG?\r\n", //查询注册状态
|
||||
@@ -63,12 +37,12 @@ const char *CatOneATCmdStr[16] = {
|
||||
"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)
|
||||
@@ -84,50 +58,20 @@ const CatOneATCMD_m CatOneModeSetCmdArray[] = {
|
||||
CAT_ONE_AT_NULL,
|
||||
CAT_ONE_AT,
|
||||
CAT_ONE_ATE0,
|
||||
//CAT_ONE_LBSPARA,
|
||||
CAT_ONE_LCCID,
|
||||
CAT_ONE_IMEI,
|
||||
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)
|
||||
@@ -163,7 +106,7 @@ void CatTimeSync(char *Data)
|
||||
{
|
||||
struct tm sTimet;
|
||||
time_t sTime;
|
||||
char *p;
|
||||
char *p;
|
||||
|
||||
p = strchr(Data, '\"');
|
||||
if(p == NULL)
|
||||
@@ -229,14 +172,10 @@ 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);
|
||||
}
|
||||
@@ -354,8 +293,7 @@ void CatOneAtCmdAnalyze(char *RxBuff)
|
||||
else {
|
||||
return;
|
||||
}
|
||||
//CatOne.Cat1Status = CAT_ONE_CLOSE_TCP;
|
||||
rt_sem_release(CatOneRev_Sem);//接收任务
|
||||
rt_sem_release(CatOneRev_Sem);
|
||||
return;
|
||||
}
|
||||
default:
|
||||
@@ -377,8 +315,8 @@ 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) {
|
||||
@@ -393,14 +331,14 @@ void CatOneAtCmdSend(CatOneATCMD_m Cmd, uint32_t Dly, CatOneStatus_m NextStatus)
|
||||
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];
|
||||
@@ -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;
|
||||
@@ -499,21 +437,21 @@ void CatOneLoopHandler(void)
|
||||
}
|
||||
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;
|
||||
@@ -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;
|
||||
@@ -566,7 +504,6 @@ void CatOneLoopHandler(void)
|
||||
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();
|
||||
@@ -598,156 +536,6 @@ void CatOneLoopHandler(void)
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
bool CatOneEthSendQueue(uint8_t *sData, uint16_t sLen)
|
||||
{
|
||||
if(CatOne.GateWay->SvrRegFlag == false)
|
||||
@@ -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)
|
||||
void Cat1IrqCallback(uint8_t rData)
|
||||
{
|
||||
if(EthRevTimeOutCnt == 0)
|
||||
CatOneEthRxLen = 0;
|
||||
if(Cat1RevTimeOutCnt == 0)
|
||||
CatOneRxLen = 0;
|
||||
|
||||
if(CatOneEthRxLen < CAT_ONE_REV_LEN_MAX) {
|
||||
CatOneEthRxBuff[CatOneEthRxLen++] = rData;
|
||||
if(CatOneRxLen < CAT_ONE_REV_LEN_MAX) {
|
||||
CatOneRxBuff[CatOneRxLen++] = rData;
|
||||
}
|
||||
|
||||
EthRevTimeOutCnt = 3;
|
||||
Cat1RevTimeOutCnt = 3;
|
||||
}
|
||||
|
||||
void EthRxOverhandler(void)
|
||||
void Cat1OverHandler(void)
|
||||
{
|
||||
if(EthRevTimeOutCnt > 0)
|
||||
EthRevTimeOutCnt--;
|
||||
if(Cat1RevTimeOutCnt > 0)
|
||||
Cat1RevTimeOutCnt--;
|
||||
|
||||
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 > 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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -869,16 +869,15 @@ static void GPIO_Config(void)
|
||||
// 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();
|
||||
|
||||
@@ -912,6 +911,11 @@ 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)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
#include <math.h>
|
||||
#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();
|
||||
|
||||
Reference in New Issue
Block a user