セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-11-14 現在

設定ビヘイビアによる設定インタフェース

インタラクティブモードの抽象化レイヤ
設定ビヘイビアは、インタラクティブモードによる設定CUIを利用するためのビヘイビアです。設定のためのインタフェースはシリアルポートの入出力により行います。TWELITE STAGE APP / TeraTerm / screen などのターミナルソフトウェアを利用した対話型の設定が可能です。

1 - <STG_STD>

最小限の設定ビヘイビア
<STG_STD> は、最小限の設定項目を有した設定ビヘイビアです。
               設定画面例
[CONFIG/MY_APP:0/SID=8102ECE3]
a: (0x1234ABCD) Application ID [HEX:32bit]
i: (         1) Device ID [1-100,etc]
c: (        13) Channel [11-26]
o: (0x00000000) Option Bits [HEX:32bit]

 [ESC]:Back [!]:Reset System [M]:Extr Menu

使用法

登録

// use twelite mwx c++ template library
##include <TWELITE>
##include <NWK_SIMPLE>
##include <STG_STD> // interactive mode

上記のように #include <STG_STD> を追加します。

setup() による読み出し

uint32_t APP_ID;
uint8_t CHANNEL;
uint8_t LID;

void setup() {
   ...
   auto&& set = the_twelite.settings.use<STG_STD>();

   // call reload() before reading values.
   set.reload();

   // read value
   APP_ID = set.u32appid();
   CHANNEL = set.u8ch();
   LID = set.u8devid();

   // apply them
	 the_twelite
		<< TWENET::appid(APP_ID)
		<< TWENET::channel(CHANNEL);

   auto&& nwk = the_twelite.network.use<NWK_SIMPLE>();
   nwk	<< NWK_SIMPLE::logical_id(LID);
}

多くの場合、設定の読み出しはsetup() 中の早い段階で行います。

上記の例はでは、まずthe_twelite.settings.use<STG_STD>()により設定ビヘイビアを登録します。

つぎにset.reload()を呼び出し、実際にEEPROMからデータを読み出し、これを解釈します。自動で読み出さないことに注意してください。

set.u32appid(), set.u8ch(), set.u8devid()は各々アプリケーションIDの設定値、チャネルの設定値、論理デバイスIDの設定値を取得しています。ここでは変数に各設定値を格納しています。

あとは、設定値を利用してアプリケーションIDやチャネルなどの値を反映します。

設定一覧

以下が設定IDの一覧(enum class E_STGSTD_SETID)定義です。

設定ID内容
APPIDアプリケーションID
LOGICALID論理デバイスID (8bit)
CHANNELチャネル
CHANNELS_3チャネル(3chまで)
POWER_N_RETRY出力とリトライ回数
OPTBITSOption 1
OPT_DWORD2Option 2
OPT_DWORD3Option 3
OPT_DWORD4Option 4
ENC_MODE暗号化モード
ENC_KEY_STRING暗号化キー(文字列入力)

<STG_STD>では、代表的な設定と自由に使える32bit値を4つ定義されています。これらは、ユーザが自由に利用できます。

設定ビヘイビアのカスタマイズ

設定ビヘイビアのカスタマイズは.reload()を行う前に全項目を行っておきます。

アプリケーション名

	auto&& set = the_twelite.settings.use<STG_STD>();
	set << SETTINGS::appname("MY_APP");
	...
	set.reload();

アプリケーション名はインタラクティブモードの先頭行に表示されます。

[CONFIG/MY_APP:0/SID=8102ECE3]

文字列ポインタを指定してください。内部でコピーを作らないようにしているため、ローカル変数を指定できません。

デフォルト値

	auto&& set = the_twelite.settings.use<STG_STD>();
	set << SETTINGS::appid_default(0x13579be);
	set << SETTINGS::ch_default(18);
	set << SETTINGS::lid_default(7);
		...
	set.reload();

アプリケーションID、周波数チャネル、論理デバイスID(LID)については、デフォルト値を変更できます。

複数チャネル設定メニュー

	auto&& set = the_twelite.settings.use<STG_STD>();
	set << SETTINGS::ch_multi();
	...
	set.reload();

SETTINGS::ch_multi() を指定すると、チャネル設定が複数指定になります。複数設定を行う場合、設定値の読み出しは.u32chmask()を用います。

すぐに設定画面を表示する

auto&& set = the_twelite.settings.use<STG_STD>();
	set << SETTINGS::open_at_start();
	...
	set.reload();

アプリケーションID、チャネル、論理IDについては、デフォルト値を変更できます。

項目名、詳細の記述内容の変更

const TWESTG_tsMsgReplace SET_MSGS[] = {
	{ int(E_STGSTD_SETID::OPTBITS),    "オプション1",
			"オプション1を設定してください" },
	{ int(E_STGSTD_SETID::OPT_DWORD2), "オプション2",
			"オプション2を設定してください\r\nオプション2は云々" },
	{ 0xFF } // terminator
};

setup() {
  auto&& set = the_twelite.settings.use<STG_STD>();
	set.replace_item_name_desc(SET_MSGS);
	...

項目名を別のモノに変更することが出来ます。上記の例ではUTF-8による日本語にしていますが、ターミナルの表示など条件がそろわないと適切には表示されません。

この配列は最後に { 0xFF } で終端します。

1番目のエントリは設定ID、2番目が項目名、3番目が設定入力時に表示される解説になります。\rにより改行できます。

現在設定画面かどうか判定

		auto&& set = the_twelite.settings.use<STG_STD>();
		if (!set.is_screen_opened()) {
		   // 設定画面が出ていないときの処理
		}

設定画面出力中にシリアルへの出力を行うと画面が崩れたりする原因になります。設定画面でないことを確認するには.is_screen_opened()で確認します。

項目の削除

auto&& set = the_twelite.settings.use<STG_STD>();
set.hide_items(E_STGSTD_SETID::OPT_DWORD3, E_STGSTD_SETID::OPT_DWORD4);

...
if(set.is_hidden(E_STGSTD_SETID::OPT_DWORD3) {
  ; // OPT_DWORD3は非表示
}

不要な項目の削除を行います。.hide_itemsは項目IDをパラメータとして(可変引数で複数指定可能)不要な項目を非表示にします。非表示項目かどうかは.is_hidden()により確認できます。

メソッド

reload()

	auto&& set = the_twelite.settings.use<STG_STD>();
	set << SETTINGS::appname(APP_NAME)
		  << SETTINGS::appid_default(DEF_APP_ID)
   		<< SETTINGS::open_at_start();

	set.reload();

設定を読み込みます。すべてのカスタマイズが終わってから実行します。

メソッド (データ読み出し)

データの読み出しは以下のメソッドを呼び出します。

メソッド内容
uint32_t u32appid()アプリケーションID
uint8_t u8devid()論理デバイスID
uint8_t u8ch()設定チャネル (11..26)
uint32_t u32chmask()チャネル設定マスク (ビットマスクで指定、13 なら 1UL « 13 にビットを設定する)
uint8_t u8power()出力設定 (0..3)
uint8_t u8retry()リトライ数
uint32_t u32opt1()オプション1
uint32_t u32opt2()オプション2
uint32_t u32opt3()オプション3
uint32_t u32opt4()オプション4
uint8_t u8encmode()暗号化モード (0: なし 1: 有効 2: 有効、平文パケットも表示する)
const uint8_t * u8enckeystr()暗号化キーの取得

設定の反映

the_twelite<NWK_SIMPLE>オブジェクトに対して、本オブジェクトを用いて直接設定を反映できます。

auto&& set = the_twelite.settings.use<STG_STD>();
...
set.reload(); //ここで実際に設定がEEPROMより読み出される

the_twelite << set; // 設定値の反映 (APPIDなど)

auto&& nwk = the_twelite.network.use<NWK_SIMPLE>();

nwk << set; // 設定値の反映 (LIDなど)

反映される設定値は以下となります。.hide_items()により非表示になっている項目は反映しません。

対象項目ID内容
the_tweliteAPPIDTWENET::appid(値)に反映されます。
CHANNELTWENET::channel(値)に反映されます。※ SETTINGS::ch_multi() を指定したときは反映されません
CHANNELS_3TWENET::chmask(値)による設定を行います。※ SETTINGS::ch_multi() を指定したときのみ、チャネルマスクとして反映されます。
POWER_N_RETRYTWENET::tx_power(値)TWENET::mac_retry_count(値)による設定を行います。注: &#x3C;NWK_SIMPLE>での再送設定も同じ値を参照します。
<NWK_SIMPLE>LOGICALIDNWK_SIMPLE::logical_id(LID)による設定を行います。
POWER_N_RETRYNWK_SIMPLE::repeat_max(LID)による設定を行います。

項目ID

.hide_items()などで項目IDを指定する場合があります。この項目IDはenum class E_STGSTD_SETIDで定義されてます。

E_STGSTD_SETID::内容
APPIDアプリケーションID
LOGICALID論理ID(0..100)
CHANNELチャネル
CHANNELS_3チャネル(複数指定)
POWER_N_RETRY出力とリトライ設定
OPTBITSオプションビット
UARTBAUDUARTのボーレート設定
OPT_DWORD2オプションビット2
OPT_DWORD3オプションビット3
OPT_DWORD4オプションビット4
ENC_MODE暗号化モード
ENC_KEY_STRING暗号化キー

Extra Menu

[ROOT MENU/BAT1/SID=810B645E]
0: CONFIG
1: EEPROM UTIL
2: H/W UTIL

 [ESC]:Back [!]:Reset System

Mキーを入力すると追加メニューにアクセスできます。

  • CONFIG : 設定画面に戻ります
  • EEPROM UTIL : EEPROMのメンテナンスを行うためのメニューです
  • H/W UTIL : ハードウェアの状態を調べるためのメニューです

EEPROM UTIL

[EEPROM UTIL/BAT1/SID=810B645E]
r: Read sector.
R: Read ALL sectors.
e: Erase sector.
E: Erase ALL sectors.

 [ESC]:Back [!]:Reset System [M]:Extr Menu

セクターの読み出し、削除を行います。全読み出し、全消去を行うときは大文字で “YES” の3文字を入力します。

H/W UTIL

[H/W UTIL/BAT1/SID=810B645E]

現バージョンでは機能は提供されません。