seems to run, untested

This commit is contained in:
Alessandro Mauri 2026-08-06 23:57:59 +02:00
parent 90bb19eff4
commit 84f9619f8c
4 changed files with 57 additions and 17 deletions

View File

@ -1 +1 @@
3.14 3.11

27
main.py
View File

@ -6,7 +6,6 @@ from enum import IntEnum
from typing import NamedTuple from typing import NamedTuple
from LoRaRF import SX126x from LoRaRF import SX126x
LoRa = SX126x() LoRa = SX126x()
# As per EN 300 220-2 V3.3.1; Annex B table 1 # As per EN 300 220-2 V3.3.1; Annex B table 1
@ -50,7 +49,7 @@ class LoRaPacketHeader:
return base + time_bytes return base + time_bytes
@classmethod @classmethod
def unpack(cls, data: bytes) -> LoRaPacketHeader: def unpack(cls, data: bytes) -> 'LoRaPacketHeader':
t, i, n = struct.unpack(f'{ENDIAN}B B B', data[0:3]) t, i, n = struct.unpack(f'{ENDIAN}B B B', data[0:3])
time_val = int.from_bytes(data[3:9], byteorder='little', signed=False) time_val = int.from_bytes(data[3:9], byteorder='little', signed=False)
return cls(t, i, n, time_val) return cls(t, i, n, time_val)
@ -79,7 +78,7 @@ class LoRaSyncPacket:
return hdr + bf_bytes + padding return hdr + bf_bytes + padding
@classmethod @classmethod
def unpack(cls, data: bytes) -> LoRaSyncPacket: def unpack(cls, data: bytes) -> 'LoRaSyncPacket':
hdr = LoRaPacketHeader.unpack(data[:9]) hdr = LoRaPacketHeader.unpack(data[:9])
bitfield = int.from_bytes(data[9:12], byteorder='little', signed=False) bitfield = int.from_bytes(data[9:12], byteorder='little', signed=False)
@ -99,7 +98,7 @@ class LoRaConnectPacket:
return self.header.pack() + b'\x00' * 6 return self.header.pack() + b'\x00' * 6
@classmethod @classmethod
def unpack(cls, data: bytes) -> LoRaConnectPacket: def unpack(cls, data: bytes) -> 'LoRaConnectPacket':
return cls(LoRaPacketHeader.unpack(data[:9])) return cls(LoRaPacketHeader.unpack(data[:9]))
@ -114,7 +113,7 @@ class LoRaAcceptPacket:
return hdr + ctime return hdr + ctime
@classmethod @classmethod
def unpack(cls, data: bytes) -> LoRaAcceptPacket: def unpack(cls, data: bytes) -> 'LoRaAcceptPacket':
hdr = LoRaPacketHeader.unpack(data[:9]) hdr = LoRaPacketHeader.unpack(data[:9])
ctime = int.from_bytes(data[9:15], byteorder='little', signed=False) ctime = int.from_bytes(data[9:15], byteorder='little', signed=False)
return cls(hdr, ctime) return cls(hdr, ctime)
@ -148,7 +147,7 @@ class LoRaDataPacket:
return hdr + payload return hdr + payload
@classmethod @classmethod
def unpack(cls, data: bytes) -> LoRaDataPacket: def unpack(cls, data: bytes) -> 'LoRaDataPacket':
hdr = LoRaPacketHeader.unpack(data[:9]) hdr = LoRaPacketHeader.unpack(data[:9])
fmt = f'{ENDIAN}H H H h H H h f f h' fmt = f'{ENDIAN}H H H h H H h f f h'
payload = struct.unpack(fmt, data[9:33]) payload = struct.unpack(fmt, data[9:33])
@ -168,7 +167,7 @@ class LoRaCommandPacket:
return hdr + payload return hdr + payload
@classmethod @classmethod
def unpack(cls, data: bytes) -> LoRaCommandPacket: def unpack(cls, data: bytes) -> 'LoRaCommandPacket':
hdr = LoRaPacketHeader.unpack(data[:9]) hdr = LoRaPacketHeader.unpack(data[:9])
cmd, val = struct.unpack(f'{ENDIAN}B Q', data[9:18]) cmd, val = struct.unpack(f'{ENDIAN}B Q', data[9:18])
return cls(hdr, cmd, val) return cls(hdr, cmd, val)
@ -383,7 +382,7 @@ class LoRaGSStateMachine:
"""Transmit packet over SPI to SX1262 and update self.last_tx_time.""" """Transmit packet over SPI to SX1262 and update self.last_tx_time."""
# TODO: Implement via LoRaRF # TODO: Implement via LoRaRF
LoRa.beginPacket() LoRa.beginPacket()
LoRa.write(data, len(data)) LoRa.write(list(data), len(data))
LoRa.endPacket(timeout_ms * 64) LoRa.endPacket(timeout_ms * 64)
self.last_tx_time = self.now_ms() self.last_tx_time = self.now_ms()
return True return True
@ -391,7 +390,7 @@ class LoRaGSStateMachine:
def lora_receive_timeout(self, timeout_ms: int) -> bool: def lora_receive_timeout(self, timeout_ms: int) -> bool:
"""Listen for incoming packets until timeout. Update self.last_rx_time.""" """Listen for incoming packets until timeout. Update self.last_rx_time."""
LoRa.request(timeout_ms) LoRa.request(timeout_ms)
LoRa.wait() LoRa.wait(timeout_ms / 1000)
status = LoRa.status() status = LoRa.status()
if status == LoRa.STATUS_RX_DONE: if status == LoRa.STATUS_RX_DONE:
@ -415,9 +414,13 @@ class LoRaGSStateMachine:
def main(): def main():
print("Starting up LoRa module") print("Starting up LoRa module")
LoRa.setPins(23, 25, 24, -1, 5)
LoRa.setSpi(0, 0, 4_000_000) #LoRa.setPins(23, 25, 24, -1, 5)
LoRa.begin() #LoRa.setSpi(0, 0, 4_000_000)
LoRa.begin(0, 0, 23, 25, 24, -1, 5)
#LoRa.begin()
print("LoRa module started") print("LoRa module started")
print("Setting LoRa paramters") print("Setting LoRa paramters")

View File

@ -3,7 +3,11 @@ name = "raspberry"
version = "0.1.0" version = "0.1.0"
description = "Add your description here" description = "Add your description here"
readme = "README.md" readme = "README.md"
requires-python = ">=3.14" requires-python = ">=3.11, <3.13"
dependencies = [ dependencies = [
"lorarf>=1.4.0", "lorarf>=1.4.0",
"rpi-lgpio>=0.6",
] ]
[tool.uv]
override-dependencies = ["rpi-gpio; sys_platform == 'never'"]

39
uv.lock generated
View File

@ -1,13 +1,30 @@
version = 1 version = 1
revision = 3 revision = 3
requires-python = ">=3.14" requires-python = ">=3.11, <3.13"
[manifest]
overrides = [{ name = "rpi-gpio", marker = "sys_platform == 'never'" }]
[[package]]
name = "lgpio"
version = "0.2.2.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz", hash = "sha256:11372e653b200f76a0b3ef8a23a0735c85ec678a9f8550b9893151ed0f863fff", size = 90087, upload-time = "2024-03-29T21:59:55.901Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/78/4e/5721ae44b29e4fe9175f68c881694e3713066590739a7c87f8cee2835c25/lgpio-0.2.2.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:5b3c403e1fba9c17d178f1bde102726c548fc5c4fc1ccf5ec3e18f3c08e07e04", size = 382992, upload-time = "2024-03-29T22:00:45.039Z" },
{ url = "https://files.pythonhosted.org/packages/88/53/e57a22fe815fc68d0991655c1105b8ed872a68491d32e4e0e7d10ffb5c4d/lgpio-0.2.2.0-cp311-cp311-manylinux_2_34_aarch64.whl", hash = "sha256:a2f71fb95b149d8ac82c7c6bae70f054f6dc42a006ad35c90c7d8e54921fbcf4", size = 364848, upload-time = "2024-04-01T22:49:45.889Z" },
{ url = "https://files.pythonhosted.org/packages/a4/71/11f4e3d76400e4ca43f9f9b014f5a86d9a265340c0bea45cce037277eb34/lgpio-0.2.2.0-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:e9f4f3915abe5ae0ffdb4b96f485076d80a663876d839e2d3fd9218a71b9873e", size = 370183, upload-time = "2024-04-13T14:08:14.139Z" },
{ url = "https://files.pythonhosted.org/packages/fe/73/e56c9afb845df53492d42bdea01df9895272bccfdd5128f34719c3a07990/lgpio-0.2.2.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:6c65ac42e878764d04a71ed12fe6d46089b36e9e8127722bf29bb2e4bc91de22", size = 383956, upload-time = "2024-03-29T22:00:47.315Z" },
{ url = "https://files.pythonhosted.org/packages/3b/1c/becd00f66d2c65feed9a668ff9d91732394cb6baba7bec505d55de0e30c9/lgpio-0.2.2.0-cp312-cp312-manylinux_2_34_aarch64.whl", hash = "sha256:d907db79292c721c605af08187385ddb3b7af09907e1ffca56cf0cd6558ace0a", size = 366058, upload-time = "2024-04-01T22:49:47.615Z" },
{ url = "https://files.pythonhosted.org/packages/4c/7a/e3b4e5225c9792c4092b2cc07504746acbe62d0a8e4cb023bdf65f6430cf/lgpio-0.2.2.0-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:2aadff092f642fcdada8457c158f87259dfda3a89ec19bae0b99ff22b34aac4b", size = 372103, upload-time = "2024-04-13T14:08:16.351Z" },
]
[[package]] [[package]]
name = "lorarf" name = "lorarf"
version = "1.4.0" version = "1.4.0"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
dependencies = [ dependencies = [
{ name = "rpi-gpio" }, { name = "rpi-gpio", marker = "sys_platform == 'never'" },
{ name = "spidev" }, { name = "spidev" },
] ]
sdist = { url = "https://files.pythonhosted.org/packages/20/0c/8d68be030540edeada07a19dd653ea6874eefedea7084f770f83fb9cdd87/LoRaRF-1.4.0.tar.gz", hash = "sha256:ac28e7d5adebfc176b7d9d0cf70a0ad8627f589c3f808664d2fce2c64f0ac9b5", size = 22412, upload-time = "2022-09-25T07:42:06.3Z" } sdist = { url = "https://files.pythonhosted.org/packages/20/0c/8d68be030540edeada07a19dd653ea6874eefedea7084f770f83fb9cdd87/LoRaRF-1.4.0.tar.gz", hash = "sha256:ac28e7d5adebfc176b7d9d0cf70a0ad8627f589c3f808664d2fce2c64f0ac9b5", size = 22412, upload-time = "2022-09-25T07:42:06.3Z" }
@ -21,10 +38,14 @@ version = "0.1.0"
source = { virtual = "." } source = { virtual = "." }
dependencies = [ dependencies = [
{ name = "lorarf" }, { name = "lorarf" },
{ name = "rpi-lgpio" },
] ]
[package.metadata] [package.metadata]
requires-dist = [{ name = "lorarf", specifier = ">=1.4.0" }] requires-dist = [
{ name = "lorarf", specifier = ">=1.4.0" },
{ name = "rpi-lgpio", specifier = ">=0.6" },
]
[[package]] [[package]]
name = "rpi-gpio" name = "rpi-gpio"
@ -32,6 +53,18 @@ version = "0.7.1"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/c4/0f/10b524a12b3445af1c607c27b2f5ed122ef55756e29942900e5c950735f2/RPi.GPIO-0.7.1.tar.gz", hash = "sha256:cd61c4b03c37b62bba4a5acfea9862749c33c618e0295e7e90aa4713fb373b70", size = 29090, upload-time = "2022-02-06T15:15:06.022Z" } sdist = { url = "https://files.pythonhosted.org/packages/c4/0f/10b524a12b3445af1c607c27b2f5ed122ef55756e29942900e5c950735f2/RPi.GPIO-0.7.1.tar.gz", hash = "sha256:cd61c4b03c37b62bba4a5acfea9862749c33c618e0295e7e90aa4713fb373b70", size = 29090, upload-time = "2022-02-06T15:15:06.022Z" }
[[package]]
name = "rpi-lgpio"
version = "0.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "lgpio" },
]
sdist = { url = "https://files.pythonhosted.org/packages/6e/6d/7b6cb0def16abda6af89d16a3363d4036501bf042f9c67668aad3b34927f/rpi_lgpio-0.6.tar.gz", hash = "sha256:84579b11d543bb8abdddc1e10fcd6bdc2819e5897be72d6949a2b044d71fb73e", size = 12723, upload-time = "2024-05-11T16:09:29.463Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/da/a9/06b843528e47ded0dd276537e9c56e7aec7c841b3b2749274e7d8121dab5/rpi_lgpio-0.6-py3-none-any.whl", hash = "sha256:0930b6e0ffbfbeee9366fbfa5038d29a7606be96a5229d570b1f81be8f776777", size = 11880, upload-time = "2024-05-11T16:09:27.75Z" },
]
[[package]] [[package]]
name = "spidev" name = "spidev"
version = "3.8" version = "3.8"