Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
1b5fad0
Modem backend, implemented mmcli functions and half done qmi functions
rslater-cs Feb 5, 2026
8d39f7c
modem driver initial design
rslater-cs Feb 5, 2026
80e20bf
modemcard manager initial design
rslater-cs Feb 5, 2026
6e3f345
added qmi functions
rslater-cs Feb 6, 2026
5b4eea4
Defined initial interface spec, checks for provided functions and not…
rslater-cs Feb 6, 2026
3727177
Added signal getting and changed function signatures
rslater-cs Feb 6, 2026
646ab1a
Finished model and mode loading and fixed singleton issues
rslater-cs Feb 6, 2026
1c8fbf4
added more get methods
rslater-cs Feb 6, 2026
379c65e
proper export of backend
rslater-cs Feb 6, 2026
5d26b25
monitor proposal
rslater-cs Feb 10, 2026
ae71a31
modem with backend useage; state monitor, emitter and warm swap fibers
rslater-cs Feb 17, 2026
f0daa5f
modem backend finished for linux_mm
rslater-cs Feb 17, 2026
7b11e14
update ModemcardManager to improve scope handling and error logging
rslater-cs Feb 17, 2026
2cc8204
at lib for modem backend
rslater-cs Feb 17, 2026
fcf7ba2
Modem backend definition
rslater-cs Feb 17, 2026
b114611
Initial GSM with fibers-next
rslater-cs Feb 20, 2026
106affe
General error message
rslater-cs Feb 20, 2026
ec96b00
Fixed return values, reading and writing method
rslater-cs Feb 20, 2026
b2e737b
added iccid to modem backend
rslater-cs Feb 20, 2026
d8f1e1b
Fixed firmware parsing
rslater-cs Feb 20, 2026
9d1494a
Fixed GID parsing
rslater-cs Feb 20, 2026
6400da0
Modem manager now gets device value via get method
rslater-cs Feb 20, 2026
4dc5b52
Added more get methods, changed capability return format, fixed emitter
rslater-cs Feb 20, 2026
52f1520
GSM state machine
rslater-cs Mar 4, 2026
083604c
apn db loading and conection string builder
rslater-cs Mar 4, 2026
52b134c
at commands as ops
rslater-cs Mar 4, 2026
70f9c08
updated modem backend for complete field coverage and persistant cache
rslater-cs Mar 4, 2026
a8378cd
added more modem caps and start of uart
rslater-cs Mar 4, 2026
e31385d
better error reporting and more rebust emitter fiber
rslater-cs Mar 4, 2026
534d3ab
binary loading for apndb
rslater-cs Mar 4, 2026
f8215be
correct metrics reporting
rslater-cs Mar 12, 2026
669965c
implement modem monitoring functionality and validation
rslater-cs Mar 18, 2026
7ed23da
enhance modem handling: add SIM presence polling and lifecycle monito…
rslater-cs Mar 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions docs/services/hal.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,70 @@
- resources
- bigbox_v1_cm.lua
- bigbox_ss.lua

## HAl monitor acticheture

```mermaid
sequenceDiagram
participant Config
participant Bus
participant Core
participant Monitors
Core->>Core: Init storage driver and cap (for config loading)
Config->>Core: Request config blob
Core->>StoreCap: Parrot Request
StoreCap->>Core: Return blob
Core->>Config: Response
Config->>Core: Load config
Core->>Core: Create monitors
Core->>Monitors: op choice over monitors (and bus etc)
Monitors->>Core: (UART) use config to build uart driver, return driver in connected event
Core->>Core: Init driver and get capabilities
Core->>Bus: Broadcast uart device and capability
```

Monitors are scope protected modules that provide a event based op which returns when a device is either connected or disconnected.
```lua
local device_event = perform(uart_monitor:monitor_op())
if device_event.connected then
-- somthing
else
--somthing else
end
```

Monitors can scale for complexity, for example the simplest case of a monitor would be uart, where the monitor would recieve a config and build drivers immediately based on that config, the monitor_op would iterate over the drivers and then block forever
```lua
function monitor:monitor_op()
if self._progress >= #self._drivers then
return op.never()
end
return op.always(
-- device connected event goes here
)
end
```

Some devices are not defined at config time, and appear dynamically. These monitors can return a scope_op which listens to an underlying command to build device events
```lua
function monitor.new()
return setmetatable({
scope = -- child scope to protect HAL from montior based failure
cmd = -- monitoring command here
}, monitor)
end

-- A monitor op that is dependant on command line output
function monitor:monitor_op()
return scope:scope_op(function ()
return self.cmd:read_line_op():wrap(parser)
end)
end
```

Both of these examples are fiberless

Monitors may also spawn fibers in the background, although the majority won't need to, to mediate command output between drivers



Loading