mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
Remove excess trailing spaces.
This commit is contained in:
parent
f2ef3f7ea2
commit
9753735c40
14 changed files with 978 additions and 945 deletions
113
tnc/modem.py
113
tnc/modem.py
|
@ -127,50 +127,11 @@ class RF():
|
||||||
self.fsk_ldpc_nin_0 = codec2.api.freedv_nin(self.fsk_ldpc_freedv_0)
|
self.fsk_ldpc_nin_0 = codec2.api.freedv_nin(self.fsk_ldpc_freedv_0)
|
||||||
self.fsk_ldpc_nin_1 = codec2.api.freedv_nin(self.fsk_ldpc_freedv_1)
|
self.fsk_ldpc_nin_1 = codec2.api.freedv_nin(self.fsk_ldpc_freedv_1)
|
||||||
# --------------------------------------------CREATE PYAUDIO INSTANCE
|
# --------------------------------------------CREATE PYAUDIO INSTANCE
|
||||||
|
if not TESTMODE:
|
||||||
'''
|
|
||||||
try:
|
try:
|
||||||
# we need to "try" this, because sometimes libasound.so isn't in the default place
|
|
||||||
# try to supress error messages
|
|
||||||
with audio.noalsaerr(): # https://github.com/DJ2LS/FreeDATA/issues/22
|
|
||||||
self.p = audio.pyaudio.PyAudio()
|
|
||||||
# else do it the default way
|
|
||||||
except:
|
|
||||||
self.p = audio.pyaudio.PyAudio()
|
|
||||||
atexit.register(self.p.terminate)
|
|
||||||
|
|
||||||
# --------------------------------------------OPEN RX AUDIO CHANNEL
|
|
||||||
# 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:
|
|
||||||
static.AUDIO_INPUT_DEVICE = loopback_list[0] #0 = RX
|
|
||||||
static.AUDIO_OUTPUT_DEVICE = loopback_list[1] #1 = TX
|
|
||||||
print(f"loopback_list rx: {loopback_list}", file=sys.stderr)
|
|
||||||
|
|
||||||
'''
|
|
||||||
try:
|
|
||||||
'''
|
|
||||||
self.audio_stream = self.p.open(format=audio.pyaudio.paInt16,
|
|
||||||
channels=self.AUDIO_CHANNELS,
|
|
||||||
rate=self.AUDIO_SAMPLE_RATE_RX,
|
|
||||||
frames_per_buffer=self.AUDIO_FRAMES_PER_BUFFER_RX,
|
|
||||||
input=True,
|
|
||||||
output=True,
|
|
||||||
input_device_index=static.AUDIO_INPUT_DEVICE,
|
|
||||||
output_device_index=static.AUDIO_OUTPUT_DEVICE,
|
|
||||||
stream_callback=self.audio_callback
|
|
||||||
)
|
|
||||||
'''
|
|
||||||
|
|
||||||
self.stream = sd.RawStream(channels=1, dtype='int16', callback=self.callback, device=(static.AUDIO_INPUT_DEVICE, static.AUDIO_OUTPUT_DEVICE), samplerate = self.AUDIO_SAMPLE_RATE_RX, blocksize=4800)
|
self.stream = sd.RawStream(channels=1, dtype='int16', callback=self.callback, device=(static.AUDIO_INPUT_DEVICE, static.AUDIO_OUTPUT_DEVICE), samplerate = self.AUDIO_SAMPLE_RATE_RX, blocksize=4800)
|
||||||
|
|
||||||
|
|
||||||
atexit.register(self.stream.stop)
|
atexit.register(self.stream.stop)
|
||||||
|
|
||||||
structlog.get_logger("structlog").info("opened audio devices")
|
structlog.get_logger("structlog").info("opened audio devices")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -185,6 +146,29 @@ class RF():
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
structlog.get_logger("structlog").error("[TNC] starting pyaudio callback failed", e=e)
|
structlog.get_logger("structlog").error("[TNC] starting pyaudio callback failed", e=e)
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
# create a stream object for simulating audio stream
|
||||||
|
class Object(object):
|
||||||
|
pass
|
||||||
|
self.stream = Object()
|
||||||
|
self.stream.active = True
|
||||||
|
|
||||||
|
# create mkfifo buffer
|
||||||
|
try:
|
||||||
|
|
||||||
|
os.mkfifo(RXCHANNEL)
|
||||||
|
os.mkfifo(TXCHANNEL)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
mkfifo_write_callback_thread = threading.Thread(target=self.mkfifo_write_callback, name="MKFIFO WRITE CALLBACK THREAD",daemon=True)
|
||||||
|
mkfifo_write_callback_thread.start()
|
||||||
|
|
||||||
|
mkfifo_read_callback_thread = threading.Thread(target=self.mkfifo_read_callback, name="MKFIFO READ CALLBACK THREAD",daemon=True)
|
||||||
|
mkfifo_read_callback_thread.start()
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------INIT AND OPEN HAMLIB
|
# --------------------------------------------INIT AND OPEN HAMLIB
|
||||||
# check how we want to control the radio
|
# check how we want to control the radio
|
||||||
if static.HAMLIB_RADIOCONTROL == 'direct':
|
if static.HAMLIB_RADIOCONTROL == 'direct':
|
||||||
|
@ -232,6 +216,55 @@ class RF():
|
||||||
worker_transmit = threading.Thread(target=self.worker_transmit, name="WORKER_THREAD",daemon=True)
|
worker_transmit = threading.Thread(target=self.worker_transmit, name="WORKER_THREAD",daemon=True)
|
||||||
worker_transmit.start()
|
worker_transmit.start()
|
||||||
|
|
||||||
|
# --------------------------------------------------------------------------------------------------------
|
||||||
|
def mkfifo_read_callback(self):
|
||||||
|
while 1:
|
||||||
|
|
||||||
|
time.sleep(0.01)
|
||||||
|
# -----read
|
||||||
|
data_in48k = bytes()
|
||||||
|
with open(RXCHANNEL, 'rb') as fifo:
|
||||||
|
for line in fifo:
|
||||||
|
|
||||||
|
data_in48k += line
|
||||||
|
|
||||||
|
while len(data_in48k) >= 48:
|
||||||
|
x = np.frombuffer(data_in48k[:48], dtype=np.int16)
|
||||||
|
x = self.resampler.resample48_to_8(x)
|
||||||
|
data_in48k = data_in48k[48:]
|
||||||
|
|
||||||
|
length_x = len(x)
|
||||||
|
if not self.datac0_buffer.nbuffer+length_x > self.datac0_buffer.size:
|
||||||
|
self.datac0_buffer.push(x)
|
||||||
|
|
||||||
|
if not self.datac1_buffer.nbuffer+length_x > self.datac1_buffer.size:
|
||||||
|
if RECEIVE_DATAC1:
|
||||||
|
self.datac1_buffer.push(x)
|
||||||
|
|
||||||
|
if not self.datac3_buffer.nbuffer+length_x > self.datac3_buffer.size:
|
||||||
|
if RECEIVE_DATAC3:
|
||||||
|
self.datac3_buffer.push(x)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def mkfifo_write_callback(self):
|
||||||
|
while 1:
|
||||||
|
time.sleep(0.01)
|
||||||
|
|
||||||
|
# -----write
|
||||||
|
if len(self.modoutqueue) <= 0 or self.mod_out_locked:
|
||||||
|
#data_out48k = np.zeros(self.AUDIO_FRAMES_PER_BUFFER_RX, dtype=np.int16)
|
||||||
|
pass
|
||||||
|
|
||||||
|
else:
|
||||||
|
data_out48k = self.modoutqueue.popleft()
|
||||||
|
#print(len(data_out48k))
|
||||||
|
|
||||||
|
fifo_write = open(TXCHANNEL, 'wb')
|
||||||
|
fifo_write.write(data_out48k)
|
||||||
|
fifo_write.flush()
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------------------------------
|
||||||
#def audio_callback(self, data_in48k, frame_count, time_info, status):
|
#def audio_callback(self, data_in48k, frame_count, time_info, status):
|
||||||
def callback(self, data_in48k, outdata, frames, time, status):
|
def callback(self, data_in48k, outdata, frames, time, status):
|
||||||
|
|
Loading…
Reference in a new issue