RadioLibSmol/src/protocols/ExternalRadio/ExternalRadio.cpp

68 lines
No EOL
1.7 KiB
C++

#include "ExternalRadio.h"
#if defined(RADIOLIB_BUILD_ARDUINO)
ExternalRadio::ExternalRadio(uint32_t pin) : PhysicalLayer(1, 0) {
mod = new Module(RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC, pin);
mod->hal->pinMode(pin, mod->hal->GpioModeOutput);
this->prevFrf = 0;
}
#endif
ExternalRadio::ExternalRadio(RadioLibHal *hal, uint32_t pin) : PhysicalLayer(1, 0) {
mod = new Module(hal, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC, pin);
mod->hal->pinMode(pin, mod->hal->GpioModeOutput);
this->prevFrf = 0;
}
ExternalRadio::ExternalRadio(const ExternalRadio& ext) : PhysicalLayer(1, 0) {
this->prevFrf = ext.prevFrf;
if(ext.mod) {
this->mod = new Module(ext.mod->hal, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC, ext.mod->getGpio());
}
}
ExternalRadio& ExternalRadio::operator=(const ExternalRadio& ext) {
this->prevFrf = ext.prevFrf;
if(ext.mod) {
this->mod = new Module(ext.mod->hal, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC, ext.mod->getGpio());
}
return(*this);
}
ExternalRadio::~ExternalRadio() {
if(this->mod) {
delete this->mod;
}
}
Module* ExternalRadio::getMod() {
return(mod);
}
int16_t ExternalRadio::setFrequencyDeviation(float freqDev) {
(void)freqDev;
return(RADIOLIB_ERR_NONE);
}
int16_t ExternalRadio::setDataShaping(uint8_t sh) {
(void)sh;
return(RADIOLIB_ERR_NONE);
}
int16_t ExternalRadio::setEncoding(uint8_t encoding) {
(void)encoding;
return(RADIOLIB_ERR_NONE);
}
int16_t ExternalRadio::transmitDirect(uint32_t frf) {
if(frf != this->prevFrf) {
uint32_t val = this->mod->hal->GpioLevelLow;
if(frf > this->prevFrf) {
val = this->mod->hal->GpioLevelHigh;
}
this->prevFrf = frf;
this->mod->hal->digitalWrite(this->mod->getGpio(), val);
}
return(RADIOLIB_ERR_NONE);
}