repeat frame ack and fixed repeat transmission from gui

This commit is contained in:
dj2ls 2022-04-06 10:15:14 +02:00
parent 11de567ef5
commit a2552be843
7 changed files with 63 additions and 34 deletions

BIN
dj2ls.png

Binary file not shown.

View file

@ -1,6 +1,6 @@
{
"name": "FreeDATA",
"version": "0.3.2-alpha.2",
"version": "0.3.2-alpha.3",
"description": "FreeDATA ",
"main": "main.js",
"scripts": {
@ -28,6 +28,7 @@
},
"homepage": "https://freedata.app",
"dependencies": {
"blob-util": "^2.0.2",
"bootstrap": "^5.1.3",
"bootstrap-icons": "^1.8.1",
"bootswatch": "^5.1.3",

View file

@ -6,6 +6,7 @@ const {
v4: uuidv4
} = require('uuid');
const utf8 = require('utf8');
const blobUtil = require('blob-util')
// https://stackoverflow.com/a/26227660
var appDataFolder = process.env.APPDATA || (process.platform == 'darwin' ? process.env.HOME + '/Library/Application Support' : process.env.HOME + "/.config")
var configFolder = path.join(appDataFolder, "FreeDATA");
@ -198,7 +199,7 @@ db.post({
console.log(filename);
console.log(filetype);
var data_with_attachment = chatmessage + split_char + filename + split_char + filetype + split_char + file;
document.getElementById('selectFilesButton').innerHTML = ``;
var uuid = uuidv4();
@ -249,6 +250,13 @@ db.post({
element.scrollTo(0, element.scrollHeight);
// clear input
document.getElementById('chatModuleMessage').value = ''
// after adding file data to our attachment varible, delete it from global
filetype = '';
file = '';
filename = '';
})
// cleanup after transmission
filetype = '';
@ -476,8 +484,8 @@ update_chat = function(obj) {
</div>
`;
} else {
var filename = ''
var fileheader = ''
var filename = '';
var fileheader = '';
}
} catch {
console.log("error with database parsing...")
@ -582,7 +590,7 @@ update_chat = function(obj) {
// CHECK FOR NEW LINE AND REPLACE WITH <br>
var message_html = obj.msg.replace('\n', "<br>");
var message_html = obj.msg.replaceAll(/\n/g, "<br>");
if (obj.type == 'received') {
@ -635,6 +643,9 @@ update_chat = function(obj) {
} else if (document.getElementById('msg-' + obj._id)) {
id = "msg-" + obj._id;
console.log("element already exists......")
//document.getElementById(id).className = message_class;
}
// CREATE SAVE TO FOLDER EVENT LISTENER
@ -667,12 +678,30 @@ update_chat = function(obj) {
}).then(function(doc) {
// handle doc
console.log(doc)
var filename = Object.keys(obj._attachments)[0]
var filetype = obj._attachments[filename]["content_type"]
var filetype = filename.content_type
console.log(filename)
console.log(filetype)
var file = obj._attachments[filename].data
console.log(file)
console.log(Object.keys(obj._attachments)[0].data)
//var file = atob(obj._attachments[filename]["data"])
db.getAttachment(obj._id, filename).then(function(data) {
console.log(data)
var file = atob(data)
var file = blobUtil.arrayBufferToBinaryString(data)
// converting back to blob for debugging
// length must be equal of file size
var blob = blobUtil.binaryStringToBlob(file);
console.log(blob)
var data_with_attachment = doc.msg + split_char + filename + split_char + filetype + split_char + file;
let Data = {
command: "send_message",
@ -684,7 +713,8 @@ update_chat = function(obj) {
uuid: doc.uuid
};
console.log(Data)
ipcRenderer.send('run-tnc-command', Data);
ipcRenderer.send('run-tnc-command', Data);
});
}).catch(function(err) {
console.log(err);

View file

@ -23,3 +23,4 @@ body {
display: none;
}

BIN
test/rx48.raw Normal file

Binary file not shown.

View file

@ -591,7 +591,7 @@ class DATA():
structlog.get_logger("structlog").info("[TNC] ARQ | RX | SENDING DATA FRAME ACK", snr=static.SNR, crc=data_frame_crc.hex())
txbuffer = [ack_frame]
static.TRANSMITTING = True
modem.MODEM_TRANSMIT_QUEUE.put([14,1,0,txbuffer])
modem.MODEM_TRANSMIT_QUEUE.put([14,3,100,txbuffer])
# wait while transmitting
while static.TRANSMITTING:
time.sleep(0.01)
@ -1634,9 +1634,9 @@ class DATA():
static.TRANSMITTING = True
structlog.get_logger("structlog").info("ENABLE FSK", state=static.ENABLE_FSK)
if static.ENABLE_FSK:
modem.MODEM_TRANSMIT_QUEUE.put(['FSK_LDPC_0',2,500,txbuffer])
modem.MODEM_TRANSMIT_QUEUE.put(['FSK_LDPC_0',3,500,txbuffer])
else:
modem.MODEM_TRANSMIT_QUEUE.put([14,2,500,txbuffer])
modem.MODEM_TRANSMIT_QUEUE.put([14,3,500,txbuffer])
# wait while transmitting
while static.TRANSMITTING:
time.sleep(0.01)

View file

@ -336,8 +336,7 @@ class RF():
else:
freedv = cast(codec2.api.freedv_open(self.MODE), c_void_p)
# get number of bytes per frame for mode
bytes_per_frame = int(codec2.api.freedv_get_bits_per_modem_frame(freedv)/8)
payload_bytes_per_frame = bytes_per_frame -2
@ -360,9 +359,8 @@ class RF():
txbuffer = bytes(mod_out_silence)
structlog.get_logger("structlog").debug("TRANSMIT", mode=self.MODE, payload=payload_bytes_per_frame)
for i in range(1,repeats+1):
for i in range(0,repeats):
# codec2 fsk preamble may be broken - at least it sounds like that so we are disabling it for testing
if not self.MODE == 'FSK_LDPC_0' or self.MODE == 200 or self.MODE == 'FSK_LDPC_1' or self.MODE == 201:
# write preamble to txbuffer
@ -370,7 +368,6 @@ class RF():
txbuffer += bytes(mod_out_preamble)
# create modulaton for n frames in list
for n in range(0,len(frames)):
# create buffer for data
buffer = bytearray(payload_bytes_per_frame) # use this if CRC16 checksum is required ( DATA1-3)
buffer[:len(frames[n])] = frames[n] # set buffersize to length of data which will be send
@ -397,27 +394,27 @@ class RF():
mod_out_silence = create_string_buffer(samples_delay*2)
txbuffer += bytes(mod_out_silence)
# resample up to 48k (resampler works on np.int16)
x = np.frombuffer(txbuffer, dtype=np.int16)
x = set_audio_volume(x, static.TX_AUDIO_LEVEL)
txbuffer_48k = self.resampler.resample8_to_48(x)
# resample up to 48k (resampler works on np.int16)
x = np.frombuffer(txbuffer, dtype=np.int16)
x = set_audio_volume(x, static.TX_AUDIO_LEVEL)
txbuffer_48k = self.resampler.resample8_to_48(x)
# explicitly lock our usage of mod_out_queue if needed
# deaktivated for testing purposes
self.mod_out_locked = False
# explicitly lock our usage of mod_out_queue if needed
# deaktivated for testing purposes
self.mod_out_locked = False
chunk_length = self.AUDIO_FRAMES_PER_BUFFER_TX #4800
chunk = [txbuffer_48k[i:i+chunk_length] for i in range(0, len(txbuffer_48k), chunk_length)]
for c in chunk:
chunk_length = self.AUDIO_FRAMES_PER_BUFFER_TX #4800
chunk = [txbuffer_48k[i:i+chunk_length] for i in range(0, len(txbuffer_48k), chunk_length)]
for c in chunk:
if len(c) < chunk_length:
delta = chunk_length - len(c)
delta_zeros = np.zeros(delta, dtype=np.int16)
c = np.append(c, delta_zeros)
if len(c) < chunk_length:
delta = chunk_length - len(c)
delta_zeros = np.zeros(delta, dtype=np.int16)
c = np.append(c, delta_zeros)
#structlog.get_logger("structlog").debug("[TNC] mod out shorter than audio buffer", delta=delta)
self.modoutqueue.append(c)
#structlog.get_logger("structlog").debug("[TNC] mod out shorter than audio buffer", delta=delta)
self.modoutqueue.append(c)