mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 22:28:12 +00:00
XN297Dump: added enhanced packet mode
This commit is contained in:
parent
ffc56b049d
commit
d4e77c6499
@ -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 71
|
#define VERSION_PATCH_LEVEL 72
|
||||||
|
|
||||||
//******************
|
//******************
|
||||||
// Protocols
|
// Protocols
|
||||||
|
@ -286,7 +286,7 @@ const uint16_t PROGMEM xn297_crc_xorout_scrambled_enhanced[] = {
|
|||||||
|
|
||||||
// unscrambled enhanced mode crc xorout table
|
// unscrambled enhanced mode crc xorout table
|
||||||
// unused so far
|
// unused so far
|
||||||
/*
|
#ifdef XN297DUMP_NRF24L01_INO
|
||||||
const uint16_t xn297_crc_xorout_enhanced[] = {
|
const uint16_t xn297_crc_xorout_enhanced[] = {
|
||||||
0x0000, 0x8BE6, 0xD8EC, 0xB87A, 0x42DC, 0xAA89,
|
0x0000, 0x8BE6, 0xD8EC, 0xB87A, 0x42DC, 0xAA89,
|
||||||
0x83AF, 0x10E4, 0xE83E, 0x5C29, 0xAC76, 0x1C69,
|
0x83AF, 0x10E4, 0xE83E, 0x5C29, 0xAC76, 0x1C69,
|
||||||
@ -294,7 +294,7 @@ const uint16_t xn297_crc_xorout_enhanced[] = {
|
|||||||
0x7CDB, 0x7A14, 0xD5D2, 0x57D7, 0xE31D, 0xCE42,
|
0x7CDB, 0x7A14, 0xD5D2, 0x57D7, 0xE31D, 0xCE42,
|
||||||
0x648D, 0xBF2D, 0x653B, 0x190C, 0x9117, 0x9A97,
|
0x648D, 0xBF2D, 0x653B, 0x190C, 0x9117, 0x9A97,
|
||||||
0xABFC, 0xE68E, 0x0DE7, 0x28A2, 0x1965 };
|
0xABFC, 0xE68E, 0x0DE7, 0x28A2, 0x1965 };
|
||||||
*/
|
#endif
|
||||||
|
|
||||||
static uint8_t bit_reverse(uint8_t b_in)
|
static uint8_t bit_reverse(uint8_t b_in)
|
||||||
{
|
{
|
||||||
|
@ -76,10 +76,10 @@ static boolean __attribute__((unused)) XN297Dump_process_packet(void)
|
|||||||
{
|
{
|
||||||
uint16_t crcxored;
|
uint16_t crcxored;
|
||||||
uint8_t packet_sc[XN297DUMP_MAX_PACKET_LEN], packet_un[XN297DUMP_MAX_PACKET_LEN];
|
uint8_t packet_sc[XN297DUMP_MAX_PACKET_LEN], packet_un[XN297DUMP_MAX_PACKET_LEN];
|
||||||
|
|
||||||
// init crc
|
// init crc
|
||||||
crc = 0xb5d2;
|
crc = 0xb5d2;
|
||||||
|
|
||||||
|
//Try normal payload
|
||||||
// address
|
// address
|
||||||
for (uint8_t i = 0; i < address_length; i++)
|
for (uint8_t i = 0; i < address_length; i++)
|
||||||
{
|
{
|
||||||
@ -112,6 +112,55 @@ static boolean __attribute__((unused)) XN297Dump_process_packet(void)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Try enhanced payload
|
||||||
|
crc = 0xb5d2;
|
||||||
|
packet_length=0;
|
||||||
|
uint16_t crc_enh;
|
||||||
|
for (uint8_t i = 0; i < XN297DUMP_MAX_PACKET_LEN-XN297DUMP_CRC_LENGTH; i++)
|
||||||
|
{
|
||||||
|
packet_sc[i]=packet[i]^xn297_scramble[i];
|
||||||
|
crc = crc16_update(crc, packet[i], 8);
|
||||||
|
crc_enh = crc16_update(crc, packet[i+1] & 0xC0, 2);
|
||||||
|
crcxored=(packet[i+1]<<10)|(packet[i+2]<<2)|(packet[i+3]>>6) ;
|
||||||
|
if((crc_enh ^ pgm_read_word(&xn297_crc_xorout_scrambled_enhanced[i - 3])) == crcxored)
|
||||||
|
{
|
||||||
|
packet_length=i;
|
||||||
|
i++;
|
||||||
|
packet_sc[i]=packet[i]^xn297_scramble[i];
|
||||||
|
memcpy(packet_un,packet_sc,packet_length+2); // unscramble packet
|
||||||
|
scramble=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if((crc_enh ^ pgm_read_word(&xn297_crc_xorout_enhanced[i - 3])) == crcxored)
|
||||||
|
{
|
||||||
|
scramble=false;
|
||||||
|
packet_length=i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(packet_length!=0)
|
||||||
|
{
|
||||||
|
debug("Enhanced ");
|
||||||
|
//check selected address length
|
||||||
|
if((packet_un[address_length]>>1)!=packet_length-address_length)
|
||||||
|
{
|
||||||
|
for(uint8_t i=3;i<=5;i++)
|
||||||
|
if((packet_un[i]>>1)==packet_length-i)
|
||||||
|
address_length=i;
|
||||||
|
debug("Wrong address length selected using %d ", address_length )
|
||||||
|
}
|
||||||
|
debug("pid=%d ",((packet_un[address_length]&0x01)<<1)|(packet_un[address_length+1]>>7));
|
||||||
|
debug("ack=%d ",(packet_un[address_length+1]>>6)&0x01);
|
||||||
|
// address
|
||||||
|
for (uint8_t i = 0; i < address_length; i++)
|
||||||
|
packet[address_length-1-i]=packet_un[i];
|
||||||
|
// payload
|
||||||
|
for (uint8_t i = address_length; i < packet_length; i++)
|
||||||
|
packet[i] = bit_reverse((packet_un[i+1]<<2)|(packet_un[i+2]>>6));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user