Current works: LCD, touch, ST, TH, some switches

This commit is contained in:
Richard Li
2025-01-24 19:00:12 +01:00
committed by Malte Langermann
parent d651b22379
commit 48d0ec49ed
11 changed files with 168 additions and 60 deletions
+5 -2
View File
@@ -18,7 +18,6 @@ set(RTC_BACKUP_RAM YES)
set(PPM_LIMITS_SYMETRICAL YES)
set(USB_SERIAL ON CACHE BOOL "Enable USB serial (CDC)")
set(HARDWARE_EXTERNAL_MODULE YES)
set(WIRELESS_CHARGER YES)
#option(STICKS_DEAD_ZONE "Enable sticks dead zone" YES)
#option(AFHDS2 "Support for AFHDS2" OFF)
@@ -46,9 +45,14 @@ if(PCBREV STREQUAL NB4P)
elseif(PCBREV STREQUAL PL18EV)
set(FLAVOUR pl18ev)
add_definitions(-DRADIO_PL18EV)
set(WIRELESS_CHARGER YES)
set(FLYSKY_GIMBAL ON)
set(ROTARY_ENCODER YES)
else()
set(FLAVOUR pl18)
add_definitions(-DRADIO_PL18)
set(WIRELESS_CHARGER YES)
set(FLYSKY_GIMBAL ON)
# Defines internal modules for PL18 via UART7
set(INTERNAL_MODULES MULTI CACHE STRING "Internal modules")
@@ -65,7 +69,6 @@ set(FIRMWARE_DEPENDENCIES datacopy)
set(HARDWARE_TOUCH ON)
set(SOFTWARE_KEYBOARD ON)
set(FLYSKY_GIMBAL ON)
add_definitions(
-DSTM32F429_439xx -DSTM32F429xx
+6 -2
View File
@@ -40,13 +40,12 @@ void backlightInit()
// PIN init
gpio_init_af(BACKLIGHT_GPIO, BACKLIGHT_GPIO_AF, GPIO_PIN_SPEED_LOW);
// TODO review this when the timer will be chosen
stm32_timer_enable_clock(BACKLIGHT_TIMER);
BACKLIGHT_TIMER->ARR = 100;
BACKLIGHT_TIMER->PSC = BACKLIGHT_TIMER_FREQ / 1000000 - 1; // 10kHz (same as FrOS)
BACKLIGHT_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE; // PWM mode 1
BACKLIGHT_TIMER->CCER = TIM_CCER_CC1E | TIM_CCER_CC1NE;
BACKLIGHT_TIMER->CCR1 = 100; // 100% on init
BACKLIGHT_TIMER->CCR1 = 0;
BACKLIGHT_TIMER->EGR = TIM_EGR_UG;
BACKLIGHT_TIMER->CR1 |= TIM_CR1_CEN; // Counter enable
BACKLIGHT_TIMER->BDTR |= TIM_BDTR_MOE;
@@ -68,6 +67,11 @@ void backlightEnable(uint8_t dutyCycle)
lastDutyCycle = dutyCycle;
}
void backlightFullOn()
{
backlightEnable(BACKLIGHT_LEVEL_MAX);
}
void lcdOff() {
backlightEnable(0);
}
@@ -273,7 +273,9 @@ void battery_charge_init()
// USB charger control pins
#if defined(UCHARGER_EN_GPIO)
gpio_init(UCHARGER_EN_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW);
#endif
// USB charger state init
ENABLE_UCHARGER();
+5 -1
View File
@@ -44,9 +44,13 @@ enum ChargeState
#define IS_UCHARGER_ACTIVE() gpio_read(UCHARGER_GPIO) ? 1 : 0
#define IS_UCHARGER_CHARGE_END_ACTIVE() gpio_read(UCHARGER_CHARGE_END_GPIO) ? 1 : 0
#if defined(UCHARGER_EN_GPIO)
#define ENABLE_UCHARGER() gpio_set(UCHARGER_EN_GPIO)
#define DISABLE_UCHARGER() gpio_clear(UCHARGER_EN_GPIO)
#else
#define ENABLE_UCHARGER()
#define DISABLE_UCHARGER()
#endif
#define IS_WCHARGER_ACTIVE() gpio_read(WCHARGER_GPIO) ? 1 : 0
#define IS_WCHARGER_CHARGE_END_ACTIVE() gpio_read(WCHARGER_CHARGE_END_GPIO) ? 1 : 0
#define ENABLE_WCHARGER() gpio_set(WCHARGER_EN_GPIO)
+8 -2
View File
@@ -42,7 +42,9 @@
#include "touch.h"
#include "debug.h"
#include "flysky_gimbal_driver.h"
#if defined(FLYSKY_GIMBAL)
#include "flysky_gimbal_driver.h"
#endif
#include "timers_driver.h"
#include "battery_driver.h"
@@ -109,7 +111,11 @@ void boardInit()
board_trainer_init();
battery_charge_init();
flysky_gimbal_init();
#if defined(FLYSKY_GIMBAL)
flysky_gimbal_init();
#endif
timersInit();
touchPanelInit();
usbInit();
+84 -3
View File
@@ -51,6 +51,7 @@
// PL18/PL18EV only has virtual keys via trim buttons
// #define KEYS_GPIO_PIN_PGUP /* for activating PGUP in keys diagnose screen */
#if !defined(RADIO_NB4P)
// Trims
#define TRIMS_GPIO_REG_LHL
#define TRIMS_GPIO_PIN_LHL
@@ -303,16 +304,64 @@
}
#endif
#else
#define ADC_RCC_AHB1Periph (RCC_AHB1Periph_DMA2)
#define ADC_RCC_APB1Periph 0
#define ADC_RCC_APB2Periph 0
#define ADC_GPIO_PIN_STICK_TH LL_GPIO_PIN_3 // PA.03
#define ADC_GPIO_PIN_STICK_ST LL_GPIO_PIN_2 // PA.02
#define ADC_CHANNEL_STICK_TH LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3
#define ADC_CHANNEL_STICK_ST LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2
#define ADC_GPIO_PIN_SWA LL_GPIO_PIN_1 //PC.01
#define ADC_GPIO_PIN_SWB LL_GPIO_PIN_0 //PC.00
#define ADC_CHANNEL_SWA LL_ADC_CHANNEL_11 // ADC123_IN11 -> ADC1_IN11
#define ADC_CHANNEL_SWB LL_ADC_CHANNEL_10 // ADC123_IN10 -> ADC1_IN10
#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_7 // PA.07
#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_2 // PC.02
#define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_6 // PA.06
#define ADC_GPIO_PIN_POT4 LL_GPIO_PIN_4 // PC.04
#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05
#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7
#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_12 // ADC123_IN12 -> ADC1_IN12
#define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6
#define ADC_CHANNEL_POT4 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14
#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15
#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18
#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_TH | ADC_GPIO_PIN_STICK_ST | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT3)
#define ADC_GPIOC_PINS (ADC_GPIO_PIN_SWA | ADC_GPIO_PIN_SWB | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT4 | ADC_GPIO_PIN_BATT)
#define ADC_MAIN ADC1
#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES
#define ADC_DMA DMA2
#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0
#define ADC_DMA_STREAM LL_DMA_STREAM_4
#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn
#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler
#define ADC_VREF_PREC2 660
#define ADC_DIRECTION { \
0,0, /* gimbals */ \
0,0,0,0, /* pots */ \
0, /* vbat */ \
0, /* rtc_bat */ \
0, /* SWA */ \
0 /* SWB */ \
}
#endif
// Power
#define PWR_SWITCH_GPIO GPIO_PIN(GPIOI, 11) // PI.11
#define PWR_ON_GPIO GPIO_PIN(GPIOI, 14) // PI.14
// Chargers (USB and wireless)
#define UCHARGER_GPIO GPIO_PIN(GPIOB, 14) // PB.14 input
#define UCHARGER_CHARGE_END_GPIO GPIO_PIN(GPIOB, 13) // PB.13 input
#define UCHARGER_EN_GPIO GPIO_PIN(GPIOG, 3) // PG.03 output
#if defined(RADIO_PL18) || defined(RADIO_PL18EV)
#define UCHARGER_EN_GPIO GPIO_PIN(GPIOG, 3) // PG.03 output
#endif
#if defined (WIRELESS_CHARGER)
#define WCHARGER_GPIO GPIO_PIN(GPIOI, 9) // PI.09 input
@@ -416,7 +465,29 @@
//used in BOOTLOADER
#define SERIAL_RCC_AHB1Periph 0
#define SERIAL_RCC_APB1Periph 0
#if defined(RADIO_NB4P)
// Rotary Encoder
#define ROTARY_ENCODER_RCC_APB1Periph RCC_APB1Periph_TIM12
#define ROTARY_ENCODER_GPIO GPIOH
#define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_11 // PH.11
#define ROTARY_ENCODER_GPIO_PIN_B GPIO_Pin_10 // PH.10
#define ROTARY_ENCODER_POSITION() ((ROTARY_ENCODER_GPIO->IDR >> 10) & 0x03)
#define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_11
#define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_10
#if !defined(USE_EXTI15_10_IRQ)
#define USE_EXTI15_10_IRQ
#define EXTI15_10_IRQ_Priority 5
#endif
#define ROTARY_ENCODER_EXTI_PORT LL_SYSCFG_EXTI_PORTH
#define ROTARY_ENCODER_EXTI_SYS_LINE1 LL_SYSCFG_EXTI_LINE11
#define ROTARY_ENCODER_EXTI_SYS_LINE2 LL_SYSCFG_EXTI_LINE10
#define ROTARY_ENCODER_TIMER TIM12
#define ROTARY_ENCODER_TIMER_IRQn TIM8_BRK_TIM12_IRQn
#define ROTARY_ENCODER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler
#else
#define ROTARY_ENCODER_RCC_APB1Periph 0
#endif
// SPI NOR Flash
#define FLASH_SPI SPI6
@@ -469,6 +540,15 @@
#endif
// Haptic: TIM1_CH1
#if defined(RADIO_NB4P)
#define HAPTIC_PWM
#define HAPTIC_GPIO GPIO_PIN(GPIOB, 0) // PB.00
#define HAPTIC_GPIO_TIMER TIM1
#define HAPTIC_GPIO_AF GPIO_AF1
#define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC1E | TIM_CCER_CC1NE;
#define HAPTIC_TIMER_MODE TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE
#define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR1
#else
#define HAPTIC_PWM
#define HAPTIC_GPIO GPIO_PIN(GPIOA, 8) // PA.08
#define HAPTIC_GPIO_TIMER TIM1
@@ -476,6 +556,7 @@
#define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC1E | TIM_CCER_CC1NE;
#define HAPTIC_TIMER_MODE TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE
#define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR1
#endif
// Flysky Hall Stick
#define FLYSKY_HALL_SERIAL_USART UART4
+4
View File
@@ -28,6 +28,8 @@
#include "delays_driver.h"
#include "keys.h"
#if !defined(RADIO_NB4P)
/* The output bit-order has to be:
0 LHL TR7L (Left equals down)
1 LHR TR7R
@@ -218,3 +220,5 @@ uint32_t readTrims()
return result;
}
#endif
+38 -10
View File
@@ -74,12 +74,20 @@ const char TOUCH_CONTROLLER_STR[][10] = {"", "FT6236", "CST340", "CHSC5448"};
TouchController touchController = TC_NONE;
enum TouchRotate
{
DEG_0,
DEG_90,
DEG_180,
DEG_270
};
struct TouchControllerDescriptor
{
bool (*hasTouchEvent)();
bool (*touchRead)(uint16_t * X, uint16_t * Y);
void (*printDebugInfo)();
bool needTranspose;
TouchRotate rotate;
};
union rpt_point_t
@@ -131,7 +139,7 @@ static void _i2c_init(void)
static void _i2c_reInit(void)
{
stm32_i2c_deinit(TOUCH_I2C_BUS);
// stm32_i2c_deinit(TOUCH_I2C_BUS);
_i2c_init();
}
@@ -283,7 +291,11 @@ static const TouchControllerDescriptor FT6236 =
.hasTouchEvent = ft6236HasTouchEvent,
.touchRead = ft6236TouchRead,
.printDebugInfo = ft6236PrintDebugInfo,
.needTranspose = true,
#if defined(RADIO_NB4P)
.rotate = DEG_180,
#else
.rotate = DEG_270,
#endif
};
static const TouchControllerDescriptor CST340 =
@@ -291,7 +303,11 @@ static const TouchControllerDescriptor CST340 =
.hasTouchEvent = cst340HasTouchEvent,
.touchRead = cst340TouchRead,
.printDebugInfo = cst340PrintDebugInfo,
.needTranspose = true,
#if defined(RADIO_NB4P)
.rotate = DEG_180,
#else
.rotate = DEG_270,
#endif
};
static const TouchControllerDescriptor CHSC5448 =
@@ -299,7 +315,7 @@ static const TouchControllerDescriptor CHSC5448 =
.hasTouchEvent = chsc5448HasTouchEvent,
.touchRead = chsc5448TouchRead,
.printDebugInfo = chsc5448PrintDebugInfo,
.needTranspose = false,
.rotate = DEG_0,
};
void _detect_touch_controller()
@@ -315,7 +331,11 @@ void _detect_touch_controller()
} else {
touchController = TC_FT6236;
tcd = &FT6236;
#if defined(RADIO_NB4P)
TouchControllerType = 0;
#else
TouchControllerType = 1;
#endif
}
}
@@ -354,11 +374,19 @@ struct TouchState touchPanelRead()
unsigned short touchY;
bool hasTouchContact = tcd->touchRead(&touchX, &touchY);
if (tcd->needTranspose) {
// Touch sensor is rotated by 90 deg
unsigned short tmp = touchY;
touchY = 319 - touchX;
touchX = tmp;
unsigned short tmp;
switch(tcd->rotate) {
case DEG_270:
tmp = touchY;
touchY = 319 - touchX;
touchX = tmp;
break;
case DEG_180:
touchY = 479 - touchY;
touchX = 319 - touchX;
break;
default:
break;
}
if (hasTouchContact) {
+14 -31
View File
@@ -684,26 +684,16 @@ LEGACY_NAMES = [
"nb4p"
},
"inputs": {
"LH": {
"yaml": "Rud",
"lua": "rud",
"description": "Rudder"
"ST": {
"yaml": "ST",
"lua": "ste",
"description": "Steering"
},
"LV": {
"yaml": "Ele",
"lua": "ele",
"description": "Elevator"
},
"RV": {
"yaml": "Thr",
"TH": {
"yaml": "TH",
"lua": "thr",
"description": "Throttle"
},
"RH": {
"yaml": "Ail",
"lua": "ail",
"description": "Aileron"
},
"P1": {
"yaml": "POT1",
"lua": "s1",
@@ -723,22 +713,15 @@ LEGACY_NAMES = [
"lua": "s3",
"label": "S3",
"short_label": "3",
"description": "Potentiometer 3"
},
"SL1": {
"yaml": "LS",
"lua": "ls",
"label": "LS",
"short_label": "L",
"description": "Left slider"
},
"SL2": {
"yaml": "RS",
"lua": "rs",
"label": "RS",
"short_label": "R",
"description": "Right slider"
"description": "Analog 3"
},
"P4": {
"yaml": "POT4",
"lua": "s4",
"label": "S4",
"short_label": "4",
"description": "Analog 4"
}
}
},
{
+1 -2
View File
@@ -43,8 +43,7 @@ POT_CONFIG = {
"P1": {"default": "POT"},
"P2": {"default": "POT"},
"P3": {"default": "POT"},
"SL1": {"default": "SLIDER"},
"SL2": {"default": "SLIDER"}
"P4": {"default": "POT"}
},
"v12": {
"P1": {"default": "POT_CENTER"},
+1 -7
View File
@@ -67,13 +67,7 @@ SWITCH_CONFIG = {
},
"nb4p": {
"SA": { "default": "2POS" },
"SB": { "default": "3POS" },
"SC": { "default": "2POS" },
"SD": { "default": "3POS" },
"SE": { "default": "3POS" },
"SF": { "default": "2POS" },
"SG": { "default": "3POS" },
"SH": { "default": "TOGGLE" }
"SB": { "default": "2POS" }
},
"lr3pro": {
# left side