diff --git a/dj2ls.png b/dj2ls.png
deleted file mode 100644
index 9db8f82b..00000000
Binary files a/dj2ls.png and /dev/null differ
diff --git a/gui/package.json b/gui/package.json
index 3ccf574c..173ac382 100644
--- a/gui/package.json
+++ b/gui/package.json
@@ -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",
diff --git a/gui/preload-chat.js b/gui/preload-chat.js
index 0ecefaea..e9db6281 100644
--- a/gui/preload-chat.js
+++ b/gui/preload-chat.js
@@ -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) {
`;
} 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
- var message_html = obj.msg.replace('\n', "
");
+ var message_html = obj.msg.replaceAll(/\n/g, "
");
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);
diff --git a/gui/src/styles.css b/gui/src/styles.css
index 17112d0c..04038c8c 100644
--- a/gui/src/styles.css
+++ b/gui/src/styles.css
@@ -23,3 +23,4 @@ body {
display: none;
}
+
diff --git a/test/rx48.raw b/test/rx48.raw
new file mode 100644
index 00000000..95796a59
Binary files /dev/null and b/test/rx48.raw differ
diff --git a/tnc/data_handler.py b/tnc/data_handler.py
index bdf9e044..04c07238 100644
--- a/tnc/data_handler.py
+++ b/tnc/data_handler.py
@@ -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)
diff --git a/tnc/modem.py b/tnc/modem.py
index 107afd93..f3524767 100644
--- a/tnc/modem.py
+++ b/tnc/modem.py
@@ -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)