diff --git a/radio/src/gui/colorlcd/module_setup.cpp b/radio/src/gui/colorlcd/module_setup.cpp index 2de79a9c1..372d1b50e 100644 --- a/radio/src/gui/colorlcd/module_setup.cpp +++ b/radio/src/gui/colorlcd/module_setup.cpp @@ -514,15 +514,20 @@ void ModuleSubTypeChoice::update() setGetValueHandler(GET_DEFAULT(md->subType)); setSetValueHandler(SET_DEFAULT(md->subType)); - // TODO: - // if (moduleIdx == INTERNAL_MODULE) { - // md->subType = FLYSKY_SUBTYPE_AFHDS2A; - // setAvailableHandler([](int v) { return v == FLYSKY_SUBTYPE_AFHDS2A; }); - // } else { - // md->subType = FLYSKY_SUBTYPE_AFHDS3; - // setAvailableHandler([](int v) { return v == FLYSKY_SUBTYPE_AFHDS3; }); - // } - setAvailableHandler(nullptr); +#if defined(PCBNV14) + if (moduleIdx == INTERNAL_MODULE) { + if (hardwareOptions.pcbrev == PCBREV_NV14) { + md->subType = FLYSKY_SUBTYPE_AFHDS2A; + setAvailableHandler([](int v) { return v == FLYSKY_SUBTYPE_AFHDS2A; }); + } else { + md->subType = FLYSKY_SUBTYPE_AFHDS3; + setAvailableHandler([](int v) { return v == FLYSKY_SUBTYPE_AFHDS3; }); + } + } +#else + md->subType = FLYSKY_SUBTYPE_AFHDS3; + setAvailableHandler([](int v) { return v == FLYSKY_SUBTYPE_AFHDS3; }); +#endif } #endif #if defined(MULTIMODULE) diff --git a/radio/src/targets/common/arm/stm32/pwr_driver.cpp b/radio/src/targets/common/arm/stm32/pwr_driver.cpp index ab73735a3..3d197caab 100644 --- a/radio/src/targets/common/arm/stm32/pwr_driver.cpp +++ b/radio/src/targets/common/arm/stm32/pwr_driver.cpp @@ -37,7 +37,7 @@ void pwrInit() #endif // Internal module power - GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN); + INTERNAL_MODULE_OFF(); GPIO_InitStructure.GPIO_Pin = INTMODULE_PWR_GPIO_PIN; GPIO_Init(INTMODULE_PWR_GPIO, &GPIO_InitStructure); diff --git a/radio/src/targets/nv14/board.cpp b/radio/src/targets/nv14/board.cpp index 0319105db..3eb6b02a7 100644 --- a/radio/src/targets/nv14/board.cpp +++ b/radio/src/targets/nv14/board.cpp @@ -128,6 +128,15 @@ void boardInit() __enable_irq(); #endif + // detect NV14 vs EL18 + if (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == Bit_SET) { + // pull-up connected: EL18 + hardwareOptions.pcbrev = PCBREV_EL18; + } else { + // pull-down connected: NV14 + hardwareOptions.pcbrev = PCBREV_NV14; + } + #if defined(DEBUG) serialInit(SP_AUX1, UART_MODE_DEBUG); #endif diff --git a/radio/src/targets/nv14/board.h b/radio/src/targets/nv14/board.h index 2552a5a03..f90fc2c3e 100644 --- a/radio/src/targets/nv14/board.h +++ b/radio/src/targets/nv14/board.h @@ -53,12 +53,6 @@ extern uint16_t sessionTimer; #define SLAVE_MODE() (g_model.trainerData.mode == TRAINER_MODE_SLAVE) #define TRAINER_CONNECTED() (true) -PACK(typedef struct { - uint8_t pxx2Enabled:1; -}) HardwareOptions; - -extern HardwareOptions hardwareOptions; - // Board driver void boardInit(); void boardOff(); @@ -103,17 +97,48 @@ void SDRAM_Init(); #if !defined(SIMU) -// #define INTERNAL_MODULE_OFF() GPIO_SetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) -// #define INTERNAL_MODULE_ON() GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) -#define INTERNAL_MODULE_OFF() GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) -#define INTERNAL_MODULE_ON() GPIO_SetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) +enum { + PCBREV_NV14 = 0, + PCBREV_EL18 = 1, +}; + +typedef struct { + uint8_t pcbrev; +} HardwareOptions; + +extern HardwareOptions hardwareOptions; + +#define INTERNAL_MODULE_OFF() \ + do { \ + if (hardwareOptions.pcbrev == PCBREV_NV14) \ + GPIO_SetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN); \ + else \ + GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN); \ + } while (0) + +#define INTERNAL_MODULE_ON() \ + do { \ + if (hardwareOptions.pcbrev == PCBREV_NV14) \ + GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN); \ + else \ + GPIO_SetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN); \ + } while (0) + +#define IS_INTERNAL_MODULE_ON() \ + (hardwareOptions.pcbrev == PCBREV_NV14 \ + ? (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == \ + Bit_SET) \ + : (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == \ + Bit_RESET)) + +#define IS_EXTERNAL_MODULE_ON() \ + (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET) void EXTERNAL_MODULE_ON(); void EXTERNAL_MODULE_OFF(); + #define BLUETOOTH_MODULE_ON() GPIO_ResetBits(BLUETOOTH_ON_GPIO, BLUETOOTH_ON_GPIO_PIN) #define BLUETOOTH_MODULE_OFF() GPIO_SetBits(BLUETOOTH_ON_GPIO, BLUETOOTH_ON_GPIO_PIN) -#define IS_INTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == Bit_SET) -#define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET) #else