Fix received CQ handling. Ping receive still broken.

This commit is contained in:
Pedro 2023-11-29 18:25:32 +01:00
parent 2dbf6883a0
commit 6020b69527
3 changed files with 26 additions and 72 deletions

View file

@ -34,7 +34,7 @@ class BROADCAST(DATA):
self.myssid = config['STATION']['myssid']
self.mycallsign += "-" + str(self.myssid)
encoded_call = helpers.callsign_to_bytes(self.mycallsign)
self.mycallsign = helpers.bytes_to_callsign(encoded_call)
self.mycallsign_bytes = helpers.bytes_to_callsign(encoded_call)
self.mygrid = config['STATION']['mygrid']
self.enable_fsk = config['MODEM']['enable_fsk']
self.respond_to_cq = config['MODEM']['respond_to_cq']
@ -43,7 +43,7 @@ class BROADCAST(DATA):
self.duration_datac13 = 2.0
self.duration_sig1_frame = self.duration_datac13
def received_cq(self, data_in: bytes, snr) -> None:
def received_cq(self, frame_data, snr) -> None:
"""
Called when we receive a CQ frame
Args:
@ -53,23 +53,23 @@ class BROADCAST(DATA):
Nothing
"""
# here we add the received station to the heard stations buffer
dxcallsign = helpers.bytes_to_callsign(bytes(data_in[1:7]))
dxcallsign = frame_data['origin']
self.log.debug("[Modem] received_cq:", dxcallsign=dxcallsign)
self.dxgrid = bytes(helpers.decode_grid(data_in[7:11]), "UTF-8")
self.dxgrid = frame_data['gridsquare']
self.event_manager.send_custom_event(
freedata="modem-message",
cq="received",
mycallsign=str(self.mycallsign, "UTF-8"),
dxcallsign=str(dxcallsign, "UTF-8"),
dxgrid=str(self.dxgrid, "UTF-8"),
mycallsign=self.mycallsign,
dxcallsign=dxcallsign,
dxgrid=self.dxgrid,
)
self.log.info(
"[Modem] CQ RCVD ["
+ str(dxcallsign, "UTF-8")
+ dxcallsign
+ "]["
+ str(self.dxgrid, "UTF-8")
+ self.dxgrid
+ "] ",
snr=snr,
)

View file

@ -22,38 +22,27 @@ class PING(DATA):
data_in:bytes:
"""
# use --> deconstructed_frame
#dxcallsign_crc = bytes(data_in[4:7])
mycallsign_crc = deconstructed_frame["mycallsign_crc"]
dxcallsign_crc = deconstructed_frame["dxcallsign_crc"]
dxcallsign = deconstructed_frame["dxcallsign"]
#dxcallsign = helpers.bytes_to_callsign(bytes(data_in[7:13]))
destination_crc = deconstructed_frame["destination_crc"]
origin_crc = deconstructed_frame["origin_crc"]
origin = deconstructed_frame["origin"]
# check if callsign ssid override
valid, mycallsign = helpers.check_callsign(self.mycallsign, mycallsign_crc, self.ssid_list)
valid, mycallsign = helpers.check_callsign(self.config['STATION']['mycall'], destination_crc, self.config['STATION']['ssid_list'])
if not valid:
# PING packet not for me.
self.log.debug("[Modem] received_ping: ping not for this station.")
return
self.dxcallsign_crc = dxcallsign_crc
self.dxcallsign = dxcallsign
self.dxcallsign_crc = origin_crc
self.dxcallsign = origin
self.log.info(
"[Modem] PING REQ ["
+ str(mycallsign, "UTF-8")
+ "] <<< ["
+ str(dxcallsign, "UTF-8")
+ "]",
f"[Modem] PING REQ from [{origin}] to [{mycallsign}]",
snr=snr,
)
self.dxgrid = b'------'
helpers.add_to_heard_stations(
dxcallsign,
origin,
self.dxgrid,
"PING",
snr,
@ -67,9 +56,9 @@ class PING(DATA):
ping="received",
uuid=str(uuid.uuid4()),
timestamp=int(time.time()),
dxgrid=str(self.dxgrid, "UTF-8"),
dxcallsign=str(dxcallsign, "UTF-8"),
mycallsign=str(mycallsign, "UTF-8"),
dxgrid=self.dxgrid,
dxcallsign=origin,
mycallsign=mycallsign,
snr=str(snr),
)
if self.respond_to_call:

View file

@ -140,9 +140,9 @@ class DISPATCHER():
Returns:
"""
deconstructed_frame = self.frame_factory.deconstruct(bytes_out)
if self.check_if_valid_frame(deconstructed_frame):
if True:
# get frame as dictionary
deconstructed_frame = self.frame_factory.deconstruct(bytes_out)
frametype = deconstructed_frame["frame_type_int"]
print(deconstructed_frame)
@ -179,45 +179,10 @@ class DISPATCHER():
else:
# for debugging purposes to receive all data
self.log.debug(
"[Modem] Foreign frame received",
frame=bytes_out[:-2].hex(),
frame_type=FR_TYPE(int.from_bytes(bytes_out[:1], byteorder="big")).name,
)
def check_if_valid_frame(self, deconstructed_frame):
# Process data only if broadcast or we are the receiver
# bytes_out[1:4] == callsign check for signalling frames,
# bytes_out[2:5] == transmission
# we could also create an own function, which returns True.
#deconstructed_frame["destination_crc"]
#deconstructed_frame["origin_crc"]
# check for callsign CRC
_valid1, _ = helpers.check_callsign(self.arq.mycallsign, deconstructed_frame["destination_crc"], self.arq.ssid_list)
_valid2, _ = helpers.check_callsign(self.arq.mycallsign, deconstructed_frame["origin_crc"], self.arq.ssid_list)
# check for session ID
_valid3 = helpers.check_session_id(self.arq.session_id, bytes(bytes_out[1:2])) # signalling frames
_valid4 = helpers.check_session_id(self.arq.session_id, bytes(bytes_out[2:3])) # arq data frames
return bool(
(
_valid1
or _valid2
or _valid3
or _valid4
or deconstructed_frame["frame_type_int"]
in [
FR_TYPE.CQ.value,
FR_TYPE.QRV.value,
FR_TYPE.PING.value,
FR_TYPE.BEACON.value,
FR_TYPE.IS_WRITING.value,
FR_TYPE.FEC.value,
FR_TYPE.FEC_WAKEUP.value,
]
)
)
f"[Modem] Foreign frame received ({ex})",
frame=bytes_out[:-2].hex(),
frame_type=FR_TYPE(int.from_bytes(bytes_out[:1], byteorder="big")).name,
)
def get_id_from_frame(self, data):
if data[:1] in [FR_TYPE.ARQ_DC_OPEN_N, FR_TYPE.ARQ_DC_OPEN_W]: