M
M
MWX Library
検索…
<STG_STD>
<STG_STD> は、最小限の設定項目を有した設定ビヘイビアです。
1
               設定画面例
2
[CONFIG/MY_APP:0/SID=8102ECE3]
3
a: (0x1234ABCD) Application ID [HEX:32bit]
4
i: ( 1) Device ID [1-100,etc]
5
c: ( 13) Channel [11-26]
6
o: (0x00000000) Option Bits [HEX:32bit]
7
8
[ESC]:Back [!]:Reset System [M]:Extr Menu
Copied!
このビヘイビアはSerialオブジェクトの入出力をフックし、インタラクティブモードでの画面入出力を行います。アプリケーション中で入力処理を明示的に記述する必要はありません。インタラクティブモード画面中のアプリケーションからの画面出力は抑制されます。
M キーを入力すると、補助機能にアクセスできます。機能は末尾の Extra Menu 項目を参照ください。

使用法

登録

1
// use twelite mwx c++ template library
2
#include <TWELITE>
3
#include <NWK_SIMPLE>
4
#include <STG_STD> // interactive mode
Copied!
上記のように #include <STG_STD> を追加します。

setup() での読み出し

1
uint32_t APP_ID;
2
uint8_t CHANNEL;
3
uint8_t LID;
4
5
void setup() {
6
...
7
auto&& set = the_twelite.settings.use<STG_STD>();
8
9
// call reload() before reading values.
10
set.reload();
11
12
// read value
13
APP_ID = set.u32appid();
14
CHANNEL = set.u8ch();
15
LID = set.u8devid();
16
17
// apply them
18
the_twelite
19
<< TWENET::appid(APP_ID)
20
<< TWENET::channel(CHANNEL);
21
22
auto&& nwk = the_twelite.network.use<NWK_SIMPLE>();
23
nwk << NWK_SIMPLE::logical_id(LID);
24
}
Copied!
多くの場合、設定の読み出しはsetup() 中の早い段階で行います。
上記の例はでは、まずthe_twelite.settings.use<STG_STD>()により設定ビヘイビアを登録します。
登録直後に、デフォルトのアプリケーションIDを変更するなど設定ビヘイビアの変更を行うことができますが、これは後述します。
つぎに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
出力とリトライ回数
OPTBITS
Option 1
OPT_DWORD2
Option 2
OPT_DWORD3
Option 3
OPT_DWORD4
Option 4
ENC_MODE
暗号化モード
ENC_KEY_STRING
暗号化キー(文字列入力)
<STG_STD>では、代表的な設定と自由に使える32bit値を4つ定義されています。これらは、ユーザが自由に利用できます。
    STG_STD>から読み出すだけでは設定は反映されません。
    不要な項目を非表示にできます。
    項目名や項目詳細を変更できます。

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

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

アプリケーション名

1
auto&& set = the_twelite.settings.use<STG_STD>();
2
set << SETTINGS::appname("MY_APP");
3
...
4
set.reload();
Copied!
アプリケーション名はインタラクティブモードの先頭行に表示されます。
1
[CONFIG/MY_APP:0/SID=8102ECE3]
Copied!
文字列ポインタを指定してください。内部でコピーを作らないようにしているため、ローカル変数を指定できません。

デフォルト値

1
auto&& set = the_twelite.settings.use<STG_STD>();
2
set << SETTINGS::appid_default(0x13579be);
3
set << SETTINGS::ch_default(18);
4
set << SETTINGS::lid_default(7);
5
...
6
set.reload();
Copied!
アプリケーションID、チャネル、論理ID(LID)については、デフォルト値を変更できます。

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

1
auto&& set = the_twelite.settings.use<STG_STD>();
2
set << SETTINGS::ch_multi();
3
...
4
set.reload();
Copied!
SETTINGS::ch_multi() を指定すると、チャネル設定が複数指定になります。複数設定を行う場合、設定値の読み出しは.u32chmask()を用います。

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

1
auto&& set = the_twelite.settings.use<STG_STD>();
2
set << SETTINGS::open_at_start();
3
...
4
set.reload();
Copied!
アプリケーションID、チャネル、論理IDについては、デフォルト値を変更できます。

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

1
const TWESTG_tsMsgReplace SET_MSGS[] = {
2
{ int(E_STGSTD_SETID::OPTBITS), "オプション1",
3
"オプション1を設定してください" },
4
{ int(E_STGSTD_SETID::OPT_DWORD2), "オプション2",
5
"オプション2を設定してください\r\nオプション2は云々" },
6
{ 0xFF } // terminator
7
};
8
9
setup() {
10
auto&& set = the_twelite.settings.use<STG_STD>();
11
set.replace_item_name_desc(SET_MSGS);
12
...
Copied!
項目名を別のモノに変更することが出来ます。上記の例ではUTF-8による日本語にしていますが、ターミナルの表示など条件がそろわないと適切には表示されません。
TWELITE STAGEの場合、登録フォントの文字数を減らしている場合は、表示されない文字が出てくるかもしれません。必要な文字列が含まれるよう、再ビルドしてください。
この配列は最後に { 0xFF } で終端します。
1番目のエントリは設定ID、2番目が項目名、3番目が設定入力時に表示される解説になります。\r\nにより改行できます。

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

1
auto&& set = the_twelite.settings.use<STG_STD>();
2
if (!set.is_screen_opened()) {
3
// 設定画面が出ていないときの処理
4
}
Copied!
設定画面出力中にシリアルへの出力を行うと画面が崩れたりする原因になります。設定画面でないことを確認するには.is_screen_opened()で確認します。

項目の削除

1
auto&& set = the_twelite.settings.use<STG_STD>();
2
set.hide_items(E_STGSTD_SETID::OPT_DWORD3, E_STGSTD_SETID::OPT_DWORD4);
3
4
...
5
if(set.is_hidden(E_STGSTD_SETID::OPT_DWORD3) {
6
; // OPT_DWORD3は非表示
7
}
Copied!
不要な項目の削除を行います。.hide_itemsは項目IDをパラメータとして(可変引数で複数指定可能)不要な項目を非表示にします。非表示項目かどうかは.is_hidden()により確認できます。
アプリケーションID,チャネル,論理ID(LID)の3種類は削除できません。
非表示設定は内部のワークメモリを使用します。最小限のメモリ容量(32バイト)としているため、非表示項目を多数設定する場合、メモリ不足で非表示にならない場合があります。ワークメモリの容量はコンパイル引数として-DSIZE_SETSTD_CUST_COMMON=48のように指定できます。

メソッド

reload()

1
auto&& set = the_twelite.settings.use<STG_STD>();
2
set << SETTINGS::appname(APP_NAME)
3
<< SETTINGS::appid_default(DEF_APP_ID)
4
<< SETTINGS::open_at_start();
5
6
set.reload();
Copied!
設定を読み込みます。すべてのカスタマイズが終わってから実行します。

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

データの読み出しは以下のメソッドを呼び出します。
読み出し前に必ず.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()
暗号化キーの取得
内部では、構造体配列を線形探索して設定IDに合致する設定構造体を探索しており、オーバーヘッドがあります。頻繁に参照される設定値は一旦別の変数にコピーして使用してください。

設定の反映

the_twelite<NWK_SIMPLE>オブジェクトに対して、本オブジェクトを用いて直接設定を反映できます。
1
auto&& set = the_twelite.settings.use<STG_STD>();
2
...
3
set.reload(); //ここで実際に設定がEEPROMより読み出される
4
5
the_twelite << set; // 設定値の反映 (APPIDなど)
6
7
auto&& nwk = the_twelite.network.use<NWK_SIMPLE>();
8
9
nwk << set; // 設定値の反映 (LIDなど)
10
Copied!
反映される設定値は以下となります。.hide_items()により非表示になっている項目は反映しません。
対象
項目ID
内容
the_twelite
APPID
TWENET::appid(値)に反映されます。
CHANNEL
TWENET::channel(値)に反映されます。
※ SETTINGS::ch_multi() を指定したときは反映されません
CHANNELS_3
TWENET::chmask(値)による設定を行います。
※ SETTINGS::ch_multi() を指定したときのみ、チャネルマスクとして反映されます。
POWER_N_RETRY
TWENET::tx_power(値)TWENET::mac_retry_count(値)による設定を行います。
注: <NWK_SIMPLE>での再送設定も同じ値を参照します。
<NWK_SIMPLE>
LOGICALID
NWK_SIMPLE::logical_id(LID)による設定を行います。
POWER_N_RETRY
NWK_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
オプションビット
UARTBAUD
UARTのボーレート設定
OPT_DWORD2
オプションビット2
OPT_DWORD3
オプションビット3
OPT_DWORD4
オプションビット4
ENC_MODE
暗号化モード
ENC_KEY_STRING
暗号化キー

Extra Menu

1
[ROOT MENU/BAT1/SID=810B645E]
2
0: CONFIG
3
1: EEPROM UTIL
4
2: H/W UTIL
5
6
[ESC]:Back [!]:Reset System
Copied!
Mキーを入力すると追加メニューにアクセスできます。
    CONFIG : 設定画面に戻ります
    EEPROM UTIL : EEPROMのメンテナンスを行うためのメニューです
    H/W UTIL : ハードウェアの状態を調べるためのメニューです

EEPROM UTIL

1
[EEPROM UTIL/BAT1/SID=810B645E]
2
r: Read sector.
3
R: Read ALL sectors.
4
e: Erase sector.
5
E: Erase ALL sectors.
6
7
[ESC]:Back [!]:Reset System [M]:Extr Menu
Copied!
セクターの読み出し、削除を行います。全読み出し、全消去を行うときは大文字で "YES" の3文字を入力します。

H/W UTIL

1
[H/W UTIL/BAT1/SID=810B645E]
Copied!
現バージョンでは機能は提供されません。
最終更新 1mo ago