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を追加する。

#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コマンドをあなたのアプリケーションに追加することができる。

変更後のソースをこちらに置きました。

コメント

このブログの人気の投稿

13)こんどはI2Cで

12)非同期パルス

2)OnChipSDKとは