mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-05 00:48:13 +00:00
Pelikan and Tiger protocol fixes
This commit is contained in:
parent
ec92edfc85
commit
917e27280f
@ -313,7 +313,7 @@ const mm_protocol_definition multi_protocols[] = {
|
|||||||
{PROTO_TIGER, STR_TIGER , 0, NO_SUBTYPE, OPTION_NONE },
|
{PROTO_TIGER, STR_TIGER , 0, NO_SUBTYPE, OPTION_NONE },
|
||||||
#endif
|
#endif
|
||||||
#if defined(XN297DUMP_NRF24L01_INO)
|
#if defined(XN297DUMP_NRF24L01_INO)
|
||||||
{PROTO_XN297DUMP, STR_XN297DUMP, 3, STR_SUBTYPE_XN297DUMP, OPTION_RFCHAN },
|
{PROTO_XN297DUMP, STR_XN297DUMP, 4, STR_SUBTYPE_XN297DUMP, OPTION_RFCHAN },
|
||||||
#endif
|
#endif
|
||||||
{0x00, nullptr, 0, nullptr, 0 }
|
{0x00, nullptr, 0, nullptr, 0 }
|
||||||
};
|
};
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 3
|
#define VERSION_MINOR 3
|
||||||
#define VERSION_REVISION 0
|
#define VERSION_REVISION 0
|
||||||
#define VERSION_PATCH_LEVEL 50
|
#define VERSION_PATCH_LEVEL 51
|
||||||
|
|
||||||
//******************
|
//******************
|
||||||
// Protocols
|
// Protocols
|
||||||
|
@ -505,7 +505,7 @@ boolean XN297_ReadPayload(uint8_t* msg, uint8_t len)
|
|||||||
//process address
|
//process address
|
||||||
for (uint8_t i = 0; i < xn297_addr_len; ++i)
|
for (uint8_t i = 0; i < xn297_addr_len; ++i)
|
||||||
{
|
{
|
||||||
uint8_t b_in=xn297_tx_addr[xn297_addr_len-i-1];
|
uint8_t b_in=xn297_rx_addr[xn297_addr_len-i-1];
|
||||||
if(xn297_scramble_enabled)
|
if(xn297_scramble_enabled)
|
||||||
b_in ^= xn297_scramble[i];
|
b_in ^= xn297_scramble[i];
|
||||||
crc = crc16_update(crc, b_in, 8);
|
crc = crc16_update(crc, b_in, 8);
|
||||||
@ -525,10 +525,13 @@ boolean XN297_ReadPayload(uint8_t* msg, uint8_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8_t XN297_ReadEnhancedPayload(uint8_t* msg, uint8_t len)
|
uint8_t XN297_ReadEnhancedPayload(uint8_t* msg, uint8_t len)
|
||||||
{
|
{ //!!! Don't forget do a +2 and if using CRC add +2 on any of the used NRF24L01_11_RX_PW_Px !!!
|
||||||
uint8_t buffer[32];
|
uint8_t buffer[32];
|
||||||
uint8_t pcf_size; // pcf payload size
|
uint8_t pcf_size; // pcf payload size
|
||||||
NRF24L01_ReadPayload(buffer, len+2); // pcf + payload
|
if (xn297_crc)
|
||||||
|
NRF24L01_ReadPayload(buffer, len+4); // Read pcf + payload + CRC
|
||||||
|
else
|
||||||
|
NRF24L01_ReadPayload(buffer, len+2); // Read pcf + payload
|
||||||
pcf_size = buffer[0];
|
pcf_size = buffer[0];
|
||||||
if(xn297_scramble_enabled)
|
if(xn297_scramble_enabled)
|
||||||
pcf_size ^= xn297_scramble[xn297_addr_len];
|
pcf_size ^= xn297_scramble[xn297_addr_len];
|
||||||
@ -540,7 +543,35 @@ uint8_t XN297_ReadEnhancedPayload(uint8_t* msg, uint8_t len)
|
|||||||
msg[i] ^= bit_reverse((xn297_scramble[xn297_addr_len+i+1] << 2) |
|
msg[i] ^= bit_reverse((xn297_scramble[xn297_addr_len+i+1] << 2) |
|
||||||
(xn297_scramble[xn297_addr_len+i+2] >> 6));
|
(xn297_scramble[xn297_addr_len+i+2] >> 6));
|
||||||
}
|
}
|
||||||
return pcf_size;
|
|
||||||
|
if (!xn297_crc)
|
||||||
|
return pcf_size; // No CRC so OK by default...
|
||||||
|
|
||||||
|
// Calculate CRC
|
||||||
|
uint16_t crc = 0xb5d2;
|
||||||
|
//process address
|
||||||
|
for (uint8_t i = 0; i < xn297_addr_len; ++i)
|
||||||
|
{
|
||||||
|
uint8_t b_in=xn297_rx_addr[xn297_addr_len-i-1];
|
||||||
|
if(xn297_scramble_enabled)
|
||||||
|
b_in ^= xn297_scramble[i];
|
||||||
|
crc = crc16_update(crc, b_in, 8);
|
||||||
|
}
|
||||||
|
//process payload
|
||||||
|
for (uint8_t i = 0; i < len+1; ++i)
|
||||||
|
crc = crc16_update(crc, buffer[i], 8);
|
||||||
|
crc = crc16_update(crc, buffer[len+1] & 0xc0, 2);
|
||||||
|
//xorout
|
||||||
|
if (xn297_scramble_enabled)
|
||||||
|
crc ^= pgm_read_word(&xn297_crc_xorout_scrambled_enhanced[xn297_addr_len-3+len]);
|
||||||
|
#ifdef XN297DUMP_NRF24L01_INO
|
||||||
|
else
|
||||||
|
crc ^= pgm_read_word(&xn297_crc_xorout_enhanced[xn297_addr_len - 3 + len]);
|
||||||
|
#endif
|
||||||
|
uint16_t crcxored=(buffer[len+1]<<10)|(buffer[len+2]<<2)|(buffer[len+3]>>6) ;
|
||||||
|
if( crc == crcxored)
|
||||||
|
return pcf_size; // CRC OK
|
||||||
|
return 0; // CRC NOK
|
||||||
}
|
}
|
||||||
|
|
||||||
// End of XN297 emulation
|
// End of XN297 emulation
|
||||||
|
@ -72,7 +72,6 @@ static void __attribute__((unused)) pelikan_build_packet()
|
|||||||
packet[9]=upper?0xAA:0x00;
|
packet[9]=upper?0xAA:0x00;
|
||||||
upper=!upper;
|
upper=!upper;
|
||||||
//Hopping counters
|
//Hopping counters
|
||||||
packet[11]=packet_count;
|
|
||||||
if(++packet_count>4)
|
if(++packet_count>4)
|
||||||
{
|
{
|
||||||
packet_count=0;
|
packet_count=0;
|
||||||
@ -80,6 +79,7 @@ static void __attribute__((unused)) pelikan_build_packet()
|
|||||||
hopping_frequency_no=0;
|
hopping_frequency_no=0;
|
||||||
}
|
}
|
||||||
packet[10]=hopping_frequency_no;
|
packet[10]=hopping_frequency_no;
|
||||||
|
packet[11]=packet_count;
|
||||||
|
|
||||||
packet_length = 15;
|
packet_length = 15;
|
||||||
}
|
}
|
||||||
@ -91,6 +91,15 @@ static void __attribute__((unused)) pelikan_build_packet()
|
|||||||
packet[packet_length-1]=crc8;
|
packet[packet_length-1]=crc8;
|
||||||
|
|
||||||
//Send
|
//Send
|
||||||
|
#ifdef DEBUG_SERIAL
|
||||||
|
if(packet[9]==0x00)
|
||||||
|
{
|
||||||
|
debug("C: %02X P(%d):",IS_BIND_IN_PROGRESS?PELIKAN_BIND_RF:hopping_frequency[hopping_frequency_no],packet_length);
|
||||||
|
for(uint8_t i=0;i<packet_length;i++)
|
||||||
|
debug(" %02X",packet[i]);
|
||||||
|
debugln("");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
A7105_WriteData(packet_length, IS_BIND_IN_PROGRESS?PELIKAN_BIND_RF:hopping_frequency[hopping_frequency_no]);
|
A7105_WriteData(packet_length, IS_BIND_IN_PROGRESS?PELIKAN_BIND_RF:hopping_frequency[hopping_frequency_no]);
|
||||||
A7105_SetPower();
|
A7105_SetPower();
|
||||||
}
|
}
|
||||||
@ -139,8 +148,8 @@ uint16_t initPelikan()
|
|||||||
for(uint8_t i=0;i<PELIKAN_NUM_RF_CHAN;i++)
|
for(uint8_t i=0;i<PELIKAN_NUM_RF_CHAN;i++)
|
||||||
hopping_frequency[i]=pgm_read_byte_near(&pelikan_hopp[0][i]);
|
hopping_frequency[i]=pgm_read_byte_near(&pelikan_hopp[0][i]);
|
||||||
|
|
||||||
hopping_frequency_no=0;
|
hopping_frequency_no=PELIKAN_NUM_RF_CHAN;
|
||||||
packet_count=0;
|
packet_count=5;
|
||||||
return 2400;
|
return 2400;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -31,15 +31,18 @@ Multiprotocol is distributed in the hope that it will be useful,
|
|||||||
static uint8_t __attribute__((unused)) TIGER_convert_channel(uint8_t num)
|
static uint8_t __attribute__((unused)) TIGER_convert_channel(uint8_t num)
|
||||||
{
|
{
|
||||||
uint8_t val=convert_channel_8b(num);
|
uint8_t val=convert_channel_8b(num);
|
||||||
// 00=center, 01..7F=left, 80..FF=right
|
// 7F..01=left, 00=center, 80..FF=right
|
||||||
if(val==80)
|
if(val==0x80)
|
||||||
val=0;
|
val=0; // 0
|
||||||
else
|
else
|
||||||
if(val>80)
|
if(val>0x80)
|
||||||
val--;
|
val--; // 80..FE
|
||||||
else
|
else
|
||||||
if(val==0)
|
{
|
||||||
val++;
|
val=0x80-val; // 80..01
|
||||||
|
if(val==0x80)
|
||||||
|
val--; // 7F..01
|
||||||
|
}
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,9 +52,9 @@ static void __attribute__((unused)) TIGER_send_packet()
|
|||||||
{
|
{
|
||||||
//Channels
|
//Channels
|
||||||
packet[0]=convert_channel_8b(THROTTLE); // 00..FF
|
packet[0]=convert_channel_8b(THROTTLE); // 00..FF
|
||||||
packet[1]=TIGER_convert_channel(RUDDER); // 00=center, 01..7F=left, 80..FF=right
|
packet[1]=TIGER_convert_channel(RUDDER); // 7F..01=left, 00=center, 80..FF=right
|
||||||
packet[2]=TIGER_convert_channel(ELEVATOR); // 00=center, 01..7F=down, 80..FF=up
|
packet[2]=TIGER_convert_channel(ELEVATOR); // 7F..01=down, 00=center, 80..FF=up
|
||||||
packet[3]=TIGER_convert_channel(AILERON); // 00=center, 01..7F=left, 80..FF=right
|
packet[3]=TIGER_convert_channel(AILERON); // 7F..01=left, 00=center, 80..FF=right
|
||||||
//Flags
|
//Flags
|
||||||
packet[14]= GET_FLAG(CH5_SW, 0x04) //FLIP
|
packet[14]= GET_FLAG(CH5_SW, 0x04) //FLIP
|
||||||
| GET_FLAG(CH6_SW, 0x10); //LIGHT
|
| GET_FLAG(CH6_SW, 0x10); //LIGHT
|
||||||
|
@ -1282,6 +1282,8 @@ Start/Stop|EMERGENCY|CAMERA_UP/DN
|
|||||||
## Tiger - *61*
|
## Tiger - *61*
|
||||||
Autobind protocol
|
Autobind protocol
|
||||||
|
|
||||||
|
**Only 1 ID**
|
||||||
|
|
||||||
CH1|CH2|CH3|CH4|CH5|CH6
|
CH1|CH2|CH3|CH4|CH5|CH6
|
||||||
---|---|---|---|---|---
|
---|---|---|---|---|---
|
||||||
A|E|T|R|FLIP|LIGHT
|
A|E|T|R|FLIP|LIGHT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user