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) => {
|
ipcMain.on('request-update-rx-buffer', (event, arg) => {
|
||||||
win.webContents.send('action-update-rx-buffer', 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)
|
||||||
|
});
|
||||||
|
|
29
gui/sock.js
29
gui/sock.js
|
@ -13,9 +13,11 @@ const config = require(configPath);
|
||||||
var client = new net.Socket();
|
var client = new net.Socket();
|
||||||
var msg = ''; // Current message, per connection.
|
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 rxBufferLengthTnc = 0
|
||||||
var rxBufferLengthGui = 0
|
var rxBufferLengthGui = 0
|
||||||
|
var rxMsgBufferLengthTnc = 0
|
||||||
|
var rxMsgBufferLengthGui = 0
|
||||||
|
|
||||||
// network connection Timeout
|
// network connection Timeout
|
||||||
setTimeout(connectTNC, 3000)
|
setTimeout(connectTNC, 3000)
|
||||||
|
@ -122,8 +124,10 @@ client.on('data', function(data) {
|
||||||
|
|
||||||
if (data['COMMAND'] == 'TNC_STATE') {
|
if (data['COMMAND'] == 'TNC_STATE') {
|
||||||
//console.log(data)
|
//console.log(data)
|
||||||
|
// set length of RX Buffer to global variable
|
||||||
rxBufferLengthTnc = data['RX_BUFFER_LENGTH']
|
rxBufferLengthTnc = data['RX_BUFFER_LENGTH']
|
||||||
|
rxMsgBufferLengthTnc = data['RX_MSG_BUFFER_LENGTH']
|
||||||
|
|
||||||
let Data = {
|
let Data = {
|
||||||
toe: Date.now() - data['TIMESTAMP'], // time of execution
|
toe: Date.now() - data['TIMESTAMP'], // time of execution
|
||||||
ptt_state: data['PTT_STATE'],
|
ptt_state: data['PTT_STATE'],
|
||||||
|
@ -138,6 +142,7 @@ client.on('data', function(data) {
|
||||||
scatter: data['SCATTER'],
|
scatter: data['SCATTER'],
|
||||||
info: data['INFO'],
|
info: data['INFO'],
|
||||||
rx_buffer_length: data['RX_BUFFER_LENGTH'],
|
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'],
|
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_frames_per_burst: data['ARQ_TX_N_FRAMES_PER_BURST'],
|
||||||
arq_tx_n_bursts: data['ARQ_TX_N_BURSTS'],
|
arq_tx_n_bursts: data['ARQ_TX_N_BURSTS'],
|
||||||
|
@ -158,7 +163,6 @@ client.on('data', function(data) {
|
||||||
if (data['COMMAND'] == 'RX_BUFFER') {
|
if (data['COMMAND'] == 'RX_BUFFER') {
|
||||||
|
|
||||||
rxBufferLengthGui = data['DATA-ARRAY'].length
|
rxBufferLengthGui = data['DATA-ARRAY'].length
|
||||||
//console.log(rxBufferLengthGui)
|
|
||||||
let Data = {
|
let Data = {
|
||||||
data: data['DATA-ARRAY'],
|
data: data['DATA-ARRAY'],
|
||||||
};
|
};
|
||||||
|
@ -166,6 +170,15 @@ client.on('data', function(data) {
|
||||||
ipcRenderer.send('request-update-rx-buffer', 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 ...
|
// check if EOF ...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,3 +260,13 @@ exports.getRxBuffer = function() {
|
||||||
writeTncCommand(command)
|
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
|
from random import randrange
|
||||||
import asyncio
|
import asyncio
|
||||||
import sys
|
import sys
|
||||||
|
import ujson as json
|
||||||
|
|
||||||
import static
|
import static
|
||||||
import modem
|
import modem
|
||||||
|
@ -237,9 +238,22 @@ def arq_data_received(data_in, bytes_per_frame):
|
||||||
static.INFO.append("ARQ;RECEIVING;SUCCESS")
|
static.INFO.append("ARQ;RECEIVING;SUCCESS")
|
||||||
logging.log(25, "ARQ | RX | DATA FRAME SUCESSFULLY RECEIVED! :-) ")
|
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)
|
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 -----------------------------------------------
|
# BUILDING ACK FRAME FOR DATA FRAME -----------------------------------------------
|
||||||
ack_frame = bytearray(14)
|
ack_frame = bytearray(14)
|
||||||
ack_frame[:1] = bytes([61])
|
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[2:3] = static.MYCALLSIGN_CRC8
|
||||||
ping_frame[3:9] = static.MYGRID
|
ping_frame[3:9] = static.MYGRID
|
||||||
ping_frame[9:11] = frequency_offset.to_bytes(2, byteorder='big', signed=True)
|
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....
|
# wait while sending....
|
||||||
while not modem.transmit_signalling(ping_frame, 1):
|
while not modem.transmit_signalling(ping_frame, 1):
|
||||||
time.sleep(0.01)
|
time.sleep(0.01)
|
||||||
|
|
24
tnc/sock.py
24
tnc/sock.py
|
@ -127,7 +127,7 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
|
||||||
static.DXCALLSIGN_CRC8 = helpers.get_crc_8(
|
static.DXCALLSIGN_CRC8 = helpers.get_crc_8(
|
||||||
static.DXCALLSIGN)
|
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)
|
dataframe = json.dumps(rawdata)
|
||||||
data_out = bytes(dataframe, 'utf-8')
|
data_out = bytes(dataframe, 'utf-8')
|
||||||
|
|
||||||
|
@ -194,6 +194,7 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
|
||||||
"FFT": str(static.FFT),
|
"FFT": str(static.FFT),
|
||||||
"SCATTER": static.SCATTER,
|
"SCATTER": static.SCATTER,
|
||||||
"RX_BUFFER_LENGTH": str(len(static.RX_BUFFER)),
|
"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": str(static.ARQ_BYTES_PER_MINUTE),
|
||||||
"ARQ_BYTES_PER_MINUTE_BURST": str(static.ARQ_BYTES_PER_MINUTE_BURST),
|
"ARQ_BYTES_PER_MINUTE_BURST": str(static.ARQ_BYTES_PER_MINUTE_BURST),
|
||||||
"ARQ_TRANSMISSION_PERCENT": str(static.ARQ_TRANSMISSION_PERCENT),
|
"ARQ_TRANSMISSION_PERCENT": str(static.ARQ_TRANSMISSION_PERCENT),
|
||||||
|
@ -209,6 +210,7 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
|
||||||
# we want to display INFO messages only once
|
# we want to display INFO messages only once
|
||||||
static.INFO = []
|
static.INFO = []
|
||||||
|
|
||||||
|
# add heard stations to heard stations object
|
||||||
for i in range(0, len(static.HEARD_STATIONS)):
|
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]})
|
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)):
|
for i in range(0, len(static.RX_BUFFER)):
|
||||||
|
|
||||||
rawdata = json.loads(static.RX_BUFFER[i][3])
|
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]})
|
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)
|
jsondata = json.dumps(output)
|
||||||
self.request.sendall(bytes(jsondata, encoding))
|
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':
|
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
|
# exception, if JSON cant be decoded
|
||||||
# except Exception as e:
|
# except Exception as e:
|
||||||
|
|
Loading…
Reference in a new issue