Merge pull request #71 from Guglio95/master

CC1101 Variable Preamble Length
This commit is contained in:
Jan Gromeš 2019-11-18 18:26:07 +01:00 committed by GitHub
commit 37d8b6014b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 2 deletions

View file

@ -8,7 +8,7 @@ CC1101::CC1101(Module* module) : PhysicalLayer(CC1101_CRYSTAL_FREQ, CC1101_DIV_E
_syncWordLength = CC1101_DEFAULT_SYNC_WORD_LENGTH; _syncWordLength = CC1101_DEFAULT_SYNC_WORD_LENGTH;
} }
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, uint8_t preambleLength) {
// set module properties // set module properties
_mod->SPIreadCommand = CC1101_CMD_READ; _mod->SPIreadCommand = CC1101_CMD_READ;
_mod->SPIwriteCommand = CC1101_CMD_WRITE; _mod->SPIwriteCommand = CC1101_CMD_WRITE;
@ -88,6 +88,12 @@ int16_t CC1101::begin(float freq, float br, float rxBw, float freqDev, int8_t po
return(state); return(state);
} }
// configure default preamble lenght
state = setPreambleLength(preambleLength);
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);
@ -474,6 +480,43 @@ int16_t CC1101::setSyncWord(uint8_t syncH, uint8_t syncL, uint8_t maxErrBits) {
return(setSyncWord(syncWord, sizeof(syncWord), maxErrBits)); return(setSyncWord(syncWord, sizeof(syncWord), maxErrBits));
} }
int16_t CC1101::setPreambleLength(uint8_t preambleLength) {
// check allowed values
uint8_t value;
switch(preambleLength){
case 2:
value = CC1101_NUM_PREAMBLE_2;
break;
case 3:
value = CC1101_NUM_PREAMBLE_3;
break;
case 4:
value = CC1101_NUM_PREAMBLE_4;
break;
case 6:
value = CC1101_NUM_PREAMBLE_6;
break;
case 8:
value = CC1101_NUM_PREAMBLE_8;
break;
case 12:
value = CC1101_NUM_PREAMBLE_12;
break;
case 16:
value = CC1101_NUM_PREAMBLE_16;
break;
case 24:
value = CC1101_NUM_PREAMBLE_24;
break;
default:
return(ERR_INVALID_PREAMBLE_LENGTH);
}
return SPIsetRegValue(CC1101_REG_MDMCFG1, value, 6, 4);
}
int16_t CC1101::setNodeAddress(uint8_t nodeAddr, uint8_t numBroadcastAddrs) { int16_t CC1101::setNodeAddress(uint8_t nodeAddr, uint8_t numBroadcastAddrs) {
if(!(numBroadcastAddrs > 0) && (numBroadcastAddrs <= 2)) { if(!(numBroadcastAddrs > 0) && (numBroadcastAddrs <= 2)) {
return(ERR_INVALID_NUM_BROAD_ADDRS); return(ERR_INVALID_NUM_BROAD_ADDRS);

View file

@ -533,9 +533,11 @@ class CC1101: public PhysicalLayer {
\param power Output power in dBm. Defaults to 0 dBm. \param power Output power in dBm. Defaults to 0 dBm.
\param preambleLength Preamble Length in bytes. Defaults to 4 bytes.
\returns \ref status_codes \returns \ref status_codes
*/ */
int16_t begin(float freq = 868.0, float br = 4.8, float rxBw = 325.0, float freqDev = 48.0, int8_t power = 0); int16_t begin(float freq = 868.0, float br = 4.8, float rxBw = 325.0, float freqDev = 48.0, int8_t power = 0, uint8_t preambleLength = 4);
/*! /*!
\brief Blocking binary transmit method. \brief Blocking binary transmit method.
@ -716,6 +718,15 @@ class CC1101: public PhysicalLayer {
*/ */
int16_t setSyncWord(uint8_t* syncWord, uint8_t len, uint8_t maxErrBits = 0); int16_t setSyncWord(uint8_t* syncWord, uint8_t len, uint8_t maxErrBits = 0);
/*!
\brief Sets preamble length.
\param preambleLength Preamble length to be set (in bytes), allowed values: 2, 3, 4, 6, 8, 12, 16, 24
\returns \ref status_codes
*/
int16_t setPreambleLength(uint8_t preambleLength);
/*! /*!
\brief Sets node and broadcast addresses. Calling this method will also enable address filtering. \brief Sets node and broadcast addresses. Calling this method will also enable address filtering.