From 72b653b188041112bcdfc771e022aae617b6882c Mon Sep 17 00:00:00 2001 From: dj2ls Date: Sun, 19 Dec 2021 19:45:08 +0100 Subject: [PATCH] preparation for ARQ test added a directory 003_highsnr_stdio_arq for working on ARQ tests --- test/003_highsnr_stdio_arq/test_arq_tx.py | 22 ++++++++++++++ tnc/codec2.py | 36 +++++++++++++++++++---- tnc/data_handler.py | 5 ++-- tnc/modem.py | 36 +++++++++++++++++++---- tnc/static.py | 6 ++-- 5 files changed, 88 insertions(+), 17 deletions(-) create mode 100644 test/003_highsnr_stdio_arq/test_arq_tx.py diff --git a/test/003_highsnr_stdio_arq/test_arq_tx.py b/test/003_highsnr_stdio_arq/test_arq_tx.py new file mode 100644 index 00000000..d4915750 --- /dev/null +++ b/test/003_highsnr_stdio_arq/test_arq_tx.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Wed Dec 23 07:04:24 2020 + +@author: DJ2LS +""" + +import sys +sys.path.insert(0,'../..') +sys.path.insert(0,'../../tnc') +import data_handler + + +teststring = b'HELLO WORLD' + +data_handler.arq_transmit(teststring, 10, 1) + + + + + diff --git a/tnc/codec2.py b/tnc/codec2.py index 5126d167..76caf8bf 100644 --- a/tnc/codec2.py +++ b/tnc/codec2.py @@ -7,8 +7,7 @@ import sys import pathlib from enum import Enum import numpy as np - -print("loading codec2 module", file=sys.stderr) +#print("loading codec2 module", file=sys.stderr) # Enum for codec2 modes @@ -17,14 +16,39 @@ class FREEDV_MODE(Enum): datac1 = 10 datac3 = 12 -def FREEDV_GET_MODE(mode): +def freedv_get_mode(mode): return FREEDV_MODE[mode].value -# LOAD FREEDV -libname = "libcodec2.so" -api = ctypes.CDLL(libname) +# -------------------------------------------- LOAD FREEDV +# codec2 search pathes in descending order +# libcodec2.so ctests +# pathlib.Path("codec2/build_linux/src/libcodec2.so.1.0") manual build +# pathlib.Path("lib/codec2/linux/libcodec2.so.1.0") precompiled +# pathlib.Path("../../tnc/codec2/build_linux/src/libcodec2.so.1.0") external loading manual build +# pathlib.Path("../../tnc/lib/codec2/linux/libcodec2.so.1.0") external loading precompiled +libname = ["libcodec2.so", \ + pathlib.Path("codec2/build_linux/src/libcodec2.so.1.0"), \ + pathlib.Path("lib/codec2/linux/libcodec2.so.1.0"), \ + pathlib.Path("../../tnc/codec2/build_linux/src/libcodec2.so.1.0"), \ + pathlib.Path("../../tnc/lib/codec2/linux/libcodec2.so.1.0"), \ + ] +# iterate through codec2 search pathes +for i in libname: + try: + api = ctypes.CDLL(i) + print(f"[C2 ] Codec2 library found - {i}", file=sys.stderr) + break + except: + print(f"[C2 ] Codec2 library not found - {i}", file=sys.stderr) + pass +# quit module if codec2 cant be loaded +if not 'api' in locals(): + print(f"[C2 ] Loading Codec2 library failed", file=sys.stderr) + quit() + + # ctypes function init api.freedv_open.argype = [c_int] diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 5ed86abd..702a61cc 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -5,14 +5,13 @@ Created on Sun Dec 27 20:43:40 2020 @author: DJ2LS """ - - +import sys import logging, structlog, log_handler import threading import time from random import randrange import asyncio -import sys + import ujson as json import static diff --git a/tnc/modem.py b/tnc/modem.py index b2c42c5c..48ce95a0 100644 --- a/tnc/modem.py +++ b/tnc/modem.py @@ -21,6 +21,8 @@ import static import data_handler import re +import codec2 + # option for testing miniaudio instead of audioop for sample rate conversion #import miniaudio @@ -109,7 +111,11 @@ class RF(): self.AUDIO_CHUNKS = 48 #8 * (self.AUDIO_SAMPLE_RATE_RX/self.MODEM_SAMPLE_RATE) #48 self.AUDIO_CHANNELS = 1 + # small hack for initializing codec2 via codec2.py module + # TODO: we need to change the entire modem module to integrate codec2 module + self.c_lib = codec2.api + ''' # -------------------------------------------- LOAD FREEDV try: # we check at first for libcodec2 compiled from source @@ -132,11 +138,11 @@ class RF(): structlog.get_logger("structlog").info("[TNC] Codec2 found", path=libname, origin="precompiled") else: structlog.get_logger("structlog").critical("[TNC] Codec2 not found") - - + ''' + ''' # --------------------------------------------CTYPES FUNCTION INIT # TODO: WE STILL HAVE SOME MISSING FUNCTIONS! - + self.c_lib.freedv_open.argype = [c_int] self.c_lib.freedv_open.restype = c_void_p @@ -154,8 +160,7 @@ class RF(): self.c_lib.freedv_set_frames_per_burst.argtype = [c_void_p, c_int] self.c_lib.freedv_set_frames_per_burst.restype = c_int - - + ''' # --------------------------------------------CREATE PYAUDIO INSTANCE try: @@ -168,6 +173,17 @@ class RF(): self.p = pyaudio.PyAudio() atexit.register(self.p.terminate) # --------------------------------------------OPEN AUDIO CHANNEL RX + # optional auto selection of loopback device if using in testmode + if static.AUDIO_INPUT_DEVICE == -2: + loopback_list = [] + for dev in range(0,self.p.get_device_count()): + if 'Loopback: PCM' in self.p.get_device_info_by_index(dev)["name"]: + loopback_list.append(dev) + if len(loopback_list) >= 2: + AUDIO_INPUT_DEVICE = loopback_list[0] #0 = RX 1 = TX + print(f"loopback_list rx: {loopback_list}", file=sys.stderr) + + self.stream_rx = self.p.open(format=pyaudio.paInt16, channels=self.AUDIO_CHANNELS, rate=self.AUDIO_SAMPLE_RATE_RX, @@ -176,6 +192,16 @@ class RF(): input_device_index=static.AUDIO_INPUT_DEVICE ) # --------------------------------------------OPEN AUDIO CHANNEL TX + # optional auto selection of loopback device if using in testmode + if static.AUDIO_OUTPUT_DEVICE == -2: + loopback_list = [] + for dev in range(0,self.p.get_device_count()): + if 'Loopback: PCM' in self.p.get_device_info_by_index(dev)["name"]: + loopback_list.append(dev) + if len(loopback_list) >= 2: + static.AUDIO_OUTPUT_DEVICE = loopback_list[1] #0 = RX 1 = TX + print(f"loopback_list tx: {loopback_list}", file=sys.stderr) + self.stream_tx = self.p.open(format=pyaudio.paInt16, channels=self.AUDIO_CHANNELS, rate=self.AUDIO_SAMPLE_RATE_TX, diff --git a/tnc/static.py b/tnc/static.py index d0c04316..060e988f 100644 --- a/tnc/static.py +++ b/tnc/static.py @@ -36,7 +36,7 @@ SOCKET_TIMEOUT = 3 # seconds HAMLIB_PTT_TYPE = 'RTS' PTT_STATE = False -HAMLIB_DEVICE_ID = 0 +HAMLIB_DEVICE_ID = 'RIG_MODEL_DUMMY_NOVFO' HAMLIB_DEVICE_PORT = '/dev/ttyUSB0' HAMLIB_SERIAL_SPEED = '9600' @@ -54,8 +54,8 @@ SCATTER = [] # --------------------------------- # Audio Defaults -AUDIO_INPUT_DEVICE = 1 -AUDIO_OUTPUT_DEVICE = 1 +AUDIO_INPUT_DEVICE = -2 +AUDIO_OUTPUT_DEVICE = -2 AUDIO_RMS = 0