/*************************************************************************** * Copyright (C) 2021 - 2022 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 OPMODE_M17_H #define OPMODE_M17_H #include #include #include #include #include "OpMode.h" /** * Specialisation of the OpMode class for the management of M17 operating mode. */ class OpMode_M17 : public OpMode { public: /** * Constructor. */ OpMode_M17(); /** * Destructor. */ ~OpMode_M17(); /** * Enable the operating mode. * * Application must ensure this function is being called when entering the * new operating mode and always before the first call of "update". */ virtual void enable() override; /** * Disable the operating mode. This function stops the DMA transfers * between the baseband, microphone and speakers. It also ensures that * the radio, the audio amplifier and the microphone are in OFF state. * * Application must ensure this function is being called when exiting the * current operating mode. */ virtual void disable() override; /** * Update the internal FSM. * Application code has to call this function periodically, to ensure proper * functionality. * * @param status: pointer to the rtxStatus_t structure containing the current * RTX status. Internal FSM may change the current value of the opStatus flag. * @param newCfg: flag used inform the internal FSM that a new RTX configuration * has been applied. */ virtual void update(rtxStatus_t *const status, const bool newCfg) override; /** * Get the mode identifier corresponding to the OpMode class. * * @return the corresponding flag from the opmode enum. */ virtual opmode getID() override { return OPMODE_M17; } /** * Check if RX squelch is open. * * @return true if RX squelch is open. */ virtual bool rxSquelchOpen() override { return false; } private: /** * Send an M17 frame over the air. * * @param lastFrame: set to true to indicate that current frame is the last * frame of the currently active transmission. */ void sendData(const bool lastFrame = false); bool enterRx; ///< Flag for RX management. bool locked; ///< Demodulator locked on data stream. M17::M17Modulator modulator; ///< M17 modulator. M17::M17Demodulator demodulator; ///< M17 demodulator. M17::M17Transmitter m17Tx; ///< M17 transmission manager. M17::M17FrameDecoder decoder; ///< M17 frame decoder }; #endif /* OPMODE_M17_H */