The MWX Library

Mono Wireless Inc.

The MWX Library

Please refer to the Handling of Materials section. If you have any questions or concerns, please contact our support desk.

This page contains information that is still under development. The contents of this page may not yet be reflected in the public source code.

The MWX library is intended to simplify the code notation of the TWELITE radio module. a program created with MWX is called an act. There are two types of acts: descriptions by loops and descriptions by events (called BEHAVIOR).

This page introduces the main features of ACT.

#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!
}

Although it does not allow for packet intercommunication with TWELITE standard applications, it does allow for more flexibility in the following areas

#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);
        }
    }
}