TWENETstgs - twesettingsライブラリの解説を行います。
TWENETstgs - twesettingsライブラリ
このライブラリは主にインタラクティブモードにより設定処理を行うための諸関数が含まれます。
※ これらの関数はエンドユーザ向けの API としては公開していません。
セクションの複数ページをまとめています。 印刷またはPDF形式で保存...
このライブラリは主にインタラクティブモードにより設定処理を行うための諸関数が含まれます。
※ これらの関数はエンドユーザ向けの API としては公開していません。
本 TWENETstgs ではオープンソースによるprintfライブラリを利用した
fprintf
, vfprintf
, sprintf
相当関数を定義しています。
int TWE_fprintf(TWE_tsFILE *fp, const char *format, ...);
int TWE_vfprintf(TWE_tsFILE *fp, const char *format, va_list va);
#define TWE_snprintf(out,siz,fmt,...) snprintf_(out,siz,fmt,__VA_ARGS__)
///////////////////////////////////////////////////////////////////////////////
// \author (c) Marco Paland (info@paland.com)
// 2014-2019, PALANDesign Hannover, Germany
//
// \license The MIT License (MIT)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
// \brief Tiny printf, sprintf and snprintf implementation, optimized for speed on
// embedded systems with a very limited resources.
// Use this instead of bloated standard/newlib printf.
// These routines are thread safe and reentrant.
//
///////////////////////////////////////////////////////////////////////////////
TWESTG_CMD_u32CmdOp()
関数によるコマンド実行は、TWENETstgs ライブラリを利用し実装されたアプリケーション(ファームウェア)との共通的な手続きを提供するものですが、この情報はライブラリ内部の実装に関するもので、通常のユーザが使用することは想定していません。twesettings_cmd.[ch]
の TWESTG_CMD_u32CmdOp()
関数は、0xdb
コマンドの実行処理を行うことを想定している。この関数は、モジュールの諸情報の取得、設定情報の取得、設定情報の反映、リセットなどの処理が含まれる。多くの処理は設定関連の補助関数 TWEINTRCT_cbu32GenericHandler()
を呼び出すようになっている。
TWE_APIRET
は、0x80000000
のビットの有で成功、なしで失敗。残りの31ビットをパラメータとする。TWE_tsBuffer
はバッファへのポインタ、系列長、バッファ最大長を格納した構造体。TWESTG_tsFinal
は、設定関連の管理構造体。
TWE_APIRET TWESTG_CMD_u32CmdOp(uint8 u8Op, TWE_tsBuffer *pBufIn, TWE_tsBuffer *pBufOut, TWESTG_tsFinal *psFinal)
処理内容u8Op
に対応した処理を行う。処理によって入力データpBufIn
、出力データpBufOut
を用いる。最後のパラメータは設定管理構造体は psFinal
を指定する。
パラメータ | 型 | 処理 |
---|---|---|
u8Op | uint8 | 処理内容を指定する。 |
pBufIn | TWE_tsBuffer * | 入力系列。 |
pBufOut | TWE_tsBuffer * | 出力データの格納領域を指定する。処理によっては NULL 指定でも構わない。処理の失敗時の状態は原則未定義である。 |
psFinal | TWESTG_tsFinal * | 設定情報管理構造体を指定する。 |
u8Opの概要は以下である。
E_TWESTG_CMD_OP_ACK = 0xF0 ACK処理
E_TWESTG_CMD_OP_QUERY_MODULE_INFO = 0xF1 SIDなどの取得
E_TWESTG_CMD_OP_APPLY_SETTINGS = 0xF2 設定の反映(セーブはしない)
E_TWESTG_CMD_OP_QUERY_SETTINGS = 0xF3 設定の読出
E_TWESTG_CMD_OP_MODULE_CONTROL = 0xF8 設定関連の諸処理
E_TWESTG_CMD_OP_REVERT = 0xFD 設定を元に戻す
E_TWESTG_CMD_OP_SAVE = 0xFE 設定の保存
E_TWESTG_CMD_OP_DO_MDDULE_RESET = 0xFF, モジュールリセット
戻り値は成功・失敗を戻す。処理によってはパラメータが設定されることがある。
戻り値 | VALUE | 状況 |
---|---|---|
TWE_APIRET_SUCCESS | b0..b7 → u8Op、他は処理次第 | 成功時 |
TWE_APIRET_FAIL | b0..b7 → u8Op、他は処理次第 | 失敗時 |
ACK応答を行う。入力した系列をそのまま出力する。
(なし) -> 01 : 入力なしの場合は 01 が戻る
112233 -> 112233 : 112233の場合は、出力にそのまま戻る。
モジュールの諸情報を取得する。
入力列 | データ型 | 値 | 内容 |
---|---|---|---|
[0] | OCTET | 0x01 | モジュールのSIDを得る。 |
そのほか | 未定義 | ||
以降のデータは未定義 |
出力列 ([0] == 0x01) | データ型 | 値 | 内容 |
---|---|---|---|
[0..3] | BE_DWORD | モジュールのSID。 |
設定情報を変更する。
E_TWESTG_CMD_OP_SAVE
)を実行しても、実際のセーブは行われません。pBufOut
) には書き込みません。入力列 | データ型 | 値 | 内容 |
---|---|---|---|
[0] | OCTET | 0x01 | IDに指定する設定を変更する。 |
[1] | OCTET | 0x00以外 | 設定ID |
[2..] | データ型依存 |
設定ID | 内容 | 入力データ | 備考 |
---|---|---|---|
0x01 | アプリケーションID | BE_DWORD (uint32_t) | |
0x02 | 論理ID (8bit) | OCTET (uint8_t) | |
0x03 | チャネル | OCTET (uint8_t) | |
0x04 | チャネル(複数指定) | BE_WORD(uint16_t) | b0: ch11, b1: ch12, …, b15: ch16 |
BE_DWORD(uint32_t) | 1UL « ch のビット和 (11, 13なら 1UL « 11 | 1UL « 13) ※ STGSTD では無効化されている。 | ||
0x05 | 無線出力と再送 | OCTET (uint8_t) | 上位4ビットが再送回数、下位4ビットは出力設定 (0..3, 3が最高出力) |
0x06, 0x08, 0x09, 0x0A | オプション(32bit) | BE_DWORD (uint32_t) | |
0x07 | UART 設定 | BE_WORD (int16_t) | 内部形式の設定データをそのまま入力する。 |
BE_DWORD | ボーレートを指定する(9600 … 250000)。他の通信条件は 8N1 を指定する。 | ||
BE_DWORD OCTET OCTET OCTET | 全パラメータを指定する。 - ボーレート(DWORD) - ビット数 (7 or 8) - パリティ (‘N’ or ‘E’ or ‘O’) - ストップビット (1 or 2) |
01011234BEEF アプリケーションID(0x01)に0x1234BEEF を設定する。
010212 チャネル(0x02)に0x12(18)を設定する。
設定情報を取得する。
入力列 | データ型 | 値 | 内容 |
---|---|---|---|
[0] | OCTET | 0x01 | (QTYP)IDに指定する設定を取得する。 |
[1] | OCTET | 0x00以外 | 設定ID |
備考 | ||
---|---|---|
[0] | OCTET | データタイプ (uint8_t: 1, int8_t: 2, uint16_t: 3, int16_t: 4, uint32_t: 5, int32_t:6, uint8_t[]: 0x80 (下位5bitはデータ長) |
[...] | データタイプ依存 (整数型 WORD, DWORD は BigEndian並び) |
設定ID | 内容 | 入力データ | 備考 |
---|---|---|---|
0x01 | アプリケーションID | BE_DWORD (uint32_t) | |
0x02 | 論理ID (8bit) | OCTET (uint8_t) | |
0x03 | チャネル | OCTET (uint8_t) | |
0x04 | チャネル(複数指定) | BE_WORD(uint16_t) | b0: ch11, b1: ch12, …, b15: ch16 |
0x05 | 無線出力と再送 | OCTET (uint8_t) | 上位4ビットが再送回数、下位4ビットは出力設定 (0..3, 3が最高出力) |
0x06, 0x08, 0x09, 0x0A | オプション(32bit) | BE_DWORD (uint32_t) | |
0x07 | UART 設定 | BE_WORD (int16_t) | 内部形式の設定データ b15: 1 なら 7bit, 0 なら 8bit b14: 1 なら STOPBIT=2, 0 なら 1 b12,13: 0->NONE, 1->ODD, 2->EVEN b0..b11->ボーレートの1/100 |
0101 -> 051234BEEF -> アプリケーションID(uint32_t 0x1234beef)
0102 -> 010D -> チャネル(uint8_t 13)
このコマンドを実行直後に E_TWESTG_CMD_OP_SAVE
を発効することで、設定情報を初期値に戻す。
TWEINTRCT_cbu32GenericHandler(psIntr, E_TWEINRCT_OP_REVERT, TRUE, 0, NULL)
を呼び出す。第3引数の TRUE
指定により、セーブされた設定情報はロードしない。アプリケーションの TWEINTRCT_cbu32GenericHandler()
が正しく実装されていること。入力データ、出力データは無し。
設定情報を変更した場合に、不揮発性メモリに保存する。
TWE_APIRET_SUCCESS_W_VALUE(0x100 | E_TWESTG_CMD_OP_SAVE)
を返す。入力データ、出力データは無し。
モジュールをリセットする。
入力データ、出力データは無し。