461 lines
18 KiB
C
Raw Normal View History

/*
This project is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Multiprotocol is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Multiprotocol. If not, see <http://www.gnu.org/licenses/>.
*/
/**********************************************/
/** Multiprotocol module configuration file ***/
/**********************************************/
2017-12-01 16:46:42 +01:00
/********************/
/*** LOCAL CONFIG ***/
/********************/
//If you know parameters you want for sure to be enabled or disabled which survives in future, you can use a file named "_MyConfig.h".
//An example is given within the file named "_MyConfig.h.example" which needs to be renamed if you want to use it.
//To enable this config file remove the // from the line below. It's automatically loaded if the file exists for the AVR platform but not STM32...
2017-12-07 16:06:45 +01:00
//#define USE_MY_CONFIG
2017-12-01 16:46:42 +01:00
2016-08-15 11:52:43 +02:00
/*******************/
/*** TX SETTINGS ***/
/*******************/
//Modify the channel order based on your TX: AETR, TAER, RETA...
2016-09-21 22:07:13 +02:00
//Examples: Flysky & DEVO is AETR, JR/Spektrum radio is TAER, Multiplex is AERT...
//Default is AETR.
#define AETR
2016-12-01 22:30:27 +01:00
//Uncomment to reverse the direction of the specified channel for all protocols
//#define REVERSE_AILERON
//#define REVERSE_ELEVATOR
//#define REVERSE_THROTTLE
//#define REVERSE_RUDDER
/*************************/
/*** BIND FROM CHANNEL ***/
/*************************/
2017-12-10 09:48:20 +01:00
//Bind from channel enables you to bind when a specified channel is going from low to high. This feature is only active
// if you specify AUTOBIND in PPM mode or set AutoBind to YES for serial mode. It also requires that the throttle channel is low.
//Comment to globaly disable the bind feature from a channel.
#define ENABLE_BIND_CH
//Set the channel number used for bind. Default is 16.
#define BIND_CH 16
//Comment to disable the wait for bind feature. This feature will not activate the selected
// protocol unless a bind is requested using bind from channel or the GUI "Bind" button.
//The goal is to prevent binding other people's model when powering up the TX, changing model or scanning through protocols.
#define WAIT_FOR_BIND
2017-11-20 16:01:12 +01:00
/*************************/
/*** BOOTLOADER USE ***/
/*************************/
//Allow flashing multimodule directly with TX(erky9x or opentx modified firmwares)
2017-11-26 15:36:33 +01:00
//Instructions: https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/tree/master/BootLoaders#compiling--uploading-firmware-with-the-flash-from-tx-bootloader
//To enable this feature remove the "//" on the next line. Requires a compatible bootloader or upload method to be selected when you use the Multi 4-in-1 Boards Manager definitions.
2017-12-07 17:02:35 +01:00
//#define CHECK_FOR_BOOTLOADER
2017-02-23 11:23:25 +01:00
/****************/
/*** RF CHIPS ***/
/****************/
//There are 4 RF components supported. If one of them is not installed you must comment it using "//".
2016-09-20 18:27:09 +02:00
//If a chip is not installed all associated protocols are disabled.
//4-in-1 modules have all RF chips installed
//!!!If a RF chip is present it MUST be marked as installed!!! or weird things will happen you have been warned.
#define A7105_INSTALLED
#define CYRF6936_INSTALLED
#define CC2500_INSTALLED
#define NRF24L01_INSTALLED
2017-02-23 11:23:25 +01:00
//Low power is reducing the transmit power of the multi module. This setting is configurable per model in PPM (table below) or Serial mode (radio GUI).
//It can be activated when flying indoor or small models since the distance is short or if a model is causing issues when flying closed to the TX.
//By default low power is completly disabled on all rf chips to prevent mistakes, but you can enable it by uncommenting the lines below:
//#define A7105_ENABLE_LOW_POWER
//#define CYRF6936_ENABLE_LOW_POWER
//#define CC2500_ENABLE_LOW_POWER
//#define NRF24L01_ENABLE_LOW_POWER
//Fine tune of the A7105 LO base frequency
// This is required for some A7105 modules and/or RXs with inaccurate crystal oscillator.
// The offset is in +/-kHz. Default value is 0.
#define A7105_FREQ_OFFSET 0
2016-09-20 18:27:09 +02:00
2017-12-12 10:19:50 +01:00
//If you compile for the OrangeRX TX module you need to select the correct board type.
//By default the compilation is done for the GREEN board, to switch to a BLUE board uncomment the line below by removing the "//"
//#define ORANGE_TX_BLUE
/*****************/
/*** GLOBAL ID ***/
/*****************/
//A global ID is used by most protocols to bind and retain the bind to models. To prevent duplicate IDs, it is automatically
// generated using a random 32 bits number the first time the eeprom is initialized.
//If you have 2 Multi modules which you want to share the same ID so you can use either to control the same RC model
// then you can force the ID to a certain known value using the lines below.
//Default is commented, you should uncoment only for test purpose or if you know exactly what you are doing!!!
//#define FORCE_GLOBAL_ID 0x12345678
//Protocols using the CYRF6936 (DSM, Devo, Walkera...) are using the CYRF ID instead which should prevent duplicated IDs.
//If you have 2 Multi modules which you want to share the same ID so you can use either to control the same RC model
// then you can force the ID to a certain known value using the lines below.
//Default is commented, you should uncoment only for test purpose or if you know exactly what you are doing!!!
//#define FORCE_CYRF_ID "\x12\x34\x56\x78\x9A\xBC"
2016-09-20 18:27:09 +02:00
/****************************/
/*** PROTOCOLS TO INCLUDE ***/
/****************************/
//In this section select the protocols you want to be accessible when using the module.
2016-10-18 09:27:14 +02:00
//All the protocols will not fit in the Atmega328p module so you need to pick and choose.
2016-09-20 18:27:09 +02:00
//Comment the protocols you are not using with "//" to save Flash space.
2016-12-08 15:11:00 +01:00
//The protocols below need an A7105 to be installed
#define FLYSKY_A7105_INO
2016-09-20 18:27:09 +02:00
#define HUBSAN_A7105_INO
2017-02-03 21:08:10 +01:00
#define AFHDS2A_A7105_INO
2016-09-20 18:27:09 +02:00
//The protocols below need a CYRF6936 to be installed
2017-02-03 21:08:10 +01:00
#define DEVO_CYRF6936_INO
2016-09-20 18:27:09 +02:00
#define DSM_CYRF6936_INO
2017-02-03 21:08:10 +01:00
#define J6PRO_CYRF6936_INO
#define WK2x01_CYRF6936_INO
2016-09-20 18:27:09 +02:00
//The protocols below need a CC2500 to be installed
2017-02-03 21:08:10 +01:00
#define FRSKYV_CC2500_INO
2016-12-21 18:05:55 +01:00
#define FRSKYD_CC2500_INO
2017-02-03 21:08:10 +01:00
#define FRSKYX_CC2500_INO
#define SFHSS_CC2500_INO
#define CORONA_CC2500_INO
2016-12-08 15:11:00 +01:00
2016-09-20 18:27:09 +02:00
//The protocols below need a NRF24L01 to be installed
#define BAYANG_NRF24L01_INO
2016-12-08 15:11:00 +01:00
#define CG023_NRF24L01_INO
#define CX10_NRF24L01_INO // Include Q2X2 protocol
2017-02-03 21:08:10 +01:00
#define ESKY_NRF24L01_INO
2016-09-20 18:27:09 +02:00
#define HISKY_NRF24L01_INO
2017-02-03 21:08:10 +01:00
#define KN_NRF24L01_INO
#define SLT_NRF24L01_INO
2016-09-20 18:27:09 +02:00
#define SYMAX_NRF24L01_INO
#define V2X2_NRF24L01_INO
#define YD717_NRF24L01_INO
#define MT99XX_NRF24L01_INO
#define MJXQ_NRF24L01_INO
#define SHENQI_NRF24L01_INO
2017-02-03 21:08:10 +01:00
#define FY326_NRF24L01_INO
#define FQ777_NRF24L01_INO
#define ASSAN_NRF24L01_INO
2016-09-20 18:27:09 +02:00
#define HONTAI_NRF24L01_INO
2017-11-21 21:45:03 +01:00
#define Q303_NRF24L01_INO
#define GW008_NRF24L01_INO
#define DM002_NRF24L01_INO
#define CABELL_NRF24L01_INO
#define ESKY150_NRF24L01_INO
#define H8_3D_NRF24L01_INO
2017-11-20 16:01:12 +01:00
/**************************/
/*** FAILSAFE SETTINGS ***/
/**************************/
//The module is using the same default failsafe values for all protocols which currently supports it:
2017-12-07 17:28:01 +01:00
// Devo, WK2x01, SFHSS, HISKY/HK310 and AFHDS2A
//All channels are centered except throttle which is forced low.
//If you want to diasble failsafe globally comment the line below using "//".
#define FAILSAFE_ENABLE
2017-12-07 17:14:14 +01:00
//Failsafe throttle low value in percentage.
//Value between -125% and +125%. Default -100.
2017-12-07 17:02:35 +01:00
#define FAILSAFE_THROTTLE_LOW -100
//The radio using serial protocol can set failsafe data (ersky9x only for now).
// Two options are available:
// a. replace the default failsafe data with serial failsafe data when they are received.
// b. wait for the radio to provide failsafe before sending it. Enable advanced settings like "FAILSAFE NOT SET" or "FAILSAFE RX".
// Option a. is the default since you have a protection even if no failsafe has been set on the radio.
// You can force option b. by uncommenting the line below (remove the "//").
//#define FAILSAFE_SERIAL_ONLY
2017-11-20 16:01:12 +01:00
/*******************************/
/*** CC2500 FREQUENCY TUNING ***/
/*******************************/
//For optimal performance the CC2500 RF module used by the FrSkyD, FrSkyV, FrSkyX, and SFHSS protocols needs to be tuned for each protocol.
//Initial tuning should be done via the radio menu with a genuine FrSky or Futaba receiver.
//Once a good tuning value is found it can be set here and will override the radio's 'option' setting for all existing and new models which use that protocol.
//For more information: https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/tree/master/docs/Frequency_Tuning.md
//Uncomment the lines below (remove the "//") and set an appropriate value (replace the "0") to enable. Valid range is -127 to +127.
//#define FORCE_FRSKYD_TUNING 0
//#define FORCE_FRSKYV_TUNING 0
//#define FORCE_FRSKYX_TUNING 0
//#define FORCE_SFHSS_TUNING 0
//#define FORCE_CORONA_TUNING 0
2016-08-15 11:52:43 +02:00
/**************************/
/*** TELEMETRY SETTINGS ***/
/**************************/
//In this section you can configure the telemetry.
//If you do not plan using the telemetry comment this global setting using "//" and skip to the next section.
#define TELEMETRY
//Comment to invert the polarity of the output telemetry serial signal.
//This function takes quite some flash space and processor power on an atmega.
2017-02-06 21:50:56 +01:00
//For OpenTX it must be uncommented.
//On a 9XR_PRO running ersky9x both commented and uncommented will work depending on the radio setting Invert COM1 under the Telemetry menu.
2017-02-06 21:50:56 +01:00
//On other addon/replacement boards like the 9xtreme board or the Ar9x board running ersky9x, you need to uncomment the line below.
//For er9x it depends if you have an inveter mod or not on the telemetry pin. If you don't have an inverter comment this line.
2017-12-07 17:02:35 +01:00
#define INVERT_TELEMETRY
2016-08-15 11:52:43 +02:00
//Comment if you don't want to send Multi status telemetry frames (Protocol available, Bind in progress, version...)
2017-01-31 09:12:06 +01:00
//Use with er9x/erksy9x, for OpenTX MULTI_TELEMETRY below is preferred instead
#define MULTI_STATUS
2017-01-31 09:12:06 +01:00
//Uncomment to send Multi status and allow OpenTX to autodetect the telemetry format
//Supported by OpenTX version 2.2 RC9 and newer. NOT supported by er9x/ersky9x use MULTI_STATUS instead.
2016-12-19 17:33:30 +01:00
//#define MULTI_TELEMETRY
2017-01-31 09:12:06 +01:00
//Comment a line to disable a specific protocol telemetry
2017-12-07 17:02:35 +01:00
#define DSM_TELEMETRY // Forward received telemetry packet directly to TX to be decoded
#define SPORT_TELEMETRY // Use FrSkyX SPORT format to send telemetry to TX
2017-12-07 17:02:35 +01:00
#define AFHDS2A_FW_TELEMETRY // Forward received telemetry packet directly to TX to be decoded
#define HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
2017-12-07 17:02:35 +01:00
#define AFHDS2A_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
#define BAYANG_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
#define HUBSAN_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
#define CABELL_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
2017-12-01 17:55:24 +01:00
//SPORT_POLLING is an implementation of the same polling routine as XJT module for sport telemetry bidirectional communication.
2017-12-07 17:02:35 +01:00
//This is useful for passing sport control frames from TX to RX(ex: changing Betaflight PID or VTX channels on the fly using LUA scripts with OpentX).
2017-12-01 17:55:24 +01:00
//Using this feature on turnigy 9XR_PRO requires uncomment INVERT_TELEMETRY as this TX output on telemetry pin only inverted signal.
//!This is a work in progress!
2017-12-10 09:48:20 +01:00
//#define SPORT_POLLING
2017-12-01 17:55:24 +01:00
/****************************/
/*** SERIAL MODE SETTINGS ***/
/****************************/
//In this section you can configure the serial mode.
//The serial mode enables full editing of all the parameters in the GUI of the radio.
//This is available natively for ER9X and ERSKY9X. It is available for OpenTX on Taranis with a special version.
//If you do not plan to use the Serial mode comment this line using "//" to save Flash space
#define ENABLE_SERIAL
/*************************/
/*** PPM MODE SETTINGS ***/
/*************************/
//In this section you can configure all details about PPM.
//If you do not plan to use the PPM mode comment this line using "//" to save Flash space, you don't need to configure anything below in this case
2017-12-07 17:02:35 +01:00
#define ENABLE_PPM
/*** TX END POINTS ***/
//It is important for the module to know the endpoints of your radio.
//Below are some standard transmitters already preconfigured.
//Uncomment only the one which matches your transmitter.
2017-12-11 18:49:50 +01:00
#define TX_ER9X //ER9X/ERSKY9X/OpenTX ( 988<->2012 microseconds)
//#define TX_DEVO7 //DEVO (1120<->1920 microseconds)
//#define TX_SPEKTRUM //Spektrum (1100<->1900 microseconds)
//#define TX_HISKY //HISKY (1120<->1920 microseconds)
//#define TX_MPX //Multiplex MC2020 (1250<->1950 microseconds)
//#define TX_WALKERA //Walkera PL0811-01H (1000<->1800 microseconds)
//#define TX_CUSTOM //Custom
2017-12-11 18:49:50 +01:00
// The lines below are used to set the end points in microseconds if you have selected TX_CUSTOM.
2016-10-18 09:27:14 +02:00
// A few things to consider:
// - If you put too big values compared to your TX you won't be able to reach the extremes which is bad for throttle as an example
2016-10-18 09:27:14 +02:00
// - If you put too low values you won't be able to use your full stick range, it will be maxed out before reaching the ends
// - Centered stick value is usually 1500. It should match the middle between MIN and MAX, ie Center=(MAX-MIN)/2+MIN. If your TX is not centered you can adjust the value MIN or MAX.
// - 100% is the value when the model is by default, 125% is the value when you extend the servo travel which is only used by some protocols
#if defined(TX_CUSTOM)
#define PPM_MAX_100 1900 // 100%
#define PPM_MIN_100 1100 // 100%
#define PPM_MAX_125 2000 // 125%
#define PPM_MIN_125 1000 // 125%
#endif
// The line below is used to set the minimum number of channels which the module should receive to consider a PPM frame valid.
// The default value is 4 to receive at least AETR for flying models but you could also connect the PPM from a car radio which has only 3 channels by changing this number to 3.
#define MIN_PPM_CHANNELS 4
// The line below is used to set the maximum number of channels which the module should work with. Any channels received above this number are discarded.
// The default value is 16 to receive all possible channels but you might want to filter some "bad" channels from the PPM frame like the ones above 6 on the Walkera PL0811.
#define MAX_PPM_CHANNELS 16
//The table below indicates which protocol to run when a specific position on the dial has been selected.
//All fields and values are explained below. Everything is configurable from here like in the Serial mode.
//Example: You can associate multiple times the same protocol to different dial positions to take advantage of the model match (RX_Num)
const PPM_Parameters PPM_prot[15]= {
// Dial Protocol Sub protocol RX_Num Power Auto Bind Option
/* 1 */ {MODE_FLYSKY, Flysky , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 2 */ {MODE_HUBSAN, H107 , 0 , P_HIGH , NO_AUTOBIND , 0 },
2016-09-04 16:46:21 +02:00
/* 3 */ {MODE_FRSKYD, 0 , 0 , P_HIGH , NO_AUTOBIND , 40 }, // option=fine freq tuning
/* 4 */ {MODE_HISKY , Hisky , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 5 */ {MODE_V2X2 , 0 , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 6 */ {MODE_DSM , DSMX_11 , 0 , P_HIGH , NO_AUTOBIND , 6 }, // option=number of channels
/* 7 */ {MODE_DSM , DSM2_22 , 0 , P_HIGH , NO_AUTOBIND , 6 },
/* 8 */ {MODE_YD717 , YD717 , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 9 */ {MODE_KN , WLTOYS , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 10 */ {MODE_SYMAX , SYMAX , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 11 */ {MODE_SLT , 0 , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 12 */ {MODE_CX10 , CX10_BLUE , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 13 */ {MODE_CG023 , CG023 , 0 , P_HIGH , NO_AUTOBIND , 0 },
2016-12-05 21:51:20 +01:00
/* 14 */ {MODE_BAYANG, BAYANG , 0 , P_HIGH , NO_AUTOBIND , 0 },
/* 15 */ {MODE_SYMAX , SYMAX5C , 0 , P_HIGH , NO_AUTOBIND , 0 }
};
/* Available protocols and associated sub protocols to pick and choose from
MODE_FLYSKY
Flysky
V9X9
V6X6
V912
CX20
MODE_HUBSAN
H107
H301
H501
MODE_FRSKYV
NONE
MODE_FRSKYD
NONE
MODE_FRSKYX
CH_16
CH_8
EU_16
EU_8
MODE_HISKY
Hisky
HK310
MODE_V2X2
V2X2
JXD506
2016-09-01 14:00:42 +02:00
MODE_DSM
DSM2_22
DSM2_11
DSMX_22
DSMX_11
MODE_DEVO
NONE
MODE_YD717
YD717
SKYWLKR
SYMAX4
XINXUN
NIHUI
MODE_KN
WLTOYS
FEILUN
MODE_SYMAX
SYMAX
SYMAX5C
MODE_SLT
NONE
MODE_CX10
CX10_GREEN
CX10_BLUE
DM007
JC3015_1
JC3015_2
MK33041
MODE_Q2X2
Q222
2016-01-25 18:14:56 +01:00
Q242
Q282
2016-11-23 15:35:27 +01:00
MODE_SLT
SLT
VISTA
MODE_CG023
CG023
YD829
MODE_BAYANG
BAYANG
H8S3D
2017-11-20 16:01:12 +01:00
X16_AH
IRDRONE
MODE_ESKY
NONE
MODE_MT99XX
MT99
H7
YZ
LS
FY805
2016-02-04 13:35:16 +01:00
MODE_MJXQ
WLH08
X600
X800
H26D
2016-08-28 14:03:22 +02:00
E010
H26WH
MODE_SHENQI
NONE
2016-03-18 17:11:27 +01:00
MODE_FY326
FY326
FY319
MODE_SFHSS
2017-11-21 21:45:03 +01:00
NONE
2016-07-27 22:24:48 +02:00
MODE_J6PRO
NONE
MODE_FQ777
NONE
MODE_ASSAN
NONE
MODE_HONTAI
FORMAT_HONTAI
FORMAT_JJRCX1
FORMAT_X5C1
FORMAT_FQ777_951
MODE_AFHDS2A
2016-11-06 16:36:44 +01:00
PWM_IBUS
PPM_IBUS
PWM_SBUS
PPM_SBUS
MODE_WK2X01
WK2801
WK2401
W6_5_1
W6_6_1
W6_HEL
W6_HEL_I
MODE_Q303
Q303
CX35
CX10D
CX10WD
MODE_GW008
NONE
MODE_DM002
NONE
MODE_CABELL
CABELL_V3
CABELL_V3_TELEMETRY
CABELL_SET_FAIL_SAFE
CABELL_UNBIND
MODE_ESKY150
MODE_H8_3D
H8_3D
H20H
H20 Mini
H30 Mini
MODE_CORONA
COR_V1
COR_V2
*/
// RX_Num is used for model match. Using RX_Num values different for each receiver will prevent starting a model with the false config loaded...
// RX_Num value is between 0 and 15.
// Power P_HIGH or P_LOW: High or low power setting for the transmission.
// For indoor P_LOW is more than enough.
// Auto Bind AUTOBIND or NO_AUTOBIND
// For protocols which does not require binding at each power up (like Flysky, FrSky...), you might still want a bind to be initiated each time you power up the TX.
2016-10-18 09:27:14 +02:00
// As an example, it's usefull for the WLTOYS F929/F939/F949/F959 (all using the Flysky protocol) which requires a bind at each power up.
// It also enables the Bind from channel feature, allowing to execute a bind by toggling a designated channel.
2017-01-31 09:12:06 +01:00
// Option: the value is between -128 and +127.
// The option value is only valid for some protocols, read this page for more information: https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/blob/master/Protocols_Details.md