diff --git a/gui/config.json b/gui/config.json deleted file mode 100644 index 30f023e4..00000000 --- a/gui/config.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "tnc_host" : "127.0.0.1", - "tnc_port" : "3000", - "daemon_host" : "127.0.0.1", - "daemon_port" : "3001", - "mycall" : "AA0AA", - "mygrid" : "AA11ea" -} \ No newline at end of file diff --git a/gui/main.js b/gui/main.js index cd7279a1..07293d53 100644 --- a/gui/main.js +++ b/gui/main.js @@ -175,9 +175,17 @@ app.whenReady().then(() => { console.log("Trying to start daemon binary") + var folder = path.join(__dirname); + fs.readdir(folder, (err, files) => { + files.forEach(file => { + console.log(file); + }); + }); + + if(os.platform()=='linux'){ - daemonProcess = exec('./tnc/daemon', []) + daemonProcess = exec(path.join(__dirname) + '/tnc/daemon', []) daemonProcess.on('error', (err) => { console.log(err); @@ -192,7 +200,7 @@ app.whenReady().then(() => { if(os.platform()=='win32' || os.platform()=='win64'){ - daemonProcess = exec('tnc\\daemon.exe', []) + daemonProcess = exec(path.join(__dirname) + '\\tnc\\daemon.exe', []) daemonProcess.on('error', (err) => { console.log(err); diff --git a/tnc/audio.py b/tnc/audio.py index 2b900a8e..b2dedc32 100644 --- a/tnc/audio.py +++ b/tnc/audio.py @@ -2,20 +2,17 @@ import json import sys import multiprocessing + #################################################### # https://stackoverflow.com/questions/7088672/pyaudio-working-but-spits-out-error-messages-each-time # https://github.com/DJ2LS/FreeDATA/issues/22 # we need to have a look at this if we want to run this on Windows and MacOS ! # Currently it seems, this is a Linux-only problem - from ctypes import * from contextlib import contextmanager import pyaudio - - - ERROR_HANDLER_FUNC = CFUNCTYPE(None, c_char_p, c_int, c_char_p, c_int, c_char_p) def py_error_handler(filename, line, function, err, fmt): @@ -35,14 +32,19 @@ def noalsaerr(): ##################################################### def get_audio_devices(): + # we need to run this on windows for multiprocessing support + # multiprocessing.freeze_support() + #multiprocessing.get_context('spawn') - proxy_input_devices = multiprocessing.Manager().list() - proxy_output_devices = multiprocessing.Manager().list() - p = multiprocessing.Process(target=fetch_audio_devices, args=(proxy_input_devices, proxy_output_devices)) - p.start() - p.join() + with multiprocessing.Manager() as manager: + proxy_input_devices = manager.list() + proxy_output_devices = manager.list() + #print(multiprocessing.get_start_method()) + p = multiprocessing.Process(target=fetch_audio_devices, args=(proxy_input_devices, proxy_output_devices)) + p.start() + p.join() - return list(proxy_input_devices), list(proxy_output_devices) + return list(proxy_input_devices), list(proxy_output_devices) def fetch_audio_devices(input_devices, output_devices): # UPDATE LIST OF AUDIO DEVICES @@ -59,7 +61,7 @@ def fetch_audio_devices(input_devices, output_devices): #output_devices = [] for i in range(0, p.get_device_count()): - # we need to do a try exception, beacuse for windows theres now audio device range + # we need to do a try exception, beacuse for windows theres no audio device range try: maxInputChannels = p.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels') maxOutputChannels = p.get_device_info_by_host_api_device_index(0, i).get('maxOutputChannels') @@ -75,9 +77,3 @@ def fetch_audio_devices(input_devices, output_devices): output_devices.append({"id": i, "name": str(name)}) p.terminate() - #proxy_input_devices = input_devices - #proxy_output_devices = output_devices - #d = [input_devices, output_devices] - - - diff --git a/tnc/codec2.py b/tnc/codec2.py index fabffe9b..76e2a518 100644 --- a/tnc/codec2.py +++ b/tnc/codec2.py @@ -38,7 +38,6 @@ sys.path.append(app_path) structlog.get_logger("structlog").info("[C2 ] Searching for libcodec2...") if sys.platform == 'linux': files = glob.glob('**/*libcodec2*',recursive=True) - files.append('libcodec2.so') elif sys.platform == 'darwin': files = glob.glob('**/*libcodec2*.dylib',recursive=True) @@ -68,6 +67,9 @@ if not 'api' in locals(): # ctypes function init +#api.freedv_set_fmin_fmax.restype = c_int +#api.freedv_set_fmin_fmax.argype = [c_void_p, c_float, c_float] + api.freedv_open.argype = [c_int] api.freedv_open.restype = c_void_p diff --git a/tnc/data_handler.py b/tnc/data_handler.py index e372aca3..3f3d0574 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -1122,8 +1122,8 @@ class DATA(): def received_beacon(self, data_in:bytes): # here we add the received station to the heard stations buffer - dxcallsign = bytes(data_in[2:8]).rstrip(b'\x00') - dxgrid = bytes(data_in[8:14]).rstrip(b'\x00') + dxcallsign = bytes(data_in[1:7]).rstrip(b'\x00') + dxgrid = bytes(data_in[7:13]).rstrip(b'\x00') static.INFO.append("BEACON;RECEIVING") structlog.get_logger("structlog").info("[TNC] BEACON RCVD [" + str(dxcallsign, 'utf-8') + "]["+ str(dxgrid, 'utf-8') +"] ", snr=static.SNR) helpers.add_to_heard_stations(dxcallsign,dxgrid, 'BEACON', static.SNR, static.FREQ_OFFSET, static.HAMLIB_FREQUENCY) diff --git a/tnc/lib/codec2/win64/libgcc_s_seh-1.dll b/tnc/lib/codec2/win64/libgcc_s_seh-1.dll deleted file mode 100644 index 224cd0b4..00000000 Binary files a/tnc/lib/codec2/win64/libgcc_s_seh-1.dll and /dev/null differ diff --git a/tnc/lib/codec2/win64/libgcc_s_sjlj-1.dll b/tnc/lib/codec2/win64/libgcc_s_sjlj-1.dll deleted file mode 100644 index c8d71f74..00000000 Binary files a/tnc/lib/codec2/win64/libgcc_s_sjlj-1.dll and /dev/null differ diff --git a/tnc/lib/codec2/win64/libwinpthread-1.dll b/tnc/lib/codec2/win64/libwinpthread-1.dll deleted file mode 100644 index 1afe91c2..00000000 Binary files a/tnc/lib/codec2/win64/libwinpthread-1.dll and /dev/null differ diff --git a/tnc/modem.py b/tnc/modem.py index 86cfbecd..12ec6339 100644 --- a/tnc/modem.py +++ b/tnc/modem.py @@ -24,7 +24,7 @@ import re import queue import codec2 import audio -import multiprocessing + @@ -97,6 +97,9 @@ class RF(): # open codec2 instance self.datac0_freedv = cast(codec2.api.freedv_open(codec2.api.FREEDV_MODE_DATAC0), c_void_p) + #self.c_lib.freedv_set_fmin_fmax(self.datac0_freedv, c_float(-150.0), c_float(150.0)) + + self.datac0_bytes_per_frame = int(codec2.api.freedv_get_bits_per_modem_frame(self.datac0_freedv)/8) self.datac0_payload_per_frame = self.datac0_bytes_per_frame -2 self.datac0_n_nom_modem_samples = self.c_lib.freedv_get_n_nom_modem_samples(self.datac0_freedv) @@ -166,8 +169,8 @@ class RF(): try: structlog.get_logger("structlog").debug("[TNC] starting pyaudio callback") - #self.audio_stream.start_stream() - multiprocessing.Process(target=self.audio_stream.start_stream).start() + self.audio_stream.start_stream() + except Exception as e: structlog.get_logger("structlog").error("[TNC] starting pyaudio callback failed", e=e)