9)resetの追加
helloを改造して、CLIコマンドにリセットを追加してみよう。
CLIコマンドを追加するには
(1)CLIタスクヘッダーファイルの参照
(2)CLIコマンドハンドラの関数プロトタイプの追加
(3)コマンド宣言配列 cliCmdDefs[] の追加
・配列の内容
a)コマンドハンドラへのポインタ
b)コマンド名
c)ヘルプテキスト
d)ユーザーレベル
(4)CLIタスクの初期化
(5)CLIコマンドハンドラ関数の追加
が必要である。
それではhello_app.cを編集してみよう。
hello_app.cを別名で保管しバックアップしておく。(例えばhello_app_org.c)
(1)CLIタスクヘッダーファイルの参照
ヘッダーファイル"cli_task.h"の#includeを追加する。
CLIコマンドを追加するには
(1)CLIタスクヘッダーファイルの参照
(2)CLIコマンドハンドラの関数プロトタイプの追加
(3)コマンド宣言配列 cliCmdDefs[] の追加
・配列の内容
a)コマンドハンドラへのポインタ
b)コマンド名
c)ヘルプテキスト
d)ユーザーレベル
(4)CLIタスクの初期化
(5)CLIコマンドハンドラ関数の追加
が必要である。
それではhello_app.cを編集してみよう。
hello_app.cを別名で保管しバックアップしておく。(例えばhello_app_org.c)
(1)CLIタスクヘッダーファイルの参照
ヘッダーファイル"cli_task.h"の#includeを追加する。
#include "dn_common.h"
#include "dn_exe_hdr.h"
#include "dnm_ucli.h"
#include "dnm_local.h"
#include "app_task_cfg.h"
#include "Ver.h"
#include "cli_task.h"
(2)CLIコマンドハンドラの関数プロトタイプの追加
prototypesの下の適当な場所に追加する。
//=========================== prototypes ======================================
//===== locNotifTask
static void locNotifTask(void* unused);
//===== CLI handlers
dn_error_t cli_resetCmdHandler(char const* arg, INT32U len);
(3)コマンド宣言配列 cliCmdDefs[] の追加
追加するresetコマンドの宣言をさらにその下に追加する。
//===== CLI handlers
dn_error_t cli_resetCmdHandler(char const* arg, INT32U len);
//=========================== const ===========================================
const dnm_ucli_cmdDef_t cliCmdDefs[] = {
{&cli_resetCmdHandler, "reset", "", DN_CLI_ACCESS_LOGIN},
{NULL, NULL, NULL, DN_CLI_ACCESS_NONE},
};
(4)CLIタスクの初期化
p2_init関数の先頭あたりにCLIタスクの初期化関数を追加する。
int p2_init(void) {
INT8U osErr;
//==== initialize helper tasks
cli_task_init(
"hello", // appName
cliCmdDefs // cliCmds
);
また、CLIポートのopenはコメントアウトしておく。
// open CLI port
// dnErr = dnm_ucli_openPort(DN_CLI_PORT_C0, DEFAULT_BAUDRATE);
// ASSERT(dnErr==DN_ERR_NONE);
(5)CLIコマンドハンドラ関数の追加
cli_resetCmdHandleの関数をinstall a kernel headerの手前あたりに挿入する。
//=========================== CLI handlers ====================================
dn_error_t cli_resetCmdHandler(char const* buf, INT32U len) {
INT8U rc;
dnm_ucli_printf("Resetting...\r\n\n");
OSTimeDly(500);
// send reset to stack
dnm_loc_resetCmd(&rc);
return(rc);
}
//=============================================================================
//=========================== install a kernel header =========================
//=============================================================================
以上でソースファイルの編集は終了だ。
hello_app.cに上書き保存してEWARMでビルドしてみよう。
いくつかワーニングが出るかもしれない。
ocfdk_00_hello.binをESPで書き込み、動作を確認しよう。
メインだけ書き直せばよいので、私は以下のようなbatを作成した。
esp -e 1000 237
esp -P ocfdk_00_hello.bin 1000
書き込みがうまくいったら、ターミナルソフトを立ち上げてCLIに接続する。
Enterを押したら > が返ってくるだろうか?
よさげなら help と打ってみよう。
上図のようにCLIコマンドのリストが表示され、リストの最後に"reset"が追加されているはずだ。
それでは reset と打ってみよう。
Resetting... と表示され、しばらくするとモジュールが再起動する。
最初の"hello"は(4)CLIタスクの初期化 のcli_task_init関数のappNameパラメータの"hello"で、ここを書き換えれば変更できる。
Ver 1.2.0.2 はOCSDKのリリース番号である。
以上と同じ手順で、お好みのCLIコマンドをあなたのアプリケーションに追加することができる。
コメント
コメントを投稿