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

もとのページに戻る

2025-08-08 現在

TWENETstgs - twesettingsライブラリ

インタラクティブモードによる設定を支えるライブラリ
TWENETstgs - twesettingsライブラリの解説を行います。

TWENETstgs - twesettingsライブラリ

このライブラリは主にインタラクティブモードにより設定処理を行うための諸関数が含まれます。

※ これらの関数はエンドユーザ向けの API としては公開していません。

1 - printfライブラリ

printfライブラリ
printf相当関数の解説。

printf 相当関数

本 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.
//
///////////////////////////////////////////////////////////////////////////////

2 - TWESTG_CMD_u32CmdOp() コマンド解説

TWESTG_CMD_u32CmdOp() コマンド解説(内部開発者向け)
TWESTG_CMD_u32CmdOp() のコマンドについて解説します。

TWESTG_CMD_u32CmdOp() コマンド解説(内部開発者向け)

概要

twesettings_cmd.[ch]TWESTG_CMD_u32CmdOp() 関数は、0xdb コマンドの実行処理を行うことを想定している。この関数は、モジュールの諸情報の取得、設定情報の取得、設定情報の反映、リセットなどの処理が含まれる。多くの処理は設定関連の補助関数 TWEINTRCT_cbu32GenericHandler() を呼び出すようになっている。

データ型

  • TWE_APIRETは、0x80000000 のビットの有で成功、なしで失敗。残りの31ビットをパラメータとする。
  • TWE_tsBufferはバッファへのポインタ、系列長、バッファ最大長を格納した構造体。
  • TWESTG_tsFinalは、設定関連の管理構造体。

TWESTG_CMD_u32CmdOp()

TWE_APIRET TWESTG_CMD_u32CmdOp(uint8 u8Op, TWE_tsBuffer *pBufIn, TWE_tsBuffer *pBufOut, TWESTG_tsFinal *psFinal)

処理内容u8Opに対応した処理を行う。処理によって入力データpBufIn、出力データpBufOutを用いる。最後のパラメータは設定管理構造体は psFinal を指定する。

パラメータ処理
u8Opuint8処理内容を指定する。
pBufInTWE_tsBuffer *入力系列。
pBufOutTWE_tsBuffer *出力データの格納領域を指定する。処理によっては NULL 指定でも構わない。処理の失敗時の状態は原則未定義である。
psFinalTWESTG_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_SUCCESSb0..b7 → u8Op、他は処理次第成功時
TWE_APIRET_FAILb0..b7 → u8Op、他は処理次第失敗時

処理

E_TWESTG_CMD_OP_ACK (F0)

ACK応答を行う。入力した系列をそのまま出力する。

(なし) -> 01        : 入力なしの場合は 01 が戻る
112233 -> 112233   : 112233の場合は、出力にそのまま戻る。

E_TWESTG_CMD_OP_QUERY_MODULE_INFO (F1)

モジュールの諸情報を取得する。

入力列データ型内容
[0]OCTET0x01モジュールのSIDを得る。
そのほか未定義
以降のデータは未定義
出力列 ([0] == 0x01)データ型内容
[0..3]BE_DWORDモジュールのSID。

E_TWESTG_CMD_OP_APPLY_SETTINGS(F2)

設定情報を変更する。

  • 設定情報はセーブ&リセットされるまでは反映されません。
  • 未反映の状態でのアプリケーションのふるまいは未定義です。
  • 未定義の状態でインタラクティブモードに遷移すると変更したデータは破棄されます。
  • 設定済みのデータと同じ内容に変更しようとしたときも、この処理は成功として戻り値を返します。ただしセーブ(E_TWESTG_CMD_OP_SAVE)を実行しても、実際のセーブは行われません。
  • この処理は出力 (pBufOut) には書き込みません。
入力列データ型内容
[0]OCTET0x01IDに指定する設定を変更する。
[1]OCTET0x00以外設定ID
[2..]データ型依存
設定データ
設定ID内容入力データ備考
0x01アプリケーションIDBE_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)
0x07UART 設定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)を設定する。

E_TWESTG_CMD_OP_QUERY_SETTINGS(F3)

設定情報を取得する。

入力列データ型内容
[0]OCTET0x01(QTYP)IDに指定する設定を取得する。
[1]OCTET0x00以外設定ID
QTYP==1 の出力
備考
[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アプリケーションIDBE_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)
0x07UART 設定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_REVERT (0xFD)

このコマンドを実行直後に E_TWESTG_CMD_OP_SAVE を発効することで、設定情報を初期値に戻す。

  • TWEINTRCT_cbu32GenericHandler(psIntr, E_TWEINRCT_OP_REVERT, TRUE, 0, NULL) を呼び出す。第3引数の TRUE 指定により、セーブされた設定情報はロードしない。アプリケーションの TWEINTRCT_cbu32GenericHandler() が正しく実装されていること。

入力データ、出力データは無し。

E_TWESTG_CMD_OP_SAVE (0xFE)

設定情報を変更した場合に、不揮発性メモリに保存する。

  • 上書き、既に設定済みと同じ値に変更しようとした場合は、セーブは行わない。関数の戻り値としてTWE_APIRET_SUCCESS_W_VALUE(0x100 | E_TWESTG_CMD_OP_SAVE) を返す。
  • セーブを行った場合は、速やかにリセットを行う(設定変更したままの動作は未定義)。

入力データ、出力データは無し。

E_TWESTG_CMD_OP_DO_MDDULE_RESET (0xFF)

モジュールをリセットする。

入力データ、出力データは無し。