OpenRTX/openrtx/include/rtx/rtx.h

155 wiersze
5.4 KiB
C

/***************************************************************************
* Copyright (C) 2020 - 2023 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 <http://www.gnu.org/licenses/> *
***************************************************************************/
#ifndef RTX_H
#define RTX_H
#include <datatypes.h>
#include <stdint.h>
#include <cps.h>
#include <pthread.h>
#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_20 = 1, /**< 20kHz bandwidth */
BW_25 = 2 /**< 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.
*/
float 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 */