Fix XN297Dump enhanced payload detection

This commit is contained in:
Pascal Langer 2021-06-28 18:04:17 +02:00
parent 09f39ea60f
commit c52ac2cefc
3 changed files with 26 additions and 21 deletions

View File

@ -119,14 +119,18 @@ static boolean __attribute__((unused)) XN297Dump_process_packet(void)
} }
//Try enhanced payload //Try enhanced payload
crc = 0xb5d2; uint16_t crc_save = 0xb5d2;
packet_length=0; packet_length=0;
for (uint8_t i = 0; i < XN297DUMP_MAX_PACKET_LEN-XN297DUMP_CRC_LENGTH; i++) for (uint8_t i = 0; i < XN297DUMP_MAX_PACKET_LEN-XN297DUMP_CRC_LENGTH; i++)
{ {
packet_sc[i]=packet[i]^xn297_scramble[i]; packet_sc[i]=packet[i]^xn297_scramble[i];
crc = crc_save;
crc16_update( packet[i], 8); crc16_update( packet[i], 8);
crc_save = crc;
crc16_update( packet[i+1] & 0xC0, 2); crc16_update( packet[i+1] & 0xC0, 2);
crcxored=(packet[i+1]<<10)|(packet[i+2]<<2)|(packet[i+3]>>6) ; crcxored=(packet[i+1]<<10)|(packet[i+2]<<2)|(packet[i+3]>>6) ;
if(i>=3)
{
if((crc ^ pgm_read_word(&xn297_crc_xorout_scrambled_enhanced[i - 3])) == crcxored) if((crc ^ pgm_read_word(&xn297_crc_xorout_scrambled_enhanced[i - 3])) == crcxored)
{ // Found a valid CRC for the enhanced payload mode { // Found a valid CRC for the enhanced payload mode
packet_length=i; packet_length=i;
@ -144,6 +148,7 @@ static boolean __attribute__((unused)) XN297Dump_process_packet(void)
break; break;
} }
} }
}
if(packet_length!=0) if(packet_length!=0)
{ // Found a valid CRC for the enhanced payload mode { // Found a valid CRC for the enhanced payload mode
enhanced=true; enhanced=true;
@ -324,7 +329,7 @@ static uint16_t XN297Dump_callback()
switch(bitrate) switch(bitrate)
{ {
case XN297DUMP_250K: case XN297DUMP_250K:
XN297_Configure(XN297_CRCEN, scramble?XN297_SCRAMBLED:XN297_UNSCRAMBLED, XN297_250K); XN297_Configure(XN297_CRCEN, scramble?XN297_SCRAMBLED:XN297_UNSCRAMBLED, XN297_250K, true);
debug("250K"); debug("250K");
break; break;
case XN297DUMP_2M: case XN297DUMP_2M:

View File

@ -53,7 +53,7 @@ const uint16_t xn297_crc_xorout_enhanced[] = {
0xABFC, 0xE68E, 0x0DE7, 0x28A2, 0x1965 }; 0xABFC, 0xE68E, 0x0DE7, 0x28A2, 0x1965 };
#endif #endif
static bool __attribute__((unused)) XN297_Configure(bool crc_en, bool scramble_en, bool bitrate) static bool __attribute__((unused)) XN297_Configure(bool crc_en, bool scramble_en, bool bitrate, bool force_nrf)
{ {
xn297_crc = crc_en; xn297_crc = crc_en;
xn297_scramble_enabled = scramble_en; xn297_scramble_enabled = scramble_en;
@ -61,7 +61,7 @@ static bool __attribute__((unused)) XN297_Configure(bool crc_en, bool scramble_e
xn297_rf = XN297_NRF; xn297_rf = XN297_NRF;
#if defined(NRF24L01_INSTALLED) and defined(CC2500_INSTALLED) #if defined(NRF24L01_INSTALLED) and defined(CC2500_INSTALLED)
if(bitrate == XN297_1M) if(bitrate == XN297_1M || force_nrf)
xn297_rf = XN297_NRF; // Use NRF24L01 xn297_rf = XN297_NRF; // Use NRF24L01
else else
xn297_rf = XN297_CC2500; // Use CC2500 xn297_rf = XN297_CC2500; // Use CC2500

View File

@ -23,7 +23,7 @@
////////////// //////////////
// Functions // Functions
static bool __attribute__((unused)) XN297_Configure(bool, bool, bool); static bool __attribute__((unused)) XN297_Configure(bool, bool, bool, bool force_nrf=false);
static void __attribute__((unused)) XN297_SetTXAddr(const uint8_t*, uint8_t); static void __attribute__((unused)) XN297_SetTXAddr(const uint8_t*, uint8_t);
static void __attribute__((unused)) XN297_SetRXAddr(const uint8_t*, uint8_t); static void __attribute__((unused)) XN297_SetRXAddr(const uint8_t*, uint8_t);
static void __attribute__((unused)) XN297_SetTxRxMode(enum TXRX_State); static void __attribute__((unused)) XN297_SetTxRxMode(enum TXRX_State);