/* * Copyright (c) 2018-2019 Peter Bigot Consulting, LLC * * SPDX-License-Identifier: Apache-2.0 */ #ifndef APPLICATION_BATTERY_H_ #define APPLICATION_BATTERY_H_ /** Enable or disable measurement of the battery voltage. * * @param enable true to enable, false to disable * * @return zero on success, or a negative error code. */ int battery_measure_enable(bool enable); /** Measure the battery voltage. * * @return the battery voltage in millivolts, or a negative error * code. */ int battery_sample(void); /** A point in a battery discharge curve sequence. * * A discharge curve is defined as a sequence of these points, where * the first point has #lvl_pptt set to 10000 and the last point has * #lvl_pptt set to zero. Both #lvl_pptt and #lvl_mV should be * monotonic decreasing within the sequence. */ struct battery_level_point { /** Remaining life at #lvl_mV. */ uint16_t lvl_pptt; /** Battery voltage at #lvl_pptt remaining life. */ uint16_t lvl_mV; }; /** Calculate the estimated battery level based on a measured voltage. * * @param batt_mV a measured battery voltage level. * * @param curve the discharge curve for the type of battery installed * on the system. * * @return the estimated remaining capacity in parts per ten * thousand. */ unsigned int battery_level_pptt(unsigned int batt_mV, const struct battery_level_point *curve); #endif /* APPLICATION_BATTERY_H_ */