diff --git a/Multiprotocol/Multi.txt b/Multiprotocol/Multi.txt index e439e6c..c21ae1e 100644 --- a/Multiprotocol/Multi.txt +++ b/Multiprotocol/Multi.txt @@ -65,3 +65,4 @@ 65,FrSkyR9,915MHz,868MHz,915_8ch,868_8ch 66,PROPEL,74-Z 67,LR12,LR12,LR12_6ch +68,Skyartec diff --git a/Multiprotocol/Multi_Names.ino b/Multiprotocol/Multi_Names.ino index 9dfb7d7..24530d7 100644 --- a/Multiprotocol/Multi_Names.ino +++ b/Multiprotocol/Multi_Names.ino @@ -81,6 +81,7 @@ const char STR_XK[] ="XK"; const char STR_XN297DUMP[] ="XN297DP"; const char STR_FRSKYR9[] ="FrSkyR9"; const char STR_PROPEL[] ="PROPEL"; +const char STR_SKYARTEC[] ="Skyartc"; const char STR_SUBTYPE_FLYSKY[] = "\x04""Std\0""V9x9""V6x6""V912""CX20"; const char STR_SUBTYPE_HUBSAN[] = "\x04""H107""H301""H501"; @@ -227,7 +228,7 @@ const mm_protocol_definition multi_protocols[] = { {PROTO_FRSKYL, STR_FRSKYL, 2, STR_SUBTYPE_FRSKYL, OPTION_RFTUNE }, #endif #if defined(FRSKYR9_SX1276_INO) - {PROTO_FRSKY_R9, STR_FRSKYR9, 4, STR_SUBTYPE_FRSKYR9, OPTION_NONE }, + {PROTO_FRSKY_R9, STR_FRSKYR9, 4, STR_SUBTYPE_FRSKYR9, OPTION_NONE }, #endif #if defined(FX816_NRF24L01_INO) {PROTO_FX816, STR_FX816, 1, STR_SUBTYPE_FX816, OPTION_NONE }, @@ -284,7 +285,7 @@ const mm_protocol_definition multi_protocols[] = { {PROTO_POTENSIC, STR_POTENSIC, 1, STR_SUBTYPE_POTENSIC, OPTION_NONE }, #endif #if defined(PROPEL_NRF24L01_INO) - {PROTO_PROPEL, STR_PROPEL, 4, STR_SUBTYPE_PROPEL, OPTION_NONE }, + {PROTO_PROPEL, STR_PROPEL, 4, STR_SUBTYPE_PROPEL, OPTION_NONE }, #endif #if defined(CX10_NRF24L01_INO) {PROTO_Q2X2, STR_Q2X2, 3, STR_SUBTYPE_Q2X2, OPTION_NONE }, @@ -304,8 +305,11 @@ const mm_protocol_definition multi_protocols[] = { #if defined(SHENQI_NRF24L01_INO) {PROTO_SHENQI, STR_SHENQI, 0, NO_SUBTYPE, OPTION_NONE }, #endif + #if defined(SKYARTEC_CC2500_INO) + {PROTO_SKYARTEC, STR_SKYARTEC, 0, NO_SUBTYPE, OPTION_NONE }, + #endif #if defined(SLT_NRF24L01_INO) - {PROTO_SLT, STR_SLT, 5, STR_SUBTYPE_SLT, OPTION_RFTUNE }, + {PROTO_SLT, STR_SLT, 5, STR_SUBTYPE_SLT, OPTION_RFTUNE }, #endif #if defined(SYMAX_NRF24L01_INO) {PROTO_SYMAX, STR_SYMAX, 2, STR_SUBTYPE_SYMAX, OPTION_NONE }, diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 4fab8ff..771ac56 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 3 #define VERSION_REVISION 0 -#define VERSION_PATCH_LEVEL 88 +#define VERSION_PATCH_LEVEL 89 //****************** // Protocols @@ -94,6 +94,7 @@ enum PROTOCOLS PROTO_FRSKY_R9 = 65, // =>SX1276 PROTO_PROPEL = 66, // =>NRF24L01 PROTO_FRSKYL = 67, // =>CC2500 + PROTO_SKYARTEC = 68, // =>CC2500 }; enum Flysky @@ -396,7 +397,7 @@ enum MultiPacketTypes //*** Tests *** //*************** #define IS_FAILSAFE_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_SFHSS || protocol==PROTO_WK2x01 || protocol== PROTO_HOTT || protocol==PROTO_FRSKYX || protocol==PROTO_FRSKYX2 ) -#define IS_CHMAP_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_SFHSS || protocol==PROTO_WK2x01 || protocol== PROTO_DSM || protocol==PROTO_SLT || protocol==PROTO_FLYSKY || protocol==PROTO_ESKY || protocol==PROTO_J6PRO || protocol==PROTO_PELIKAN ) +#define IS_CHMAP_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_SFHSS || protocol==PROTO_WK2x01 || protocol== PROTO_DSM || protocol==PROTO_SLT || protocol==PROTO_FLYSKY || protocol==PROTO_ESKY || protocol==PROTO_J6PRO || protocol==PROTO_PELIKAN || protocol==PROTO_SKYARTEC ) //*************** //*** Flags *** @@ -751,6 +752,8 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p -- FRSKYX2 64 FRSKY_R9 65 PROPEL 66 + FRSKYL 67 + SKYARTEC 68 BindBit=> 0x80 1=Bind/0=No AutoBindBit=> 0x40 1=Yes /0=No RangeCheck=> 0x20 1=Yes /0=No diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino index 330eb0c..03a91bf 100644 --- a/Multiprotocol/Multiprotocol.ino +++ b/Multiprotocol/Multiprotocol.ino @@ -529,6 +529,11 @@ void setup() option = FORCE_CORONA_TUNING; // Use config-defined tuning value for CORONA else #endif + #if defined(FORCE_SKYARTEC_TUNING) && defined(SKYARTEC_CC2500_INO) + if (protocol==PROTO_SKYARTEC) + option = FORCE_SKYARTEC_TUNING; // Use config-defined tuning value for SKYARTEC + else + #endif #if defined(FORCE_REDPINE_TUNING) && defined(REDPINE_CC2500_INO) if (protocol==PROTO_REDPINE) option = FORCE_REDPINE_TUNING; // Use config-defined tuning value for REDPINE @@ -1158,6 +1163,14 @@ static void protocol_init() remote_callback = ReadCORONA; break; #endif + #if defined(SKYARTEC_CC2500_INO) + case PROTO_SKYARTEC: + PE1_off; //antenna RF2 + PE2_on; + next_callback = initSKYARTEC(); + remote_callback = ReadSKYARTEC; + break; + #endif #if defined(REDPINE_CC2500_INO) case PROTO_REDPINE: PE1_off; //antenna RF2 @@ -1646,6 +1659,11 @@ void update_serial_data() option=FORCE_CORONA_TUNING; // Use config-defined tuning value for CORONA else #endif + #if defined(FORCE_SKYARTEC_TUNING) && defined(SKYARTEC_CC2500_INO) + if (protocol==PROTO_SKYARTEC) + option=FORCE_SKYARTEC_TUNING; // Use config-defined tuning value for SKYARTEC + else + #endif #if defined(FORCE_REDPINE_TUNING) && defined(REDPINE_CC2500_INO) if (protocol==PROTO_REDPINE) option=FORCE_REDPINE_TUNING; // Use config-defined tuning value for REDPINE diff --git a/Multiprotocol/Skyartec_cc2500.ino b/Multiprotocol/Skyartec_cc2500.ino new file mode 100644 index 0000000..84eb319 --- /dev/null +++ b/Multiprotocol/Skyartec_cc2500.ino @@ -0,0 +1,174 @@ +/* + 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 . + */ + +#if defined(SKYARTEC_CC2500_INO) + +#include "iface_cc2500.h" + +//#define SKYARTEC_FORCE_ID + +#define SKYARTEC_BIND_CHANNEL 0x7D +#define SKYARTEC_COARSE 0x00 +#define SKYARTEC_TX_ADDR rx_tx_addr[1] +#define SKYARTEC_TX_CHANNEL rx_tx_addr[0] + +enum { + SKYARTEC_PKT1 = 0, + SKYARTEC_SLEEP1, + SKYARTEC_PKT2, + SKYARTEC_SLEEP2, + SKYARTEC_PKT3, + SKYARTEC_SLEEP3, + SKYARTEC_PKT4, + SKYARTEC_SLEEP4, + SKYARTEC_PKT5, + SKYARTEC_SLEEP5, + SKYARTEC_PKT6, + SKYARTEC_LAST, +}; + +const PROGMEM uint8_t SKYARTEC_init_values[] = { + /* 04 */ 0x13, 0x18, 0xFF, 0x05, + /* 08 */ 0x05, 0x43, SKYARTEC_BIND_CHANNEL, 0x09, 0x00, 0x5D, 0x93, 0xB1 + SKYARTEC_COARSE, + /* 10 */ 0x2D, 0x20, 0x73, 0x22, 0xF8, 0x50, 0x07, 0x30, + /* 18 */ 0x18, 0x1D, 0x1C, 0xC7, 0x00, 0xB2, 0x87, 0x6B, + /* 20 */ 0xF8, 0xB6, 0x10, 0xEA, 0x0A, 0x00, 0x11, 0x41, + /* 28 */ 0x00, 0x59, 0x7F, 0x3F, 0x88, 0x31, 0x0B +}; + +static void __attribute__((unused)) SKYARTEC_rf_init() +{ + CC2500_Strobe(CC2500_SIDLE); + + for (uint8_t i = 4; i <= 0x2E; ++i) + CC2500_WriteReg(i, pgm_read_byte_near(&SKYARTEC_init_values[i-4])); + + prev_option = option; + CC2500_WriteReg(CC2500_0C_FSCTRL0, option); + + CC2500_SetTxRxMode(TX_EN); + CC2500_SetPower(); +} + +static void __attribute__((unused)) SKYARTEC_send_data_packet() +{ + //13 c5 01 0259 0168 0000 0259 030c 021a 0489 f3 7e 0a + //header + packet[0] = 0x13; //Length + packet[1] = SKYARTEC_TX_ADDR; //Tx Addr? + packet[2] = 0x01; //??? + //channels + for(uint8_t i = 0; i < 7; i++) + { + uint16_t value = convert_channel_16b_limit(CH_AETR[i],0x000,0x500); + packet[3+2*i] = value >> 8; + packet[4+2*i] = value & 0xff; + } + //checks + uint8_t xor1 = 0; + for(uint8_t i = 3; i <= 16; i++) + xor1 ^= packet[i]; + packet[17] = xor1; + uint8_t xor2 = 0; + for(uint8_t i = 3; i <= 14; i++) + xor2 ^= packet[i]; + packet[18] = xor2; + packet[19] = packet[3] + packet[5] + packet[7] + packet[9] + packet[11] + packet[13]; + + CC2500_WriteReg(CC2500_04_SYNC1, rx_tx_addr[3]); + CC2500_WriteReg(CC2500_05_SYNC0, rx_tx_addr[2]); + CC2500_WriteReg(CC2500_09_ADDR, SKYARTEC_TX_ADDR); + CC2500_WriteReg(CC2500_0A_CHANNR, SKYARTEC_TX_CHANNEL); + CC2500_WriteData(packet, 20); +} + +static void __attribute__((unused)) SKYARTEC_send_bind_packet() +{ + //0b 7d 01 01 b2 c5 4a 2f 00 00 c5 d6 + packet[0] = 0x0b; //Length + packet[1] = 0x7d; + packet[2] = 0x01; + packet[3] = 0x01; + memcpy(&packet[4], rx_tx_addr, 4); + packet[8] = 0x00; + packet[9] = 0x00; + packet[10] = SKYARTEC_TX_ADDR; + uint8_t xor1 = 0; + for(uint8_t i = 3; i < 11; i++) + xor1 ^= packet[i]; + packet[11] = xor1; + CC2500_WriteReg(CC2500_04_SYNC1, 0x7d); + CC2500_WriteReg(CC2500_05_SYNC0, 0x7d); + CC2500_WriteReg(CC2500_09_ADDR, 0x7d); + CC2500_WriteReg(CC2500_0A_CHANNR, SKYARTEC_BIND_CHANNEL); + CC2500_WriteData(packet, 12); +} + +uint16_t ReadSKYARTEC() +{ + if (phase & 0x01) + { + CC2500_Strobe(CC2500_SIDLE); + if (phase == SKYARTEC_LAST) + { + CC2500_SetPower(); + // Tune frequency if it has been changed + if ( prev_option != option ) + { + CC2500_WriteReg(CC2500_0C_FSCTRL0, option); + prev_option = option ; + } + phase = SKYARTEC_PKT1; + } + else + phase++; + return 3000; + } + if (phase == SKYARTEC_PKT1 && bind_counter) + { + SKYARTEC_send_bind_packet(); + bind_counter--; + if(bind_counter == 0) + BIND_DONE; + } + else + { + #ifdef MULTI_SYNC + telemetry_set_input_sync(6000); + #endif + SKYARTEC_send_data_packet(); + } + phase++; + return 3000; +} + +uint16_t initSKYARTEC() +{ + SKYARTEC_rf_init(); + + #ifdef SKYARTEC_FORCEID + memset(rx_tx_addr,0x00,4); + #endif + if(rx_tx_addr[0]==0) rx_tx_addr[0]=0xB2; + if(rx_tx_addr[1]==0) rx_tx_addr[1]=0xC5; + if(rx_tx_addr[2]==0) rx_tx_addr[2]=0x4A; + if(rx_tx_addr[3]==0) rx_tx_addr[3]=0x2F; + + bind_counter = 250; + phase = SKYARTEC_PKT1; + return 10000; +} + +#endif \ No newline at end of file diff --git a/Multiprotocol/Validate.h b/Multiprotocol/Validate.h index 3916001..f249354 100644 --- a/Multiprotocol/Validate.h +++ b/Multiprotocol/Validate.h @@ -99,6 +99,11 @@ #error "The HITEC forced frequency tuning value is outside of the range -127..127." #endif #endif +#ifdef FORCE_HOTT_TUNING + #if ( FORCE_HOTT_TUNING < -127 ) || ( FORCE_HOTT_TUNING > 127 ) + #error "The HOTT forced frequency tuning value is outside of the range -127..127." + #endif +#endif #ifdef FORCE_REDPINE_TUNING #if ( FORCE_REDPINE_TUNING < -127 ) || ( FORCE_REDPINE_TUNING > 127 ) #error "The REDPINE forced frequency tuning value is outside of the range -127..127." @@ -109,9 +114,9 @@ #error "The SFHSS forced frequency tuning value is outside of the range -127..127." #endif #endif -#ifdef FORCE_HOTT_TUNING - #if ( FORCE_HOTT_TUNING < -127 ) || ( FORCE_HOTT_TUNING > 127 ) - #error "The HOTT forced frequency tuning value is outside of the range -127..127." +#ifdef FORCE_SKYARTEC_TUNING + #if ( FORCE_SKYARTEC_TUNING < -127 ) || ( FORCE_SKYARTEC_TUNING > 127 ) + #error "The SKYARTEC forced frequency tuning value is outside of the range -127..127." #endif #endif //A7105 @@ -188,12 +193,12 @@ //Make sure protocols are selected correctly #ifndef A7105_INSTALLED - #undef FLYSKY_A7105_INO - #undef HUBSAN_A7105_INO #undef AFHDS2A_A7105_INO - #undef BUGS_A7105_INO - #undef FLYZONE_A7105_INO #undef AFHDS2A_RX_A7105_INO + #undef BUGS_A7105_INO + #undef FLYSKY_A7105_INO + #undef FLYZONE_A7105_INO + #undef HUBSAN_A7105_INO #undef PELIKAN_A7105_INO #endif #ifndef CYRF6936_INSTALLED @@ -201,62 +206,63 @@ #undef DSM_CYRF6936_INO #undef HOTT_CC2500_INO #undef J6PRO_CYRF6936_INO + #undef TRAXXAS_CYRF6936_INO #undef WFLY_CYRF6936_INO #undef WK2x01_CYRF6936_INO - #undef TRAXXAS_CYRF6936_INO #endif #ifndef CC2500_INSTALLED + #undef CORONA_CC2500_INO #undef FRSKYD_CC2500_INO #undef FRSKYL_CC2500_INO #undef FRSKYV_CC2500_INO #undef FRSKYX_CC2500_INO - #undef SFHSS_CC2500_INO - #undef CORONA_CC2500_INO - #undef REDPINE_CC2500_INO - #undef HITEC_CC2500_INO - #undef SCANNER_CC2500_INO #undef FRSKY_RX_CC2500_INO + #undef HITEC_CC2500_INO #undef HOTT_CC2500_INO + #undef REDPINE_CC2500_INO + #undef SCANNER_CC2500_INO + #undef SFHSS_CC2500_INO + #undef SKYARTEC_CC2500_INO #endif #ifndef NRF24L01_INSTALLED + #undef ASSAN_NRF24L01_INO #undef BAYANG_NRF24L01_INO + #undef BAYANG_RX_NRF24L01_INO + #undef BUGSMINI_NRF24L01_INO + #undef CABELL_NRF24L01_INO + #undef CFLIE_NRF24L01_INO #undef CG023_NRF24L01_INO #undef CX10_NRF24L01_INO + #undef DM002_NRF24L01_INO + #undef E01X_NRF24L01_INO #undef ESKY_NRF24L01_INO - #undef HISKY_NRF24L01_INO - #undef KF606_NRF24L01_INO - #undef KN_NRF24L01_INO - #undef SLT_NRF24L01_INO - #undef SYMAX_NRF24L01_INO - #undef V2X2_NRF24L01_INO - #undef YD717_NRF24L01_INO - #undef MT99XX_NRF24L01_INO - #undef MJXQ_NRF24L01_INO - #undef SHENQI_NRF24L01_INO + #undef ESKY150_NRF24L01_INO + #undef FQ777_NRF24L01_INO #undef FX816_NRF24L01_INO #undef FY326_NRF24L01_INO - #undef FQ777_NRF24L01_INO - #undef ASSAN_NRF24L01_INO - #undef HONTAI_NRF24L01_INO - #undef Q303_NRF24L01_INO - #undef GW008_NRF24L01_INO #undef GD00X_NRF24L01_INO - #undef DM002_NRF24L01_INO - #undef CABELL_NRF24L01_INO - #undef ESKY150_NRF24L01_INO + #undef GW008_NRF24L01_INO #undef H8_3D_NRF24L01_INO - #undef CFLIE_NRF24L01_INO - #undef BUGSMINI_NRF24L01_INO + #undef HISKY_NRF24L01_INO + #undef HONTAI_NRF24L01_INO + #undef KF606_NRF24L01_INO + #undef KN_NRF24L01_INO + #undef MJXQ_NRF24L01_INO + #undef MT99XX_NRF24L01_INO #undef NCC1701_NRF24L01_INO - #undef E01X_NRF24L01_INO + #undef POTENSIC_NRF24L01_INO + #undef PROPEL_NRF24L01_INO + #undef Q303_NRF24L01_INO + #undef SHENQI_NRF24L01_INO + #undef SLT_NRF24L01_INO + #undef SYMAX_NRF24L01_INO + #undef TIGER_NRF24L01_INO + #undef V2X2_NRF24L01_INO #undef V761_NRF24L01_INO #undef V911S_NRF24L01_INO - #undef POTENSIC_NRF24L01_INO - #undef ZSX_NRF24L01_INO - #undef BAYANG_RX_NRF24L01_INO - #undef TIGER_NRF24L01_INO #undef XK_NRF24L01_INO - #undef PROPEL_NRF24L01_INO + #undef YD717_NRF24L01_INO + #undef ZSX_NRF24L01_INO #endif #if not defined(STM32_BOARD) #undef SX1276_INSTALLED diff --git a/Multiprotocol/_Config.h b/Multiprotocol/_Config.h index 9ef2272..f65ead2 100644 --- a/Multiprotocol/_Config.h +++ b/Multiprotocol/_Config.h @@ -96,6 +96,7 @@ //#define FORCE_FRSKYV_TUNING 0 //#define FORCE_FRSKYX_TUNING 0 //#define FORCE_SFHSS_TUNING 0 +//#define FORCE_SKYARTEC_TUNING 0 //#define FORCE_HITEC_TUNING 0 //#define FORCE_HOTT_TUNING 0 //#define FORCE_REDPINE_TUNING 0 @@ -185,6 +186,7 @@ #define HOTT_CC2500_INO #define SCANNER_CC2500_INO #define SFHSS_CC2500_INO +#define SKYARTEC_CC2500_INO #define REDPINE_CC2500_INO //The protocols below need a NRF24L01 to be installed @@ -671,6 +673,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= { NONE PROTO_SHENQI NONE + PROTO_SKYARTEC + NONE PROTO_SLT SLT_V1 SLT_V2 diff --git a/Protocols_Details.md b/Protocols_Details.md index 9c48255..fcb4adb 100644 --- a/Protocols_Details.md +++ b/Protocols_Details.md @@ -118,8 +118,9 @@ CFlie|38|CFlie||||||||NRF24L01| [Q303](Protocols_Details.md#Q303---31)|31|Q303|CX35|CX10D|CX10WD|||||NRF24L01|XN297 [Redpine](Protocols_Details.md#Redpine---50)|50|FAST|SLOW|||||||NRF24L01| [Scanner](Protocols_Details.md#Scanner---54)|54|||||||||CC2500| -[SFHSS](Protocols_Details.md#SFHSS---21)|21|SFHSS||||||||CC2500| -[Shenqi](Protocols_Details.md#Shenqi---19)|19|Shenqi||||||||NRF24L01|LT8900 +[SFHSS](Protocols_Details.md#SFHSS---21)|21|||||||||CC2500| +[Shenqi](Protocols_Details.md#Shenqi---19)|19|||||||||NRF24L01|LT8900 +[Skyartec](Protocols_Details.md#Skyartec---68)|68|||||||||CC2500|CC2500 [SLT](Protocols_Details.md#SLT---11)|11|SLT_V1|SLT_V2|Q100|Q200|MR100||||NRF24L01| [SymaX](Protocols_Details.md#Symax---10)|10|SYMAX|SYMAX5C|||||||NRF24L01| [Tiger](Protocols_Details.md#Tiger---61)|61|Tiger||||||||NRF24L01|XN297 @@ -499,6 +500,9 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12 Basic telemetry is available on OpenTX 2.3.3+ with RX voltage, Rx temperature, RX RSSI, RX LQI, TX RSSI and TX LQI. Lowest the TX_LQI value is best the quality link is, it's a good indicator of how well the module is tuned. +## Scanner - *54* +2.4GHz scanner accessible using the OpenTX 2.3 Spectrum Analyser tool. + ## SFHSS - *21* Models: Futaba RXs and XK models. @@ -511,8 +515,14 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8 ---|---|---|---|---|---|---|--- A|E|T|R|CH5|CH6|CH7|CH8 -## Scanner - *54* -2.4GHz scanner accessible using the OpenTX 2.3 Spectrum Analyser tool. +## Skyartec - *68* + +Option for this protocol corresponds to fine frequency tuning. This value is different for each Module and **must** be accurate otherwise the link will not be stable. +Check the [Frequency Tuning page](/docs/Frequency_Tuning.md) to determine it. + +CH1|CH2|CH3|CH4|CH5|CH6|CH7 +---|---|---|---|---|---|--- +A|E|T|R|CH5|CH6|CH7 *** # CYRF6936 RF Module