diff --git a/README.md b/README.md index 9094ed1e..511a9138 100644 --- a/README.md +++ b/README.md @@ -9,17 +9,45 @@ My attempt to create a free and open-source TNC with a GUI for [codec2](https:// [![CodeFactor](https://www.codefactor.io/repository/github/dj2ls/freedata/badge)](https://www.codefactor.io/repository/github/dj2ls/freedata) -Please keep in mind, that this project is still a prototype with many issues which need to be solved. -Build steps for other OS than Ubuntu are provided, but not fully working, yet. +Please keep in mind, this project is still under development with many issues which need to be solved. -Please check the ['Releases'](https://github.com/DJ2LS/FreeDATA/releases) section for downloading nightly builds +### existing/planned TNC features +- [x] network based +- [x] raw data transfer +- [x] fft output +- [x] JSON based commands +- [x] speed levels +- [x] ARQ - stop and wait +- [x] SNR operation level SNR > 0dB MPP/MPD +- [x] file compression +- [x] auto updater +- [ ] channel measurement +- [ ] hybrid ARQ +- [ ] SNR operation level SNR @ -5dB MPP/MPD +- [ ] tbc... +### existing/planned Chat features + - [x] chat messages + - [x] file transfer + - [x] file transfer with chat message + - [x] database for not loosing messages + - [x] smileys + - [ ] database network sync + - [ ] voice messages + - [ ] image compression + - [ ] status messages + - [ ] avatars + - [ ] tbc... -## Preview -![preview](https://github.com/DJ2LS/FreeDATA/blob/main/documentation/FreeDATA_preview.gif?raw=true "Preview") +## Data Preview +![preview](https://github.com/DJ2LS/FreeDATA/blob/main/documentation/data_preview.gif?raw=true "Preview") + +## Chat Preview +![preview](https://github.com/DJ2LS/FreeDATA/blob/main/documentation/chat_preview_fast.gif?raw=true "Preview") ## Installation Please check the [wiki](https://wiki.freedata.app) for installation instructions +Please check the ['Releases'](https://github.com/DJ2LS/FreeDATA/releases) section for downloading precompiled builds ## Credits * David Rowe and the FreeDV team for developing the modem and libraries - diff --git a/documentation/chat_preview_fast.gif b/documentation/chat_preview_fast.gif new file mode 100644 index 00000000..b85193db Binary files /dev/null and b/documentation/chat_preview_fast.gif differ diff --git a/documentation/data_preview.gif b/documentation/data_preview.gif new file mode 100644 index 00000000..c54adb78 Binary files /dev/null and b/documentation/data_preview.gif differ diff --git a/gui/daemon.js b/gui/daemon.js index c22ec79c..3d5f79c4 100644 --- a/gui/daemon.js +++ b/gui/daemon.js @@ -217,7 +217,7 @@ exports.getDaemonState = function() { // START TNC // ` `== multi line string -exports.startTNC = function(mycall, mygrid, rx_audio, tx_audio, radiocontrol, devicename, deviceport, pttprotocol, pttport, serialspeed, data_bits, stop_bits, handshake, rigctld_ip, rigctld_port, enable_fft, enable_scatter, low_bandwidth_mode, tuning_range_fmin, tuning_range_fmax, enable_fsk, tx_audio_level, respond_to_cq) { +exports.startTNC = function(mycall, mygrid, rx_audio, tx_audio, radiocontrol, devicename, deviceport, pttprotocol, pttport, serialspeed, data_bits, stop_bits, handshake, rigctld_ip, rigctld_port, enable_fft, enable_scatter, low_bandwidth_mode, tuning_range_fmin, tuning_range_fmax, enable_fsk, tx_audio_level, respond_to_cq, rx_buffer_size) { var json_command = JSON.stringify({ type: 'set', command: 'start_tnc', @@ -244,7 +244,8 @@ exports.startTNC = function(mycall, mygrid, rx_audio, tx_audio, radiocontrol, de tuning_range_fmin : tuning_range_fmin, tuning_range_fmax : tuning_range_fmax, tx_audio_level : tx_audio_level, - respond_to_cq : respond_to_cq + respond_to_cq : respond_to_cq, + rx_buffer_size : rx_buffer_size }] }) diff --git a/gui/main.js b/gui/main.js index 3b889a78..74dcaf78 100644 --- a/gui/main.js +++ b/gui/main.js @@ -77,7 +77,8 @@ const configDefaultSettings = '{\ "received_files_folder" : "None",\ "tuning_range_fmin" : "-50.0",\ "tuning_range_fmax" : "50.0",\ - "respond_to_cq" : "True" \ + "respond_to_cq" : "True",\ + "rx_buffer_size" : "16" \ }'; if (!fs.existsSync(configPath)) { diff --git a/gui/preload-chat.js b/gui/preload-chat.js index 002a7c97..c9905661 100644 --- a/gui/preload-chat.js +++ b/gui/preload-chat.js @@ -187,7 +187,6 @@ window.addEventListener('DOMContentLoaded', () => { }) // NEW CHAT - document.getElementById("createNewChatButton").addEventListener("click", () => { var dxcallsign = document.getElementById('chatModuleNewDxCall').value; @@ -277,9 +276,6 @@ db.post({ update_chat_obj_by_uuid(uuid); - // scroll to bottom - var element = document.getElementById("message-container"); - element.scrollTo(0, element.scrollHeight); // clear input document.getElementById('chatModuleMessage').value = '' @@ -521,10 +517,10 @@ update_chat = function(obj) { //document.getElementById('chatModuleDxCall').value = dxcallsign; selected_callsign = dxcallsign; - // scroll to bottom - var element = document.getElementById("message-container"); - //console.log(element.scrollHeight) - element.scrollTo(0, element.scrollHeight); + + setTimeout(scrollMessagesToBottom, 200); + + }); @@ -662,9 +658,6 @@ update_chat = function(obj) { // CHECK CHECK CHECK --> This could be done better var id = "chat-" + obj.dxcallsign document.getElementById(id).insertAdjacentHTML("beforeend", new_message); - - //var element = document.getElementById("message-container"); - //console.log(element.scrollHeight) /* UPDATE EXISTING ELEMENTS */ } else if (document.getElementById('msg-' + obj._id)) { @@ -730,9 +723,6 @@ update_chat = function(obj) { // handle doc console.log(doc) - - - var filename = Object.keys(obj._attachments)[0] var filetype = filename.content_type @@ -774,6 +764,10 @@ update_chat = function(obj) { } //window.location = window.location + + // scroll to bottom on new message + scrollMessagesToBottom(); + } @@ -869,4 +863,11 @@ add_obj_to_database = function(obj){ }).catch(function(err) { console.log(err); }); +} + + +// Scroll to bottom of message-container +function scrollMessagesToBottom() { + var messageBody = document.getElementById('message-container'); + messageBody.scrollTop = messageBody.scrollHeight - messageBody.clientHeight; } \ No newline at end of file diff --git a/gui/preload-main.js b/gui/preload-main.js index 32775e83..c0c0d697 100644 --- a/gui/preload-main.js +++ b/gui/preload-main.js @@ -117,9 +117,7 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () //document.getElementById("respondCQSwitch").value = config.respond_to_cq; document.getElementById("received_files_folder").value = config.received_files_folder; - - - + if(config.enable_scatter == 'True'){ document.getElementById("scatterSwitch").checked = true; } else { @@ -175,8 +173,10 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () // Update TX Audio Level document.getElementById("audioLevelTXvalue").innerHTML = parseInt(config.tx_audio_level); document.getElementById("audioLevelTX").value = parseInt(config.tx_audio_level); - - + + // Update RX Buffer Size + document.getElementById("rx_buffer_size").value = config.rx_buffer_size; + if (config.spectrum == 'waterfall') { document.getElementById("waterfall-scatter-switch1").checked = true; document.getElementById("waterfall-scatter-switch2").checked = false; @@ -590,8 +590,13 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); - - + + // rx buffer size selector clicked + document.getElementById("rx_buffer_size").addEventListener("click", () => { + var rx_buffer_size = document.getElementById("rx_buffer_size").value; + config.rx_buffer_size = rx_buffer_size; + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + }); //screen size @@ -710,7 +715,7 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () } var tx_audio_level = document.getElementById("audioLevelTX").value; - + var rx_buffer_size = document.getElementById("rx_buffer_size").value; config.radiocontrol = radiocontrol; config.mycall = callsign_ssid; @@ -735,6 +740,7 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () config.low_bandwidth_mode = low_bandwidth_mode; config.tx_audio_level = tx_audio_level; config.respond_to_cq = respond_to_cq; + config.rx_buffer_size = rx_buffer_size; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); @@ -753,7 +759,7 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () */ - daemon.startTNC(callsign_ssid, mygrid, rx_audio, tx_audio, radiocontrol, deviceid, deviceport, pttprotocol, pttport, serialspeed, data_bits, stop_bits, handshake, rigctld_ip, rigctld_port, enable_fft, enable_scatter, low_bandwidth_mode, tuning_range_fmin, tuning_range_fmax, enable_fsk, tx_audio_level, respond_to_cq); + daemon.startTNC(callsign_ssid, mygrid, rx_audio, tx_audio, radiocontrol, deviceid, deviceport, pttprotocol, pttport, serialspeed, data_bits, stop_bits, handshake, rigctld_ip, rigctld_port, enable_fft, enable_scatter, low_bandwidth_mode, tuning_range_fmin, tuning_range_fmax, enable_fsk, tx_audio_level, respond_to_cq, rx_buffer_size); }) diff --git a/gui/src/chat-module.html b/gui/src/chat-module.html index 683df8fe..6ab0ad32 100644 --- a/gui/src/chat-module.html +++ b/gui/src/chat-module.html @@ -28,7 +28,7 @@