LTEm1c  v0.3
C99 device driver for the LooUQ LTEm1 cellular modem
LTEm1c Documentation

Circuit River - LTEm1c

Release Status: v0.3 (release candidate)

LTEm1 modem driver implemented in C99 for portability and a small footprint.

The LooUQ LTEm1c driver supports the LooUQ Circuit River LTEm1 LTE modem. The LTEm1 is designed to allow for cost-effective cellular communications in embedded systems by supporting LTE CAT-M1 and LTE CAT-NB1 (NB-IOT) communications. The LTEm1 is certified for use on the Verizon network and a registered device for the T-Mobile (formerly Sprint) Curiosity Network. It is also fully tested and supported using Hologram SIMs.

1st off, thanks for taking a look at the LTEm1 hardware and LTEm1c software!

Getting Started

The best way to get started understanding LTEm1c and considering it for your projects today is to look at the tests folder in the repository. This will be supplemented in the coming weeks. We are working on getting the source code documented with a more complete suite of doxygen markdown tags. We are also adding a couple real world example projects soon. The tests folder contains a series of progressive LTEm1c tests. Starting with simple platform I/O verification, thru MQTT protocol support. Each test builds on a succesful previous level test. Each test can serve as a template for you to start your implementation from.

Each test shows the process for initializing, starting services, and a loop exercising the functionality of the subsystem under test.

LTEm1c Subsystems

Subsystem Functions
action_ Handles invoking AT commands to the modem's module and handling response parsing. Supports variable command timeouts, thread safety and completion determination. Results are presented in a simple STRUCT with a HTTP type status code, along with the detail string response
mdminfo_ Provides several common service functions for understanding the state of the modem and the network connection
gnss_ The LTEm1 has a multi-constellation GNSS receiver (aka GPS is the US). The GNSS module provides support for accessing this functionality, like knowing exactly where your device is.
geo_ The LTEm1 supports the creation of geo-fence outlines and monitoring of device positioning relative to the geo-fence boundary. Note: geo_ requires the gnss_ module be built into your project to use these functions.
sockets_ This is the typical POSIX style sockets layer. Support if TCP\UDP\SSL clients are there. Note: server mode is not currently planned, all US networks I have worked with do not support incoming connections for cellular without add-on services like VPNs or other network constructs. I recommend alternatives to attempting direct connection to your device over cellular.
mqtt_ Support for MQTT client functionality is built here. Attach, connect, subscribe, unsubscribe and publish all are supported. Limited testing so far on QOS levels and advance features like clean and will. The MQTT module supports message properties appended to the topic and has a property parser available.
iop_ Generally you won't directly interact with the iop_ subsystem. It performs the buffer management to/from hardware. It interfaces with the action_, sockets_, and mqtt_ subsystems to perform the necessary transfers.

LTEm1 Modem Specifications


Version History

LTEm1c Documentation

All of the core (blue) subsystems are functional. Extension subsystems (copper, with wide-borders) are optional and can be built into the application, or omitted to reduced code size. Grey boxes indicate future feature areas.

Future Directions

If you have an opinion on any of these functions and their applicability to your product\project please let LooUQ know. Send your thoughts to

  • Power Management - Support for PSM, wake options, etc.
  • HTTP(S) - Support for HTTP client in driver (not using raw TCP)
  • FTP(S) - Support for FTP client in driver (not using raw TCP)
  • File System - Support for file storage on BGx via driver (BG96 has approx. 10MB available)
  • FOTA - Support for scheduled FOTA