|  | @ -14,7 +14,8 @@ | 
			
		
	
		
		
			
				
					|  |  | #define DUMMY_RADIO_ID          ((uint64_t)0xDEADBEEF01ULL) |  |  | #define DUMMY_RADIO_ID          ((uint64_t)0xDEADBEEF01ULL) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | #define RX_CHANNELS             5 |  |  | #define RX_CHANNELS             5 | 
			
		
	
		
		
			
				
					
					|  |  | #define RX_LOOP_CNT             400 |  |  | #define RX_LOOP_CNT             600 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | const char* const rf24AmpPower[] = {"MIN", "LOW", "HIGH", "MAX"}; |  |  | const char* const rf24AmpPower[] = {"MIN", "LOW", "HIGH", "MAX"}; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  | @ -70,6 +71,7 @@ class HmRadio { | 
			
		
	
		
		
			
				
					|  |  |             mSendCnt       = 0; |  |  |             mSendCnt       = 0; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             mSerialDebug = false; |  |  |             mSerialDebug = false; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             mIrqRcvd     = false; | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					|  |  |         ~HmRadio() {} |  |  |         ~HmRadio() {} | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  | @ -107,32 +109,40 @@ class HmRadio { | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |         void handleIntr(void) { |  |  |         void loop(void) { | 
			
				
				
			
		
	
		
		
			
				
					|  |  |             DPRINTLN(F("hmRadio.h:handleIntr")); |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             uint8_t pipe, len; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             packet_t *p; |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					|  |  |             DISABLE_IRQ; |  |  |             DISABLE_IRQ; | 
			
		
	
		
		
			
				
					
					|  |  |             while(mNrf24.available(&pipe)) { |  |  |             if(mIrqRcvd) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 if(!mBufCtrl->full()) { |  |  |                 mIrqRcvd = false; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     p = mBufCtrl->getFront(); |  |  |                 bool tx_ok, tx_fail, rx_ready; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     memset(p->packet, 0xcc, MAX_RF_PAYLOAD_SIZE); |  |  |                 mNrf24.whatHappened(tx_ok, tx_fail, rx_ready); // resets the IRQ pin to HIGH
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     p->rxCh = mRxChLst[mRxChIdx]; |  |  |                 RESTORE_IRQ; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     len = mNrf24.getPayloadSize(); |  |  |                 uint8_t pipe, len; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     if(len > MAX_RF_PAYLOAD_SIZE) |  |  |                 packet_t *p; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                         len = MAX_RF_PAYLOAD_SIZE; |  |  |                 while(mNrf24.available(&pipe)) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  | 
 |  |  |                     if(!mBufCtrl->full()) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     mNrf24.read(p->packet, len); |  |  |                         p = mBufCtrl->getFront(); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     mBufCtrl->pushFront(p); |  |  |                         p->rxCh = mRxChLst[mRxChIdx]; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 } |  |  |                         len = mNrf24.getPayloadSize(); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 else { |  |  |                         if(len > MAX_RF_PAYLOAD_SIZE) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     bool tx_ok, tx_fail, rx_ready; |  |  |                             len = MAX_RF_PAYLOAD_SIZE; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     mNrf24.whatHappened(tx_ok, tx_fail, rx_ready); // reset interrupt status
 |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     mNrf24.flush_rx(); // drop the packet
 |  |  |                         mNrf24.read(p->packet, len); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     break; |  |  |                         mBufCtrl->pushFront(p); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     else { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         mNrf24.flush_rx(); // drop the packet
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         break; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     yield(); | 
			
		
	
		
		
			
				
					|  |  |                 } |  |  |                 } | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |             RESTORE_IRQ; |  |  |             else | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |                 RESTORE_IRQ; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         void handleIntr(void) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             DPRINTLN(F("hmRadio.h:handleIntr")); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             mIrqRcvd = true; | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         uint8_t getDefaultChannel(void) { |  |  |         uint8_t getDefaultChannel(void) { | 
			
		
	
	
		
		
			
				
					|  | @ -196,6 +206,7 @@ class HmRadio { | 
			
		
	
		
		
			
				
					|  |  |         bool switchRxCh(uint8_t addLoop = 0) { |  |  |         bool switchRxCh(uint8_t addLoop = 0) { | 
			
		
	
		
		
			
				
					|  |  |             //DPRINTLN(F("hmRadio.h:switchRxCh"));
 |  |  |             //DPRINTLN(F("hmRadio.h:switchRxCh"));
 | 
			
		
	
		
		
			
				
					|  |  |             //DPRINT(F("R"));
 |  |  |             //DPRINT(F("R"));
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             mRxLoopCnt += addLoop; |  |  |             mRxLoopCnt += addLoop; | 
			
		
	
		
		
			
				
					|  |  |             if(mRxLoopCnt != 0) { |  |  |             if(mRxLoopCnt != 0) { | 
			
		
	
		
		
			
				
					|  |  |                 mRxLoopCnt--; |  |  |                 mRxLoopCnt--; | 
			
		
	
	
		
		
			
				
					|  | @ -278,6 +289,7 @@ class HmRadio { | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         uint8_t getRxNxtChannel(void) { |  |  |         uint8_t getRxNxtChannel(void) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             if(++mRxChIdx >= RX_CHANNELS) |  |  |             if(++mRxChIdx >= RX_CHANNELS) | 
			
		
	
		
		
			
				
					|  |  |                 mRxChIdx = 0; |  |  |                 mRxChIdx = 0; | 
			
		
	
		
		
			
				
					|  |  |             return mRxChLst[mRxChIdx]; |  |  |             return mRxChLst[mRxChIdx]; | 
			
		
	
	
		
		
			
				
					|  | @ -288,12 +300,15 @@ class HmRadio { | 
			
		
	
		
		
			
				
					|  |  |         //uint8_t mTxChIdx;
 |  |  |         //uint8_t mTxChIdx;
 | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         uint8_t mRxChLst[RX_CHANNELS]; |  |  |         uint8_t mRxChLst[RX_CHANNELS]; | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         uint8_t mRxChIdx; |  |  |         uint8_t mRxChIdx; | 
			
		
	
		
		
			
				
					|  |  |         uint16_t mRxLoopCnt; |  |  |         uint16_t mRxLoopCnt; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         RF24 mNrf24; |  |  |         RF24 mNrf24; | 
			
		
	
		
		
			
				
					|  |  |         BUFFER *mBufCtrl; |  |  |         BUFFER *mBufCtrl; | 
			
		
	
		
		
			
				
					|  |  |         uint8_t mTxBuf[MAX_RF_PAYLOAD_SIZE]; |  |  |         uint8_t mTxBuf[MAX_RF_PAYLOAD_SIZE]; | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         volatile bool mIrqRcvd; | 
			
		
	
		
		
			
				
					|  |  | }; |  |  | }; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | #endif /*__RADIO_H__*/ |  |  | #endif /*__RADIO_H__*/ | 
			
		
	
	
		
		
			
				
					|  | 
 |