From 3833a209afc3a0f1a92054952f2f8b905b36f84e Mon Sep 17 00:00:00 2001 From: zhaobing Date: Fri, 20 May 2022 09:59:35 +0800 Subject: [PATCH] Add BETAFPV LiteRadio 3 Pro ELRS radio --- radio/src/targets/taranis/CMakeLists.txt | 17 +++++++++++++++++ radio/src/targets/taranis/board.h | 6 ++++++ radio/src/targets/taranis/hal.h | 15 +++++++++++++-- radio/src/targets/taranis/lcd_driver_spi.cpp | 12 ++++++++++-- 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 8ce3d908f..070b00f9a 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -175,6 +175,23 @@ elseif(PCB STREQUAL X7) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") set(CLI ON CACHE BOOL "Enable CLI") + elseif(PCBREV STREQUAL LR3PRO) + set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) + set(FLAVOUR lr3pro) + set(NAVIGATION_TYPE 9x) + set(CPU_TYPE STM32F2) + set(CPU_TYPE_FULL STM32F205xE) # for size report + add_definitions(-DSTM32F205xx) + set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld) + set(LUA_EXPORT lua_export_tlite) + add_definitions(-DRADIO_TLITE) + add_definitions(-DRADIO_LR3PRO) + add_definitions(-DRADIO_FAMILY_JUMPER_T12) + add_definitions(-DEEPROM_VARIANT=0x4003) + add_definitions(-DMANUFACTURER_BETAFPV) + set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") + set(CLI ON CACHE BOOL "Enable CLI") elseif(PCBREV STREQUAL TX12) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") set(INTERNAL_MODULE_SERIAL YES) diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index e6c2f3589..ddb3c53ee 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -729,6 +729,10 @@ uint8_t isBacklightEnabled(); #define USB_NAME "Radiomaster T8" #define USB_MANUFACTURER 'R', 'M', '_', 'T', 'X', ' ', ' ', ' ' /* 8 bytes */ #define USB_PRODUCT 'R', 'M', ' ', 'T', '8', ' ', ' ', ' ' /* 8 Bytes */ +#elif defined(RADIO_LR3PRO) + #define USB_NAME "BETAFPV LR3PRO" + #define USB_MANUFACTURER 'B', 'E', 'T', 'A', 'F', 'P', 'V', ' ' /* 8 bytes */ + #define USB_PRODUCT 'L', 'R', '3', 'P', 'R', 'O', ' ', ' ' /* 8 Bytes */ #elif defined(RADIO_TLITE) #define USB_NAME "Jumper TLite" #define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */ @@ -981,6 +985,8 @@ extern Fifo telemetryFifo; #define BATTERY_DIVIDER 50000 #elif defined (RADIO_ZORRO) || defined(RADIO_TX12MK2) #define BATTERY_DIVIDER 23711 // = 2047*128*BATT_SCALE/(100*(VREF*(160+499)/160)) +#elif defined (RADIO_LR3PRO) + #define BATTERY_DIVIDER 39500 #else #define BATTERY_DIVIDER 26214 #endif diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index b291d8dc9..7090dc434 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -472,14 +472,21 @@ #define SWITCHES_GPIO_REG_B_L GPIOE->IDR #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_5 // PE.05 #define SWITCHES_GPIO_REG_B_H GPIOE->IDR - #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_4 // PE.04 -#elif defined(RADIO_TLITE) || defined(RADIO_TPRO) + #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_4 // PE.04 +#elif (defined(RADIO_TLITE) || defined(RADIO_TPRO)) && !defined(RADIO_LR3PRO) #define STORAGE_SWITCH_B #define HARDWARE_SWITCH_B #define SWITCHES_GPIO_REG_B_L GPIOE->IDR #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_1 // PE.01 #define SWITCHES_GPIO_REG_B_H GPIOE->IDR #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_2 // PE.02 +#elif (RADIO_LR3PRO) + #define STORAGE_SWITCH_B + #define HARDWARE_SWITCH_B + #define SWITCHES_GPIO_REG_B_L GPIOE->IDR + #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_15 // PE.15 + #define SWITCHES_GPIO_REG_B_H GPIOA->IDR + #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_5 // PA.05 #elif defined(PCBX7) #define STORAGE_SWITCH_B #define HARDWARE_SWITCH_B @@ -1661,6 +1668,10 @@ #define INTMODULE_BOOTCMD_GPIO GPIOF #define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_11 // PF.11 #define INIT_INTMODULE_BOOTCMD_PIN() GPIO_ResetBits(INTMODULE_BOOTCMD_GPIO, INTMODULE_BOOTCMD_GPIO_PIN); + #elif defined(RADIO_LR3PRO) + #define INTMODULE_BOOTCMD_GPIO GPIOB + #define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_5 // PB.05 + #define INIT_INTMODULE_BOOTCMD_PIN() GPIO_ResetBits(INTMODULE_BOOTCMD_GPIO, INTMODULE_BOOTCMD_GPIO_PIN); #endif #elif defined(RADIO_COMMANDO8) #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_DMA1) diff --git a/radio/src/targets/taranis/lcd_driver_spi.cpp b/radio/src/targets/taranis/lcd_driver_spi.cpp index da750108c..76554419b 100644 --- a/radio/src/targets/taranis/lcd_driver_spi.cpp +++ b/radio/src/targets/taranis/lcd_driver_spi.cpp @@ -27,11 +27,12 @@ #include "opentx.h" #endif -#if defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) +#if (defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_ZORRO) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO)) && !defined(RADIO_LR3PRO) #define LCD_CONTRAST_OFFSET -10 #else #define LCD_CONTRAST_OFFSET 160 #endif + #define RESET_WAIT_DELAY_MS 300 // Wait time after LCD reset before first command #define WAIT_FOR_DMA_END() do { } while (lcd_busy) @@ -43,7 +44,6 @@ #define LCD_RST_HIGH() LCD_RST_GPIO->BSRRL = LCD_RST_GPIO_PIN #define LCD_RST_LOW() LCD_RST_GPIO->BSRRH = LCD_RST_GPIO_PIN - bool lcdInitFinished = false; void lcdInitFinish(); @@ -117,7 +117,11 @@ void lcdStart() #if defined(LCD_VERTICAL_INVERT) // T12 and TX12 have the screen inverted. lcdWriteCommand(0xe2); // (14) Soft reset +#if defined(RADIO_LR3PRO) + lcdWriteCommand(0xa1); // Set seg +#else lcdWriteCommand(0xa0); // Set seg +#endif lcdWriteCommand(0xc8); // Set com lcdWriteCommand(0xf8); // Set booster lcdWriteCommand(0x00); // 5x @@ -210,6 +214,10 @@ void lcdRefresh(bool wait) #if LCD_W == 128 uint8_t * p = displayBuf; + #if defined(RADIO_LR3PRO) + // add offset 2px because the driver (SH1106) of the 1.3 OLED is for a 132 display + lcdWriteCommand(0x02); + #endif for (uint8_t y=0; y < 8; y++, p+=LCD_W) { lcdWriteCommand(0x10); // Column addr 0 lcdWriteCommand(0xB0 | y); // Page addr y