物联网操作系统HelloX应用编程指南

  PrintLine(strHelpTitle); //Print out the help informationline by line.

  PrintLine(strHelpVer);

  PrintLine(strHelpMem);

  PrintLine(strHelpSysInfo);

  PrintLine(strSysName);

  PrintLine(strHelpHelp);

  PrintLine(strSupport);

  PrintLine(strTime);

  PrintLine(strRunTime);

  PrintLine(strIoCtrlApp);

  PrintLine(strSysDiagApp);

  PrintLine(strFsApp);

  PrintLine(strNetApp);

  PrintLine(strFdiskApp);

  PrintLine(strLoadappApp);

  PrintLine(strGUIApp);

  #ifdef __CFG_APP_JVM

  PrintLine(strJvmApp);

  #endif //__CFG_APP_JVM

  PrintLine(strReboot);

  PrintLine(strCls);

  return S_OK;

  }

  需要注意的是,不仅仅要增加一个LPSTR(char*)类型的字符串定义,还要在下面增加对应的PrintLine输出,否则不会有信息书出来。

  完成上述三个步骤之后,重新编译HelloX内核,然后用最新的内核引导计算机。进入shell后,执行help命令,应该可以看到新增加的外部命令了。输入对应的外部命令字符串,即可看到外部命令的执行结果。

  实际上,外部命令的复杂之处,主要还是在于如何处理用户输入,以及如何根据用户的输入,调用对应的子命令处理函数。HelloX实现了很多外部命令,比如本文讲到的network命令,系统诊断sysdiag命令,输入输出控制ioctrl命令,以及文件系统操作命令fs等。开发者可以在这些外部实现的基础上,利用已有的框架,修改特定的部分即可。比如,对于外部命令的入口函数,可以直接在现有的基础上,修改一下函数名。对于子命令处理函数,可以根据需要,进行修改或定义。完成后,要增加到本地子命令映射数组中。比如network命令的子命令映射数组如下:

  static struct __NETWORK_CMD_MAP{

  LPSTR lpszCommand;

  DWORD (*CommandHandler)(__CMD_PARA_OBJ*);

  LPSTR lpszHelpInfo;

  }SysDiagCmdMap[] = {

  {"iflist", iflist, " iflist : Show all network interface(s) insystem."},

  {"ping", ping, " ping : Check a specifiedhost's reachbility."},

  {"route", route, " route : List all route entry(ies) insystem."},

  {"exit", _exit, " exit : Exit theapplication."},

  {"help", help, " help : Print out thisscreen."},

  {"showint", showint, " showint : Display ethernet interface's statisticsinformation."},

  {"assoc", assoc, " assoc : Associate to a specified WiFiSSID."},

  {"scan", scan, " scan : Scan WiFi networks andshow result."},

  {"setif", setif, " setif : Set IP configurations to a giveninterface."},

  {NULL, NULL, NULL}

  };

  数组元素的第一个参数,就是子命令字符串,第二个参数,是该子命令的处理函数。最后一个字符串信息,则是该子命令的帮助信息。在外部命令提示符下,输入help,就会显示出所有可用的子命令帮助信息。

  开发者可以在此基础上,根据自己的实现,修改或删除特定的映射表项即可。

  需要注意的是,为了确保整体代码的整洁,建议外部命令的组织,遵循下列原则:

  1. 所有新增外部命令的代码,放在一个新创建的代码文件中,不要与现有的shell源文件放在一起;

 

  2. 新增加的外部命令源文件,放在shell目录下。