diff --git a/CREDITS.txt b/CREDITS.txt index e229ec8e1..11971219f 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -2058,3 +2058,25 @@ Josef de Beer Chad Mofford Pim Pouw Kenth Jonsson +Gordon Westfall +Jean-Michel Saves +Roberto Orsello +Luboš Konvalinka +Lawrence Dorn +Michael Dittmann +Bernd Schmiedel +Raoul Piccioli +Uwe Probst +Glendon Satchell +Trevor Collins +Horst Grashauser +Miguel José Cárdenas Herrera +Mike Jennings +José Bernardo +Carlos Dangle +Gordon Evans +Pablo Peinado Abad +Carl Payne +Adam Sosnowski +Гасак Сергей +SaltCtyRacingFPV diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 35f7a0bab..82e645d05 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -191,7 +191,20 @@ SwitchInfo Boards::getSwitchInfo(Board::Type board, int index) if (index < DIM(switches)) return switches[index]; } - else if (IS_TARANIS_X7(board)) { + else if (board == BOARD_TARANIS_X7_ACCESS) { + const Board::SwitchInfo switches[] = { + {SWITCH_3POS, "SA"}, + {SWITCH_3POS, "SB"}, + {SWITCH_3POS, "SC"}, + {SWITCH_3POS, "SD"}, + {SWITCH_2POS, "SF"}, + {SWITCH_TOGGLE, "SH"}, + {SWITCH_2POS, "SI"} + }; + if (index < DIM(switches)) + return switches[index]; + } + else if (board == BOARD_TARANIS_X7) { const Board::SwitchInfo switches[] = { {SWITCH_3POS, "SA"}, {SWITCH_3POS, "SB"}, @@ -350,7 +363,9 @@ int Boards::getCapability(Board::Type board, Board::Capability capability) return 5; else if (board == Board::BOARD_TARANIS_X9LITES) return 7; - else if (IS_TARANIS_X7(board)) + else if (board == BOARD_TARANIS_X7_ACCESS) + return 7; + else if (board == BOARD_TARANIS_X7) return 8; else if (IS_FAMILY_T12(board)) return 8; diff --git a/companion/src/firmwares/moduledata.h b/companion/src/firmwares/moduledata.h index 550509a46..119f44eb8 100644 --- a/companion/src/firmwares/moduledata.h +++ b/companion/src/firmwares/moduledata.h @@ -141,8 +141,9 @@ enum MultiModuleRFProtocols { MODULE_SUBTYPE_MULTI_REALACC, MODULE_SUBTYPE_MULTI_OMP, MODULE_SUBTYPE_MULTI_MLINK, - MODULE_SUBTYPE_MULTI_WFLYRF, - MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_WFLYRF + MODULE_SUBTYPE_MULTI_WFLY2, + MODULE_SUBTYPE_MULTI_E016HV2, + MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_E016HV2 }; enum TrainerProtocol { diff --git a/companion/src/firmwares/multiprotocols.cpp b/companion/src/firmwares/multiprotocols.cpp index bc4fe4151..1aedbc7d5 100644 --- a/companion/src/firmwares/multiprotocols.cpp +++ b/companion/src/firmwares/multiprotocols.cpp @@ -90,10 +90,10 @@ static const QStringList STR_SUBTYPE_FRSKYL {"LR12", "LR12 6-Channel"}; static const QStringList STR_SUBTYPE_ESKY150V2 {"150 V2"}; static const QStringList STR_SUBTYPE_JJRC345 {"Standard", "SkyTumbler"}; static const QStringList STR_SUBTYPE_KYOSHO {"FHSS", "Hype"}; -static const QStringList STR_SUBTYPE_RLINK {"Surface", "Air"}; +static const QStringList STR_SUBTYPE_RLINK {"Surface", "Air", "DumboRC"}; static const QStringList STR_SUBTYPE_ELRS {"Not Available WIP"}; static const QStringList STR_SUBTYPE_REALACC {"R11"}; -static const QStringList STR_SUBTYPE_WFLYRF {"RF20x"}; +static const QStringList STR_SUBTYPE_WFLY2 {"RF20x"}; static const QStringList NO_SUBTYPE {STR_MULTI_DEFAULT}; @@ -159,11 +159,12 @@ const Multiprotocols multiProtocols { {MODULE_SUBTYPE_MULTI_JJRC345, 1, false, STR_SUBTYPE_JJRC345, nullptr}, {MODULE_SUBTYPE_MULTI_Q90C, 0, false, NO_SUBTYPE, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_KYOSHO, 1, false, STR_SUBTYPE_KYOSHO, nullptr}, - {MODULE_SUBTYPE_MULTI_RLINK, 1, false, STR_SUBTYPE_RLINK, STR_MULTI_RFTUNE}, + {MODULE_SUBTYPE_MULTI_RLINK, 2, false, STR_SUBTYPE_RLINK, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_ELRS, 0, false, STR_SUBTYPE_ELRS, nullptr}, {MODULE_SUBTYPE_MULTI_REALACC, 0, false, STR_SUBTYPE_REALACC, nullptr}, {MODULE_SUBTYPE_MULTI_OMP, 0, false, NO_SUBTYPE, STR_MULTI_RFTUNE}, - {MODULE_SUBTYPE_MULTI_WFLYRF, 0, false, STR_SUBTYPE_WFLYRF, nullptr}, + {MODULE_SUBTYPE_MULTI_WFLY2, 0, false, STR_SUBTYPE_WFLY2, STR_MULTI_OPTION}, + {MODULE_SUBTYPE_MULTI_E016HV2, 0, false, NO_SUBTYPE, STR_MULTI_RFTUNE}, {MM_RF_CUSTOM_SELECTED, 7, true, STR_SUBTYPE_CUSTOM, STR_MULTI_OPTION}, // Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff) @@ -208,7 +209,8 @@ QString Multiprotocols::protocolToString(int protocol, bool custom) "Hitec", "Wfly", "Bugs", "Bugs Mini", "Traxxas", "NCC-1701-A", "E01X", "WL Heli V911S", "GD00X", "Volantex V761", "KFPlan KF606", "Redpine", "Potensic", "ZSX", "Height", "Scanner", "FrSky RX", "FlySky AFHDS2A RX", "HoTT", "Fx816", "Bayang RX", "Pelikan", "Tiger", "XK", "XN297 Dump", "FrSky X 2.1", "FrSky R9", "Propel", "FrSky L", "Skyartec", - "ESky 150v2", "DSM RX", "JJRC345", "Q90C", "Kyosho", "RadioLink", "ExpressLRS", "Realacc", "OMP", "M-Link", "Wfly RF" + "ESky 150v2", "DSM RX", "JJRC345", "Q90C", "Kyosho", "RadioLink", "ExpressLRS", "Realacc", "OMP", "M-Link", "Wfly 2", + "E016H v2" }); return strings.value(protocol, CPN_STR_UNKNOWN_ITEM); diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index f6adcc563..264a3ad6a 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -48,6 +48,9 @@ inline int MAX_SWITCHES(Board::Type board, int version) if (IS_FAMILY_T12(board)) return 8; + if (IS_TARANIS_X7(board)) + return 8; + return Boards::getCapability(board, Board::Switches); } diff --git a/companion/src/translations/companion_fr.ts b/companion/src/translations/companion_fr.ts index 2adceee40..593231b91 100644 --- a/companion/src/translations/companion_fr.ts +++ b/companion/src/translations/companion_fr.ts @@ -1118,37 +1118,37 @@ Manche Droit: Profondeur, Direction <p> Le type de radio sélectionnée dans le profil n'existe pas. Utilisez plutôt le type par défaut. </p> <p><b>Veuillez mettre à jour les paramètres de votre profil!</b></p> - + Select or create a file for exported Settings: Sélectionnez ou créez un fichier pour les paramètres exportés: - + Press the 'Retry' button to choose another file. Appuyez sur le bouton 'Réessayer' pour choisir un autre fichier. - + Simulator for this firmware is not yet available Le simulateur n'est pas encore disponible pour ce firmware - + Uknown error during Simulator startup. Erreur inconnue pendant le démarrage du simulateur. - + Simulator Error Erreur Simulateur - + Data Load Error Erreur de chargement des données - + Error occurred while starting simulator. Une erreur s'est produite lors du démarrage du simulateur. @@ -1722,108 +1722,103 @@ Si vous avez un fichier de sauvegarde des paramètres, vous pouvez l'import - SetFailsafe Int. Module - Définir failsafe module interne + Set Failsafe + Définir Failsafe - SetFailsafe Ext. Module - Définir failsafe module externe - - - RangeCheck Int. Module Test portée module interne - + RangeCheck Ext. Module Test portée module externe - + Bind Int. Module Bind module interne - + Bind Ext. Module Bind module externe - + Timer1 Chrono 1 - + Timer2 Chrono 2 - + Timer3 Chrono 3 - + Flight Vol - + Telemetry Télémétrie - + Rotary Encoder Sélecteur Rotatif - + REa - + REb - + s - - - + + + <font color=red><b>Inconsistent parameter</b></font> <font color=red><b>Paramètre inconsistant</b></font> - + Value Valeur - + played once, not during startup !1x Lu une fois, mais pas à la mise en route - + repeat(%1s) Répéter chaque %1s - + DISABLED DESACTIVE - + CFN FPN @@ -2166,13 +2161,13 @@ Si vous avez un fichier de sauvegarde des paramètres, vous pouvez l'import OpenTX n'accepte que %1 points au maximum entre toutes les courbes - - + + OpenTX on this board doesn't accept this function OpenTX ne supporte pas cette fonction sur cette carte - + OpenTX doesn't accept this radio protocol OpenTX ne supporte pas ce protocole radio @@ -4119,12 +4114,12 @@ p, li { white-space: pre-wrap; } VG - + Own value Valeur indépendante - + Flight mode %1 value Valeur de la phase de vol %1 @@ -5330,7 +5325,7 @@ Cette fonction ne peut pas être désactivée sur la radio. S.Port Power - + Alimentation S.Port @@ -5714,159 +5709,159 @@ Cette fonction ne peut pas être désactivée sur la radio. InputsPanel - - - + + + Move Up Monter - - + + Ctrl+Up Ctrl+Haut - - - + + + Move Down Descendre - - + + Ctrl+Down Ctrl+Bas - + Clear All Inputs Effacer toutes les entrées - + Not enough available Inputs! Pas assez d'Entrées disponibles! - + Delete selected Input lines. Are you sure? Supprimer les lignes Entrée sélectionnées. Êtes-vous sûr? - + Cut selected Input lines. Are you sure? Couper les lignes Entrée sélectionnées. Êtes-vous sûr? - + Lines Linéaire - + &Add &Ajouter - + Ctrl+A Ctrl+A - + &Edit &Édition - + Enter Entrée - + &Delete &Supprimer - - + + Delete Supprimer - + &Copy &Copier - + Ctrl+C - + &Cut &Couper - + Ctrl+X - + &Paste &Coller - + Ctrl+V - + Du&plicate Du&pliquer - + Ctrl+U - + Input Entrée - + Insert Insérer - + Clear Effacer - + Clear All Effacer Tout - + Clear all Input lines. Are you sure? Effacer toutes les lignes Entrée. Êtes-vous sûr? - + Clear all lines for the selected Inputs. Are you sure? Effacer toutes les lignes Entrée sélectionnées. Êtes-vous sûr? - + Delete all lines for the selected Inputs. Are you sure? Supprimer toutes les lignes Entrée sélectionnées. Êtes-vous sûr? @@ -7921,136 +7916,136 @@ Mixage actif par défaut si non-renseigné. MixesPanel - - + + Move Up Monter - - + + Ctrl+Up Ctrl+Haut - - + + Move Down Descendre - - + + Ctrl+Down Ctrl+Bas - + Clear Mixes Effacer tous les mixages - + Not enough available mixers! Plus de mixages disponibles ! - + Delete selected Mix lines. Are you sure? Supprimer les lignes Mixeur sélectionnées. Êtes-vous sûr? - + Cut selected Mix lines. Are you sure? Couper les lignes Mixeur sélectionnées. Êtes-vous sûr? - + &Add &Ajouter - + Ctrl+A - + &Edit &Édition - + Enter Entrée - + Ctrl+T - + &Toggle highlight &(Dé)sélectionner - + &Delete &Supprimer - + Delete Supprimer - + &Copy &Copier - + Ctrl+C - + Ctrl+X - + C&ut &Couper - + &Paste &Coller - + Ctrl+V - + Du&plicate &Dupliquer - + Ctrl+U - + Clear Mixes? Effacer tous les mixages ? - + Really clear all the mixes? Êtes-vous sûr de vraiment vouloir effacer tous les mixages ? @@ -8134,231 +8129,246 @@ Mixage actif par défaut si non-renseigné. ModelPrinter - + Exponential Exponentiel - + Extra Fine Extra fin - + Fine Fin - + Medium Moyen - + Coarse Grossier - + Unknown Inconnu - + Slave/Jack Elève/Jack - + Master/SBUS Module Maître/SBUS module - + Master/CPPM Module Maître/CPPM Module - + Master/SBUS in battery compartment Maître/SBUS compartiment batterie - + Master/Jack Maître/Jack - + Enable Actif - + Disable Désactiver - + True Vrai - + False Faux - + Yes Oui - + No Non - + ON - - + + OFF - + bytes - + Mode - - + + Channels Nombre de voies - - + + Frame length Longueur de Trame PPM - + PPM delay Impulsion - - + + Polarity Polarité - + Protocol Protocole - - + Delay Délai - + Receiver Récepteur - + Radio protocol Protocole radio - + Subtype Sous-type - + Option value Valeur optionnelle - + Sub Type Sous-Type - - + + RF Output Power Puissance RF - + Output Type Type de sortie - + RX Output Frequency Fréquence de sortie du RX - + 90 - + 120 - + 120X - + 140 + + + + Weight(%1) + Ratio(%1) + + + + + Switch(%1) + Inter(%1) + MULT! - - - Offset - Décalage + + Delay(u%1:d%2) + Délai(h%1:b%2) - Slow - Ralenti + Slow(u%1:d%2) + Ralenti(h%1:b%2) - Warn - Attn + Warn(%1) + Alerte(%1) + + + + Offset + Décalage @@ -8680,22 +8690,22 @@ Mixage actif par défaut si non-renseigné. Auto Offset - Offset auto + Offset Auto 0. - + 0.0 - + 0.00 - + @@ -8804,17 +8814,17 @@ Mixage actif par défaut si non-renseigné. Erreur: Impossible d'ouvrir ou de lire le fichier! - + Persistent Persistant - + Off - + @@ -8824,51 +8834,39 @@ Mixage actif par défaut si non-renseigné. Aucun - + Name Nom - + Countdown Compte à rebours - + Minute call Annonces minutes - - - + + + FM%1 PV%1 - + FM%1%2 PV%1%2 - + FM%1+%2 PV%1+%2 - - - Weight - Ratio - - - - - Switch - Inter - - - + NoTrim Pas de trim @@ -8879,17 +8877,18 @@ Mixage actif par défaut si non-renseigné. Pas d'expo/DR - + + Offset(%1) Décalage(%1) - + Y O - + N @@ -9209,12 +9208,12 @@ Mixage actif par défaut si non-renseigné. ModuleData - + Positive - + Negative Négative @@ -9994,12 +9993,12 @@ Mixage actif par défaut si non-renseigné. QObject - + WARNING ATTENTION - + <p>Importing JumperTX data into OpenTX 2.3 is <b>not supported and dangerous.</b></p> <p>It is unfortunately not possible for us to differentiate JumperTX data from legitimate FrSky X10 data, but <b>You should only continue here if the file you opened comes from a real FrSky X10.</b></p> <p>Do you really want to continue?</p> <p>L'importation de données JumperTX dans OpenTX 2.3 est <b> non prise en charge et dangereuse.</b></p> <p>Il n'est malheureusement pas possible pour nous de différencier les données JumperTX des données légitimes FrSky X10, donc <b>Vous devez continuer uniquement si le fichier que vous avez ouvert provient d’une véritable radio FrSky X10.</b></p> <p>Voulez-vous vraiment continuer?</p> @@ -10924,7 +10923,7 @@ E Throttle trim switch - + Inter trim gaz diff --git a/radio/sdcard/horus/SCRIPTS/TOOLS/crossfire.lua b/radio/sdcard/horus/SCRIPTS/TOOLS/crossfire.lua index 0f9b1a20f..b19bb5ee2 100644 --- a/radio/sdcard/horus/SCRIPTS/TOOLS/crossfire.lua +++ b/radio/sdcard/horus/SCRIPTS/TOOLS/crossfire.lua @@ -30,6 +30,11 @@ local function run(event) return 2 end + if crossfireTelemetryPush() == nil then + error("Crossfire not available!") + return 2 + end + chdir("/SCRIPTS/TOOLS/CROSSFIRE") return "crossfire.lua" end diff --git a/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/crossfire.lua b/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/crossfire.lua index debf9056d..3e8a6930a 100644 --- a/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/crossfire.lua +++ b/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/crossfire.lua @@ -30,6 +30,11 @@ local function run(event) return 2 end + if crossfireTelemetryPush() == nil then + error("Crossfire not available!") + return 2 + end + chdir("/SCRIPTS/TOOLS/CROSSFIRE") return "crossfire.lua" end diff --git a/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/crossfire.lua b/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/crossfire.lua index 0f9b1a20f..b19bb5ee2 100644 --- a/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/crossfire.lua +++ b/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/crossfire.lua @@ -30,6 +30,11 @@ local function run(event) return 2 end + if crossfireTelemetryPush() == nil then + error("Crossfire not available!") + return 2 + end + chdir("/SCRIPTS/TOOLS/CROSSFIRE") return "crossfire.lua" end diff --git a/radio/src/gui/480x272/topbar.cpp b/radio/src/gui/480x272/topbar.cpp index f78174aa8..e8027d047 100644 --- a/radio/src/gui/480x272/topbar.cpp +++ b/radio/src/gui/480x272/topbar.cpp @@ -61,6 +61,11 @@ void drawTopBar() lcdDrawBitmapPattern(LCD_W-98, 8, LBM_TOPMENU_USB, MENU_TITLE_COLOR); } + // Logs + if (isFunctionActive(FUNCTION_LOGS) && !usbPlugged() && BLINK_ON_PHASE) { + lcdDrawBitmapPattern(LCD_W-98, 6, LBM_DOT, MENU_TITLE_COLOR); + } + // RSSI const uint8_t rssiBarsValue[] = {30, 40, 50, 60, 80}; const uint8_t rssiBarsHeight[] = {5, 10, 15, 21, 31}; diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 1d856b6f7..368aac163 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -554,7 +554,7 @@ bool isPxx2IsrmChannelsCountAllowed(int channels) bool isTrainerUsingModuleBay() { #if defined(PCBTARANIS) - if (TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE <= g_model.trainerData.mode && g_model.trainerData.mode <= TRAINER_MODE_MASTER_BATTERY_COMPARTMENT) + if (TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE <= g_model.trainerData.mode && g_model.trainerData.mode <= TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) return true; #endif return false; @@ -979,10 +979,10 @@ const char STR_SUBTYPE_FRSKYL[] = "\010""LR12\0 ""LR12 6ch"; const char STR_SUBTYPE_ESKY150V2[] = "\006""150 V2"; const char STR_SUBTYPE_JJRC345[] = "\007""Std\0 ""SkyTmbr"; const char STR_SUBTYPE_KYOSHO[] = "\004""FHSS""Hype"; -const char STR_SUBTYPE_RLINK[] = "\007""Surface""Air\0 "; +const char STR_SUBTYPE_RLINK[] = "\007""Surface""Air\0 ""DumboRC"; const char STR_SUBTYPE_ELRS[] = "\007""N/A WIP"; const char STR_SUBTYPE_REALACC[] = "\003""R11"; -const char STR_SUBTYPE_WFLYRF[] = "\005""RF20x"; +const char STR_SUBTYPE_WFLY2[] = "\005""RF20x"; const char* mm_options_strings::options[] = { nullptr, @@ -1045,7 +1045,7 @@ const mm_protocol_definition multi_protocols[] = { {MODULE_SUBTYPE_MULTI_FRSKYX_RX, 1, false, false, STR_SUBTYPE_FRSKYX_RX, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_HOTT, 1, true, false, STR_SUBTYPE_HOTT, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_FX816, 0, false, false, STR_SUBTYPE_FX816, nullptr}, - {MODULE_SUBTYPE_MULTI_PELIKAN, 1, false, false, STR_SUBTYPE_PELIKAN, nullptr}, + {MODULE_SUBTYPE_MULTI_PELIKAN, 1, false, true, STR_SUBTYPE_PELIKAN, nullptr}, {MODULE_SUBTYPE_MULTI_XK, 1, false, false, STR_SUBTYPE_XK, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_XN297DUMP, 4, false, false, STR_SUBTYPE_XN297DUMP, STR_MULTI_RFCHAN}, {MODULE_SUBTYPE_MULTI_FRSKYX2, 5, true, false, STR_SUBTYPE_FRSKYX2, STR_MULTI_RFTUNE}, @@ -1057,11 +1057,12 @@ const mm_protocol_definition multi_protocols[] = { {MODULE_SUBTYPE_MULTI_JJRC345, 1, false, false, STR_SUBTYPE_JJRC345, nullptr}, {MODULE_SUBTYPE_MULTI_Q90C, 0, false, false, NO_SUBTYPE, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_KYOSHO, 1, false, true, STR_SUBTYPE_KYOSHO, nullptr}, - {MODULE_SUBTYPE_MULTI_RLINK, 1, false, false, STR_SUBTYPE_RLINK, STR_MULTI_RFTUNE}, + {MODULE_SUBTYPE_MULTI_RLINK, 2, false, false, STR_SUBTYPE_RLINK, STR_MULTI_RFTUNE}, {MODULE_SUBTYPE_MULTI_ELRS, 0, false, false, STR_SUBTYPE_ELRS, nullptr}, {MODULE_SUBTYPE_MULTI_REALACC, 0, false, false, STR_SUBTYPE_REALACC, nullptr}, {MODULE_SUBTYPE_MULTI_OMP, 0, false, false, NO_SUBTYPE, STR_MULTI_RFTUNE}, - {MODULE_SUBTYPE_MULTI_WFLYRF, 0, false, false, STR_SUBTYPE_WFLYRF, nullptr}, + {MODULE_SUBTYPE_MULTI_WFLY2, 0, false, false, STR_SUBTYPE_WFLY2, STR_MULTI_OPTION}, + {MODULE_SUBTYPE_MULTI_E016HV2, 0, false, false, NO_SUBTYPE, STR_MULTI_RFTUNE}, {MM_RF_CUSTOM_SELECTED, 7, true, true, NO_SUBTYPE, STR_MULTI_OPTION}, // Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff) diff --git a/radio/src/pulses/modules_constants.h b/radio/src/pulses/modules_constants.h index 8ff0ea756..15a2c2283 100644 --- a/radio/src/pulses/modules_constants.h +++ b/radio/src/pulses/modules_constants.h @@ -178,8 +178,9 @@ enum ModuleSubtypeMulti { MODULE_SUBTYPE_MULTI_REALACC, MODULE_SUBTYPE_MULTI_OMP, MODULE_SUBTYPE_MULTI_MLINK, //75 - MODULE_SUBTYPE_MULTI_WFLYRF, - MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_WFLYRF + MODULE_SUBTYPE_MULTI_WFLY2, + MODULE_SUBTYPE_MULTI_E016HV2, + MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_E016HV2 }; #define MODULE_SUBTYPE_MULTI_XN297DP 63-3 diff --git a/radio/src/targets/common/arm/CMakeLists.txt b/radio/src/targets/common/arm/CMakeLists.txt index 64e998597..16169ff24 100644 --- a/radio/src/targets/common/arm/CMakeLists.txt +++ b/radio/src/targets/common/arm/CMakeLists.txt @@ -217,12 +217,8 @@ set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} keys_driver.cpp diskio.cpp -) - -set(TARGET_SRC - ${TARGET_SRC} telemetry_driver.cpp - ) +) set(FIRMWARE_SRC ${FIRMWARE_SRC} diff --git a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp index d88c32610..b2c528dc0 100644 --- a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp @@ -128,7 +128,7 @@ void auxSerialInit(unsigned int mode, unsigned int protocol) break; case UART_MODE_SBUS_TRAINER: - auxSerialSetup(SBUS_BAUDRATE, false, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b + auxSerialSetup(SBUS_BAUDRATE, true, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b AUX_SERIAL_POWER_ON(); break; @@ -213,10 +213,6 @@ extern "C" void AUX_SERIAL_USART_IRQHandler(void) #if defined(LUA) & !defined(CLI) if (luaRxFifo && auxSerialMode == UART_MODE_LUA) luaRxFifo->push(data); -#endif -#if !defined(BOOT) - if (auxSerialMode == UART_MODE_SBUS_TRAINER) - trainerSbusFifo.push(data); #endif } status = AUX_SERIAL_USART->SR; @@ -328,7 +324,7 @@ void aux2SerialInit(unsigned int mode, unsigned int protocol) break; case UART_MODE_SBUS_TRAINER: - aux2SerialSetup(SBUS_BAUDRATE, false, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b + aux2SerialSetup(SBUS_BAUDRATE, true, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b AUX2_SERIAL_POWER_ON(); break; @@ -415,11 +411,6 @@ extern "C" void AUX2_SERIAL_USART_IRQHandler(void) if (luaRxFifo && aux2SerialMode == UART_MODE_LUA) { luaRxFifo->push(data); } -#endif -#if !defined(BOOT) - if (aux2SerialMode == UART_MODE_SBUS_TRAINER) { - trainerSbusFifo.push(data); - } #endif } status = AUX2_SERIAL_USART->SR; diff --git a/radio/src/targets/common/arm/stm32/usbd_desc.c b/radio/src/targets/common/arm/stm32/usbd_desc.c index 527a6c0f5..c43359c8a 100644 --- a/radio/src/targets/common/arm/stm32/usbd_desc.c +++ b/radio/src/targets/common/arm/stm32/usbd_desc.c @@ -54,29 +54,32 @@ * @{ */ -#define USBD_VID 0x0483 +#define USBD_VID_STM 0x0483 // STM Vendor ID +#define USBD_VID_PID_CODES 0x1209 // https://pid.codes #define USBD_LANGID_STRING 0x409 -#define USBD_MANUFACTURER_STRING "FrSky" +#define USBD_MANUFACTURER_STRING "OpenTX" #define USBD_SERIALNUMBER_FS_STRING "00000000001B" - #if defined(BOOT) #define USBD_MSC_PRODUCT_FS_STRING USB_NAME " Bootloader" #else #define USBD_MSC_PRODUCT_FS_STRING USB_NAME " Mass Storage" #endif +#define USBD_MSC_VID USBD_VID_STM #define USBD_MSC_PID 0x5720 #define USBD_MSC_CONFIGURATION_FS_STRING "MSC Config" #define USBD_MSC_INTERFACE_FS_STRING "MSC Interface" -#define USBD_HID_PID 0x5710 +#define USBD_HID_VID USBD_VID_PID_CODES +#define USBD_HID_PID 0x4F54 // OpenTX assigned PID #define USBD_HID_PRODUCT_FS_STRING USB_NAME " Joystick" #define USBD_HID_CONFIGURATION_FS_STRING "HID Config" #define USBD_HID_INTERFACE_FS_STRING "HID Interface" -#define USBD_CDC_PID 0x5740 // do not change, this ID is used by the ST USB driver for Windows +#define USBD_CDC_VID USBD_VID_STM +#define USBD_CDC_PID 0x5740 // do not change, this ID is used by the ST USB driver for Windows #define USBD_CDC_PRODUCT_FS_STRING USB_NAME " Serial Port" #define USBD_CDC_CONFIGURATION_FS_STRING "VSP Config" #define USBD_CDC_INTERFACE_FS_STRING "VSP Interface" @@ -126,20 +129,29 @@ __ALIGN_BEGIN uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ] __ALIGN_END ; // modifi * @param length : pointer to data length variable * @retval pointer to descriptor buffer */ -uint8_t * USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length) +uint8_t * USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length) { - int pid=0; + int vid, pid; switch (getSelectedUsbMode()) { case USB_JOYSTICK_MODE: + vid = USBD_HID_VID; pid = USBD_HID_PID; break; + case USB_SERIAL_MODE: + vid = USBD_CDC_VID; pid = USBD_CDC_PID; break; + case USB_MASS_STORAGE_MODE: + vid = USBD_MSC_VID; pid = USBD_MSC_PID; break; + + default: + vid = 0; + pid = 0; } /* USB Standard Device Descriptor */ @@ -153,10 +165,10 @@ uint8_t * USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length) 0x00, /*bDeviceSubClass*/ 0x00, /*bDeviceProtocol*/ USB_OTG_MAX_EP0_SIZE, /*bMaxPacketSize*/ - LOBYTE(USBD_VID), /*idVendor*/ - HIBYTE(USBD_VID), /*idVendor*/ - LOBYTE(pid), /*idVendor*/ - HIBYTE(pid), /*idVendor*/ + LOBYTE(vid), /*idVendor*/ + HIBYTE(vid), /*idVendor*/ + LOBYTE(pid), /*idVendor*/ + HIBYTE(pid), /*idVendor*/ 0x00, /*bcdDevice rel. 2.00*/ 0x02, USBD_IDX_MFC_STR, /*Index of manufacturer string*/ diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index f1c47ab9f..6831fdd8a 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -710,6 +710,7 @@ void bluetoothDisable(); extern DMAFifo<512> telemetryFifo; typedef DMAFifo<32> AuxSerialRxFifo; extern AuxSerialRxFifo auxSerialRxFifo; +extern AuxSerialRxFifo aux2SerialRxFifo; extern volatile uint32_t externalModulePort; #endif diff --git a/radio/src/targets/horus/trainer_driver.cpp b/radio/src/targets/horus/trainer_driver.cpp index a4f0c7b6b..ce649c688 100644 --- a/radio/src/targets/horus/trainer_driver.cpp +++ b/radio/src/targets/horus/trainer_driver.cpp @@ -160,9 +160,16 @@ extern "C" void TRAINER_TIMER_IRQHandler() int sbusGetByte(uint8_t * byte) { switch (currentTrainerMode) { -#if defined(AUX_SERIAL) +#if defined(AUX_SERIAL) || defined(AUX2_SERIAL) case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: - return trainerSbusFifo.pop(*byte); +#if defined(AUX_SERIAL) + if (auxSerialMode == UART_MODE_SBUS_TRAINER) + return auxSerialRxFifo.pop(*byte); +#endif +#if defined(AUX2_SERIAL) + if (aux2SerialMode == UART_MODE_SBUS_TRAINER) + return aux2SerialRxFifo.pop(*byte); +#endif #endif default: return false; diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index fa0122175..8376d786c 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -42,6 +42,8 @@ char * main_thread_error = nullptr; bool simu_shutdown = false; bool simu_running = false; +uint32_t telemetryErrors = 0; + #if defined(STM32) GPIO_TypeDef gpioa, gpiob, gpioc, gpiod, gpioe, gpiof, gpiog, gpioh, gpioi, gpioj; TIM_TypeDef tim1, tim2, tim3, tim4, tim5, tim6, tim7, tim8, tim9, tim10; @@ -441,6 +443,47 @@ void sportUpdatePowerInit() { } +void telemetryPortSetDirectionInput() +{ +} + +void telemetryPortSetDirectionOutput() +{ +} + +void rxPdcUsart( void (*pChProcess)(uint8_t x) ) +{ +} + +void telemetryPortInit(uint32_t baudrate, uint8_t mode) +{ +} + +bool telemetryGetByte(uint8_t * byte) +{ + return false; +} + +void telemetryClearFifo() +{ +} + +void telemetryPortInvertedInit(uint32_t baudrate) +{ +} + +void sportSendByte(uint8_t byte) +{ +} + +void sportSendBuffer(const uint8_t * buffer, uint32_t count) +{ +} + +void check_telemetry_exti() +{ +} + void boardInit() { } diff --git a/radio/src/targets/sky9x/CMakeLists.txt b/radio/src/targets/sky9x/CMakeLists.txt index 181b5ab85..842035bde 100644 --- a/radio/src/targets/sky9x/CMakeLists.txt +++ b/radio/src/targets/sky9x/CMakeLists.txt @@ -122,9 +122,13 @@ set(FIRMWARE_TARGET_SRC MEDSdcard.c ) +set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + telemetry_driver.cpp + ) + set(TARGET_SRC ${TARGET_SRC} - telemetry_driver.cpp adc_driver.cpp pulses_driver.cpp audio_driver.cpp diff --git a/radio/src/targets/sky9x/board.h b/radio/src/targets/sky9x/board.h index 0a6aef20d..ca7e23acd 100644 --- a/radio/src/targets/sky9x/board.h +++ b/radio/src/targets/sky9x/board.h @@ -395,13 +395,8 @@ void debugPutc(const char c); // Telemetry driver void telemetryPortInit(uint32_t baudrate, uint8_t mode); -inline void telemetryPortSetDirectionOutput() -{ -} -inline void telemetryPortSetDirectionInput() -{ -} -uint32_t telemetryTransmitPending(); +void telemetryPortSetDirectionOutput(); +void telemetryPortSetDirectionInput(); void telemetryTransmitBuffer(const uint8_t * buffer, uint32_t size); void rxPdcUsart( void (*pChProcess)(uint8_t x) ); void sportSendBuffer(const uint8_t * buffer, uint32_t size); diff --git a/radio/src/targets/sky9x/telemetry_driver.cpp b/radio/src/targets/sky9x/telemetry_driver.cpp index 4875c5d35..8efa83951 100644 --- a/radio/src/targets/sky9x/telemetry_driver.cpp +++ b/radio/src/targets/sky9x/telemetry_driver.cpp @@ -93,10 +93,8 @@ void startPdcUsartReceive() { Usart *pUsart = SECOND_USART; TelemetryInBuffer.outPtr = TelemetryInBuffer.fifo ; -#ifndef SIMU pUsart->US_RPR = (uint32_t)TelemetryInBuffer.fifo ; pUsart->US_RNPR = (uint32_t)TelemetryInBuffer.fifo ; -#endif pUsart->US_RCR = RX_UART_BUFFER_SIZE ; pUsart->US_RNCR = RX_UART_BUFFER_SIZE ; pUsart->US_PTCR = US_PTCR_RXTEN ; @@ -104,7 +102,6 @@ void startPdcUsartReceive() void rxPdcUsart( void (*pChProcess)(uint8_t x) ) { -#if !defined(SIMU) Usart *pUsart = SECOND_USART; uint8_t *ptr ; uint8_t *endPtr ; @@ -132,7 +129,6 @@ void rxPdcUsart( void (*pChProcess)(uint8_t x) ) pUsart->US_RNPR = (uint32_t)TelemetryInBuffer.fifo ; pUsart->US_RNCR = RX_UART_BUFFER_SIZE ; } -#endif } uint32_t txPdcUsart(const uint8_t * buffer, uint32_t size) @@ -140,9 +136,7 @@ uint32_t txPdcUsart(const uint8_t * buffer, uint32_t size) Usart * pUsart = SECOND_USART; if (pUsart->US_TNCR == 0) { -#ifndef SIMU pUsart->US_TNPR = (uint32_t)buffer ; -#endif pUsart->US_TNCR = size ; pUsart->US_PTCR = US_PTCR_TXTEN ; return 1 ; @@ -150,6 +144,7 @@ uint32_t txPdcUsart(const uint8_t * buffer, uint32_t size) return 0 ; } +/* uint32_t telemetryTransmitPending() { Usart *pUsart = SECOND_USART; @@ -164,13 +159,20 @@ uint32_t telemetryTransmitPending() return x ; } +*/ + +void telemetryPortSetDirectionOutput() +{ +} + +void telemetryPortSetDirectionInput() +{ +} void telemetryPortInit(uint32_t baudrate, uint8_t mode) { -#if !defined(SIMU) UART2_Configure(baudrate, Master_frequency, mode); startPdcUsartReceive(); -#endif } void sportSendBuffer(const uint8_t * buffer, uint32_t size) diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 5c5b1181c..17777dc6a 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -326,7 +326,7 @@ void telemetryInit(uint8_t protocol) } #endif -#if defined(AFHDS3) && !defined(SIMU) +#if defined(AFHDS3) else if (protocol == PROTOCOL_TELEMETRY_AFHDS3) { telemetryPortInvertedInit(AFHDS3_BAUDRATE); telemetryPortSetDirectionInput(); diff --git a/radio/src/trainer.cpp b/radio/src/trainer.cpp index 6c6bc7b79..c4c3c0c4f 100644 --- a/radio/src/trainer.cpp +++ b/radio/src/trainer.cpp @@ -26,8 +26,8 @@ uint8_t currentTrainerMode = 0xff; void checkTrainerSignalWarning() { - enum PpmInValidState_t { - PPM_IN_IS_NOT_USED=0, + enum { + PPM_IN_IS_NOT_USED = 0, PPM_IN_IS_VALID, PPM_IN_INVALID }; @@ -137,17 +137,20 @@ void checkTrainerSettings() #if defined(TRAINER_BATTERY_COMPARTMENT) case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: #if defined(AUX_SERIAL) - if (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER) + if (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER) { auxSerialSbusInit(); - else + break; + } #endif + #if defined(AUX2_SERIAL) - if (g_eeGeneral.aux2SerialMode == UART_MODE_SBUS_TRAINER) + if (g_eeGeneral.aux2SerialMode == UART_MODE_SBUS_TRAINER) { aux2SerialSbusInit(); - else + break; + } #endif - init_trainer_capture(); - break; + + // no break #endif case TRAINER_MODE_MASTER_TRAINER_JACK: diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 8212ce84d..edfcee741 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -1142,6 +1142,10 @@ #define TR_ABOUT_HARDWARE_2 "Proucent/projektant Hardware" #define TR_ABOUT_HARDWARE_3 "Współautor firmware" #else + #define TR_ABOUT_HARDWARE_1 "Brent Nelson" + #define TR_ABOUT_HARDWARE_2 "Sky9x designer/výrobce" + #define TR_ABOUT_HARDWARE_3 "" +#endif #define TR_ABOUT_PARENTS_1 "Projekty macierzyste" #define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index fedc875c0..e0e6f4bef 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -128,7 +128,7 @@ #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define LEN_MULTI_PROTOCOLS "\007" -#define TR_MULTI_PROTOCOLS "FlySky\0""Hubsan\0""FrSky\0 ""Hisky\0 ""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0 ""KN\0 ""SymaX\0 ""SLT\0 ""CX10\0 ""CG023\0 ""Bayang\0""ESky\0 ""MT99XX\0""MJXq\0 ""Shenqi\0""FY326\0 ""Futaba\0""J6 Pro\0""FQ777\0 ""Assan\0 ""Hontai\0""OpenLrs""FlSky2A""Q2x2\0 ""Walkera""Q303\0 ""GW008\0 ""DM002\0 ""Cabell\0""Esky150""H8 3D\0 ""Corona\0""CFlie\0 ""Hitec\0 ""WFly\0 ""Bugs\0 ""BugMini""Traxxas""NCC1701""E01X\0 ""V911S\0 ""GD00X\0 ""V761\0 ""KF606\0 ""Redpine""Potensi""ZSX\0 ""Height\0""Scanner""FrSkyRX""FS2A_RX""HoTT\0 ""FX816\0 ""BayanRX""Pelikan""Tiger\0 ""XK\0 ""XN297DU""FrSkyX2""FrSkyR9""Propel\0""FrSkyL\0""Skyartc""ESky-v2""DSM RX\0""JJRC345""Q90C\0 ""Kyosho\0""RadLink""ExpLRS\0""Realacc""OMP\0 ""M-Link\0""Wfly-RF" +#define TR_MULTI_PROTOCOLS "FlySky\0""Hubsan\0""FrSky\0 ""Hisky\0 ""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0 ""KN\0 ""SymaX\0 ""SLT\0 ""CX10\0 ""CG023\0 ""Bayang\0""ESky\0 ""MT99XX\0""MJXq\0 ""Shenqi\0""FY326\0 ""Futaba\0""J6 Pro\0""FQ777\0 ""Assan\0 ""Hontai\0""OpenLrs""FlSky2A""Q2x2\0 ""Walkera""Q303\0 ""GW008\0 ""DM002\0 ""Cabell\0""Esky150""H8 3D\0 ""Corona\0""CFlie\0 ""Hitec\0 ""WFly\0 ""Bugs\0 ""BugMini""Traxxas""NCC1701""E01X\0 ""V911S\0 ""GD00X\0 ""V761\0 ""KF606\0 ""Redpine""Potensi""ZSX\0 ""Height\0""Scanner""FrSkyRX""FS2A_RX""HoTT\0 ""FX816\0 ""BayanRX""Pelikan""Tiger\0 ""XK\0 ""XN297DU""FrSkyX2""FrSkyR9""Propel\0""FrSkyL\0""Skyartc""ESky-v2""DSM RX\0""JJRC345""Q90C\0 ""Kyosho\0""RadLink""ExpLRS\0""Realacc""OMP\0 ""M-Link\0""Wfly 2\0""E016Hv2" #define LEN_MULTI_POWER "\005" #define TR_MULTI_POWER "10mW\0""25mW\0""50mW\0""100mW""200mW""300mW""500mW""1W\0 ""2W\0 "