The module: Ground Control's library on Zephyr, with one worker thread

Ground Control's RockBLOCK 9704 library is pinned untouched in west.yml
and compiled here for any board with a UART: a serial port on the bus of
the rock7,rockblock-9704 devicetree node, the library's timing calls on
the kernel, and one worker thread that owns every call into it, since the
library has no locking and shares static buffers.

The worker sleeps until a request or a byte from the modem arrives.
Requests (begin, end, power, send, info, signal) wait as long as the
caller says; a send with K_NO_WAIT queues and reports through mo_done.
Callbacks for a sent message, a received one, the signal and the
provisioning; a status snapshot that never touches the modem.

The library asks for provisioning once and keeps a miss for good; the
worker clears its cache before a send whose topic is missing and after
the modem refuses one, so a modem provisioned later is seen.

The serial port and worker began in the OGLAS satellite bench and were
carried through WII6's lib/wii6-sat.
This commit is contained in:
scottp committed 2026-10-09 12:48:16 +11:00
commit c0e92a7f02
16 files changed
+1608

No files matched your search

+52
View File
@@ -0,0 +1,52 @@
# SPDX-License-Identifier: MIT
description: |
RockBLOCK 9704, Ground Control's Iridium Certus (IMT) modem board, on a
UART. The modem speaks JSPR, JSON lines over a fixed 230400 8N1; there is
no AT mode. One per system: the library underneath keeps global state.
The control pins are optional. With none, the modem is assumed powered and
enabled, which is how the board behaves with the pins left open.
compatible: "rock7,rockblock-9704"
include:
- uart-device.yaml
properties:
power-gpios:
type: phandle-array
description: |
P_EN, the supply enable. Driven active to power the board.
iridium-enable-gpios:
type: phandle-array
description: |
I_EN, the modem enable. Driven active once the supply is up.
booted-gpios:
type: phandle-array
description: |
I_BTD, the modem's booted signal. When present, power-up waits for it
instead of a fixed delay.
boot-delay-ms:
type: int
default: 4000
description: |
How long to wait after enabling the modem before talking to it, when
there is no booted-gpios to wait on.
examples:
- |
&usart3 {
current-speed = <230400>;
status = "okay";
modem: rockblock {
compatible = "rock7,rockblock-9704";
power-gpios = <&gpiob 0 GPIO_ACTIVE_HIGH>;
iridium-enable-gpios = <&gpiob 1 GPIO_ACTIVE_HIGH>;
booted-gpios = <&gpiob 2 GPIO_ACTIVE_HIGH>;
};
};
+1
View File
@@ -0,0 +1 @@
rock7 Rock Seven Mobile Services Ltd (Ground Control)