From 390342af78ee4345bc30f6e9fc1be72b08fb1aaf Mon Sep 17 00:00:00 2001 From: sirPerna Date: Sun, 10 Sep 2017 17:10:47 +0200 Subject: [PATCH] Crossfire baudrate selection for X7 support ( fixes #4922 ) (#5194) * Crossfire baudrate selection for X7 support ( fixes #4922 ) * Moved baurate selection to general settings * renamed mavbaud to telemetryBaudrate for ARM targets translation added * typo fixed --- radio/src/datastructs.h | 3 ++- radio/src/gui/128x64/radio_hardware.cpp | 21 ++++++++++++++++++- radio/src/pulses/pulses_arm.h | 2 -- radio/src/storage/eeprom_conversions.cpp | 2 +- radio/src/targets/simu/simpgmspace.cpp | 1 + .../src/targets/taranis/telemetry_driver.cpp | 1 + radio/src/telemetry/crossfire.h | 17 +++++++++++++++ radio/src/translations.cpp | 1 + radio/src/translations.h | 1 + radio/src/translations/cz.h.txt | 1 + radio/src/translations/de.h.txt | 1 + radio/src/translations/en.h.txt | 1 + radio/src/translations/es.h.txt | 1 + radio/src/translations/fi.h.txt | 1 + radio/src/translations/fr.h.txt | 1 + radio/src/translations/it.h.txt | 1 + radio/src/translations/nl.h.txt | 1 + radio/src/translations/pl.h.txt | 1 + radio/src/translations/pt.h.txt | 1 + radio/src/translations/se.h.txt | 1 + 20 files changed, 55 insertions(+), 5 deletions(-) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 696ef89a7..92daf4f7a 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -1008,7 +1008,8 @@ PACK(struct RadioData { NOBACKUP(int8_t timezone:5); NOBACKUP(uint8_t adjustRTC:1); NOBACKUP(uint8_t inactivityTimer); - NOBACKUP(uint8_t mavbaud:3); + AVR_FIELD(uint8_t mavbaud:3) + ARM_FIELD(uint8_t telemetryBaudrate:3) SPLASH_MODE; /* 3bits */ NOBACKUP(int8_t hapticMode:2); // -2=quiet, -1=only alarms, 0=no keys, 1=all AVR_FIELD(uint8_t blOffBright:4) diff --git a/radio/src/gui/128x64/radio_hardware.cpp b/radio/src/gui/128x64/radio_hardware.cpp index 00018d71b..644fee81b 100644 --- a/radio/src/gui/128x64/radio_hardware.cpp +++ b/radio/src/gui/128x64/radio_hardware.cpp @@ -111,6 +111,7 @@ enum MenuRadioHardwareItems { ITEM_RADIO_HARDWARE_SD, ITEM_RADIO_HARDWARE_SF, ITEM_RADIO_HARDWARE_SH, + ITEM_RADIO_HARDWARE_SERIAL_BAUDRATE, #if defined(BLUETOOTH) ITEM_RADIO_HARDWARE_BLUETOOTH_MODE, ITEM_RADIO_HARDWARE_BLUETOOTH_LOCAL_ADDR, @@ -134,7 +135,7 @@ enum MenuRadioHardwareItems { void menuRadioHardware(event_t event) { - MENU(STR_HARDWARE, menuTabGeneral, MENU_RADIO_HARDWARE, ITEM_RADIO_HARDWARE_MAX, { LABEL(Sticks), 0, 0, 0, 0, LABEL(Pots), POTS_ROWS, LABEL(Switches), SWITCHES_ROWS, BLUETOOTH_ROWS 0 }); + MENU(STR_HARDWARE, menuTabGeneral, MENU_RADIO_HARDWARE, ITEM_RADIO_HARDWARE_MAX, { LABEL(Sticks), 0, 0, 0, 0, LABEL(Pots), POTS_ROWS, LABEL(Switches), SWITCHES_ROWS, 0, BLUETOOTH_ROWS 0 }); uint8_t sub = menuVerticalPosition; @@ -207,6 +208,24 @@ void menuRadioHardware(event_t event) break; } + case ITEM_RADIO_HARDWARE_SERIAL_BAUDRATE: + lcdDrawTextAlignedLeft(y, STR_MAXBAUDRATE); + lcdDrawNumber(HW_SETTINGS_COLUMN2, y, CROSSFIRE_BAUDRATES[g_eeGeneral.telemetryBaudrate], attr|LEFT); + if (attr) { + g_eeGeneral.telemetryBaudrate = DIM(CROSSFIRE_BAUDRATES) - 1 - checkIncDecModel(event, DIM(CROSSFIRE_BAUDRATES) - 1 - g_eeGeneral.telemetryBaudrate, 0, DIM(CROSSFIRE_BAUDRATES) - 1); + if (checkIncDec_Ret) { + pauseMixerCalculations(); + pausePulses(); + EXTERNAL_MODULE_OFF(); + CoTickDelay(10); // 20ms so that the pulses interrupt will reinit the frame rate + telemetryProtocol = 255; // force telemetry port + module reinitialization + EXTERNAL_MODULE_ON(); + resumePulses(); + resumeMixerCalculations(); + } + } + break; + #if defined(BLUETOOTH) case ITEM_RADIO_HARDWARE_BLUETOOTH_MODE: lcdDrawTextAlignedLeft(y, STR_BLUETOOTH); diff --git a/radio/src/pulses/pulses_arm.h b/radio/src/pulses/pulses_arm.h index 5f1898ef1..408d96b4f 100644 --- a/radio/src/pulses/pulses_arm.h +++ b/radio/src/pulses/pulses_arm.h @@ -101,8 +101,6 @@ PACK(struct Dsm2TimerPulsesData { }); #endif -#define CROSSFIRE_BAUDRATE 400000 -#define CROSSFIRE_FRAME_PERIOD 4 // 4ms #define CROSSFIRE_FRAME_MAXLEN 64 #define CROSSFIRE_CHANNELS_COUNT 16 PACK(struct CrossfirePulsesData { diff --git a/radio/src/storage/eeprom_conversions.cpp b/radio/src/storage/eeprom_conversions.cpp index 1cc980286..99fda7637 100644 --- a/radio/src/storage/eeprom_conversions.cpp +++ b/radio/src/storage/eeprom_conversions.cpp @@ -726,7 +726,7 @@ PACK(typedef struct { int8_t timezone:5; uint8_t adjustRTC:1; uint8_t inactivityTimer; - uint8_t mavbaud:3; + uint8_t telemetryBaudrate:3; int8_t splashMode:3; int8_t hapticMode:2; // -2=quiet, -1=only alarms, 0=no keys, 1=all int8_t switchesDelay; diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index de5d90df2..c5abe9bca 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -681,6 +681,7 @@ FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG) { ret void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) { } void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct) { } void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState) { } +void USART_ClearITPendingBit(USART_TypeDef*, unsigned short) { } void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState) { } void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState) { } // void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) { } diff --git a/radio/src/targets/taranis/telemetry_driver.cpp b/radio/src/targets/taranis/telemetry_driver.cpp index d91cad3b9..cc326f1f7 100644 --- a/radio/src/targets/taranis/telemetry_driver.cpp +++ b/radio/src/targets/taranis/telemetry_driver.cpp @@ -114,6 +114,7 @@ void sportSendBuffer(uint8_t * buffer, uint32_t count) DMA_Cmd(TELEMETRY_DMA_Stream_TX, ENABLE); USART_DMACmd(TELEMETRY_USART, USART_DMAReq_Tx, ENABLE); DMA_ITConfig(TELEMETRY_DMA_Stream_TX, DMA_IT_TC, ENABLE); + USART_ClearITPendingBit(TELEMETRY_USART, USART_IT_TC); // enable interrupt and set it's priority NVIC_EnableIRQ(TELEMETRY_DMA_TX_Stream_IRQ) ; diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h index fd6902266..be414e421 100644 --- a/radio/src/telemetry/crossfire.h +++ b/radio/src/telemetry/crossfire.h @@ -41,4 +41,21 @@ void processCrossfireTelemetryData(uint8_t data); void crossfireSetDefault(int index, uint8_t id, uint8_t subId); bool isCrossfireOutputBufferAvailable(); +#if defined(PCBX7) +const uint32_t CROSSFIRE_BAUDRATES[] = { + 400000, + 115200, +}; +const uint8_t CROSSFIRE_FRAME_PERIODS[] = { + 4, + 16, +}; +#define CROSSFIRE_BAUDRATE CROSSFIRE_BAUDRATES[g_eeGeneral.telemetryBaudrate] +#define CROSSFIRE_FRAME_PERIOD CROSSFIRE_FRAME_PERIODS[g_eeGeneral.telemetryBaudrate] +#else +#define CROSSFIRE_BAUDRATE 400000 +#define CROSSFIRE_FRAME_PERIOD 4 // 4ms +#endif + + #endif // _CROSSFIRE_H_ diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 3b9ddbf37..f7c860932 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -551,6 +551,7 @@ const pm_char STR_HARDWARE[] PROGMEM = TR_HARDWARE; const pm_char STR_FORMATTING[] PROGMEM = TR_FORMATTING; const pm_char STR_TEMP_CALIB[] PROGMEM = TR_TEMP_CALIB; const pm_char STR_TIME[] PROGMEM = TR_TIME; +const pm_char STR_MAXBAUDRATE[] PROGMEM = TR_MAXBAUDRATE; const pm_char STR_BAUDRATE[] PROGMEM = TR_BAUDRATE; const pm_char STR_SD_INFO_TITLE[] PROGMEM = TR_SD_INFO_TITLE; const pm_char STR_SD_TYPE[] PROGMEM = TR_SD_TYPE; diff --git a/radio/src/translations.h b/radio/src/translations.h index 8344ffc43..196e701a9 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -778,6 +778,7 @@ extern const pm_char STR_HARDWARE[]; extern const pm_char STR_FORMATTING[]; extern const pm_char STR_TEMP_CALIB[]; extern const pm_char STR_TIME[]; +extern const pm_char STR_MAXBAUDRATE[]; extern const pm_char STR_BAUDRATE[]; extern const pm_char STR_SD_INFO_TITLE[]; extern const pm_char STR_SD_TYPE[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index d87a281f0..085f4a196 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -956,6 +956,7 @@ #define TR_FORMATTING "Formátovaní.." #define TR_TEMP_CALIB " +=\006Teplota" #define TR_TIME "Čas" +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "BT Baudrate" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 2e28feb2c..e51533b92 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -977,6 +977,7 @@ #define TR_FORMATTING "Formatierung..." #define TR_TEMP_CALIB "Temp. abgl." #define TR_TIME "Uhrzeit:" +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "BT Baudrate" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 07f353abc..db5bd9b5a 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -960,6 +960,7 @@ #define TR_FORMATTING "Formatting..." #define TR_TEMP_CALIB "Temp. Calib" #define TR_TIME "Time" +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "BT Baudrate" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index da8c21f07..5e00f3545 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -936,6 +936,7 @@ #define TR_FORMATTING "Formateando.." #define TR_TEMP_CALIB "Temp. Calib" #define TR_TIME "Hora" +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "BT Baudrate" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index d714b9276..8f023a54a 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -932,6 +932,7 @@ #define TR_FORMATTING "Formatting..." #define TR_TEMP_CALIB "Temp. Calib" #define TR_TIME "Time" +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "BT Baudrate" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index a0cabd7ea..2cb2d4cb6 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -959,6 +959,7 @@ #define TR_FORMATTING "Formatage..." #define TR_TEMP_CALIB "Calib. temp" #define TR_TIME "Heure" +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "Baudrate BT" #define LEN_BLUETOOTH_MODES "\012" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 678c22c9d..516dd8ab3 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -961,6 +961,7 @@ #define TR_FORMATTING "Formattazione." #define TR_TEMP_CALIB "Temp. Calib" #define TR_TIME "Ora" +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "BT Baudrate" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 3b38291c4..338419ee8 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -956,6 +956,7 @@ #define TR_FORMATTING "Formatteren..." #define TR_TEMP_CALIB "Temp. Calib." #define TR_TIME "Tijd:" +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "BT Baudrate" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index c24300a7b..88e19d963 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -963,6 +963,7 @@ #define TR_FORMATTING "Formatowanie.." #define TR_TEMP_CALIB "Temp. kalibracji" #define TR_TIME "Czas" +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "Prędkość BT" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 8989581df..1827d2d1a 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -937,6 +937,7 @@ #define TR_FORMATTING "Formatando..." #define TR_TEMP_CALIB "Temp. Calib" #define TR_TIME "Time" +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "BT Baudrate" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 2a79795bc..d0dc8ec72 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -975,6 +975,7 @@ #define TR_FORMATTING "Formaterar..." #define TR_TEMP_CALIB "Temp. kalib." #define TR_TIME "Tid " +#define TR_MAXBAUDRATE "Max bauds" #define TR_BLUETOOTH "Bluetooth" #define TR_BAUDRATE "BT Baudrate"