XN297L emu scramble option

This commit is contained in:
Pascal Langer 2019-06-06 01:15:28 +02:00
parent e96186015d
commit 3f77f59c8a
4 changed files with 17 additions and 10 deletions

View File

@ -19,7 +19,7 @@
#define VERSION_MAJOR 1 #define VERSION_MAJOR 1
#define VERSION_MINOR 2 #define VERSION_MINOR 2
#define VERSION_REVISION 1 #define VERSION_REVISION 1
#define VERSION_PATCH_LEVEL 56 #define VERSION_PATCH_LEVEL 57
//****************** //******************
// Protocols // Protocols

View File

@ -389,8 +389,7 @@ void XN297_WritePayload(uint8_t* msg, uint8_t len)
for (uint8_t i = 0; i < len; ++i) for (uint8_t i = 0; i < len; ++i)
{ {
// bit-reverse bytes in packet // bit-reverse bytes in packet
uint8_t b_out = bit_reverse(msg[i]); buf[last] = bit_reverse(msg[i]);
buf[last] = b_out;
if(xn297_scramble_enabled) if(xn297_scramble_enabled)
buf[last] ^= xn297_scramble[xn297_addr_len+i]; buf[last] ^= xn297_scramble[xn297_addr_len+i];
last++; last++;
@ -411,7 +410,6 @@ void XN297_WritePayload(uint8_t* msg, uint8_t len)
NRF24L01_WritePayload(buf, last); NRF24L01_WritePayload(buf, last);
} }
void XN297_WriteEnhancedPayload(uint8_t* msg, uint8_t len, uint8_t noack) void XN297_WriteEnhancedPayload(uint8_t* msg, uint8_t len, uint8_t noack)
{ {
uint8_t packet[32]; uint8_t packet[32];

View File

@ -292,7 +292,6 @@ static void __attribute__((unused)) Q303_init()
case CX35: case CX35:
case CX10D: case CX10D:
case CX10WD: case CX10WD:
XN297_SetScrambledMode(XN297_SCRAMBLED);
NRF24L01_SetBitrate(NRF24L01_BR_1M); NRF24L01_SetBitrate(NRF24L01_BR_1M);
break; break;
case Q303: case Q303:

View File

@ -66,6 +66,7 @@ static void __attribute__((unused)) XN297L_Init()
CC2500_SetTxRxMode(TX_EN); CC2500_SetTxRxMode(TX_EN);
CC2500_SetPower(); CC2500_SetPower();
xn297_scramble_enabled=XN297_SCRAMBLED; //enabled by default
} }
static void __attribute__((unused)) XN297L_SetTXAddr(const uint8_t* addr, uint8_t len) static void __attribute__((unused)) XN297L_SetTXAddr(const uint8_t* addr, uint8_t len)
@ -84,22 +85,31 @@ static void __attribute__((unused)) XN297L_WritePayload(uint8_t* msg, uint8_t le
static const uint16_t initial = 0xb5d2; static const uint16_t initial = 0xb5d2;
// address // address
for (i = 0; i < xn297_addr_len; ++i) { for (i = 0; i < xn297_addr_len; ++i)
buf[last++] = xn297_tx_addr[xn297_addr_len - i - 1] ^ xn297_scramble[i]; {
buf[last] = xn297_tx_addr[xn297_addr_len - i - 1];
if(xn297_scramble_enabled)
buf[last] ^= xn297_scramble[i];
last++;
} }
// payload // payload
for (i = 0; i < len; ++i) { for (i = 0; i < len; ++i) {
// bit-reverse bytes in packet // bit-reverse bytes in packet
uint8_t b_out = bit_reverse(msg[i]); buf[last] = bit_reverse(msg[i]);
buf[last++] = b_out ^ xn297_scramble[xn297_addr_len + i]; if(xn297_scramble_enabled)
buf[last] ^= xn297_scramble[xn297_addr_len+i];
last++;
} }
// crc // crc
uint16_t crc = initial; uint16_t crc = initial;
for (uint8_t i = 0; i < last; ++i) for (uint8_t i = 0; i < last; ++i)
crc = crc16_update(crc, buf[i], 8); crc = crc16_update(crc, buf[i], 8);
crc ^= pgm_read_word(&xn297_crc_xorout_scrambled[xn297_addr_len - 3 + len]); if(xn297_scramble_enabled)
crc ^= pgm_read_word(&xn297_crc_xorout_scrambled[xn297_addr_len - 3 + len]);
else
crc ^= pgm_read_word(&xn297_crc_xorout[xn297_addr_len - 3 + len]);
buf[last++] = crc >> 8; buf[last++] = crc >> 8;
buf[last++] = crc & 0xff; buf[last++] = crc & 0xff;