mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 19:48:11 +00:00
New MT99xx subprotocol FY805
Protocol: MT99xx (number 17) Subprotocol: FY805 (number 4) Supports headless and flip. For flip I'm not sure of the flag since it was missing from the dumps. Untested protocol...
This commit is contained in:
parent
c2577df6f7
commit
3904c36a6e
@ -20,6 +20,7 @@
|
|||||||
#include "iface_nrf24l01.h"
|
#include "iface_nrf24l01.h"
|
||||||
|
|
||||||
#define MT99XX_BIND_COUNT 928
|
#define MT99XX_BIND_COUNT 928
|
||||||
|
#define MT99XX_PACKET_PERIOD_FY805 2460
|
||||||
#define MT99XX_PACKET_PERIOD_MT 2625
|
#define MT99XX_PACKET_PERIOD_MT 2625
|
||||||
#define MT99XX_PACKET_PERIOD_YZ 3125
|
#define MT99XX_PACKET_PERIOD_YZ 3125
|
||||||
#define MT99XX_INITIAL_WAIT 500
|
#define MT99XX_INITIAL_WAIT 500
|
||||||
@ -47,6 +48,11 @@ enum{
|
|||||||
FLAG_LS_FLIP = 0x80,
|
FLAG_LS_FLIP = 0x80,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum{
|
||||||
|
// flags going to packet[7] (FY805)
|
||||||
|
FLAG_FY805_HEADLESS= 0x10,
|
||||||
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MT99XX_INIT = 0,
|
MT99XX_INIT = 0,
|
||||||
MT99XX_BIND,
|
MT99XX_BIND,
|
||||||
@ -89,17 +95,28 @@ static void __attribute__((unused)) MT99XX_send_packet()
|
|||||||
packet[6] |= 0x40 | FLAG_MT_RATE2
|
packet[6] |= 0x40 | FLAG_MT_RATE2
|
||||||
| GET_FLAG( Servo_AUX3, FLAG_MT_SNAPSHOT )
|
| GET_FLAG( Servo_AUX3, FLAG_MT_SNAPSHOT )
|
||||||
| GET_FLAG( Servo_AUX4, FLAG_MT_VIDEO ); // max rate on MT99xx
|
| GET_FLAG( Servo_AUX4, FLAG_MT_VIDEO ); // max rate on MT99xx
|
||||||
else //LS
|
else
|
||||||
{
|
if(sub_protocol==FY805)
|
||||||
packet[6] |= FLAG_LS_RATE // max rate
|
{
|
||||||
| GET_FLAG( Servo_AUX2, FLAG_LS_INVERT ) //INVERT
|
packet[6]=0x20;
|
||||||
| GET_FLAG( Servo_AUX3, FLAG_LS_SNAPSHOT ) //SNAPSHOT
|
//Rate 0x01?
|
||||||
| GET_FLAG( Servo_AUX4, FLAG_LS_VIDEO ) //VIDEO
|
//Flip ?
|
||||||
| GET_FLAG( Servo_AUX5, FLAG_LS_HEADLESS ); //HEADLESS
|
packet[7]=0x01
|
||||||
packet[7] = ls_mys_byte[ls_counter++];
|
|GET_FLAG( Servo_AUX1, FLAG_MT_FLIP )
|
||||||
if(ls_counter >= sizeof(ls_mys_byte))
|
|GET_FLAG( Servo_AUX5, FLAG_FY805_HEADLESS ); //HEADLESS
|
||||||
ls_counter=0;
|
checksum_offset=0;
|
||||||
}
|
}
|
||||||
|
else //LS
|
||||||
|
{
|
||||||
|
packet[6] |= FLAG_LS_RATE // max rate
|
||||||
|
| GET_FLAG( Servo_AUX2, FLAG_LS_INVERT ) //INVERT
|
||||||
|
| GET_FLAG( Servo_AUX3, FLAG_LS_SNAPSHOT ) //SNAPSHOT
|
||||||
|
| GET_FLAG( Servo_AUX4, FLAG_LS_VIDEO ) //VIDEO
|
||||||
|
| GET_FLAG( Servo_AUX5, FLAG_LS_HEADLESS ); //HEADLESS
|
||||||
|
packet[7] = ls_mys_byte[ls_counter++];
|
||||||
|
if(ls_counter >= sizeof(ls_mys_byte))
|
||||||
|
ls_counter=0;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t result=checksum_offset;
|
uint8_t result=checksum_offset;
|
||||||
for(uint8_t i=0; i<8; i++)
|
for(uint8_t i=0; i<8; i++)
|
||||||
@ -135,7 +152,10 @@ static void __attribute__((unused)) MT99XX_send_packet()
|
|||||||
if(sub_protocol == LS)
|
if(sub_protocol == LS)
|
||||||
NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x2D); // LS always transmits on the same channel
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x2D); // LS always transmits on the same channel
|
||||||
else
|
else
|
||||||
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no] + channel_offset);
|
if(sub_protocol==FY805)
|
||||||
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x4B); // FY805 always transmits on the same channel
|
||||||
|
else
|
||||||
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no] + channel_offset);
|
||||||
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
|
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
|
||||||
NRF24L01_FlushTx();
|
NRF24L01_FlushTx();
|
||||||
XN297_WritePayload(packet, MT99XX_PACKET_SIZE);
|
XN297_WritePayload(packet, MT99XX_PACKET_SIZE);
|
||||||
@ -184,10 +204,17 @@ static void __attribute__((unused)) MT99XX_initialize_txid()
|
|||||||
rx_tx_addr[2] = 0x00;
|
rx_tx_addr[2] = 0x00;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if(sub_protocol == LS)
|
if(sub_protocol == FY805)
|
||||||
rx_tx_addr[0] = 0xCC;
|
{
|
||||||
else //MT99 & H7
|
rx_tx_addr[0] = 0x81; // test (SB id)
|
||||||
|
rx_tx_addr[1] = 0x0F;
|
||||||
rx_tx_addr[2] = 0x00;
|
rx_tx_addr[2] = 0x00;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if(sub_protocol == LS)
|
||||||
|
rx_tx_addr[0] = 0xCC;
|
||||||
|
else //MT99 & H7
|
||||||
|
rx_tx_addr[2] = 0x00;
|
||||||
checksum_offset = rx_tx_addr[0] + rx_tx_addr[1] + rx_tx_addr[2];
|
checksum_offset = rx_tx_addr[0] + rx_tx_addr[1] + rx_tx_addr[2];
|
||||||
channel_offset = (((checksum_offset & 0xf0)>>4) + (checksum_offset & 0x0f)) % 8;
|
channel_offset = (((checksum_offset & 0xf0)>>4) + (checksum_offset & 0x0f)) % 8;
|
||||||
}
|
}
|
||||||
@ -209,7 +236,10 @@ uint16_t MT99XX_callback()
|
|||||||
if(sub_protocol == LS)
|
if(sub_protocol == LS)
|
||||||
NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x2D); // LS always transmits on the same channel
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x2D); // LS always transmits on the same channel
|
||||||
else
|
else
|
||||||
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no]);
|
if(sub_protocol==FY805)
|
||||||
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x4B); // FY805 always transmits on the same channel
|
||||||
|
else
|
||||||
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no]);
|
||||||
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
|
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
|
||||||
NRF24L01_FlushTx();
|
NRF24L01_FlushTx();
|
||||||
XN297_WritePayload(packet, MT99XX_PACKET_SIZE); // bind packet
|
XN297_WritePayload(packet, MT99XX_PACKET_SIZE); // bind packet
|
||||||
@ -256,6 +286,12 @@ uint16_t initMT99XX(void)
|
|||||||
packet[2] = 0x05;
|
packet[2] = 0x05;
|
||||||
packet[3] = 0x11;
|
packet[3] = 0x11;
|
||||||
break;
|
break;
|
||||||
|
case FY805:
|
||||||
|
packet_period = MT99XX_PACKET_PERIOD_FY805;
|
||||||
|
packet[1] = 0x15;
|
||||||
|
packet[2] = 0x12;
|
||||||
|
packet[3] = 0x17;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
packet[4] = rx_tx_addr[0];
|
packet[4] = rx_tx_addr[0];
|
||||||
packet[5] = rx_tx_addr[1];
|
packet[5] = rx_tx_addr[1];
|
||||||
|
@ -132,7 +132,8 @@ enum MT99XX
|
|||||||
MT99 = 0,
|
MT99 = 0,
|
||||||
H7 = 1,
|
H7 = 1,
|
||||||
YZ = 2,
|
YZ = 2,
|
||||||
LS = 3
|
LS = 3,
|
||||||
|
FY805 = 4
|
||||||
};
|
};
|
||||||
enum MJXQ
|
enum MJXQ
|
||||||
{
|
{
|
||||||
@ -470,6 +471,7 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
|
|||||||
H7 1
|
H7 1
|
||||||
YZ 2
|
YZ 2
|
||||||
LS 3
|
LS 3
|
||||||
|
FY805 4
|
||||||
sub_protocol==MJXQ
|
sub_protocol==MJXQ
|
||||||
WLH08 0
|
WLH08 0
|
||||||
X600 1
|
X600 1
|
||||||
|
@ -251,6 +251,7 @@ const PPM_Parameters PPM_prot[15]= {
|
|||||||
H7
|
H7
|
||||||
YZ
|
YZ
|
||||||
LS
|
LS
|
||||||
|
FY805
|
||||||
MODE_MJXQ
|
MODE_MJXQ
|
||||||
WLH08
|
WLH08
|
||||||
X600
|
X600
|
||||||
|
Loading…
x
Reference in New Issue
Block a user