From 1fa6e4526b8b2c8a42607f0fa62e9e341f54e2d5 Mon Sep 17 00:00:00 2001 From: Pascal Langer Date: Wed, 5 Jun 2019 23:23:27 +0200 Subject: [PATCH] Include full xn297(L) xor tables --- Multiprotocol/GW008_nrf24l01.ino | 2 +- Multiprotocol/Multiprotocol.h | 2 +- Multiprotocol/NRF24l01_SPI.ino | 63 +++++++++++++++++++++++--------- 3 files changed, 48 insertions(+), 19 deletions(-) diff --git a/Multiprotocol/GW008_nrf24l01.ino b/Multiprotocol/GW008_nrf24l01.ino index 4824a90..1499c6c 100644 --- a/Multiprotocol/GW008_nrf24l01.ino +++ b/Multiprotocol/GW008_nrf24l01.ino @@ -70,7 +70,7 @@ static void __attribute__((unused)) GW008_send_packet(uint8_t bind) NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); NRF24L01_FlushTx(); - XN297_WriteEnhancedPayload(packet, GW008_PAYLOAD_SIZE, 0, 0x3c7d); + XN297_WriteEnhancedPayload(packet, GW008_PAYLOAD_SIZE, 0); NRF24L01_SetPower(); // Set tx_power } diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 82eded2..5f685c1 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 2 #define VERSION_REVISION 1 -#define VERSION_PATCH_LEVEL 55 +#define VERSION_PATCH_LEVEL 56 //****************** // Protocols diff --git a/Multiprotocol/NRF24l01_SPI.ino b/Multiprotocol/NRF24l01_SPI.ino index 680f7d2..c1203e9 100644 --- a/Multiprotocol/NRF24l01_SPI.ino +++ b/Multiprotocol/NRF24l01_SPI.ino @@ -249,26 +249,52 @@ uint8_t xn297_tx_addr[5]; uint8_t xn297_rx_addr[5]; uint8_t xn297_crc = 0; +// xn297 address / pcf / payload scramble table const uint8_t xn297_scramble[] = { - 0xe3, 0xb1, 0x4b, 0xea, 0x85, 0xbc, 0xe5, 0x66, - 0x0d, 0xae, 0x8c, 0x88, 0x12, 0x69, 0xee, 0x1f, - 0xc7, 0x62, 0x97, 0xd5, 0x0b, 0x79, 0xca, 0xcc, - 0x1b, 0x5d, 0x19, 0x10, 0x24, 0xd3, 0xdc, 0x3f, - 0x8e, 0xc5, 0x2f}; + 0xE3, 0xB1, 0x4B, 0xEA, 0x85, 0xBC, 0xE5, 0x66, + 0x0D, 0xAE, 0x8C, 0x88, 0x12, 0x69, 0xEE, 0x1F, + 0xC7, 0x62, 0x97, 0xD5, 0x0B, 0x79, 0xCA, 0xCC, + 0x1B, 0x5D, 0x19, 0x10, 0x24, 0xD3, 0xDC, 0x3F, + 0x8E, 0xC5, 0x2F, 0xAA, 0x16, 0xF3, 0x95 }; +// scrambled, standard mode crc xorout table const uint16_t PROGMEM xn297_crc_xorout_scrambled[] = { - 0x0000, 0x3448, 0x9BA7, 0x8BBB, 0x85E1, 0x3E8C, - 0x451E, 0x18E6, 0x6B24, 0xE7AB, 0x3828, 0x814B, - 0xD461, 0xF494, 0x2503, 0x691D, 0xFE8B, 0x9BA7, - 0x8B17, 0x2920, 0x8B5F, 0x61B1, 0xD391, 0x7401, - 0x2138, 0x129F, 0xB3A0, 0x2988}; + 0x0000, 0x3448, 0x9BA7, 0x8BBB, 0x85E1, 0x3E8C, + 0x451E, 0x18E6, 0x6B24, 0xE7AB, 0x3828, 0x814B, + 0xD461, 0xF494, 0x2503, 0x691D, 0xFE8B, 0x9BA7, + 0x8B17, 0x2920, 0x8B5F, 0x61B1, 0xD391, 0x7401, + 0x2138, 0x129F, 0xB3A0, 0x2988, 0x23CA, 0xC0CB, + 0x0C6C, 0xB329, 0xA0A1, 0x0A16, 0xA9D0 }; +// unscrambled, standard mode crc xorout table const uint16_t PROGMEM xn297_crc_xorout[] = { - 0x0000, 0x3d5f, 0xa6f1, 0x3a23, 0xaa16, 0x1caf, - 0x62b2, 0xe0eb, 0x0821, 0xbe07, 0x5f1a, 0xaf15, - 0x4f0a, 0xad24, 0x5e48, 0xed34, 0x068c, 0xf2c9, - 0x1852, 0xdf36, 0x129d, 0xb17c, 0xd5f5, 0x70d7, - 0xb798, 0x5133, 0x67db, 0xd94e}; + 0x0000, 0x3D5F, 0xA6F1, 0x3A23, 0xAA16, 0x1CAF, + 0x62B2, 0xE0EB, 0x0821, 0xBE07, 0x5F1A, 0xAF15, + 0x4F0A, 0xAD24, 0x5E48, 0xED34, 0x068C, 0xF2C9, + 0x1852, 0xDF36, 0x129D, 0xB17C, 0xD5F5, 0x70D7, + 0xB798, 0x5133, 0x67DB, 0xD94E, 0x0A5B, 0xE445, + 0xE6A5, 0x26E7, 0xBDAB, 0xC379, 0x8E20 }; + +// scrambled enhanced mode crc xorout table +const uint16_t PROGMEM xn297_crc_xorout_scrambled_enhanced[] = { + 0x0000, 0x7EBF, 0x3ECE, 0x07A4, 0xCA52, 0x343B, + 0x53F8, 0x8CD0, 0x9EAC, 0xD0C0, 0x150D, 0x5186, + 0xD251, 0xA46F, 0x8435, 0xFA2E, 0x7EBD, 0x3C7D, + 0x94E0, 0x3D5F, 0xA685, 0x4E47, 0xF045, 0xB483, + 0x7A1F, 0xDEA2, 0x9642, 0xBF4B, 0x032F, 0x01D2, + 0xDC86, 0x92A5, 0x183A, 0xB760, 0xA953 }; + +// unscrambled enhanced mode crc xorout table +// unused so far +/* +const uint16_t xn297_crc_xorout_enhanced[] = { + 0x0000, 0x8BE6, 0xD8EC, 0xB87A, 0x42DC, 0xAA89, + 0x83AF, 0x10E4, 0xE83E, 0x5C29, 0xAC76, 0x1C69, + 0xA4B2, 0x5961, 0xB4D3, 0x2A50, 0xCB27, 0x5128, + 0x7CDB, 0x7A14, 0xD5D2, 0x57D7, 0xE31D, 0xCE42, + 0x648D, 0xBF2D, 0x653B, 0x190C, 0x9117, 0x9A97, + 0xABFC, 0xE68E, 0x0DE7, 0x28A2, 0x1965 }; +*/ static uint8_t bit_reverse(uint8_t b_in) { @@ -386,7 +412,7 @@ void XN297_WritePayload(uint8_t* msg, uint8_t len) } -void XN297_WriteEnhancedPayload(uint8_t* msg, uint8_t len, uint8_t noack, uint16_t crc_xorout) +void XN297_WriteEnhancedPayload(uint8_t* msg, uint8_t len, uint8_t noack) { uint8_t packet[32]; uint8_t scramble_index=0; @@ -442,7 +468,10 @@ void XN297_WriteEnhancedPayload(uint8_t* msg, uint8_t len, uint8_t noack, uint16 for (uint8_t i = offset; i < last; ++i) crc = crc16_update(crc, packet[i], 8); crc = crc16_update(crc, packet[last] & 0xc0, 2); - crc ^= crc_xorout; + if (xn297_scramble_enabled) + crc ^= pgm_read_word(&xn297_crc_xorout_scrambled_enhanced[xn297_addr_len-3+len]); + //else + // crc ^= pgm_read_word(&xn297_crc_xorout_enhanced[xn297_addr_len - 3 + len]); packet[last++] |= (crc >> 8) >> 2; packet[last++] = ((crc >> 8) << 6) | ((crc & 0xff) >> 2);