1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-23 00:05:13 +03:00

Wismy/x7 access (#7182)

X7 ACCESS
This commit is contained in:
Bertrand Songis 2019-12-12 14:44:34 +01:00 committed by GitHub
parent 249576f79b
commit b06e865141
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 240 additions and 61 deletions

View file

@ -341,7 +341,9 @@ endif()
# the current flavour is not automatically added if build in the current cmake iteration, so always
# add its library name to be sure
if(PCB STREQUAL X7 AND PCBREV STREQUAL T12)
if(PCB STREQUAL X7 AND PCBREV STREQUAL ACCESS)
set(FLAVOUR x7access)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL T12)
set(FLAVOUR t12)
elseif(PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019)
set(FLAVOUR x9d+2019)

View file

@ -66,6 +66,7 @@ uint32_t Boards::getFourCC(Type board)
case BOARD_TARANIS_XLITES:
return 0x3B78746F;
case BOARD_TARANIS_X7:
case BOARD_TARANIS_X7_ACCESS:
return 0x3678746F;
case BOARD_TARANIS_X9E:
return 0x3578746F;
@ -116,6 +117,7 @@ int Boards::getEEpromSize(Board::Type board)
case BOARD_TARANIS_XLITES:
case BOARD_TARANIS_XLITE:
case BOARD_TARANIS_X7:
case BOARD_TARANIS_X7_ACCESS:
case BOARD_TARANIS_X9LITE:
case BOARD_TARANIS_X9LITES:
case BOARD_TARANIS_X9D:
@ -154,6 +156,7 @@ int Boards::getFlashSize(Type board)
case BOARD_TARANIS_XLITES:
case BOARD_TARANIS_XLITE:
case BOARD_TARANIS_X7:
case BOARD_TARANIS_X7_ACCESS:
case BOARD_TARANIS_X9LITE:
case BOARD_TARANIS_X9LITES:
case BOARD_TARANIS_X9D:
@ -497,6 +500,8 @@ QString Boards::getBoardName(Board::Type board)
return "MEGA2560";
case BOARD_TARANIS_X7:
return "Taranis X7/X7S";
case BOARD_TARANIS_X7_ACCESS:
return "Taranis X7/X7S Access";
case BOARD_JUMPER_T12:
return "Jumper T12";
case BOARD_TARANIS_XLITE:

View file

@ -40,6 +40,7 @@ namespace Board {
BOARD_9XRPRO,
BOARD_AR9X,
BOARD_TARANIS_X7,
BOARD_TARANIS_X7_ACCESS,
BOARD_TARANIS_X9D,
BOARD_TARANIS_X9DP,
BOARD_TARANIS_X9DP_2019,
@ -241,7 +242,12 @@ inline bool IS_TARANIS_XLITES(Board::Type board)
inline bool IS_TARANIS_X7(Board::Type board)
{
return board == Board::BOARD_TARANIS_X7;
return board == Board::BOARD_TARANIS_X7 || board == Board::BOARD_TARANIS_X7_ACCESS;
}
inline bool IS_TARANIS_X7_ACCESS(Board::Type board)
{
return board == Board::BOARD_TARANIS_X7_ACCESS;
}
inline bool IS_TARANIS_X9LITE(Board::Type board)
@ -321,7 +327,7 @@ inline bool HAS_EXTERNAL_ANTENNA(Board::Type board)
inline bool IS_ACCESS_RADIO(Board::Type board, QString &id)
{
return (IS_TARANIS_XLITES(board) || IS_TARANIS_X9LITE(board) || board == Board::BOARD_TARANIS_X9DP_2019 || board == Board::BOARD_X10_EXPRESS ||
return (IS_TARANIS_XLITES(board) || IS_TARANIS_X9LITE(board) || board == Board::BOARD_TARANIS_X9DP_2019 || board == Board::BOARD_X10_EXPRESS || IS_TARANIS_X7_ACCESS(board) ||
(IS_HORUS(board) && id.contains("internalaccess")));
}

View file

@ -80,6 +80,8 @@ const char * OpenTxEepromInterface::getName()
return "OpenTX for FrSky Taranis X9E";
case BOARD_TARANIS_X7:
return "OpenTX for FrSky Taranis X7";
case BOARD_TARANIS_X7_ACCESS:
return "OpenTX for FrSky Taranis X7 Access";
case BOARD_TARANIS_X9LITES:
return "OpenTX for FrSky Taranis X9-Lite S";
case BOARD_TARANIS_X9LITE:
@ -330,6 +332,9 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u
else if (IS_TARANIS_X9LITE(board)) {
variant |= TARANIS_X9LITE_VARIANT;
}
else if (IS_TARANIS_X7_ACCESS(board)) {
variant |= TARANIS_X7_VARIANT;
}
else if (IS_TARANIS_X7(board)) {
variant |= TARANIS_X7_VARIANT;
}
@ -1254,6 +1259,11 @@ void registerOpenTxFirmwares()
addOpenTxTaranisOptions(firmware);
registerOpenTxFirmware(firmware);
/* FrSky X7 Access board */
firmware = new OpenTxFirmware("opentx-x7access", Firmware::tr("FrSky Taranis X7 / X7S Access"), BOARD_TARANIS_X7_ACCESS);
addOpenTxTaranisOptions(firmware);
registerOpenTxFirmware(firmware);
/* FrSky X-Lite S/PRO board */
firmware = new OpenTxFirmware("opentx-xlites", Firmware::tr("FrSky Taranis X-Lite S/PRO"), BOARD_TARANIS_XLITES);
addOpenTxTaranisOptions(firmware);

View file

@ -64,6 +64,7 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato
radioUiWidget = new SimulatedUIWidgetX9LITE(simulator, this);
break;
case Board::BOARD_TARANIS_X7:
case Board::BOARD_TARANIS_X7_ACCESS:
radioUiWidget = new SimulatedUIWidgetX7(simulator, this);
break;
case Board::BOARD_TARANIS_X9D:

View file

@ -20,7 +20,7 @@
#include "opentx.h"
display_t displayBuf[DISPLAY_BUFFER_SIZE];
display_t displayBuf[DISPLAY_BUFFER_SIZE] __DMA;
void lcdClear()
{

View file

@ -259,7 +259,11 @@ void onModelAntennaSwitchConfirm(const char * result)
#define EXTERNAL_ANTENNA_ROW
#endif
#if defined(PCBX7) || defined(PCBX9LITE)
#if defined(PCBX7ACCESS)
#define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW))
#define TRAINER_PPM_PARAMS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW)
#define TRAINER_ROWS LABEL(Trainer), 0, IF_BT_TRAINER_ON(TRAINER_BLUETOOTH_ROW), TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW
#elif defined(PCBX7) || defined(PCBX9LITE)
#if defined(BLUETOOTH)
#define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)),
#else

View file

@ -19,6 +19,7 @@ if(PYTHONINTERP_FOUND)
add_lua_export_target(x9lite ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9LITE -DPCBX9)
add_lua_export_target(x9lites ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9LITES -DPCBX9LITE -DPCBX9)
add_lua_export_target(x7 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_X7)
add_lua_export_target(x7access ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7ACCESS -DPCBX7 -DRADIO_X7)
add_lua_export_target(xlite ${LUA_INCLUDES} -DPCBTARANIS -DPCBXLITE)
add_lua_export_target(xlites ${LUA_INCLUDES} -DPCBTARANIS -DPCBXLITES -DPCBXLITE -DGYRO)
add_lua_export_target(x9d ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9D -DPCBX9)

View file

@ -34,6 +34,8 @@
#include "lua/lua_exports_x10.inc"
#elif defined(PCBX9E)
#include "lua/lua_exports_x9e.inc"
#elif defined(PCBX7ACCESS)
#include "lua/lua_exports_x7access.inc"
#elif defined(RADIO_X7)
#include "lua/lua_exports_x7.inc"
#elif defined(RADIO_T12)

View file

@ -162,7 +162,9 @@ void getSwitchesPosition(bool startup)
CHECK_2POS(SW_SI);
#endif
#if defined(PCBHORUS) || defined(PCBX7)
#if defined(PCBX7ACCESS)
CHECK_2POS(SW_SI);
#elif defined(PCBHORUS) || defined(PCBX7)
CHECK_2POS(SW_SI);
CHECK_2POS(SW_SJ);
#endif

View file

@ -24,7 +24,9 @@
Fifo<uint8_t, BT_TX_FIFO_SIZE> btTxFifo;
Fifo<uint8_t, BT_RX_FIFO_SIZE> btRxFifo;
#if defined(PCBX7) || defined(PCBXLITE)
#if defined(PCBX7ACCESS)
//nothing to do
#elif defined(PCBX7) || defined(PCBXLITE)
volatile uint8_t btChipPresent = 0;
#endif
@ -117,7 +119,9 @@ extern "C" void BT_USART_IRQHandler(void)
uint8_t byte = USART_ReceiveData(BT_USART);
btRxFifo.push(byte);
TRACE("BT %02X", byte);
#if defined(PCBX7) || defined(PCBXLITE)
#if defined(PCBX7ACCESS)
//nothing to do
#elif defined(PCBX7) || defined(PCBXLITE)
if (!btChipPresent) {
// This is to differentiate X7 and X7S and X-Lite with/without BT
btChipPresent = 1;

View file

@ -605,6 +605,8 @@ class OpenTxSimulatorFactory: public SimulatorFactory
return Board::BOARD_HORUS_X12S;
#elif defined(PCBX10)
return Board::BOARD_X10;
#elif defined(PCBX7ACCESS)
return Board::BOARD_TARANIS_X7_ACCESS;
#elif defined(PCBX7)
return Board::BOARD_TARANIS_X7;
#elif defined(PCBX9LITES)

View file

@ -52,39 +52,39 @@ elseif(PCB STREQUAL X9D+)
if (${PCBREV} STREQUAL 2019)
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF)
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" ON)
set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)")
set(FLAVOUR x9d+2019)
set(CPU_TYPE STM32F4)
set(CPU_TYPE_FULL STM32F407xE) # for size report
set(LINKER_SCRIPT targets/taranis/stm32f4_flash.ld)
set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)")
set(FIRMWARE_TARGET_SRC
${FIRMWARE_TARGET_SRC}
startup_stm32f40_41xxx.s
)
set(LINKER_SCRIPT targets/taranis/stm32f4_flash.ld)
add_definitions(-DSTM32F40_41xxx)
add_definitions(-DSOFTWARE_VOLUME -DPWR_BUTTON_${PWR_BUTTON} -DHARDWARE_POWER_MANAGEMENT_UNIT)
set(STATUS_LEDS YES)
set(PXX2 ON)
set(PXX_FREQUENCY "HIGH")
set(FLAVOUR x9d+2019)
else()
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON)
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF)
set(FLAVOUR x9d+)
set(CPU_TYPE STM32F2)
set(CPU_TYPE_FULL STM32F205xE) # for size report
set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld)
set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp)
set(STATUS_LEDS NO)
set(FLAVOUR x9d+)
endif()
elseif(PCB STREQUAL X9D)
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON)
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF)
set(FLAVOUR x9d)
set(CPU_TYPE STM32F2)
set(CPU_TYPE_FULL STM32F205xE) # for size report
set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld)
option(HAPTIC "Haptic support" OFF)
set(LUA_EXPORT lua_export_x9d)
set(FLAVOUR x9d)
add_definitions(-DPCBX9D -DPCBX9)
add_definitions(-DEEPROM_VARIANT=0)
set(GUI_DIR 212x64)
@ -97,34 +97,58 @@ elseif(PCB STREQUAL X9D)
set(STATUS_LEDS NO)
elseif(PCB STREQUAL X7)
set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)")
set(CPU_TYPE STM32F2)
set(CPU_TYPE_FULL STM32F205xE) # for size report
set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld)
set(HAPTIC YES)
if(PCBREV STREQUAL T12)
set(LUA_EXPORT lua_export_t12)
set(FLAVOUR t12)
set(NAVIGATION_TYPE 9x)
add_definitions(-DRADIO_T12)
add_definitions(-DEEPROM_VARIANT=0x4001)
option(INTERNAL_MODULE_MULTI "Support for MULTI internal module" OFF)
else()
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON)
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF)
set(LUA_EXPORT lua_export_x7)
set(FLAVOUR x7)
set(NAVIGATION_TYPE x7)
add_definitions(-DRADIO_X7)
add_definitions(-DEEPROM_VARIANT=0x4000)
endif()
add_definitions(-DPCBX7 -DSOFTWARE_VOLUME)
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
set(GUI_DIR 128x64)
set(BITMAPS_TARGET 9x_bitmaps)
set(FONTS_TARGET 9x_fonts_1bit)
set(LCD_DRIVER lcd_driver_spi.cpp)
set(GVAR_SCREEN model_gvars.cpp)
set(STATUS_LEDS YES)
add_definitions(-DPCBX7 -DSOFTWARE_VOLUME)
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
if(PCBREV STREQUAL T12)
option(INTERNAL_MODULE_MULTI "Support for MULTI internal module" OFF)
set(FLAVOUR t12)
set(NAVIGATION_TYPE 9x)
set(CPU_TYPE STM32F2)
set(CPU_TYPE_FULL STM32F205xE) # for size report
set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld)
set(LUA_EXPORT lua_export_t12)
add_definitions(-DRADIO_T12)
add_definitions(-DEEPROM_VARIANT=0x4001)
elseif(PCBREV STREQUAL ACCESS)
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF)
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" ON)
set(FLAVOUR x7access)
set(NAVIGATION_TYPE x7)
set(CPU_TYPE STM32F4)
set(CPU_TYPE_FULL STM32F407xE) # for size report
set(LINKER_SCRIPT targets/taranis/stm32f4_flash.ld)
set(LUA_EXPORT lua_export_x7access)
add_definitions(-DRADIO_X7)
add_definitions(-DEEPROM_VARIANT=0x4000)
add_definitions(-DPCBREV=${PCBREV})
add_definitions(-DPCBX7ACCESS)
set(FIRMWARE_TARGET_SRC
${FIRMWARE_TARGET_SRC}
startup_stm32f40_41xxx.s
)
add_definitions(-DSTM32F40_41xxx)
set(PXX2 ON)
set(PXX_FREQUENCY "HIGH")
add_definitions(-DHARDWARE_POWER_MANAGEMENT_UNIT)
else()
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON)
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" OFF)
set(FLAVOUR x7)
set(NAVIGATION_TYPE x7)
set(CPU_TYPE STM32F2)
set(CPU_TYPE_FULL STM32F205xE) # for size report
set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld)
set(LUA_EXPORT lua_export_x7)
add_definitions(-DRADIO_X7)
add_definitions(-DEEPROM_VARIANT=0x4000)
endif()
elseif(PCB STREQUAL X9LITE)
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" OFF)
option(INTERNAL_MODULE_PXX2 "Support for PXX2 internal module" ON)
@ -229,7 +253,7 @@ if(PCB STREQUAL XLITES)
)
endif()
if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES OR PCB STREQUAL X9LITE OR PCB STREQUAL X9LITES OR (PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019))
if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES OR PCB STREQUAL X9LITE OR PCB STREQUAL X9LITES OR (PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019) OR (PCB STREQUAL X7 AND PCBREV STREQUAL ACCESS))
add_definitions(-DINTERNAL_MODULE_SERIAL)
if(PXX_FREQUENCY STREQUAL HIGH)
add_definitions(-DPXX_FREQUENCY_HIGH)

View file

@ -338,7 +338,11 @@ enum EnumSwitchesPositions
SW_SI1,
SW_SI2,
#endif
#if defined(PCBX7)
#if defined(PCBX7ACCESS)
SW_SI0,
SW_SI1,
SW_SI2,
#elif defined(PCBX7)
SW_SI0,
SW_SI1,
SW_SI2,
@ -396,6 +400,11 @@ enum EnumSwitchesPositions
#define STORAGE_NUM_SWITCHES NUM_SWITCHES
#define DEFAULT_SWITCH_CONFIG (SWITCH_2POS << 10) + (SWITCH_2POS << 8) + (SWITCH_3POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0)
#define DEFAULT_POTS_CONFIG (POT_WITHOUT_DETENT << 0) + (POT_WITHOUT_DETENT << 2); // S1 = pot without detent, S2 = pot with detent
#elif defined(PCBX7ACCESS)
#define NUM_SWITCHES 7
#define STORAGE_NUM_SWITCHES 8
#define DEFAULT_SWITCH_CONFIG (SWITCH_TOGGLE << 10) + (SWITCH_2POS << 8) + (SWITCH_3POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0)
#define DEFAULT_POTS_CONFIG (POT_WITHOUT_DETENT << 0) + (POT_WITH_DETENT << 2); // S1 = pot without detent, S2 = pot with detent
#elif defined(PCBX7)
#define NUM_SWITCHES 8
#define STORAGE_NUM_SWITCHES NUM_SWITCHES
@ -689,7 +698,9 @@ extern uint32_t telemetryErrors;
void telemetryPortInvertedInit(uint32_t baudrate);
// PCBREV driver
#if defined(PCBX7)
#if defined(PCBX7ACCESS)
#define HAS_SPORT_UPDATE_CONNECTOR() true
#elif defined(PCBX7)
#define IS_PCBREV_40() (GPIO_ReadInputDataBit(PCBREV_GPIO, PCBREV_GPIO_PIN) == Bit_SET)
#define HAS_SPORT_UPDATE_CONNECTOR() IS_PCBREV_40()
#elif defined(SPORT_UPDATE_PWR_GPIO)
@ -785,7 +796,7 @@ void bluetoothInit(uint32_t baudrate, bool enable);
void bluetoothWriteWakeup();
uint8_t bluetoothIsWriting();
void bluetoothDisable();
#if defined(PCBX9LITES)
#if defined(PCBX9LITES) || defined(PCBX7ACCESS)
#define IS_BLUETOOTH_CHIP_PRESENT() (true)
#elif defined(PCBX9LITE)
#define IS_BLUETOOTH_CHIP_PRESENT() (false)

View file

@ -193,6 +193,23 @@
#define TRIMS_GPIO_PIN_LVU GPIO_Pin_0 // PB.00
#define TRIMS_GPIO_REG_LVD GPIOB->IDR
#define TRIMS_GPIO_PIN_LVD GPIO_Pin_1 // PB.01
#elif defined(PCBX7ACCESS)
#define TRIMS_GPIO_REG_LHR GPIOD->IDR
#define TRIMS_GPIO_PIN_LHR GPIO_Pin_15 // PD.15
#define TRIMS_GPIO_REG_LHL GPIOC->IDR
#define TRIMS_GPIO_PIN_LHL GPIO_Pin_1 // PC.01
#define TRIMS_GPIO_REG_LVD GPIOE->IDR
#define TRIMS_GPIO_PIN_LVD GPIO_Pin_6 // PE.06
#define TRIMS_GPIO_REG_LVU GPIOE->IDR
#define TRIMS_GPIO_PIN_LVU GPIO_Pin_5 // PE.05
#define TRIMS_GPIO_REG_RVD GPIOC->IDR
#define TRIMS_GPIO_PIN_RVD GPIO_Pin_3 // PC.03
#define TRIMS_GPIO_REG_RHR GPIOE->IDR
#define TRIMS_GPIO_PIN_RHR GPIO_Pin_3 // PE.03
#define TRIMS_GPIO_REG_RVU GPIOC->IDR
#define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02
#define TRIMS_GPIO_REG_RHL GPIOE->IDR
#define TRIMS_GPIO_PIN_RHL GPIO_Pin_4 // PE.04
#elif defined(PCBX7)
#define TRIMS_GPIO_REG_LHL GPIOD->IDR
#define TRIMS_GPIO_PIN_LHL GPIO_Pin_15 // PD.15
@ -351,8 +368,13 @@
#define HARDWARE_SWITCH_C
#define SWITCHES_GPIO_REG_C_L GPIOD->IDR
#define SWITCHES_GPIO_PIN_C_L GPIO_Pin_11 // PD.11
#if defined(PCBX7ACCESS)
#define SWITCHES_GPIO_REG_C_H GPIOD->IDR
#define SWITCHES_GPIO_PIN_C_H GPIO_Pin_10 // PD.10
#else
#define SWITCHES_GPIO_REG_C_H GPIOE->IDR
#define SWITCHES_GPIO_PIN_C_H GPIO_Pin_0 // PE.00
#endif
#else
#define STORAGE_SWITCH_C
#define HARDWARE_SWITCH_C
@ -524,13 +546,19 @@
#endif
// X7 P400 P401 headers additionnal momentary switches
#if defined(PCBX7)
#if defined(PCBX7ACCESS)
#define STORAGE_SWITCH_I
#define HARDWARE_SWITCH_I
#define STORAGE_SWITCH_J
#define HARDWARE_SWITCH_J
#define SWITCHES_GPIO_REG_I GPIOC->IDR
#define SWITCHES_GPIO_PIN_I GPIO_Pin_13 // PC.13
#define STORAGE_SWITCH_J
#elif defined(PCBX7)
#define STORAGE_SWITCH_I
#define HARDWARE_SWITCH_I
#define SWITCHES_GPIO_REG_I GPIOC->IDR
#define SWITCHES_GPIO_PIN_I GPIO_Pin_13 // PC.13
#define STORAGE_SWITCH_J
#define HARDWARE_SWITCH_J
#define SWITCHES_GPIO_REG_J GPIOD->IDR
#define SWITCHES_GPIO_PIN_J GPIO_Pin_10 // PD.10
#endif
@ -639,6 +667,12 @@
#define KEYS_GPIOC_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3)
#define KEYS_GPIOD_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15)
#define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)
#elif defined(PCBX7ACCESS)
#define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
#define KEYS_GPIOA_PINS GPIO_Pin_5
#define KEYS_GPIOC_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_13)
#define KEYS_GPIOD_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15)
#define KEYS_GPIOE_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)
#elif defined(RADIO_X7)
#define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
#define KEYS_GPIOA_PINS GPIO_Pin_5
@ -898,6 +932,14 @@
#define LED_RED_GPIO_PIN GPIO_Pin_4 // PE.04
#define LED_GREEN_GPIO GPIOE
#define LED_GREEN_GPIO_PIN GPIO_Pin_5 // PE.05
#elif defined(PCBX7ACCESS)
#define STATUS_LEDS
#define GPIO_LED_GPIO_ON GPIO_SetBits
#define GPIO_LED_GPIO_OFF GPIO_ResetBits
#define LED_BLUE_GPIO GPIOB
#define LED_BLUE_GPIO_PIN GPIO_Pin_1 // PB.01
#define LED_RED_GPIO GPIOC
#define LED_RED_GPIO_PIN GPIO_Pin_4 // PC.04
#elif defined(PCBX7)
#define STATUS_LEDS
#define GPIO_LED_GPIO_ON GPIO_SetBits
@ -982,6 +1024,26 @@
#define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler
#define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7
#define INTMODULE_DMA_CHANNEL DMA_Channel_4
#elif defined(PCBX7ACCESS)
#define INTMODULE_RCC_APB1Periph 0
#define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1
#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2)
#define INTMODULE_PWR_GPIO GPIOC
#define INTMODULE_PWR_GPIO_PIN GPIO_Pin_5 // PC.05
#define INTMODULE_GPIO GPIOB
#define INTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PB.06
#define INTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PB.07
#define INTMODULE_GPIO_PinSource_TX GPIO_PinSource6
#define INTMODULE_GPIO_PinSource_RX GPIO_PinSource7
#define INTMODULE_USART USART1
#define INTMODULE_GPIO_AF GPIO_AF_USART1
#define INTMODULE_USART_IRQHandler USART1_IRQHandler
#define INTMODULE_USART_IRQn USART1_IRQn
#define INTMODULE_DMA_STREAM DMA2_Stream7
#define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn
#define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler
#define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7
#define INTMODULE_DMA_CHANNEL DMA_Channel_4
#elif defined(PCBX9E) || defined(PCBX9DP) || defined(RADIO_X7)
#define INTMODULE_PULSES
#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
@ -1051,9 +1113,9 @@
#endif
// External Module
#if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019)
#if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS)
#define EXTMODULE_RCC_APB2Periph (RCC_APB2Periph_TIM8 | RCC_APB2Periph_USART6)
#if defined(PCBX9DP) && PCBREV >= 2019
#if (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS)
#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
#define EXTMODULE_PWR_GPIO GPIOD
#define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08
@ -1268,7 +1330,7 @@
#define TELEMETRY_RCC_APB1Periph RCC_APB1Periph_USART2
#define TELEMETRY_DIR_GPIO GPIOD
#define TELEMETRY_DIR_GPIO_PIN GPIO_Pin_4 // PD.04
#if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019)
#if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS)
#define TELEMETRY_DIR_OUTPUT() TELEMETRY_DIR_GPIO->BSRRH = TELEMETRY_DIR_GPIO_PIN
#define TELEMETRY_DIR_INPUT() TELEMETRY_DIR_GPIO->BSRRL = TELEMETRY_DIR_GPIO_PIN
#else
@ -1324,6 +1386,13 @@
#define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08
#define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits
#define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits
#elif defined(PCBX7ACCESS)
#define SPORT_MAX_BAUDRATE 400000
#define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
#define SPORT_UPDATE_PWR_GPIO GPIOB
#define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_3 // PB.03
#define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits
#define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits
#elif defined(PCBX7)
#define SPORT_MAX_BAUDRATE 250000 // < 400000
#define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
@ -1372,12 +1441,22 @@
// #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line9
// #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn
// #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI9_5_IRQHandler
#elif defined(PCBX7ACCESS)
#define INTMODULE_HEARTBEAT
#define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER
#define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOA
#define INTMODULE_HEARTBEAT_GPIO GPIOA
#define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_7 // PA.07
#define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOA
#define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource7
#define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line7
#define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn
#elif defined(RADIO_X7)
#define INTMODULE_HEARTBEAT
#define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER
#define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
#define INTMODULE_HEARTBEAT_GPIO GPIOC
#define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_7
#define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_7 // PC.07
#define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOC
#define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource7
#define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line7
@ -1646,6 +1725,15 @@
#define I2C_WP_GPIO_PIN GPIO_Pin_7 // PD.07
#define I2C_SCL_GPIO_PinSource GPIO_PinSource8
#define I2C_SDA_GPIO_PinSource GPIO_PinSource9
#elif defined(PCBX7ACCESS)
#define I2C_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
#define I2C_SPI_GPIO GPIOB
#define I2C_SDA_GPIO_PIN GPIO_Pin_9 // PB.09
#define I2C_SCL_GPIO_PIN GPIO_Pin_8 // PB.08
#define I2C_WP_GPIO GPIOB
#define I2C_WP_GPIO_PIN GPIO_Pin_5 // PB.05
#define I2C_SDA_GPIO_PinSource GPIO_PinSource9
#define I2C_SCL_GPIO_PinSource GPIO_PinSource8
#elif defined(PCBX9DP) && PCBREV >= 2019
#define I2C_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOF)
#define I2C_SPI_GPIO GPIOB
@ -1759,7 +1847,7 @@
#define HAPTIC_CCMR1 TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2
#define HAPTIC_CCER TIM_CCER_CC2E
#define BACKLIGHT_BDTR TIM_BDTR_MOE
#elif defined(PCBX9DP) && PCBREV >= 2019
#elif (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS)
#define HAPTIC_PWM
#define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOA
#define HAPTIC_RCC_APB2Periph RCC_APB2Periph_TIM1

View file

@ -195,6 +195,12 @@ uint32_t switchState(uint8_t index)
#elif defined(PCBXLITE)
ADD_3POS_CASE(D, 3);
// no SWE, SWF, SWG and SWH on XLITE
#elif defined(PCBX7ACCESS)
ADD_3POS_CASE(D, 3);
ADD_2POS_CASE(F);
ADD_2POS_CASE(H);
ADD_2POS_CASE(I);
// no SWJ on XLITE
#elif defined(PCBX7)
ADD_3POS_CASE(D, 3);
ADD_2POS_CASE(F);

View file

@ -311,7 +311,7 @@ void lcdInit()
issued by the other parts of the code.
*/
#if defined(PCBX9DP) && PCBREV >= 2019
#if (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS)
#define LCD_DELAY_NEEDED() true
#else
#define LCD_DELAY_NEEDED() (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE())

View file

@ -103,6 +103,17 @@ boards = {
"MULTIMODULE": "NO",
"CROSSFIRE": "NO",
"DEFAULT_MODE": "2",
},
"X7ACCESS": {
"PCB": "X7",
"PCBREV": "ACCESS",
"LUA": "NO_MODEL_SCRIPTS",
"GVARS": "YES",
"AUTOUPDATE": "YES",
"PXX1": "YES",
"MULTIMODULE": "NO",
"CROSSFIRE": "NO",
"DEFAULT_MODE": "2",
}
}