mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 22:58:10 +00:00
V761: additional channles
This commit is contained in:
parent
647425fc1a
commit
5c01bbf284
@ -45,7 +45,7 @@
|
|||||||
45,E01X,E012,E015,E016H
|
45,E01X,E012,E015,E016H
|
||||||
46,V911S,V911S,E119
|
46,V911S,V911S,E119
|
||||||
47,GD00x,GD_V1,GD_V2
|
47,GD00x,GD_V1,GD_V2
|
||||||
48,V761
|
48,V761,3CH,4CH
|
||||||
49,KF606
|
49,KF606
|
||||||
50,Redpine,Fast,Slow
|
50,Redpine,Fast,Slow
|
||||||
51,Potensic,A20
|
51,Potensic,A20
|
||||||
|
@ -138,7 +138,7 @@ const char STR_SUBTYPE_FRSKYL[] = "\x08""LR12\0 ""LR12 6ch";
|
|||||||
const char STR_SUBTYPE_WFLY[] = "\x06""WFR0xS";
|
const char STR_SUBTYPE_WFLY[] = "\x06""WFR0xS";
|
||||||
const char STR_SUBTYPE_HOTT[] = "\x07""Sync\0 ""No_Sync";
|
const char STR_SUBTYPE_HOTT[] = "\x07""Sync\0 ""No_Sync";
|
||||||
const char STR_SUBTYPE_PELIKAN[] = "\x04""Pro\0""Lite";
|
const char STR_SUBTYPE_PELIKAN[] = "\x04""Pro\0""Lite";
|
||||||
const char STR_SUBTYPE_V761[] = "\x07""Std\0 ""Eachine";
|
const char STR_SUBTYPE_V761[] = "\x03""3CH""4CH";
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 3
|
#define VERSION_MINOR 3
|
||||||
#define VERSION_REVISION 1
|
#define VERSION_REVISION 1
|
||||||
#define VERSION_PATCH_LEVEL 23
|
#define VERSION_PATCH_LEVEL 24
|
||||||
|
|
||||||
//******************
|
//******************
|
||||||
// Protocols
|
// Protocols
|
||||||
@ -377,8 +377,8 @@ enum PELIKAN
|
|||||||
|
|
||||||
enum V761
|
enum V761
|
||||||
{
|
{
|
||||||
V761_STD = 0,
|
V761_3CH = 0,
|
||||||
V761_EACHINE= 1,
|
V761_4CH = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NONE 0
|
#define NONE 0
|
||||||
@ -974,8 +974,8 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
|
|||||||
PELIKAN_PRO 0
|
PELIKAN_PRO 0
|
||||||
PELIKAN_LITE 1
|
PELIKAN_LITE 1
|
||||||
sub_protocol==V761
|
sub_protocol==V761
|
||||||
V761_STD 0
|
V761_3CH 0
|
||||||
V761_EACHINE 1
|
V761_4CH 1
|
||||||
|
|
||||||
Power value => 0x80 0=High/1=Low
|
Power value => 0x80 0=High/1=Low
|
||||||
Stream[3] = option_protocol;
|
Stream[3] = option_protocol;
|
||||||
|
@ -53,6 +53,8 @@ static void __attribute__((unused)) V761_set_checksum()
|
|||||||
|
|
||||||
static void __attribute__((unused)) V761_send_packet()
|
static void __attribute__((unused)) V761_send_packet()
|
||||||
{
|
{
|
||||||
|
static bool calib=false, prev_ch6=false;
|
||||||
|
|
||||||
if(phase != V761_DATA)
|
if(phase != V761_DATA)
|
||||||
{
|
{
|
||||||
packet[0] = rx_tx_addr[0];
|
packet[0] = rx_tx_addr[0];
|
||||||
@ -69,7 +71,7 @@ static void __attribute__((unused)) V761_send_packet()
|
|||||||
packet[0] = convert_channel_8b(THROTTLE); // Throttle
|
packet[0] = convert_channel_8b(THROTTLE); // Throttle
|
||||||
packet[2] = convert_channel_8b(ELEVATOR)>>1; // Elevator
|
packet[2] = convert_channel_8b(ELEVATOR)>>1; // Elevator
|
||||||
|
|
||||||
if(sub_protocol==V761_STD)
|
if(sub_protocol==V761_3CH)
|
||||||
{
|
{
|
||||||
packet[1] = convert_channel_8b(RUDDER)>>1; // Rudder
|
packet[1] = convert_channel_8b(RUDDER)>>1; // Rudder
|
||||||
packet[3] = convert_channel_8b(AILERON)>>1; // Aileron
|
packet[3] = convert_channel_8b(AILERON)>>1; // Aileron
|
||||||
@ -81,9 +83,8 @@ static void __attribute__((unused)) V761_send_packet()
|
|||||||
}
|
}
|
||||||
|
|
||||||
packet[5] = (packet_count++ / 3)<<6;
|
packet[5] = (packet_count++ / 3)<<6;
|
||||||
packet[4] = (packet[5] == 0x40) ? 0x1a : 0x20;
|
packet[4] = (packet[5] == 0x40) ? 0x1a : 0x20; // ?
|
||||||
|
|
||||||
// Channel 5 - Gyro mode is packet 5
|
|
||||||
if(CH5_SW) // Mode Expert Gyro off
|
if(CH5_SW) // Mode Expert Gyro off
|
||||||
flags = 0x0c;
|
flags = 0x0c;
|
||||||
else
|
else
|
||||||
@ -91,14 +92,20 @@ static void __attribute__((unused)) V761_send_packet()
|
|||||||
flags = 0x08; // Beginer mode (Gyro on, yaw and pitch rate limited)
|
flags = 0x08; // Beginer mode (Gyro on, yaw and pitch rate limited)
|
||||||
else
|
else
|
||||||
flags = 0x0a; // Mid Mode ( Gyro on no rate limits)
|
flags = 0x0a; // Mid Mode ( Gyro on no rate limits)
|
||||||
|
|
||||||
|
if(!prev_ch6 && CH6_SW) // -100% -> 100% launch gyro calib
|
||||||
|
calib=!calib;
|
||||||
|
prev_ch6 = CH6_SW;
|
||||||
|
if(calib)
|
||||||
|
flags |= 0x01; // Gyro calibration
|
||||||
|
|
||||||
packet[5] |= flags;
|
packet[5] |= flags;
|
||||||
if(sub_protocol==V761_STD)
|
|
||||||
packet[6] = 0x80; // unknown
|
packet[6] = GET_FLAG(CH7_SW, 0x20) // Flip
|
||||||
else
|
|GET_FLAG(CH8_SW, 0x08) // RTH activation
|
||||||
{
|
|GET_FLAG(CH9_SW, 0x10); // RTH on/off
|
||||||
packet[6] = GET_FLAG(CH5_SW, 0x20); // Flip
|
if(sub_protocol==V761_3CH)
|
||||||
// RTH???
|
packet[6] |= 0x80; // unknown, set on original V761-1 dump but not on eachine dumps, keeping for compatibility
|
||||||
}
|
|
||||||
|
|
||||||
//packet counter
|
//packet counter
|
||||||
if(packet_count >= 12)
|
if(packet_count >= 12)
|
||||||
@ -136,22 +143,30 @@ static void __attribute__((unused)) V761_init()
|
|||||||
|
|
||||||
static void __attribute__((unused)) V761_initialize_txid()
|
static void __attribute__((unused)) V761_initialize_txid()
|
||||||
{
|
{
|
||||||
// TODO: try arbitrary rx_tx_addr & frequencies (except hopping_frequency[0])
|
switch(RX_num%5)
|
||||||
switch(RX_num%3)
|
|
||||||
{
|
{
|
||||||
case 1: //Dump from air on Protonus TX
|
case 1: //Dump from air on Protonus TX
|
||||||
memcpy(rx_tx_addr,(uint8_t *)"\xE8\xE4\x45\x09",4);
|
memcpy(rx_tx_addr,(uint8_t *)"\xE8\xE4\x45\x09",4);
|
||||||
memcpy(hopping_frequency,(uint8_t *)"\x0D\x21\x44",3);
|
memcpy(hopping_frequency,(uint8_t *)"\x0D\x21",2);
|
||||||
break;
|
break;
|
||||||
case 2: //Dump from air on mshagg2 TX
|
case 2: //Dump from air on mshagg2 TX
|
||||||
memcpy(rx_tx_addr,(uint8_t *)"\xAE\xD1\x45\x09",4);
|
memcpy(rx_tx_addr,(uint8_t *)"\xAE\xD1\x45\x09",4);
|
||||||
memcpy(hopping_frequency,(uint8_t *)"\x13\x1D\x4A",3);
|
memcpy(hopping_frequency,(uint8_t *)"\x13\x1D",2);
|
||||||
|
break;
|
||||||
|
case 3: //Dump from air on MikeHRC Eachine TX
|
||||||
|
memcpy(rx_tx_addr,(uint8_t *)"\x08\x03\x00\xA0",4); // To be checked
|
||||||
|
memcpy(hopping_frequency,(uint8_t *)"\x0D\x21",2); // To be checked
|
||||||
|
break;
|
||||||
|
case 4: //Dump from air on Crashanium Eachine TX
|
||||||
|
memcpy(rx_tx_addr,(uint8_t *)"\x58\x08\x00\xA0",4); // To be checked
|
||||||
|
memcpy(hopping_frequency,(uint8_t *)"\x0D\x31",3); // To be checked
|
||||||
break;
|
break;
|
||||||
default: //Dump from SPI
|
default: //Dump from SPI
|
||||||
memcpy(rx_tx_addr,(uint8_t *)"\x6f\x2c\xb1\x93",4);
|
memcpy(rx_tx_addr,(uint8_t *)"\x6f\x2c\xb1\x93",4);
|
||||||
memcpy(hopping_frequency,(uint8_t *)"\x14\x1e\x4b",3);
|
memcpy(hopping_frequency,(uint8_t *)"\x14\x1e",3);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
hopping_frequency[2]=hopping_frequency[0]+0x37;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t V761_callback()
|
uint16_t V761_callback()
|
||||||
@ -201,10 +216,14 @@ uint16_t V761_callback()
|
|||||||
|
|
||||||
uint16_t initV761(void)
|
uint16_t initV761(void)
|
||||||
{
|
{
|
||||||
BIND_IN_PROGRESS;
|
|
||||||
bind_counter = V761_BIND_COUNT;
|
|
||||||
V761_initialize_txid();
|
V761_initialize_txid();
|
||||||
|
if(IS_BIND_IN_PROGRESS)
|
||||||
|
{
|
||||||
|
bind_counter = V761_BIND_COUNT;
|
||||||
phase = V761_BIND1;
|
phase = V761_BIND1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
phase = V761_DATA;
|
||||||
V761_init();
|
V761_init();
|
||||||
hopping_frequency_no = 0;
|
hopping_frequency_no = 0;
|
||||||
packet_count = 0;
|
packet_count = 0;
|
||||||
|
@ -715,8 +715,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
|
|||||||
JXD506
|
JXD506
|
||||||
V2X2_MR101
|
V2X2_MR101
|
||||||
PROTO_V761
|
PROTO_V761
|
||||||
V761_STD
|
V761_3CH
|
||||||
V761_EACHINE
|
V761_4CH
|
||||||
PROTO_V911S
|
PROTO_V911S
|
||||||
V911S_STD
|
V911S_STD
|
||||||
V911S_E119
|
V911S_E119
|
||||||
|
Loading…
x
Reference in New Issue
Block a user