From bf633bba5db7ce2ab0c4fb9bb1963e33ee1e2270 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 21 Nov 2024 13:03:03 +0100 Subject: [PATCH] Internal interface config handling for RNodeInterface --- RNS/Interfaces/RNodeInterface.py | 38 +++++++++++++++++- RNS/Reticulum.py | 68 +------------------------------- 2 files changed, 39 insertions(+), 67 deletions(-) diff --git a/RNS/Interfaces/RNodeInterface.py b/RNS/Interfaces/RNodeInterface.py index 7781163..40aca4f 100644 --- a/RNS/Interfaces/RNodeInterface.py +++ b/RNS/Interfaces/RNodeInterface.py @@ -95,6 +95,7 @@ class KISS(): class RNodeInterface(Interface): MAX_CHUNK = 32768 + DEFAULT_IFAC_SIZE = 8 FREQ_MIN = 137000000 FREQ_MAX = 3000000000 @@ -117,7 +118,7 @@ class RNodeInterface(Interface): BATTERY_STATE_CHARGING = 0x02 BATTERY_STATE_CHARGED = 0x03 - def __init__(self, owner, name, port, frequency = None, bandwidth = None, txpower = None, sf = None, cr = None, flow_control = False, id_interval = None, id_callsign = None, st_alock = None, lt_alock = None, ble_addr = None, ble_name = None, force_ble=False): + def __init__(self, owner, configuration): if RNS.vendor.platformutils.is_android(): raise SystemError("Invalid interface type. The Android-specific RNode interface must be used on Android") @@ -131,6 +132,41 @@ class RNodeInterface(Interface): super().__init__() + c = configuration + name = c["name"] + frequency = int(c["frequency"]) if "frequency" in c else None + bandwidth = int(c["bandwidth"]) if "bandwidth" in c else None + txpower = int(c["txpower"]) if "txpower" in c else None + sf = int(c["spreadingfactor"]) if "spreadingfactor" in c else None + cr = int(c["codingrate"]) if "codingrate" in c else None + flow_control = c.as_bool("flow_control") if "flow_control" in c else False + id_interval = int(c["id_interval"]) if "id_interval" in c else None + id_callsign = c["id_callsign"] if "id_callsign" in c else None + st_alock = float(c["airtime_limit_short"]) if "airtime_limit_short" in c else None + lt_alock = float(c["airtime_limit_long"]) if "airtime_limit_long" in c else None + + force_ble = False + ble_name = None + ble_addr = None + + port = c["port"] if "port" in c else None + + if port == None: + raise ValueError("No port specified for RNode interface") + + if port != None: + ble_uri_scheme = "ble://" + if port.lower().startswith(ble_uri_scheme): + force_ble = True + ble_string = port[len(ble_uri_scheme):] + port = None + if len(ble_string) == 0: + pass + elif len(ble_string.split(":")) == 6 and len(ble_string) == 17: + ble_addr = ble_string + else: + ble_name = ble_string + self.HW_MTU = 508 self.pyserial = serial diff --git a/RNS/Reticulum.py b/RNS/Reticulum.py index fea7e63..1b0bab2 100755 --- a/RNS/Reticulum.py +++ b/RNS/Reticulum.py @@ -631,72 +631,8 @@ class Reticulum: interface_post_init(interface) if c["type"] == "RNodeInterface": - frequency = int(c["frequency"]) if "frequency" in c else None - bandwidth = int(c["bandwidth"]) if "bandwidth" in c else None - txpower = int(c["txpower"]) if "txpower" in c else None - spreadingfactor = int(c["spreadingfactor"]) if "spreadingfactor" in c else None - codingrate = int(c["codingrate"]) if "codingrate" in c else None - flow_control = c.as_bool("flow_control") if "flow_control" in c else False - id_interval = int(c["id_interval"]) if "id_interval" in c else None - id_callsign = c["id_callsign"] if "id_callsign" in c else None - st_alock = float(c["airtime_limit_short"]) if "airtime_limit_short" in c else None - lt_alock = float(c["airtime_limit_long"]) if "airtime_limit_long" in c else None - - force_ble = False - ble_name = None - ble_addr = None - - port = c["port"] if "port" in c else None - - if port == None: - raise ValueError("No port specified for RNode interface") - - if port != None: - ble_uri_scheme = "ble://" - if port.lower().startswith(ble_uri_scheme): - force_ble = True - ble_string = port[len(ble_uri_scheme):] - port = None - if len(ble_string) == 0: - pass - elif len(ble_string.split(":")) == 6 and len(ble_string) == 17: - ble_addr = ble_string - else: - ble_name = ble_string - - interface = RNodeInterface.RNodeInterface( - RNS.Transport, - name, - port, - frequency = frequency, - bandwidth = bandwidth, - txpower = txpower, - sf = spreadingfactor, - cr = codingrate, - flow_control = flow_control, - id_interval = id_interval, - id_callsign = id_callsign, - st_alock = st_alock, - lt_alock = lt_alock, - ble_addr = ble_addr, - ble_name = ble_name, - force_ble = force_ble, - ) - - 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 + interface = RNodeInterface.RNodeInterface(RNS.Transport, interface_config) + interface_post_init(interface) if c["type"] == "RNodeMultiInterface": count = 0