[RF69] Extracted common packet mode code
This commit is contained in:
parent
bd2161cc47
commit
57fab02e20
2 changed files with 29 additions and 47 deletions
|
@ -9,7 +9,7 @@ RF69::RF69(Module* module) : PhysicalLayer(RF69_CRYSTAL_FREQ, RF69_DIV_EXPONENT,
|
||||||
|
|
||||||
_promiscuous = false;
|
_promiscuous = false;
|
||||||
|
|
||||||
_syncWordLength = RF69_DEFAULT_SYNC_WORD_LENGTH;
|
_syncWordLength = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t power) {
|
int16_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t power) {
|
||||||
|
@ -92,7 +92,7 @@ int16_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t powe
|
||||||
}
|
}
|
||||||
|
|
||||||
// default sync word values 0x2D01 is the same as the default in LowPowerLab RFM69 library
|
// default sync word values 0x2D01 is the same as the default in LowPowerLab RFM69 library
|
||||||
uint8_t syncWord[] = RF69_DEFAULT_SYNC_WORD;
|
uint8_t syncWord[] = {0x2D, 0x01};
|
||||||
state = setSyncWord(syncWord, sizeof(syncWord));
|
state = setSyncWord(syncWord, sizeof(syncWord));
|
||||||
if(state != ERR_NONE) {
|
if(state != ERR_NONE) {
|
||||||
return(state);
|
return(state);
|
||||||
|
@ -506,7 +506,7 @@ int16_t RF69::setOutputPower(int8_t power) {
|
||||||
|
|
||||||
int16_t RF69::setSyncWord(uint8_t* syncWord, size_t len, uint8_t maxErrBits) {
|
int16_t RF69::setSyncWord(uint8_t* syncWord, size_t len, uint8_t maxErrBits) {
|
||||||
// check constraints
|
// check constraints
|
||||||
if((maxErrBits > 7) || (len > RF69_MAX_SYNC_WORD_LENGTH)) {
|
if((maxErrBits > 7) || (len > 8)) {
|
||||||
return(ERR_INVALID_SYNC_WORD);
|
return(ERR_INVALID_SYNC_WORD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -603,49 +603,11 @@ size_t RF69::getPacketLength(bool update) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t RF69::fixedPacketLengthMode(uint8_t len) {
|
int16_t RF69::fixedPacketLengthMode(uint8_t len) {
|
||||||
if (len > RF69_MAX_PACKET_LENGTH) {
|
return(setPacketMode(RF69_PACKET_FORMAT_FIXED, len));
|
||||||
return(ERR_PACKET_TOO_LONG);
|
|
||||||
}
|
|
||||||
|
|
||||||
// set to fixed packet length
|
|
||||||
int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_PACKET_FORMAT_FIXED, 7, 7);
|
|
||||||
if (state != ERR_NONE) {
|
|
||||||
return(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
// set length to register
|
|
||||||
state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, len);
|
|
||||||
if (state != ERR_NONE) {
|
|
||||||
return(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
// all went well: cache the reg value
|
|
||||||
_packetLengthConfig = RF69_PACKET_FORMAT_FIXED;
|
|
||||||
|
|
||||||
return(state);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t RF69::variablePacketLengthMode(uint8_t maxLen) {
|
int16_t RF69::variablePacketLengthMode(uint8_t maxLen) {
|
||||||
if (maxLen > RF69_MAX_PACKET_LENGTH) {
|
return(setPacketMode(RF69_PACKET_FORMAT_VARIABLE, maxLen));
|
||||||
return(ERR_PACKET_TOO_LONG);
|
|
||||||
}
|
|
||||||
|
|
||||||
// set to variable packet length
|
|
||||||
int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_PACKET_FORMAT_VARIABLE, 7, 7);
|
|
||||||
if (state != ERR_NONE) {
|
|
||||||
return(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
// set max length to register
|
|
||||||
state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, maxLen);
|
|
||||||
if (state != ERR_NONE) {
|
|
||||||
return(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
// all went well: cache the reg value
|
|
||||||
_packetLengthConfig = RF69_PACKET_FORMAT_VARIABLE;
|
|
||||||
|
|
||||||
return(state);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t RF69::enableSyncWordFiltering(uint8_t maxErrBits) {
|
int16_t RF69::enableSyncWordFiltering(uint8_t maxErrBits) {
|
||||||
|
@ -792,6 +754,29 @@ int16_t RF69::config() {
|
||||||
return(ERR_NONE);
|
return(ERR_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int16_t RF69::setPacketMode(uint8_t mode, uint8_t len) {
|
||||||
|
// check length
|
||||||
|
if (len > RF69_MAX_PACKET_LENGTH) {
|
||||||
|
return(ERR_PACKET_TOO_LONG);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set to fixed packet length
|
||||||
|
int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, mode, 7, 7);
|
||||||
|
if (state != ERR_NONE) {
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set length to register
|
||||||
|
state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, len);
|
||||||
|
if (state != ERR_NONE) {
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// update the cached value
|
||||||
|
_packetLengthConfig = mode;
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
int16_t RF69::setMode(uint8_t mode) {
|
int16_t RF69::setMode(uint8_t mode) {
|
||||||
return(_mod->SPIsetRegValue(RF69_REG_OP_MODE, mode, 4, 2));
|
return(_mod->SPIsetRegValue(RF69_REG_OP_MODE, mode, 4, 2));
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,6 @@
|
||||||
#define RF69_CRYSTAL_FREQ 32.0
|
#define RF69_CRYSTAL_FREQ 32.0
|
||||||
#define RF69_DIV_EXPONENT 19
|
#define RF69_DIV_EXPONENT 19
|
||||||
#define RF69_MAX_PACKET_LENGTH 64
|
#define RF69_MAX_PACKET_LENGTH 64
|
||||||
#define RF69_MAX_PREAMBLE_LENGTH 4
|
|
||||||
#define RF69_MAX_SYNC_WORD_LENGTH 8
|
|
||||||
#define RF69_DEFAULT_SYNC_WORD_LENGTH 2
|
|
||||||
#define RF69_DEFAULT_SYNC_WORD { 0x2D, 0x01 }
|
|
||||||
|
|
||||||
// RF69 register map
|
// RF69 register map
|
||||||
#define RF69_REG_FIFO 0x00
|
#define RF69_REG_FIFO 0x00
|
||||||
|
@ -781,6 +777,7 @@ class RF69: public PhysicalLayer {
|
||||||
|
|
||||||
int16_t config();
|
int16_t config();
|
||||||
int16_t directMode();
|
int16_t directMode();
|
||||||
|
int16_t setPacketMode(uint8_t mode, uint8_t len);
|
||||||
|
|
||||||
#ifndef RADIOLIB_GODMODE
|
#ifndef RADIOLIB_GODMODE
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Add table
Reference in a new issue