[RF69] Added data shaping and encoding methods
This commit is contained in:
parent
2a1b25ff61
commit
c06d292bd2
2 changed files with 69 additions and 0 deletions
|
@ -87,6 +87,14 @@ int16_t RF69::begin(float freq, float br, float freqDev, float rxBw, int8_t powe
|
||||||
state = setSyncWord(syncWord, sizeof(syncWord));
|
state = setSyncWord(syncWord, sizeof(syncWord));
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
|
// set default data shaping
|
||||||
|
state = setDataShaping(0);
|
||||||
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
|
// set default encoding
|
||||||
|
state = setEncoding(0);
|
||||||
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
return(ERR_NONE);
|
return(ERR_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,6 +124,9 @@ int16_t RF69::transmit(uint8_t* data, size_t len, uint8_t addr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set mode to standby
|
||||||
|
standby();
|
||||||
|
|
||||||
// clear interrupt flags
|
// clear interrupt flags
|
||||||
clearIRQFlags();
|
clearIRQFlags();
|
||||||
|
|
||||||
|
@ -656,6 +667,45 @@ int16_t RF69::setPromiscuousMode(bool promiscuous) {
|
||||||
return(state);
|
return(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int16_t RF69::setDataShaping(float sh) {
|
||||||
|
// set mode to standby
|
||||||
|
int16_t state = standby();
|
||||||
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
|
// set data shaping
|
||||||
|
sh *= 10.0;
|
||||||
|
if(abs(sh - 0.0) <= 0.001) {
|
||||||
|
state = _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_NO_SHAPING, 1, 0);
|
||||||
|
} else if(abs(sh - 3.0) <= 0.001) {
|
||||||
|
state = _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_FSK_GAUSSIAN_0_3, 1, 0);
|
||||||
|
} else if(abs(sh - 5.0) <= 0.001) {
|
||||||
|
state = _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_FSK_GAUSSIAN_0_5, 1, 0);
|
||||||
|
} else if(abs(sh - 10.0) <= 0.001) {
|
||||||
|
state = _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_FSK_GAUSSIAN_1_0, 1, 0);
|
||||||
|
} else {
|
||||||
|
return(ERR_INVALID_DATA_SHAPING);
|
||||||
|
}
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
int16_t RF69::setEncoding(uint8_t encoding) {
|
||||||
|
// set mode to standby
|
||||||
|
int16_t state = standby();
|
||||||
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
|
// set encoding
|
||||||
|
switch(encoding) {
|
||||||
|
case 0:
|
||||||
|
return(_mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_DC_FREE_NONE, 6, 5));
|
||||||
|
case 1:
|
||||||
|
return(_mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_DC_FREE_MANCHESTER, 6, 5));
|
||||||
|
case 2:
|
||||||
|
return(_mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_DC_FREE_WHITENING, 6, 5));
|
||||||
|
default:
|
||||||
|
return(ERR_INVALID_ENCODING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int16_t RF69::config() {
|
int16_t RF69::config() {
|
||||||
int16_t state = ERR_NONE;
|
int16_t state = ERR_NONE;
|
||||||
|
|
||||||
|
|
|
@ -772,6 +772,25 @@ class RF69: public PhysicalLayer {
|
||||||
*/
|
*/
|
||||||
int16_t setPromiscuousMode(bool promiscuous = true);
|
int16_t setPromiscuousMode(bool promiscuous = true);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Sets Gaussian filter bandwidth-time product that will be used for data shaping.
|
||||||
|
Allowed values are 0.3, 0.5 or 1.0. Set to 0 to disable data shaping.
|
||||||
|
|
||||||
|
\param sh Gaussian shaping bandwidth-time product that will be used for data shaping
|
||||||
|
|
||||||
|
\returns \ref status_codes
|
||||||
|
*/
|
||||||
|
int16_t setDataShaping(float sh);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Sets transmission encoding.
|
||||||
|
|
||||||
|
\param encoding Encoding to be used. Set to 0 for NRZ, 1 for Manchester and 2 for whitening.
|
||||||
|
|
||||||
|
\returns \ref status_codes
|
||||||
|
*/
|
||||||
|
int16_t setEncoding(uint8_t encoding);
|
||||||
|
|
||||||
#ifndef RADIOLIB_GODMODE
|
#ifndef RADIOLIB_GODMODE
|
||||||
protected:
|
protected:
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue