mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-12-13 19:13:14 +00:00
FrSkyRX: added sub_protocol, documentation and more
This commit is contained in:
@@ -105,21 +105,17 @@ void FrSkyX2_init_hop(void)
|
||||
hopping_frequency[47] = 0; //Bind freq
|
||||
}
|
||||
|
||||
uint8_t hw_ver=0x02;
|
||||
|
||||
void Frsky_init_clone(void)
|
||||
{
|
||||
uint16_t temp = FRSKY_RX_EEPROM_OFFSET;
|
||||
temp++;
|
||||
rx_tx_addr[3] = eeprom_read_byte((EE_ADDR)temp++);
|
||||
rx_tx_addr[2] = eeprom_read_byte((EE_ADDR)temp++);
|
||||
hw_ver = eeprom_read_byte((EE_ADDR)temp++);
|
||||
temp++;
|
||||
for (uint8_t ch = 0; ch < 47; ch++)
|
||||
{
|
||||
hopping_frequency[ch] = eeprom_read_byte((EE_ADDR)temp++);
|
||||
}
|
||||
debugln("Clone mode");
|
||||
uint16_t temp = FRSKY_RX_EEPROM_OFFSET;
|
||||
temp++;
|
||||
rx_tx_addr[3] = eeprom_read_byte((EE_ADDR)temp++);
|
||||
rx_tx_addr[2] = eeprom_read_byte((EE_ADDR)temp++);
|
||||
rx_tx_addr[1] = eeprom_read_byte((EE_ADDR)temp++);
|
||||
temp++;
|
||||
for (uint8_t ch = 0; ch < 47; ch++)
|
||||
hopping_frequency[ch] = eeprom_read_byte((EE_ADDR)temp++);
|
||||
debugln("Clone mode");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -97,15 +97,18 @@ static void __attribute__((unused)) frsky2way_data_frame()
|
||||
uint16_t initFrSky_2way()
|
||||
{
|
||||
//FrskyD init hop
|
||||
for(uint8_t i=0;i<50;i++)
|
||||
{
|
||||
uint8_t freq = (i * 0x1e) % 0xeb;
|
||||
if(i == 3 || i == 23 || i == 47)
|
||||
freq++;
|
||||
if(i > 47)
|
||||
freq=0;
|
||||
hopping_frequency[i]=freq;
|
||||
}
|
||||
if (eeprom_read_byte((EE_ADDR)FRSKY_RX_EEPROM_OFFSET+4)==127 && eeprom_read_byte((EE_ADDR)FRSKY_RX_EEPROM_OFFSET)==2)// bound in FRSKY-RX CloneTX -> use clone mode
|
||||
Frsky_init_clone();
|
||||
else
|
||||
for(uint8_t i=0;i<50;i++)
|
||||
{
|
||||
uint8_t freq = (i * 0x1e) % 0xeb;
|
||||
if(i == 3 || i == 23 || i == 47)
|
||||
freq++;
|
||||
if(i > 47)
|
||||
freq=0;
|
||||
hopping_frequency[i]=freq;
|
||||
}
|
||||
|
||||
packet_count=0;
|
||||
if(IS_BIND_IN_PROGRESS)
|
||||
|
||||
@@ -42,7 +42,7 @@ static void __attribute__((unused)) FrSkyX_build_bind_packet()
|
||||
packet[8] = hopping_frequency[idx++];
|
||||
packet[9] = hopping_frequency[idx++];
|
||||
packet[10] = hopping_frequency[idx++];
|
||||
packet[11] = hw_ver; // Unknown but constant ID?
|
||||
packet[11] = rx_tx_addr[1]; // Unknown but constant ID?
|
||||
packet[12] = RX_num;
|
||||
//
|
||||
memset(&packet[13], 0, packet_size - 14);
|
||||
@@ -54,7 +54,7 @@ static void __attribute__((unused)) FrSkyX_build_bind_packet()
|
||||
else
|
||||
{
|
||||
//packet 1D 03 01 0E 1C 02 00 00 32 0B 00 00 A8 26 28 01 A1 00 00 00 3E F6 87 C7 00 00 00 00 C9 C9
|
||||
packet[5] = hw_ver; // Unknown but constant ID?
|
||||
packet[5] = rx_tx_addr[1]; // Unknown but constant ID?
|
||||
packet[6] = RX_num;
|
||||
//Bind flags
|
||||
packet[7]=0;
|
||||
@@ -119,7 +119,7 @@ static void __attribute__((unused)) FrSkyX_build_packet()
|
||||
packet[0] = packet_size; // Number of bytes in the packet (after this one)
|
||||
packet[1] = rx_tx_addr[3]; // ID
|
||||
packet[2] = rx_tx_addr[2]; // ID
|
||||
packet[3] = hw_ver; // Unknown but constant ID?
|
||||
packet[3] = rx_tx_addr[1]; // Unknown but constant ID?
|
||||
//
|
||||
packet[4] = (FrSkyX_chanskip<<6)|hopping_frequency_no;
|
||||
packet[5] = FrSkyX_chanskip>>2;
|
||||
@@ -385,9 +385,11 @@ uint16_t ReadFrSkyX()
|
||||
uint16_t initFrSkyX()
|
||||
{
|
||||
set_rx_tx_addr(MProtocol_id_master);
|
||||
if ((eeprom_read_byte((EE_ADDR)FRSKY_RX_EEPROM_OFFSET+4)==127) && (eeprom_read_byte((EE_ADDR)FRSKY_RX_EEPROM_OFFSET)<2))// bound in FRSKY-X RX-mode with RX Num 63 -> use clone mode
|
||||
Frsky_init_clone();
|
||||
else if(protocol==PROTO_FRSKYX)
|
||||
rx_tx_addr[1]=0x02; // ID related, hw version?
|
||||
|
||||
if (eeprom_read_byte((EE_ADDR)FRSKY_RX_EEPROM_OFFSET+4)==127 && eeprom_read_byte((EE_ADDR)FRSKY_RX_EEPROM_OFFSET)<2)// bound in FRSKY-RX CloneTX -> use clone mode
|
||||
Frsky_init_clone();
|
||||
else if(protocol==PROTO_FRSKYX)
|
||||
Frsky_init_hop();
|
||||
else
|
||||
{
|
||||
|
||||
@@ -392,17 +392,13 @@ uint16_t FrSky_Rx_callback()
|
||||
eeprom_write_byte((EE_ADDR)temp++, rx_tx_addr[2]);
|
||||
debug("addr[2]=%02X, ", rx_tx_addr[2]);
|
||||
debug("rx_num=%02X, ", packet[12]); // RX # (D16)
|
||||
if (packet[12]==63)
|
||||
{
|
||||
// If RX Num is 63, write a finetune value of 127 to the EEPROM
|
||||
// A real finetune value of 127 means, the frequency of module is out of range and the module should be replaced.
|
||||
eeprom_write_byte((EE_ADDR)temp++, 127);
|
||||
}
|
||||
else
|
||||
{
|
||||
eeprom_write_byte((EE_ADDR)temp++, frsky_rx_finetune);
|
||||
debugln("tune=%d", (int8_t)frsky_rx_finetune);
|
||||
}
|
||||
if (sub_protocol==FRSKY_CLONE)
|
||||
eeprom_write_byte((EE_ADDR)temp++, 127);
|
||||
else
|
||||
{
|
||||
eeprom_write_byte((EE_ADDR)temp++, frsky_rx_finetune);
|
||||
debugln("tune=%d", (int8_t)frsky_rx_finetune);
|
||||
}
|
||||
for (ch = 0; ch < 47; ch++)
|
||||
{
|
||||
eeprom_write_byte((EE_ADDR)temp++, hopping_frequency[ch]);
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
52,ZSX,280
|
||||
53,Flyzone,FZ-410
|
||||
54,Scanner
|
||||
55,Frsky_RX
|
||||
55,Frsky_RX,RX,CloneTX
|
||||
56,AFHDS2A_RX
|
||||
57,HoTT
|
||||
58,FX816,P38
|
||||
|
||||
@@ -123,6 +123,7 @@ const char STR_SUBTYPE_XK[] = "\x04""X450""X420";
|
||||
const char STR_SUBTYPE_FRSKYR9[] = "\x07""915MHz\0""868MHz\0""915 8ch""868 8ch";
|
||||
const char STR_SUBTYPE_ESKY[] = "\x03""Std""ET4";
|
||||
const char STR_SUBTYPE_PROPEL[] = "\x04""74-Z";
|
||||
const char STR_SUBTYPE_FRSKY_RX[] = "\x07""RX\0 ""CloneTX";
|
||||
|
||||
enum
|
||||
{
|
||||
@@ -302,7 +303,7 @@ const mm_protocol_definition multi_protocols[] = {
|
||||
{PROTO_SCANNER, STR_SCANNER, 0, NO_SUBTYPE, OPTION_NONE },
|
||||
#endif
|
||||
#if defined(FRSKY_RX_CC2500_INO)
|
||||
{PROTO_FRSKY_RX, STR_FRSKY_RX, 0, NO_SUBTYPE, OPTION_RFTUNE },
|
||||
{PROTO_FRSKY_RX, STR_FRSKY_RX, 2, STR_SUBTYPE_FRSKY_RX, OPTION_RFTUNE },
|
||||
#endif
|
||||
#if defined(AFHDS2A_RX_A7105_INO)
|
||||
{PROTO_AFHDS2A_RX, STR_AFHDS2A_RX,0, NO_SUBTYPE, OPTION_NONE },
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#define VERSION_MAJOR 1
|
||||
#define VERSION_MINOR 3
|
||||
#define VERSION_REVISION 0
|
||||
#define VERSION_PATCH_LEVEL 84
|
||||
#define VERSION_PATCH_LEVEL 85
|
||||
|
||||
//******************
|
||||
// Protocols
|
||||
@@ -334,6 +334,12 @@ enum ESKY
|
||||
ESKY_ET4 = 1,
|
||||
};
|
||||
|
||||
enum FRSKY_RX
|
||||
{
|
||||
FRSKY_RX = 0,
|
||||
FRSKY_CLONE = 1,
|
||||
};
|
||||
|
||||
#define NONE 0
|
||||
#define P_HIGH 1
|
||||
#define P_LOW 0
|
||||
@@ -887,6 +893,9 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
|
||||
sub_protocol==ESKY
|
||||
ESKY_STD 0
|
||||
ESKY_ET4 1
|
||||
sub_protocol==FRSKY_RX
|
||||
FRSKY_RX = 0,
|
||||
FRSKY_CLONE = 1,
|
||||
|
||||
Power value => 0x80 0=High/1=Low
|
||||
Stream[3] = option_protocol;
|
||||
|
||||
@@ -558,6 +558,9 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
|
||||
FZ410
|
||||
PROTO_FQ777
|
||||
NONE
|
||||
PROTO_FRSKY_RX
|
||||
FRSKY_RX
|
||||
FRSKY_CLONE
|
||||
PROTO_FRSKYD
|
||||
NONE
|
||||
PROTO_FRSKYR9
|
||||
|
||||
Reference in New Issue
Block a user