2 * This file is part of Cleanflight.
4 * Cleanflight is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * Cleanflight is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
25 #include "common/utils.h"
27 #include "config/feature.h"
30 #include "cms/cms_types.h"
31 #include "cms/cms_menu_misc.h"
33 #include "fc/config.h"
34 #include "fc/rc_controls.h"
35 #include "fc/settings.h"
37 #include "sensors/battery.h"
41 static uint8_t battDispProfileIndex
;
42 static uint8_t battProfileIndex
;
43 static bool featureProfAutoswitchEnabled
;
44 static char battProfileIndexString
[] = " p";
47 static long cmsx_menuBattery_onEnter(const OSD_Entry
*from
)
51 battProfileIndex
= getConfigBatteryProfile();
52 battDispProfileIndex
= battProfileIndex
+ 1;
53 battProfileIndexString
[1] = '0' + battDispProfileIndex
;
54 featureProfAutoswitchEnabled
= feature(FEATURE_BAT_PROFILE_AUTOSWITCH
);
59 static long cmsx_menuBattery_onExit(const OSD_Entry
*self
)
63 setConfigBatteryProfile(battProfileIndex
);
64 activateBatteryProfile();
66 if (featureProfAutoswitchEnabled
) {
67 featureSet(FEATURE_BAT_PROFILE_AUTOSWITCH
);
69 featureClear(FEATURE_BAT_PROFILE_AUTOSWITCH
);
75 static long cmsx_onBatteryProfileIndexChange(displayPort_t
*displayPort
, const void *ptr
)
80 battProfileIndex
= battDispProfileIndex
- 1;
81 battProfileIndexString
[1] = '0' + battDispProfileIndex
;
82 batteryDisableProfileAutoswitch();
87 static long cmsx_menuBattSettings_onEnter(const OSD_Entry
*from
)
91 setConfigBatteryProfile(battProfileIndex
);
96 static const OSD_Entry menuBattSettingsEntries
[]=
98 OSD_LABEL_DATA_ENTRY("-- BATT SETTINGS --", battProfileIndexString
),
101 OSD_SETTING_ENTRY("CELLS", SETTING_BAT_CELLS
),
102 OSD_SETTING_ENTRY("CELL DET.", SETTING_VBAT_CELL_DETECT_VOLTAGE
),
103 OSD_SETTING_ENTRY("CELL MAX", SETTING_VBAT_MAX_CELL_VOLTAGE
),
104 OSD_SETTING_ENTRY("CELL WARN", SETTING_VBAT_WARNING_CELL_VOLTAGE
),
105 OSD_SETTING_ENTRY("CELL MIN", SETTING_VBAT_MIN_CELL_VOLTAGE
),
107 OSD_SETTING_ENTRY("CAP UNIT", SETTING_BATTERY_CAPACITY_UNIT
),
108 OSD_SETTING_ENTRY("CAPACITY", SETTING_BATTERY_CAPACITY
),
109 OSD_SETTING_ENTRY("CAP WARN", SETTING_BATTERY_CAPACITY_WARNING
),
110 OSD_SETTING_ENTRY("CAP CRIT", SETTING_BATTERY_CAPACITY_CRITICAL
),
112 OSD_BACK_AND_END_ENTRY
,
115 static CMS_Menu cmsx_menuBattSettings
= {
116 #ifdef CMS_MENU_DEBUG
117 .GUARD_text
= "XBATT",
118 .GUARD_type
= OME_MENU
,
120 .onEnter
= cmsx_menuBattSettings_onEnter
,
122 .onGlobalExit
= NULL
,
123 .entries
= menuBattSettingsEntries
126 static OSD_Entry menuBatteryEntries
[]=
128 OSD_LABEL_ENTRY("-- BATTERY --"),
131 OSD_BOOL_ENTRY("PROF AUTOSWITCH", &featureProfAutoswitchEnabled
),
133 OSD_UINT8_CALLBACK_ENTRY("PROF", cmsx_onBatteryProfileIndexChange
, (&(const OSD_UINT8_t
){ &battDispProfileIndex
, 1, MAX_BATTERY_PROFILE_COUNT
, 1})),
134 OSD_SUBMENU_ENTRY("SETTINGS", &cmsx_menuBattSettings
),
136 OSD_BACK_AND_END_ENTRY
,
139 CMS_Menu cmsx_menuBattery
= {
140 #ifdef CMS_MENU_DEBUG
141 .GUARD_text
= "XBATT",
142 .GUARD_type
= OME_MENU
,
144 .onEnter
= cmsx_menuBattery_onEnter
,
145 .onExit
= cmsx_menuBattery_onExit
,
146 .onGlobalExit
= NULL
,
147 .entries
= menuBatteryEntries