Extract queues from data_handler and modem.

Eliminates a cyclical import identified by pylint.
This commit is contained in:
Paul Kronenwetter 2022-07-03 13:41:06 -04:00
parent 9b7056a774
commit 7f649f98df
4 changed files with 24 additions and 20 deletions

View file

@ -8,7 +8,6 @@ Created on Sun Dec 27 20:43:40 2020
# pylint: disable=import-outside-toplevel, attribute-defined-outside-init
import base64
import queue
import sys
import threading
import time
@ -26,13 +25,11 @@ import structlog
import ujson as json
from codec2 import FREEDV_MODE
from exceptions import NoCallsign
from queues import DATA_QUEUE_RECEIVED, DATA_QUEUE_TRANSMIT
from static import FRAME_TYPE as FR_TYPE
TESTMODE = False
DATA_QUEUE_TRANSMIT = queue.Queue()
DATA_QUEUE_RECEIVED = queue.Queue()
class DATA:
"""Terminal Node Controller for FreeDATA"""

View file

@ -11,28 +11,24 @@ Created on Wed Dec 23 07:04:24 2020
import atexit
import ctypes
import os
import queue
import sys
import threading
import time
from collections import deque
import codec2
import data_handler
import numpy as np
import sock
import sounddevice as sd
import static
import structlog
import ujson as json
from queues import DATA_QUEUE_RECEIVED, MODEM_RECEIVED_QUEUE, MODEM_TRANSMIT_QUEUE
TESTMODE = False
RXCHANNEL = ""
TXCHANNEL = ""
# Initialize FIFO queue to store received frames
MODEM_RECEIVED_QUEUE = queue.Queue()
MODEM_TRANSMIT_QUEUE = queue.Queue()
static.TRANSMITTING = False
# Receive only specific modes to reduce CPU load
@ -690,7 +686,7 @@ class RF:
# data[0] = bytes_out
# data[1] = freedv session
# data[2] = bytes_per_frame
data_handler.DATA_QUEUE_RECEIVED.put([data[0], data[1], data[2]])
DATA_QUEUE_RECEIVED.put([data[0], data[1], data[2]])
self.modem_received_queue.task_done()
def get_frequency_offset(self, freedv: ctypes.c_void_p) -> float:

11
tnc/queues.py Normal file
View file

@ -0,0 +1,11 @@
"""
Hold queues used by more than one module to eliminate cyclic imports.
"""
import queue
DATA_QUEUE_TRANSMIT = queue.Queue()
DATA_QUEUE_RECEIVED = queue.Queue()
# Initialize FIFO queue to store received frames
MODEM_RECEIVED_QUEUE = queue.Queue()
MODEM_TRANSMIT_QUEUE = queue.Queue()

View file

@ -25,12 +25,12 @@ import sys
import threading
import time
import data_handler
import helpers
import static
import structlog
import ujson as json
from exceptions import NoCallsign
from queues import DATA_QUEUE_TRANSMIT
SOCKET_QUEUE = queue.Queue()
DAEMON_QUEUE = queue.Queue()
@ -227,7 +227,7 @@ def process_tnc_commands(data):
and received_json["command"] == "send_test_frame"
):
try:
data_handler.DATA_QUEUE_TRANSMIT.put(["SEND_TEST_FRAME"])
DATA_QUEUE_TRANSMIT.put(["SEND_TEST_FRAME"])
command_response("send_test_frame", True)
except Exception as err:
command_response("send_test_frame", False)
@ -240,7 +240,7 @@ def process_tnc_commands(data):
# CQ CQ CQ -----------------------------------------------------
if received_json["command"] == "cqcqcq":
try:
data_handler.DATA_QUEUE_TRANSMIT.put(["CQ"])
DATA_QUEUE_TRANSMIT.put(["CQ"])
command_response("cqcqcq", True)
except Exception as err:
@ -254,7 +254,7 @@ def process_tnc_commands(data):
try:
static.BEACON_STATE = True
interval = int(received_json["parameter"])
data_handler.DATA_QUEUE_TRANSMIT.put(["BEACON", interval, True])
DATA_QUEUE_TRANSMIT.put(["BEACON", interval, True])
command_response("start_beacon", True)
except Exception as err:
command_response("start_beacon", False)
@ -269,7 +269,7 @@ def process_tnc_commands(data):
try:
log.warning("[SCK] Stopping beacon!")
static.BEACON_STATE = False
data_handler.DATA_QUEUE_TRANSMIT.put(["BEACON", None, False])
DATA_QUEUE_TRANSMIT.put(["BEACON", None, False])
command_response("stop_beacon", True)
except Exception as err:
command_response("stop_beacon", False)
@ -293,7 +293,7 @@ def process_tnc_commands(data):
dxcallsign = helpers.callsign_to_bytes(dxcallsign)
dxcallsign = helpers.bytes_to_callsign(dxcallsign)
data_handler.DATA_QUEUE_TRANSMIT.put(["PING", dxcallsign])
DATA_QUEUE_TRANSMIT.put(["PING", dxcallsign])
command_response("ping", True)
except NoCallsign:
command_response("ping", False)
@ -320,7 +320,7 @@ def process_tnc_commands(data):
static.DXCALLSIGN = dxcallsign
static.DXCALLSIGN_CRC = helpers.get_crc_24(static.DXCALLSIGN)
data_handler.DATA_QUEUE_TRANSMIT.put(["CONNECT", dxcallsign])
DATA_QUEUE_TRANSMIT.put(["CONNECT", dxcallsign])
command_response("connect", True)
except Exception as err:
command_response("connect", False)
@ -334,7 +334,7 @@ def process_tnc_commands(data):
if received_json["type"] == "arq" and received_json["command"] == "disconnect":
# send ping frame and wait for ACK
try:
data_handler.DATA_QUEUE_TRANSMIT.put(["DISCONNECT"])
DATA_QUEUE_TRANSMIT.put(["DISCONNECT"])
command_response("disconnect", True)
except Exception as err:
command_response("disconnect", False)
@ -383,7 +383,7 @@ def process_tnc_commands(data):
binarydata = base64.b64decode(base64data)
data_handler.DATA_QUEUE_TRANSMIT.put(
DATA_QUEUE_TRANSMIT.put(
["ARQ_RAW", binarydata, mode, n_frames, arq_uuid, mycallsign]
)
@ -402,7 +402,7 @@ def process_tnc_commands(data):
):
try:
if static.TNC_STATE == "BUSY" or static.ARQ_STATE:
data_handler.DATA_QUEUE_TRANSMIT.put(["STOP"])
DATA_QUEUE_TRANSMIT.put(["STOP"])
log.warning("[SCK] Stopping transmission!")
static.TNC_STATE = "IDLE"
static.ARQ_STATE = False