Update CC1101.cpp

Updating _packetLengthConfig and _packetLength properly
This commit is contained in:
Federico Maggi 2019-11-07 17:02:32 +01:00
parent 7e42f77c95
commit 121110d9f4

View file

@ -480,11 +480,12 @@ uint8_t CC1101::getLQI() {
size_t CC1101::getPacketLength(bool update) { size_t CC1101::getPacketLength(bool update) {
if(!_packetLengthQueried && update) { if(!_packetLengthQueried && update) {
if (_packetLengthConfig == CC1101_LENGTH_CONFIG_VARIABLE) {
uint8_t format = SPIgetRegValue(CC1101_REG_PKTCTRL0, 1, 0); _packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO);
if (format == CC1101_LENGTH_CONFIG_VARIABLE) { } else {
_packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO); _packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO);
} }
_packetLengthQueried = true; _packetLengthQueried = true;
} }
@ -509,15 +510,22 @@ int16_t CC1101::fixedPacketLengthMode(uint8_t len) {
return(ERR_PACKET_TOO_LONG); return(ERR_PACKET_TOO_LONG);
} }
uint16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_FIXED, 1, 0); // set to fixed packet length
int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_FIXED, 1, 0);
if (state != ERR_NONE) { if (state != ERR_NONE) {
return(state); return(state);
} }
// set max length to register
state = SPIsetRegValue(CC1101_REG_PKTLEN, len); state = SPIsetRegValue(CC1101_REG_PKTLEN, len);
if (state != ERR_NONE) { if (state != ERR_NONE) {
return(state); return(state);
} }
// all went well: cache the reg value
_packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE;
return(state);
} }
int16_t CC1101::variablePacketLengthMode(uint8_t maxLen) { int16_t CC1101::variablePacketLengthMode(uint8_t maxLen) {
@ -525,15 +533,14 @@ int16_t CC1101::variablePacketLengthMode(uint8_t maxLen) {
return(ERR_PACKET_TOO_LONG); return(ERR_PACKET_TOO_LONG);
} }
uint16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_VARIABLE, 1, 0); int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_VARIABLE, 1, 0);
if (state != ERR_NONE) { if (state != ERR_NONE) {
return(state); return(state);
} }
_packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE;
state = SPIsetRegValue(CC1101_REG_PKTLEN, maxLen); state = SPIsetRegValue(CC1101_REG_PKTLEN, maxLen);
if (state != ERR_NONE) {
return(state); return(state);
}
} }
int16_t CC1101::directMode() { int16_t CC1101::directMode() {