data_handler ready for chat messages

data handler is now ready for chat messages. I updated the data frame with an additional information -datatype- so we can determine if we received a file or a message. Each datatype will be saved into an own buffer. The gui has been updated as well, so we can forward data directly to a future chat module...
This commit is contained in:
DJ2LS 2021-10-17 16:59:15 +02:00
parent 4ec5af47b1
commit 5bfd745747
4 changed files with 71 additions and 13 deletions

View file

@ -208,3 +208,10 @@ ipcMain.on('run-tnc-command', (event, arg) => {
ipcMain.on('request-update-rx-buffer', (event, arg) => {
win.webContents.send('action-update-rx-buffer', arg);
});
ipcMain.on('request-update-rx-,sg-buffer', (event, arg) => {
//win.webContents.send('action-update-rx-buffer', arg);
console.log("NEW MESSAGE ARRIVED!")
console.log("WE WILL HANDLE THIS AS SOON AS WE HAVE A CHAT MODULE...")
console.log(arg)
});

View file

@ -13,9 +13,11 @@ const config = require(configPath);
var client = new net.Socket();
var msg = ''; // Current message, per connection.
// globals for getting new data only if available
// globals for getting new data only if available so we are saving bandwith
var rxBufferLengthTnc = 0
var rxBufferLengthGui = 0
var rxMsgBufferLengthTnc = 0
var rxMsgBufferLengthGui = 0
// network connection Timeout
setTimeout(connectTNC, 3000)
@ -122,8 +124,10 @@ client.on('data', function(data) {
if (data['COMMAND'] == 'TNC_STATE') {
//console.log(data)
// set length of RX Buffer to global variable
rxBufferLengthTnc = data['RX_BUFFER_LENGTH']
rxMsgBufferLengthTnc = data['RX_MSG_BUFFER_LENGTH']
let Data = {
toe: Date.now() - data['TIMESTAMP'], // time of execution
ptt_state: data['PTT_STATE'],
@ -138,6 +142,7 @@ client.on('data', function(data) {
scatter: data['SCATTER'],
info: data['INFO'],
rx_buffer_length: data['RX_BUFFER_LENGTH'],
rx_msg_buffer_length: data['RX_MSG_BUFFER_LENGTH'],
tx_n_max_retries: data['TX_N_MAX_RETRIES'],
arq_tx_n_frames_per_burst: data['ARQ_TX_N_FRAMES_PER_BURST'],
arq_tx_n_bursts: data['ARQ_TX_N_BURSTS'],
@ -158,7 +163,6 @@ client.on('data', function(data) {
if (data['COMMAND'] == 'RX_BUFFER') {
rxBufferLengthGui = data['DATA-ARRAY'].length
//console.log(rxBufferLengthGui)
let Data = {
data: data['DATA-ARRAY'],
};
@ -166,6 +170,15 @@ client.on('data', function(data) {
ipcRenderer.send('request-update-rx-buffer', Data);
}
if (data['COMMAND'] == 'RX_MSG_BUFFER') {
rxMsgBufferLengthGui = data['DATA-ARRAY'].length
let Data = {
data: data['DATA-ARRAY'],
};
//console.log(Data)
ipcRenderer.send('request-update-rx-msg-buffer', Data);
}
// check if EOF ...
}
@ -247,3 +260,13 @@ exports.getRxBuffer = function() {
writeTncCommand(command)
}
}
// Get RX MSG BUffer
exports.getRxBuffer = function() {
command = '{"type" : "GET", "command" : "RX_MSG_BUFFER", "timestamp" : ' + Date.now() + '}'
// call command only if new data arrived
if (rxMsgBufferLengthGui != rxMsgBufferLengthTnc) {
writeTncCommand(command)
}
}

View file

@ -13,6 +13,7 @@ import time
from random import randrange
import asyncio
import sys
import ujson as json
import static
import modem
@ -237,9 +238,22 @@ def arq_data_received(data_in, bytes_per_frame):
static.INFO.append("ARQ;RECEIVING;SUCCESS")
logging.log(25, "ARQ | RX | DATA FRAME SUCESSFULLY RECEIVED! :-) ")
calculate_transfer_rate_rx(RX_N_FRAMES_PER_DATA_FRAME, RX_N_FRAME_OF_DATA_FRAME, RX_START_OF_TRANSMISSION, RX_PAYLOAD_PER_ARQ_FRAME)
# append received frame to RX_BUFFER
static.RX_BUFFER.append([static.DXCALLSIGN,static.DXGRID,int(time.time()), complete_data_frame.decode("utf-8")])
# decode to utf-8 string
complete_data_frame = complete_data_frame.decode("utf-8")
# decode json objects from data frame to inspect if we received a file or message
rawdata = json.loads(complete_data_frame)
# if datatype is a file, we append to RX_BUFFER, which contains files only
if rawdata["datatype"] == "file":
logging.info("RECEIVED FILE --> MOVING DATA TO RX BUFFER")
static.RX_BUFFER.append([static.DXCALLSIGN,static.DXGRID,int(time.time()), complete_data_frame])
# if datatype is a file, we append to RX_MSG_BUFFER, which contains messages only
if rawdata["datatype"] == "message":
static.RX_MSG_BUFFER.append([static.DXCALLSIGN,static.DXGRID,int(time.time()), complete_data_frame])
logging.info("RECEIVED MESSAGE --> MOVING DATA TO MESSAGE BUFFER")
# BUILDING ACK FRAME FOR DATA FRAME -----------------------------------------------
ack_frame = bytearray(14)
ack_frame[:1] = bytes([61])
@ -791,11 +805,7 @@ def received_ping(data_in, frequency_offset):
ping_frame[2:3] = static.MYCALLSIGN_CRC8
ping_frame[3:9] = static.MYGRID
ping_frame[9:11] = frequency_offset.to_bytes(2, byteorder='big', signed=True)
#print(len(frequency_offset.to_bytes(2, byteorder='big', signed=True)))
#print(ping_frame)
#print(ping_frame[9:11])
#print(int.from_bytes(bytes(ping_frame[9:11]), "big", signed=True))
# wait while sending....
while not modem.transmit_signalling(ping_frame, 1):
time.sleep(0.01)

View file

@ -127,7 +127,7 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
static.DXCALLSIGN_CRC8 = helpers.get_crc_8(
static.DXCALLSIGN)
rawdata = {"filename": filename, "filetype": filetype,"data": data, "checksum": checksum}
rawdata = {"datatype": "file", "filename": filename, "filetype": filetype,"data": data, "checksum": checksum}
dataframe = json.dumps(rawdata)
data_out = bytes(dataframe, 'utf-8')
@ -194,6 +194,7 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
"FFT": str(static.FFT),
"SCATTER": static.SCATTER,
"RX_BUFFER_LENGTH": str(len(static.RX_BUFFER)),
"RX_MSG_BUFFER_LENGTH": str(len(static.RX_MSG_BUFFER)),
"ARQ_BYTES_PER_MINUTE": str(static.ARQ_BYTES_PER_MINUTE),
"ARQ_BYTES_PER_MINUTE_BURST": str(static.ARQ_BYTES_PER_MINUTE_BURST),
"ARQ_TRANSMISSION_PERCENT": str(static.ARQ_TRANSMISSION_PERCENT),
@ -209,6 +210,7 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
# we want to display INFO messages only once
static.INFO = []
# add heard stations to heard stations object
for i in range(0, len(static.HEARD_STATIONS)):
output["STATIONS"].append({"DXCALLSIGN": str(static.HEARD_STATIONS[i][0], 'utf-8'), "DXGRID": str(static.HEARD_STATIONS[i][1], 'utf-8'),"TIMESTAMP": static.HEARD_STATIONS[i][2], "DATATYPE": static.HEARD_STATIONS[i][3], "SNR": static.HEARD_STATIONS[i][4]})
@ -232,14 +234,30 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
for i in range(0, len(static.RX_BUFFER)):
rawdata = json.loads(static.RX_BUFFER[i][3])
output["DATA-ARRAY"].append({"DXCALLSIGN": str(static.RX_BUFFER[i][0], 'utf-8'), "DXGRID": str(static.RX_BUFFER[i][1], 'utf-8'), "TIMESTAMP": static.RX_BUFFER[i][2], "RXDATA": [rawdata]})
jsondata = json.dumps(output)
self.request.sendall(bytes(jsondata, encoding))
if received_json["type"] == 'GET' and received_json["command"] == 'RX_MSG_BUFFER':
output = {
"COMMAND": "RX_MSG_BUFFER",
"DATA-ARRAY": [],
"EOF": "EOF",
}
for i in range(0, len(static.RX_MSG_BUFFER)):
rawdata = json.loads(static.RX_MSG_BUFFER[i][3])
output["DATA-ARRAY"].append({"DXCALLSIGN": str(static.RX_MSG_BUFFER[i][0], 'utf-8'), "DXGRID": str(static.RX_MSG_BUFFER[i][1], 'utf-8'), "TIMESTAMP": static.RX_MSG_BUFFER[i][2], "RXDATA": [rawdata]})
jsondata = json.dumps(output)
self.request.sendall(bytes(jsondata, encoding))
if received_json["type"] == 'SET' and received_json["command"] == 'DEL_RX_BUFFER':
static.RX_BUFFER = []
static.RX_BUFFER = []
if received_json["type"] == 'SET' and received_json["command"] == 'DEL_RX_MSG_BUFFER':
static.RX_MSG_BUFFER = []
# exception, if JSON cant be decoded
# except Exception as e: