Files
scottp 97affae86c Who made it, and why: author, credits, licence and support
The README says who wrote it and the two projects it was built for, WII6
and OGLAS, with their sites; credits Ground Control for the modem and
the library that does the protocol work; and gives the licence with
contact details, where to report issues and what helps in a report, and
that it is not a Ground Control product. The licence, every source file
and the Python package's metadata carry the copyright and email; the
package lists its homepage, repository, issues and changelog.
2026-10-09 13:16:30 +11:00

59 lines
1.6 KiB
Python

# SPDX-License-Identifier: MIT
# Copyright (c) 2026 Scott Penrose <scottp@dd.com.au>
"""
Ground Control's own Python binding (the rockblock9704 package, the same C
library this repository builds into Zephyr) against the fake modem on a pty.
The fake runs in a process of its own: the binding holds the GIL through
every blocking call.
"""
import time
import pytest
rb = pytest.importorskip("rockblock9704")
@pytest.fixture
def modem(fake):
m = rb.RockBlock9704()
assert m.begin(fake.port)
yield m
m.end()
def poll_until(m, cond, secs=10):
end = time.monotonic() + secs
while time.monotonic() < end:
m.poll()
if cond():
return True
time.sleep(0.01)
return False
def test_identity(modem):
assert modem.get_imei() == "300434030000000"
assert modem.get_iccid() == "8988169712345678901"
assert modem.get_firmware_version() == "v1.2.3"
assert modem.get_signal() == 5
def test_send_async(modem, fake):
done = []
modem.set_mo_message_complete_callback(lambda mid, status: done.append(status))
assert modem.send_message_async(b"from-python", 244)
assert poll_until(modem, lambda: done)
assert done == [1]
m = fake.out.expect(r"^MO 244 \d+ (\w+)")
assert bytes.fromhex(m.group(1)) == b"from-python"
def test_receive_async(modem, fake):
got = []
modem.set_mt_message_complete_callback(lambda mid, status: got.append(status))
fake.cmd("mt 244 to-python")
assert poll_until(modem, lambda: got)
assert modem.receive_message_async() == b"to-python"
assert modem.acknowledge_receive_head_async()