2023-11-23 15:59:53 +00:00
|
|
|
from data_frame_factory import DataFrameFactory
|
2023-11-25 17:21:41 +00:00
|
|
|
import queue
|
|
|
|
from codec2 import FREEDV_MODE
|
2023-12-04 10:54:03 +00:00
|
|
|
import structlog
|
2023-12-05 14:40:04 +00:00
|
|
|
from state_manager import StateManager
|
2024-01-21 19:34:01 +00:00
|
|
|
from arq_data_type_handler import ARQDataTypeHandler
|
|
|
|
|
2023-11-23 15:59:53 +00:00
|
|
|
|
|
|
|
class TxCommand():
|
|
|
|
|
2024-01-04 14:46:58 +00:00
|
|
|
def __init__(self, config: dict, state_manager: StateManager, event_manager, apiParams:dict = {}):
|
2023-11-25 17:21:41 +00:00
|
|
|
self.config = config
|
2024-02-02 18:37:02 +00:00
|
|
|
self.logger = structlog.get_logger(type(self).__name__)
|
2023-12-03 13:11:43 +00:00
|
|
|
self.state_manager = state_manager
|
2024-01-04 14:46:58 +00:00
|
|
|
self.event_manager = event_manager
|
2023-11-25 17:21:41 +00:00
|
|
|
self.set_params_from_api(apiParams)
|
2023-11-26 11:45:51 +00:00
|
|
|
self.frame_factory = DataFrameFactory(config)
|
2024-02-02 18:37:02 +00:00
|
|
|
self.arq_data_type_handler = ARQDataTypeHandler(event_manager, state_manager)
|
|
|
|
|
|
|
|
def log(self, message, isWarning = False):
|
|
|
|
msg = f"[{type(self).__name__}]: {message}"
|
|
|
|
logger = self.logger.warn if isWarning else self.logger.info
|
|
|
|
logger(msg)
|
2023-11-23 15:59:53 +00:00
|
|
|
|
2023-11-25 17:21:41 +00:00
|
|
|
def set_params_from_api(self, apiParams):
|
2023-11-23 15:59:53 +00:00
|
|
|
pass
|
|
|
|
|
2023-11-25 17:21:41 +00:00
|
|
|
def get_name(self):
|
2023-11-24 09:46:51 +00:00
|
|
|
return type(self).__name__
|
|
|
|
|
2023-11-25 22:14:49 +00:00
|
|
|
def emit_event(self, event_queue):
|
2023-11-23 15:59:53 +00:00
|
|
|
pass
|
|
|
|
|
2023-11-25 17:21:41 +00:00
|
|
|
def log_message(self):
|
2023-11-28 19:34:33 +00:00
|
|
|
return f"Running {self.get_name()}"
|
2023-11-25 17:21:41 +00:00
|
|
|
|
|
|
|
def build_frame(self):
|
|
|
|
pass
|
2023-11-23 15:59:53 +00:00
|
|
|
|
2023-11-25 23:11:39 +00:00
|
|
|
def get_tx_mode(self):
|
2023-12-16 09:28:30 +00:00
|
|
|
return FREEDV_MODE.signalling
|
2023-11-25 23:11:39 +00:00
|
|
|
|
|
|
|
def make_modem_queue_item(self, mode, repeat, repeat_delay, frame):
|
2023-11-28 19:34:33 +00:00
|
|
|
return {
|
2023-12-04 10:34:31 +00:00
|
|
|
'mode': mode,
|
|
|
|
'repeat': repeat,
|
|
|
|
'repeat_delay': repeat_delay,
|
2023-11-28 19:34:33 +00:00
|
|
|
'frame': frame,
|
2023-11-25 22:39:35 +00:00
|
|
|
}
|
2023-11-25 23:11:39 +00:00
|
|
|
|
2023-12-15 23:51:57 +00:00
|
|
|
def transmit(self, modem):
|
2023-11-25 23:11:39 +00:00
|
|
|
frame = self.build_frame()
|
2023-12-15 23:51:57 +00:00
|
|
|
modem.transmit(self.get_tx_mode(), 1, 0, frame)
|
2023-11-23 15:59:53 +00:00
|
|
|
|
2023-12-15 23:51:57 +00:00
|
|
|
def run(self, event_queue: queue.Queue, modem):
|
2023-11-25 22:14:49 +00:00
|
|
|
self.emit_event(event_queue)
|
2023-11-26 12:11:45 +00:00
|
|
|
self.logger.info(self.log_message())
|
2023-12-15 23:51:57 +00:00
|
|
|
self.transmit(modem)
|
2023-12-16 11:54:16 +00:00
|
|
|
|
|
|
|
def test(self, event_queue: queue.Queue):
|
|
|
|
self.emit_event(event_queue)
|
|
|
|
self.logger.info(self.log_message())
|
|
|
|
frame = self.build_frame()
|
|
|
|
return frame
|