Current works: LCD, touch, ST, TH, some switches
This commit is contained in:
committed by
Malte Langermann
parent
d651b22379
commit
48d0ec49ed
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user