Cleanup and assorted fixes
This commit is contained in:
parent
14d2739994
commit
6755d2dcbd
@ -160,12 +160,10 @@ class KISS():
|
|||||||
class RNodeMultiInterface(Interface):
|
class RNodeMultiInterface(Interface):
|
||||||
MAX_CHUNK = 32768
|
MAX_CHUNK = 32768
|
||||||
|
|
||||||
RSSI_OFFSET = 157
|
|
||||||
|
|
||||||
CALLSIGN_MAX_LEN = 32
|
CALLSIGN_MAX_LEN = 32
|
||||||
|
|
||||||
REQUIRED_FW_VER_MAJ = 1
|
REQUIRED_FW_VER_MAJ = 1
|
||||||
REQUIRED_FW_VER_MIN = 52
|
REQUIRED_FW_VER_MIN = 73
|
||||||
|
|
||||||
RECONNECT_WAIT = 5
|
RECONNECT_WAIT = 5
|
||||||
|
|
||||||
@ -190,7 +188,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
self.clients = 0
|
self.clients = 0
|
||||||
self.pyserial = serial
|
self.pyserial = serial
|
||||||
self.serial = None
|
self.serial = None
|
||||||
self.last_write_index = 0
|
self.selected_index = 0
|
||||||
self.owner = owner
|
self.owner = owner
|
||||||
self.name = name
|
self.name = name
|
||||||
self.port = port
|
self.port = port
|
||||||
@ -227,14 +225,6 @@ class RNodeMultiInterface(Interface):
|
|||||||
self.r_st_alock = None
|
self.r_st_alock = None
|
||||||
self.r_lt_alock = None
|
self.r_lt_alock = None
|
||||||
self.r_random = None
|
self.r_random = None
|
||||||
self.r_airtime_short = 0.0
|
|
||||||
self.r_airtime_long = 0.0
|
|
||||||
self.r_channel_load_short = 0.0
|
|
||||||
self.r_channel_load_long = 0.0
|
|
||||||
self.r_symbol_time_ms = None
|
|
||||||
self.r_symbol_rate = None
|
|
||||||
self.r_preamble_symbols = None
|
|
||||||
self.r_premable_time_ms = None
|
|
||||||
|
|
||||||
self.packet_queue = []
|
self.packet_queue = []
|
||||||
self.interface_ready = False
|
self.interface_ready = False
|
||||||
@ -334,11 +324,8 @@ class RNodeMultiInterface(Interface):
|
|||||||
|
|
||||||
interface.OUT = True
|
interface.OUT = True
|
||||||
interface.IN = self.IN
|
interface.IN = self.IN
|
||||||
#interface.bitrate = self.bitrate
|
|
||||||
|
|
||||||
interface.announce_rate_target = self.announce_rate_target
|
interface.announce_rate_target = self.announce_rate_target
|
||||||
#interface.announce_rate_grace = self.announce_rate_grace
|
|
||||||
#interface.announce_rate_penalty = self.announce_rate_penalty
|
|
||||||
interface.mode = self.mode
|
interface.mode = self.mode
|
||||||
interface.HW_MTU = self.HW_MTU
|
interface.HW_MTU = self.HW_MTU
|
||||||
interface.detected = True
|
interface.detected = True
|
||||||
@ -420,7 +407,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
written = self.serial.write(kiss_command)
|
written = self.serial.write(kiss_command)
|
||||||
if written != len(kiss_command):
|
if written != len(kiss_command):
|
||||||
raise IOError("An IO error occurred while configuring frequency for "+str(self))
|
raise IOError("An IO error occurred while configuring frequency for "+str(self))
|
||||||
self.last_write_index = interface.index
|
self.selected_index = interface.index
|
||||||
|
|
||||||
def setBandwidth(self, bandwidth, interface):
|
def setBandwidth(self, bandwidth, interface):
|
||||||
c1 = bandwidth >> 24
|
c1 = bandwidth >> 24
|
||||||
@ -433,7 +420,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
written = self.serial.write(kiss_command)
|
written = self.serial.write(kiss_command)
|
||||||
if written != len(kiss_command):
|
if written != len(kiss_command):
|
||||||
raise IOError("An IO error occurred while configuring bandwidth for "+str(self))
|
raise IOError("An IO error occurred while configuring bandwidth for "+str(self))
|
||||||
self.last_write_index = interface.index
|
self.selected_index = interface.index
|
||||||
|
|
||||||
def setTXPower(self, txpower, interface):
|
def setTXPower(self, txpower, interface):
|
||||||
txp = bytes([txpower])
|
txp = bytes([txpower])
|
||||||
@ -441,7 +428,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
written = self.serial.write(kiss_command)
|
written = self.serial.write(kiss_command)
|
||||||
if written != len(kiss_command):
|
if written != len(kiss_command):
|
||||||
raise IOError("An IO error occurred while configuring TX power for "+str(self))
|
raise IOError("An IO error occurred while configuring TX power for "+str(self))
|
||||||
self.last_write_index = interface.index
|
self.selected_index = interface.index
|
||||||
|
|
||||||
def setSpreadingFactor(self, sf, interface):
|
def setSpreadingFactor(self, sf, interface):
|
||||||
sf = bytes([sf])
|
sf = bytes([sf])
|
||||||
@ -449,7 +436,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
written = self.serial.write(kiss_command)
|
written = self.serial.write(kiss_command)
|
||||||
if written != len(kiss_command):
|
if written != len(kiss_command):
|
||||||
raise IOError("An IO error occurred while configuring spreading factor for "+str(self))
|
raise IOError("An IO error occurred while configuring spreading factor for "+str(self))
|
||||||
self.last_write_index = interface.index
|
self.selected_index = interface.index
|
||||||
|
|
||||||
def setCodingRate(self, cr, interface):
|
def setCodingRate(self, cr, interface):
|
||||||
cr = bytes([cr])
|
cr = bytes([cr])
|
||||||
@ -457,7 +444,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
written = self.serial.write(kiss_command)
|
written = self.serial.write(kiss_command)
|
||||||
if written != len(kiss_command):
|
if written != len(kiss_command):
|
||||||
raise IOError("An IO error occurred while configuring coding rate for "+str(self))
|
raise IOError("An IO error occurred while configuring coding rate for "+str(self))
|
||||||
self.last_write_index = interface.index
|
self.selected_index = interface.index
|
||||||
|
|
||||||
def setSTALock(self, st_alock, interface):
|
def setSTALock(self, st_alock, interface):
|
||||||
if st_alock != None:
|
if st_alock != None:
|
||||||
@ -470,7 +457,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
written = self.serial.write(kiss_command)
|
written = self.serial.write(kiss_command)
|
||||||
if written != len(kiss_command):
|
if written != len(kiss_command):
|
||||||
raise IOError("An IO error occurred while configuring short-term airtime limit for "+str(self))
|
raise IOError("An IO error occurred while configuring short-term airtime limit for "+str(self))
|
||||||
self.last_write_index = interface.index
|
self.selected_index = interface.index
|
||||||
|
|
||||||
def setLTALock(self, lt_alock, interface):
|
def setLTALock(self, lt_alock, interface):
|
||||||
if lt_alock != None:
|
if lt_alock != None:
|
||||||
@ -483,7 +470,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
written = self.serial.write(kiss_command)
|
written = self.serial.write(kiss_command)
|
||||||
if written != len(kiss_command):
|
if written != len(kiss_command):
|
||||||
raise IOError("An IO error occurred while configuring long-term airtime limit for "+str(self))
|
raise IOError("An IO error occurred while configuring long-term airtime limit for "+str(self))
|
||||||
self.last_write_index = interface.index
|
self.selected_index = interface.index
|
||||||
|
|
||||||
def setRadioState(self, state, interface):
|
def setRadioState(self, state, interface):
|
||||||
#self.state = state
|
#self.state = state
|
||||||
@ -491,7 +478,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
written = self.serial.write(kiss_command)
|
written = self.serial.write(kiss_command)
|
||||||
if written != len(kiss_command):
|
if written != len(kiss_command):
|
||||||
raise IOError("An IO error occurred while configuring radio state for "+str(self))
|
raise IOError("An IO error occurred while configuring radio state for "+str(self))
|
||||||
self.last_write_index = interface.index
|
self.selected_index = interface.index
|
||||||
|
|
||||||
def validate_firmware(self):
|
def validate_firmware(self):
|
||||||
if (self.maj_version >= RNodeMultiInterface.REQUIRED_FW_VER_MAJ):
|
if (self.maj_version >= RNodeMultiInterface.REQUIRED_FW_VER_MAJ):
|
||||||
@ -503,7 +490,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
|
|
||||||
RNS.log("The firmware version of the connected RNode is "+str(self.maj_version)+"."+str(self.min_version), RNS.LOG_ERROR)
|
RNS.log("The firmware version of the connected RNode is "+str(self.maj_version)+"."+str(self.min_version), RNS.LOG_ERROR)
|
||||||
RNS.log("This version of Reticulum requires at least version "+str(RNodeMultiInterface.REQUIRED_FW_VER_MAJ)+"."+str(RNodeMultiInterface.REQUIRED_FW_VER_MIN), RNS.LOG_ERROR)
|
RNS.log("This version of Reticulum requires at least version "+str(RNodeMultiInterface.REQUIRED_FW_VER_MAJ)+"."+str(RNodeMultiInterface.REQUIRED_FW_VER_MIN), RNS.LOG_ERROR)
|
||||||
RNS.log("Please update your RNode firmware with rnodeconf from https://github.com/markqvist/rnodeconfigutil/")
|
RNS.log("Please update your RNode firmware with rnodeconf from https://github.com/markqvist/Reticulum/RNS/Utilities/rnodeconf.py")
|
||||||
RNS.panic()
|
RNS.panic()
|
||||||
|
|
||||||
def processOutgoing(self, data, interface = None):
|
def processOutgoing(self, data, interface = None):
|
||||||
@ -555,6 +542,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
command == KISS.CMD_INT11_DATA)):
|
command == KISS.CMD_INT11_DATA)):
|
||||||
in_frame = False
|
in_frame = False
|
||||||
self.subinterfaces[KISS.int_data_cmd_to_index(command)].processIncoming(data_buffer)
|
self.subinterfaces[KISS.int_data_cmd_to_index(command)].processIncoming(data_buffer)
|
||||||
|
self.selected_index = KISS.int_data_cmd_to_index(command)
|
||||||
data_buffer = b""
|
data_buffer = b""
|
||||||
command_buffer = b""
|
command_buffer = b""
|
||||||
elif (byte == KISS.FEND):
|
elif (byte == KISS.FEND):
|
||||||
@ -599,9 +587,9 @@ class RNodeMultiInterface(Interface):
|
|||||||
escape = False
|
escape = False
|
||||||
command_buffer = command_buffer+bytes([byte])
|
command_buffer = command_buffer+bytes([byte])
|
||||||
if (len(command_buffer) == 4):
|
if (len(command_buffer) == 4):
|
||||||
self.subinterfaces[self.last_write_index].r_frequency = command_buffer[0] << 24 | command_buffer[1] << 16 | command_buffer[2] << 8 | command_buffer[3]
|
self.subinterfaces[self.selected_index].r_frequency = command_buffer[0] << 24 | command_buffer[1] << 16 | command_buffer[2] << 8 | command_buffer[3]
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting frequency is "+str(self.subinterfaces[self.last_write_index].r_frequency/1000000.0)+" MHz", RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting frequency is "+str(self.subinterfaces[self.selected_index].r_frequency/1000000.0)+" MHz", RNS.LOG_DEBUG)
|
||||||
self.subinterfaces[self.last_write_index].updateBitrate()
|
self.subinterfaces[self.selected_index].updateBitrate()
|
||||||
|
|
||||||
elif (command == KISS.CMD_BANDWIDTH):
|
elif (command == KISS.CMD_BANDWIDTH):
|
||||||
if (byte == KISS.FESC):
|
if (byte == KISS.FESC):
|
||||||
@ -615,31 +603,31 @@ class RNodeMultiInterface(Interface):
|
|||||||
escape = False
|
escape = False
|
||||||
command_buffer = command_buffer+bytes([byte])
|
command_buffer = command_buffer+bytes([byte])
|
||||||
if (len(command_buffer) == 4):
|
if (len(command_buffer) == 4):
|
||||||
self.subinterfaces[self.last_write_index].r_bandwidth = command_buffer[0] << 24 | command_buffer[1] << 16 | command_buffer[2] << 8 | command_buffer[3]
|
self.subinterfaces[self.selected_index].r_bandwidth = command_buffer[0] << 24 | command_buffer[1] << 16 | command_buffer[2] << 8 | command_buffer[3]
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting bandwidth is "+str(self.subinterfaces[self.last_write_index].r_bandwidth/1000.0)+" KHz", RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting bandwidth is "+str(self.subinterfaces[self.selected_index].r_bandwidth/1000.0)+" KHz", RNS.LOG_DEBUG)
|
||||||
self.subinterfaces[self.last_write_index].updateBitrate()
|
self.subinterfaces[self.selected_index].updateBitrate()
|
||||||
|
|
||||||
elif (command == KISS.CMD_TXPOWER):
|
elif (command == KISS.CMD_TXPOWER):
|
||||||
self.subinterfaces[self.last_write_index].r_txpower = byte
|
self.subinterfaces[self.selected_index].r_txpower = byte
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting TX power is "+str(self.subinterfaces[self.last_write_index].r_txpower)+" dBm", RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting TX power is "+str(self.subinterfaces[self.selected_index].r_txpower)+" dBm", RNS.LOG_DEBUG)
|
||||||
elif (command == KISS.CMD_SF):
|
elif (command == KISS.CMD_SF):
|
||||||
self.subinterfaces[self.last_write_index].r_sf = byte
|
self.subinterfaces[self.selected_index].r_sf = byte
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting spreading factor is "+str(self.subinterfaces[self.last_write_index].r_sf), RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting spreading factor is "+str(self.subinterfaces[self.selected_index].r_sf), RNS.LOG_DEBUG)
|
||||||
self.subinterfaces[self.last_write_index].updateBitrate()
|
self.subinterfaces[self.selected_index].updateBitrate()
|
||||||
elif (command == KISS.CMD_CR):
|
elif (command == KISS.CMD_CR):
|
||||||
self.subinterfaces[self.last_write_index].r_cr = byte
|
self.subinterfaces[self.selected_index].r_cr = byte
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting coding rate is "+str(self.subinterfaces[self.last_write_index].r_cr), RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting coding rate is "+str(self.subinterfaces[self.selected_index].r_cr), RNS.LOG_DEBUG)
|
||||||
self.subinterfaces[self.last_write_index].updateBitrate()
|
self.subinterfaces[self.selected_index].updateBitrate()
|
||||||
elif (command == KISS.CMD_RADIO_STATE):
|
elif (command == KISS.CMD_RADIO_STATE):
|
||||||
self.subinterfaces[self.last_write_index].r_state = byte
|
self.subinterfaces[self.selected_index].r_state = byte
|
||||||
if self.subinterfaces[self.last_write_index].r_state:
|
if self.subinterfaces[self.selected_index].r_state:
|
||||||
pass
|
pass
|
||||||
#RNS.log(str(self)+" Radio reporting state is online", RNS.LOG_DEBUG)
|
#RNS.log(str(self)+" Radio reporting state is online", RNS.LOG_DEBUG)
|
||||||
else:
|
else:
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting state is offline", RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting state is offline", RNS.LOG_DEBUG)
|
||||||
|
|
||||||
elif (command == KISS.CMD_RADIO_LOCK):
|
elif (command == KISS.CMD_RADIO_LOCK):
|
||||||
self.subinterfaces[self.last_write_index].r_lock = byte
|
self.subinterfaces[self.selected_index].r_lock = byte
|
||||||
elif (command == KISS.CMD_FW_VERSION):
|
elif (command == KISS.CMD_FW_VERSION):
|
||||||
if (byte == KISS.FESC):
|
if (byte == KISS.FESC):
|
||||||
escape = True
|
escape = True
|
||||||
@ -656,48 +644,49 @@ class RNodeMultiInterface(Interface):
|
|||||||
self.min_version = int(command_buffer[1])
|
self.min_version = int(command_buffer[1])
|
||||||
self.validate_firmware()
|
self.validate_firmware()
|
||||||
|
|
||||||
elif (command == KISS.CMD_STAT_RX):
|
# not implemented in RNode_Firmware yet
|
||||||
if (byte == KISS.FESC):
|
#elif (command == KISS.CMD_STAT_RX):
|
||||||
escape = True
|
# if (byte == KISS.FESC):
|
||||||
else:
|
# escape = True
|
||||||
if (escape):
|
# else:
|
||||||
if (byte == KISS.TFEND):
|
# if (escape):
|
||||||
byte = KISS.FEND
|
# if (byte == KISS.TFEND):
|
||||||
if (byte == KISS.TFESC):
|
# byte = KISS.FEND
|
||||||
byte = KISS.FESC
|
# if (byte == KISS.TFESC):
|
||||||
escape = False
|
# byte = KISS.FESC
|
||||||
command_buffer = command_buffer+bytes([byte])
|
# escape = False
|
||||||
if (len(command_buffer) == 4):
|
# command_buffer = command_buffer+bytes([byte])
|
||||||
self.r_stat_rx = ord(command_buffer[0]) << 24 | ord(command_buffer[1]) << 16 | ord(command_buffer[2]) << 8 | ord(command_buffer[3])
|
# if (len(command_buffer) == 4):
|
||||||
|
# self.r_stat_rx = ord(command_buffer[0]) << 24 | ord(command_buffer[1]) << 16 | ord(command_buffer[2]) << 8 | ord(command_buffer[3])
|
||||||
|
|
||||||
elif (command == KISS.CMD_STAT_TX):
|
#elif (command == KISS.CMD_STAT_TX):
|
||||||
if (byte == KISS.FESC):
|
# if (byte == KISS.FESC):
|
||||||
escape = True
|
# escape = True
|
||||||
else:
|
# else:
|
||||||
if (escape):
|
# if (escape):
|
||||||
if (byte == KISS.TFEND):
|
# if (byte == KISS.TFEND):
|
||||||
byte = KISS.FEND
|
# byte = KISS.FEND
|
||||||
if (byte == KISS.TFESC):
|
# if (byte == KISS.TFESC):
|
||||||
byte = KISS.FESC
|
# byte = KISS.FESC
|
||||||
escape = False
|
# escape = False
|
||||||
command_buffer = command_buffer+bytes([byte])
|
# command_buffer = command_buffer+bytes([byte])
|
||||||
if (len(command_buffer) == 4):
|
# if (len(command_buffer) == 4):
|
||||||
self.r_stat_tx = ord(command_buffer[0]) << 24 | ord(command_buffer[1]) << 16 | ord(command_buffer[2]) << 8 | ord(command_buffer[3])
|
# self.r_stat_tx = ord(command_buffer[0]) << 24 | ord(command_buffer[1]) << 16 | ord(command_buffer[2]) << 8 | ord(command_buffer[3])
|
||||||
|
|
||||||
elif (command == KISS.CMD_STAT_RSSI):
|
elif (command == KISS.CMD_STAT_RSSI):
|
||||||
self.r_stat_rssi = byte-RNodeMultiInterface.RSSI_OFFSET
|
self.subinterfaces[self.selected_index].r_stat_rssi = byte-RNodeSubInterface.RSSI_OFFSET
|
||||||
elif (command == KISS.CMD_STAT_SNR):
|
elif (command == KISS.CMD_STAT_SNR):
|
||||||
self.r_stat_snr = int.from_bytes(bytes([byte]), byteorder="big", signed=True) * 0.25
|
self.subinterfaces[self.selected_index].r_stat_snr = int.from_bytes(bytes([byte]), byteorder="big", signed=True) * 0.25
|
||||||
try:
|
try:
|
||||||
sfs = self.r_sf-7
|
sfs = self.subinterfaces[self.selected_index].r_sf-7
|
||||||
snr = self.r_stat_snr
|
snr = self.subinterfaces[self.selected_index].r_stat_snr
|
||||||
q_snr_min = RNodeMultiInterface.Q_SNR_MIN_BASE-sfs*RNodeMultiInterface.Q_SNR_STEP
|
q_snr_min = RNodeSubInterface.Q_SNR_MIN_BASE-sfs*RNodeSubInterface.Q_SNR_STEP
|
||||||
q_snr_max = RNodeMultiInterface.Q_SNR_MAX
|
q_snr_max = RNodeSubInterface.Q_SNR_MAX
|
||||||
q_snr_span = q_snr_max-q_snr_min
|
q_snr_span = q_snr_max-q_snr_min
|
||||||
quality = round(((snr-q_snr_min)/(q_snr_span))*100,1)
|
quality = round(((snr-q_snr_min)/(q_snr_span))*100,1)
|
||||||
if quality > 100.0: quality = 100.0
|
if quality > 100.0: quality = 100.0
|
||||||
if quality < 0.0: quality = 0.0
|
if quality < 0.0: quality = 0.0
|
||||||
self.r_stat_q = quality
|
self.subinterfaces[self.selected_index].r_stat_q = quality
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
elif (command == KISS.CMD_ST_ALOCK):
|
elif (command == KISS.CMD_ST_ALOCK):
|
||||||
@ -713,8 +702,8 @@ class RNodeMultiInterface(Interface):
|
|||||||
command_buffer = command_buffer+bytes([byte])
|
command_buffer = command_buffer+bytes([byte])
|
||||||
if (len(command_buffer) == 2):
|
if (len(command_buffer) == 2):
|
||||||
at = command_buffer[0] << 8 | command_buffer[1]
|
at = command_buffer[0] << 8 | command_buffer[1]
|
||||||
self.subinterfaces[self.last_write_index].r_st_alock = at/100.0
|
self.subinterfaces[self.selected_index].r_st_alock = at/100.0
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting short-term airtime limit is "+str(self.subinterfaces[self.last_write_index].r_st_alock)+"%", RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting short-term airtime limit is "+str(self.subinterfaces[self.selected_index].r_st_alock)+"%", RNS.LOG_DEBUG)
|
||||||
elif (command == KISS.CMD_LT_ALOCK):
|
elif (command == KISS.CMD_LT_ALOCK):
|
||||||
if (byte == KISS.FESC):
|
if (byte == KISS.FESC):
|
||||||
escape = True
|
escape = True
|
||||||
@ -728,8 +717,8 @@ class RNodeMultiInterface(Interface):
|
|||||||
command_buffer = command_buffer+bytes([byte])
|
command_buffer = command_buffer+bytes([byte])
|
||||||
if (len(command_buffer) == 2):
|
if (len(command_buffer) == 2):
|
||||||
at = command_buffer[0] << 8 | command_buffer[1]
|
at = command_buffer[0] << 8 | command_buffer[1]
|
||||||
self.subinterfaces[self.last_write_index].r_lt_alock = at/100.0
|
self.subinterfaces[self.selected_index].r_lt_alock = at/100.0
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting long-term airtime limit is "+str(self.subinterfaces[self.last_write_index].r_lt_alock)+"%", RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting long-term airtime limit is "+str(self.subinterfaces[self.selected_index].r_lt_alock)+"%", RNS.LOG_DEBUG)
|
||||||
elif (command == KISS.CMD_STAT_CHTM):
|
elif (command == KISS.CMD_STAT_CHTM):
|
||||||
if (byte == KISS.FESC):
|
if (byte == KISS.FESC):
|
||||||
escape = True
|
escape = True
|
||||||
@ -769,15 +758,15 @@ class RNodeMultiInterface(Interface):
|
|||||||
prt = command_buffer[6] << 8 | command_buffer[7]
|
prt = command_buffer[6] << 8 | command_buffer[7]
|
||||||
cst = command_buffer[8] << 8 | command_buffer[9]
|
cst = command_buffer[8] << 8 | command_buffer[9]
|
||||||
|
|
||||||
if lst != self.subinterfaces[self.last_write_index].r_symbol_time_ms or lsr != self.subinterfaces[self.last_write_index].r_symbol_rate or prs != self.subinterfaces[self.last_write_index].r_preamble_symbols or prt != self.subinterfaces[self.last_write_index].r_premable_time_ms or cst != self.subinterfaces[self.last_write_index].r_csma_slot_time_ms:
|
if lst != self.subinterfaces[self.selected_index].r_symbol_time_ms or lsr != self.subinterfaces[self.selected_index].r_symbol_rate or prs != self.subinterfaces[self.selected_index].r_preamble_symbols or prt != self.subinterfaces[self.selected_index].r_premable_time_ms or cst != self.subinterfaces[self.selected_index].r_csma_slot_time_ms:
|
||||||
self.subinterfaces[self.last_write_index].r_symbol_time_ms = lst
|
self.subinterfaces[self.selected_index].r_symbol_time_ms = lst
|
||||||
self.subinterfaces[self.last_write_index].r_symbol_rate = lsr
|
self.subinterfaces[self.selected_index].r_symbol_rate = lsr
|
||||||
self.subinterfaces[self.last_write_index].r_preamble_symbols = prs
|
self.subinterfaces[self.selected_index].r_preamble_symbols = prs
|
||||||
self.subinterfaces[self.last_write_index].r_premable_time_ms = prt
|
self.subinterfaces[self.selected_index].r_premable_time_ms = prt
|
||||||
self.subinterfaces[self.last_write_index].r_csma_slot_time_ms = cst
|
self.subinterfaces[self.selected_index].r_csma_slot_time_ms = cst
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting symbol time is "+str(round(self.subinterfaces[self.last_write_index].r_symbol_time_ms,2))+"ms (at "+str(self.subinterfaces[self.last_write_index].r_symbol_rate)+" baud)", RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting symbol time is "+str(round(self.subinterfaces[self.selected_index].r_symbol_time_ms,2))+"ms (at "+str(self.subinterfaces[self.selected_index].r_symbol_rate)+" baud)", RNS.LOG_DEBUG)
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting preamble is "+str(self.subinterfaces[self.last_write_index].r_preamble_symbols)+" symbols ("+str(self.subinterfaces[self.last_write_index].r_premable_time_ms)+"ms)", RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting preamble is "+str(self.subinterfaces[self.selected_index].r_preamble_symbols)+" symbols ("+str(self.subinterfaces[self.selected_index].r_premable_time_ms)+"ms)", RNS.LOG_DEBUG)
|
||||||
RNS.log(str(self.subinterfaces[self.last_write_index])+" Radio reporting CSMA slot time is "+str(self.subinterfaces[self.last_write_index].r_csma_slot_time_ms)+"ms", RNS.LOG_DEBUG)
|
RNS.log(str(self.subinterfaces[self.selected_index])+" Radio reporting CSMA slot time is "+str(self.subinterfaces[self.selected_index].r_csma_slot_time_ms)+"ms", RNS.LOG_DEBUG)
|
||||||
elif (command == KISS.CMD_RANDOM):
|
elif (command == KISS.CMD_RANDOM):
|
||||||
self.r_random = byte
|
self.r_random = byte
|
||||||
elif (command == KISS.CMD_PLATFORM):
|
elif (command == KISS.CMD_PLATFORM):
|
||||||
@ -874,7 +863,7 @@ class RNodeMultiInterface(Interface):
|
|||||||
|
|
||||||
for interface in self.subinterfaces:
|
for interface in self.subinterfaces:
|
||||||
if interface != 0:
|
if interface != 0:
|
||||||
self.setRadioState(KISS.RADIO_STATE_OFF, interface.index)
|
self.setRadioState(KISS.RADIO_STATE_OFF, interface)
|
||||||
self.leave()
|
self.leave()
|
||||||
|
|
||||||
def should_ingress_limit(self):
|
def should_ingress_limit(self):
|
||||||
@ -889,10 +878,11 @@ class RNodeMultiInterface(Interface):
|
|||||||
return "RNodeMultiInterface["+str(self.name)+"]"
|
return "RNodeMultiInterface["+str(self.name)+"]"
|
||||||
|
|
||||||
class RNodeSubInterface(Interface):
|
class RNodeSubInterface(Interface):
|
||||||
MAX_CHUNK = 32768
|
LOW_FREQ_MIN = 137000000
|
||||||
|
LOW_FREQ_MAX = 1000000000
|
||||||
|
|
||||||
FREQ_MIN = 137000000
|
HIGH_FREQ_MIN = 2200000000
|
||||||
FREQ_MAX = 3000000000
|
HIGH_FREQ_MAX = 2600000000
|
||||||
|
|
||||||
RSSI_OFFSET = 157
|
RSSI_OFFSET = 157
|
||||||
|
|
||||||
@ -962,13 +952,7 @@ class RNodeSubInterface(Interface):
|
|||||||
self.data_cmd = data_cmd
|
self.data_cmd = data_cmd
|
||||||
self.interface_type= interface_type
|
self.interface_type= interface_type
|
||||||
self.flow_control= flow_control
|
self.flow_control= flow_control
|
||||||
self.speed = 115200
|
|
||||||
self.databits = 8
|
|
||||||
self.stopbits = 1
|
|
||||||
self.timeout = 100
|
|
||||||
self.online = False
|
self.online = False
|
||||||
self.detached = False
|
|
||||||
self.reconnecting= False
|
|
||||||
|
|
||||||
self.frequency = frequency
|
self.frequency = frequency
|
||||||
self.bandwidth = bandwidth
|
self.bandwidth = bandwidth
|
||||||
@ -983,9 +967,6 @@ class RNodeSubInterface(Interface):
|
|||||||
self.display = None
|
self.display = None
|
||||||
self.mcu = None
|
self.mcu = None
|
||||||
|
|
||||||
self.last_id = 0
|
|
||||||
self.first_tx = None
|
|
||||||
|
|
||||||
self.r_frequency = None
|
self.r_frequency = None
|
||||||
self.r_bandwidth = None
|
self.r_bandwidth = None
|
||||||
self.r_txpower = None
|
self.r_txpower = None
|
||||||
@ -999,7 +980,6 @@ class RNodeSubInterface(Interface):
|
|||||||
self.r_stat_snr = None
|
self.r_stat_snr = None
|
||||||
self.r_st_alock = None
|
self.r_st_alock = None
|
||||||
self.r_lt_alock = None
|
self.r_lt_alock = None
|
||||||
self.r_random = None
|
|
||||||
self.r_airtime_short = 0.0
|
self.r_airtime_short = 0.0
|
||||||
self.r_airtime_long = 0.0
|
self.r_airtime_long = 0.0
|
||||||
self.r_channel_load_short = 0.0
|
self.r_channel_load_short = 0.0
|
||||||
@ -1011,16 +991,22 @@ class RNodeSubInterface(Interface):
|
|||||||
|
|
||||||
self.packet_queue = []
|
self.packet_queue = []
|
||||||
self.interface_ready = False
|
self.interface_ready = False
|
||||||
self.announce_rate_target = None
|
|
||||||
self.parent_interface = parent_interface
|
self.parent_interface = parent_interface
|
||||||
|
|
||||||
# add this interface to the subinterfaces array
|
# add this interface to the subinterfaces array
|
||||||
self.parent_interface.subinterfaces.insert(index, self)
|
self.parent_interface.subinterfaces.insert(index, self)
|
||||||
|
|
||||||
self.validcfg = True
|
self.validcfg = True
|
||||||
if (self.frequency < RNodeSubInterface.FREQ_MIN or self.frequency > RNodeSubInterface.FREQ_MAX):
|
if (self.interface_type == "SX1262" or self.interface_type == "SX1276" or self.interface_type == "SX1278"):
|
||||||
|
if (self.frequency < RNodeSubInterface.LOW_FREQ_MIN or self.frequency > RNodeSubInterface.LOW_FREQ_MAX):
|
||||||
RNS.log("Invalid frequency configured for "+str(self), RNS.LOG_ERROR)
|
RNS.log("Invalid frequency configured for "+str(self), RNS.LOG_ERROR)
|
||||||
self.validcfg = False
|
self.validcfg = False
|
||||||
|
elif (self.interface_type == "SX1280"):
|
||||||
|
if (self.frequency < RNodeSubInterface.HIGH_FREQ_MIN or self.frequency > RNodeSubInterface.HIGH_FREQ_MAX):
|
||||||
|
RNS.log("Invalid frequency configured for "+str(self), RNS.LOG_ERROR)
|
||||||
|
self.validcfg = False
|
||||||
|
else:
|
||||||
|
RNS.log("Invalid interface type configured for "+str(self), RNS.LOG_ERROR)
|
||||||
|
|
||||||
if (self.txpower < 0 or self.txpower > 22):
|
if (self.txpower < 0 or self.txpower > 22):
|
||||||
RNS.log("Invalid TX power configured for "+str(self), RNS.LOG_ERROR)
|
RNS.log("Invalid TX power configured for "+str(self), RNS.LOG_ERROR)
|
||||||
@ -1061,21 +1047,6 @@ class RNodeSubInterface(Interface):
|
|||||||
self.r_lock = None
|
self.r_lock = None
|
||||||
sleep(2.0)
|
sleep(2.0)
|
||||||
|
|
||||||
#thread = threading.Thread(target=self.readLoop)
|
|
||||||
#thread.daemon = True
|
|
||||||
#thread.start()
|
|
||||||
|
|
||||||
#self.detect()
|
|
||||||
#sleep(0.2)
|
|
||||||
#
|
|
||||||
#if not self.detected:
|
|
||||||
# RNS.log("Could not detect device for "+str(self), RNS.LOG_ERROR)
|
|
||||||
# self.serial.close()
|
|
||||||
#else:
|
|
||||||
# if self.platform == KISS.PLATFORM_ESP32:
|
|
||||||
# self.display = True
|
|
||||||
|
|
||||||
#RNS.log("Serial port "+self.port+" is now open")
|
|
||||||
RNS.log("Configuring RNode subinterface "+str(self)+"...", RNS.LOG_VERBOSE)
|
RNS.log("Configuring RNode subinterface "+str(self)+"...", RNS.LOG_VERBOSE)
|
||||||
self.initRadio()
|
self.initRadio()
|
||||||
if (self.validateRadioState()):
|
if (self.validateRadioState()):
|
||||||
@ -1087,7 +1058,6 @@ class RNodeSubInterface(Interface):
|
|||||||
RNS.log("After configuring "+str(self)+", the reported radio parameters did not match your configuration.", RNS.LOG_ERROR)
|
RNS.log("After configuring "+str(self)+", the reported radio parameters did not match your configuration.", RNS.LOG_ERROR)
|
||||||
RNS.log("Make sure that your hardware actually supports the parameters specified in the configuration", RNS.LOG_ERROR)
|
RNS.log("Make sure that your hardware actually supports the parameters specified in the configuration", RNS.LOG_ERROR)
|
||||||
RNS.log("Aborting RNode startup", RNS.LOG_ERROR)
|
RNS.log("Aborting RNode startup", RNS.LOG_ERROR)
|
||||||
#self.serial.close()
|
|
||||||
|
|
||||||
|
|
||||||
def initRadio(self):
|
def initRadio(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user