Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions radio/src/gui/common/stdlcd/menus_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ void menuRadioSpectrumAnalyser(event_t event);
void menuRadioPowerMeter(event_t event);
void menuRadioCalibration(event_t event);
void menuGhostModuleConfig(event_t event);
void menuServoPwmTool(event_t event);

void menuModelSelect(event_t event);
void menuModelSetup(event_t event);
Expand Down
93 changes: 93 additions & 0 deletions radio/src/gui/common/stdlcd/radio_servo_pwm.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program 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.
*/

#include "edgetx.h"
#include "os/sleep.h"

#if defined(SERVO_PWM)

#if LCD_W >= 212
#define HW_SETTINGS_COLUMN1 12*FW
#define HW_SETTINGS_COLUMN2 (20*FW - 3)
#define HW_SETTINGS_COLUMN3 HW_SETTINGS_COLUMN2
#else
#define HW_SETTINGS_COLUMN1 30
#define HW_SETTINGS_COLUMN2 (HW_SETTINGS_COLUMN1 + 5*FW)
#define HW_SETTINGS_COLUMN3 HW_SETTINGS_COLUMN2 + FW
#endif

#if !defined(SIMU)
extern void pwmOutputDisable();
extern void pwmOutputInit();
extern void pwmOutputEnable(uint16_t pulse_width_us);
#else
void pwmOutputDisable() {}
void pwmOutputInit() {}
void pwmOutputEnable(uint16_t) {}
#endif

static uint8_t pwmOutputSource;

enum {
ITEM_PWM_SOURCE,
ITEM_SERVO_PWM_MAX,
};

void menuServoPwmTool(event_t event)
{
SUBMENU(STR_PWM_OUTPUT, 0, {0});

if (menuEvent == EVT_ENTRY_UP) {
TRACE("stopping servo pwm...");
pwmOutputDisable();
return;
}

if (event == EVT_ENTRY) {
TRACE("starting servo pwm...");
pwmOutputSource = MIXSRC_NONE;
pwmOutputInit();
}

if (pwmOutputSource > MIXSRC_NONE) {
mixsrc_t chan = pwmOutputSource - MIXSRC_FIRST;
pwmOutputEnable(PPM_CH_CENTER(chan) + channelOutputs[chan] / 2);
} else {
pwmOutputDisable();
}

for (int i = 0; i < ITEM_SERVO_PWM_MAX; i++) {
LcdFlags attr = (menuVerticalPosition == i ? (s_editMode > 0 ? INVERS | BLINK : INVERS) : 0);
coord_t y = MENU_HEADER_HEIGHT + 12 + i * FH;

switch (i) {
case ITEM_PWM_SOURCE:
lcdDrawTextAlignedLeft(y, STR_PWM_OUTPUT);
drawSource(HW_SETTINGS_COLUMN2, y, pwmOutputSource, attr);
if (attr & BLINK)
CHECK_INCDEC_GENVAR(event, pwmOutputSource, 0, MAX_OUTPUT_CHANNELS);
break;
}
}
}

#endif

4 changes: 4 additions & 0 deletions radio/src/gui/common/stdlcd/radio_tools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,10 @@ void menuRadioTools(event_t event)
addRadioModuleToolHandler(index++, "Ghost Menu", menuGhostModuleConfig, EXTERNAL_MODULE);
#endif

#if defined(SERVO_PWM)
addRadioModuleToolHandler(index++, STR_PWM_OUTPUT, menuServoPwmTool, 0);
#endif

#endif

if (index == 0) {
Expand Down
9 changes: 9 additions & 0 deletions radio/src/targets/taranis/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -696,6 +696,15 @@ if(FLAVOUR STREQUAL xlites)
)
endif()

if(FLAVOUR STREQUAL mt12)
target_sources(board PRIVATE
${TARGET_SRC_DIR}/pwm_ch_driver.cpp
)
set(SRC ${SRC}
gui/common/stdlcd/radio_servo_pwm.cpp
)
endif()

set(SRC ${SRC}
io/frsky_firmware_update.cpp
io/multi_firmware_update.cpp
Expand Down
11 changes: 11 additions & 0 deletions radio/src/targets/taranis/hal.h
Original file line number Diff line number Diff line change
Expand Up @@ -2879,6 +2879,17 @@
#define HAPTIC_GPIO GPIO_PIN(GPIOC, 12) // PC.12
#endif

#if defined(RADIO_MT12)
#define SERVO_PWM
#define PWM_GPIO GPIO_PIN(GPIOB, 0) // PB.00
#define PWM_GPIO_AF GPIO_AF2
#define PWM_GPIO_TIMER TIM3 // Timer 3 Channel3
#define PWM_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
#define PWM_COUNTER_REGISTER PWM_TIMER->CCR3
#define PWM_CCMR2 TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2
#define PWM_CCER TIM_CCER_CC3E
#endif

#if defined(RADIO_BOXER) || defined(RADIO_FAMILY_T20) || defined(RADIO_X9DP2019) || defined (RADIO_V14) || defined(RADIO_GX12)
// Flysky Hall Stick
#define FLYSKY_HALL_SERIAL_USART UART4
Expand Down
59 changes: 59 additions & 0 deletions radio/src/targets/taranis/pwm_ch_driver.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program 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.
*/

#include "stm32_pulse_driver.h"
#include "stm32_gpio.h"

#include "edgetx_types.h"
#include "board.h"

static const stm32_pulse_timer_t _pwm_timer = {
.GPIO = (gpio_t)PWM_GPIO,
.GPIO_Alternate = PWM_GPIO_AF,
.TIMx = PWM_GPIO_TIMER,
.TIM_Freq = PWM_TIMER_FREQ,
.TIM_Channel = LL_TIM_CHANNEL_CH3,
.TIM_IRQn = (IRQn_Type)-1,
.DMAx = nullptr,
.DMA_Stream = 0,
.DMA_Channel = 0,
.DMA_IRQn = (IRQn_Type)-1,
.DMA_TC_CallbackPtr = nullptr,
};

void pwmOutputDisable()
{
stm32_pulse_stop(&_pwm_timer);
}

void pwmOutputInit()
{
stm32_pulse_init(&_pwm_timer, 2000000);
stm32_pulse_config_output(&_pwm_timer, true, LL_TIM_OCMODE_PWM1, 0);
LL_TIM_SetAutoReload(_pwm_timer.TIMx, 15000); // 15ms between PWM pulses
LL_TIM_EnableCounter(_pwm_timer.TIMx);
}

void pwmOutputEnable(uint16_t pulse_width_us)
{
stm32_pulse_set_cmp_val(&_pwm_timer, pulse_width_us);
stm32_pulse_start(&_pwm_timer);
}
1 change: 1 addition & 0 deletions radio/src/translations/i18n/cn.h
Original file line number Diff line number Diff line change
Expand Up @@ -1243,6 +1243,7 @@
#define TR_MENU_OTHER "其它"
#define TR_MENU_INVERT "反向"
#define TR_AUDIO_MUTE TR("自动静音","音频停播时自动静音")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC滤波器"
#define TR_DEAD_ZONE "死区"
#define TR_RTC_CHECK TR("RTC电池", "RTC纽扣电池电压")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/cz.h
Original file line number Diff line number Diff line change
Expand Up @@ -1247,6 +1247,7 @@
#define TR_MENU_OTHER "Ostatní"
#define TR_MENU_INVERT "Invertovat"
#define TR_AUDIO_MUTE TR("Ztlumení zvuku","Ztlumení, pokud není slyšet zvuk")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC Filtr"
#define TR_DEAD_ZONE "Dead zone"
#define TR_RTC_CHECK TR("Kontr RTC", "Hlídat RTC napětí")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/da.h
Original file line number Diff line number Diff line change
Expand Up @@ -1250,6 +1250,7 @@
#define TR_MENU_OTHER "Andet"
#define TR_MENU_INVERT "Invers"
#define TR_AUDIO_MUTE TR("Audio fra","Audio fra, hvis der ikke gives lyd")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC filter"
#define TR_DEAD_ZONE "Dødt område"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC spænding")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/de.h
Original file line number Diff line number Diff line change
Expand Up @@ -1246,6 +1246,7 @@
#define TR_MENU_OTHER "Weitere"
#define TR_MENU_INVERT "Invertieren<!>"
#define TR_AUDIO_MUTE TR("Ton Stumm","Geräuschunterdrückung")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC Filter"
#define TR_DEAD_ZONE "Dead zone"
#define TR_RTC_CHECK TR("RTC Prüfen", "RTC Spann. prüfen")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/en.h
Original file line number Diff line number Diff line change
Expand Up @@ -1244,6 +1244,7 @@
#define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert"
#define TR_AUDIO_MUTE TR("Audio mute","Mute if no sound")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC filter"
#define TR_DEAD_ZONE "Dead zone"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/es.h
Original file line number Diff line number Diff line change
Expand Up @@ -1245,6 +1245,7 @@
#define TR_MENU_OTHER "Otros"
#define TR_MENU_INVERT "Invertir"
#define TR_AUDIO_MUTE TR("Audio mute","Mute if no sound")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "Filtro ADC"
#define TR_DEAD_ZONE "Dead zone"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltaje")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/fi.h
Original file line number Diff line number Diff line change
Expand Up @@ -1245,6 +1245,7 @@
#define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert"
#define TR_AUDIO_MUTE TR("Audio mute","Mute if no sound")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC Filter"
#define TR_DEAD_ZONE "Dead zone"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/fr.h
Original file line number Diff line number Diff line change
Expand Up @@ -1247,6 +1247,7 @@
#define TR_MENU_OTHER "Autres"
#define TR_MENU_INVERT "Inverser"
#define TR_AUDIO_MUTE TR("Audio muet","Muet si pas de son")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "Filtre ADC"
#define TR_DEAD_ZONE "Zone Neutre"
#define TR_RTC_CHECK TR("Vérif. RTC", "Vérif. pile RTC")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/he.h
Original file line number Diff line number Diff line change
Expand Up @@ -1246,6 +1246,7 @@
#define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert"
#define TR_AUDIO_MUTE TR("השתקת קול","השתק כאשר אין סאונד")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC filter"
#define TR_DEAD_ZONE "Dead zone"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/it.h
Original file line number Diff line number Diff line change
Expand Up @@ -1243,6 +1243,7 @@
#define TR_MENU_OTHER "Altro"
#define TR_MENU_INVERT "Inverti"
#define TR_AUDIO_MUTE TR("Audio muto","Muto senza suono")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "Filtro ADC"
#define TR_DEAD_ZONE "Zona morta"
#define TR_RTC_CHECK TR("Controllo RTC", "Controllo volt. RTC")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/jp.h
Original file line number Diff line number Diff line change
Expand Up @@ -1242,6 +1242,7 @@
#define TR_MENU_OTHER "その他"
#define TR_MENU_INVERT "リバース"
#define TR_AUDIO_MUTE TR("Audio mute","音源ミュート")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADCフィルター"
#define TR_DEAD_ZONE "デッドゾーン"
#define TR_RTC_CHECK TR("Check RTC", "内蔵電池チェック")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/ko.h
Original file line number Diff line number Diff line change
Expand Up @@ -1290,6 +1290,7 @@
#define TR_MENU_OTHER "기타"
#define TR_MENU_INVERT "반전"
#define TR_AUDIO_MUTE TR("오디오 음소거", "소리가 없을 때 음소거")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC 필터"
#define TR_DEAD_ZONE "데드존"
#define TR_RTC_CHECK TR("RTC 확인", "RTC 전압 확인")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/nl.h
Original file line number Diff line number Diff line change
Expand Up @@ -1246,6 +1246,7 @@
#define TR_MENU_OTHER "Verdere"
#define TR_MENU_INVERT "Inverteer"
#define TR_AUDIO_MUTE TR("Audio mute","Mute if no sound")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC Filter"
#define TR_DEAD_ZONE "Dead zone"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
Expand Down
3 changes: 2 additions & 1 deletion radio/src/translations/i18n/pl.h
Original file line number Diff line number Diff line change
Expand Up @@ -1242,7 +1242,8 @@
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER "Inny "
#define TR_MENU_INVERT "Odwróć"
#define TR_AUDIO_MUTE TR("Audio mute","Mute if no sound")
#define TR_AUDIO_MUTE TR("Audio mute","Mute if no sound")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "Filtr ADC"
#define TR_DEAD_ZONE "Dead zone"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/pt.h
Original file line number Diff line number Diff line change
Expand Up @@ -1244,6 +1244,7 @@
#define TR_MENU_OTHER "Outros"
#define TR_MENU_INVERT "Invert"
#define TR_AUDIO_MUTE TR("Audio mute","Mute if no sound")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "Filtro ADC"
#define TR_DEAD_ZONE "Dead zone"
#define TR_RTC_CHECK TR("Check RTC", "Checar tensão RTC")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/ru.h
Original file line number Diff line number Diff line change
Expand Up @@ -1245,6 +1245,7 @@
#define TR_MENU_OTHER "Другое"
#define TR_MENU_INVERT "Инвертир"
#define TR_AUDIO_MUTE TR("Выкл звук", "Выкл звук")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "Фильтр АЦП"
#define TR_DEAD_ZONE "Зона нечувств"
#define TR_RTC_CHECK TR("Проверка RTC", "Проверка RTC")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/se.h
Original file line number Diff line number Diff line change
Expand Up @@ -1258,6 +1258,7 @@
#define TR_MENU_OTHER "Övrigt"
#define TR_MENU_INVERT "Invertera"
#define TR_AUDIO_MUTE TR("Audio av","Audio av om inget ljud")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC-filter"
#define TR_DEAD_ZONE "Dödläge"
#define TR_RTC_CHECK TR("Kolla RTC", "Kolla RTC-batteriet")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/tw.h
Original file line number Diff line number Diff line change
Expand Up @@ -1241,6 +1241,7 @@
#define TR_MENU_OTHER "其它"
#define TR_MENU_INVERT "反向"
#define TR_AUDIO_MUTE TR("自動靜音","音頻停播時自動靜音")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "ADC濾波器"
#define TR_DEAD_ZONE "死區"
#define TR_RTC_CHECK TR("檢查時間電池", "檢查時間驅動電池電壓")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/i18n/ua.h
Original file line number Diff line number Diff line change
Expand Up @@ -1244,6 +1244,7 @@
#define TR_MENU_OTHER "Інше"
#define TR_MENU_INVERT "Інверт"
#define TR_AUDIO_MUTE TR("Аудіо стоп","Тихо якщо немає звуку")
#define TR_PWM_OUTPUT "PWM output"
#define TR_JITTER_FILTER "Фільтр ADC"
#define TR_DEAD_ZONE "Мертва зона"
#define TR_RTC_CHECK TR("Перевір RTC", "Перевір напругу RTC")
Expand Down
1 change: 1 addition & 0 deletions radio/src/translations/string_list.h
Original file line number Diff line number Diff line change
Expand Up @@ -795,6 +795,7 @@ STR(MENU_DISPLAY)
STR(MENU_OTHER)
STR(MENU_INVERT)
STR(AUDIO_MUTE)
STR(PWM_OUTPUT)
STR(JITTER_FILTER)
STR(DEAD_ZONE)
STR(RTC_CHECK)
Expand Down
Loading