(一)技巧—— 人机交互

  • 2019 年 10 月 24 日
  • 筆記

  在实际项目中,会有很多信息,如设备基本信息,协议信息,网络配置等等,这些信息我们可以通过DEBUG宏来开启或者关闭不同的Debug信息,当我们需要设置模块某些参数的时候,我们可以通过动态输入,而不是直接在程序中写死,大大方便了我们调试设备,我们可以实行两种方案:1.串口接收 2.HTML通过socket配置 。由于第二种方式需要设备必须连接网线,所以我们今天来讲解记录一下第一种人机交互方式——-串口

 1 #include <stdio.h>   2 #include <string.h>   3 #include <stdlib.h>   4   5 #define TCLX_PLATFORM_DIAG(x) do {printf x;} while(0)   6   7 void set(void *pbyData)   8 {   9     TCLX_PLATFORM_DIAG(("set function:%srn",(char*)pbyData));  10 }  11 void reboot(void *pbyData)  12 {  13     TCLX_PLATFORM_DIAG(("reboot function:%srn",(char*)pbyData));  14 }  15 void show(void *pbyData)  16 {  17     uint8_t byIndex = atoi(pbyData);  18     switch(byIndex)  19     {  20         case 0:break;  21         case 1:break;  22         case 2:break;  23         default:break;  24     }  25     TCLX_PLATFORM_DIAG(("show function:%srn",(char*)pbyData));  26 }  27  28 typedef struct command  29 {  30     char *name;  31     char *explain;  32     void (*function)(void*);  33  34 }command;  35  36 void dealCommand(char *pbyData)  37 {  38      static command Commands[] = {  39     {"show","-0:all,-1:protocol,-2:Device,-3:NetInfo",set},  40     {"reboot","-0:Reboot,-1:Reboot App1,-2:Reboot App2",reboot},  41     {"set","-set:did=*&;dhcp=*;mac=*.*.*.*.*.*;lip=*.*.*.*;sub=*.*.*.*;gtw=*.*.*.*;dns=*.*.*.*;",set},  42     };  43  44     if(pbyData == NULL) return;  45     char byIndex = 0;  46     bool bIshelp = strcmp(pbyData,"help");  47     for(byIndex = 0; byIndex < (sizeof(Commands) / sizeof(command));byIndex ++)  48     {  49         if(bIshelp == 0)  50         {  51             TCLX_PLATFORM_DIAG(("%2d.%s:[%s]rn",byIndex + 1,Commands[byIndex].name,Commands[byIndex].explain));  52         }  53         else  54         {  55             if(0 == strncmp(pbyData,Commands[byIndex].name,strlen(Commands[byIndex].name)))  56             {  57                 Commands[byIndex].function(pbyData + strlen(Commands[byIndex].name) + sizeof(':'));  58             }  59         }  60  61     }  62  63 }

 

以上寥寥几行代码就能将项目所需的debug信息输出出来,若支持多个APP还可以从不同的分区启动程序,还可以将设备的配置信息通过串口解析到设备中并重启。如set:llip=192.168.100.101;esip1=120.192.58.188;ept1=6000;nsip1=120.192.58.188;npt1=6000;