feat: 新增激光定时关闭与姿态角持续输出测试功能,编码转UTF-8

1. 激光定时自动关闭:默认10分钟,laser on启动计时,超时自动关并上报
2. laser time <min>可配置定时分钟数,0=关闭定时
3. att on/off持续输出姿态角(Pitch/Roll/Yaw),不注册不低功耗
4. 20个源文件从GB2312编码转为UTF-8 with BOM
This commit is contained in:
2026-07-20 17:04:48 +08:00
parent 70758b1c06
commit 72844ff821
20 changed files with 1388 additions and 1260 deletions
+209 -116
View File
@@ -1,4 +1,4 @@
#include <string.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
@@ -62,24 +62,24 @@ void vcom_Send( char *format, ... )
void vcom_Print(uint8_t sLen)
{
// 定义一个字符指针CurChar
// 定义一个字符指针CurChar
char* CurChar;
// 初始化ir
// 初始化ir
ir = 0;
// 当ir小于sLen时,循环执行
// 当ir小于sLen时,循环执行
while(ir < sLen)
{
// 获取字符指针CurChar
// 获取字符指针CurChar
CurChar = &buff[ir++];
// 调用DebugUartSend函数,发送CurChar指向的字符,次数为1
// 调用DebugUartSend函数,发送CurChar指向的字符,次数为1
DBGUartSend((uint8_t*)CurChar, 1);
}
}
// 定义一个函数vcom_Send2,用于发送字符串
// 定义一个函数vcom_Send2,用于发送字符串
void vcom_Send2(uint8_t *sData, uint16_t len)
{
// 遍历sData,将每个元素发送到DebugUartSend
// 遍历sData,将每个元素发送到DebugUartSend
for(int i = 0; i < len; i++) {
DBGUartSendByte(sData[i]);
}
@@ -94,7 +94,7 @@ void DebugLoopHandler(void)
return;
//for(argv[argc] = strtok(RxBuff, " '\r'"); argv[argc] != NULL; argv[++argc] = strtok(NULL, " '\r'"));
// 解析字符串,将参数放入argv数组中
// 解析字符串,将参数放入argv数组中
argp = strtok(RxBuff, " ");
for(int i = 0; i < 10; i++) {
if(argp != NULL) {
@@ -107,19 +107,19 @@ void DebugLoopHandler(void)
}
}
// 获取第一个参数,并将其赋值给argp
// 获取第一个参数,并将其赋值给argp
argp = strtok(argv[argc], "'\r'");
// 如果argp不为空,则将argp的值赋值给argv[argc],并将argc加1
// 如果argp不为空,则将argp的值赋值给argv[argc],并将argc加1
if(argp != NULL) {
argv[argc++] = argp;
}
// 否则,将RxLen设置为0,并返回
// 否则,将RxLen设置为0,并返回
else {
RxLen = 0;
return;
}
// 遍历DebugFun数组,查找argv[0]是否与DBGCmd匹配,若匹配则调用DBGExec函数
// 遍历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);
@@ -129,45 +129,45 @@ void DebugLoopHandler(void)
RxLen = 0;
}
// 函数:Debug1mSRoutine
// 功能:1ms调试时钟routine
// 函数:Debug1mSRoutine
// 功能:1ms调试时钟routine
void Debug1mSRoutine(void)
{
// 如果1ms调试时钟计数器大于0
// 如果1ms调试时钟计数器大于0
if(RxRevTimeOutCnt > 0)
// 1ms调试时钟计数器减1
// 1ms调试时钟计数器减1
RxRevTimeOutCnt--;
}
// 定义函数DebugUartIRQ,用于处理串口接收中断
// 定义函数DebugUartIRQ,用于处理串口接收中断
void DebugUartIRQ(uint8_t Data)
{
// 如果1分钟超时计数器为0,则清空RxLen
// 如果1分钟超时计数器为0,则清空RxLen
if(RxRevTimeOutCnt == 0)
RxLen = 0;
// 重置1分钟超时计数器
// 重置1分钟超时计数器
RxRevTimeOutCnt = 3;
// 如果RxLen小于128,则将数据添加到RxBuff中
// 如果RxLen小于128,则将数据添加到RxBuff中
if(RxLen < 128) {
RxBuff[RxLen++] = Data;
}
// DBG_LOG("RxBuff = %s\n", RxBuff);
// RS485_Flag=1;//接收标志为置1
// RS485_Flag=1;//接收标志为置1
}
extern uint8_t LocalMAC[6]; //本机MAC地址
extern uint8_t GatewayMAC[6]; //网关MAC地址,注册时全为0
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, 输入参数
* 返 回 值: 无
* 函数名称: DebugCmdGetPara
* 功能描述: 查看参数
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdGetPara(int argc, char *argv[])
{
@@ -226,11 +226,11 @@ static void DebugCmdGetPara(int argc, char *argv[])
DBG_LOG("**********************************************************\r\n");
}
/*****************************************************************************************
* 函数名称: DebugCmdMainOnOff
* 功能描述: 主调试信息开关
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugCmdMainOnOff
* 功能描述: 主调试信息开关
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdMainOnOff(int argc, char *argv[])
{
@@ -253,11 +253,11 @@ static void DebugCmdMainOnOff(int argc, char *argv[])
}
}
/*****************************************************************************************
* 函数名称: DebugCmdDataOnOff
* 功能描述: 数据调试信息开关
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugCmdDataOnOff
* 功能描述: 数据调试信息开关
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdDataOnOff(int argc, char *argv[])
{
@@ -280,11 +280,11 @@ static void DebugCmdDataOnOff(int argc, char *argv[])
}
}
/*****************************************************************************************
* 函数名称: DebugCmdSetMac
* 功能描述: 设置MAC地址
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugCmdSetMac
* 功能描述: 设置MAC地址
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdSetMac(int argc, char *argv[])
{
@@ -317,11 +317,11 @@ static void DebugCmdSetMac(int argc, char *argv[])
DBG_LOG("Set gateway mac Address completed.\r\n");
}
/*****************************************************************************************
* 函数名称: DebugCmdDevReg
* 功能描述: 设备申请注册
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugCmdDevReg
* 功能描述: 设备申请注册
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdDevReg(int argc, char *argv[])
{
@@ -340,11 +340,11 @@ static void DebugCmdDevReg(int argc, char *argv[])
App.LoginFlag = true;
}
/*****************************************************************************************
* 函数名称: DebugCmdDataUpload
* 功能描述: 设备数据上传
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugCmdDataUpload
* 功能描述: 设备数据上传
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdDataUpload(int argc, char *argv[])
{
@@ -372,11 +372,11 @@ static void DebugCmdDataUpload(int argc, char *argv[])
App.UploadFlag = true;
}
/*****************************************************************************************
* 函数名称: DebugCmdDataColl
* 功能描述: 设备数据采集
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugCmdDataColl
* 功能描述: 设备数据采集
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdDataColl(int argc, char *argv[])
{
@@ -394,11 +394,11 @@ static void DebugCmdDataColl(int argc, char *argv[])
SGCP.TimingAcquisition = true;
}
/*****************************************************************************************
* 函数名称: DebugCmdCat1OnOff
* 功能描述: CAT1调试信息开关
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugCmdCat1OnOff
* 功能描述: CAT1调试信息开关
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
void DebugCmdRS485Ctrl(int argc, char *argv[])
{
@@ -541,11 +541,11 @@ void DebugCmdRS485Ctrl(int argc, char *argv[])
SAVE_APP_PARA((uint32_t *)&App.Para);
}
/*****************************************************************************************
* 函数名称: DebugLoraConfig
* 功能描述: Lora参数配置
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugLoraConfig
* 功能描述: Lora参数配置
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugLoraConfig(int argc, char *argv[])
{
@@ -675,19 +675,19 @@ static void DebugLoraConfig(int argc, char *argv[])
DBG_LOG("Lora reinitializes.\r\n");
}
/*****************************************************************************************
* 函数名称: DebugCmdLPConfig
* 功能描述: 低功耗参数配置
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugCmdLPConfig
* 功能描述: 低功耗参数配置
* 参 数: 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; //紧急上报时长
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");
@@ -737,11 +737,11 @@ static void DebugCmdLPConfig(int argc, char *argv[])
DBG_LOG("The low-power device is configured.\r\n");
}
/*****************************************************************************************
* 函数名称: DebugLaserConfig
* 功能描述: 激光控制
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugLaserConfig
* 功能描述: 激光控制
* 参 数: argc, 输入参数数量
* argv, 参数列表
* 返 回 值: 无
*****************************************************************************************/
static void DebugLaserConfig(int argc, char *argv[])
{
@@ -751,32 +751,52 @@ static void DebugLaserConfig(int argc, char *argv[])
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");
DBG_LOG(" brief --> Control laser on/off, set auto-off timer.\r\n");
DBG_LOG(" arg1 --> on/off/time\r\n");
DBG_LOG(" laser on Turn on laser, start timer.\r\n");
DBG_LOG(" laser off Turn off laser.\r\n");
DBG_LOG(" laser time <min> Set auto-off timer (0=disable, default 10).\r\n\r\n");
return;
}
if(strcmp(argv[1], "on") == 0) {
DBG_LOG("The laser has been activated.\r\n");
SGCP.LaserOnOff = true;
SGCP.LaserTimerCount = SGCP.LaserTimerMinutes * 2;
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.LaserTimerCount = 0;
SGCP.GWStatus = GW_STATUS_LASER_STARES;
}
else if(strcmp(argv[1], "time") == 0)
{
if(argc < 3)
{
DBG_LOG("Laser timer is set to %d minute(s).\r\n", SGCP.LaserTimerMinutes);
return;
}
int min = atoi(argv[2]);
if(min < 0 || min > 255)
{
DBG_LOG("Invalid minutes! Range: 0~255.\r\n");
return;
}
SGCP.LaserTimerMinutes = (uint8_t)min;
DBG_LOG("Laser timer set to %d minute(s).\r\n", SGCP.LaserTimerMinutes);
}
}
/*****************************************************************************************
* 函数名称: DebugCmdRestoreFactory
* 功能描述: 恢复出厂设置
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
* Function: DebugCmdRestoreFactory
* Description: 恢复出厂设置
* Input: argc, 参数个数
* argv, 参数列表
* Output: 无
*****************************************************************************************/
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");
@@ -797,11 +817,11 @@ void DebugCmdRestoreFactory(int argc, char *argv[])
while(1);
}
/*****************************************************************************************
* 函数名称: DebugCmdReboot
* 功能描述: 设备重启
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
* 函数名称: DebugCmdReboot
* 功能描述: 设备重启
* 参 数: argc, 输入参数数量
argv, 输入参数
* 返 回 值: 无
*****************************************************************************************/
static void DebugCmdChannel(int argc, char *argv[])
{
@@ -841,12 +861,43 @@ static void DebugCmdReboot(int argc, char *argv[])
}
/*****************************************************************************************
* Function: DebugCmdAtt
* Description: 姿态角持续输出
* Input: argc, 参数个数
argv, 参数列表
* Output: 无
*****************************************************************************************/
static void DebugCmdAtt(int argc, char *argv[])
{
DBG_LOG("\r\n");
if(argc < 2 || strcmp(argv[1], "?") == 0)
{
DBG_LOG("Debug Cmd: att\r\n");
DBG_LOG(" brief --> Continuous attitude angle output.\r\n");
DBG_LOG(" arg1 --> on/off\r\n\r\n");
return;
}
if(strcmp(argv[1], "on") == 0)
{
App.AttTestMode = true;
App.AttTestCnt = 1000;
DBG_LOG("Attitude debug output ON.\r\n");
}
else if(strcmp(argv[1], "off") == 0)
{
App.AttTestMode = false;
DBG_LOG("Attitude debug output OFF.\r\n");
}
}
/*****************************************************************************************
* Function: DebugCmdSignal
* Description: 信号质量查询
* Input: argc, 参数个数
argv, 参数列表
* Output: 无
* Description: 信号质量查询
* Input: argc, 参数个数
argv, 参数列表
* Output: 无
*****************************************************************************************/
static void DebugCmdSignal(int argc, char *argv[])
{
@@ -866,19 +917,51 @@ static void DebugCmdSignal(int argc, char *argv[])
}
SGCP.GWStatus = GW_STATUS_SIGNAL;
}
/*****************************************************************************************
* Function: DebugCmdAttTest
* Description: 姿态角测试输出
* Input: argc, 参数个数
* argv, 参数列表
* Output: 无
*****************************************************************************************/
static void DebugCmdAttTest(int argc, char *argv[])
{
DBG_LOG("\r\n");
if(argc < 2)
{
DBG_LOG("Debug Cmd: att on/off\r\n");
DBG_LOG(" att on --> Start attitude test output.\r\n");
DBG_LOG(" att off --> Stop attitude test output.\r\n\r\n");
return;
}
if(strcmp(argv[1], "on") == 0) {
App.AttTestMode = true;
App.AttTestCnt = 1000;
DBG_LOG("Attitude test started.\r\n");
}
else if(strcmp(argv[1], "off") == 0) {
App.AttTestMode = false;
DBG_LOG("Attitude test stopped.\r\n");
}
else {
DBG_LOG("Usage: att on/off\r\n");
}
}
void DebugCmdHelp(int argc, char *argv[])
{
DBG_LOG("\r\n");
char Data[10];
uint8_t len = 0;
char *argv1[10]; // 最多10个参数,按需调整
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, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -888,7 +971,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("main ?\0");
memcpy(Data, "main ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -898,7 +981,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("data ?\0");
memcpy(Data, "data ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -908,7 +991,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("mac ?\0");
memcpy(Data, "mac ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -918,7 +1001,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("reg ?\0");
memcpy(Data, "reg ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -928,7 +1011,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("up ?\0");
memcpy(Data, "up ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -938,7 +1021,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("coll ?\0");
memcpy(Data, "coll ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -948,7 +1031,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("rs485 ?\0");
memcpy(Data, "rs485 ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++){
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -958,7 +1041,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("lora ?\0");
memcpy(Data, "lora ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) {
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -968,7 +1051,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("lpcfg ?\0");
memcpy(Data, "lpcfg ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) {
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -978,7 +1061,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("laser ?\0");
memcpy(Data, "laser ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) {
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -988,7 +1071,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("res ?\0");
memcpy(Data, "res ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) {
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -1008,7 +1091,7 @@ void DebugCmdHelp(int argc, char *argv[])
memset(Data, 0x00, 10);
len = strlen("reboot ?\0");
memcpy(Data, "reboot ?\0", len);
token = strtok(Data, " "); // 假设分隔符是空格
token = strtok(Data, " "); // 假设分隔符是空格
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) {
argv1[argc1] = token;
token = strtok(NULL, " ");
@@ -1023,7 +1106,16 @@ void DebugCmdHelp(int argc, char *argv[])
argv1[argc1] = token;
token = strtok(NULL, " ");
}
DebugCmdSignal(argc1, argv1);
memset(Data, 0x00, 10);
len = strlen("att ?\0");
memcpy(Data, "att ?\0", len);
token = strtok(Data, " ");
for(argc1 = 0; (token != NULL && argc1 < 10); argc1++) {
argv1[argc1] = token;
token = strtok(NULL, " ");
}
DebugCmdAtt(argc1, argv1);
}
const DBGFunType DebugFun[DEBUG_CMD_CNT] = {
@@ -1042,6 +1134,7 @@ const DBGFunType DebugFun[DEBUG_CMD_CNT] = {
"res", DebugCmdRestoreFactory,
"dch", DebugCmdChannel,
"reboot", DebugCmdReboot,
"att", DebugCmdAtt,
"sig", DebugCmdSignal,
};
#endif