mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
Fix received CQ handling. Ping receive still broken.
This commit is contained in:
parent
2dbf6883a0
commit
6020b69527
3 changed files with 26 additions and 72 deletions
|
@ -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,
|
||||
)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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]:
|
||||
|
|
Loading…
Reference in a new issue