mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
first transmit prototype for broadcasts
This commit is contained in:
parent
0e3f2dd864
commit
8596412a04
8 changed files with 111 additions and 49 deletions
|
@ -460,18 +460,23 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||||
}
|
}
|
||||||
var timestamp = Math.floor(Date.now() / 1000);
|
var timestamp = Math.floor(Date.now() / 1000);
|
||||||
|
|
||||||
// check if broadcast
|
|
||||||
if (dxcallsign == "broadcast") {
|
|
||||||
var tnc_command = "broadcast";
|
|
||||||
|
|
||||||
|
// check if broadcast
|
||||||
|
dxcallsign.starts
|
||||||
|
if (dxcallsign.startsWith('BC-')) {
|
||||||
|
var tnc_command = "broadcast"
|
||||||
let Data = {
|
let Data = {
|
||||||
command: tnc_command,
|
command: tnc_command,
|
||||||
|
broadcastChannel: dxcallsign,
|
||||||
data: chatmessage,
|
data: chatmessage,
|
||||||
};
|
};
|
||||||
ipcRenderer.send("run-tnc-command", Data);
|
ipcRenderer.send("run-tnc-command", Data);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
var file_checksum = crc32(file).toString(16).toUpperCase();
|
var file_checksum = crc32(file).toString(16).toUpperCase();
|
||||||
var tnc_command = "msg";
|
var tnc_command = "msg"
|
||||||
var file_checksum = crc32(file).toString(16).toUpperCase();
|
var file_checksum = crc32(file).toString(16).toUpperCase();
|
||||||
console.log(file_checksum);
|
console.log(file_checksum);
|
||||||
var data_with_attachment =
|
var data_with_attachment =
|
||||||
|
@ -505,6 +510,8 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||||
ipcRenderer.send("run-tnc-command", Data);
|
ipcRenderer.send("run-tnc-command", Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
db.post({
|
db.post({
|
||||||
_id: uuid,
|
_id: uuid,
|
||||||
timestamp: timestamp,
|
timestamp: timestamp,
|
||||||
|
|
|
@ -2785,6 +2785,12 @@ ipcRenderer.on("run-tnc-command", (event, arg) => {
|
||||||
arg.uuid,
|
arg.uuid,
|
||||||
arg.command
|
arg.command
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
if (arg.command == "broadcast") {
|
||||||
|
sock.sendBroadcastChannel(
|
||||||
|
arg.broadcastChannel,
|
||||||
|
arg.data
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (arg.command == "stop_transmission") {
|
if (arg.command == "stop_transmission") {
|
||||||
sock.stopTransmission();
|
sock.stopTransmission();
|
||||||
|
|
29
gui/sock.js
29
gui/sock.js
|
@ -835,6 +835,35 @@ exports.sendFecIsWriting = function (mycallsign) {
|
||||||
writeTncCommand(command);
|
writeTncCommand(command);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// SEND FEC TO BROADCASTCHANNEL
|
||||||
|
exports.sendBroadcastChannel = function (channel, data) {
|
||||||
|
|
||||||
|
let checksum = ''
|
||||||
|
let uuid = ''
|
||||||
|
let command = ''
|
||||||
|
data = FD.btoa_FD(
|
||||||
|
"m" +
|
||||||
|
split_char +
|
||||||
|
command +
|
||||||
|
split_char +
|
||||||
|
checksum +
|
||||||
|
split_char +
|
||||||
|
uuid +
|
||||||
|
split_char +
|
||||||
|
data
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let payload = data;
|
||||||
|
command =
|
||||||
|
'{"type" : "fec", "command" : "transmit", "mode": "datac4", "wakeup": "True", "payload" : "' +
|
||||||
|
payload +
|
||||||
|
'"}';
|
||||||
|
writeTncCommand(command);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// RECORD AUDIO
|
// RECORD AUDIO
|
||||||
exports.record_audio = function () {
|
exports.record_audio = function () {
|
||||||
command = '{"type" : "set", "command" : "record_audio"}';
|
command = '{"type" : "set", "command" : "record_audio"}';
|
||||||
|
|
|
@ -35,6 +35,7 @@ class FREEDV_MODE(Enum):
|
||||||
fsk_ldpc_0 = 200
|
fsk_ldpc_0 = 200
|
||||||
fsk_ldpc_1 = 201
|
fsk_ldpc_1 = 201
|
||||||
|
|
||||||
|
|
||||||
class FREEDV_MODE_USED_SLOTS(Enum):
|
class FREEDV_MODE_USED_SLOTS(Enum):
|
||||||
"""
|
"""
|
||||||
Enumeration for codec2 used slots
|
Enumeration for codec2 used slots
|
||||||
|
|
|
@ -10,14 +10,14 @@ ssid_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
|
|
||||||
[AUDIO]
|
[AUDIO]
|
||||||
#audio settings
|
#audio settings
|
||||||
rx = 10
|
rx = 0
|
||||||
tx = 10
|
tx = 0
|
||||||
txaudiolevel = 250
|
txaudiolevel = 250
|
||||||
auto_tune = False
|
auto_tune = False
|
||||||
|
|
||||||
[RADIO]
|
[RADIO]
|
||||||
#radio settings
|
#radio settings
|
||||||
radiocontrol = rigctld
|
radiocontrol = disabled
|
||||||
rigctld_ip = 127.0.0.1
|
rigctld_ip = 127.0.0.1
|
||||||
rigctld_port = 4532
|
rigctld_port = 4532
|
||||||
|
|
||||||
|
@ -38,3 +38,4 @@ tx_delay = 50
|
||||||
[TCI]
|
[TCI]
|
||||||
ip = 127.0.0.1
|
ip = 127.0.0.1
|
||||||
port = 50001
|
port = 50001
|
||||||
|
|
||||||
|
|
|
@ -324,15 +324,17 @@ class DATA:
|
||||||
# [5] attempts
|
# [5] attempts
|
||||||
self.open_dc_and_transmit(data[1], data[2], data[3], data[4], data[5])
|
self.open_dc_and_transmit(data[1], data[2], data[3], data[4], data[5])
|
||||||
|
|
||||||
elif data[0] == "FEC":
|
|
||||||
# [1] DATA_OUT bytes
|
|
||||||
# [2] MODE str datac0/1/3...
|
|
||||||
self.send_fec_frame(data[1], data[2])
|
|
||||||
|
|
||||||
elif data[0] == "FEC_IS_WRITING":
|
elif data[0] == "FEC_IS_WRITING":
|
||||||
# [1] DATA_OUT bytes
|
# [1] DATA_OUT bytes
|
||||||
# [2] MODE str datac0/1/3...
|
# [2] MODE str datac0/1/3...
|
||||||
self.send_fec_is_writing(data[1])
|
self.send_fec_is_writing(data[1])
|
||||||
|
|
||||||
|
elif data[0] == "FEC":
|
||||||
|
# [1] WAKEUP bool
|
||||||
|
# [2] MODE str datac0/1/3...
|
||||||
|
# [3] PAYLOAD
|
||||||
|
self.send_fec(data[1], data[2], data[3])
|
||||||
else:
|
else:
|
||||||
self.log.error(
|
self.log.error(
|
||||||
"[TNC] worker_transmit: received invalid command:", data=data
|
"[TNC] worker_transmit: received invalid command:", data=data
|
||||||
|
@ -3447,8 +3449,21 @@ class DATA:
|
||||||
frame_to_tx=[test_frame], c2_mode=FREEDV_MODE.datac13.value
|
frame_to_tx=[test_frame], c2_mode=FREEDV_MODE.datac13.value
|
||||||
)
|
)
|
||||||
|
|
||||||
def send_fec_frame(self, payload, mode) -> None:
|
def send_fec(self, mode, wakeup, payload):
|
||||||
"""Send an empty test frame"""
|
"""Send an empty test frame"""
|
||||||
|
print(mode)
|
||||||
|
print(wakeup)
|
||||||
|
print(payload)
|
||||||
|
print(codec2.FREEDV_MODE[mode.lower()].value)
|
||||||
|
if mode:
|
||||||
|
mode_int = codec2.freedv_get_mode_value_by_name("sig0")
|
||||||
|
payload_per_frame = modem.get_bytes_per_frame(mode_int) - 2
|
||||||
|
fec_wakeup_frame = bytearray(payload_per_frame)
|
||||||
|
fec_wakeup_frame[:1] = bytes([FR_TYPE.FEC_WAKEUP.value])
|
||||||
|
fec_wakeup_frame[1:7] = helpers.callsign_to_bytes(Station.mycallsign)
|
||||||
|
self.enqueue_frame_for_tx(
|
||||||
|
frame_to_tx=[fec_wakeup_frame], c2_mode=codec2.FREEDV_MODE[mode].value
|
||||||
|
)
|
||||||
|
|
||||||
mode_int = codec2.freedv_get_mode_value_by_name(mode)
|
mode_int = codec2.freedv_get_mode_value_by_name(mode)
|
||||||
payload_per_frame = modem.get_bytes_per_frame(mode_int) - 2
|
payload_per_frame = modem.get_bytes_per_frame(mode_int) - 2
|
||||||
|
@ -3462,7 +3477,7 @@ class DATA:
|
||||||
)
|
)
|
||||||
|
|
||||||
def send_fec_is_writing(self, mycallsign) -> None:
|
def send_fec_is_writing(self, mycallsign) -> None:
|
||||||
"""Send an empty test frame"""
|
"""Send an fec is writing frame"""
|
||||||
|
|
||||||
fec_frame = bytearray(14)
|
fec_frame = bytearray(14)
|
||||||
fec_frame[:1] = bytes([FR_TYPE.IS_WRITING.value])
|
fec_frame[:1] = bytes([FR_TYPE.IS_WRITING.value])
|
||||||
|
@ -3477,6 +3492,7 @@ class DATA:
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def save_data_to_folder(self,
|
def save_data_to_folder(self,
|
||||||
transmission_uuid,
|
transmission_uuid,
|
||||||
timestamp,
|
timestamp,
|
||||||
|
|
|
@ -482,12 +482,13 @@ class ThreadedTCPRequestHandler(socketserver.StreamRequestHandler):
|
||||||
def tnc_fec_transmit(self, received_json):
|
def tnc_fec_transmit(self, received_json):
|
||||||
try:
|
try:
|
||||||
mode = received_json["mode"]
|
mode = received_json["mode"]
|
||||||
|
wakeup = received_json["wakeup"]
|
||||||
base64data = received_json["payload"]
|
base64data = received_json["payload"]
|
||||||
if len(base64data) % 4:
|
if len(base64data) % 4:
|
||||||
raise TypeError
|
raise TypeError
|
||||||
payload = base64.b64decode(base64data)
|
payload = base64.b64decode(base64data)
|
||||||
|
|
||||||
DATA_QUEUE_TRANSMIT.put(["FEC", payload, mode])
|
DATA_QUEUE_TRANSMIT.put(["FEC", mode, wakeup, payload])
|
||||||
command_response("fec_transmit", True)
|
command_response("fec_transmit", True)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
command_response("fec_transmit", False)
|
command_response("fec_transmit", False)
|
||||||
|
|
|
@ -174,6 +174,7 @@ class FRAME_TYPE(Enum):
|
||||||
ARQ_STOP = 249
|
ARQ_STOP = 249
|
||||||
BEACON = 250
|
BEACON = 250
|
||||||
FEC = 251
|
FEC = 251
|
||||||
|
FEC_WAKEUP = 252
|
||||||
IDENT = 254
|
IDENT = 254
|
||||||
TEST_FRAME = 255
|
TEST_FRAME = 255
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue