Merge pull request #55 from rfquack/master

Using defined debug port and not Serial + CC1101 length mode config options
This commit is contained in:
Jan Gromeš 2019-11-08 16:29:04 +01:00 committed by GitHub
commit e8702a4953
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 122 additions and 38 deletions

View file

@ -88,6 +88,8 @@ setDataShaping KEYWORD2
setOOK KEYWORD2 setOOK KEYWORD2
setDataShapingOOK KEYWORD2 setDataShapingOOK KEYWORD2
setCRC KEYWORD2 setCRC KEYWORD2
variablePacketLengthMode KEYWORD2
fixedPacketLengthMode KEYWORD2
# RF69-specific # RF69-specific
setAESKey KEYWORD2 setAESKey KEYWORD2

View file

@ -3,6 +3,7 @@
CC1101::CC1101(Module* module) : PhysicalLayer(CC1101_CRYSTAL_FREQ, CC1101_DIV_EXPONENT, CC1101_MAX_PACKET_LENGTH) { CC1101::CC1101(Module* module) : PhysicalLayer(CC1101_CRYSTAL_FREQ, CC1101_DIV_EXPONENT, CC1101_MAX_PACKET_LENGTH) {
_mod = module; _mod = module;
_packetLengthQueried = false; _packetLengthQueried = false;
_packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE;
} }
int16_t CC1101::begin(float freq, float br, float rxBw, float freqDev, int8_t power) { int16_t CC1101::begin(float freq, float br, float rxBw, float freqDev, int8_t power) {
@ -20,15 +21,15 @@ int16_t CC1101::begin(float freq, float br, float rxBw, float freqDev, int8_t po
flagFound = true; flagFound = true;
} else { } else {
#ifdef RADIOLIB_DEBUG #ifdef RADIOLIB_DEBUG
Serial.print(F("CC1101 not found! (")); RADIOLIB_DEBUG_PRINT(F("CC1101 not found! ("));
Serial.print(i + 1); RADIOLIB_DEBUG_PRINT(i + 1);
Serial.print(F(" of 10 tries) CC1101_REG_VERSION == ")); RADIOLIB_DEBUG_PRINT(F(" of 10 tries) CC1101_REG_VERSION == "));
char buffHex[7]; char buffHex[7];
sprintf(buffHex, "0x%04X", version); sprintf(buffHex, "0x%04X", version);
Serial.print(buffHex); RADIOLIB_DEBUG_PRINT(buffHex);
Serial.print(F(", expected 0x0014")); RADIOLIB_DEBUG_PRINT(F(", expected 0x0014"));
Serial.println(); RADIOLIB_DEBUG_PRINTLN();
#endif #endif
delay(1000); delay(1000);
i++; i++;
@ -55,26 +56,36 @@ int16_t CC1101::begin(float freq, float br, float rxBw, float freqDev, int8_t po
return(state); return(state);
} }
// configure bitrate
state = setBitRate(br); state = setBitRate(br);
if(state != ERR_NONE) { if(state != ERR_NONE) {
return(state); return(state);
} }
// configure default RX bandwidth
state = setRxBandwidth(rxBw); state = setRxBandwidth(rxBw);
if(state != ERR_NONE) { if(state != ERR_NONE) {
return(state); return(state);
} }
// configure default frequency deviation
state = setFrequencyDeviation(freqDev); state = setFrequencyDeviation(freqDev);
if(state != ERR_NONE) { if(state != ERR_NONE) {
return(state); return(state);
} }
// configure default TX output power
state = setOutputPower(power); state = setOutputPower(power);
if(state != ERR_NONE) { if(state != ERR_NONE) {
return(state); return(state);
} }
// set default packet length mode
state = variablePacketLengthMode();
if (state != ERR_NONE) {
return(state);
}
// flush FIFOs // flush FIFOs
SPIsendCommand(CC1101_CMD_FLUSH_RX); SPIsendCommand(CC1101_CMD_FLUSH_RX);
SPIsendCommand(CC1101_CMD_FLUSH_TX); SPIsendCommand(CC1101_CMD_FLUSH_TX);
@ -162,7 +173,7 @@ int16_t CC1101::receiveDirect() {
int16_t CC1101::packetMode() { int16_t CC1101::packetMode() {
int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL1, CC1101_CRC_AUTOFLUSH_OFF | CC1101_APPEND_STATUS_ON | CC1101_ADR_CHK_NONE, 3, 0); int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL1, CC1101_CRC_AUTOFLUSH_OFF | CC1101_APPEND_STATUS_ON | CC1101_ADR_CHK_NONE, 3, 0);
state |= SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_WHITE_DATA_OFF | CC1101_PKT_FORMAT_NORMAL, 6, 4); state |= SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_WHITE_DATA_OFF | CC1101_PKT_FORMAT_NORMAL, 6, 4);
state |= SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_CRC_ON | CC1101_LENGTH_CONFIG_VARIABLE, 2, 0); state |= SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_CRC_ON | _packetLengthConfig, 2, 0);
return(state); return(state);
} }
@ -192,8 +203,10 @@ int16_t CC1101::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
return(state); return(state);
} }
// write packet length // optionally write packet length
SPIwriteRegister(CC1101_REG_FIFO, len); if (_packetLengthConfig == CC1101_LENGTH_CONFIG_VARIABLE) {
SPIwriteRegister(CC1101_REG_FIFO, len);
}
// check address filtering // check address filtering
uint8_t filter = SPIgetRegValue(CC1101_REG_PKTCTRL1, 1, 0); uint8_t filter = SPIgetRegValue(CC1101_REG_PKTCTRL1, 1, 0);
@ -477,13 +490,63 @@ uint8_t CC1101::getLQI() {
size_t CC1101::getPacketLength(bool update) { size_t CC1101::getPacketLength(bool update) {
if(!_packetLengthQueried && update) { if(!_packetLengthQueried && update) {
_packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO); if (_packetLengthConfig == CC1101_LENGTH_CONFIG_VARIABLE) {
_packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO);
} else {
_packetLength = _mod->SPIreadRegister(CC1101_REG_PKTLEN);
}
_packetLengthQueried = true; _packetLengthQueried = true;
} }
return(_packetLength); return(_packetLength);
} }
int16_t CC1101::fixedPacketLengthMode(uint8_t len) {
if (len > CC1101_MAX_PACKET_LENGTH) {
return(ERR_PACKET_TOO_LONG);
}
// set to fixed packet length
int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_FIXED, 1, 0);
if (state != ERR_NONE) {
return(state);
}
// set length to register
state = SPIsetRegValue(CC1101_REG_PKTLEN, len);
if (state != ERR_NONE) {
return(state);
}
// all went well: cache the reg value
_packetLengthConfig = CC1101_LENGTH_CONFIG_FIXED;
return(state);
}
int16_t CC1101::variablePacketLengthMode(uint8_t maxLen) {
if (maxLen > CC1101_MAX_PACKET_LENGTH) {
return(ERR_PACKET_TOO_LONG);
}
// set to fixed packet length
int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_VARIABLE, 1, 0);
if (state != ERR_NONE) {
return(state);
}
// set max length to register
state = SPIsetRegValue(CC1101_REG_PKTLEN, maxLen);
if (state != ERR_NONE) {
return(state);
}
// all went well: cache the reg value
_packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE;
return(state);
}
int16_t CC1101::config() { int16_t CC1101::config() {
// enable automatic frequency synthesizer calibration // enable automatic frequency synthesizer calibration
int16_t state = SPIsetRegValue(CC1101_REG_MCSM0, CC1101_FS_AUTOCAL_IDLE_TO_RXTX, 5, 4); int16_t state = SPIsetRegValue(CC1101_REG_MCSM0, CC1101_FS_AUTOCAL_IDLE_TO_RXTX, 5, 4);

View file

@ -739,6 +739,24 @@ class CC1101: public PhysicalLayer {
*/ */
size_t getPacketLength(bool update = true); size_t getPacketLength(bool update = true);
/*!
\brief Set modem in fixed packet length mode.
\param len Packet length.
\returns \ref status_codes
*/
int16_t fixedPacketLengthMode(uint8_t len = CC1101_MAX_PACKET_LENGTH);
/*!
\brief Set modem in variable packet length mode.
\param len Maximum packet length.
\returns \ref status_codes
*/
int16_t variablePacketLengthMode(uint8_t maxLen = CC1101_MAX_PACKET_LENGTH);
private: private:
Module* _mod; Module* _mod;
@ -748,6 +766,7 @@ class CC1101: public PhysicalLayer {
size_t _packetLength; size_t _packetLength;
bool _packetLengthQueried; bool _packetLengthQueried;
uint8_t _packetLengthConfig;
int16_t config(); int16_t config();
int16_t directMode(); int16_t directMode();

View file

@ -19,15 +19,15 @@ int16_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t powe
flagFound = true; flagFound = true;
} else { } else {
#ifdef RADIOLIB_DEBUG #ifdef RADIOLIB_DEBUG
Serial.print(F("RF69 not found! (")); RADIOLIB_DEBUG_PRINT(F("RF69 not found! ("));
Serial.print(i + 1); RADIOLIB_DEBUG_PRINT(i + 1);
Serial.print(F(" of 10 tries) RF69_REG_VERSION == ")); RADIOLIB_DEBUG_PRINT(F(" of 10 tries) RF69_REG_VERSION == "));
char buffHex[7]; char buffHex[7];
sprintf(buffHex, "0x%04X", version); sprintf(buffHex, "0x%04X", version);
Serial.print(buffHex); RADIOLIB_DEBUG_PRINT(buffHex);
Serial.print(F(", expected 0x0024")); RADIOLIB_DEBUG_PRINT(F(", expected 0x0024"));
Serial.println(); RADIOLIB_DEBUG_PRINTLN();
#endif #endif
delay(1000); delay(1000);
i++; i++;

View file

@ -18,15 +18,15 @@ int16_t SX1231::begin(float freq, float br, float rxBw, float freqDev, int8_t po
_chipRevision = version; _chipRevision = version;
} else { } else {
#ifdef RADIOLIB_DEBUG #ifdef RADIOLIB_DEBUG
Serial.print(F("SX127x not found! (")); RADIOLIB_DEBUG_PRINT(F("SX127x not found! ("));
Serial.print(i + 1); RADIOLIB_DEBUG_PRINT(i + 1);
Serial.print(F(" of 10 tries) SX127X_REG_VERSION == ")); RADIOLIB_DEBUG_PRINT(F(" of 10 tries) SX127X_REG_VERSION == "));
char buffHex[7]; char buffHex[7];
sprintf(buffHex, "0x%04X", version); sprintf(buffHex, "0x%04X", version);
Serial.print(buffHex); RADIOLIB_DEBUG_PRINT(buffHex);
Serial.print(F(", expected 0x0021 / 0x0022 / 0x0023")); RADIOLIB_DEBUG_PRINT(F(", expected 0x0021 / 0x0022 / 0x0023"));
Serial.println(); RADIOLIB_DEBUG_PRINTLN();
#endif #endif
delay(1000); delay(1000);
i++; i++;

View file

@ -955,16 +955,16 @@ bool SX127x::findChip(uint8_t ver) {
flagFound = true; flagFound = true;
} else { } else {
#ifdef RADIOLIB_DEBUG #ifdef RADIOLIB_DEBUG
Serial.print(F("SX127x not found! (")); RADIOLIB_DEBUG_PRINT(F("SX127x not found! ("));
Serial.print(i + 1); RADIOLIB_DEBUG_PRINT(i + 1);
Serial.print(F(" of 10 tries) SX127X_REG_VERSION == ")); RADIOLIB_DEBUG_PRINT(F(" of 10 tries) SX127X_REG_VERSION == "));
char buffHex[5]; char buffHex[5];
sprintf(buffHex, "0x%02X", version); sprintf(buffHex, "0x%02X", version);
Serial.print(buffHex); RADIOLIB_DEBUG_PRINT(buffHex);
Serial.print(F(", expected 0x00")); RADIOLIB_DEBUG_PRINT(F(", expected 0x00"));
Serial.print(ver, HEX); RADIOLIB_DEBUG_PRINT(ver, HEX);
Serial.println(); RADIOLIB_DEBUG_PRINTLN();
#endif #endif
delay(1000); delay(1000);
i++; i++;
@ -1013,23 +1013,23 @@ void SX127x::clearFIFO(size_t count) {
#ifdef RADIOLIB_DEBUG #ifdef RADIOLIB_DEBUG
void SX127x::regDump() { void SX127x::regDump() {
Serial.println(); RADIOLIB_DEBUG_PRINTLN();
Serial.println(F("ADDR\tVALUE")); RADIOLIB_DEBUG_PRINTLN(F("ADDR\tVALUE"));
for(uint16_t addr = 0x01; addr <= 0x70; addr++) { for(uint16_t addr = 0x01; addr <= 0x70; addr++) {
if(addr <= 0x0F) { if(addr <= 0x0F) {
Serial.print(F("0x0")); RADIOLIB_DEBUG_PRINT(F("0x0"));
} else { } else {
Serial.print(F("0x")); RADIOLIB_DEBUG_PRINT(F("0x"));
} }
Serial.print(addr, HEX); RADIOLIB_DEBUG_PRINT(addr, HEX);
Serial.print('\t'); RADIOLIB_DEBUG_PRINT('\t');
uint8_t val = _mod->SPIreadRegister(addr); uint8_t val = _mod->SPIreadRegister(addr);
if(val <= 0x0F) { if(val <= 0x0F) {
Serial.print(F("0x0")); RADIOLIB_DEBUG_PRINT(F("0x0"));
} else { } else {
Serial.print(F("0x")); RADIOLIB_DEBUG_PRINT(F("0x"));
} }
Serial.println(val, HEX); RADIOLIB_DEBUG_PRINTLN(val, HEX);
delay(50); delay(50);
} }