diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 1c5fdc1ea..cf35f2957 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -909,6 +909,13 @@ enum BluetoothModes { #endif }; +enum UartSampleModes { + UART_SAMPLE_MODE_NORMAL = 0, + UART_SAMPLE_MODE_ONEBIT, + + UART_SAMPLE_MODE_MAX = UART_SAMPLE_MODE_ONEBIT +}; + // PXX2 constants #define PXX2_LEN_REGISTRATION_ID 8 #define PXX2_LEN_RX_NAME 8 diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 765245b3e..12c119302 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -821,6 +821,7 @@ PACK(struct RadioData { NOBACKUP(int8_t varioPitch); NOBACKUP(int8_t varioRange); NOBACKUP(int8_t varioRepeat); + NOBACKUP(int8_t uartSampleMode:2); // See UartSampleModes CustomFunctionData customFn[MAX_SPECIAL_FUNCTIONS]; EXTRA_GENERAL_FIELDS @@ -946,25 +947,25 @@ static inline void check_struct() CHKSIZE(TrainerData, 16); #if defined(PCBXLITES) - CHKSIZE(RadioData, 860); + CHKSIZE(RadioData, 861); CHKSIZE(ModelData, 6157); #elif defined(PCBXLITE) - CHKSIZE(RadioData, 858); + CHKSIZE(RadioData, 859); CHKSIZE(ModelData, 6157); #elif defined(PCBX7) - CHKSIZE(RadioData, 864); + CHKSIZE(RadioData, 865); CHKSIZE(ModelData, 6157); #elif defined(PCBX9E) - CHKSIZE(RadioData, 960); + CHKSIZE(RadioData, 961); CHKSIZE(ModelData, 6614); #elif defined(PCBX9D) || defined(PCBX9DP) - CHKSIZE(RadioData, 898); + CHKSIZE(RadioData, 899); CHKSIZE(ModelData, 6604); #elif defined(PCBSKY9X) - CHKSIZE(RadioData, 735); + CHKSIZE(RadioData, 736); CHKSIZE(ModelData, 5301); #elif defined(PCBHORUS) - CHKSIZE(RadioData, 881); + CHKSIZE(RadioData, 882); CHKSIZE(ModelData, 9736); #endif diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index 7f38f692e..1b82b205c 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -168,6 +168,8 @@ enum { ITEM_RADIO_HARDWARE_SERIAL_BAUDRATE, #endif + ITEM_RADIO_HARDWARE_SERIAL_SAMPLE_MODE, + #if defined(BLUETOOTH) ITEM_RADIO_HARDWARE_BLUETOOTH_MODE, ITEM_RADIO_HARDWARE_BLUETOOTH_PAIRING_CODE, @@ -290,6 +292,8 @@ enum { #define MAX_BAUD_ROWS #endif +#define SERIAL_SAMPLE_MODE_ROWS 0, + #if defined(AUX_SERIAL) #define AUX_SERIAL_ROWS 0, #else @@ -321,6 +325,20 @@ void onFactoryResetConfirm(const char * result) } #endif +void restartExternalModule() +{ + if (!IS_EXTERNAL_MODULE_ON()) { + return; + } + pauseMixerCalculations(); + pausePulses(); + EXTERNAL_MODULE_OFF(); + RTOS_WAIT_MS(20); // 20ms so that the pulses interrupt will reinit the frame rate + telemetryProtocol = 255; // force telemetry port + module reinitialization + EXTERNAL_MODULE_ON(); + resumePulses(); + resumeMixerCalculations(); +} void menuRadioHardware(event_t event) { MENU(STR_HARDWARE, menuTabGeneral, MENU_RADIO_HARDWARE, HEADER_LINE + ITEM_RADIO_HARDWARE_MAX, { @@ -337,6 +355,7 @@ void menuRadioHardware(event_t event) RTC_ROW TX_CAPACITY_MEASUREMENT_ROWS MAX_BAUD_ROWS + SERIAL_SAMPLE_MODE_ROWS BLUETOOTH_ROWS EXTERNAL_ANTENNA_ROW AUX_SERIAL_ROWS @@ -549,20 +568,20 @@ void menuRadioHardware(event_t event) 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 && IS_EXTERNAL_MODULE_ON()) { - pauseMixerCalculations(); - pausePulses(); - EXTERNAL_MODULE_OFF(); - RTOS_WAIT_MS(20); // 20ms so that the pulses interrupt will reinit the frame rate - telemetryProtocol = 255; // force telemetry port + module reinitialization - EXTERNAL_MODULE_ON(); - resumePulses(); - resumeMixerCalculations(); + if (checkIncDec_Ret) { + restartExternalModule(); } } break; #endif + case ITEM_RADIO_HARDWARE_SERIAL_SAMPLE_MODE: + g_eeGeneral.uartSampleMode = editChoice(HW_SETTINGS_COLUMN2, y, STR_SAMPLE_MODE, STR_SAMPLE_MODES, g_eeGeneral.uartSampleMode, 0, UART_SAMPLE_MODE_MAX, attr, event); + if (attr && checkIncDec_Ret) { + restartExternalModule(); + } + break; + #if defined(BLUETOOTH) case ITEM_RADIO_HARDWARE_BLUETOOTH_MODE: lcdDrawTextAlignedLeft(y, STR_BLUETOOTH); diff --git a/radio/src/targets/taranis/telemetry_driver.cpp b/radio/src/targets/taranis/telemetry_driver.cpp index c16d6feca..08b79b0c7 100644 --- a/radio/src/targets/taranis/telemetry_driver.cpp +++ b/radio/src/targets/taranis/telemetry_driver.cpp @@ -77,6 +77,9 @@ void telemetryPortInit(uint32_t baudrate, uint8_t mode) } USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; + if (g_eeGeneral.uartSampleMode == UART_SAMPLE_MODE_ONEBIT) { + USART_OneBitMethodCmd(TELEMETRY_USART, ENABLE); + } USART_Init(TELEMETRY_USART, &USART_InitStructure); USART_Cmd(TELEMETRY_USART, ENABLE); diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 7cc5977d7..fea49bcda 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -80,6 +80,7 @@ ISTR(SWTYPES); ISTR(POTTYPES); ISTR(SLIDERTYPES); ISTR(ANTENNA_MODES); +ISTR(SAMPLE_MODES); ISTR(SPORT_UPDATE_POWER_MODES); ISTR(SPORT_MODES); @@ -419,6 +420,7 @@ const char STR_FORMATTING[] = TR_FORMATTING; const char STR_TEMP_CALIB[] = TR_TEMP_CALIB; const char STR_TIME[] = TR_TIME; const char STR_MAXBAUDRATE[] = TR_MAXBAUDRATE; +const char STR_SAMPLE_MODE[] = TR_SAMPLE_MODE; const char STR_BAUDRATE[] = TR_BAUDRATE; const char STR_SD_INFO_TITLE[] = TR_SD_INFO_TITLE; const char STR_SD_TYPE[] = TR_SD_TYPE; diff --git a/radio/src/translations.h b/radio/src/translations.h index 0ec58fe8e..ef9b079ee 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -647,6 +647,8 @@ extern const char STR_FORMATTING[]; extern const char STR_TEMP_CALIB[]; extern const char STR_TIME[]; extern const char STR_MAXBAUDRATE[]; +extern const char STR_SAMPLE_MODE[]; +extern const char STR_SAMPLE_MODES[]; extern const char STR_BAUDRATE[]; extern const char STR_SD_INFO_TITLE[]; extern const char STR_SD_TYPE[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index f042c994e..0c2b19a4c 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -805,6 +805,10 @@ #define TR_TEMP_CALIB " +=\006Teplota" #define TR_TIME "Čas" #define TR_MAXBAUDRATE "Max baudů" +#define TR_SAMPLE_MODE "Sample Mode" + +#define LEN_SAMPLE_MODES "\006" +#define TR_SAMPLE_MODES "Normal""OneBit" #define TR_BLUETOOTH "Bluetooth" #define TR_BLUETOOTH_DISC "Hledat" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 05b377a40..e266bd4c0 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -807,6 +807,10 @@ #define TR_TEMP_CALIB "Temp. abgl." #define TR_TIME "Uhrzeit:" #define TR_MAXBAUDRATE "Max Baud" +#define TR_SAMPLE_MODE "Sample Mode" + +#define LEN_SAMPLE_MODES "\006" +#define TR_SAMPLE_MODES "Normal""OneBit" #define TR_BLUETOOTH "Bluetooth" #define TR_BLUETOOTH_DISC "Discover" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 7abf4a509..5f0e941b3 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -811,6 +811,11 @@ #define TR_TEMP_CALIB "Temp. Calib" #define TR_TIME "Time" #define TR_MAXBAUDRATE "Max bauds" +#define TR_SAMPLE_MODE "Sample Mode" + +#define LEN_SAMPLE_MODES "\006" +#define TR_SAMPLE_MODES "Normal""OneBit" + #define TR_BLUETOOTH "Bluetooth" #define TR_BLUETOOTH_DISC "Discover" #define TR_BLUETOOTH_INIT "Init" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 1e31139b1..ce0f92304 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -824,6 +824,10 @@ #define TR_TEMP_CALIB "Temp. Calib" #define TR_TIME "Time" #define TR_MAXBAUDRATE "Max bauds" +#define TR_SAMPLE_MODE "Sample Mode" + +#define LEN_SAMPLE_MODES "\006" +#define TR_SAMPLE_MODES "Normal""OneBit" #define TR_BLUETOOTH "Bluetooth" #define TR_BLUETOOTH_DISC "Discover" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 06f7159a0..5e7d97f9d 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -827,6 +827,11 @@ #define TR_TEMP_CALIB "Calib. temp" #define TR_TIME "Heure" #define TR_MAXBAUDRATE "Max bauds" +#define TR_SAMPLE_MODE "Sample Mode" + +#define LEN_SAMPLE_MODES "\006" +#define TR_SAMPLE_MODES "Normal""OneBit" + #define TR_BLUETOOTH "Bluetooth" #define TR_BLUETOOTH_DISC "Découvrir" #define TR_BLUETOOTH_INIT "Init" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index cdd3dfc94..6073fa38a 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -826,6 +826,10 @@ #define TR_TEMP_CALIB "Temp. Calib." #define TR_TIME "Ora" #define TR_MAXBAUDRATE "Max Bauds" +#define TR_SAMPLE_MODE "Sample Mode" + +#define LEN_SAMPLE_MODES "\006" +#define TR_SAMPLE_MODES "Normal""OneBit" #define TR_BLUETOOTH "Bluetooth" #define TR_BLUETOOTH_DISC "Cerca" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 4aad255b2..b39c7eceb 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -812,6 +812,10 @@ #define TR_TEMP_CALIB "Temp. Calib." #define TR_TIME "Tijd:" #define TR_MAXBAUDRATE "Max bauds" +#define TR_SAMPLE_MODE "Sample Mode" + +#define LEN_SAMPLE_MODES "\006" +#define TR_SAMPLE_MODES "Normal""OneBit" #define TR_BLUETOOTH "Bluetooth" #define TR_BLUETOOTH_DISC "Discover" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 8923a5bd0..5c7572652 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -825,6 +825,10 @@ #define TR_TEMP_CALIB "Temp. kalibracji" #define TR_TIME "Czas" #define TR_MAXBAUDRATE "Max bauds" +#define TR_SAMPLE_MODE "Sample Mode" + +#define LEN_SAMPLE_MODES "\006" +#define TR_SAMPLE_MODES "Normal""OneBit" #define TR_BLUETOOTH "Bluetooth" #define TR_BLUETOOTH_DISC "Discover" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 9b82bfdfa..7082492e2 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -826,6 +826,10 @@ #define TR_TEMP_CALIB "Temp. Calib" #define TR_TIME "Time" #define TR_MAXBAUDRATE "Max bauds" +#define TR_SAMPLE_MODE "Sample Mode" + +#define LEN_SAMPLE_MODES "\006" +#define TR_SAMPLE_MODES "Normal""OneBit" #define TR_BLUETOOTH "Bluetooth" #define TR_BLUETOOTH_DISC "Discover" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 1b13ffb8f..0d35de122 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -825,6 +825,10 @@ #define TR_TEMP_CALIB "Temp. kalib." #define TR_TIME "Tid " #define TR_MAXBAUDRATE "Max bauds" +#define TR_SAMPLE_MODE "Sample Mode" + +#define LEN_SAMPLE_MODES "\006" +#define TR_SAMPLE_MODES "Normal""OneBit" #define TR_BLUETOOTH "Bluetooth" #define TR_BLUETOOTH_DISC "Discover"