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

もとのページに戻る

2024-12-02 現在

the_twelite

TWENET 利用の中核クラス (mwx::twenet)
    the_tweliteオブジェクトは、TWENETの利用手続きをまとめたもので、無線の基本設定やスリープ等の手続きなど無線マイコンを操作するための手続きが含まれます。

    概要

    the_twelitesetup()関数内で設定と開始the_twelite.begin()を行います。setup()以外では設定は行えません。

    void setup() {
      ...
     	the_twelite
    		<< TWENET::appid(APP_ID)
    		<< TWENET::channel(CHANNEL)
    		<< TWENET::rx_when_idle();
      ...
      the_twelite.begin();
    }

    上記の例では、アプリケーションIDの設定、通信チャネルの設定、受信回路の設定を行っています。

    様々な手続きが含まれます。

    // シリアル番号を得る
    uint32_t u32hwser = the_twelite.get_hw_serial();
    
    // チャネルを 11 に設定する
    the_twelite.change_channel(11);
    
    // 1秒のスリープを行う
    the_twelite.sleep(1000);
    
    // リセットを行う
    the_twelite.reset_system();

    また無線ネットワークを取り扱うクラスやボード対応をまとめたクラス、ユーザ記述のイベントドリブン処理を行うクラスを登録できるようになっています。このクラスを登録することにより、専用化した機能を手軽に利用できるようになります。これらのクラスを本解説中では「ビヘイビア」と呼称します。

    void setup() {
    	/*** SETUP section */
    	// use PAL_AMB board support.
    	auto&& brd = the_twelite.board.use<PAL_AMB>();
    
    	...
    
    	// Register Network
    	auto&& nwk = the_twelite.network.use<NWK_SIMPLE>();
    	nwk << NWK_SIMPLE::logical_id(u8ID);

    上記の例では環境センサーパル<PAL_AMB>と、シンプル中継ネットワーク<NWK_SIMPLE>の2種類を登録しています。これらを登録することにより環境センサーパル上のセンサーなどハードウェアを簡易に取り扱うことが出来ます。また煩雑な無線パケットの取り扱いについて中継の処理や重複で届いたパケットの自動破棄などの機能を暗黙に持たせることが出来ます。

    メソッド

    <<演算子 (設定)

    オブジェクトthe_tweliteの初期設定を行うために<<演算子を用います。

    以下に挙げる設定用のクラスオブジェクトを入力とし、設定をしなければデフォルト値が適用されます。

    TWENET::appid(uint32_t id)

    パラメータidに指定したアプリケーションIDを設定します。これは必須指定です。

    設定の読み出しは uint32_t the_twelite.get_appid() で行います。

    TWENET::channel(uint8_t ch)

    パラメータchに指定したチャネル番号(11..26)を設定します。

    設定の読み出しはuint8_t the_twelite.get_channel()で行います。

    TWENET::tx_power(uint8_t pw)

    パラメータpwに指定した出力設定を(0..3)を設定します。デフォルトは(3:出力減衰無し)です。

    設定値の読み出しはuint8_t the_twelite.get_tx_power()で行います。

    TWENET::rx_when_idle(uint8_t bEnable)

    パラメータbEnable1であれば常に受信回路を動作させ、他からの無線パケットを受信できるようになります。デフォルトは0で、もっぱら送信専用となります。

    設定値の読み出しはuint8_t the_twelite.get_rx_when_idle()で行います。

    TWENET::chmgr(uint8_t ch1 = 18, uint8_t ch2 = 0, uint8_t ch3 = 0)

    チャネルマネージャを有効にします。チャネルを複数指定すると複数チャネルでの送受信を行います。ch2,ch3に0を指定すると、その指定は無効になります。

    STG_STD

    インタラクティブモードの設定値を反映します。

    auto&& set = the_twelite.settings.use<STG_STD>();
    ...
    set.reload();       // 設定値をロード
    the_twelite << set; // インタラクティブモードの設定値を反映
    

    反映される項目は以下です。

    • app_id
    • channel
    • tx_power
    • MAC ack 使用時の再送回数

    begin()

    void begin()

    事前に設定(<<演算子参照)や、ビヘイビアの登録を済ませた後に実行します。通常はsetup()関数内の一番最後に記述します。

    • the_twelite 設定完了
    • ビヘイビアの初期化

    void setup() {
    	// use PAL_AMB board support.
    	auto&& brd = the_twelite.board.use<PAL_AMB>();
    
    	// settings
     	the_twelite
    		<< TWENET::appid(APP_ID)
    		<< TWENET::channel(CHANNEL)
    		<< TWENET::rx_when_idle();
    
    	// Register Network
    	auto&& nwk = the_twelite.network.use<NWK_SIMPLE>();
    	nwk << NWK_SIMPLE::logical_id(u8ID);
    
    	// somo others
    
    	// begin the TWENET!
    	the_twelite.begin();
    }

    change_channel()

    inline bool change_channel(uint8_t u8Channel)

    チャネル設定を変更します。失敗時にはチャネルは変更されずfalseを戻します。

    get_channel_phys()

    uint8_t get_channel_phys()

    現在設定中のチャネル番号(11..26)を取得する。MAC層のAPIより取得します。

    get_hw_serial()

    inline uint32_t get_hw_serial()

    モジュールのシリアル番号を取得します。

    sleep()

    inline void sleep(
            uint32_t u32Periodms,
            bool_t bPeriodic = true,
            bool_t bRamOff = false,
            uint8_t u8Device = TWENET::SLEEP_WAKETIMER_PRIMARY)

    モジュールをスリープさせる。

    パラメータ解説
    u32Periodmsスリープ時間[ms]
    bPeriodic前回の起床時間をもとに次の起床時間を再計算する。
    ※次の起床タイミングが迫っているなどの理由で、現在のタイミングからになる場合もあります。
    bRamofftrueに設定すると、RAMを保持しないスリープになる(起床後はwakeup()ではなくsetup()から再初期化する必要がある)
    u8Deviceスリープに用いるウェイクアップタイマーの指定。TWENET::SLEEP_WAKETIMER_PRIMARYまたは TWENET::SLEEP_WAKETIMER_SECONDARYを指定する。

    is_wokeup_by_dio()

    bool is_wokeup_by_dio(uint8_t port)

    スリープからの復帰要因が指定したディジタルピンである場合にtrueを返します。

    is_wokeup_by_wktimer()

    bool is_wokeup_by_wktimer()

    スリープからの復帰要因がウェイクアップタイマーである場合にtrueを返します。

    reset_system()

    inline void reset_system()

    システムをリセットします。リセット後はsetup()からの処理となります。

    stop_watchdog()

    inline void stop_watchdog()

    ウォッチドッグタイマーを停止します。長時間のポーリング待ちを行うような場合はタイマーを停止します。

    restart_watchdog()

    inline void restart_watchdog()

    ウォッチドッグタイマーを再開します。

    ビヘイビア

    twe_tweliteには3つのビヘイビアを登録でき、これらを格納する以下のクラスオブジェクトを定義されています。

    • network : ネットワークを実装するビヘイビアです。通常は<NWK_SIMPLE>を登録します。
    • network2 : ネットワークを実装するビヘイビアです。最初に networkでペイロードのデータ構造などの判定により受理しなかったパケットを、別のネットワーク ビヘイビアで処理させたい場合に使用します。(参考: NWK_LAYERED と NWK_SIMPLEの併用)
    • board: ボード対応のビヘイビアです。ボード上の各デバイス利用手続きが付加されます。
    • app: ユーザアプリケーションを記述したビヘイビアです。割り込みやイベント記述、ステートマシンによる状態遷移によるふるまいの記述が可能です。また複数のアプリケーション記述を定義しておいて、起動時に全く振る舞いの違うアプリケーションを選択する記述が容易に行えます。
    • settings: 設定(インタラクティブモード)を実行するためのビヘイビアです。<SET_STD>を登録します。

    use<B>()

    // 例
    auto&& brd = the_twelite.board.use<PAL_AMB>();

    ビヘイビア<B>を登録します。登録はsetup()内で行います。戻り値は登録したビヘイビアに対応するオブジェクトの参照です。

    登録後は登録時と同じ書式でオブジェクトの取得を行います。

    クラスオブジェクト

    the_tweliteには上述のboard, network, appの3つのクラスオブジェクトが定義されていますが他に以下が定義されています。

    tx_status

    送信完了状態を通知する。

    is_complete()

    bool is_complete(uint8_t cbid)

    指定したIDのパケットが送信完了したときにtrueを返す。

    is_success()

    bool is_success(uint8_t cbid)

    指定したIDのパケットが送信完了し、かつ送信成功したときにtrueを返す。

    receiver

    受信パケットを取得する。

    available()

    bool available()

    まだ読み出していない受信パケットが存在する場合にtrueを返す。

    read()

    packet_rx& read()

    パケットを読み出します。