optimized FSK mode and chat

This commit is contained in:
dj2ls 2022-04-03 15:26:24 +02:00
parent 8f3f046655
commit b6cf6e7c17
6 changed files with 115 additions and 174 deletions

BIN
dj2ls.png Normal file

Binary file not shown.

View file

@ -42,6 +42,7 @@ var filename = '';
var callsign_counter = 0;
var selected_callsign = '';
// -----------------------------------
var chatDB = path.join(configFolder, 'chatDB')
// ---- MessageDB
var PouchDB = require('pouchdb');
@ -80,6 +81,18 @@ db.find({
});
// WINDOW LISTENER
window.addEventListener('DOMContentLoaded', () => {
// theme selector
if(config.theme != 'default'){
var theme_path = "../node_modules/bootswatch/dist/"+ config.theme +"/bootstrap.min.css";
document.getElementById("bootstrap_theme").href = theme_path;
} else {
var theme_path = "../node_modules/bootstrap/dist/css/bootstrap.min.css";
document.getElementById("bootstrap_theme").href = theme_path;
}
document.querySelector('emoji-picker').addEventListener("emoji-click", (event) => {
document.getElementById('chatModuleMessage').setRangeText(event.detail.emoji.unicode)
console.log(event.detail);
@ -130,7 +143,7 @@ window.addEventListener('DOMContentLoaded', () => {
document.addEventListener("keyup", function(event) {
// Number 13 == Enter
if (event.keyCode === 13) {
if (event.keyCode === 13 && !event.shiftKey) {
// Cancel the default action, if needed
event.preventDefault();
// Trigger the button element with a click
@ -185,9 +198,9 @@ 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 = `
<i class="bi bi-paperclip" style="font-size: 1.2rem; color: white;"></i>
`;
document.getElementById('selectFilesButton').innerHTML = ``;
var uuid = uuidv4();
console.log(data_with_attachment)
let Data = {
@ -247,8 +260,7 @@ ipcRenderer.on('return-selected-files', (event, arg) => {
file = arg.data;
filename = arg.filename;
document.getElementById('selectFilesButton').innerHTML = `
<i class="bi bi-paperclip" style="font-size: 1.2rem; color: white;"></i>
<span class="position-absolute top-0 start-100 translate-middle p-2 bg-danger border border-light rounded-circle">
<span class="position-absolute top-0 start-85 translate-middle p-2 bg-danger border border-light rounded-circle">
<span class="visually-hidden">New file selected</span>
</span>
`;
@ -440,7 +452,7 @@ update_chat = function(obj) {
var shortmsg = obj.type;
} else {
var shortmsg = obj.msg;
var maxlength = 45;
var maxlength = 40;
var shortmsg = shortmsg.length > maxlength ? shortmsg.substring(0, maxlength - 3) + "..." : shortmsg;
@ -569,6 +581,8 @@ update_chat = function(obj) {
}
// CHECK FOR NEW LINE AND REPLACE WITH <br>
var message_html = obj.msg.replace('\n', "<br>");
if (obj.type == 'received') {
@ -578,7 +592,7 @@ update_chat = function(obj) {
<div class="card border-light bg-light" id="msg-${obj._id}">
${fileheader}
<div class="card-body p-0">
<p class="card-text p-2 mb-0 text-break text-wrap">${obj.msg}</p>
<p class="card-text p-2 mb-0 text-break text-wrap">${message_html}</p>
<p class="text-right mb-0 p-1 text-white" style="text-align: left; font-size : 0.9rem">
<span class="badge bg-light text-muted">${timestamp}</span>
@ -588,14 +602,17 @@ update_chat = function(obj) {
</div>
`;
}
if (obj.type == 'transmit') {
var new_message = `
<div class="ml-auto rounded-3 mt-3 mb-0 w-75" style="margin-left: auto;">
<div class="ml-auto rounded-3 mt-3 mb-0 w-75" style="margin-left: auto;">
<!--<p class="font-monospace text-right mb-0 text-muted" style="text-align: right;">${timestamp}</p>-->
<div class="card" id="msg-${obj._id}">
<div class="card border-primary" id="msg-${obj._id}">
${fileheader}
<div class="card-body p-0 text-right bg-primary">
<p class="card-text p-2 mb-0 text-white text-break text-wrap">${obj.msg}</p>
<p class="card-text p-2 mb-0 text-white text-break text-wrap">${message_html}</p>
<p class="text-right mb-0 p-1 text-white" style="text-align: right; font-size : 0.9rem">
<span class="text-light" style="font-size: 0.7rem;">${timestamp} - </span>
<span class=" text-white" style="font-size:0.8rem;">${status}</span>

View file

@ -1,165 +1,79 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Security-Policy" content="script-src 'self';">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="../node_modules/bootstrap-icons/font/bootstrap-icons.css">
<!-- Custom CSS -->
<link rel="stylesheet" type="text/css" href="styles.css" />
<title>FreeDATA - CHAT</title>
</head>
<body>
<!-- bootstrap -->
<script src="../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<!-- chart.js -->
<script src="../node_modules/chart.js/dist/chart.min.js"></script>
<script src="../node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.min.js"></script>
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Security-Policy" content="script-src 'self';">
<!-- Bootstrap CSS -->
<link rel="stylesheet" id="bootstrap_theme" href="../node_modules/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="../node_modules/bootstrap-icons/font/bootstrap-icons.css">
<!-- Custom CSS -->
<link rel="stylesheet" type="text/css" href="styles.css" />
<title>FreeDATA - CHAT</title>
</head>
<!--<script type="module" src="../node_modules/emoji-picker-element/index.js"></script>-->
<body>
<!-- bootstrap -->
<script src="../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<!-- chart.js -->
<script src="../node_modules/chart.js/dist/chart.min.js"></script>
<script src="../node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.min.js"></script>
<!--<script type="module" src="../node_modules/emoji-picker-element/index.js"></script>-->
<script type="module" src="../node_modules/emoji-picker-element/picker.js"></script>
<script type="module" src="../node_modules/emoji-picker-element/database.js"></script>
<div class="position-absolute container w-100 h-100 bottom-0 end-0 mb-5" style="z-index:100; display: none" id="emojipickercontainer">
<emoji-picker locale="en" class="position-absolute bottom-0 end-0 p-1 mb-2" data-source="../node_modules/emoji-picker-element-data/en/emojibase/data.json"></emoji-picker>
</div>
<div class="container-fluid">
<div class="row h-100">
<div class="col-4 p-2 bg-light">
<! ------Chats area ---------------------------------------------------------------------->
<div class="container-fluid m-0 p-0">
<div class="input-group bottom-0 m-0 w-100">
<input class="form-control w-50" maxlength="9" style="text-transform:uppercase;" id="chatModuleNewDxCall" placeholder="DX CALL"></input>
<button class="btn btn-sm btn-success w-50" id="createNewChatButton" type="button">Open a new chat</button>
</div>
</div>
<hr class="m-2">
<div class="overflow-auto vh-100" id="callsignlist" style="height: calc(100% - 330px);">
<div class="list-group" id="list-tab" role="tablist"> </div>
</div>
</div>
<div class="col-8 border vh-100 p-0">
<! ------ chat navbar ---------------------------------------------------------------------->
<div class="container-fluid m-2 p-0">
<div class="input-group bottom-0">
<button class="btn btn-sm btn-secondary me-2" id="ping" type="button">Ping</button>
<button id="chatSettingsDropDown" type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false"> <i class="bi bi-three-dots-vertical"></i> </button>
<ul class="dropdown-menu" aria-labelledby="chatSettingsDropDown">
<li><a class="dropdown-item bg-danger text-white" id="delete_selected_chat" href="#">Delete chat</a></li>
</ul>
</div>
</div>
<hr class="m-0">
<! ------messages area ---------------------------------------------------------------------->
<div class="container overflow-auto" id="message-container" style="height: calc(100% - 110px);">
<div class="tab-content" id="nav-tabContent"> </div>
<!--<div class="container position-absolute bottom-0">--></div>
<!-- </div>-->
<div class="container-fluid mt-2 p-0">
<div class="input-group bottom-0 w-100">
<!--<input class="form-control" maxlength="8" style="max-width: 6rem; text-transform:uppercase; display:none" id="chatModuleDxCall" placeholder="DX CALL"></input>-->
<!--<button class="btn btn-sm btn-primary me-2" id="emojipickerbutton" type="button">--><i id="emojipickerbutton" class="bi bi-emoji-smile m-1" style="font-size: 1.5rem; color: grey;"></i></button>
<!--<input class="form-control rounded-pill m-1 p-1" id="chatModuleMessage" placeholder="Message - Send with [Enter]"></input>-->
<textarea class="form-control rounded-pill m-1 p-1" rows="1" id="chatModuleMessage" placeholder="Message - Send with [Enter]"></textarea>
<script type="module" src="../node_modules/emoji-picker-element/picker.js"></script>
<script type="module" src="../node_modules/emoji-picker-element/database.js"></script>
<!--<button class="btn btn-sm btn-primary me-2" style="width: 3rem" id="selectFilesButton" type="button"><i class="bi bi-paperclip" style="font-size: 1.2rem; color: white;"></i></button>--><i class="bi bi-paperclip m-1" style="font-size: 1.5rem; color: grey;" id="selectFilesButton"></i>
<button class="btn btn-sm btn-secondary me-2" style="width: 5rem; display: none" id="sendMessage" type="button"><i class="bi bi-send" style="font-size: 1.2rem; color: white;"></i></button>
</div>
</div>
</div>
</div>
</div>
</body>
<div class="position-absolute container w-100 h-100 bottom-0 end-0 mb-5" style="z-index:100; display: none" id="emojipickercontainer">
<emoji-picker locale="en" class="position-absolute bottom-0 end-0 p-1 mb-2" data-source="../node_modules/emoji-picker-element-data/en/emojibase/data.json"></emoji-picker>
</div>
<div class="container-fluid">
<div class="row h-100">
<div class="col-4 p-2 bg-light">
<! ------Chats area ---------------------------------------------------------------------->
<div class="container-fluid m-0 p-0">
<div class="input-group bottom-0 m-0 w-100">
<input class="form-control w-50" maxlength="9" style="text-transform:uppercase;" id="chatModuleNewDxCall" placeholder="DX CALL"></input>
<button class="btn btn-sm btn-success w-50" id="createNewChatButton" type="button">Open a new chat</button>
</div>
</div>
<hr class="m-2">
<div class="list-group" id="list-tab" role="tablist">
</div>
</div>
<div class="col-8 border vh-100 ">
<! ------ chat navbar ---------------------------------------------------------------------->
<div class="container-fluid m-2 p-0">
<div class="input-group bottom-0">
<button class="btn btn-sm btn-secondary me-2" id="ping" type="button">Ping</button>
<button id="chatSettingsDropDown" type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
<i class="bi bi-three-dots-vertical"></i>
</button>
<ul class="dropdown-menu" aria-labelledby="chatSettingsDropDown">
<li><a class="dropdown-item bg-danger text-white" id="delete_selected_chat" href="#">Delete chat</a></li>
</ul>
</div>
</div>
<hr class="m-0">
<! ------messages area ---------------------------------------------------------------------->
<div class="container overflow-auto" id="message-container" style="height: calc(100% - 115px);">
<div class="tab-content" id="nav-tabContent">
</div>
<!--<div class="container position-absolute bottom-0">-->
</div>
<!-- </div>-->
<div class="container-fluid mt-2 p-0">
<div class="input-group bottom-0 w-100">
<!--<input class="form-control" maxlength="8" style="max-width: 6rem; text-transform:uppercase; display:none" id="chatModuleDxCall" placeholder="DX CALL"></input>-->
<!--<button class="btn btn-sm btn-primary me-2" id="emojipickerbutton" type="button">-->
<i id="emojipickerbutton" class="bi bi-emoji-smile m-1" style="font-size: 1.5rem; color: grey;"></i></button>
<input class="form-control" id="chatModuleMessage" placeholder="Message"></input>
<!--<input class="form-control" type="file" id="selectFiles" style="display: none;">-->
<button class="btn btn-sm btn-primary me-2" style="width: 3rem" id="selectFilesButton" type="button"><i class="bi bi-paperclip" style="font-size: 1.2rem; color: white;"></i></button>
<button class="btn btn-sm btn-secondary me-2" style="width: 5rem" id="sendMessage" type="button"><i class="bi bi-send" style="font-size: 1.2rem; color: white;"></i></button>
</div>
</div>
</div>
</div>
<!--
<nav class="navbar fixed-bottom navbar-light bg-light">
<div class="container-fluid">
<div class="input-group bottom-0 w-100">
<input class="form-control" maxlength="8" style="max-width: 6rem; text-transform:uppercase" id="chatModuleDxCall" placeholder="DX CALL"></input>
<input class="form-control" id="chatModuleMessage" placeholder="Message"></input>
<button class="btn btn-sm btn-primary me-2" id="emojipickerbutton" type="button"><i class="bi bi-emoji-smile"></i></button>
<input class="form-control" type="file" id="selectFiles" style="display: none;">
<button class="btn btn-sm btn-primary me-2" style="width: 3rem" id="selectFilesButton" type="button"><i class="bi bi-paperclip" style="font-size: 1.2rem; color: white;"></i></button>
<button class="btn btn-sm btn-secondary me-2" style="width: 5rem" id="sendMessage" type="button"><i class="bi bi-send" style="font-size: 1.2rem; color: white;"></i></button>
</div>
</div>
</nav>
-->
</div>
</body>
</html>

View file

@ -2,6 +2,7 @@
body {
padding-right: 0px !important;
overflow-y: hidden !important;
overflow-x: hidden !important;
}
/*Progress bars with centered text*/
@ -15,3 +16,10 @@ body {
width: 100%;
color: black;
}
/* hide scrollbar in callsign list */
#callsignlist::-webkit-scrollbar {
display: none;
}

View file

@ -188,8 +188,8 @@ api.FREEDV_MODE_FSK_LDPC_0_ADV.interleave_frames = 0
api.FREEDV_MODE_FSK_LDPC_0_ADV.M = 4
api.FREEDV_MODE_FSK_LDPC_0_ADV.Rs = 100
api.FREEDV_MODE_FSK_LDPC_0_ADV.Fs = 8000
api.FREEDV_MODE_FSK_LDPC_0_ADV.first_tone = 1150 # 1250 4fsk, 1500 2fsk
api.FREEDV_MODE_FSK_LDPC_0_ADV.tone_spacing = 100 #200
api.FREEDV_MODE_FSK_LDPC_0_ADV.first_tone = 1400 # 1150 4fsk, 1500 2fsk
api.FREEDV_MODE_FSK_LDPC_0_ADV.tone_spacing = 120 #200
api.FREEDV_MODE_FSK_LDPC_0_ADV.codename = 'H_128_256_5'.encode('utf-8') # code word
# --------------- 4 H_256_512_4, 7 bytes

View file

@ -386,10 +386,12 @@ class RF():
txbuffer += bytes(mod_out)
# 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
codec2.api.freedv_rawdatapostambletx(freedv, mod_out_postamble)
txbuffer += bytes(mod_out_postamble)
# append postamble to txbuffer
codec2.api.freedv_rawdatapostambletx(freedv, mod_out_postamble)
txbuffer += bytes(mod_out_postamble)
# add delay to end of frames
samples_delay = int(self.MODEM_SAMPLE_RATE*(repeat_delay/1000))
mod_out_silence = create_string_buffer(samples_delay*2)