From faaae0865cfd5797dd0fde0309334e8863c3f4ea Mon Sep 17 00:00:00 2001 From: Open UAS <> Date: Wed, 31 Jul 2019 14:20:58 +0200 Subject: [PATCH] Added collectivepitch throttle channel swap option needed for JR Graupner PPM Transmitters --- Multiprotocol/Common.ino | 2 +- Multiprotocol/Devo_cyrf6936.ino | 26 ++++++++++++++++++++++-- Multiprotocol/Multiprotocol.h | 18 ++++++++++++++++- Multiprotocol/Multiprotocol.ino | 2 ++ Multiprotocol/TX_Def.h | 35 +++++++++++++++++---------------- Multiprotocol/Validate.h | 2 +- 6 files changed, 63 insertions(+), 22 deletions(-) diff --git a/Multiprotocol/Common.ino b/Multiprotocol/Common.ino index c5525a1..5b0c6d9 100644 --- a/Multiprotocol/Common.ino +++ b/Multiprotocol/Common.ino @@ -70,7 +70,7 @@ uint8_t convert_channel_8b_limit_deadband(uint8_t num,uint8_t min,uint8_t mid, u return val; } -// Revert a channel and store it +// Reverse a channel and store it void reverse_channel(uint8_t num) { uint16_t val=2048-Channel_data[num]; diff --git a/Multiprotocol/Devo_cyrf6936.ino b/Multiprotocol/Devo_cyrf6936.ino index cc5de95..283cde5 100644 --- a/Multiprotocol/Devo_cyrf6936.ino +++ b/Multiprotocol/Devo_cyrf6936.ino @@ -102,7 +102,15 @@ static void __attribute__((unused)) DEVO_build_beacon_pkt(uint8_t upper) for(uint8_t i = 0; i < max; i++) { #ifdef FAILSAFE_ENABLE - uint16_t failsafe=Failsafe_data[CH_EATR[i+offset]]; + uint16_t failsafe; + + #ifdef ENABLE_PPM + if (sub_protocol==DEVO_JR_HELI) failsafe=Failsafe_data[CH_EATR_JR_HELI[i+offset]]; + else failsafe=Failsafe_data[CH_EATR[i+offset]]; + #else + failsafe=Failsafe_data[CH_EATR[i+offset]]; + #endif //ENABLE_PPM + if(i + offset < num_ch && failsafe!=FAILSAFE_CHANNEL_HOLD && IS_FAILSAFE_VALUES_on) { enable |= 0x80 >> i; @@ -146,7 +154,13 @@ static void __attribute__((unused)) DEVO_build_data_pkt() uint8_t sign = 0x0b; for (uint8_t i = 0; i < 4; i++) { - int16_t value=convert_channel_16b_nolimit(CH_EATR[ch_idx * 4 + i],-1600,1600);//range -1600..+1600 + int16_t value; + #ifdef ENABLE_PPM + if (sub_protocol==DEVO_JR_HELI) value=convert_channel_16b_nolimit(CH_EATR_JR_HELI[ch_idx * 4 + i],-1600,1600);//range -1600..+1600 + else value=convert_channel_16b_nolimit(CH_EATR[ch_idx * 4 + i],-1600,1600);//range -1600..+1600 + #else + value=convert_channel_16b_nolimit(CH_EATR[ch_idx * 4 + i],-1600,1600);//range -1600..+1600 + #endif //ENABLE_PPM if(value < 0) { value = -value; @@ -299,6 +313,10 @@ uint16_t devo_callback() uint16_t DevoInit() { + //FIXME: this should be the default one IMHO, no sub_protocols misuse for NR of channels, but the option flag like in DSM protocol + #ifdef NEW_DEVO_NR_OF_CHANNELS_BEHAVIOUR + if (option == 10 || option == 12 || option == 6 || option == 7) num_ch=option else num_ch=8;//Throw away erronous config values + #else switch(sub_protocol) { case 1: @@ -313,10 +331,14 @@ uint16_t DevoInit() case 4: num_ch=7; break; + case 5: + num_ch=7;//Specific JR HELI mode has input collective on 0 Throttle on 5, the CAERxT default: num_ch=8; break; } + #endif //NEW_DEVO_NR_OF_CHANNELS_BEHAVIOUR + DEVO_cyrf_init(); CYRF_GetMfgData(cyrfmfg_id); CYRF_SetTxRxMode(TX_EN); diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 5a44ea8..091a3e5 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 2 #define VERSION_REVISION 1 -#define VERSION_PATCH_LEVEL 67 +#define VERSION_PATCH_LEVEL 68 //****************** // Protocols @@ -115,6 +115,15 @@ enum DSM DSMX_11 = 3, DSM_AUTO = 4, }; +enum DEVO +{ + DEVO_CH6 = 3, + DEVO_CH7 = 4, + DEVO_CH8 = 0, + DEVO_CH10 = 1, + DEVO_CH12 = 2, + DEVO_JR_HELI= 5, +}; enum YD717 { YD717 = 0, @@ -647,6 +656,13 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p -- DSMX_22 2 DSMX_11 3 DSM_AUTO 4 + sub_protocol==DEVO + DEVO_CH6 3 + DEVO_CH7 4 + DEVO_CH8 0 + DEVO_CH10 1 + DEVO_CH12 2 + DEVO_JR_HELI 5 // Specific JR HELI mode PPM output has collective on CH0 Throttle on CH5, the CAERxT sub_protocol==YD717 YD717 0 SKYWLKR 1 diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino index 1156b12..4597708 100644 --- a/Multiprotocol/Multiprotocol.ino +++ b/Multiprotocol/Multiprotocol.ino @@ -135,6 +135,8 @@ const uint8_t CH_TAER[]={THROTTLE, AILERON, ELEVATOR, RUDDER, CH5, CH6, CH7, CH8 const uint8_t CH_RETA[]={RUDDER, ELEVATOR, THROTTLE, AILERON, CH5, CH6, CH7, CH8, CH9, CH10, CH11, CH12, CH13, CH14, CH15, CH16}; const uint8_t CH_EATR[]={ELEVATOR, AILERON, THROTTLE, RUDDER, CH5, CH6, CH7, CH8, CH9, CH10, CH11, CH12, CH13, CH14, CH15, CH16}; +const uint8_t CH_EATR_JR_HELI[]={2, 1, 5, 3, 4, 0, CH7, CH8, CH9, CH10, CH11, CH12, CH13, CH14, CH15, CH16}; + // Mode_select variables uint8_t mode_select; uint8_t protocol_flags=0,protocol_flags2=0; diff --git a/Multiprotocol/TX_Def.h b/Multiprotocol/TX_Def.h index 91c49a8..b727326 100644 --- a/Multiprotocol/TX_Def.h +++ b/Multiprotocol/TX_Def.h @@ -46,6 +46,24 @@ #define CHANNEL_SWITCH 1104 // 1550us #define CHANNEL_MAX_COMMAND 1424 // 1750us +//Fixed output definitions +#define CH1 0 +#define CH2 1 +#define CH3 2 +#define CH4 3 +#define CH5 4 +#define CH6 5 +#define CH7 6 +#define CH8 7 +#define CH9 8 +#define CH10 9 +#define CH11 10 +#define CH12 11 +#define CH13 12 +#define CH14 13 +#define CH15 14 +#define CH16 15 + //Channel definitions #ifdef AETR #define AILERON 0 @@ -194,20 +212,3 @@ #define THROTTLE 1 #define RUDDER 0 #endif - -#define CH1 0 -#define CH2 1 -#define CH3 2 -#define CH4 3 -#define CH5 4 -#define CH6 5 -#define CH7 6 -#define CH8 7 -#define CH9 8 -#define CH10 9 -#define CH11 10 -#define CH12 11 -#define CH13 12 -#define CH14 13 -#define CH15 14 -#define CH16 15 diff --git a/Multiprotocol/Validate.h b/Multiprotocol/Validate.h index 75f82c0..5c8d45e 100644 --- a/Multiprotocol/Validate.h +++ b/Multiprotocol/Validate.h @@ -18,7 +18,7 @@ #endif #endif -// Check for minimum version of multi-module boards +// Check for minimum board file definition version for DIY multi-module boards #define MIN_AVR_BOARD 107 #define MIN_ORX_BOARD 107 #define MIN_STM32_BOARD 114