/*************************************************************************** * Copyright (C) 2020 - 2025 by Federico Amedeo Izzo IU2NUO, * * Niccolò Izzo IU2KIN * * Frederik Saraci IU2NRO * * Silvano Seva IU2KWO * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see * ***************************************************************************/ #ifndef RTX_H #define RTX_H #include "core/datatypes.h" #include #include "core/cps.h" #include #ifdef __cplusplus extern "C" { #endif typedef struct { uint8_t opMode; /**< Operating mode (FM, DMR, ...) */ uint8_t bandwidth : 2, /**< Channel bandwidth */ txDisable : 1, /**< Disable TX operation */ scan : 1, /**< Scan enabled */ opStatus : 2, /**< Operating status (OFF, ...) */ _padding : 2; /**< Padding to 8 bits */ freq_t rxFrequency; /**< RX frequency, in Hz */ freq_t txFrequency; /**< TX frequency, in Hz */ uint32_t txPower; /**< TX power, in mW */ uint8_t sqlLevel; /**< Squelch opening level */ uint16_t rxToneEn : 1, /**< RX CTC/DCS tone enable */ rxTone : 15; /**< RX CTC/DCS tone */ uint16_t txToneEn : 1, /**< TX CTC/DCS tone enable */ txTone : 15; /**< TX CTC/DCS tone */ bool toneEn; uint8_t can : 4, /**< M17 Channel Access Number */ canRxEn : 1, /**< M17 Check CAN on RX */ _unused : 3; char source_address[10]; /**< M17 call source address */ char destination_address[10]; /**< M17 call routing address */ bool invertRxPhase; /**< M17 RX phase inversion */ bool lsfOk; /** M17 LSF is valid */ char M17_dst[10]; /** M17 LSF destination */ char M17_src[10]; /** M17 LSF source */ char M17_link[10]; /** M17 LSF traffic originator */ char M17_refl[10]; /** M17 LSF reflector module */ } rtxStatus_t; /** * \enum bandwidth Enumeration type defining the current rtx bandwidth. */ enum bandwidth { BW_12_5 = 0, /**< 12.5kHz bandwidth */ BW_25 = 1 /**< 25kHz bandwidth */ }; /** * \enum opmode Enumeration type defining the current rtx operating mode. */ enum opmode { OPMODE_NONE = 0, /**< No opMode selected */ OPMODE_FM = 1, /**< Analog FM */ OPMODE_DMR = 2, /**< DMR */ OPMODE_M17 = 3 /**< M17 */ }; /** * \enum opstatus Enumeration type defining the current rtx operating status. */ enum opstatus { OFF = 0, /**< OFF */ RX = 1, /**< Receiving */ TX = 2 /**< Transmitting */ }; /** * Initialise rtx stage. * @param m: pointer to the mutex protecting the shared configuration data * structure. */ void rtx_init(pthread_mutex_t *m); /** * Shut down rtx stage */ void rtx_terminate(); /** * Post a new RTX configuration on the internal message queue. Data structure * \b must be protected by the same mutex whose pointer has been passed as a * parameter to rtx_init(). This driver only copies its content into the internal * data structure, eventual garbage collection has to be performed by caller. * @param cfg: pointer to a structure containing the new RTX configuration. */ void rtx_configure(const rtxStatus_t *cfg); /** * Obtain a copy of the RTX driver's internal status data structure. * @return copy of the RTX driver's internal status data structure. */ rtxStatus_t rtx_getCurrentStatus(); /** * High-level code is in charge of calling this function periodically, since it * contains all the RTX management functionalities. */ void rtx_task(); /** * Get current RSSI in dBm. * @return RSSI value in dBm. */ rssi_t rtx_getRssi(); /** * Get current status of the RX squelch. This function is thread-safe and can * be called also from threads other than the one running the RTX task. * @return true if RX squelch is open. */ bool rtx_rxSquelchOpen(); #ifdef __cplusplus } #endif #endif /* RTX_H */