diff --git a/tnc/data_handler.py b/tnc/data_handler.py index ac9c8daa..c73d0c80 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -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""" diff --git a/tnc/modem.py b/tnc/modem.py index 551b0158..7edaffe6 100644 --- a/tnc/modem.py +++ b/tnc/modem.py @@ -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: diff --git a/tnc/queues.py b/tnc/queues.py new file mode 100644 index 00000000..259218f6 --- /dev/null +++ b/tnc/queues.py @@ -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() diff --git a/tnc/sock.py b/tnc/sock.py index 79cc2741..f62a321f 100644 --- a/tnc/sock.py +++ b/tnc/sock.py @@ -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