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:
pascallanger 2016-12-09 10:19:35 +01:00
parent c2577df6f7
commit 3904c36a6e
3 changed files with 56 additions and 17 deletions

View File

@ -20,6 +20,7 @@
#include "iface_nrf24l01.h"
#define MT99XX_BIND_COUNT 928
#define MT99XX_PACKET_PERIOD_FY805 2460
#define MT99XX_PACKET_PERIOD_MT 2625
#define MT99XX_PACKET_PERIOD_YZ 3125
#define MT99XX_INITIAL_WAIT 500
@ -47,6 +48,11 @@ enum{
FLAG_LS_FLIP = 0x80,
};
enum{
// flags going to packet[7] (FY805)
FLAG_FY805_HEADLESS= 0x10,
};
enum {
MT99XX_INIT = 0,
MT99XX_BIND,
@ -89,6 +95,17 @@ static void __attribute__((unused)) MT99XX_send_packet()
packet[6] |= 0x40 | FLAG_MT_RATE2
| GET_FLAG( Servo_AUX3, FLAG_MT_SNAPSHOT )
| GET_FLAG( Servo_AUX4, FLAG_MT_VIDEO ); // max rate on MT99xx
else
if(sub_protocol==FY805)
{
packet[6]=0x20;
//Rate 0x01?
//Flip ?
packet[7]=0x01
|GET_FLAG( Servo_AUX1, FLAG_MT_FLIP )
|GET_FLAG( Servo_AUX5, FLAG_FY805_HEADLESS ); //HEADLESS
checksum_offset=0;
}
else //LS
{
packet[6] |= FLAG_LS_RATE // max rate
@ -134,6 +151,9 @@ static void __attribute__((unused)) MT99XX_send_packet()
if(sub_protocol == LS)
NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x2D); // LS always transmits on the same channel
else
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);
@ -183,6 +203,13 @@ static void __attribute__((unused)) MT99XX_initialize_txid()
rx_tx_addr[1] = 0x00;
rx_tx_addr[2] = 0x00;
}
else
if(sub_protocol == FY805)
{
rx_tx_addr[0] = 0x81; // test (SB id)
rx_tx_addr[1] = 0x0F;
rx_tx_addr[2] = 0x00;
}
else
if(sub_protocol == LS)
rx_tx_addr[0] = 0xCC;
@ -208,6 +235,9 @@ uint16_t MT99XX_callback()
{
if(sub_protocol == LS)
NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x2D); // LS always transmits on the same channel
else
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);
@ -256,6 +286,12 @@ uint16_t initMT99XX(void)
packet[2] = 0x05;
packet[3] = 0x11;
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[5] = rx_tx_addr[1];

View File

@ -132,7 +132,8 @@ enum MT99XX
MT99 = 0,
H7 = 1,
YZ = 2,
LS = 3
LS = 3,
FY805 = 4
};
enum MJXQ
{
@ -470,6 +471,7 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
H7 1
YZ 2
LS 3
FY805 4
sub_protocol==MJXQ
WLH08 0
X600 1

View File

@ -251,6 +251,7 @@ const PPM_Parameters PPM_prot[15]= {
H7
YZ
LS
FY805
MODE_MJXQ
WLH08
X600