diff --git a/.python-version b/.python-version index 6324d40..2c07333 100644 --- a/.python-version +++ b/.python-version @@ -1 +1 @@ -3.14 +3.11 diff --git a/main.py b/main.py index 365a1f4..529fe1a 100644 --- a/main.py +++ b/main.py @@ -6,7 +6,6 @@ from enum import IntEnum from typing import NamedTuple from LoRaRF import SX126x - LoRa = SX126x() # As per EN 300 220-2 V3.3.1; Annex B table 1 @@ -50,7 +49,7 @@ class LoRaPacketHeader: return base + time_bytes @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]) time_val = int.from_bytes(data[3:9], byteorder='little', signed=False) return cls(t, i, n, time_val) @@ -79,7 +78,7 @@ class LoRaSyncPacket: return hdr + bf_bytes + padding @classmethod - def unpack(cls, data: bytes) -> LoRaSyncPacket: + def unpack(cls, data: bytes) -> 'LoRaSyncPacket': hdr = LoRaPacketHeader.unpack(data[:9]) bitfield = int.from_bytes(data[9:12], byteorder='little', signed=False) @@ -99,7 +98,7 @@ class LoRaConnectPacket: return self.header.pack() + b'\x00' * 6 @classmethod - def unpack(cls, data: bytes) -> LoRaConnectPacket: + def unpack(cls, data: bytes) -> 'LoRaConnectPacket': return cls(LoRaPacketHeader.unpack(data[:9])) @@ -114,7 +113,7 @@ class LoRaAcceptPacket: return hdr + ctime @classmethod - def unpack(cls, data: bytes) -> LoRaAcceptPacket: + def unpack(cls, data: bytes) -> 'LoRaAcceptPacket': hdr = LoRaPacketHeader.unpack(data[:9]) ctime = int.from_bytes(data[9:15], byteorder='little', signed=False) return cls(hdr, ctime) @@ -148,7 +147,7 @@ class LoRaDataPacket: return hdr + payload @classmethod - def unpack(cls, data: bytes) -> LoRaDataPacket: + def unpack(cls, data: bytes) -> 'LoRaDataPacket': hdr = LoRaPacketHeader.unpack(data[:9]) fmt = f'{ENDIAN}H H H h H H h f f h' payload = struct.unpack(fmt, data[9:33]) @@ -168,7 +167,7 @@ class LoRaCommandPacket: return hdr + payload @classmethod - def unpack(cls, data: bytes) -> LoRaCommandPacket: + def unpack(cls, data: bytes) -> 'LoRaCommandPacket': hdr = LoRaPacketHeader.unpack(data[:9]) cmd, val = struct.unpack(f'{ENDIAN}B Q', data[9:18]) return cls(hdr, cmd, val) @@ -383,7 +382,7 @@ class LoRaGSStateMachine: """Transmit packet over SPI to SX1262 and update self.last_tx_time.""" # TODO: Implement via LoRaRF LoRa.beginPacket() - LoRa.write(data, len(data)) + LoRa.write(list(data), len(data)) LoRa.endPacket(timeout_ms * 64) self.last_tx_time = self.now_ms() return True @@ -391,7 +390,7 @@ class LoRaGSStateMachine: def lora_receive_timeout(self, timeout_ms: int) -> bool: """Listen for incoming packets until timeout. Update self.last_rx_time.""" LoRa.request(timeout_ms) - LoRa.wait() + LoRa.wait(timeout_ms / 1000) status = LoRa.status() if status == LoRa.STATUS_RX_DONE: @@ -415,9 +414,13 @@ class LoRaGSStateMachine: def main(): print("Starting up LoRa module") - LoRa.setPins(23, 25, 24, -1, 5) - LoRa.setSpi(0, 0, 4_000_000) - LoRa.begin() + + #LoRa.setPins(23, 25, 24, -1, 5) + #LoRa.setSpi(0, 0, 4_000_000) + + LoRa.begin(0, 0, 23, 25, 24, -1, 5) + + #LoRa.begin() print("LoRa module started") print("Setting LoRa paramters") diff --git a/pyproject.toml b/pyproject.toml index 9d462d9..a06602c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,11 @@ name = "raspberry" version = "0.1.0" description = "Add your description here" readme = "README.md" -requires-python = ">=3.14" +requires-python = ">=3.11, <3.13" dependencies = [ "lorarf>=1.4.0", + "rpi-lgpio>=0.6", ] + +[tool.uv] +override-dependencies = ["rpi-gpio; sys_platform == 'never'"] diff --git a/uv.lock b/uv.lock index 8d1f7f0..9ff90fa 100644 --- a/uv.lock +++ b/uv.lock @@ -1,13 +1,30 @@ version = 1 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]] name = "lorarf" version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "rpi-gpio" }, + { name = "rpi-gpio", marker = "sys_platform == 'never'" }, { 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" } @@ -21,10 +38,14 @@ version = "0.1.0" source = { virtual = "." } dependencies = [ { name = "lorarf" }, + { name = "rpi-lgpio" }, ] [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]] name = "rpi-gpio" @@ -32,6 +53,18 @@ version = "0.7.1" 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" } +[[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]] name = "spidev" version = "3.8"