From 285ad3684d424ddec5726dc67bb697ae5d4be282 Mon Sep 17 00:00:00 2001 From: DJ2LS Date: Sun, 14 May 2023 22:47:17 +0200 Subject: [PATCH] first attempt with moving data to GUI - callsign broken yet --- gui/preload-chat.js | 21 ++++++++++++++++++++- gui/sock.js | 16 ++++++++++++++++ tnc/data_handler.py | 28 +++++++++++++--------------- 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/gui/preload-chat.js b/gui/preload-chat.js index 6da4973e..d3a8dde5 100644 --- a/gui/preload-chat.js +++ b/gui/preload-chat.js @@ -727,8 +727,27 @@ ipcRenderer.on("action-new-msg-received", (event, arg) => { console.log(item.status); let obj = new Object(); + //handle broadcast + if (item.fec == "broadcast") { + obj.timestamp = Math.floor(Date.now() / 1000); + obj.dxcallsign = item.dxcallsign; + obj.dxgrid = 'null'; + obj.uuid = uuidv4().toString(); + obj.command = "msg"; + obj.checksum = "null"; + obj.msg = "null"; + obj.status = "received"; + obj.snr = item.snr; + obj.type = "broadcast"; + obj.filename = "null"; + obj.filetype = "null"; + obj.file = "null"; + console.log(obj) + add_obj_to_database(obj); + update_chat_obj_by_uuid(obj.uuid); + //handle ping - if (item.ping == "received") { + } else if (item.ping == "received") { obj.timestamp = parseInt(item.timestamp); obj.dxcallsign = item.dxcallsign; obj.dxgrid = item.dxgrid; diff --git a/gui/sock.js b/gui/sock.js index 167af609..1aa03a94 100644 --- a/gui/sock.js +++ b/gui/sock.js @@ -242,6 +242,22 @@ client.on("data", function (socketdata) { data: [data], }); break; + + case "broadcast": + // RX'd FEC BROADCAST + var encoded_data = FD.atob_FD(data["data"]); + var splitted_data = encoded_data.split(split_char); + var messageArray = []; + if (splitted_data[0] == "m") { + messageArray.push(data); + console.log(data); + } + + let Messages = { + data: messageArray, + }; + ipcRenderer.send("request-new-msg-received", Messages); + break; } switch (data["cq"]) { diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 03a26e67..e1c3b74f 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -101,7 +101,7 @@ class DATA: self.rx_n_frames_per_burst = 0 self.max_n_frames_per_burst = 1 - self.fec_wakeup_received = False + self.fec_wakeup_callsign = bytes() # Flag to indicate if we received a low bandwidth mode channel opener self.received_LOW_BANDWIDTH_MODE = False @@ -2978,7 +2978,7 @@ class DATA: def received_fec_wakeup(self, data_in: bytes): - dxcallsign = helpers.bytes_to_callsign(bytes(data_in[1:7])) + self.fec_wakeup_callsign = helpers.bytes_to_callsign(bytes(data_in[1:7])) mode = int.from_bytes(bytes(data_in[7:8]), "big") bursts = int.from_bytes(bytes(data_in[8:9]), "big") @@ -2989,40 +2989,38 @@ class DATA: fec="wakeup", mode=mode, bursts=bursts, - dxcallsign=str(dxcallsign, "UTF-8") + dxcallsign=str(self.fec_wakeup_callsign, "UTF-8") ) - timeout = time.time() + (self.longest_duration * bursts) + timeout = time.time() + (self.longest_duration * bursts) + 2 self.log.info( "[TNC] FRAME WAKEUP RCVD [" - + str(dxcallsign, "UTF-8") + + str(self.fec_wakeup_callsign, "UTF-8") + "] ", mode=mode, bursts=bursts, timeout=timeout, ) while time.time() < timeout: threading.Event().wait(0.01) - # TODO: We need a dynamic way of modifying this - modem.RECEIVE_DATAC4 = False self.log.info( "[TNC] closing broadcast slot [" - + str(dxcallsign, "UTF-8") + + str(self.fec_wakeup_callsign, "UTF-8") + "] ", mode=mode, bursts=bursts, ) + # TODO: We need a dynamic way of modifying this + modem.RECEIVE_DATAC4 = False + self.fec_wakeup_callsign = bytes() def received_fec(self, data_in: bytes): self.send_data_to_socket_queue( freedata="tnc-message", fec="broadcast", - data=str(data_in, "UTF-8") + dxcallsign=str(self.fec_wakeup_callsign, "UTF-8"), + data=base64.b64encode(data_in[1:]).decode("UTF-8") ) - self.log.info( - "[TNC] FEC DATA RCVD [" - + str(data_in, "UTF-8") - + "] ", - ) + self.log.info("[TNC] FEC DATA RCVD") def received_is_writing(self, data_in: bytes) -> None: @@ -3528,7 +3526,7 @@ class DATA: self.enqueue_frame_for_tx( frame_to_tx=[fec_wakeup_frame], c2_mode=codec2.FREEDV_MODE["sig1"].value ) - + time.sleep(1) fec_frame = bytearray(payload_per_frame) fec_frame[:1] = bytes([FR_TYPE.FEC.value]) fec_frame[1:payload_per_frame] = bytes(payload[:fec_payload_length])