OS-IoT C Library for BG96/MDM9206 running ThreadX Version 3

Key Features

  • Lightweight C library supporting oneM2M client functions.
  • Runs directly on the cellular IoT modem CPU reducing device costs and power consumption.
  • Extensible and customizable Open Source distribution.
  • Distribution includes documentation and example oneM2M data reporting application.
  • Supports oneM2M in small memory footprint and with light CPU impact.
  • Support for HTTP and secure HTTP (HTTPS) transport with certificate based or PSK security.


New products and architectures are being created to meet the challenges of low power consumption and low cost IoT devices (e.g. for wearables, healthcare, smart energy and smart cities). Early cellular modems for IoT just provided connectivity and required an external CPU to run applications and control the IoT device. The current generation of cellular IoT modems are removing the requirement for a separate application CPU by enabling applications to run directly on their internal CPU. This reduces the part count for IoT devices leading to reduced costs and reduced power consumption. In order to take advantage of these capabilities the application has to run under the constraints of the environment provided by the cellular modem module. Typically, these run a small Real Time Operating System (RTOS) rather than a general-purpose OS like Linux and have limited storage and CPU time available.

One example of cellular IoT module that provides the ability to host applications is the Quectel BG96 based on the Qualcomm MDM 9206 chipset. The BG96 runs the ThreadX operating system and uses the ThreadX Dynamic Application Module (DAM). A Software Development Kit (SDK) for DAM applications on the BG96 is available from the manufacturer.

The OS-IoT C library has been developed to run on the BG96 under ThreadX Version 3. It provides support for oneM2M Application Entity (AE) capabilities. OS-IoT allows IoT clients supporting oneM2M to run directly on the cellular IoT modem module without additional external hardware. The library supports JSON encoded oneM2M operations over HTTP or HTTPS.

In addition to the OS-IoT C library the package also includes an example DAM application that shows the use of the library to build a data reporting application such as might be required for an environmental monitor or smart meter.

The OS-IoT C library uses HTTP and other capabilities of the BG96 exposed via that platform’s proprietary API. It also uses some ThreadX APIs to provide support for process control and memory management. Despite these dependencies the library is intended to be portable and should be adaptable to other platforms with similar APIs. In particular, the library functions concerned with encoding and decoding oneM2M JSON resources are platform independent. The library is therefore suitable as a starting point for C implementations of oneM2M AE capabilities across a range of constrained platforms.

Build and Install

The OS-IoT C library may be obtained by following instructions on the download page. The build, installation and user guide as well as the API specification are available on the documentation page.