Contiki 3.0: 自定义添加Shell指令

来源:互联网 发布:内网端口映射软件 编辑:程序博客网 时间:2024/05/17 00:11
Shell是contiki系统所提供的一个十分方便的指令处理系统,通过shell可以做到各方面的操作控制与信息汲取,并且contiki支持自定义添加shell指令。

这里以添加一个login指令来演示如何添加一条自定义指令,先从最简单的传单个参数开始,指令设计暂定为
login :输入密码,如果匹配则完成登录否则提示失败。


0.建立两个文件分别为login-ban.h和login-ban.c

1.头文件

先写login-ban.c,这里主要包含有contiki系统定义头文件,我们自己创建的头文件,c语言标准库头文件和字符串处理头文件,shell指令库头文件
#include "contiki.h"
#include "login-ban.h"
#include
#include
#include "shell.h"

2.进程和指令的声明

PROCESS(shell_login_process, "loginprocess");
这一条函数注册我们执行指令的线程,当执行shell指令时候会启动

SHELL_COMMAND(login_command,
   "login",
    "login :login current system",
   &shell_login_process);


SHELL_COMMAND是我们所设计指令的结构,参数分别为shell指令的存储名称,shell指令的呼叫名称,shell指令的解释,shell指令执行进程(起始地址)。shell指令解释会在helplist中打印出来。


3.指令的注册

void shell_login_init(void)
{
   shell_register_command(&login_command);
}


这一个函数会注册刚才设置的指令到contiki系统中,使其能在命令提示下被呼叫

4.login线程

PROCESS_THREAD(shell_login_process, ev, data)
{
char *name;
    intfd;
    char*default_password="user";
   PROCESS_BEGIN();
    name =data;
    if(name==NULL)//判断传入的数据是否为空,如果是就显示指令的说明
    {
      shell_output_str(&login_command,
          "login :login current system","");
      PROCESS_EXIT();
    }
   if(strcmp(name,default_password)==0)//利用strcmp函数来比较自定义密码和传入的密码是否一致
    {
      shell_output_str(&login_command,
          "Loginsucceed", "");
    }
    else
    {
      shell_output_str(&login_command,
          "ERROR:Loginfailed", "");
    }
   PROCESS_END();
}

这里有一个函数shell_output_str主要是调用shell指令进程进行输出,本身shell指令是一个进程,如果用printf则仅仅是串口输出,在远端登录shell时候是无法看到的。


5.头文件与调用

login-pan.h头文件中只有一个函数的声明
void shell_login_init(void);

完成这些后,在我们的主函数中执行shell_login_init就可以了。

编译要记得Makefile文件中加上
PROJECT_SOURCEFILES+=login-pan.c


0 0