The MWX Library

Mono Wireless Inc.

The MWX Library

資料の取り扱いについてをご参照ください。 お気付きの点がありましたら、当サポート窓口にご連絡いただければ幸いです。

このページには開発中の情報が含まれます。本ページの内容は、まだ公開ソースコードに反映されていない場合があります。

MWX ライブラリは、TWELITE 無線モジュールのコード表記を簡素化することを目的としています。MWXで作成されたプログラムをアクト act と呼びます。アクトにはループによる記述と、イベントによる記述(ビヘイビア behavior と呼びます)の二種類があります。

本ページではアクトの主な特徴を紹介します。

#include <TWELITE>
const uint8_t PIN_LED = 5;

void setup() {
  pinMode(PIN_LED, OUTPUT);
}

void loop() {
  if (TickTimer.available()) {
    uint32 t_now = millis();
    
    // blink LED every 1024ms
    digitalWrite(PIN_LED, (t_now >> 10) & 1 ? HIGH : LOW);
  }
}   
// myApp.hpp
...
class myApp : MWX_APPDEFS_CRTP(myApp) {
...
  void loop() {
    // main loop
  }
  
  void receive(mwx::packet_rx& rx) {
    // on receive
  }
};

// myApp.cpp
...
MWX_DIO_EVENT(12, uint32_t arg) {
        // on event from DIO12
}
void loop() {
  while(Serial.available() { 
    auto x = Serial.read(); ... } // serial message
  if (Analogue.available() {
    auto x = Analogue.read(...); } // adc values
  if (Buttons.available() { 
    Buttons.read(...); } // DIO changes
  if (the_twelite.receiver.available()) { 
    auto&& rx = the_twelite.receiver.read(); } // on rx packet
}
#include <TWELITE>
#include <NWK_SIMPLE>

void setup() {
  ...
  auto&& nwksmpl = the_twelite.network.use<NWK_SIMPLE>();
    nwksmpl << NWK_SIMPLE::logical_id(0xFE) 
               // set Logical ID. (0xFE means a child device with no ID)
            << NWK_SIMPLE::repeat_max(3);
               // can repeat a packet up to three times.
}

void loop() {
  ...
  vTransmit();
  ...
}

void vTransmit() {
  if (auto&& pkt =
    the_twelite.network.use<NWK_SIMPLE>().prepare_tx_packet(); 
  pkt << tx_addr(0x00)  // to parent 
        << tx_retry(0x3); // set retry
    
    pack_bytes(pkt.get_payload() // prepare payload data
        , uint8_t(0x01)
        , uint16_t(analogRead(PIN_ANALOGUE::A1))
        , uint16_t(analogRead_mv(PIN_ANALOGUE::VCC)));
    
    pkt.transmit(); // transmit!
}

TWELITE 標準アプリケーションとのパケットの相互通信はできませんが、以下の点で自由度が上がっています。

#include <TWELITE>
#include <PAL_AMB> // include the board support of PAL_AMB

void setup() {
    auto&& brd = the_twelite.board.use<PAL_AMB>(); // use PAL AMB
    uint8_t u8dip = brd.get_DIP_SW();   // check DIP s/w status
    brd.set_led(LED_TIMER::BLINK, 100); // LED switchs on/off every 100ms
    ...
    
    // start capture of sensors
    brd.sns_SHTC3.begin();
}

void loop() {
    if (TickTime.available()) { // check every ms
        auto&& brd = the_twelite.board.use<PAL_AMB>();

        if (brd.sns_LTR308ALS.available()) {
          Serial << brd.sns_SHTC3..get_temp();
        } else {
          // notify sensor that 1ms passed.
            brd.sns_SHTC3.process_ev(E_EVENT_TICK_TIMER);
        }
    }
}