asdasdasd i hate bluetooth with a PASSION

This commit is contained in:
2026-05-15 18:43:03 +10:00
parent 46ae344c0c
commit dfc9cd820d
4 changed files with 54 additions and 6 deletions

View File

@@ -5,8 +5,6 @@ from sx1262 import SX1262
import uasyncio as asyncio
from queue import Queue
from machine import Pin
led = Pin(25, Pin.OUT)
class FixedDeque:
def __init__(self, maxlen):
@@ -73,7 +71,17 @@ class LoRaHandler:
msg_bytes = LoRaMessage(sender_id=self.my_id, recipient_id=recipient_id, payload=data).encode()
self.radio.send(msg_bytes)
def has_seen_message(self, msg: LoRaMessage) -> bool:
if msg.message_id in self.recent_messages:
return True
self.recent_messages.append(msg.message_id)
return False
def forward(self, msg: LoRaMessage):
# ensure we don't process a message twice
if self.has_seen_message(msg):
return
msg_bytes = msg.encode()
self.radio.send(msg_bytes)
@@ -83,9 +91,8 @@ class LoRaHandler:
def on_receive(self, msg: LoRaMessage):
# ensure we don't process a message twice
if msg.message_id in self.recent_messages:
if self.has_seen_message(msg):
return
self.recent_messages.append(msg.message_id)
# messages has a lifetime to prevent infinite loops.
# if we receive a message with lifetime <= 0 we just drop it,
@@ -106,8 +113,10 @@ class LoRaHandler:
if not msg.sender_id in self.neighbours:
print(f"Neighbour discovered: {msg.sender_id}")
self.neighbours.add(msg.sender_id)
self.send(b"Ping!", msg.sender_id)
# tell the sender we heard them by sending a ping back
self.send(b"Ping!", msg.sender_id)
self.forward(msg)
return
asyncio.create_task(self.message_queue.put(msg))