Detect NV14 vs EL18 at boot

This commit is contained in:
Raphael Coeffic
2022-08-11 12:15:46 +02:00
committed by Raphael Coeffic
parent e8d82348e0
commit 56eb564b86
4 changed files with 61 additions and 22 deletions
+14 -9
View File
@@ -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)
@@ -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);
+9
View File
@@ -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
+37 -12
View File
@@ -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