5 Commits

Author SHA1 Message Date
YuanHongbin a57b9ddf31 fix(debug): 修复调试命令参数检查问题 2026-06-17 17:47:12 +08:00
YuanHongbin 6962ad9907 feat(debug): 完善EthNet和LTENet调试命令 2026-06-17 12:32:17 +08:00
YuanHongbin cc6352a3de feat(debug): 新增 up 上传网关状态和 reg 重新注册命令 2026-06-15 18:37:44 +08:00
YuanHongbin 765fe784f2 refactor(DebugCmd): 统一结构体成员CUData为CUPara
1.  修正所有RS485通道配置结构体的成员命名错误,将CUData改为CUPara
2.  新增bsp头文件引用,补充ETHStop、ETHReset相关调用
3.  调整通信切换时的服务器注册标志重置与外设复位逻辑
2026-06-15 15:11:40 +08:00
YuanHongbin 7e55f4cb1b 修改打印信息 2026-06-05 11:08:38 +08:00
+389 -62
View File
@@ -1,4 +1,5 @@
#include "main.h" #include "main.h"
#include "bsp.h"
#include "CatOneTask.h" #include "CatOneTask.h"
#include "RS485Task.h" #include "RS485Task.h"
#include "Public.h" #include "Public.h"
@@ -8,7 +9,7 @@
#define DBG_RX_LEN_MAX 128 #define DBG_RX_LEN_MAX 128
//#define DBG_LOG(...) rt_kprintf(__VA_ARGS__) //#define DBG_LOG(...) rt_kprintf(__VA_ARGS__)
#define DEBUG_CMD_CNT 30 #define DEBUG_CMD_CNT 31
#define DEBUG_BUFF_SIZE_MAX 512 #define DEBUG_BUFF_SIZE_MAX 512
#define DEBUG_BUFSIZE 200 #define DEBUG_BUFSIZE 200
@@ -183,10 +184,11 @@ void DebugAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
} }
for(int i = 0; i < DEBUG_CMD_CNT; i++) { for(int i = 0; i < DEBUG_CMD_CNT; i++) {
if(strcmp(argv[0], DebugFun[i].DBGCmd) == 0) if(strcmp(argv[0], DebugFun[i].DBGCmd) == 0) {
DebugFun[i].DBGExec(argc, argv); DebugFun[i].DBGExec(argc, argv);
break; // 添加break避免继续匹配
}
} }
memset(rData, 0x00, rLen);
} }
/***************************************************************************************** /*****************************************************************************************
@@ -301,9 +303,9 @@ void DebugCmdRS485Ctrl(int argc, char *argv[])
if(idx == 1) { if(idx == 1) {
GateWay->ConfigPara.Rs485Ch1.CommUnitEnable = true; GateWay->ConfigPara.Rs485Ch1.CommUnitEnable = true;
GateWay->ConfigPara.Rs485Ch1.QuerySensorFlag = true; GateWay->ConfigPara.Rs485Ch1.QuerySensorFlag = true;
GateWay->ConfigPara.Rs485Ch1.CUData.Para.SensorN = 0; GateWay->ConfigPara.Rs485Ch1.CUPara.Para.SensorN = 0;
memset(GateWay->ConfigPara.Rs485Ch1.CUData.Para.SensorType, 0x00, SENSOR_NUM_MAX * 2); memset(GateWay->ConfigPara.Rs485Ch1.CUPara.Para.SensorType, 0x00, SENSOR_NUM_MAX * 2);
GateWay->ConfigPara.Rs485Ch1.CUData.Para.CommStatus = true; GateWay->ConfigPara.Rs485Ch1.CUPara.Para.CommStatus = true;
RS485Ch1_Config(9600); RS485Ch1_Config(9600);
GateWay->ConfigPara.Rs485Ch1.BaudRate = 9600; GateWay->ConfigPara.Rs485Ch1.BaudRate = 9600;
SComm1Para.SensorCnt = 0; SComm1Para.SensorCnt = 0;
@@ -311,9 +313,9 @@ void DebugCmdRS485Ctrl(int argc, char *argv[])
else if(idx == 2) { else if(idx == 2) {
GateWay->ConfigPara.Rs485Ch2.CommUnitEnable = true; GateWay->ConfigPara.Rs485Ch2.CommUnitEnable = true;
GateWay->ConfigPara.Rs485Ch2.QuerySensorFlag = true; GateWay->ConfigPara.Rs485Ch2.QuerySensorFlag = true;
GateWay->ConfigPara.Rs485Ch2.CUData.Para.SensorN = 0; GateWay->ConfigPara.Rs485Ch2.CUPara.Para.SensorN = 0;
memset(GateWay->ConfigPara.Rs485Ch2.CUData.Para.SensorType, 0x00, SENSOR_NUM_MAX * 2); memset(GateWay->ConfigPara.Rs485Ch2.CUPara.Para.SensorType, 0x00, SENSOR_NUM_MAX * 2);
GateWay->ConfigPara.Rs485Ch2.CUData.Para.CommStatus = true; GateWay->ConfigPara.Rs485Ch2.CUPara.Para.CommStatus = true;
RS485Ch2_Config(9600); RS485Ch2_Config(9600);
GateWay->ConfigPara.Rs485Ch2.BaudRate = 9600; GateWay->ConfigPara.Rs485Ch2.BaudRate = 9600;
SComm2Para.SensorCnt = 0; SComm2Para.SensorCnt = 0;
@@ -323,11 +325,11 @@ void DebugCmdRS485Ctrl(int argc, char *argv[])
else if(strstr(argv[3], "off") != NULL){ else if(strstr(argv[3], "off") != NULL){
if(idx == 1) { if(idx == 1) {
GateWay->ConfigPara.Rs485Ch1.CommUnitEnable = false; GateWay->ConfigPara.Rs485Ch1.CommUnitEnable = false;
GateWay->ConfigPara.Rs485Ch1.CUData.Para.CommStatus = false; GateWay->ConfigPara.Rs485Ch1.CUPara.Para.CommStatus = false;
} }
else if(idx == 2) { else if(idx == 2) {
GateWay->ConfigPara.Rs485Ch2.CommUnitEnable = false; GateWay->ConfigPara.Rs485Ch2.CommUnitEnable = false;
GateWay->ConfigPara.Rs485Ch2.CUData.Para.CommStatus = false; GateWay->ConfigPara.Rs485Ch2.CUPara.Para.CommStatus = false;
} }
DBG_LOG("RS485Ch%d Disable!\r\n", idx); DBG_LOG("RS485Ch%d Disable!\r\n", idx);
} }
@@ -475,10 +477,10 @@ void DebugCmdLsCommUnit(int argc, char *argv[])
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true) { if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true) {
DBG_LOG("DevType: 8001\r\n"); DBG_LOG("DevType: 8001\r\n");
DBG_LOG("DevMac: 01-80-02-00-00-01\r\n"); DBG_LOG("DevMac: 01-80-02-00-00-01\r\n");
DBG_LOG("SensorNum: %d\r\n", GateWay->ConfigPara.Rs485Ch1.CUData.Para.SensorN); DBG_LOG("SensorNum: %d\r\n", GateWay->ConfigPara.Rs485Ch1.CUPara.Para.SensorN);
DBG_LOG("SensorType: "); DBG_LOG("SensorType: ");
for(int i = 0; i < GateWay->ConfigPara.Rs485Ch1.CUData.Para.SensorN; i++) { for(int i = 0; i < GateWay->ConfigPara.Rs485Ch1.CUPara.Para.SensorN; i++) {
DBG_LOG("%04X ", GateWay->ConfigPara.Rs485Ch1.CUData.Para.SensorType[i]); DBG_LOG("%04X ", GateWay->ConfigPara.Rs485Ch1.CUPara.Para.SensorType[i]);
} }
DBG_LOG("\r\n\r\n"); DBG_LOG("\r\n\r\n");
} }
@@ -486,10 +488,10 @@ void DebugCmdLsCommUnit(int argc, char *argv[])
if(GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true) { if(GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true) {
DBG_LOG("DevType: 8002\r\n"); DBG_LOG("DevType: 8002\r\n");
DBG_LOG("DevMac: 01-80-02-00-00-02\r\n"); DBG_LOG("DevMac: 01-80-02-00-00-02\r\n");
DBG_LOG("SensorNum: %d\r\n", GateWay->ConfigPara.Rs485Ch2.CUData.Para.SensorN); DBG_LOG("SensorNum: %d\r\n", GateWay->ConfigPara.Rs485Ch2.CUPara.Para.SensorN);
DBG_LOG("SensorType: "); DBG_LOG("SensorType: ");
for(int i = 0; i < GateWay->ConfigPara.Rs485Ch2.CUData.Para.SensorN; i++) { for(int i = 0; i < GateWay->ConfigPara.Rs485Ch2.CUPara.Para.SensorN; i++) {
DBG_LOG("%04X ", GateWay->ConfigPara.Rs485Ch2.CUData.Para.SensorType[i]); DBG_LOG("%04X ", GateWay->ConfigPara.Rs485Ch2.CUPara.Para.SensorType[i]);
} }
DBG_LOG("\r\n\r\n"); DBG_LOG("\r\n\r\n");
} }
@@ -643,7 +645,7 @@ void DebugCmdLsExclCommUnit(int argc, char *argv[])
for(int i = 0; i < COMMUNIT_NUM_MAX; i++) { for(int i = 0; i < COMMUNIT_NUM_MAX; i++) {
if(GateWay->ConfigPara.ExclCommUnit[i].ExclFlag == true) { if(GateWay->ConfigPara.ExclCommUnit[i].ExclFlag == true) {
CUCnt++; CUCnt++;
DBG_LOG("DevMac: %02X-%02X-%02X-%02X-%02X-%02X\r\n", DBG_LOG("Exclude DevMac: %02X-%02X-%02X-%02X-%02X-%02X\r\n",
GateWay->ConfigPara.ExclCommUnit[i].ExclMac[0], GateWay->ConfigPara.ExclCommUnit[i].ExclMac[0],
GateWay->ConfigPara.ExclCommUnit[i].ExclMac[1], GateWay->ConfigPara.ExclCommUnit[i].ExclMac[1],
GateWay->ConfigPara.ExclCommUnit[i].ExclMac[2], GateWay->ConfigPara.ExclCommUnit[i].ExclMac[2],
@@ -678,7 +680,9 @@ void DebugCmdSetComm(int argc, char *argv[])
} }
if(strcmp(argv[1], "cat1") == 0) { if(strcmp(argv[1], "cat1") == 0) {
GateWay->SvrRegFlag = false;
GateWay->ConfigPara.Comm = CATONE_COMM; GateWay->ConfigPara.Comm = CATONE_COMM;
ETHStop();
CAT1_ON(); CAT1_ON();
CatOneReset(); CatOneReset();
DBG_LOG("Set the communication method to Cat1.\r\n"); DBG_LOG("Set the communication method to Cat1.\r\n");
@@ -692,12 +696,12 @@ void DebugCmdSetComm(int argc, char *argv[])
rt_thread_delay(3000); rt_thread_delay(3000);
CAT1_PWR_KEY_SET(); CAT1_PWR_KEY_SET();
} }
GateWay->SvrRegFlag = false;
GateWay->ConfigPara.Comm = ETH_COMM; GateWay->ConfigPara.Comm = ETH_COMM;
ETH_ON(); ETH_ON();
ETHReset();
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t)); WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
} }
} }
/***************************************************************************************** /*****************************************************************************************
@@ -900,6 +904,76 @@ void DebugCmdRestoreFactory(int argc, char *argv[])
while(1); while(1);
} }
/*****************************************************************************************
* 函数名称: DebugCmdUpload
* 功能描述: 上传当前网关状态
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdUpload(int argc, char *argv[])
{
DBG_LOG("\r\n");
if(argc > 1 && strcmp(argv[1], "?") == 0) {
DBG_LOG("Debug Cmd: up\r\n");
DBG_LOG(" brief --> Upload current gateway status to server.\r\n\r\n");
return;
}
if(GateWay->SvrRegFlag == false) {
DBG_LOG("Server not registered, please register first.\r\n");
return;
}
uint8_t MegData[6];
uint8_t len = sizeof(GateWayAlarmType_t);
MegData[0] = len & 0x00ff;
MegData[1] = (len >> 8) & 0x00ff;
MegData[2] = NET_COMM_CMD_ALARM;
MegData[3] = 0x00;
MegData[4] = GateWay->ConfigPara.OutageFlag ? 1 : 0;
MegData[5] = GateWay->Battery;
if(CatOneEthSendQueue(MegData, 6) == true) {
DBG_LOG("Gateway status uploaded.\r\n");
}
else {
DBG_LOG("Gateway status upload failed.\r\n");
}
}
/*****************************************************************************************
* 函数名称: DebugCmdRegister
* 功能描述: 重新向上位机发起注册
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdRegister(int argc, char *argv[])
{
DBG_LOG("\r\n");
if(argc > 1 && strcmp(argv[1], "?") == 0) {
DBG_LOG("Debug Cmd: reg\r\n");
DBG_LOG(" brief --> Re-register to the server.\r\n\r\n");
return;
}
GateWay->SvrRegFlag = false;
if(GateWay->ConfigPara.Comm == CATONE_COMM) {
CatOneTriggerRegister();
DBG_LOG("Trigger Cat1 re-registration immediately.\r\n");
}
else if(GateWay->ConfigPara.Comm == ETH_COMM) {
ETHTriggerRegister();
DBG_LOG("Trigger ETH re-registration immediately.\r\n");
}
else {
DBG_LOG("Unknown communication type.\r\n");
}
}
/***************************************************************************************** /*****************************************************************************************
* 函数名称: DebugCmdRestoreFactory * 函数名称: DebugCmdRestoreFactory
* 功能描述: 恢复出厂设置 * 功能描述: 恢复出厂设置
@@ -1051,15 +1125,15 @@ void DebugCmdQuerySensor(int argc, char *argv[])
if(GateWay->ConfigPara.Rs485Ch1.Enable == true && GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true) { if(GateWay->ConfigPara.Rs485Ch1.Enable == true && GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true) {
DBG_LOG("Query Rs485Ch1...\r\n"); DBG_LOG("Query Rs485Ch1...\r\n");
GateWay->ConfigPara.Rs485Ch1.QuerySensorFlag = true; GateWay->ConfigPara.Rs485Ch1.QuerySensorFlag = true;
GateWay->ConfigPara.Rs485Ch1.CUData.Para.SensorN = 0; GateWay->ConfigPara.Rs485Ch1.CUPara.Para.SensorN = 0;
memset(GateWay->ConfigPara.Rs485Ch1.CUData.Para.SensorType, 0x00, sizeof(GateWay->ConfigPara.Rs485Ch1.CUData.Para.SensorType)); memset(GateWay->ConfigPara.Rs485Ch1.CUPara.Para.SensorType, 0x00, sizeof(GateWay->ConfigPara.Rs485Ch1.CUPara.Para.SensorType));
SComm1Para.SensorCnt = 0; SComm1Para.SensorCnt = 0;
} }
if(GateWay->ConfigPara.Rs485Ch2.Enable == true && GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true) { if(GateWay->ConfigPara.Rs485Ch2.Enable == true && GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true) {
DBG_LOG("Query Rs485Ch2...\r\n"); DBG_LOG("Query Rs485Ch2...\r\n");
GateWay->ConfigPara.Rs485Ch2.QuerySensorFlag = true; GateWay->ConfigPara.Rs485Ch2.QuerySensorFlag = true;
GateWay->ConfigPara.Rs485Ch2.CUData.Para.SensorN = 0; GateWay->ConfigPara.Rs485Ch2.CUPara.Para.SensorN = 0;
memset(GateWay->ConfigPara.Rs485Ch2.CUData.Para.SensorType, 0x00, sizeof(GateWay->ConfigPara.Rs485Ch2.CUData.Para.SensorType)); memset(GateWay->ConfigPara.Rs485Ch2.CUPara.Para.SensorType, 0x00, sizeof(GateWay->ConfigPara.Rs485Ch2.CUPara.Para.SensorType));
SComm2Para.SensorCnt = 0; SComm2Para.SensorCnt = 0;
} }
} }
@@ -1122,54 +1196,54 @@ void DebugCmdSelDebugChannel(int argc, char *argv[])
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: DebugCmdSetSvr * 函数名称: DebugCmdSetLTENet
* 功能描述: 设置服务器地址端口 * 功能描述: 设置Cat1/4G服务器地址端口
* 参 数: argc, 输入参数数量 * 参 数: argc, 输入参数数量
argv, 输入参数 argv, 输入参数
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void DebugCmdSetSvr(int argc, char *argv[]) static void DebugCmdSetLTENet(int argc, char *argv[])
{ {
DBG_LOG("\r\n"); DBG_LOG("\r\n");
int IP[4]; int IP[4];
int port; int port;
if(argc < 2) if(argc < 2)
return; return;
if(strcmp(argv[1], "?") == 0) { if(strcmp(argv[1], "?") == 0) {
DBG_LOG("Debug Cmd: svr arg1 arg2 arg3\r\n"); DBG_LOG("Debug Cmd: ltenet arg1 arg2 arg3\r\n");
DBG_LOG(" brief --> Set the server IP address and port for 4G communication.\r\n"); DBG_LOG(" brief --> Set the server IP address and port for Cat1/4G communication.\r\n");
DBG_LOG(" arg1 --> password\r\n"); DBG_LOG(" arg1 --> password\r\n");
DBG_LOG(" arg2 --> (xx.xx.xx.xx) ip\r\n"); DBG_LOG(" arg2 --> (xx.xx.xx.xx) server ip\r\n");
DBG_LOG(" arg3 --> port\r\n\r\n"); DBG_LOG(" arg3 --> server port\r\n\r\n");
return; return;
} }
if(strcmp(argv[1], "gxjt") != 0) { if(strcmp(argv[1], "gxjt") != 0) {
DBG_LOG("Password Error\r\n"); DBG_LOG("Password Error\r\n");
return; return;
} }
char *IpStr = argv[2]; char *IpStr = argv[2];
int ret = sscanf(IpStr, "%d.%d.%d.%d", &IP[0], &IP[1], &IP[2], &IP[3]); int ret = sscanf(IpStr, "%d.%d.%d.%d", &IP[0], &IP[1], &IP[2], &IP[3]);
if(ret != 4) if(ret != 4)
return; return;
if(IP[0] > 0xff || IP[1] > 0xff || IP[2] > 0xff || IP[3] > 0xff) if(IP[0] > 0xff || IP[1] > 0xff || IP[2] > 0xff || IP[3] > 0xff)
return; return;
port = atoi(argv[3]); port = atoi(argv[3]);
if(port > 0xffff) if(port > 0xffff)
return; return;
GateWay->ConfigPara.SvrAddr[0] = IP[0]; GateWay->ConfigPara.LTENet.DestAddr[0] = IP[0];
GateWay->ConfigPara.SvrAddr[1] = IP[1]; GateWay->ConfigPara.LTENet.DestAddr[1] = IP[1];
GateWay->ConfigPara.SvrAddr[2] = IP[2]; GateWay->ConfigPara.LTENet.DestAddr[2] = IP[2];
GateWay->ConfigPara.SvrAddr[3] = IP[3]; GateWay->ConfigPara.LTENet.DestAddr[3] = IP[3];
GateWay->ConfigPara.SvrPort = port; GateWay->ConfigPara.LTENet.DestPort = port;
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t)); WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
DBG_LOG("Set server ip and port completed.\r\n"); DBG_LOG("Set LTENet server ip and port completed.\r\n");
} }
/***************************************************************************************** /*****************************************************************************************
@@ -1214,6 +1288,220 @@ static void DebugCmdSetMac(int argc, char *argv[])
DBG_LOG("Set gateway mac Address completed.\r\n"); DBG_LOG("Set gateway mac Address completed.\r\n");
} }
/*****************************************************************************************
* 函数名称: DebugCmdEthNet
* 功能描述: EthNet以太网模块参数配置
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdEthNet(int argc, char *argv[])
{
DBG_LOG("\r\n");
int IP[4];
if(argc < 2)
return;
if(strcmp(argv[1], "?") == 0) {
DBG_LOG("Debug Cmd: eth arg1 arg2\r\n");
DBG_LOG(" brief --> Configure EthNet Ethernet module parameters.\r\n");
DBG_LOG(" arg1 --> subcommand\r\n");
DBG_LOG(" arg2 --> parameter value\r\n\r\n");
DBG_LOG(" Subcommands:\r\n");
DBG_LOG(" mode dhcp/static - Set IP mode (DHCP or Static)\r\n");
DBG_LOG(" ip x.x.x.x - Set local IP address\r\n");
DBG_LOG(" port xxxx - Set local port\r\n");
DBG_LOG(" wmode tcp/udp - Set work mode (TCP client/UDP)\r\n");
DBG_LOG(" mask x.x.x.x - Set subnet mask\r\n");
DBG_LOG(" gw x.x.x.x - Set gateway\r\n");
DBG_LOG(" dip x.x.x.x - Set destination IP\r\n");
DBG_LOG(" dport xxxx - Set destination port\r\n");
DBG_LOG(" save - Save parameters to Flash\r\n");
DBG_LOG(" apply - Apply and restart ETH module\r\n\r\n");
return;
}
if(strcmp(argv[1], "save") == 0) {
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
DBG_LOG("EthNet parameters saved to Flash.\r\n");
return;
}
if(strcmp(argv[1], "apply") == 0) {
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
/* 判断当前通讯状态,ETH和CAT1是互斥的 */
if(GateWay->ConfigPara.Comm == CATONE_COMM) {
DBG_LOG("EthCmd Error: Currently using CAT1 communication.\r\n");
DBG_LOG("Please switch to ETH mode first using 'comm eth' command.\r\n");
return;
}
GateWay->SvrRegFlag = false;
ETHReset();
DBG_LOG("EthNet parameters saved and ETH module restarting...\r\n");
return;
}
if(argc < 3) {
DBG_LOG("EthCmd: Missing parameter value.\r\n");
return;
}
if(strcmp(argv[1], "mode") == 0) {
if(strcmp(argv[2], "dhcp") == 0) {
GateWay->ConfigPara.EthNet.IpMode = ETH_IP_DHCP;
DBG_LOG("IpMode set to DHCP.\r\n");
}
else if(strcmp(argv[2], "static") == 0) {
GateWay->ConfigPara.EthNet.IpMode = ETH_IP_STATIC;
DBG_LOG("IpMode set to STATIC.\r\n");
}
else {
DBG_LOG("EthCmd: Invalid mode, use dhcp or static.\r\n");
}
return;
}
if(strcmp(argv[1], "ip") == 0) {
if(argc < 3) {
DBG_LOG("EthCmd: Missing IP address\r\n");
return;
}
int ret = sscanf(argv[2], "%d.%d.%d.%d", &IP[0], &IP[1], &IP[2], &IP[3]);
if(ret != 4) {
DBG_LOG("EthCmd: Invalid IP format, use x.x.x.x\r\n");
return;
}
if(IP[0] > 255 || IP[1] > 255 || IP[2] > 255 || IP[3] > 255) {
DBG_LOG("EthCmd: IP address out of range.\r\n");
return;
}
GateWay->ConfigPara.EthNet.IpAddr[0] = IP[0];
GateWay->ConfigPara.EthNet.IpAddr[1] = IP[1];
GateWay->ConfigPara.EthNet.IpAddr[2] = IP[2];
GateWay->ConfigPara.EthNet.IpAddr[3] = IP[3];
DBG_LOG("Local IP set to %d.%d.%d.%d\r\n", IP[0], IP[1], IP[2], IP[3]);
return;
}
if(strcmp(argv[1], "port") == 0) {
if(argc < 3) {
DBG_LOG("EthCmd: Missing port number\r\n");
return;
}
int port = atoi(argv[2]);
if(port <= 0 || port > 65535) {
DBG_LOG("EthCmd: Port out of range (1-65535).\r\n");
return;
}
GateWay->ConfigPara.EthNet.IpPort = port;
DBG_LOG("Local Port set to %d\r\n", port);
return;
}
if(strcmp(argv[1], "wmode") == 0) {
if(argc < 3) {
DBG_LOG("EthCmd: Missing work mode (tcp/udp)\r\n");
return;
}
if(strcmp(argv[2], "tcp") == 0) {
GateWay->ConfigPara.EthNet.WorkMode = ETH_MODE_TCP_CLIENT;
DBG_LOG("WorkMode set to TCP_CLIENT.\r\n");
}
else if(strcmp(argv[2], "udp") == 0) {
GateWay->ConfigPara.EthNet.WorkMode = ETH_MODE_UDP;
DBG_LOG("WorkMode set to UDP.\r\n");
}
else {
DBG_LOG("EthCmd: Invalid work mode, use tcp or udp.\r\n");
}
return;
}
if(strcmp(argv[1], "mask") == 0) {
if(argc < 3) {
DBG_LOG("EthCmd: Missing subnet mask\r\n");
return;
}
int ret = sscanf(argv[2], "%d.%d.%d.%d", &IP[0], &IP[1], &IP[2], &IP[3]);
if(ret != 4) {
DBG_LOG("EthCmd: Invalid mask format, use x.x.x.x\r\n");
return;
}
if(IP[0] > 255 || IP[1] > 255 || IP[2] > 255 || IP[3] > 255) {
DBG_LOG("EthCmd: Subnet mask out of range.\r\n");
return;
}
GateWay->ConfigPara.EthNet.SubnetMask[0] = IP[0];
GateWay->ConfigPara.EthNet.SubnetMask[1] = IP[1];
GateWay->ConfigPara.EthNet.SubnetMask[2] = IP[2];
GateWay->ConfigPara.EthNet.SubnetMask[3] = IP[3];
DBG_LOG("SubnetMask set to %d.%d.%d.%d\r\n", IP[0], IP[1], IP[2], IP[3]);
return;
}
if(strcmp(argv[1], "gw") == 0) {
if(argc < 3) {
DBG_LOG("EthCmd: Missing gateway address\r\n");
return;
}
int ret = sscanf(argv[2], "%d.%d.%d.%d", &IP[0], &IP[1], &IP[2], &IP[3]);
if(ret != 4) {
DBG_LOG("EthCmd: Invalid gateway format, use x.x.x.x\r\n");
return;
}
if(IP[0] > 255 || IP[1] > 255 || IP[2] > 255 || IP[3] > 255) {
DBG_LOG("EthCmd: Gateway out of range.\r\n");
return;
}
GateWay->ConfigPara.EthNet.Gateway[0] = IP[0];
GateWay->ConfigPara.EthNet.Gateway[1] = IP[1];
GateWay->ConfigPara.EthNet.Gateway[2] = IP[2];
GateWay->ConfigPara.EthNet.Gateway[3] = IP[3];
DBG_LOG("Gateway set to %d.%d.%d.%d\r\n", IP[0], IP[1], IP[2], IP[3]);
return;
}
if(strcmp(argv[1], "dip") == 0) {
if(argc < 3) {
DBG_LOG("EthCmd: Missing destination IP address\r\n");
return;
}
int ret = sscanf(argv[2], "%d.%d.%d.%d", &IP[0], &IP[1], &IP[2], &IP[3]);
if(ret != 4) {
DBG_LOG("EthCmd: Invalid destination IP format, use x.x.x.x\r\n");
return;
}
if(IP[0] > 255 || IP[1] > 255 || IP[2] > 255 || IP[3] > 255) {
DBG_LOG("EthCmd: Destination IP out of range.\r\n");
return;
}
GateWay->ConfigPara.EthNet.DestIp[0] = IP[0];
GateWay->ConfigPara.EthNet.DestIp[1] = IP[1];
GateWay->ConfigPara.EthNet.DestIp[2] = IP[2];
GateWay->ConfigPara.EthNet.DestIp[3] = IP[3];
DBG_LOG("DestIP set to %d.%d.%d.%d\r\n", IP[0], IP[1], IP[2], IP[3]);
return;
}
if(strcmp(argv[1], "dport") == 0) {
if(argc < 3) {
DBG_LOG("EthCmd: Missing destination port\r\n");
return;
}
int port = atoi(argv[2]);
if(port <= 0 || port > 65535) {
DBG_LOG("EthCmd: DestPort out of range (1-65535).\r\n");
return;
}
GateWay->ConfigPara.EthNet.DestPort = port;
DBG_LOG("DestPort set to %d\r\n", port);
return;
}
DBG_LOG("EthCmd: Unknown subcommand '%s'\r\n", argv[1]);
}
/***************************************************************************************** /*****************************************************************************************
* 函数名称: DebugCmdGetPara * 函数名称: DebugCmdGetPara
@@ -1234,7 +1522,7 @@ static void DebugCmdGetPara(int argc, char *argv[])
} }
DBG_LOG("\r\n**********************************************************\r\n"); DBG_LOG("\r\n**********************************************************\r\n");
DBG_LOG("SoftWare V:%d.%d, HardWare V:%d.%d\r\n", SOFTWARE_VERSION / 10, SOFTWARE_VERSION % 10, HARDWARE_VERSION / 10, HARDWARE_VERSION % 10); DBG_LOG("SoftWare V:%d.%d, HardWare V:%d.%d\r\n", SOFTWARE_VERSION / 10, SOFTWARE_VERSION % 10, HARDWARE_VERSION / 10, HARDWARE_VERSION % 10);
DBG_LOG("GateWay MAC: %02X-%02X-%02X-%02X-%02X-%02X\r\n", DBG_LOG("GateWay MAC: %02X-%02X-%02X-%02X-%02X-%02X\r\n",
GateWay->ConfigPara.GwMac[0], GateWay->ConfigPara.GwMac[1], GateWay->ConfigPara.GwMac[2], GateWay->ConfigPara.GwMac[3], GateWay->ConfigPara.GwMac[4], GateWay->ConfigPara.GwMac[5]); GateWay->ConfigPara.GwMac[0], GateWay->ConfigPara.GwMac[1], GateWay->ConfigPara.GwMac[2], GateWay->ConfigPara.GwMac[3], GateWay->ConfigPara.GwMac[4], GateWay->ConfigPara.GwMac[5]);
DBG_LOG("Battery: %d%\r\n", GateWay->Battery); DBG_LOG("Battery: %d%\r\n", GateWay->Battery);
DBG_LOG("CommInf: %s\r\n", (GateWay->ConfigPara.Comm == CATONE_COMM) ? "Cat1" : "Eth"); DBG_LOG("CommInf: %s\r\n", (GateWay->ConfigPara.Comm == CATONE_COMM) ? "Cat1" : "Eth");
@@ -1242,27 +1530,51 @@ static void DebugCmdGetPara(int argc, char *argv[])
char Imei[20], Sim[32]; char Imei[20], Sim[32];
CatReadImeiOrSim(Imei, Sim); CatReadImeiOrSim(Imei, Sim);
DBG_LOG("Cat1 IMEI: %s\r\n", Imei); DBG_LOG("Cat1 IMEI: %s\r\n", Imei);
DBG_LOG("Cat1 SIM: %s\r\n", Sim); DBG_LOG("Cat1 SIM: %s\r\n", Sim);
} }
DBG_LOG("CommUnitReadInterval: %d\r\n", GateWay->ConfigPara.CommUnitReadInterval); DBG_LOG("CommUnitReadInterval: %d\r\n", GateWay->ConfigPara.CommUnitReadInterval);
DBG_LOG("Svr MAC: %02X-%02X-%02X-%02X-%02X-%02X\r\n", DBG_LOG("Svr MAC: %02X-%02X-%02X-%02X-%02X-%02X\r\n",
GateWay->SvrMac[0], GateWay->SvrMac[1], GateWay->SvrMac[2], GateWay->SvrMac[3], GateWay->SvrMac[4], GateWay->SvrMac[5]); GateWay->SvrMac[0], GateWay->SvrMac[1], GateWay->SvrMac[2], GateWay->SvrMac[3], GateWay->SvrMac[4], GateWay->SvrMac[5]);
DBG_LOG("Svr IP: %d.%d.%d.%d\r\n",
GateWay->ConfigPara.SvrAddr[0], GateWay->ConfigPara.SvrAddr[1], GateWay->ConfigPara.SvrAddr[2], GateWay->ConfigPara.SvrAddr[3]);
DBG_LOG("Svr Port: %d\r\n", GateWay->ConfigPara.SvrPort);
DBG_LOG("Register Status: %d\r\n", GateWay->SvrRegFlag); DBG_LOG("Register Status: %d\r\n", GateWay->SvrRegFlag);
/* LTENet (Cat1/4G) Parameters */
DBG_LOG("=== LTENet (Cat1/4G) Parameters ===\r\n");
DBG_LOG("DestAddr: %d.%d.%d.%d\r\n",
GateWay->ConfigPara.LTENet.DestAddr[0], GateWay->ConfigPara.LTENet.DestAddr[1], GateWay->ConfigPara.LTENet.DestAddr[2], GateWay->ConfigPara.LTENet.DestAddr[3]);
DBG_LOG("DestPort: %d\r\n", GateWay->ConfigPara.LTENet.DestPort);
DBG_LOG("LocalAddr: %d.%d.%d.%d (Reserved)\r\n",
GateWay->ConfigPara.LTENet.LocalAddr[0], GateWay->ConfigPara.LTENet.LocalAddr[1], GateWay->ConfigPara.LTENet.LocalAddr[2], GateWay->ConfigPara.LTENet.LocalAddr[3]);
DBG_LOG("LocalPort: %d (Reserved)\r\n", GateWay->ConfigPara.LTENet.LocalPort);
/* EthNet (Ethernet) Parameters */
DBG_LOG("=== EthNet (Ethernet) Parameters ===\r\n");
DBG_LOG("IpMode: %s\r\n", (GateWay->ConfigPara.EthNet.IpMode == ETH_IP_DHCP) ? "DHCP" : "STATIC");
DBG_LOG("LocalIP: %d.%d.%d.%d\r\n",
GateWay->ConfigPara.EthNet.IpAddr[0], GateWay->ConfigPara.EthNet.IpAddr[1], GateWay->ConfigPara.EthNet.IpAddr[2], GateWay->ConfigPara.EthNet.IpAddr[3]);
DBG_LOG("LocalPort: %d\r\n", GateWay->ConfigPara.EthNet.IpPort);
DBG_LOG("WorkMode: %s\r\n",
(GateWay->ConfigPara.EthNet.WorkMode == ETH_MODE_TCP_CLIENT) ? "TCP_CLIENT" :
(GateWay->ConfigPara.EthNet.WorkMode == ETH_MODE_TCP_SERVER) ? "TCP_SERVER" : "UDP");
DBG_LOG("SubnetMask: %d.%d.%d.%d\r\n",
GateWay->ConfigPara.EthNet.SubnetMask[0], GateWay->ConfigPara.EthNet.SubnetMask[1], GateWay->ConfigPara.EthNet.SubnetMask[2], GateWay->ConfigPara.EthNet.SubnetMask[3]);
DBG_LOG("Gateway: %d.%d.%d.%d\r\n",
GateWay->ConfigPara.EthNet.Gateway[0], GateWay->ConfigPara.EthNet.Gateway[1], GateWay->ConfigPara.EthNet.Gateway[2], GateWay->ConfigPara.EthNet.Gateway[3]);
DBG_LOG("DestIP: %d.%d.%d.%d\r\n",
GateWay->ConfigPara.EthNet.DestIp[0], GateWay->ConfigPara.EthNet.DestIp[1], GateWay->ConfigPara.EthNet.DestIp[2], GateWay->ConfigPara.EthNet.DestIp[3]);
DBG_LOG("DestPort: %d\r\n", GateWay->ConfigPara.EthNet.DestPort);
DBG_LOG("RS485Ch1 Mac: %02X-%02X-%02X-%02X-%02X-%02X\r\n", DBG_LOG("RS485Ch1 Mac: %02X-%02X-%02X-%02X-%02X-%02X\r\n",
GateWay->ConfigPara.Rs485Ch1.CUData.Para.Mac[0][0],GateWay->ConfigPara.Rs485Ch1.CUData.Para.Mac[0][1], GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0][0],GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0][1],
GateWay->ConfigPara.Rs485Ch1.CUData.Para.Mac[0][2],GateWay->ConfigPara.Rs485Ch1.CUData.Para.Mac[0][3], GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0][2],GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0][3],
GateWay->ConfigPara.Rs485Ch1.CUData.Para.Mac[0][4],GateWay->ConfigPara.Rs485Ch1.CUData.Para.Mac[0][5]); GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0][4],GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0][5]);
DBG_LOG("RS485Ch1: %s, ", (GateWay->ConfigPara.Rs485Ch1.Enable == true) ? "Enable" : "Disable"); DBG_LOG("RS485Ch1: %s, ", (GateWay->ConfigPara.Rs485Ch1.Enable == true) ? "Enable" : "Disable");
DBG_LOG("InCommUnit %s, ", (GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true) ? "Enable" : "Disable"); DBG_LOG("InCommUnit %s, ", (GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true) ? "Enable" : "Disable");
DBG_LOG("Vout %s, ", (GateWay->ConfigPara.Rs485Ch1.Power == true) ? "Enable" : "Disable"); DBG_LOG("Vout %s, ", (GateWay->ConfigPara.Rs485Ch1.Power == true) ? "Enable" : "Disable");
DBG_LOG("Baudrate %d\r\n", GateWay->ConfigPara.Rs485Ch1.BaudRate); DBG_LOG("Baudrate %d\r\n", GateWay->ConfigPara.Rs485Ch1.BaudRate);
DBG_LOG("RS485Ch2 Mac: %02X-%02X-%02X-%02X-%02X-%02X\r\n", DBG_LOG("RS485Ch2 Mac: %02X-%02X-%02X-%02X-%02X-%02X\r\n",
GateWay->ConfigPara.Rs485Ch2.CUData.Para.Mac[0][0],GateWay->ConfigPara.Rs485Ch2.CUData.Para.Mac[0][1], GateWay->ConfigPara.Rs485Ch2.CUPara.Para.Mac[0][0],GateWay->ConfigPara.Rs485Ch2.CUPara.Para.Mac[0][1],
GateWay->ConfigPara.Rs485Ch2.CUData.Para.Mac[0][2],GateWay->ConfigPara.Rs485Ch2.CUData.Para.Mac[0][3], GateWay->ConfigPara.Rs485Ch2.CUPara.Para.Mac[0][2],GateWay->ConfigPara.Rs485Ch2.CUPara.Para.Mac[0][3],
GateWay->ConfigPara.Rs485Ch2.CUData.Para.Mac[0][4],GateWay->ConfigPara.Rs485Ch2.CUData.Para.Mac[0][5]); GateWay->ConfigPara.Rs485Ch2.CUPara.Para.Mac[0][4],GateWay->ConfigPara.Rs485Ch2.CUPara.Para.Mac[0][5]);
DBG_LOG("RS485Ch2: %s, ", (GateWay->ConfigPara.Rs485Ch2.Enable == true) ? "Enable" : "Disable"); DBG_LOG("RS485Ch2: %s, ", (GateWay->ConfigPara.Rs485Ch2.Enable == true) ? "Enable" : "Disable");
DBG_LOG("InCommUnit %s, ", (GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true) ? "Enable" : "Disable"); DBG_LOG("InCommUnit %s, ", (GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true) ? "Enable" : "Disable");
DBG_LOG("Vout %s, ", (GateWay->ConfigPara.Rs485Ch2.Power == true) ? "Enable" : "Disable"); DBG_LOG("Vout %s, ", (GateWay->ConfigPara.Rs485Ch2.Power == true) ? "Enable" : "Disable");
@@ -1359,7 +1671,7 @@ static void DebugCmdCali(int argc, char *argv[])
return; return;
} }
if(memcmp(mac, GateWay->ConfigPara.Rs485Ch1.CUData.Para.Mac[0], 6) == 0) { if(memcmp(mac, GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0], 6) == 0) {
if(!GateWay->ConfigPara.Rs485Ch1.Enable || !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable) { if(!GateWay->ConfigPara.Rs485Ch1.Enable || !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable) {
DBG_LOG("Internal communication unit 1 is turned off!\r\n"); DBG_LOG("Internal communication unit 1 is turned off!\r\n");
return; return;
@@ -1369,7 +1681,7 @@ static void DebugCmdCali(int argc, char *argv[])
return; return;
} }
if(memcmp(mac, GateWay->ConfigPara.Rs485Ch2.CUData.Para.Mac[0], 6) == 0) { if(memcmp(mac, GateWay->ConfigPara.Rs485Ch2.CUPara.Para.Mac[0], 6) == 0) {
if(!GateWay->ConfigPara.Rs485Ch2.Enable || !GateWay->ConfigPara.Rs485Ch2.CommUnitEnable) { if(!GateWay->ConfigPara.Rs485Ch2.Enable || !GateWay->ConfigPara.Rs485Ch2.CommUnitEnable) {
DBG_LOG("Internal communication unit 2 is turned off!\r\n"); DBG_LOG("Internal communication unit 2 is turned off!\r\n");
return; return;
@@ -1458,7 +1770,7 @@ static void DebugLaserConfig(int argc, char *argv[])
if(strcmp(argv[2], "on") == 0 || strcmp(argv[2], "off") == 0) if(strcmp(argv[2], "on") == 0 || strcmp(argv[2], "off") == 0)
{ {
if(memcmp(mac, GateWay->ConfigPara.Rs485Ch1.CUData.Para.Mac[0], 6) == 0) { if(memcmp(mac, GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0], 6) == 0) {
if(!GateWay->ConfigPara.Rs485Ch1.Enable || !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable) { if(!GateWay->ConfigPara.Rs485Ch1.Enable || !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable) {
DBG_LOG("Internal communication unit 1 is turned off!\r\n"); DBG_LOG("Internal communication unit 1 is turned off!\r\n");
return; return;
@@ -1468,7 +1780,7 @@ static void DebugLaserConfig(int argc, char *argv[])
return; return;
} }
if(memcmp(mac, GateWay->ConfigPara.Rs485Ch2.CUData.Para.Mac[0], 6) == 0) { if(memcmp(mac, GateWay->ConfigPara.Rs485Ch2.CUPara.Para.Mac[0], 6) == 0) {
if(!GateWay->ConfigPara.Rs485Ch2.Enable || !GateWay->ConfigPara.Rs485Ch2.CommUnitEnable) { if(!GateWay->ConfigPara.Rs485Ch2.Enable || !GateWay->ConfigPara.Rs485Ch2.CommUnitEnable) {
DBG_LOG("Internal communication unit 2 is turned off!\r\n"); DBG_LOG("Internal communication unit 2 is turned off!\r\n");
return; return;
@@ -1817,8 +2129,8 @@ void DebugCmdHelp(int argc, char *argv[])
memcpy(Data, "dch ?\r\n", len); memcpy(Data, "dch ?\r\n", len);
DebugAnalyze(GateWay, Data, len); DebugAnalyze(GateWay, Data, len);
len = strlen("svr ?\r\n"); len = strlen("ltenet ?\r\n");
memcpy(Data, "svr ?\r\n", len); memcpy(Data, "ltenet ?\r\n", len);
DebugAnalyze(GateWay, Data, len); DebugAnalyze(GateWay, Data, len);
len = strlen("mac ?\r\n"); len = strlen("mac ?\r\n");
@@ -1848,6 +2160,18 @@ void DebugCmdHelp(int argc, char *argv[])
len = strlen("reboot ?\r\n"); len = strlen("reboot ?\r\n");
memcpy(Data, "reboot ?\r\n", len); memcpy(Data, "reboot ?\r\n", len);
DebugAnalyze(GateWay, Data, len); DebugAnalyze(GateWay, Data, len);
len = strlen("up ?\r\n");
memcpy(Data, "up ?\r\n", len);
DebugAnalyze(GateWay, Data, len);
len = strlen("reg ?\r\n");
memcpy(Data, "reg ?\r\n", len);
DebugAnalyze(GateWay, Data, len);
len = strlen("eth ?\r\n");
memcpy(Data, "eth ?\r\n", len);
DebugAnalyze(GateWay, Data, len);
} }
const DBGFunType DebugFun[DEBUG_CMD_CNT] = { const DBGFunType DebugFun[DEBUG_CMD_CNT] = {
@@ -1869,7 +2193,7 @@ const DBGFunType DebugFun[DEBUG_CMD_CNT] = {
"time", DebugCmdTimeSync, "time", DebugCmdTimeSync,
"qs", DebugCmdQuerySensor, "qs", DebugCmdQuerySensor,
"dch", DebugCmdSelDebugChannel, "dch", DebugCmdSelDebugChannel,
"svr", DebugCmdSetSvr, "ltenet", DebugCmdSetLTENet,
"mac", DebugCmdSetMac, "mac", DebugCmdSetMac,
"para", DebugCmdGetPara, "para", DebugCmdGetPara,
"cali", DebugCmdCali, "cali", DebugCmdCali,
@@ -1877,4 +2201,7 @@ const DBGFunType DebugFun[DEBUG_CMD_CNT] = {
"lpcfg", DebugCmdLPConfig, "lpcfg", DebugCmdLPConfig,
"lora", DebugLoraConfig, "lora", DebugLoraConfig,
"reboot", DebugCmdReboot, "reboot", DebugCmdReboot,
"up", DebugCmdUpload,
"reg", DebugCmdRegister,
"eth", DebugCmdEthNet,
}; };