Skip to content
@signalroute

signalroute

Signalroute

Cellular Modem Infrastructure & AT Command Stack

Signalroute is a suite of tools for managing cellular modems, from embedded AT command parsing to cloud-connected SMS routing infrastructure.


Architecture Overview

+---------------------------------------------------------------+
|                           CLOUD LAYER                         |
|  +-------------+      +------------------------------------+  |
|  |   Generic   | <--- |  WebSocket tunnel for SMS routing  |  |
|  | Cloud Server|      |  from physical modems behind NAT   |  |
|  +-------------+      +------------------------------------+  |
+---------------------------------------------------------------+
                               |
                               | WebSocket (TLS 1.3)
                               v
+---------------------------------------------------------------+
|                       GATEWAY LAYER (Go)                      |
|  +-------------+      +------------------------------------+  |
|  |  sms-gate   | ---> |    Headless daemon multiplexing    |  |
|  |             |      |   4G/LTE USB modems with SQLite    |  |
|  +-------------+      +------------------------------------+  |
|                                                               |
|  +-------------+      +------------------------------------+  |
|  |  modem-emu  |      |  High-concurrency modem emulator   |  |
|  |  (testing)  |      |  10,000+ simulated modems via TCP  |  |
|  +-------------+      +------------------------------------+  |
+---------------------------------------------------------------+
                               |
                               |
                               v
+---------------------------------------------------------------+
|                        EMBEDDED LAYER                         |
|  +-------------+      +------------------------------------+  |
|  |   libat-c   |      |  Zero-malloc, ISR-safe AT engine   |  |
|  |    (C11)    |      | Lock-free ring buffer, bare-metal  |  |
|  +-------------+      +------------------------------------+  |
|                                                               |
|  +-------------+      +------------------------------------+  |
|  |    libat    |      |    Header-only C++23 AT parser     |  |
|  |   (C++23)   |      |  Zero-allocation for embedded IoT  |  |
|  +-------------+      +------------------------------------+  |
+---------------------------------------------------------------+

Repositories

Repository Language Description
sms-gate Go Headless daemon that multiplexes 4G/LTE USB modems and tunnels SMS to the cloud via outbound WebSocket with SQLite WAL persistence
modem-emu Go High-concurrency cellular modem emulator bypassing kernel PTY limits (10,000+ modems via TCP/Unix sockets)
libat-c C (C11) Zero-malloc, ISR-safe AT command engine with a lock-free ring buffer for bare-metal microcontrollers
libat C++23 Header-only, zero-allocation AT command parser for modern embedded systems and IoT

Use Cases

IoT Device Manufacturers

Use libat-c (C) or libat (C++) to build robust cellular connectivity into your embedded devices with minimal memory footprint and zero dynamic allocation.

SMS Gateway Operators

Deploy sms-gate to build scalable, NAT-proof edge gateways that route messages from physical SIM banks directly to your cloud infrastructure without dropping messages.

Testing & CI/CD

Use modem-emu to simulate thousands of cellular modems for end-to-end integration testing of your gateways without physical hardware dependencies.


Quick Start

Embedded (C/C++)

// libat-c example (C11)
#include "at.h"
#include "at_gsm.h"

at_init();
at_register_urc("+CMTI:", on_sms_received, NULL);
at_gsm_csq(on_signal_quality, NULL);
// libat example (C++23)
#include <at/parser.hpp>

at::parser p{"AT+CGDCONT=1,\"IP\",\"internet\""};
auto result = p.parse_command();

Gateway (Go)

# Deploy sms-gate
go run ./cmd/gateway --config config.yaml

# Test with mock modems using modem-emu
go run ./cmd/emu --config configs/scale-1000.json

System Requirements

Component Target Platform Memory Requirements
libat-c Bare-metal ARM Cortex-M/RISC-V < 1KB RAM
libat Embedded Linux/MCU Header-only, zero allocation
sms-gate Linux (x86_64/ARM64/ARM32) ~50MB for 100 modems
modem-emu Linux/macOS ~2GB for 10,000 emulated modems

Key Features

  • Zero-allocation embedded parsers — No heap usage (malloc/free), deterministic latency.
  • Lock-free ring buffers — SPSC buffer in C11 makes it ISR-safe for real-time systems.
  • WebSocket tunneling — Route SMS from NAT'd modems to the cloud without inbound ports.
  • SQLite persistence — Local WAL-mode queue for offline resilience ("SQLite-before-SIM-delete").
  • Massive concurrency — Test with 10,000+ simulated modems bypassing /dev/pts OS limits.
  • Modern C++23 — Type-safe, compile-time optimized header-only parser.

Contributing

We welcome contributions across all layers of the stack:

  1. Embedded — C/C++ optimizations, new AT command handlers, 3GPP spec coverage.
  2. Systems — Go performance improvements, rate-limiting logic, edge deployment.
  3. Testing — Expand mock modem fidelity (new hardware profiles), add fuzzing.

Please read our Contributing Guide and Code of Conduct.


License

All Signalroute repositories are released under the MIT License unless otherwise specified.


Links


Signalroute — Bridging cellular hardware to the cloud, one AT command at a time.

Popular repositories Loading

  1. libat libat Public

    A header-only, zero-allocation AT command parser written in modern C++23 for embedded systems, modem drivers, and cellular IoT stacks.

    C++

  2. sms-gate sms-gate Public

    A headless Go daemon that multiplexes physical 4G/LTE USB modems behind NAT, routing inbound SMS to the cloud via an outbound WebSocket tunnel with SQLite-backed zero-loss persistence.

    Go

  3. modem-emu modem-emu Public

    A high-concurrency cellular modem emulator in Go that bypasses kernel PTY limits using TCP/Unix sockets, allowing end-to-end testing of 10,000+ simulated modems with a dynamic HTTP control API.

    Go

  4. libat-c libat-c Public

    A zero-malloc, ISR-safe AT command engine for embedded C (C11), designed for bare-metal microcontrollers with a lock-free ring buffer for direct UART integration and 3GPP standard parsing.

    C

  5. .github .github Public

Repositories

Showing 5 of 5 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…