mirror of
https://github.com/markqvist/Reticulum.git
synced 2024-11-23 06:00:18 +00:00
Very basic Meshtastic tunneling interface
This commit is contained in:
parent
ace0d997d4
commit
ebd77a6c7d
67
RNS/Interfaces/MeshtasticInterface.py
Normal file
67
RNS/Interfaces/MeshtasticInterface.py
Normal file
@ -0,0 +1,67 @@
|
||||
|
||||
from .Interface import Interface
|
||||
import meshtastic
|
||||
import meshtastic.serial_interface
|
||||
from pubsub import pub
|
||||
import time
|
||||
import sys
|
||||
import RNS
|
||||
|
||||
|
||||
class MeshtasticInterface(Interface):
|
||||
|
||||
@staticmethod
|
||||
def onReceive(packet, interface):
|
||||
#print(f"Received: {packet}")
|
||||
if packet['decoded']['portnum'] == "PRIVATE_APP":
|
||||
interface.callback.processIncoming(packet['decoded']['payload'])
|
||||
|
||||
def __init__(self, owner, name, port=None, channel=0):
|
||||
super().__init__()
|
||||
|
||||
self.rxb = 0
|
||||
self.txb = 0
|
||||
|
||||
self.HW_MTU = 256
|
||||
|
||||
self.IN = True
|
||||
self.OUT = False
|
||||
self.owner = owner
|
||||
self.name = name
|
||||
self.port = port
|
||||
self.channel = channel
|
||||
self.online = False
|
||||
# static default long-fast bitrate
|
||||
self.bitrate = 5469
|
||||
self.bitrate_kbps = 5.47
|
||||
|
||||
RNS.log("Initializing Meshtastic interface...", RNS.LOG_DEBUG)
|
||||
self.interface = meshtastic.serial_interface.SerialInterface(devPath=port)
|
||||
self.interface.callback = self
|
||||
|
||||
RNS.log("Subscribing to Meshtastic events", RNS.LOG_DEBUG)
|
||||
pub.subscribe(self.onReceive, "meshtastic.receive.data")
|
||||
|
||||
RNS.log("Initialized Meshtastic interface!", RNS.LOG_DEBUG)
|
||||
|
||||
def processIncoming(self, data):
|
||||
RNS.log("Received Meshtastic packet "+RNS.prettyhexrep(data), RNS.LOG_DEBUG)
|
||||
self.rxb += len(data)
|
||||
self.owner.inbound(data, self)
|
||||
|
||||
def processOutgoing(self, data):
|
||||
RNS.log("Sending Meshtastic packet "+RNS.prettyhexrep(data), RNS.LOG_DEBUG)
|
||||
try:
|
||||
#self.interface.sendData(data)
|
||||
self.interface.sendData(data, portNum=256, channelIndex=self.channel)
|
||||
self.txb += len(data)
|
||||
|
||||
except Exception as e:
|
||||
RNS.log("Could not transmit on "+str(self)+". The contained exception was: "+str(e), RNS.LOG_ERROR)
|
||||
|
||||
|
||||
def __str__(self):
|
||||
if self.port == None:
|
||||
return "MeshtasticInterface["+self.name+"]"
|
||||
return "MeshtasticInterface["+self.name+"/"+self.port+"]"
|
||||
|
@ -933,6 +933,33 @@ class Reticulum:
|
||||
else:
|
||||
interface.ifac_size = 8
|
||||
|
||||
if c["type"] == "MeshtasticInterface":
|
||||
|
||||
port = c["port"] if "port" in c else None
|
||||
channel = int(c["channel"]) if "channel" in c else 0
|
||||
|
||||
interface = MeshtasticInterface.MeshtasticInterface(
|
||||
RNS.Transport,
|
||||
name,
|
||||
port,
|
||||
channel
|
||||
)
|
||||
|
||||
if "outgoing" in c and c.as_bool("outgoing") == False:
|
||||
interface.OUT = False
|
||||
else:
|
||||
interface.OUT = True
|
||||
|
||||
interface.mode = interface_mode
|
||||
|
||||
interface.announce_cap = announce_cap
|
||||
if configured_bitrate:
|
||||
interface.bitrate = configured_bitrate
|
||||
if ifac_size != None:
|
||||
interface.ifac_size = ifac_size
|
||||
else:
|
||||
interface.ifac_size = 8
|
||||
|
||||
if interface != None:
|
||||
interface.announce_rate_target = announce_rate_target
|
||||
interface.announce_rate_grace = announce_rate_grace
|
||||
|
Loading…
Reference in New Issue
Block a user