Add DISPLAY feature to enable/disable the OLED display. Add ARMED page
which is displayed upon arming. Resume page cycling when disarmed.
This commit is contained in:
parent
1790e082fe
commit
0d37bcdf5b
|
@ -98,7 +98,7 @@ void mixerUseConfigs(servoParam_t *servoConfToUse, flight3DConfig_t *flight3DCon
|
|||
master_t masterConfig; // master config struct with data independent from profiles
|
||||
profile_t *currentProfile; // profile config struct
|
||||
|
||||
static const uint8_t EEPROM_CONF_VERSION = 77;
|
||||
static const uint8_t EEPROM_CONF_VERSION = 78;
|
||||
|
||||
static void resetAccelerometerTrims(flightDynamicsTrims_t *accelerometerTrims)
|
||||
{
|
||||
|
|
|
@ -34,8 +34,9 @@ typedef enum {
|
|||
FEATURE_RX_PARALLEL_PWM = 1 << 13,
|
||||
FEATURE_RX_MSP = 1 << 14,
|
||||
FEATURE_RSSI_ADC = 1 << 15,
|
||||
FEATURE_LED_STRIP = 1 << 16
|
||||
} AvailableFeatures;
|
||||
FEATURE_LED_STRIP = 1 << 16,
|
||||
FEATURE_DISPLAY = 1 << 17
|
||||
} features_e;
|
||||
|
||||
bool feature(uint32_t mask);
|
||||
void featureSet(uint32_t mask);
|
||||
|
|
|
@ -54,23 +54,33 @@ uint32_t nextPageAt = 0;
|
|||
char lineBuffer[SCREEN_CHARACTER_COLUMN_COUNT];
|
||||
|
||||
typedef enum {
|
||||
PAGE_ARMED,
|
||||
PAGE_BATTERY,
|
||||
PAGE_SENSORS
|
||||
} pageId_e;
|
||||
|
||||
const char* pageTitles[] = {
|
||||
"ARMED",
|
||||
"BATTERY",
|
||||
"SENSORS"
|
||||
};
|
||||
|
||||
#define PAGE_COUNT (PAGE_SENSORS + 1)
|
||||
|
||||
const uint8_t cyclePageIds[] = {
|
||||
PAGE_BATTERY,
|
||||
PAGE_SENSORS
|
||||
};
|
||||
|
||||
#define CYCLE_PAGE_ID_COUNT (sizeof(cyclePageIds) / sizeof(cyclePageIds[0]))
|
||||
|
||||
static const char* tickerCharacters = "|/-\\";
|
||||
#define TICKER_CHARACTER_COUNT (sizeof(tickerCharacters) / sizeof(char))
|
||||
|
||||
typedef struct pageState_s {
|
||||
bool pageChanging;
|
||||
pageId_e pageId;
|
||||
uint8_t cycleIndex;
|
||||
} pageState_t;
|
||||
|
||||
static pageState_t pageState;
|
||||
|
@ -131,6 +141,10 @@ void handlePageChange(void)
|
|||
showTitle();
|
||||
}
|
||||
|
||||
void showArmedPage(void)
|
||||
{
|
||||
}
|
||||
|
||||
void showBatteryPage(void)
|
||||
{
|
||||
tfp_sprintf(lineBuffer, "volts: %d.%d, cells: %d", vbat / 10, vbat % 10, batteryCellCount);
|
||||
|
@ -170,6 +184,7 @@ void showSensorsPage(void)
|
|||
void updateDisplay(void)
|
||||
{
|
||||
uint32_t now = micros();
|
||||
static uint8_t previousArmedState = 0;
|
||||
|
||||
bool updateNow = (int32_t)(now - nextDisplayUpdateAt) >= 0L;
|
||||
if (!updateNow) {
|
||||
|
@ -178,20 +193,35 @@ void updateDisplay(void)
|
|||
|
||||
nextDisplayUpdateAt = now + DISPLAY_UPDATE_FREQUENCY;
|
||||
|
||||
if (ARMING_FLAG(ARMED)) {
|
||||
return;
|
||||
bool armedState = ARMING_FLAG(ARMED) ? true : false;
|
||||
bool armedStateChanged = armedState != previousArmedState;
|
||||
previousArmedState = armedState;
|
||||
|
||||
if (armedState) {
|
||||
if (!armedStateChanged) {
|
||||
return;
|
||||
}
|
||||
pageState.pageId = PAGE_ARMED;
|
||||
pageState.pageChanging = true;
|
||||
} else {
|
||||
if (armedStateChanged) {
|
||||
nextPageAt = now;
|
||||
pageState.cycleIndex = CYCLE_PAGE_ID_COUNT;
|
||||
}
|
||||
pageState.pageChanging = (int32_t)(now - nextPageAt) >= 0L;
|
||||
if (pageState.pageChanging) {
|
||||
nextPageAt = now + PAGE_CYCLE_FREQUENCY;
|
||||
pageState.cycleIndex++;
|
||||
pageState.cycleIndex = pageState.cycleIndex % CYCLE_PAGE_ID_COUNT;
|
||||
pageState.pageId = cyclePageIds[pageState.cycleIndex];
|
||||
}
|
||||
}
|
||||
|
||||
pageState.pageChanging = (int32_t)(now - nextPageAt) >= 0L;
|
||||
if (pageState.pageChanging) {
|
||||
nextPageAt = now + PAGE_CYCLE_FREQUENCY;
|
||||
pageState.pageId++;
|
||||
pageState.pageId = pageState.pageId % PAGE_COUNT;
|
||||
|
||||
if (pageState.pageChanging) {
|
||||
handlePageChange();
|
||||
}
|
||||
|
||||
|
||||
switch(pageState.pageId) {
|
||||
case PAGE_BATTERY:
|
||||
showBatteryPage();
|
||||
|
@ -199,9 +229,13 @@ void updateDisplay(void)
|
|||
case PAGE_SENSORS:
|
||||
showSensorsPage();
|
||||
break;
|
||||
case PAGE_ARMED:
|
||||
showArmedPage();
|
||||
break;
|
||||
}
|
||||
if (!armedState) {
|
||||
updateTicker();
|
||||
}
|
||||
|
||||
updateTicker();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ uint8_t cliMode = 0;
|
|||
static char cliBuffer[48];
|
||||
static uint32_t bufferIndex = 0;
|
||||
|
||||
// sync this with MultiType enum from mw.h
|
||||
// sync this with mutiType_e
|
||||
static const char * const mixerNames[] = {
|
||||
"TRI", "QUADP", "QUADX", "BI",
|
||||
"GIMBAL", "Y6", "HEX6",
|
||||
|
@ -109,15 +109,15 @@ static const char * const mixerNames[] = {
|
|||
"CUSTOM", NULL
|
||||
};
|
||||
|
||||
// sync this with AvailableFeatures enum from board.h
|
||||
// sync this with features_e
|
||||
static const char * const featureNames[] = {
|
||||
"RX_PPM", "VBAT", "INFLIGHT_ACC_CAL", "RX_SERIAL", "MOTOR_STOP",
|
||||
"SERVO_TILT", "SOFTSERIAL", "GPS", "FAILSAFE",
|
||||
"SONAR", "TELEMETRY", "CURRENT_METER", "3D", "RX_PARALLEL_PWM",
|
||||
"RX_MSP", "RSSI_ADC", "LED_STRIP", NULL
|
||||
"RX_MSP", "RSSI_ADC", "LED_STRIP", "DISPLAY", NULL
|
||||
};
|
||||
|
||||
// sync this with AvailableSensors enum from board.h
|
||||
// sync this with sensors_e
|
||||
static const char * const sensorNames[] = {
|
||||
"GYRO", "ACC", "BARO", "MAG", "SONAR", "GPS", "GPS+MAG", NULL
|
||||
};
|
||||
|
|
|
@ -139,7 +139,9 @@ void init(void)
|
|||
initBoardAlignment(&masterConfig.boardAlignment);
|
||||
|
||||
#ifdef DISPLAY
|
||||
displayInit();
|
||||
if (feature(FEATURE_DISPLAY)) {
|
||||
displayInit();
|
||||
}
|
||||
#endif
|
||||
|
||||
// We have these sensors; SENSORS_SET defined in board.h depending on hardware platform
|
||||
|
|
|
@ -434,7 +434,9 @@ void executePeriodicTasks(void)
|
|||
#endif
|
||||
#ifdef DISPLAY
|
||||
case UPDATE_DISPLAY_TASK:
|
||||
updateDisplay();
|
||||
if (feature(FEATURE_DISPLAY)) {
|
||||
updateDisplay();
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ typedef enum {
|
|||
SENSOR_SONAR = 1 << 4,
|
||||
SENSOR_GPS = 1 << 5,
|
||||
SENSOR_GPSMAG = 1 << 6,
|
||||
} AvailableSensors;
|
||||
} sensors_e;
|
||||
|
||||
typedef enum {
|
||||
ALIGN_DEFAULT = 0, // driver-provided alignment
|
||||
|
|
Loading…
Reference in New Issue