preparation for ARQ test

added a directory 003_highsnr_stdio_arq for working on ARQ tests
This commit is contained in:
dj2ls 2021-12-19 19:45:08 +01:00
parent 8b8678853d
commit 72b653b188
5 changed files with 88 additions and 17 deletions

View file

@ -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)

View file

@ -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]

View file

@ -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

View file

@ -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,

View file

@ -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