RadioLibSmol/src/protocols/AFSK/AFSK.h

74 lines
1.7 KiB
C++

#if !defined(_RADIOLIB_AFSK_H)
#define _RADIOLIB_AFSK_H
#include "../../TypeDef.h"
#if !defined(RADIOLIB_EXCLUDE_AFSK)
#include "../../Module.h"
#include "../PhysicalLayer/PhysicalLayer.h"
/*!
\class AFSKClient
\brief Client for audio-based transmissions. Requires Arduino tone() function, and a module capable of direct mode transmission using DIO pins.
*/
class AFSKClient {
public:
/*!
\brief Default contructor.
\param phy Pointer to the wireless module providing PhysicalLayer communication.
\param pin The pin that will be used for audio output.
*/
AFSKClient(PhysicalLayer* phy, RADIOLIB_PIN_TYPE pin);
/*!
\brief Initialization method.
\returns \ref status_codes
*/
int16_t begin();
/*!
\brief Start transmitting audio tone.
\param freq Frequency of the tone in Hz.
\param autoStart Whether to automatically enter transmission mode. Defaults to true.
\returns \ref status_codes
*/
int16_t tone(uint16_t freq, bool autoStart = true);
/*!
\brief Stops transmitting audio tone.
\param freq Keep transmitter on - this may limit noise when switching transmitter on or off.
\returns \ref status_codes
*/
int16_t noTone(bool keepOn = false);
int16_t emulateTone(float baseFreq, uint8_t* bits, size_t len);
#if !defined(RADIOLIB_GODMODE)
private:
#endif
PhysicalLayer* _phy;
RADIOLIB_PIN_TYPE _pin;
// allow specific classes access the private PhysicalLayer pointer
friend class RTTYClient;
friend class MorseClient;
friend class HellClient;
friend class SSTVClient;
friend class AX25Client;
friend class FSK4Client;
};
#endif
#endif