From 9a2598d3813d26d16e6a2974b2c5152ab40e734e Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Sat, 8 Nov 2025 06:11:11 +0100 Subject: [PATCH] Add 1500mAh and 2500mAh battery support --- App/app/menu.c | 6 +++--- App/helper/battery.c | 30 +++++++++++++++++++++++++++--- App/helper/battery.h | 2 ++ App/ui/menu.c | 2 ++ App/ui/menu.h | 2 +- 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/App/app/menu.c b/App/app/menu.c index 732720ac..439e21b8 100644 --- a/App/app/menu.c +++ b/App/app/menu.c @@ -362,13 +362,13 @@ int MENU_GetLimits(uint8_t menu_id, int32_t *pMin, int32_t *pMax) #endif case MENU_BATCAL: - *pMin = 1600; - *pMax = 2200; + *pMin = 1500; + *pMax = 3500; break; case MENU_BATTYP: //*pMin = 0; - *pMax = 2; + *pMax = 4; break; case MENU_F1SHRT: diff --git a/App/helper/battery.c b/App/helper/battery.c index f61974a6..453d9ab4 100644 --- a/App/helper/battery.c +++ b/App/helper/battery.c @@ -50,7 +50,18 @@ const uint16_t lowBatteryPeriod = 30; volatile uint16_t gPowerSave_10ms; -const uint16_t Voltage2PercentageTable[][7][3] = { +const uint16_t Voltage2PercentageTable[][7][2] = { + // Estimated discharge curve for 1500 mAh battery (improve this) + [BATTERY_TYPE_1500_MAH] = { + {828, 100}, // Fully charged (measured ~8.28V) + {813, 97 }, // Top end + {758, 25 }, // Mid level + {726, 6 }, // Almost empty + {630, 0 }, // Fully discharged (conservative) + {0, 0 }, + {0, 0 }, + }, + [BATTERY_TYPE_1600_MAH] = { {828, 100}, {814, 97 }, @@ -71,6 +82,17 @@ const uint16_t Voltage2PercentageTable[][7][3] = { {0, 0 }, }, + // Estimated discharge curve for 2500 mAh battery (improve this) + [BATTERY_TYPE_2500_MAH] = { + {839, 100}, // Fully charged (measured ~8.39V) + {818, 95 }, // Top end (slightly raised vs 816) + {745, 55 }, // Mid range + {703, 25 }, // Low level + {668, 5 }, // Almost empty + {623, 0 }, // Fully discharged (between 630 and 600) + {0, 0 }, + }, + [BATTERY_TYPE_3500_MAH] = { {837, 100}, {826, 95 }, @@ -82,23 +104,25 @@ const uint16_t Voltage2PercentageTable[][7][3] = { }, }; +/* Useless (for compilator only) static_assert( (ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_1600_MAH]) == ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_2200_MAH])) && (ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_2200_MAH]) == ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_3500_MAH])) ); +*/ unsigned int BATTERY_VoltsToPercent(const unsigned int voltage_10mV) { - const uint16_t (*crv)[3] = Voltage2PercentageTable[gEeprom.BATTERY_TYPE]; + const uint16_t (*crv)[2] = Voltage2PercentageTable[gEeprom.BATTERY_TYPE]; const int mulipl = 1000; for (unsigned int i = 1; i < ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_2200_MAH]); i++) { if (voltage_10mV > crv[i][0]) { const int a = (crv[i - 1][1] - crv[i][1]) * mulipl / (crv[i - 1][0] - crv[i][0]); const int b = crv[i][1] - a * crv[i][0] / mulipl; const int p = a * voltage_10mV / mulipl + b; - return MIN(p, 100); + return MIN(MAX(p, 0), 100); } } diff --git a/App/helper/battery.h b/App/helper/battery.h index 19e210e0..4aefaaad 100644 --- a/App/helper/battery.h +++ b/App/helper/battery.h @@ -35,8 +35,10 @@ extern uint16_t gBatteryCheckCounter; extern volatile uint16_t gPowerSave_10ms; typedef enum { + BATTERY_TYPE_1500_MAH, BATTERY_TYPE_1600_MAH, BATTERY_TYPE_2200_MAH, + BATTERY_TYPE_2500_MAH, BATTERY_TYPE_3500_MAH, BATTERY_TYPE_UNKNOWN } BATTERY_Type_t; diff --git a/App/ui/menu.c b/App/ui/menu.c index 381bfa36..19c4b139 100644 --- a/App/ui/menu.c +++ b/App/ui/menu.c @@ -342,8 +342,10 @@ const char gSubMenu_BAT_TXT[][8] = const char gSubMenu_BATTYP[][9] = { + "1500mAh", "1600mAh", "2200mAh", + "2500mAh", "3500mAh" }; diff --git a/App/ui/menu.h b/App/ui/menu.h index de6f5a1e..c432639c 100644 --- a/App/ui/menu.h +++ b/App/ui/menu.h @@ -208,7 +208,7 @@ extern const char gSubMenu_RESET[2][4]; extern const char* const gSubMenu_F_LOCK[F_LOCK_LEN]; extern const char gSubMenu_RX_TX[4][6]; extern const char gSubMenu_BAT_TXT[3][8]; -extern const char gSubMenu_BATTYP[3][9]; +extern const char gSubMenu_BATTYP[5][9]; #ifndef ENABLE_FEAT_F4HWN extern const char gSubMenu_SCRAMBLER[11][7];