OSDN Git Service

\e$B=t!9$NF0:n3NG'MQ$K$A$g$S$C$H99?7!#\e(B
[uzume/uzume_bfin.git] / uzumeapp / kernel / uzume / cmd_bluetank.c
1 /**
2  * @file cmd_bluetank.c
3  * @author Shinichiro Nakamura
4  * @brief bluetankコマンドの実装。
5  * @details
6  */
7
8 #include "cmd.h"
9 #include "ntlibc.h"
10
11 /**
12  * @brief コマンドテーブル定義構造体。
13  */
14 typedef struct {
15     /**
16      * @brief コマンド第1引数。
17      */
18     char *command;
19     /**
20      * @brief コマンド説明文。
21      */
22     char *description;
23     /**
24      * @brief コマンド第1引数が合致する場合に呼び出す関数。
25      */
26     void (*function)(cmd_env_t *env, int argc, char **argv);
27 } cmdtbl_t;
28
29 static void cmd_audio(cmd_env_t *env, int argc, char **argv);
30 static void cmd_system(cmd_env_t *env, int argc, char **argv);
31 static void cmd_help(cmd_env_t *env, int argc, char **argv);
32
33 /**
34  * @brief コマンドテーブルの実装。
35  */
36 static const cmdtbl_t cmdtbl[] = {
37     {   "audio",    "Audio commands.",  cmd_audio   },
38     {   "system",   "System commands.", cmd_system  },
39     {   "help",     "Help commands.",   cmd_help    },
40     {   0,          0,                  0           }
41 };
42
43 /**
44  * @brief コマンド関数。
45  * @details
46  * ntshell_taskを使用するBSPは、cmd_executeの実装を提供する。
47  * VT100のシーケンスコード解釈や環境設定は上位で行われている。
48  *
49  * @param env コマンド環境構造体。
50  * @param argc パラメータ数。
51  * @param argv パラメータ。
52  */
53 void cmd_execute(cmd_env_t *env, int argc, char **argv)
54 {
55     cmdtbl_t *p = (cmdtbl_t *)&cmdtbl[0];
56     while (p->command != 0) {
57         if (ntlibc_strcmp((const char *)argv[0], p->command) == 0) {
58             p->function(env, argc, argv);
59             return;
60         }
61         p++;
62     }
63     ntstdio_printf(CMD_NTSTDIO(env), "help: display help.\n");
64 }
65
66 /**
67  * @brief audioコマンド関数。
68  *
69  * @param env コマンド環境構造体。
70  * @param argc パラメータ数。
71  * @param argv パラメータ。
72  */
73 static void cmd_audio(cmd_env_t *env, int argc, char **argv)
74 {
75     /*
76      * [0]:audio, [1]:volume
77      */
78     if (argc > 1) {
79         if (ntlibc_strcmp(argv[1], "volume") == 0) {
80             static int volume = 0;  /**< @todo remove this variable. */
81             switch (argc) {
82                 case 2:
83                     // @todo Get current volume from the system.
84                     ntstdio_printf(CMD_NTSTDIO(env), "%d\n", volume);
85                     break;
86                 case 3:
87                     // @todo Set the given volume to the system.
88                     volume = ntlibc_atoi(argv[2]);
89                     ntstdio_printf(CMD_NTSTDIO(env), "%d\n", volume);
90                     break;
91             }
92             return;
93         }
94     }
95
96     ntstdio_printf(CMD_NTSTDIO(env), "audio volume [value]\n");
97 }
98
99 /**
100  * @brief systemコマンド関数。
101  *
102  * @param env コマンド環境構造体。
103  * @param argc パラメータ数。
104  * @param argv パラメータ。
105  */
106 static void cmd_system(cmd_env_t *env, int argc, char **argv)
107 {
108     /*
109      * [0]:system, [1]:board
110      */
111     if (argc > 1) {
112         if (ntlibc_strcmp(argv[1], "board") == 0) {
113             switch (argc) {
114                 case 2:
115                     ntstdio_printf(CMD_NTSTDIO(env), "BlueTank\n");
116                     break;
117             }
118             return;
119         }
120
121         /*
122          * [0]:system, [1]:version
123          */
124         if (ntlibc_strcmp(argv[1], "version") == 0) {
125             switch (argc) {
126                 case 2:
127                     ntstdio_printf(CMD_NTSTDIO(env), "0.0.1\n");
128                     break;
129             }
130             return;
131         }
132     }
133
134     ntstdio_printf(CMD_NTSTDIO(env), "system board\n");
135     ntstdio_printf(CMD_NTSTDIO(env), "system version\n");
136 }
137
138 /**
139  * @brief helpコマンド関数。
140  *
141  * @param env コマンド環境構造体。
142  * @param argc パラメータ数。
143  * @param argv パラメータ。
144  */
145 static void cmd_help(cmd_env_t *env, int argc, char **argv)
146 {
147     cmdtbl_t *p = (cmdtbl_t *)&cmdtbl[0];
148     while (p->command != 0) {
149         ntstdio_printf(CMD_NTSTDIO(env), "%s\t%s\n", p->command, p->description);
150         p++;
151     }
152 }
153