From cedcf2d7e285ebf5bc9dbfbb807929d9912c8310 Mon Sep 17 00:00:00 2001 From: mikeller Date: Sat, 16 Nov 2019 12:24:49 +1300 Subject: [PATCH] Added calibration menu to CMS. --- make/source.mk | 6 +- src/main/build/version.h | 1 + src/main/cms/cms.c | 63 ++++-- src/main/cms/cms_menu_blackbox.c | 1 + src/main/cms/cms_menu_failsafe.c | 1 + src/main/cms/cms_menu_firmware.c | 192 ++++++++++++++++++ src/main/cms/cms_menu_firmware.h | 25 +++ src/main/cms/cms_menu_gps_rescue.c | 2 + src/main/cms/cms_menu_imu.c | 9 + src/main/cms/cms_menu_ledstrip.c | 1 + .../{cms_menu_builtin.c => cms_menu_main.c} | 70 +------ .../{cms_menu_builtin.h => cms_menu_main.h} | 2 +- src/main/cms/cms_menu_misc.c | 21 +- src/main/cms/cms_menu_misc.h | 2 + src/main/cms/cms_menu_osd.c | 10 +- src/main/cms/cms_menu_power.c | 1 + src/main/cms/cms_menu_saveexit.c | 2 + src/main/cms/cms_menu_vtx_common.c | 1 + src/main/cms/cms_menu_vtx_rtc6705.c | 1 + src/main/cms/cms_menu_vtx_smartaudio.c | 6 + src/main/cms/cms_menu_vtx_tramp.c | 2 + src/main/cms/cms_types.h | 3 + src/main/config/config.c | 6 + src/main/fc/core.c | 12 +- src/main/flight/position.c | 2 +- src/main/msc/emfat_file.c | 4 +- src/main/msp/msp.c | 2 +- src/main/msp/msp_protocol.h | 2 +- src/main/sensors/acceleration.c | 5 + src/main/sensors/acceleration.h | 1 + src/main/sensors/barometer.c | 14 +- src/main/sensors/barometer.h | 2 +- src/main/sensors/compass.c | 2 +- src/main/sensors/compass.h | 2 +- src/main/sensors/gyro.c | 22 +- src/main/sensors/gyro.h | 2 +- src/test/unit/arming_prevention_unittest.cc | 9 +- src/test/unit/cms_unittest.cc | 2 +- src/test/unit/flight_imu_unittest.cc | 2 +- src/test/unit/sensor_gyro_unittest.cc | 10 +- src/test/unit/vtx_unittest.cc | 7 +- 41 files changed, 387 insertions(+), 143 deletions(-) create mode 100644 src/main/cms/cms_menu_firmware.c create mode 100644 src/main/cms/cms_menu_firmware.h rename src/main/cms/{cms_menu_builtin.c => cms_menu_main.c} (64%) rename src/main/cms/{cms_menu_builtin.h => cms_menu_main.h} (96%) diff --git a/make/source.mk b/make/source.mk index 569695a259..2d21c8d5be 100644 --- a/make/source.mk +++ b/make/source.mk @@ -130,11 +130,12 @@ COMMON_SRC = \ blackbox/blackbox_io.c \ cms/cms.c \ cms/cms_menu_blackbox.c \ - cms/cms_menu_builtin.c \ cms/cms_menu_failsafe.c \ + cms/cms_menu_firmware.c \ cms/cms_menu_gps_rescue.c\ cms/cms_menu_imu.c \ cms/cms_menu_ledstrip.c \ + cms/cms_menu_main.c \ cms/cms_menu_misc.c \ cms/cms_menu_osd.c \ cms/cms_menu_power.c \ @@ -320,11 +321,12 @@ SIZE_OPTIMISED_SRC := $(SIZE_OPTIMISED_SRC) \ msp/msp_serial.c \ cms/cms.c \ cms/cms_menu_blackbox.c \ - cms/cms_menu_builtin.c \ cms/cms_menu_failsafe.c \ + cms/cms_menu_firmware.c \ cms/cms_menu_gps_rescue.c\ cms/cms_menu_imu.c \ cms/cms_menu_ledstrip.c \ + cms/cms_menu_main.c \ cms/cms_menu_misc.c \ cms/cms_menu_osd.c \ cms/cms_menu_power.c \ diff --git a/src/main/build/version.h b/src/main/build/version.h index 1ede5a2811..05ff38d7c5 100644 --- a/src/main/build/version.h +++ b/src/main/build/version.h @@ -23,6 +23,7 @@ #include "common/utils.h" #define FC_FIRMWARE_NAME "Betaflight" +#define FC_FIRMWARE_IDENTIFIER "BTFL" #define FC_VERSION_MAJOR 4 // increment when a major release is made (big new feature, etc) #define FC_VERSION_MINOR 2 // increment when a minor release is made (small new feature, change etc) #define FC_VERSION_PATCH_LEVEL 0 // increment when a bug is fixed diff --git a/src/main/cms/cms.c b/src/main/cms/cms.c index a01422b64c..72c888ffe4 100644 --- a/src/main/cms/cms.c +++ b/src/main/cms/cms.c @@ -41,7 +41,7 @@ #include "build/version.h" #include "cms/cms.h" -#include "cms/cms_menu_builtin.h" +#include "cms/cms_menu_main.h" #include "cms/cms_menu_saveexit.h" #include "cms/cms_types.h" @@ -393,20 +393,21 @@ static int cmsDrawMenuEntry(displayPort_t *pDisplay, const OSD_Entry *p, uint8_t case OME_Submenu: case OME_Funcall: - if (IS_PRINTVALUE(*flags)) { - + if (IS_PRINTVALUE(*flags)) { buff[0]= 0x0; - if ((p->type == OME_Submenu) && p->func && (*flags & OPTSTRING)) { + if (p->type == OME_Submenu && p->func && *flags & OPTSTRING) { // Special case of sub menu entry with optional value display. char *str = ((CMSMenuOptFuncPtr)p->func)(); - strncpy( buff, str, CMS_DRAW_BUFFER_LEN); + strncpy(buff, str, CMS_DRAW_BUFFER_LEN); + } else if (p->type == OME_Funcall && p->data) { + strncpy(buff, p->data, CMS_DRAW_BUFFER_LEN); } strncat(buff, ">", CMS_DRAW_BUFFER_LEN); - row = smallScreen ? row - 1 : row; + row = smallScreen ? row - 1 : row; cnt = cmsDrawMenuItemValue(pDisplay, buff, row, strlen(buff)); CLR_PRINTVALUE(*flags); } @@ -526,7 +527,7 @@ static int cmsDrawMenuEntry(displayPort_t *pDisplay, const OSD_Entry *p, uint8_t // Shouldn't happen. Notify creator of this menu content #ifdef CMS_OSD_RIGHT_ALIGNED_VALUES cnt = displayWrite(pDisplay, rightMenuColumn - 6, row, "BADENT"); -#else. +#else cnt = displayWrite(pDisplay, rightMenuColumn, row, "BADENT"); #endif #endif @@ -536,6 +537,8 @@ static int cmsDrawMenuEntry(displayPort_t *pDisplay, const OSD_Entry *p, uint8_t return cnt; } +STATIC_UNIT_TESTED long cmsMenuBack(displayPort_t *pDisplay); // Forward; will be resolved after merging + static void cmsDrawMenu(displayPort_t *pDisplay, uint32_t currentTimeUs) { if (!pageTop) @@ -572,8 +575,9 @@ static void cmsDrawMenu(displayPort_t *pDisplay, uint32_t currentTimeUs) // Cursor manipulation - while ((pageTop + currentCtx.cursorRow)->type == OME_Label) // skip label + while ((pageTop + currentCtx.cursorRow)->type == OME_Label || (pageTop + currentCtx.cursorRow)->type == OME_String) { // skip labels and strings currentCtx.cursorRow++; + } cmsPageDebug(); @@ -581,16 +585,27 @@ static void cmsDrawMenu(displayPort_t *pDisplay, uint32_t currentTimeUs) room -= displayWrite(pDisplay, leftMenuColumn, top + pDisplay->cursorRow * linesPerMenuItem, " "); } - if (room < 30) + if (room < 30) { return; + } if (pDisplay->cursorRow != currentCtx.cursorRow) { room -= displayWrite(pDisplay, leftMenuColumn, top + currentCtx.cursorRow * linesPerMenuItem, ">"); pDisplay->cursorRow = currentCtx.cursorRow; } - if (room < 30) + if (room < 30) { return; + } + + if (currentCtx.menu->onDisplayUpdate) { + long result = currentCtx.menu->onDisplayUpdate(pageTop + currentCtx.cursorRow); + if (result == MENU_CHAIN_BACK) { + cmsMenuBack(pDisplay); + + return; + } + } // Print text labels for (i = 0, p = pageTop; (p <= pageTop + pageMaxRow); i++, p++) { @@ -599,8 +614,9 @@ static void cmsDrawMenu(displayPort_t *pDisplay, uint32_t currentTimeUs) coloff += (p->type == OME_Label) ? 0 : 1; room -= displayWrite(pDisplay, coloff, top + i * linesPerMenuItem, p->text); CLR_PRINTLABEL(runtimeEntryFlags[i]); - if (room < 30) + if (room < 30) { return; + } } // Print values @@ -625,8 +641,6 @@ static void cmsMenuCountPage(displayPort_t *pDisplay) pageCount = (p - currentCtx.menu->entries - 1) / maxMenuItems + 1; } -STATIC_UNIT_TESTED long cmsMenuBack(displayPort_t *pDisplay); // Forward; will be resolved after merging - long cmsMenuChange(displayPort_t *pDisplay, const void *ptr) { const CMS_Menu *pMenu = (const CMS_Menu *)ptr; @@ -666,8 +680,11 @@ long cmsMenuChange(displayPort_t *pDisplay, const void *ptr) currentCtx.menu = pMenu; currentCtx.cursorRow = 0; - if (pMenu->onEnter && (pMenu->onEnter() == MENU_CHAIN_BACK)) { - return cmsMenuBack(pDisplay); + if (pMenu->onEnter) { + long result = pMenu->onEnter(); + if (result == MENU_CHAIN_BACK) { + return cmsMenuBack(pDisplay); + } } cmsMenuCountPage(pDisplay); @@ -691,8 +708,11 @@ STATIC_UNIT_TESTED long cmsMenuBack(displayPort_t *pDisplay) { // Let onExit function decide whether to allow exit or not. - if (currentCtx.menu->onExit && currentCtx.menu->onExit(pageTop + currentCtx.cursorRow) < 0) { - return -1; + if (currentCtx.menu->onExit) { + long result = currentCtx.menu->onExit(pageTop + currentCtx.cursorRow); + if (result < 0) { + return MENU_CHAIN_BACK; + } } if (!menuStackIdx) { @@ -717,7 +737,7 @@ void cmsMenuOpen(void) if (!pCurrentDisplay) return; cmsInMenu = true; - currentCtx = (cmsCtx_t){ &menuMain, 0, 0 }; + currentCtx = (cmsCtx_t){ &cmsx_menuMain, 0, 0 }; menuStackIdx = 0; setArmingDisabled(ARMING_DISABLED_CMS_MENU); displayLayerSelect(pCurrentDisplay, DISPLAYPORT_LAYER_FOREGROUND); // make sure the foreground layer is active @@ -783,7 +803,7 @@ long cmsMenuExit(displayPort_t *pDisplay, const void *ptr) case CMS_POPUP_SAVE: case CMS_POPUP_SAVEREBOOT: - cmsTraverseGlobalExit(&menuMain); + cmsTraverseGlobalExit(&cmsx_menuMain); if (currentCtx.menu->onExit) { currentCtx.menu->onExit((OSD_Entry *)NULL); // Forced exit @@ -1261,10 +1281,9 @@ static void cmsUpdate(uint32_t currentTimeUs) void cmsHandler(timeUs_t currentTimeUs) { - if (cmsDeviceCount < 0) + if (cmsDeviceCount < 0) { return; - - + } static timeUs_t lastCalledUs = 0; diff --git a/src/main/cms/cms_menu_blackbox.c b/src/main/cms/cms_menu_blackbox.c index 531c3660bb..1e4e70bbbf 100644 --- a/src/main/cms/cms_menu_blackbox.c +++ b/src/main/cms/cms_menu_blackbox.c @@ -222,6 +222,7 @@ CMS_Menu cmsx_menuBlackbox = { .onEnter = cmsx_Blackbox_onEnter, .onExit = cmsx_Blackbox_onExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuBlackboxEntries }; diff --git a/src/main/cms/cms_menu_failsafe.c b/src/main/cms/cms_menu_failsafe.c index 8499a0ce46..32974da9b9 100644 --- a/src/main/cms/cms_menu_failsafe.c +++ b/src/main/cms/cms_menu_failsafe.c @@ -92,6 +92,7 @@ CMS_Menu cmsx_menuFailsafe = { .onEnter = cmsx_Failsafe_onEnter, .onExit = cmsx_Failsafe_onExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuFailsafeEntries }; diff --git a/src/main/cms/cms_menu_firmware.c b/src/main/cms/cms_menu_firmware.c new file mode 100644 index 0000000000..326a0fc8fa --- /dev/null +++ b/src/main/cms/cms_menu_firmware.c @@ -0,0 +1,192 @@ +/* + * This file is part of Cleanflight and Betaflight. + * + * Cleanflight and Betaflight are free software. You can redistribute + * this software and/or modify this software under the terms of the + * GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * Cleanflight and Betaflight are distributed in the hope that they + * will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software. + * + * If not, see . + */ + +// +// Firmware related menu contents and support functions +// + +#include + +#include "platform.h" + +#ifdef USE_CMS + +#include "build/version.h" + +#include "cms/cms.h" +#include "cms/cms_types.h" + +#include "common/printf.h" + +#include "config/config.h" + +#include "drivers/system.h" + +#include "fc/runtime_config.h" + +#include "sensors/acceleration.h" +#include "sensors/barometer.h" +#include "sensors/gyro.h" + +#include "cms_menu_firmware.h" + + +// Calibration + +#define CALIBRATION_STATUS_MAX_LENGTH 6 + +#define CALIBRATION_STATUS_OFF " --- " +#define CALIBRATION_STATUS_NOK " NOK " +#define CALIBRATION_STATUS_WAIT "WAIT " +#define CALIBRATION_STATUS_OK " OK " + +static char gyroCalibrationStatus[CALIBRATION_STATUS_MAX_LENGTH]; +#if defined(USE_ACC) +static char accCalibrationStatus[CALIBRATION_STATUS_MAX_LENGTH]; +#endif +#if defined(USE_BARO) +static char baroCalibrationStatus[CALIBRATION_STATUS_MAX_LENGTH]; +#endif + +static long cmsx_CalibrationOnDisplayUpdate(const OSD_Entry *selected) +{ + UNUSED(selected); + + tfp_sprintf(gyroCalibrationStatus, sensors(SENSOR_GYRO) ? gyroIsCalibrationComplete() ? CALIBRATION_STATUS_OK : CALIBRATION_STATUS_WAIT: CALIBRATION_STATUS_OFF); +#if defined(USE_ACC) + tfp_sprintf(accCalibrationStatus, sensors(SENSOR_ACC) ? accIsCalibrationComplete() ? accHasBeenCalibrated() ? CALIBRATION_STATUS_OK : CALIBRATION_STATUS_NOK : CALIBRATION_STATUS_WAIT: CALIBRATION_STATUS_OFF); +#endif +#if defined(USE_BARO) + tfp_sprintf(baroCalibrationStatus, sensors(SENSOR_BARO) ? baroIsCalibrationComplete() ? CALIBRATION_STATUS_OK : CALIBRATION_STATUS_WAIT: CALIBRATION_STATUS_OFF); +#endif + + return 0; +} + +static long cmsCalibrateGyro(displayPort_t *pDisp, const void *self) +{ + UNUSED(pDisp); + UNUSED(self); + + if (sensors(SENSOR_GYRO)) { + gyroStartCalibration(false); + } + + return 0; +} + +#if defined(USE_ACC) +static long cmsCalibrateAcc(displayPort_t *pDisp, const void *self) +{ + UNUSED(pDisp); + UNUSED(self); + + if (sensors(SENSOR_ACC)) { + accStartCalibration(); + } + + return 0; +} +#endif + +#if defined(USE_BARO) +static long cmsCalibrateBaro(displayPort_t *pDisp, const void *self) +{ + UNUSED(pDisp); + UNUSED(self); + + if (sensors(SENSOR_BARO)) { + baroStartCalibration(); + } + + return 0; +} +#endif + +static const OSD_Entry menuCalibrationEntries[] = { + { "--- CALIBRATE ---", OME_Label, NULL, NULL, 0 }, + { "GYRO", OME_Funcall, cmsCalibrateGyro, gyroCalibrationStatus, DYNAMIC }, +#if defined(USE_ACC) + { "ACC", OME_Funcall, cmsCalibrateAcc, accCalibrationStatus, DYNAMIC }, +#endif +#if defined(USE_BARO) + { "BARO", OME_Funcall, cmsCalibrateBaro, baroCalibrationStatus, DYNAMIC }, +#endif + { "BACK", OME_Back, NULL, NULL, 0 }, + { NULL, OME_END, NULL, NULL, 0 } +}; + +static CMS_Menu cmsx_menuCalibration = { +#ifdef CMS_MENU_DEBUG + .GUARD_text = "MENUCALIBRATION", + .GUARD_type = OME_MENU, +#endif + .onEnter = NULL, + .onExit = NULL, + .checkRedirect = NULL, + .onDisplayUpdate = cmsx_CalibrationOnDisplayUpdate, + .entries = menuCalibrationEntries +}; + +// Info + +static char infoGitRev[GIT_SHORT_REVISION_LENGTH + 1]; +static char infoTargetName[] = __TARGET__; + +static long cmsx_FirmwareInit(void) +{ + unsigned i; + for (i = 0 ; i < GIT_SHORT_REVISION_LENGTH ; i++) { + if (shortGitRevision[i] >= 'a' && shortGitRevision[i] <= 'f') { + infoGitRev[i] = shortGitRevision[i] - 'a' + 'A'; + } else { + infoGitRev[i] = shortGitRevision[i]; + } + } + + infoGitRev[i] = 0x0; // Terminate string + + return 0; +} + +static const OSD_Entry menuFirmwareEntries[] = { + { "--- INFO ---", OME_Label, NULL, NULL, 0 }, + { "FWID", OME_String, NULL, FC_FIRMWARE_IDENTIFIER, 0 }, + { "FWVER", OME_String, NULL, FC_VERSION_STRING, 0 }, + { "GITREV", OME_String, NULL, infoGitRev, 0 }, + { "TARGET", OME_String, NULL, infoTargetName, 0 }, + { "--- SETUP ---", OME_Label, NULL, NULL, 0 }, + { "CALIBRATE", OME_Submenu, cmsMenuChange, &cmsx_menuCalibration, 0}, + { "BACK", OME_Back, NULL, NULL, 0 }, + { NULL, OME_END, NULL, NULL, 0 } +}; + +CMS_Menu cmsx_menuFirmware = { +#ifdef CMS_MENU_DEBUG + .GUARD_text = "MENUFIRMWARE", + .GUARD_type = OME_MENU, +#endif + .onEnter = cmsx_FirmwareInit, + .onExit = NULL, + .checkRedirect = NULL, + .onDisplayUpdate = NULL, + .entries = menuFirmwareEntries +}; +#endif diff --git a/src/main/cms/cms_menu_firmware.h b/src/main/cms/cms_menu_firmware.h new file mode 100644 index 0000000000..88d9d67471 --- /dev/null +++ b/src/main/cms/cms_menu_firmware.h @@ -0,0 +1,25 @@ +/* + * This file is part of Cleanflight and Betaflight. + * + * Cleanflight and Betaflight are free software. You can redistribute + * this software and/or modify this software under the terms of the + * GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * Cleanflight and Betaflight are distributed in the hope that they + * will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software. + * + * If not, see . + */ + +#pragma once + +#include "cms/cms_types.h" + +extern CMS_Menu cmsx_menuFirmware; diff --git a/src/main/cms/cms_menu_gps_rescue.c b/src/main/cms/cms_menu_gps_rescue.c index b2d9b7a756..6c9295b4d8 100644 --- a/src/main/cms/cms_menu_gps_rescue.c +++ b/src/main/cms/cms_menu_gps_rescue.c @@ -118,6 +118,7 @@ CMS_Menu cms_menuGpsRescuePid = { .onEnter = cms_menuGpsRescuePidOnEnter, .onExit = cms_menuGpsRescuePidOnExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cms_menuGpsRescuePidEntries, }; @@ -200,6 +201,7 @@ CMS_Menu cmsx_menuGpsRescue = { .onEnter = cmsx_menuGpsRescueOnEnter, .onExit = cmsx_menuGpsRescueOnExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuGpsRescueEntries, }; diff --git a/src/main/cms/cms_menu_imu.c b/src/main/cms/cms_menu_imu.c index 4fd79d457c..5570798c74 100644 --- a/src/main/cms/cms_menu_imu.c +++ b/src/main/cms/cms_menu_imu.c @@ -224,6 +224,7 @@ static CMS_Menu cmsx_menuPid = { .onEnter = cmsx_PidOnEnter, .onExit = cmsx_PidWriteback, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuPidEntries }; @@ -291,6 +292,7 @@ static CMS_Menu cmsx_menuRateProfile = { .onEnter = cmsx_RateProfileOnEnter, .onExit = cmsx_RateProfileWriteback, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuRateProfileEntries }; @@ -350,6 +352,7 @@ static CMS_Menu cmsx_menuLaunchControl = { .onEnter = cmsx_launchControlOnEnter, .onExit = cmsx_launchControlOnExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuLaunchControlEntries, }; #endif @@ -496,6 +499,7 @@ static CMS_Menu cmsx_menuProfileOther = { .onEnter = cmsx_profileOtherOnEnter, .onExit = cmsx_profileOtherOnExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuProfileOtherEntries, }; @@ -564,6 +568,7 @@ static CMS_Menu cmsx_menuFilterGlobal = { .onEnter = cmsx_menuGyro_onEnter, .onExit = cmsx_menuGyro_onExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuFilterGlobalEntries, }; @@ -652,6 +657,7 @@ static CMS_Menu cmsx_menuDynFilt = { .onEnter = cmsx_menuDynFilt_onEnter, .onExit = cmsx_menuDynFilt_onExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuDynFiltEntries, }; @@ -713,6 +719,7 @@ static CMS_Menu cmsx_menuFilterPerProfile = { .onEnter = cmsx_FilterPerProfileRead, .onExit = cmsx_FilterPerProfileWriteback, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuFilterPerProfileEntries, }; @@ -784,6 +791,7 @@ CMS_Menu cmsx_menuCopyProfile = { .onEnter = cmsx_menuCopyProfile_onEnter, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuCopyProfileEntries, }; @@ -822,6 +830,7 @@ CMS_Menu cmsx_menuImu = { .onEnter = cmsx_menuImu_onEnter, .onExit = cmsx_menuImu_onExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuImuEntries, }; diff --git a/src/main/cms/cms_menu_ledstrip.c b/src/main/cms/cms_menu_ledstrip.c index 25ec667b8f..9cecc42c7e 100644 --- a/src/main/cms/cms_menu_ledstrip.c +++ b/src/main/cms/cms_menu_ledstrip.c @@ -128,6 +128,7 @@ CMS_Menu cmsx_menuLedstrip = { .onEnter = cmsx_Ledstrip_OnEnter, .onExit = cmsx_Ledstrip_OnExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuLedstripEntries }; #endif // LED_STRIP diff --git a/src/main/cms/cms_menu_builtin.c b/src/main/cms/cms_menu_main.c similarity index 64% rename from src/main/cms/cms_menu_builtin.c rename to src/main/cms/cms_menu_main.c index 8c9cf81f63..a6d55f76c7 100644 --- a/src/main/cms/cms_menu_builtin.c +++ b/src/main/cms/cms_menu_main.c @@ -19,20 +19,15 @@ */ // -// Built-in menu contents and support functions +// Main menu structure and support functions // #include -#include -#include -#include #include "platform.h" #ifdef USE_CMS -#include "build/version.h" - #include "cms/cms.h" #include "cms/cms_types.h" @@ -41,6 +36,7 @@ #include "cms/cms_menu_imu.h" #include "cms/cms_menu_blackbox.h" #include "cms/cms_menu_failsafe.h" +#include "cms/cms_menu_firmware.h" #include "cms/cms_menu_ledstrip.h" #include "cms/cms_menu_misc.h" #include "cms/cms_menu_osd.h" @@ -51,54 +47,10 @@ #include "cms/cms_menu_vtx_common.h" -#include "drivers/system.h" - #include "config/config.h" -#include "msp/msp_protocol.h" // XXX for FC identification... not available elsewhere +#include "cms_menu_main.h" -#include "cms_menu_builtin.h" - - -// Info - -static char infoGitRev[GIT_SHORT_REVISION_LENGTH + 1]; -static char infoTargetName[] = __TARGET__; - -static long cmsx_InfoInit(void) -{ - int i; - for ( i = 0 ; i < GIT_SHORT_REVISION_LENGTH ; i++) { - if (shortGitRevision[i] >= 'a' && shortGitRevision[i] <= 'f') - infoGitRev[i] = shortGitRevision[i] - 'a' + 'A'; - else - infoGitRev[i] = shortGitRevision[i]; - } - - infoGitRev[i] = 0x0; // Terminate string - return 0; -} - -static const OSD_Entry menuInfoEntries[] = { - { "--- INFO ---", OME_Label, NULL, NULL, 0 }, - { "FWID", OME_String, NULL, BETAFLIGHT_IDENTIFIER, 0 }, - { "FWVER", OME_String, NULL, FC_VERSION_STRING, 0 }, - { "GITREV", OME_String, NULL, infoGitRev, 0 }, - { "TARGET", OME_String, NULL, infoTargetName, 0 }, - { "BACK", OME_Back, NULL, NULL, 0 }, - { NULL, OME_END, NULL, NULL, 0 } -}; - -static CMS_Menu menuInfo = { -#ifdef CMS_MENU_DEBUG - .GUARD_text = "MENUINFO", - .GUARD_type = OME_MENU, -#endif - .onEnter = cmsx_InfoInit, - .onExit = NULL, - .checkRedirect = NULL, - .entries = menuInfoEntries -}; // Features @@ -125,7 +77,7 @@ static const OSD_Entry menuFeaturesEntries[] = {NULL, OME_END, NULL, NULL, 0} }; -static CMS_Menu menuFeatures = { +static CMS_Menu cmsx_menuFeatures = { #ifdef CMS_MENU_DEBUG .GUARD_text = "MENUFEATURES", .GUARD_type = OME_MENU, @@ -133,6 +85,7 @@ static CMS_Menu menuFeatures = { .onEnter = NULL, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = menuFeaturesEntries, }; @@ -155,21 +108,17 @@ static const OSD_Entry menuMainEntries[] = {"-- MAIN --", OME_Label, NULL, NULL, 0}, {"PROFILE", OME_Submenu, cmsMenuChange, &cmsx_menuImu, 0}, - {"FEATURES", OME_Submenu, cmsMenuChange, &menuFeatures, 0}, + {"FEATURES", OME_Submenu, cmsMenuChange, &cmsx_menuFeatures, 0}, #ifdef USE_OSD {"OSD", OME_Submenu, cmsMenuChange, &cmsx_menuOsd, 0}, #endif - {"FC&FW INFO", OME_Submenu, cmsMenuChange, &menuInfo, 0}, + {"FC&FIRMWARE", OME_Submenu, cmsMenuChange, &cmsx_menuFirmware, 0}, {"MISC", OME_Submenu, cmsMenuChange, &cmsx_menuMisc, 0}, {"SAVE/EXIT", OME_Funcall, cmsx_SaveExitMenu, NULL, 0}, -#ifdef CMS_MENU_DEBUG - {"ERR SAMPLE", OME_Submenu, cmsMenuChange, &menuInfoEntries[0], 0}, -#endif - - {NULL,OME_END, NULL, NULL, 0} + {NULL,OME_END, NULL, NULL, 0}, }; -CMS_Menu menuMain = { +CMS_Menu cmsx_menuMain = { #ifdef CMS_MENU_DEBUG .GUARD_text = "MENUMAIN", .GUARD_type = OME_MENU, @@ -177,6 +126,7 @@ CMS_Menu menuMain = { .onEnter = NULL, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = menuMainEntries, }; #endif diff --git a/src/main/cms/cms_menu_builtin.h b/src/main/cms/cms_menu_main.h similarity index 96% rename from src/main/cms/cms_menu_builtin.h rename to src/main/cms/cms_menu_main.h index 360a87ac44..1f74b655df 100644 --- a/src/main/cms/cms_menu_builtin.h +++ b/src/main/cms/cms_menu_main.h @@ -22,4 +22,4 @@ #include "cms/cms_types.h" -extern CMS_Menu menuMain; +extern CMS_Menu cmsx_menuMain; diff --git a/src/main/cms/cms_menu_misc.c b/src/main/cms/cms_menu_misc.c index c76b95d463..363c877594 100644 --- a/src/main/cms/cms_menu_misc.c +++ b/src/main/cms/cms_menu_misc.c @@ -30,29 +30,32 @@ #include "build/debug.h" #include "build/version.h" -#include "drivers/time.h" - #include "cms/cms.h" #include "cms/cms_types.h" #include "cms/cms_menu_ledstrip.h" #include "common/utils.h" -#include "config/feature.h" -#include "pg/pg.h" -#include "pg/pg_ids.h" -#include "pg/motor.h" -#include "pg/rx.h" - #include "config/config.h" +#include "config/feature.h" + +#include "drivers/time.h" + #include "fc/rc_controls.h" #include "flight/mixer.h" +#include "pg/motor.h" +#include "pg/pg.h" +#include "pg/pg_ids.h" +#include "pg/rx.h" + #include "rx/rx.h" #include "sensors/battery.h" +#include "cms_menu_misc.h" + // // Misc // @@ -94,6 +97,7 @@ CMS_Menu cmsx_menuRcPreview = { .onEnter = NULL, .onExit = cmsx_menuRcConfirmBack, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuRcEntries }; @@ -146,6 +150,7 @@ CMS_Menu cmsx_menuMisc = { .onEnter = cmsx_menuMiscOnEnter, .onExit = cmsx_menuMiscOnExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = menuMiscEntries }; diff --git a/src/main/cms/cms_menu_misc.h b/src/main/cms/cms_menu_misc.h index 582fdf314c..168f4154ae 100644 --- a/src/main/cms/cms_menu_misc.h +++ b/src/main/cms/cms_menu_misc.h @@ -20,4 +20,6 @@ #pragma once +#include "cms_types.h" + extern CMS_Menu cmsx_menuMisc; diff --git a/src/main/cms/cms_menu_osd.c b/src/main/cms/cms_menu_osd.c index 1dbcc41e23..e1a0a6d724 100644 --- a/src/main/cms/cms_menu_osd.c +++ b/src/main/cms/cms_menu_osd.c @@ -151,7 +151,7 @@ const OSD_Entry menuOsdActiveElemsEntries[] = {NULL, OME_END, NULL, NULL, 0} }; -CMS_Menu menuOsdActiveElems = { +static CMS_Menu menuOsdActiveElems = { #ifdef CMS_MENU_DEBUG .GUARD_text = "MENUOSDACT", .GUARD_type = OME_MENU, @@ -159,6 +159,7 @@ CMS_Menu menuOsdActiveElems = { .onEnter = menuOsdActiveElemsOnEnter, .onExit = menuOsdActiveElemsOnExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = menuOsdActiveElemsEntries }; @@ -216,7 +217,7 @@ const OSD_Entry menuAlarmsEntries[] = {NULL, OME_END, NULL, NULL, 0} }; -CMS_Menu menuAlarms = { +static CMS_Menu menuAlarms = { #ifdef CMS_MENU_DEBUG .GUARD_text = "MENUALARMS", .GUARD_type = OME_MENU, @@ -224,6 +225,7 @@ CMS_Menu menuAlarms = { .onEnter = menuAlarmsOnEnter, .onExit = menuAlarmsOnExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = menuAlarmsEntries, }; @@ -269,7 +271,7 @@ const OSD_Entry menuTimersEntries[] = {NULL, OME_END, NULL, NULL, 0} }; -CMS_Menu menuTimers = { +static CMS_Menu menuTimers = { #ifdef CMS_MENU_DEBUG .GUARD_text = "MENUTIMERS", .GUARD_type = OME_MENU, @@ -277,6 +279,7 @@ CMS_Menu menuTimers = { .onEnter = menuTimersOnEnter, .onExit = menuTimersOnExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = menuTimersEntries, }; #endif /* USE_EXTENDED_CMS_MENUS */ @@ -351,6 +354,7 @@ CMS_Menu cmsx_menuOsd = { .onEnter = cmsx_menuOsdOnEnter, .onExit = cmsx_menuOsdOnExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuOsdEntries }; #endif // CMS diff --git a/src/main/cms/cms_menu_power.c b/src/main/cms/cms_menu_power.c index e0005cbb25..4528b2d69e 100644 --- a/src/main/cms/cms_menu_power.c +++ b/src/main/cms/cms_menu_power.c @@ -127,6 +127,7 @@ CMS_Menu cmsx_menuPower = { .onEnter = cmsx_Power_onEnter, .onExit = cmsx_Power_onExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuPowerEntries }; diff --git a/src/main/cms/cms_menu_saveexit.c b/src/main/cms/cms_menu_saveexit.c index 0c6055ff67..3e39e4d1ea 100644 --- a/src/main/cms/cms_menu_saveexit.c +++ b/src/main/cms/cms_menu_saveexit.c @@ -52,6 +52,7 @@ CMS_Menu cmsx_menuSaveExit = { .onEnter = NULL, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuSaveExitEntries }; @@ -72,6 +73,7 @@ CMS_Menu cmsx_menuSaveExitReboot = { .onEnter = NULL, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuSaveExitRebootEntries }; diff --git a/src/main/cms/cms_menu_vtx_common.c b/src/main/cms/cms_menu_vtx_common.c index 9ea05c519b..3cb7b6fccc 100644 --- a/src/main/cms/cms_menu_vtx_common.c +++ b/src/main/cms/cms_menu_vtx_common.c @@ -114,6 +114,7 @@ CMS_Menu cmsx_menuVtxRedirect = { .onEnter = setStatusMessage, .onExit = NULL, .checkRedirect = vtxMenuRedirect, + .onDisplayUpdate = NULL, .entries = vtxRedirectMenuEntries, }; diff --git a/src/main/cms/cms_menu_vtx_rtc6705.c b/src/main/cms/cms_menu_vtx_rtc6705.c index 129bf7303f..77830368cc 100644 --- a/src/main/cms/cms_menu_vtx_rtc6705.c +++ b/src/main/cms/cms_menu_vtx_rtc6705.c @@ -165,6 +165,7 @@ CMS_Menu cmsx_menuVtxRTC6705 = { .onEnter = cmsx_Vtx_onEnter, .onExit = cmsx_Vtx_onExit, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = cmsx_menuVtxEntries }; diff --git a/src/main/cms/cms_menu_vtx_smartaudio.c b/src/main/cms/cms_menu_vtx_smartaudio.c index 9743d332e6..a280fd9f90 100644 --- a/src/main/cms/cms_menu_vtx_smartaudio.c +++ b/src/main/cms/cms_menu_vtx_smartaudio.c @@ -417,6 +417,7 @@ static CMS_Menu saCmsMenuStats = { .onEnter = NULL, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = saCmsMenuStatsEntries }; #endif /* USE_EXTENDED_CMS_MENUS */ @@ -615,6 +616,7 @@ static CMS_Menu saCmsMenuPORFreq = .onEnter = saCmsSetPORFreqOnEnter, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = saCmsMenuPORFreqEntries, }; @@ -638,6 +640,7 @@ static CMS_Menu saCmsMenuUserFreq = .onEnter = saCmsSetUserFreqOnEnter, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = saCmsMenuUserFreqEntries, }; @@ -666,6 +669,7 @@ static CMS_Menu saCmsMenuConfig = { .onEnter = NULL, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = saCmsMenuConfigEntries }; @@ -686,6 +690,7 @@ static CMS_Menu saCmsMenuCommence = { .onEnter = NULL, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = saCmsMenuCommenceEntries, }; @@ -759,6 +764,7 @@ CMS_Menu cmsx_menuVtxSmartAudio = { .onEnter = sacms_SetupTopMenu, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = saCmsMenuOfflineEntries, }; diff --git a/src/main/cms/cms_menu_vtx_tramp.c b/src/main/cms/cms_menu_vtx_tramp.c index 3a927066a5..feee4066b5 100644 --- a/src/main/cms/cms_menu_vtx_tramp.c +++ b/src/main/cms/cms_menu_vtx_tramp.c @@ -244,6 +244,7 @@ static CMS_Menu trampCmsMenuCommence = { .onEnter = NULL, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = trampCmsMenuCommenceEntries, }; @@ -272,6 +273,7 @@ CMS_Menu cmsx_menuVtxTramp = { .onEnter = trampCmsOnEnter, .onExit = NULL, .checkRedirect = NULL, + .onDisplayUpdate = NULL, .entries = trampMenuEntries, }; #endif diff --git a/src/main/cms/cms_types.h b/src/main/cms/cms_types.h index 1e659d472b..30c4b3472b 100644 --- a/src/main/cms/cms_types.h +++ b/src/main/cms/cms_types.h @@ -98,6 +98,8 @@ typedef long (*CMSMenuOnExitPtr)(const OSD_Entry *self); typedef const void * (*CMSMenuCheckRedirectPtr)(void); +typedef long (*CMSMenuOnDisplayUpdatePtr)(const OSD_Entry *selected); + typedef struct { #ifdef CMS_MENU_DEBUG @@ -108,6 +110,7 @@ typedef struct const CMSMenuFuncPtr onEnter; const CMSMenuOnExitPtr onExit; const CMSMenuCheckRedirectPtr checkRedirect; + const CMSMenuOnDisplayUpdatePtr onDisplayUpdate; const OSD_Entry *entries; } CMS_Menu; diff --git a/src/main/config/config.c b/src/main/config/config.c index 48b1f24573..f7364472e2 100644 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -276,6 +276,12 @@ static void validateAndFixConfig(void) buildAlignmentFromStandardAlignment(&gyroDeviceConfigMutable(1)->customAlignment, gyroDeviceConfig(1)->alignment); #endif + if (accelerometerConfig()->accZero.values.roll != 0 || + accelerometerConfig()->accZero.values.pitch != 0 || + accelerometerConfig()->accZero.values.yaw != 0) { + accelerometerConfigMutable()->accZero.values.calibrationCompleted = 1; + } + if (!(featureIsConfigured(FEATURE_RX_PARALLEL_PWM) || featureIsConfigured(FEATURE_RX_PPM) || featureIsConfigured(FEATURE_RX_SERIAL) || featureIsConfigured(FEATURE_RX_MSP) || featureIsConfigured(FEATURE_RX_SPI))) { featureEnable(DEFAULT_RX_FEATURE); } diff --git a/src/main/fc/core.c b/src/main/fc/core.c index 9743c4c2c5..5cf0a17bde 100644 --- a/src/main/fc/core.c +++ b/src/main/fc/core.c @@ -177,15 +177,15 @@ PG_RESET_TEMPLATE(throttleCorrectionConfig_t, throttleCorrectionConfig, static bool isCalibrating(void) { - return !isGyroCalibrationComplete() + return (sensors(SENSOR_GYRO) && !gyroIsCalibrationComplete()) #ifdef USE_ACC || (sensors(SENSOR_ACC) && !accIsCalibrationComplete()) #endif #ifdef USE_BARO - || (sensors(SENSOR_BARO) && !isBaroCalibrationComplete()) + || (sensors(SENSOR_BARO) && !baroIsCalibrationComplete()) #endif #ifdef USE_MAG - || (sensors(SENSOR_MAG) && !isCompassCalibrationComplete()) + || (sensors(SENSOR_MAG) && !compassIsCalibrationComplete()) #endif ; } @@ -216,11 +216,7 @@ static bool accNeedsCalibration(void) if (sensors(SENSOR_ACC)) { // Check to see if the ACC has already been calibrated - if (accelerometerConfig()->accZero.values.calibrationCompleted || - accelerometerConfig()->accZero.values.roll != 0 || - accelerometerConfig()->accZero.values.pitch != 0 || - accelerometerConfig()->accZero.values.yaw != 0) { - + if (accHasBeenCalibrated()) { return false; } diff --git a/src/main/flight/position.c b/src/main/flight/position.c index 3e88fb23c4..94bb4d5d87 100644 --- a/src/main/flight/position.c +++ b/src/main/flight/position.c @@ -109,7 +109,7 @@ void calculateEstimatedAltitude(timeUs_t currentTimeUs) bool haveGpsAlt = false; #ifdef USE_BARO if (sensors(SENSOR_BARO)) { - if (!isBaroCalibrationComplete()) { + if (!baroIsCalibrationComplete()) { performBaroCalibrationCycle(); } else { baroAlt = baroCalculateAltitude(); diff --git a/src/main/msc/emfat_file.c b/src/main/msc/emfat_file.c index 118af8891e..22a3112101 100644 --- a/src/main/msc/emfat_file.c +++ b/src/main/msc/emfat_file.c @@ -261,7 +261,7 @@ static const emfat_entry_t entriesPredefined[] = #ifdef USE_EMFAT_README { "readme.txt", false, 0, 1, 0, README_SIZE, 1024*1024, (long)readme_file, CMA, memory_read_proc, NULL, { 0 } }, #endif - { "BTFL_ALL.BBL", 0, 0, 1, 0, 0, 0, 0, CMA, bblog_read_proc, NULL, { 0 } }, + { FC_FIRMWARE_IDENTIFIER "_ALL.BBL", 0, 0, 1, 0, 0, 0, 0, CMA, bblog_read_proc, NULL, { 0 } }, { "PADDING.TXT", 0, ATTR_HIDDEN, 1, 0, 0, 0, 0, CMA, NULL, NULL, { 0 } }, }; @@ -288,7 +288,7 @@ static void emfat_set_entry_cma(emfat_entry_t *entry) static void emfat_add_log(emfat_entry_t *entry, int number, uint32_t offset, uint32_t size) { - tfp_sprintf(logNames[number], "BTFL_%03d.BBL", number + 1); + tfp_sprintf(logNames[number], FC_FIRMWARE_IDENTIFIER "_%03d.BBL", number + 1); entry->name = logNames[number]; entry->level = 1; entry->offset = offset; diff --git a/src/main/msp/msp.c b/src/main/msp/msp.c index 22582ca065..58fef8cc16 100644 --- a/src/main/msp/msp.c +++ b/src/main/msp/msp.c @@ -141,7 +141,7 @@ #include "msp.h" -static const char * const flightControllerIdentifier = BETAFLIGHT_IDENTIFIER; // 4 UPPER CASE alpha numeric characters that identify the flight controller. +static const char * const flightControllerIdentifier = FC_FIRMWARE_IDENTIFIER; // 4 UPPER CASE alpha numeric characters that identify the flight controller. enum { MSP_REBOOT_FIRMWARE = 0, diff --git a/src/main/msp/msp_protocol.h b/src/main/msp/msp_protocol.h index f4f3972d20..ef9978a7ac 100644 --- a/src/main/msp/msp_protocol.h +++ b/src/main/msp/msp_protocol.h @@ -68,7 +68,7 @@ #define MULTIWII_IDENTIFIER "MWII"; #define BASEFLIGHT_IDENTIFIER "BAFL"; -#define BETAFLIGHT_IDENTIFIER "BTFL" +//#define BETAFLIGHT_IDENTIFIER "BTFL" Actual value stored in FC_FIRMWARE_IDENTIFIER in build/version.h #define CLEANFLIGHT_IDENTIFIER "CLFL" #define INAV_IDENTIFIER "INAV" #define RACEFLIGHT_IDENTIFIER "RCFL" diff --git a/src/main/sensors/acceleration.c b/src/main/sensors/acceleration.c index 65ace6804c..0dce6835a4 100644 --- a/src/main/sensors/acceleration.c +++ b/src/main/sensors/acceleration.c @@ -99,6 +99,11 @@ static void setConfigCalibrationCompleted(void) accelerometerConfigMutable()->accZero.values.calibrationCompleted = 1; } +bool accHasBeenCalibrated(void) +{ + return accelerometerConfig()->accZero.values.calibrationCompleted; +} + void accResetRollAndPitchTrims(void) { resetRollAndPitchTrims(&accelerometerConfigMutable()->accelerometerTrims); diff --git a/src/main/sensors/acceleration.h b/src/main/sensors/acceleration.h index 27ea13c3ca..a0218fb285 100644 --- a/src/main/sensors/acceleration.h +++ b/src/main/sensors/acceleration.h @@ -79,6 +79,7 @@ PG_DECLARE(accelerometerConfig_t, accelerometerConfig); bool accInit(uint32_t gyroTargetLooptime); bool accIsCalibrationComplete(void); +bool accHasBeenCalibrated(void); void accStartCalibration(void); void resetRollAndPitchTrims(rollAndPitchTrims_t *rollAndPitchTrims); void accUpdate(timeUs_t currentTimeUs, rollAndPitchTrims_t *rollAndPitchTrims); diff --git a/src/main/sensors/barometer.c b/src/main/sensors/barometer.c index 794302ccdd..faf8dcc243 100644 --- a/src/main/sensors/barometer.c +++ b/src/main/sensors/barometer.c @@ -275,7 +275,7 @@ bool baroDetect(baroDev_t *dev, baroSensor_e baroHardwareToUse) return true; } -bool isBaroCalibrationComplete(void) +bool baroIsCalibrationComplete(void) { return calibratingB == 0; } @@ -434,7 +434,7 @@ int32_t baroCalculateAltitude(void) // calculates height from ground via baro readings // see: https://github.com/diydrones/ardupilot/blob/master/libraries/AP_Baro/AP_Baro.cpp#L140 - if (isBaroCalibrationComplete()) { + if (baroIsCalibrationComplete()) { BaroAlt_tmp = lrintf((1.0f - pow_approx((float)(baroPressureSum / PRESSURE_SAMPLE_COUNT) / 101325.0f, 0.190259f)) * 4433000.0f); // in cm BaroAlt_tmp -= baroGroundAltitude; baro.BaroAlt = lrintf((float)baro.BaroAlt * CONVERT_PARAMETER_TO_FLOAT(barometerConfig()->baro_noise_lpf) + (float)BaroAlt_tmp * (1.0f - CONVERT_PARAMETER_TO_FLOAT(barometerConfig()->baro_noise_lpf))); // additional LPF to reduce baro noise @@ -453,11 +453,11 @@ void performBaroCalibrationCycle(void) baroGroundPressure += baroPressureSum / PRESSURE_SAMPLE_COUNT; baroGroundAltitude = (1.0f - pow_approx((baroGroundPressure / 8) / 101325.0f, 0.190259f)) * 4433000.0f; - if (baroGroundPressure == savedGroundPressure) - calibratingB = 0; - else { - calibratingB--; - savedGroundPressure=baroGroundPressure; + if (baroGroundPressure == savedGroundPressure) { + calibratingB = 0; + } else { + calibratingB--; + savedGroundPressure = baroGroundPressure; } } diff --git a/src/main/sensors/barometer.h b/src/main/sensors/barometer.h index 252179b119..e9a3a4f175 100644 --- a/src/main/sensors/barometer.h +++ b/src/main/sensors/barometer.h @@ -63,7 +63,7 @@ extern baro_t baro; void baroPreInit(void); bool baroDetect(baroDev_t *dev, baroSensor_e baroHardwareToUse); -bool isBaroCalibrationComplete(void); +bool baroIsCalibrationComplete(void); void baroStartCalibration(void); void baroSetGroundLevel(void); uint32_t baroUpdate(void); diff --git a/src/main/sensors/compass.c b/src/main/sensors/compass.c index f593e896e2..de24518fbd 100644 --- a/src/main/sensors/compass.c +++ b/src/main/sensors/compass.c @@ -332,7 +332,7 @@ void compassStartCalibration(void) } } -bool isCompassCalibrationComplete(void) +bool compassIsCalibrationComplete(void) { return tCal == 0; } diff --git a/src/main/sensors/compass.h b/src/main/sensors/compass.h index 57d1b2bafc..1250d925cc 100644 --- a/src/main/sensors/compass.h +++ b/src/main/sensors/compass.h @@ -68,5 +68,5 @@ void compassUpdate(timeUs_t currentTime); bool compassInit(void); void compassPreInit(void); void compassStartCalibration(void); -bool isCompassCalibrationComplete(void); +bool compassIsCalibrationComplete(void); diff --git a/src/main/sensors/gyro.c b/src/main/sensors/gyro.c index a4fb73d92b..0069249258 100644 --- a/src/main/sensors/gyro.c +++ b/src/main/sensors/gyro.c @@ -119,7 +119,7 @@ typedef struct gyroCalibration_s { int32_t cyclesRemaining; } gyroCalibration_t; -bool firstArmingCalibrationWasStarted = false; +static bool firstArmingCalibrationWasStarted = false; typedef struct gyroSensor_s { gyroDev_t gyroDev; @@ -773,7 +773,7 @@ FAST_CODE bool isGyroSensorCalibrationComplete(const gyroSensor_t *gyroSensor) return gyroSensor->calibration.cyclesRemaining == 0; } -FAST_CODE bool isGyroCalibrationComplete(void) +FAST_CODE bool gyroIsCalibrationComplete(void) { switch (gyroToUse) { default: @@ -819,21 +819,23 @@ static void gyroSetCalibrationCycles(gyroSensor_t *gyroSensor) void gyroStartCalibration(bool isFirstArmingCalibration) { - if (!(isFirstArmingCalibration && firstArmingCalibrationWasStarted)) { - gyroSetCalibrationCycles(&gyroSensor1); + if (isFirstArmingCalibration && firstArmingCalibrationWasStarted) { + return; + } + + gyroSetCalibrationCycles(&gyroSensor1); #ifdef USE_MULTI_GYRO - gyroSetCalibrationCycles(&gyroSensor2); + gyroSetCalibrationCycles(&gyroSensor2); #endif - if (isFirstArmingCalibration) { - firstArmingCalibrationWasStarted = true; - } + if (isFirstArmingCalibration) { + firstArmingCalibrationWasStarted = true; } } bool isFirstArmingGyroCalibrationRunning(void) { - return firstArmingCalibrationWasStarted && !isGyroCalibrationComplete(); + return firstArmingCalibrationWasStarted && !gyroIsCalibrationComplete(); } STATIC_UNIT_TESTED void performGyroCalibration(gyroSensor_t *gyroSensor, uint8_t gyroMovementCalibrationThreshold) @@ -879,8 +881,8 @@ STATIC_UNIT_TESTED void performGyroCalibration(gyroSensor_t *gyroSensor, uint8_t beeper(BEEPER_GYRO_CALIBRATED); } } - --gyroSensor->calibration.cyclesRemaining; + --gyroSensor->calibration.cyclesRemaining; } #if defined(USE_GYRO_SLEW_LIMITER) diff --git a/src/main/sensors/gyro.h b/src/main/sensors/gyro.h index fc8351173e..9c1baffa85 100644 --- a/src/main/sensors/gyro.h +++ b/src/main/sensors/gyro.h @@ -167,7 +167,7 @@ struct mpuDetectionResult_s; const struct mpuDetectionResult_s *gyroMpuDetectionResult(void); void gyroStartCalibration(bool isFirstArmingCalibration); bool isFirstArmingGyroCalibrationRunning(void); -bool isGyroCalibrationComplete(void); +bool gyroIsCalibrationComplete(void); void gyroReadTemperature(void); int16_t gyroGetTemperature(void); int16_t gyroRateDps(int axis); diff --git a/src/test/unit/arming_prevention_unittest.cc b/src/test/unit/arming_prevention_unittest.cc index a18b7ca265..f0679c8f28 100644 --- a/src/test/unit/arming_prevention_unittest.cc +++ b/src/test/unit/arming_prevention_unittest.cc @@ -88,6 +88,7 @@ TEST(ArmingPreventionTest, CalibrationPowerOnGraceAngleThrottleArmSwitch) // given simulationTime = 0; gyroCalibDone = false; + sensorsSet(SENSOR_GYRO); // and modeActivationConditionsMutable(0)->auxChannelIndex = 0; @@ -178,6 +179,7 @@ TEST(ArmingPreventionTest, ArmingGuardRadioLeftOnAndArmed) // given simulationTime = 0; gyroCalibDone = false; + sensorsSet(SENSOR_GYRO); // and modeActivationConditionsMutable(0)->auxChannelIndex = 0; @@ -1036,8 +1038,8 @@ extern "C" { void saveConfigAndNotify(void) {} void blackboxFinish(void) {} bool accIsCalibrationComplete(void) { return true; } - bool isBaroCalibrationComplete(void) { return true; } - bool isGyroCalibrationComplete(void) { return gyroCalibDone; } + bool baroIsCalibrationComplete(void) { return true; } + bool gyroIsCalibrationComplete(void) { return gyroCalibDone; } void gyroStartCalibration(bool) {} bool isFirstArmingGyroCalibrationRunning(void) { return false; } void pidController(const pidProfile_t *, timeUs_t) {} @@ -1072,6 +1074,7 @@ extern "C" { void transponderUpdate(timeUs_t) {} void GPS_reset_home_position(void) {} void accStartCalibration(void) {} + bool accHasBeenCalibrated(void) { return true; } void baroSetGroundLevel(void) {} void changePidProfile(uint8_t) {} void changeControlRateProfile(uint8_t) {} @@ -1093,6 +1096,6 @@ extern "C" { void applyAccelerometerTrimsDelta(rollAndPitchTrims_t*) {} bool isFixedWing(void) { return false; } void compassStartCalibration(void) {} - bool isCompassCalibrationComplete(void) { return true; } + bool compassIsCalibrationComplete(void) { return true; } bool isUpright(void) { return mockIsUpright; } } diff --git a/src/test/unit/cms_unittest.cc b/src/test/unit/cms_unittest.cc index 348139e666..c2547aa88f 100644 --- a/src/test/unit/cms_unittest.cc +++ b/src/test/unit/cms_unittest.cc @@ -125,7 +125,7 @@ static OSD_Entry menuMainEntries[] = {"EXIT", OME_OSD_Exit, cmsMenuExit, (void*)0, 0}, {NULL, OME_END, NULL, NULL, 0} }; -CMS_Menu menuMain = { +CMS_Menu cmsx_menuMain = { #ifdef CMS_MENU_DEBUG .GUARD_text = "MENUMAIN", .GUARD_type = OME_MENU, diff --git a/src/test/unit/flight_imu_unittest.cc b/src/test/unit/flight_imu_unittest.cc index c4790e6cc2..324c71652b 100644 --- a/src/test/unit/flight_imu_unittest.cc +++ b/src/test/unit/flight_imu_unittest.cc @@ -242,7 +242,7 @@ uint32_t millis(void) { return 0; } uint32_t micros(void) { return 0; } bool compassIsHealthy(void) { return true; } -bool isBaroCalibrationComplete(void) { return true; } +bool baroIsCalibrationComplete(void) { return true; } void performBaroCalibrationCycle(void) {} int32_t baroCalculateAltitude(void) { return 0; } bool gyroGetAccumulationAverage(float *) { return false; } diff --git a/src/test/unit/sensor_gyro_unittest.cc b/src/test/unit/sensor_gyro_unittest.cc index abeb27252b..c11fa23f00 100644 --- a/src/test/unit/sensor_gyro_unittest.cc +++ b/src/test/unit/sensor_gyro_unittest.cc @@ -100,8 +100,8 @@ TEST(SensorGyro, Calibrate) EXPECT_EQ(9, gyroDevPtr->gyroZero[Y]); EXPECT_EQ(10, gyroDevPtr->gyroZero[Z]); gyroStartCalibration(false); - EXPECT_EQ(false, isGyroCalibrationComplete()); - while (!isGyroCalibrationComplete()) { + EXPECT_EQ(false, gyroIsCalibrationComplete()); + while (!gyroIsCalibrationComplete()) { gyroDevPtr->readFn(gyroDevPtr); performGyroCalibration(gyroSensorPtr, gyroMovementCalibrationThreshold); } @@ -121,16 +121,16 @@ TEST(SensorGyro, Update) gyroInit(); gyroDevPtr->readFn = fakeGyroRead; gyroStartCalibration(false); - EXPECT_EQ(false, isGyroCalibrationComplete()); + EXPECT_EQ(false, gyroIsCalibrationComplete()); timeUs_t currentTimeUs = 0; fakeGyroSet(gyroDevPtr, 5, 6, 7); gyroUpdate(currentTimeUs); - while (!isGyroCalibrationComplete()) { + while (!gyroIsCalibrationComplete()) { fakeGyroSet(gyroDevPtr, 5, 6, 7); gyroUpdate(currentTimeUs); } - EXPECT_EQ(true, isGyroCalibrationComplete()); + EXPECT_EQ(true, gyroIsCalibrationComplete()); EXPECT_EQ(5, gyroDevPtr->gyroZero[X]); EXPECT_EQ(6, gyroDevPtr->gyroZero[Y]); EXPECT_EQ(7, gyroDevPtr->gyroZero[Z]); diff --git a/src/test/unit/vtx_unittest.cc b/src/test/unit/vtx_unittest.cc index f050baa4ae..eb6523080d 100644 --- a/src/test/unit/vtx_unittest.cc +++ b/src/test/unit/vtx_unittest.cc @@ -129,8 +129,9 @@ extern "C" { void saveConfigAndNotify(void) {} void blackboxFinish(void) {} bool accIsCalibrationComplete(void) { return true; } - bool isBaroCalibrationComplete(void) { return true; } - bool isGyroCalibrationComplete(void) { return gyroCalibDone; } + bool accHasBeenCalibrated(void) { return true; } + bool baroIsCalibrationComplete(void) { return true; } + bool gyroIsCalibrationComplete(void) { return gyroCalibDone; } void gyroStartCalibration(bool) {} bool isFirstArmingGyroCalibrationRunning(void) { return false; } void pidController(const pidProfile_t *, timeUs_t) {} @@ -180,6 +181,6 @@ extern "C" { void applyAccelerometerTrimsDelta(rollAndPitchTrims_t*) {} bool isFixedWing(void) { return false; } void compassStartCalibration(void) {} - bool isCompassCalibrationComplete(void) { return true; } + bool compassIsCalibrationComplete(void) { return true; } bool isUpright(void) { return true; } }