mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 19:58:13 +00:00
XN297EMU: allows to send and receive 0 payload length in enhanced mode
This commit is contained in:
parent
4f1e5d2452
commit
9356e7654e
@ -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)
|
||||
|
@ -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,6 +314,8 @@ static void __attribute__((unused)) XN297_WriteEnhancedPayload(uint8_t* msg, uin
|
||||
buf[last] = (pid << 7) | (noack << 6);
|
||||
|
||||
// payload
|
||||
if(len)
|
||||
{
|
||||
buf[last]|= bit_reverse(msg[0]) >> 2; // first 6 bit of payload
|
||||
if(xn297_scramble_enabled)
|
||||
buf[last] ^= xn297_scramble[scramble_index++];
|
||||
@ -330,6 +332,7 @@ static void __attribute__((unused)) XN297_WriteEnhancedPayload(uint8_t* msg, uin
|
||||
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; i<len; i++)
|
||||
if(pcf_size>32)
|
||||
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 255; // CRC NOK
|
||||
}
|
||||
|
||||
static bool __attribute__((unused)) XN297_IsPacketSent()
|
||||
|
Loading…
x
Reference in New Issue
Block a user