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_1 = codec2.api.freedv_nin(self.fsk_ldpc_freedv_1)
|
||||
# --------------------------------------------CREATE PYAUDIO INSTANCE
|
||||
|
||||
'''
|
||||
if not TESTMODE:
|
||||
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)
|
||||
|
||||
|
||||
atexit.register(self.stream.stop)
|
||||
|
||||
structlog.get_logger("structlog").info("opened audio devices")
|
||||
|
||||
except Exception as e:
|
||||
|
@ -185,6 +146,29 @@ class RF():
|
|||
except Exception as 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
|
||||
# check how we want to control the radio
|
||||
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.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 callback(self, data_in48k, outdata, frames, time, status):
|
||||
|
|
Loading…
Reference in a new issue