From 73eccc6762a6b144dccfaca32acc68a543e46543 Mon Sep 17 00:00:00 2001 From: YuanHongbin <975559679@qq.com> Date: Mon, 13 Jul 2026 14:30:13 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=B0=86=E5=AD=90=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=20Module/LaserTracing=5FDebug=20=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E4=B8=BA=E6=99=AE=E9=80=9A=E7=9B=AE=E5=BD=95=E7=BA=B3=E5=85=A5?= =?UTF-8?q?=E4=B8=BB=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 3 - Module/LaserTracing_Debug | 1 - Module/LaserTracing_Debug/.gitignore | 130 ++++ Module/LaserTracing_Debug/README.md | 4 + Module/LaserTracing_Debug/UartDebug.c | 1011 +++++++++++++++++++++++++ Module/LaserTracing_Debug/UartDebug.h | 59 ++ 6 files changed, 1204 insertions(+), 4 deletions(-) delete mode 100644 .gitmodules delete mode 160000 Module/LaserTracing_Debug create mode 100644 Module/LaserTracing_Debug/.gitignore create mode 100644 Module/LaserTracing_Debug/README.md create mode 100644 Module/LaserTracing_Debug/UartDebug.c create mode 100644 Module/LaserTracing_Debug/UartDebug.h diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 481321b..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "Module/LaserTracing_Debug"] - path = Module/LaserTracing_Debug - url = http://192.168.2.47:8418/YuanHongbin/LaserTracing_Debug.git diff --git a/Module/LaserTracing_Debug b/Module/LaserTracing_Debug deleted file mode 160000 index 5915837..0000000 --- a/Module/LaserTracing_Debug +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5915837afb2c05479e8674f7184bb5bbdc315da9 diff --git a/Module/LaserTracing_Debug/.gitignore b/Module/LaserTracing_Debug/.gitignore new file mode 100644 index 0000000..c4904c8 --- /dev/null +++ b/Module/LaserTracing_Debug/.gitignore @@ -0,0 +1,130 @@ +# ---> IAR +# Compiled binaries +*.o +*.bin +*.elf +*.hex +*.map +*.out +*.obj + +# Trash +*.bak +thumbs.db +*.~* + +# IAR Settings +**/settings/*.crun +**/settings/*.dbgdt +**/settings/*.cspy +**/settings/*.cspy.* +**/settings/*.xcl +**/settings/*.dni +**/settings/*.wsdt +**/settings/*.wspos + +# IAR Debug Exe +**/Exe/*.sim + +# IAR Debug Obj +**/Obj/*.pbd +**/Obj/*.pbd.* +**/Obj/*.pbi +**/Obj/*.pbi.* + +# IAR project "Debug" directory +Debug/ + +# IAR project "Release" directory +Release/ + +# IAR project settings directory +settings/ + +# IAR backup files +Backup* + +# IAR .dep files +*.dep +# ---> IAR_EWARM +# gitignore template for the IAR EWARM +# website: https://www.iar.com/knowledge/support/technical-notes/ide/which-files-should-be-version-controlled/ + +# Some tools will put the EWARM files +# under a subdirectory with the same name +# as the configuration. +# Example +# EWARM/Config1/Obj /List /Exe +# EWARM/Config2/Obj /List /Exe +EWARM/**/Obj +EWARM/**/List +EWARM/**/Exe + +# Autogenerated project files +*.dep +*.ewt + +# Autogenerated folder for debugger +EWARM/settings + +# ---> uVision +# git ignore file for Keil µVision Project + +# µVision 5 and µVision 4 Project screen layout file +*.uvguix.* +*.uvgui.* + +# Listing Files +*.i +*.lst +*.m51 +*.m66 +*.map + +# Object Files +*.axf +*.b[0-2][0-9] +*.b3[0-1] +*.bak +*.build_log.htm +*.crf +*.d +*.dep +*.elf +*.htm +*.iex +*.lnp +*.o +*.obj +*.sbr + +# Firmware Files +*.bin +*.h86 +*.hex + +# Build Files +.bat + +# Debugger Files +.ini + +# JLink Files +JLinkLog.txt + +# Other Files + +# ---> VisualStudioCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + diff --git a/Module/LaserTracing_Debug/README.md b/Module/LaserTracing_Debug/README.md new file mode 100644 index 0000000..6e48ab5 --- /dev/null +++ b/Module/LaserTracing_Debug/README.md @@ -0,0 +1,4 @@ +# LaserTracing_Debug +# 适用于LaserTracing项目 +# 单片机HC32L170 +# 转换为模块仓库 2026-05-15 diff --git a/Module/LaserTracing_Debug/UartDebug.c b/Module/LaserTracing_Debug/UartDebug.c new file mode 100644 index 0000000..3742f21 --- /dev/null +++ b/Module/LaserTracing_Debug/UartDebug.c @@ -0,0 +1,1011 @@ +#include +#include +#include +#include +#include + +#include "UartDebug.h" +#include "main.h" +#include "bsp.h" +#include "sx127x.h" +#include "SGCP.h" + + +#if (USE_DEBUG != 0) +#define DEBUG_CMD_CNT 16 +const DBGFunType DebugFun[DEBUG_CMD_CNT]; + +volatile DebugChannel_e gDebugChannel = DBG_CH_UART0; + +static char buff[DEBUG_BUFSIZE]; +volatile uint16_t iw=0; /* buffer write index*/ +static uint16_t ir=0; /* buffer read index*/ +static uint8_t RxRevTimeOutCnt = 0; +static char RxBuff[128]; +static uint8_t RxLen = 0; + +void vcom_Print(uint8_t sLen); + +void vcom_Send( char *format, ... ) +{ + va_list args; + va_start(args, format); + uint8_t len; + uint8_t offset = 0; + char tempBuff[DEBUG_BUFF_SIZE_MAX]; + //uint32_t primask_bit; + + //primask_bit = __get_PRIMASK(); + //__disable_irq(); + + /*convert into string at buff[0] of length iw*/ + len = vsprintf(&tempBuff[0], format, args); + + while(offset < len) { + if((len - offset) < DEBUG_BUFSIZE) { + memcpy(&buff[0], &tempBuff[offset], len - offset); + vcom_Print(len - offset); + offset = len; + } + else { + memcpy(&buff[0], &tempBuff[offset], DEBUG_BUFSIZE); + offset += DEBUG_BUFSIZE; + vcom_Print(DEBUG_BUFSIZE); + } + } + + //__set_PRIMASK(primask_bit); + //__enable_irq(); + + va_end(args); +} + +void vcom_Print(uint8_t sLen) +{ +// һַָCurChar + char* CurChar; + // ʼir + ir = 0; + // irСsLenʱѭִ + while(ir < sLen) + { + // ȡַָCurChar + CurChar = &buff[ir++]; + // DebugUartSendCurCharַָΪ1 + DBGUartSend((uint8_t*)CurChar, 1); + } +} + +// һvcom_Send2ڷַ +void vcom_Send2(uint8_t *sData, uint16_t len) +{ + // sDataÿԪط͵DebugUartSend + for(int i = 0; i < len; i++) { + DBGUartSendByte(sData[i]); + } +} + +void DebugLoopHandler(void) +{ + int argc = 0; + char *argv[10], *argp; + + if(RxRevTimeOutCnt > 0 || RxLen == 0) + return; + + //for(argv[argc] = strtok(RxBuff, " '\r'"); argv[argc] != NULL; argv[++argc] = strtok(NULL, " '\r'")); + // ַargv + argp = strtok(RxBuff, " "); + for(int i = 0; i < 10; i++) { + if(argp != NULL) { + argv[argc++] = argp; + argp = strtok(NULL, " "); + } + else if(argc > 0){ + argc--; + break; + } + } + + // ȡһ丳ֵargp + argp = strtok(argv[argc], "'\r'"); + // argpΪգargpֵֵargv[argc]argc1 + if(argp != NULL) { + argv[argc++] = argp; + } + // 򣬽RxLenΪ0 + else { + RxLen = 0; + return; + } + + // DebugFun飬argv[0]ǷDBGCmdƥ䣬ƥDBGExec + for(int i = 0; i < DEBUG_CMD_CNT; i++) { + if(strcmp(argv[0], DebugFun[i].DBGCmd) == 0) + DebugFun[i].DBGExec(argc, argv); + } + + memset(RxBuff, 0x00, 128); + RxLen = 0; +} + +// Debug1mSRoutine +// ܣ1msʱroutine +void Debug1mSRoutine(void) +{ + // 1msʱӼ0 + if(RxRevTimeOutCnt > 0) + // 1msʱӼ1 + RxRevTimeOutCnt--; +} + +// 庯DebugUartIRQڴڽж +void DebugUartIRQ(uint8_t Data) +{ + // 1ӳʱΪ0RxLen + if(RxRevTimeOutCnt == 0) + RxLen = 0; + + // 1ӳʱ + RxRevTimeOutCnt = 3; + // RxLenС128ӵRxBuff + if(RxLen < 128) { + RxBuff[RxLen++] = Data; + } +// DBG_LOG("RxBuff = %s\n", RxBuff); +// RS485_Flag=1;//ձ־Ϊ1 +} + +extern uint8_t LocalMAC[6]; //MACַ +extern uint8_t GatewayMAC[6]; //MACַעʱȫΪ0 +extern uint32_t LocalType; +extern uint32_t CommWay; +extern uint32_t DeviceSign; +extern uint32_t AddNumber; +/***************************************************************************************** +* : DebugCmdGetPara +* : 鿴 +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugCmdGetPara(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(argc > 1) { + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: para\r\n"); + DBG_LOG(" brief --> View gateway parameters.\r\n\r\n"); + return; + } + } + 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("Local MAC: %02X-%02X-%02X-%02X-%02X-%02X\r\n", + LocalMAC[0], LocalMAC[1], LocalMAC[2], LocalMAC[3], LocalMAC[4], LocalMAC[5]); + DBG_LOG("Battery: %d%\r\n", VBAT_Percentage); + DBG_LOG("LocalType: %04X\r\n", LocalType); + DBG_LOG("CommInf: %s\r\n", + (CommWay == LORA) ? "Lora" : + (CommWay == RS485) ? "RS485" : + (CommWay == RS232) ? "RS232" : + (CommWay == CAN) ? "CAN" : + (CommWay == CATONE) ? "CATONE" : + (CommWay == BLE) ? "BLE" : + (CommWay == WIFI) ? "WIFI" : + (CommWay == UART) ? "UART" : + "NULL"); + DBG_LOG("DeviceSign: %s\r\n", + (DeviceSign == MASTER) ? "MASTER" : + (DeviceSign == SUBSET) ? "SUBSET" : + "NULL"); + + DBG_LOG("GateWay MAC: %02X-%02X-%02X-%02X-%02X-%02X\r\n", + GatewayMAC[0], GatewayMAC[1], GatewayMAC[2], GatewayMAC[3], GatewayMAC[4], GatewayMAC[5]); + DBG_LOG("Register Status: %d\r\n", SGCP.LoginOk); + + DBG_LOG("RS485h1: %s, ",(App.Para.Rs485Ch1.Enable == true) ? "Enable" : "Disable"); + DBG_LOG("Upgrade %s, ",(App.Para.Rs485Ch1.UpgradeEnable == true) ? "Enable" : "Disable"); + DBG_LOG("Addr %02X, Baudrate %d\r\n",App.Para.Rs485Ch1.Addr, App.Para.Rs485Ch1.BaudRate); + DBG_LOG("RS485h2: %s, ",(App.Para.Rs485Ch2.Enable == true) ? "Enable" : "Disable"); + DBG_LOG("Upgrade %s, ",(App.Para.Rs485Ch2.UpgradeEnable == true) ? "Enable" : "Disable"); + DBG_LOG("Addr %02X, Baudrate %d\r\n",App.Para.Rs485Ch2.Addr, App.Para.Rs485Ch2.BaudRate); + + DBG_LOG("Lora: ch %d, rp %d, fc %d\r\n", App.Para.Lora.ucChannel, App.Para.Lora.RegPreamble, App.Para.Lora.FreqCent); + DBG_LOG("LpCfg: CI:%dsec, RI:%dmin, EI:%dmin, ET:%dmin\r\n", + App.Para.Layout.CollectTime*30, App.Para.Layout.ReportInterval/2, App.Para.Layout.ERInterval/2, App.Para.Layout.ERTime/2); + struct tm *stime; + uint32_t dwStamp = TimeTs(); + stime = localtime(&dwStamp); + DBG_LOG("%d/",stime->tm_year + 1900); + DBG_LOG("%d/",stime->tm_mon + 1); + DBG_LOG("%d-",stime->tm_mday); + DBG_LOG("%d:",stime->tm_hour); + DBG_LOG("%d:",stime->tm_min); + DBG_LOG("%d\r\n",stime->tm_sec); + DBG_LOG("**********************************************************\r\n"); +} +/***************************************************************************************** +* : DebugCmdMainOnOff +* : Ϣ +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugCmdMainOnOff(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(argc < 2) + return; + + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: main arg1\r\n"); + DBG_LOG(" brief --> Turn the Main_DBG on or off.\r\n"); + DBG_LOG(" arg1 --> on/off\r\n\r\n"); + return; + } + + if(strcmp(argv[1], "on") == 0) { + MainDBGOnOff(true); + } + else if(strcmp(argv[1], "off") == 0) { + MainDBGOnOff(false); + } +} +/***************************************************************************************** +* : DebugCmdDataOnOff +* : ݵϢ +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugCmdDataOnOff(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(argc < 2) + return; + + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: data arg1\r\n"); + DBG_LOG(" brief --> Turn the Data_DBG on or off.\r\n"); + DBG_LOG(" arg1 --> on/off\r\n\r\n"); + return; + } + + if(strcmp(argv[1], "on") == 0) { + DataDBGOnOff(true); + } + else if(strcmp(argv[1], "off") == 0) { + DataDBGOnOff(false); + } +} +/***************************************************************************************** +* : DebugCmdSetMac +* : MACַ +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugCmdSetMac(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + uint8_t mac[6]; + + if(argc < 2) + return; + + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: mac arg1 arg2\r\n"); + DBG_LOG(" brief --> Set the server IP address and port for 4G communication.\r\n"); + DBG_LOG(" arg1 --> password\r\n"); + DBG_LOG(" arg2 --> mac(xx-xx-xx-xx-xx-xx)\r\n\r\n"); + return; + } + + if(strcmp(argv[1], "gxjt") != 0) { + DBG_LOG("Password Error\r\n"); + return; + } + + int ret = sscanf(argv[2], "%02X-%02X-%02X-%02X-%02X-%02X", + (int *)&mac[0], (int *)&mac[1], (int *)&mac[2], (int *)&mac[3], (int *)&mac[4], (int *)&mac[5]); + if(ret != 6) + return; + + memcpy(LocalMAC, mac, 6); + SAVE_APP_PARA((uint32_t *)&App.Para); + DBG_LOG("Set gateway mac Address completed.\r\n"); +} +/***************************************************************************************** +* : DebugCmdDevReg +* : 豸ע +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugCmdDevReg(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(argc > 1) + { + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: reg\r\n"); + DBG_LOG(" brief --> Initiate a registration request to the gateway.\r\n"); + return; + } + } + + DBG_LOG("In the registration request.\r\n"); + SGCP.LoginOk = false; + App.LoginFlag = true; +} +/***************************************************************************************** +* : DebugCmdDataUpload +* : 豸ϴ +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugCmdDataUpload(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(argc > 1) + { + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: up\r\n"); + DBG_LOG(" brief --> Upload the current data to the gateway.\r\n"); + return; + } + } + + if(SGCP.LoginOk == false) + { + DBG_LOG("The device is not registered.\r\n"); + return; + } + if(App.UpdateOk == false) + { + DBG_LOG("Device data is not ready.\r\n"); + return; + } + DBG_LOG("Uploading data to the gateway.\r\n"); + App.UploadFlag = true; +} +/***************************************************************************************** +* : DebugCmdDataColl +* : 豸ݲɼ +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugCmdDataColl(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(argc > 1) + { + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: coll\r\n"); + DBG_LOG(" brief --> Collect the current device data.\r\n"); + return; + } + } + + DBG_LOG("Data collection of device.\r\n"); + SGCP.TimingAcquisition = true; +} +/***************************************************************************************** +* : DebugCmdCat1OnOff +* : CAT1Ϣ +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +void DebugCmdRS485Ctrl(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(argc < 2) + return; + + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: rs485 arg1 arg2 arg3\r\n"); + DBG_LOG(" brief --> RS485 control command.\r\n"); + DBG_LOG(" arg1 --> idx: (1, 2) RS485 channel selection.\r\n"); + DBG_LOG(" arg2 --> scmd:(o, a, b, u)Rs485 subcommand.\r\n"); + DBG_LOG(" scmd = o, arg3 = (on, off) RS485 Channel On-OFF.\r\n"); + DBG_LOG(" scmd = a, arg3 = (1~16) Set 485 address.\r\n"); + DBG_LOG(" scmd = b, arg3 = (2400~9600) Set baud rate.\r\n"); + DBG_LOG(" scmd = u, arg3 = (on, off) Set Upgrade symbol.\r\n\r\n"); + return; + } + + int idx = atoi(argv[1]); + if(idx < 1 || idx > 2) { + DBG_LOG("RS485 Cmd Para Error!\r\n"); + return; + } + + char scmd = argv[2][0]; + switch(scmd) { + case 'o': + if(strstr(argv[3], "on") != NULL) { + if(idx == 1) + App.Para.Rs485Ch1.Enable = true; + else if(idx == 2) + App.Para.Rs485Ch2.Enable = true; + DBG_LOG("RS485Ch%d Enable!\r\n", idx); + } + else if(strstr(argv[3], "off") != NULL){ + if(idx == 1) + App.Para.Rs485Ch2.Enable = false; + else if(idx == 2) + App.Para.Rs485Ch2.Enable = false; + DBG_LOG("RS485Ch%d Disable!\r\n", idx); + } + break; + + case 'a':{ + int Addr = atoi(argv[3]); + if(idx == 1) { + if(Addr > 16 || Addr < 1) + { + DBG_LOG("RS485Ch%d set addr is %d err!\r\n",idx, Addr); + break; + } + App.Para.Rs485Ch1.Addr = Addr; + DBG_LOG("RS485Ch%d set addr %d ok!\r\n", idx, App.Para.Rs485Ch1.Addr); + } + else if(idx == 2) { + if(Addr > 16 || Addr < 1) + { + DBG_LOG("RS485Ch%d set addr is %d err!\r\n",idx, Addr); + break; + } + App.Para.Rs485Ch2.Addr = Addr; + DBG_LOG("RS485Ch%d set addr %d ok!\r\n", idx, App.Para.Rs485Ch2.Addr); + } + } + break; + + case 'b': { + int BaudRate = atoi(argv[3]); + if(idx == 1) { + if(App.Para.Rs485Ch1.UpgradeEnable == true) + { + DBG_LOG("Upgrade the serial port to prohibit modification of the baud rate!\r\n"); + return; + } + if(BaudRate > 9600 || BaudRate < 2400) + { + DBG_LOG("RS485Ch%d BaudRate is %d err!\r\n",idx, BaudRate); + break; + } + App.Para.Rs485Ch1.BaudRate = BaudRate; + LpUart0Init(App.Para.Rs485Ch1.BaudRate); + DBG_LOG("RS485Ch%d Set BaudRate %d!\r\n", idx, App.Para.Rs485Ch1.BaudRate); + } + else if(idx == 2) { + if(App.Para.Rs485Ch2.UpgradeEnable == true) + { + DBG_LOG("Upgrade the serial port to prohibit modification of the baud rate!\r\n"); + return; + } + if(BaudRate > 500000 || BaudRate < 2400) + { + DBG_LOG("RS485Ch%d BaudRate is %d err!\r\n",idx, BaudRate); + break; + } + App.Para.Rs485Ch2.BaudRate = BaudRate; + //Uart0Init(App.Para.Rs485Ch2.BaudRate); + DBG_LOG("RS485Ch%d Set BaudRate %d!\r\n", idx, App.Para.Rs485Ch2.BaudRate); + } + } + break; + + case 'u': + if(strstr(argv[3], "on") != NULL) { + if(idx == 1) { + App.Para.Rs485Ch1.UpgradeEnable = true; + DBG_LOG("RS485Ch%d Upgrade On!\r\n", idx); + } + else if(idx == 2) { + App.Para.Rs485Ch2.UpgradeEnable = true; + DBG_LOG("RS485Ch%d Upgrade On!\r\n", idx); + } + } + else if(strstr(argv[3], "off") != NULL){ + if(idx == 1) { + if(App.Para.Rs485Ch2.UpgradeEnable == false) + { + DBG_LOG("At least keep one upgraded serial port!\r\n"); + return; + } + App.Para.Rs485Ch2.UpgradeEnable = false; + DBG_LOG("RS485Ch%d Upgrade Off!\r\n", idx); + } + else if(idx == 2) { + if(App.Para.Rs485Ch2.UpgradeEnable == false) + { + DBG_LOG("At least keep one upgraded serial port!\r\n"); + return; + } + App.Para.Rs485Ch2.UpgradeEnable = false; + DBG_LOG("RS485Ch%d Upgrade Off!\r\n", idx); + } + } + break; + + default: + DBG_LOG("RS485 Cmd Para Error!\r\n"); + return; + } + SAVE_APP_PARA((uint32_t *)&App.Para); +} +/***************************************************************************************** +* : DebugLoraConfig +* : Lora +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugLoraConfig(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(argc < 2) + return; + + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: lora arg1 arg2\r\n"); + DBG_LOG(" brief --> Configure Lora parameters.\r\n"); + DBG_LOG(" arg1 --> ch: Channel--para=(0~16)\r\n"); + DBG_LOG(" pw: Power--para=(0~20)\r\n"); + DBG_LOG(" bw: SignalBw--para=(0~9)\r\n"); + DBG_LOG(" sf: SpreadFactor--para=(6~12)\r\n"); + DBG_LOG(" ec: ErrorCoding--para=(1~4)\r\n"); + DBG_LOG(" rp: RegPreamble--para=(1~32)\r\n"); + DBG_LOG(" fc: FreqCent--para=(410000000~525000000)\r\n"); + DBG_LOG(" o: on/off\r\n"); + DBG_LOG(" arg2 --> para\r\n"); + + return; + } + + if(strcmp(argv[1], "o") == 0) { + if(strcmp(argv[2], "on") == 0) { + App.Para.Lora.OnOff = true; + //LORA_POW_ON(); + DBG_LOG(" Lora Power On!\r\n"); + } + else if(strcmp(argv[2], "off") == 0) { + App.Para.Lora.OnOff = false; + //LORA_POW_OFF(); + DBG_LOG(" Lora Power Off!\r\n"); + } + } + + if(strcmp(argv[1], "ch") == 0) { + int ch = atoi(argv[2]); + if(LoraSetChannel(ch)) { + App.Para.Lora.ucChannel = ch; + DBG_LOG(" Lora Channel is configured successfully!\r\n"); + } + else { + DBG_LOG("Lora Para Error!\r\n"); + return; + } + } + + if(strcmp(argv[1], "pw") == 0) { + int pow = atoi(argv[2]); + if(LoraSetPower(pow)) { + App.Para.Lora.ucPower = pow; + DBG_LOG(" Lora Power is configured successfully!\r\n"); + } + else { + DBG_LOG("Lora Para Error!\r\n"); + return; + } + } + + if(strcmp(argv[1], "bw") == 0) { + int bw = atoi(argv[2]); + if(LoraSetSignalBw(bw)) { + App.Para.Lora.SignalBw = bw; + DBG_LOG(" Lora SignalBw is configured successfully!\r\n"); + } + else { + DBG_LOG("Lora Para Error!\r\n"); + return; + } + } + + if(strcmp(argv[1], "sf") == 0) { + int sf = atoi(argv[2]); + if(LoraSetSpreadFactor(sf)) { + App.Para.Lora.SpreadFactor = sf; + DBG_LOG(" Lora SpreadFactor is configured successfully!\r\n"); + } + else { + DBG_LOG("Lora Para Error!\r\n"); + return; + } + } + + if(strcmp(argv[1], "ec") == 0) { + int ec = atoi(argv[2]); + if(LoraSetErrorCoding(ec)) { + App.Para.Lora.ErrorCoding = ec; + DBG_LOG(" Lora ErrorCoding is configured successfully!\r\n"); + } + else { + DBG_LOG("Lora Para Error!\r\n"); + return; + } + } + + if(strcmp(argv[1], "rp") == 0) { + int rp = atoi(argv[2]); + if(LoraSetRegPreamble(rp)) { + App.Para.Lora.RegPreamble = rp; + DBG_LOG(" Lora RegPreamble is configured successfully!\r\n"); + } + else { + DBG_LOG("Lora Para Error!\r\n"); + return; + } + } + if(strcmp(argv[1], "fc") == 0){ + uint32_t fc = atoi(argv[2]); + if(LoraSetFreqCent(fc)) { + App.Para.BLPara.LoraFreq = fc; + App.Para.Lora.FreqCent = fc; + DBG_LOG(" Lora FreqCent is configured successfully!\r\n"); + } + else { + DBG_LOG("Lora Para Error!\r\n"); + return; + } + } + if(App.Para.Lora.OnOff == true) + { + LoraInit(); + SGCP.LoginOk = false; + App.LoginFlag = true; + } + SAVE_APP_PARA((uint32_t *)&App.Para); + DBG_LOG("Lora reinitializes.\r\n"); +} +/***************************************************************************************** +* : DebugCmdLPConfig +* : ͹IJ +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugCmdLPConfig(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + uint16_t CollectInterval; //ɼʱ + uint16_t ReportInterval; //ϱʱ + uint8_t ERInterval; //ϱʱ + uint8_t ERTime; //ϱʱ + + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: lpcfg arg1 arg2 arg3 arg4\r\n"); + DBG_LOG(" brief --> Configure low-power device parameters.\r\n"); + DBG_LOG(" arg1 --> Collect interval. (30~7200 second)\r\n"); + DBG_LOG(" arg2 --> Report interval. (5~720 minute)\r\n"); + DBG_LOG(" arg3 --> Emergency reporting interval. (1~5 minute)\r\n"); + DBG_LOG(" arg4 --> Emergency reporting time. (10~120 minute)\r\n\r\n"); + return; + } + + if(argc < 5) + return; + + + CollectInterval = atoi(argv[1]); + if(CollectInterval < 30 || CollectInterval > 7200) { + DBG_LOG("CollectInterval Para Error!\r\n"); + return; + } + + ReportInterval = atoi(argv[2]); + if(ReportInterval < 5 || ReportInterval > 720) { + DBG_LOG("ReportInterval Para Error!\r\n"); + return; + } + + ERInterval = atoi(argv[3]); + if(ERInterval < 1 || ERInterval > 5) { + DBG_LOG("ERInterval Para Error!\r\n"); + return; + } + + ERTime = atoi(argv[4]); + if(ERTime < 10 || ERTime > 120) { + DBG_LOG("ERTime Para Error!\r\n"); + return; + } + + + App.Para.Layout.CollectTime = CollectInterval/30; + App.Para.Layout.ReportInterval = ReportInterval * 2; + App.Para.Layout.ERInterval = ERInterval * 2; + App.Para.Layout.ERTime = ERTime * 2; + + SAVE_APP_PARA((uint32_t *)&App.Para); + DBG_LOG("The low-power device is configured.\r\n"); +} +/***************************************************************************************** +* : DebugLaserConfig +* : +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugLaserConfig(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(argc < 2) + return; + + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: laser arg1\r\n"); + DBG_LOG(" brief --> Control laser on or off.\r\n"); + DBG_LOG(" arg1 --> on/off\r\n\r\n"); + return; + } + + if(strcmp(argv[1], "on") == 0) { + DBG_LOG("The laser has been activated.\r\n"); + SGCP.LaserOnOff = true; + SGCP.GWStatus = GW_STATUS_LASER_STARES; + } + else if(strcmp(argv[1], "off") == 0) { + DBG_LOG("The laser has been turned off.\r\n"); + SGCP.LaserOnOff = false; + SGCP.GWStatus = GW_STATUS_LASER_STARES; + } +} +/***************************************************************************************** +* : DebugCmdRestoreFactory +* : ָ +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +void DebugCmdRestoreFactory(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: res arg1\r\n\ + brief --> Restore to factory.\r\n"); + DBG_LOG(" arg1 --> password\r\n\r\n"); + return; + } + + if(strcmp(argv[1], "gxjt") != 0) { + DBG_LOG("Password Error\r\n"); + return; + } + + DBG_LOG("Restore factory settings, Device Restart...\r\n"); + App.Para.FactoryFlag = 0xFF; + SAVE_APP_PARA((uint32_t *)&App.Para); + delay_ms(1000); + SystemReset(); + while(1); +} +/***************************************************************************************** +* : DebugCmdReboot +* : 豸 +* : argc, + argv, +* ֵ: +*****************************************************************************************/ +static void DebugCmdChannel(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(argc < 2 || strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: dch\r\n\ + brief --> Switch debug output channel.\r\n\ + dch dbg --> Debug output via UART0 (default)\r\n\ + dch ch1 --> Debug output via RS485_1 (LPUART0)\r\n\r\n"); + return; + } + + if(strcmp(argv[1], "dbg") == 0) { + gDebugChannel = DBG_CH_UART0; + DBG_LOG("Debug channel switched to UART0\r\n"); + } else if(strcmp(argv[1], "ch1") == 0) { + gDebugChannel = DBG_CH_RS485_1; + DBG_LOG("Debug channel switched to RS485_1\r\n"); + } else { + DBG_LOG("Unknown channel: %s\r\nUse 'dch ?' for help\r\n", argv[1]); + } +} + +static void DebugCmdReboot(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + if(strcmp(argv[1], "?") == 0) { + DBG_LOG("Debug Cmd: reboot\r\n\ + brief --> System Reboot.\r\n\r\n"); + return; + } + + DBG_LOG("Device Reboot...\r\n"); + delay_ms(1000); + SystemReset(); + while(1); +} + +void DebugCmdHelp(int argc, char *argv[]) +{ + DBG_LOG("\r\n"); + char Data[10]; + uint8_t len = 0; + char *argv1[10]; // 10 + int argc1 = 0; + char *token; + + memset(Data, 0x00, 10); + len = strlen("para ?\0"); + memcpy(Data, "para ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){ + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdGetPara(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("main ?\0"); + memcpy(Data, "main ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){ + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdMainOnOff(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("data ?\0"); + memcpy(Data, "data ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){ + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdDataOnOff(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("mac ?\0"); + memcpy(Data, "mac ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){ + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdSetMac(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("reg ?\0"); + memcpy(Data, "reg ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){ + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdDevReg(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("up ?\0"); + memcpy(Data, "up ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){ + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdDataUpload(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("coll ?\0"); + memcpy(Data, "coll ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){ + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdDataColl(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("rs485 ?\0"); + memcpy(Data, "rs485 ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){ + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdRS485Ctrl(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("lora ?\0"); + memcpy(Data, "lora ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) { + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugLoraConfig(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("lpcfg ?\0"); + memcpy(Data, "lpcfg ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) { + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdLPConfig(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("laser ?\0"); + memcpy(Data, "laser ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) { + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugLaserConfig(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("res ?\0"); + memcpy(Data, "res ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) { + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdRestoreFactory(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("dch ?\0"); + memcpy(Data, "dch ?\0", len); + token = strtok(Data, " "); + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) { + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdChannel(argc1, argv1); + + memset(Data, 0x00, 10); + len = strlen("reboot ?\0"); + memcpy(Data, "reboot ?\0", len); + token = strtok(Data, " "); // ָǿո + for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) { + argv1[argc1] = token; + token = strtok(NULL, " "); + } + DebugCmdReboot(argc1, argv1); +} + +const DBGFunType DebugFun[DEBUG_CMD_CNT] = { + "help", DebugCmdHelp, + "para", DebugCmdGetPara, + "main", DebugCmdMainOnOff, + "data", DebugCmdDataOnOff, + "mac", DebugCmdSetMac, + "reg", DebugCmdDevReg, + "up", DebugCmdDataUpload, + "coll", DebugCmdDataColl, + "rs485", DebugCmdRS485Ctrl, + "lora", DebugLoraConfig, + "lpcfg", DebugCmdLPConfig, + "laser", DebugLaserConfig, + "res", DebugCmdRestoreFactory, + "dch", DebugCmdChannel, + "reboot", DebugCmdReboot, +}; +#endif + diff --git a/Module/LaserTracing_Debug/UartDebug.h b/Module/LaserTracing_Debug/UartDebug.h new file mode 100644 index 0000000..1181435 --- /dev/null +++ b/Module/LaserTracing_Debug/UartDebug.h @@ -0,0 +1,59 @@ +#ifndef __DEBUG_H +#define __DEBUG_H + +#include "bsp.h" + +#if (USE_DEBUG != 0) + +#define DEBUG_BUFSIZE 200 +#define DEBUG_BUFF_SIZE_MAX 512 + +#define DebugUartSend(X) LPUartSend(X) + +void vcom_Send( char *format, ... ); +void vcom_Send2(uint8_t *sData, uint16_t len); + +#define DBG_LOG2(x, y) vcom_Send2(x, y) //ӡȳDEBUG_BUFF_SIZE_MAXϢ +#define DBG_LOG(...) vcom_Send(__VA_ARGS__) +#define DBG_LOG_F(fmt,arg...) LOG("[%s] "fmt,__FUNCTION__,##arg) + +#define DBG_ARRAY(ARRAY,SIZE) { \ + if(ARRAY != NULL) { \ + for(int i = 0; i < SIZE; i++) { \ + DBG_LOG("%02x ",ARRAY[i]); \ + } \ + DBG_LOG("\r\n"); \ + } \ +} + +typedef enum { + DBG_CH_UART0 = 0, //ĬϴڵԷʽ Uart0Init + DBG_CH_RS485_1, //RS485_1 (LPUART0) +}DebugChannel_e; + +extern volatile DebugChannel_e gDebugChannel; + +typedef void (*DebugExec)(int argc, char *argv[]); + +typedef struct{ + char *DBGCmd; + DebugExec DBGExec; +}DBGFunType; + +void DebugUartIRQ(uint8_t Data); +void DebugLoopHandler(void); +void Debug1mSRoutine(void); + + +//void ReadBootPara(BootPara rData); +//void WriteBootPara(BootPara wData); +//extern BootPara_t BLPara; +#else + +#define DBG_LOG2(x, y) +#define DBG_LOG(...) +#define DBG_LOG_F(fmt,arg...) +#define DBG_ARRAY(ARRAY,SIZE) + +#endif +#endif