Version 0.5.0 of my long running LoRaWAN project is out. Here are some of the highlights.

Support for SX126X

This radio driver was added so that LDL will work with the new STM32WL55 SoC.

Support for the older SX127X series is retained. All drivers use the same fault tolerant interface.

Virtual Device Integration Testing

The Ruby wrapper has been improved and is being used to test LDL against ChirpStack in all supported regions.

So far there is test coverage for:

  • over the air activation
    • perfect and lossy conditions
    • duty cycle limiting
  • confirmed and unconfirmed uplinks and downlinks
    • perfect and lossy conditions
    • device time MAC command
  • adaptive data rate

The tests are written in expectation style. You can eyeball the setup here.

Updated MBED Wrapper

sensor console

MBED is used as a platform for testing physical instances of LDL. Version 0.5.0 introduces the following changes:

  • LDL::SX1261 and LDL:SX1262 classes have been added for the new radio drivers
  • plug-and-play support for common hardware has been added
    • LDL::HW::SX126XMB2XAS
    • LDL::HW::SX1272MB2XAS
    • LDL::HW::CMWX1ZZABZ (previously named LDL::CMWX1ZZABZ)
  • LDL::Device now has blocking interfaces for all operations

The LDL::HW classes make it easier to work with development kit since all of the connections and settings are pre-configured.

e.g.

int main()
{
    static const uint8_t app_key[] = MBED_CONF_APP_APP_KEY;
    static const uint8_t nwk_key[] = MBED_CONF_APP_NWK_KEY;
    static const uint8_t dev_eui[] = MBED_CONF_APP_DEV_EUI;
    static const uint8_t join_eui[] = MBED_CONF_APP_JOIN_EUI;

    static LDL::DefaultSM sm(app_key, nwk_key);
    static LDL::DefaultStore store(dev_eui, join_eui);
    static LDL::HW::SX126XMB2XAS radio;
    static LDL::Device device(store, sm, radio);

    device.start(LDL_EU_863_870);

    device.otaa();

    const char msg[] = "hello world";

    device.unconfirmed(1, msg, strlen(msg));

    for(;;){}

    return 0;
}

Improved Interface Documentation

The documentation is (IMO) slightly more readable. It’s also now hosted by Read the Docs.