|
|
@ -19,8 +19,8 @@ |
|
|
|
#define DTU_RADIO_ID ((uint64_t)0x1234567801ULL) |
|
|
|
#define DUMMY_RADIO_ID ((uint64_t)0xDEADBEEF01ULL) |
|
|
|
|
|
|
|
#define RX_CHANNELS 5 |
|
|
|
#define RX_LOOP_CNT 300 |
|
|
|
#define RF_CHANNELS 5 |
|
|
|
#define RF_LOOP_CNT 300 |
|
|
|
|
|
|
|
|
|
|
|
const char* const rf24AmpPower[] = {"MIN", "LOW", "HIGH", "MAX"}; |
|
|
@ -56,18 +56,18 @@ class HmRadio { |
|
|
|
public: |
|
|
|
HmRadio() : mNrf24(CE_PIN, CS_PIN, SPI_SPEED) { |
|
|
|
DPRINTLN(DBG_VERBOSE, F("hmRadio.h : HmRadio():mNrf24(CE_PIN: ") + String(CE_PIN) + F(", CS_PIN: ") + String(CS_PIN) + F(", SPI_SPEED: ") + String(SPI_SPEED) + ")"); |
|
|
|
mTxChLst[0] = 40; |
|
|
|
//mTxChIdx = 1;
|
|
|
|
|
|
|
|
// Depending on the program, the module can work on 2403, 2423, 2440, 2461 or 2475MHz.
|
|
|
|
// Channel List 2403, 2423, 2440, 2461, 2475MHz
|
|
|
|
mRxChLst[0] = 03; |
|
|
|
mRxChLst[1] = 23; |
|
|
|
mRxChLst[2] = 40; |
|
|
|
mRxChLst[3] = 61; |
|
|
|
mRxChLst[4] = 75; |
|
|
|
mRxChIdx = 0; |
|
|
|
mRxLoopCnt = RX_LOOP_CNT; |
|
|
|
mRfChLst[0] = 03; |
|
|
|
mRfChLst[1] = 23; |
|
|
|
mRfChLst[2] = 40; |
|
|
|
mRfChLst[3] = 61; |
|
|
|
mRfChLst[4] = 75; |
|
|
|
|
|
|
|
mTxChIdx = 2; // Start TX with 40
|
|
|
|
mRxChIdx = 0; // Start RX with 03
|
|
|
|
mRxLoopCnt = RF_LOOP_CNT; |
|
|
|
|
|
|
|
pinCs = CS_PIN; |
|
|
|
pinCe = CE_PIN; |
|
|
@ -109,7 +109,7 @@ class HmRadio { |
|
|
|
DPRINTLN(DBG_INFO, F("Radio Config:")); |
|
|
|
mNrf24.printPrettyDetails(); |
|
|
|
|
|
|
|
mTxCh = getDefaultChannel(); |
|
|
|
mTxCh = setDefaultChannels(); |
|
|
|
|
|
|
|
if(!mNrf24.isChipConnected()) { |
|
|
|
DPRINTLN(DBG_WARN, F("WARNING! your NRF24 module can't be reached, check the wiring")); |
|
|
@ -128,7 +128,7 @@ class HmRadio { |
|
|
|
while(mNrf24.available(&pipe)) { |
|
|
|
if(!mBufCtrl->full()) { |
|
|
|
p = mBufCtrl->getFront(); |
|
|
|
p->rxCh = mRxChLst[mRxChIdx]; |
|
|
|
p->rxCh = mRfChLst[mRxChIdx]; |
|
|
|
len = mNrf24.getPayloadSize(); |
|
|
|
if(len > MAX_RF_PAYLOAD_SIZE) |
|
|
|
len = MAX_RF_PAYLOAD_SIZE; |
|
|
@ -152,20 +152,13 @@ class HmRadio { |
|
|
|
mIrqRcvd = true; |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t getDefaultChannel(void) { |
|
|
|
//DPRINTLN(DBG_VERBOSE, F("hmRadio.h:getDefaultChannel"));
|
|
|
|
return mTxChLst[0]; |
|
|
|
} |
|
|
|
/*uint8_t getLastChannel(void) {
|
|
|
|
return mTxChLst[mTxChIdx]; |
|
|
|
uint8_t setDefaultChannels(void) { |
|
|
|
//DPRINTLN(DBG_VERBOSE, F("hmRadio.h:setDefaultChannels"));
|
|
|
|
mTxChIdx = 2; // Start TX with 40
|
|
|
|
mRxChIdx = 0; // Start RX with 03
|
|
|
|
return mRfChLst[mTxChIdx]; |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t getNxtChannel(void) { |
|
|
|
if(++mTxChIdx >= 4) |
|
|
|
mTxChIdx = 0; |
|
|
|
return mTxChLst[mTxChIdx]; |
|
|
|
}*/ |
|
|
|
|
|
|
|
void sendTimePacket(uint64_t invId, uint32_t ts) { |
|
|
|
//DPRINTLN(DBG_VERBOSE, F("hmRadio.h:sendTimePacket"));
|
|
|
|
sendCmdPacket(invId, 0x15, 0x80, false); |
|
|
@ -257,7 +250,7 @@ class HmRadio { |
|
|
|
//DPRINTLN(DBG_VERBOSE, "sent packet: #" + String(mSendCnt));
|
|
|
|
//dumpBuf("SEN ", buf, len);
|
|
|
|
if(mSerialDebug) { |
|
|
|
DPRINT(DBG_INFO, "Transmit " + String(len) + " | "); |
|
|
|
DPRINT(DBG_INFO, "TX " + String(len) + "B Ch" + String(mRfChLst[mTxChIdx]) + " | "); |
|
|
|
dumpBuf(NULL, buf, len); |
|
|
|
} |
|
|
|
|
|
|
@ -265,10 +258,10 @@ class HmRadio { |
|
|
|
mNrf24.stopListening(); |
|
|
|
|
|
|
|
if(clear) |
|
|
|
mRxLoopCnt = RX_LOOP_CNT; |
|
|
|
mRxLoopCnt = RF_LOOP_CNT; |
|
|
|
|
|
|
|
mTxCh = getDefaultChannel(); |
|
|
|
mNrf24.setChannel(mTxCh); |
|
|
|
mNrf24.setChannel(mRfChLst[mTxChIdx]); |
|
|
|
mTxCh = getTxNxtChannel(); // switch channel for next packet
|
|
|
|
mNrf24.openWritingPipe(invId); // TODO: deprecated
|
|
|
|
mNrf24.setCRCLength(RF24_CRC_16); |
|
|
|
mNrf24.enableDynamicPayloads(); |
|
|
@ -279,7 +272,7 @@ class HmRadio { |
|
|
|
// Try to avoid zero payload acks (has no effect)
|
|
|
|
mNrf24.openWritingPipe(DUMMY_RADIO_ID); // TODO: why dummy radio id?, deprecated
|
|
|
|
mRxChIdx = 0; |
|
|
|
mNrf24.setChannel(mRxChLst[mRxChIdx]); |
|
|
|
mNrf24.setChannel(mRfChLst[mRxChIdx]); |
|
|
|
mNrf24.setAutoAck(false); |
|
|
|
mNrf24.setRetries(0, 0); |
|
|
|
mNrf24.disableDynamicPayloads(); |
|
|
@ -290,19 +283,25 @@ class HmRadio { |
|
|
|
mSendCnt++; |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t getTxNxtChannel(void) { |
|
|
|
|
|
|
|
if(++mTxChIdx >= RF_CHANNELS) |
|
|
|
mTxChIdx = 0; |
|
|
|
return mRfChLst[mTxChIdx]; |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t getRxNxtChannel(void) { |
|
|
|
|
|
|
|
if(++mRxChIdx >= RX_CHANNELS) |
|
|
|
if(++mRxChIdx >= RF_CHANNELS) |
|
|
|
mRxChIdx = 0; |
|
|
|
return mRxChLst[mRxChIdx]; |
|
|
|
return mRfChLst[mRxChIdx]; |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t mTxCh; |
|
|
|
uint8_t mTxChLst[1]; |
|
|
|
//uint8_t mTxChIdx;
|
|
|
|
|
|
|
|
uint8_t mRxChLst[RX_CHANNELS]; |
|
|
|
uint8_t mTxChIdx; |
|
|
|
|
|
|
|
uint8_t mRfChLst[RF_CHANNELS]; |
|
|
|
|
|
|
|
uint8_t mRxChIdx; |
|
|
|
uint16_t mRxLoopCnt; |
|
|
|
|
|
|
|