mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
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:
parent
4ec5af47b1
commit
5bfd745747
4 changed files with 71 additions and 13 deletions
|
@ -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)
|
||||
});
|
||||
|
|
27
gui/sock.js
27
gui/sock.js
|
@ -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,7 +124,9 @@ 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
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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])
|
||||
|
@ -792,10 +806,6 @@ def received_ping(data_in, frequency_offset):
|
|||
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)
|
||||
|
|
22
tnc/sock.py
22
tnc/sock.py
|
@ -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,15 +234,31 @@ 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 = []
|
||||
|
||||
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:
|
||||
except:
|
||||
|
|
Loading…
Reference in a new issue