diff --git a/Multiprotocol/XN297Dump_nrf24l01.ino b/Multiprotocol/XN297Dump_nrf24l01.ino index b3207b3..a94de7b 100644 --- a/Multiprotocol/XN297Dump_nrf24l01.ino +++ b/Multiprotocol/XN297Dump_nrf24l01.ino @@ -258,6 +258,26 @@ static uint16_t XN297Dump_callback() debug(" %02X",packet[i]); } debugln(""); + /*******/ + packet_sent++; + //if(packet_sent==0) + { + delayMicroseconds(3000); + debug("TX"); + memcpy(packet,(uint8_t *)"\x11\x1A\x35\x43\x01\x00\x00\x00\x00\x1A",10); + //memcpy(packet,(uint8_t *)"\x10\x00\x35\x43\x01\x00\x00\x00\x00\x1A",10); + XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, XN297_1M); + XN297_SetTXAddr((uint8_t *)"\x56\x06\x23\x00\x13", 5); // Bind address + XN297_SetTxRxMode(TXRX_OFF); + XN297_SetTxRxMode(TX_EN); + XN297_WriteEnhancedPayload(packet, 0, 0); + delayMicroseconds(1000); + XN297_WriteEnhancedPayload(packet, 10, 0); + delayMicroseconds(1000); + NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x01); // 3 bytes RX/TX address + NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t*)"\x55\x0F\x71", 3); // set up RX address to xn297 preamble + } + /*******/ } else { @@ -431,9 +451,12 @@ static uint16_t XN297Dump_callback() { // RX fifo data ready // if(NRF24L01_ReadReg(NRF24L01_09_CD)) { - boolean res; + uint8_t res; if(enhanced) + { res=XN297_ReadEnhancedPayload(packet, packet_length); + res++; + } else res=XN297_ReadPayload(packet, packet_length); if(res) @@ -526,9 +549,12 @@ static uint16_t XN297Dump_callback() { // RX fifo data ready //if(NRF24L01_ReadReg(NRF24L01_09_CD)) { - boolean res; + uint8_t res; if(enhanced) + { res=XN297_ReadEnhancedPayload(packet, packet_length); + res++; + } else res=XN297_ReadPayload(packet, packet_length); if(res) @@ -572,9 +598,12 @@ static uint16_t XN297Dump_callback() { // RX fifo data ready //if(NRF24L01_ReadReg(NRF24L01_09_CD)) { - boolean res; + uint8_t res; if(enhanced) + { res=XN297_ReadEnhancedPayload(packet, packet_length); + res++; + } else res=XN297_ReadPayload(packet, packet_length); if(res) diff --git a/Multiprotocol/XN297_EMU.ino b/Multiprotocol/XN297_EMU.ino index 000d8af..8cbf080 100644 --- a/Multiprotocol/XN297_EMU.ino +++ b/Multiprotocol/XN297_EMU.ino @@ -292,7 +292,7 @@ static void __attribute__((unused)) XN297_WriteEnhancedPayload(uint8_t* msg, uin uint8_t last = 0; static uint8_t pid=0; - if (xn297_rf == XN297_NRF && xn297_addr_len < 4 && xn297_rf == XN297_NRF) + if (xn297_rf == XN297_NRF && xn297_addr_len < 4) { // If address length (which is defined by receiver address length) is less than 4 the TX address can't fit the preamble, so the last byte goes here buf[last++] = 0x55; } @@ -314,22 +314,25 @@ static void __attribute__((unused)) XN297_WriteEnhancedPayload(uint8_t* msg, uin buf[last] = (pid << 7) | (noack << 6); // payload - buf[last]|= bit_reverse(msg[0]) >> 2; // first 6 bit of payload - if(xn297_scramble_enabled) - buf[last] ^= xn297_scramble[scramble_index++]; - - for (uint8_t i = 0; i < len-1; ++i) + if(len) { - last++; - buf[last] = (bit_reverse(msg[i]) << 6) | (bit_reverse(msg[i+1]) >> 2); + buf[last]|= bit_reverse(msg[0]) >> 2; // first 6 bit of payload if(xn297_scramble_enabled) buf[last] ^= xn297_scramble[scramble_index++]; - } - last++; - buf[last] = bit_reverse(msg[len-1]) << 6; // last 2 bit of payload - if(xn297_scramble_enabled) - buf[last] ^= xn297_scramble[scramble_index++] & 0xc0; + for (uint8_t i = 0; i < len-1; ++i) + { + last++; + buf[last] = (bit_reverse(msg[i]) << 6) | (bit_reverse(msg[i+1]) >> 2); + if(xn297_scramble_enabled) + buf[last] ^= xn297_scramble[scramble_index++]; + } + + last++; + buf[last] = bit_reverse(msg[len-1]) << 6; // last 2 bit of payload + if(xn297_scramble_enabled) + buf[last] ^= xn297_scramble[scramble_index++] & 0xc0; + } // crc if (xn297_crc) @@ -444,7 +447,9 @@ static uint8_t __attribute__((unused)) XN297_ReadEnhancedPayload(uint8_t* msg, u if(xn297_scramble_enabled) pcf_size ^= xn297_scramble[xn297_addr_len]; pcf_size = pcf_size >> 1; - for(int i=0; i32) + return 255; // Error + for(int i=0; i< pcf_size; i++) { msg[i] = bit_reverse((buffer[i+1] << 2) | (buffer[i+2] >> 6)); if(xn297_scramble_enabled) @@ -461,20 +466,20 @@ static uint8_t __attribute__((unused)) XN297_ReadEnhancedPayload(uint8_t* msg, u for (uint8_t i = 0; i < xn297_addr_len; ++i) crc16_update( xn297_rx_addr[xn297_addr_len-i-1], 8); //process payload - for (uint8_t i = 0; i < len+1; ++i) + for (uint8_t i = 0; i < pcf_size+1; ++i) crc16_update( buffer[i], 8); - crc16_update( buffer[len+1] & 0xc0, 2); + crc16_update( buffer[pcf_size+1] & 0xc0, 2); //xorout if (xn297_scramble_enabled) - crc ^= pgm_read_word(&xn297_crc_xorout_scrambled_enhanced[xn297_addr_len-3+len]); + crc ^= pgm_read_word(&xn297_crc_xorout_scrambled_enhanced[xn297_addr_len-3+pcf_size]); #ifdef XN297DUMP_NRF24L01_INO else - crc ^= pgm_read_word(&xn297_crc_xorout_enhanced[xn297_addr_len - 3 + len]); + crc ^= pgm_read_word(&xn297_crc_xorout_enhanced[xn297_addr_len - 3 + pcf_size]); #endif - uint16_t crcxored=(buffer[len+1]<<10)|(buffer[len+2]<<2)|(buffer[len+3]>>6) ; + uint16_t crcxored=(buffer[pcf_size+1]<<10)|(buffer[pcf_size+2]<<2)|(buffer[pcf_size+3]>>6) ; if( crc == crcxored) - return pcf_size; // CRC OK - return 0; // CRC NOK + return pcf_size; // CRC OK + return 255; // CRC NOK } static bool __attribute__((unused)) XN297_IsPacketSent()