RadioLibSmol/src/protocols/AFSK/AFSK.h
2024-05-11 20:31:01 +01:00

70 lines
1.8 KiB
C++

#if !defined(_RADIOLIB_AFSK_H)
#define _RADIOLIB_AFSK_H
#include "../../TypeDef.h"
#if !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, uint32_t pin);
/*!
\brief Copy contructor.
\param aud Pointer to the AFSKClient instance to copy.
*/
explicit AFSKClient(AFSKClient* aud);
/*!
\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 keepOn Keep transmitter on - this may limit noise when switching transmitter on or off.
\returns \ref status_codes
*/
int16_t noTone(bool keepOn = false);
#if !RADIOLIB_GODMODE
private:
#endif
PhysicalLayer* phyLayer;
uint32_t outPin;
// 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;
friend class BellClient;
};
#endif
#endif