Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
fuel_gauge.h
Go to the documentation of this file.
1/*
2 * Copyright 2022 Google LLC
3 * Copyright 2023 Microsoft Corporation
4 * Copyright (c) 2025 Philipp Steiner <philipp.steiner1987@gmail.com>
5 * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
6 * Copyright (c) 2026 Analog Devices Inc.
7 *
8 * SPDX-License-Identifier: Apache-2.0
9 */
10
16
17#ifndef ZEPHYR_INCLUDE_DRIVERS_BATTERY_H_
18#define ZEPHYR_INCLUDE_DRIVERS_BATTERY_H_
19
28
29#ifdef __cplusplus
30extern "C" {
31#endif /* __cplusplus */
32
33#include <errno.h>
34#include <stdbool.h>
35#include <stddef.h>
36#include <stdint.h>
37
38#include <zephyr/device.h>
39
49
140
148
151};
152
154
249
253#define SBS_GAUGE_MANUFACTURER_NAME_MAX_SIZE 20
254#define SBS_GAUGE_DEVICE_NAME_MAX_SIZE 20
255#define SBS_GAUGE_DEVICE_CHEMISTRY_MAX_SIZE 4
256
261
266
271
277typedef int (*fuel_gauge_get_property_t)(const struct device *dev, fuel_gauge_prop_t prop,
278 union fuel_gauge_prop_val *val);
279
285typedef int (*fuel_gauge_set_property_t)(const struct device *dev, fuel_gauge_prop_t prop,
286 union fuel_gauge_prop_val val);
287
293typedef int (*fuel_gauge_get_buffer_property_t)(const struct device *dev,
294 fuel_gauge_prop_t prop_type, void *dst,
295 size_t dst_len);
296
302typedef int (*fuel_gauge_battery_cutoff_t)(const struct device *dev);
303
304/* Caching is entirely on the onus of the client */
305
318
328__syscall int fuel_gauge_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
329 union fuel_gauge_prop_val *val);
330
331static inline int z_impl_fuel_gauge_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
332 union fuel_gauge_prop_val *val)
333{
334 const struct fuel_gauge_driver_api *api = DEVICE_API_GET(fuel_gauge, dev);
335
336 if (api->get_property == NULL) {
337 return -ENOSYS;
338 }
339
340 return api->get_property(dev, prop, val);
341}
342
357
358__syscall int fuel_gauge_get_props(const struct device *dev, const fuel_gauge_prop_t *props,
359 union fuel_gauge_prop_val *vals, size_t len);
360static inline int z_impl_fuel_gauge_get_props(const struct device *dev,
361 const fuel_gauge_prop_t *props,
362 union fuel_gauge_prop_val *vals, size_t len)
363{
364 int ret;
365
366 for (size_t i = 0; i < len; i++) {
367 ret = DEVICE_API_GET(fuel_gauge, dev)->get_property(dev, props[i], vals + i);
368
369 if (ret) {
370 return ret;
371 }
372 }
373
374 return 0;
375}
376
386__syscall int fuel_gauge_set_prop(const struct device *dev, fuel_gauge_prop_t prop,
387 union fuel_gauge_prop_val val);
388
389static inline int z_impl_fuel_gauge_set_prop(const struct device *dev, fuel_gauge_prop_t prop,
390 union fuel_gauge_prop_val val)
391{
392 const struct fuel_gauge_driver_api *api = DEVICE_API_GET(fuel_gauge, dev);
393
394 if (api->set_property == NULL) {
395 return -ENOSYS;
396 }
397
398 return api->set_property(dev, prop, val);
399}
412__syscall int fuel_gauge_set_props(const struct device *dev, const fuel_gauge_prop_t *props,
413 const union fuel_gauge_prop_val *vals, size_t len);
414
415static inline int z_impl_fuel_gauge_set_props(const struct device *dev,
416 const fuel_gauge_prop_t *props,
417 const union fuel_gauge_prop_val *vals, size_t len)
418{
419 for (size_t i = 0; i < len; i++) {
420 int ret = fuel_gauge_set_prop(dev, props[i], vals[i]);
421
422 if (ret) {
423 return ret;
424 }
425 }
426
427 return 0;
428}
429
440
441__syscall int fuel_gauge_get_buffer_prop(const struct device *dev, fuel_gauge_prop_t prop_type,
442 void *dst, size_t dst_len);
443
444static inline int z_impl_fuel_gauge_get_buffer_prop(const struct device *dev,
445 fuel_gauge_prop_t prop_type, void *dst,
446 size_t dst_len)
447{
448 const struct fuel_gauge_driver_api *api = DEVICE_API_GET(fuel_gauge, dev);
449
450 if (api->get_buffer_property == NULL) {
451 return -ENOSYS;
452 }
453
454 return api->get_buffer_property(dev, prop_type, dst, dst_len);
455}
456
465__syscall int fuel_gauge_battery_cutoff(const struct device *dev);
466
467static inline int z_impl_fuel_gauge_battery_cutoff(const struct device *dev)
468{
469 const struct fuel_gauge_driver_api *api = DEVICE_API_GET(fuel_gauge, dev);
470
471 if (api->battery_cutoff == NULL) {
472 return -ENOSYS;
473 }
474
475 return api->battery_cutoff(dev);
476}
477
481
482#ifdef __cplusplus
483}
484#endif /* __cplusplus */
485
486#include <zephyr/syscalls/fuel_gauge.h>
487
488#endif /* ZEPHYR_INCLUDE_DRIVERS_BATTERY_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1425
System error numbers.
#define SBS_GAUGE_DEVICE_NAME_MAX_SIZE
Definition fuel_gauge.h:254
uint16_t fuel_gauge_prop_t
Definition fuel_gauge.h:153
int(* fuel_gauge_battery_cutoff_t)(const struct device *dev)
Callback API for doing a battery cutoff.
Definition fuel_gauge.h:302
int fuel_gauge_battery_cutoff(const struct device *dev)
Have fuel gauge cutoff its associated battery.
int fuel_gauge_get_buffer_prop(const struct device *dev, fuel_gauge_prop_t prop_type, void *dst, size_t dst_len)
Fetch a battery fuel-gauge buffer property.
#define SBS_GAUGE_MANUFACTURER_NAME_MAX_SIZE
Data structures for reading SBS buffer properties.
Definition fuel_gauge.h:253
int fuel_gauge_set_prop(const struct device *dev, fuel_gauge_prop_t prop, union fuel_gauge_prop_val val)
Set a battery fuel-gauge property.
int fuel_gauge_get_prop(const struct device *dev, fuel_gauge_prop_t prop, union fuel_gauge_prop_val *val)
Fetch a battery fuel-gauge property.
int fuel_gauge_set_props(const struct device *dev, const fuel_gauge_prop_t *props, const union fuel_gauge_prop_val *vals, size_t len)
Set a battery fuel-gauge property.
fuel_gauge_prop_type
Definition fuel_gauge.h:40
int(* fuel_gauge_set_property_t)(const struct device *dev, fuel_gauge_prop_t prop, union fuel_gauge_prop_val val)
Callback API for setting a fuel_gauge property.
Definition fuel_gauge.h:285
int(* fuel_gauge_get_property_t)(const struct device *dev, fuel_gauge_prop_t prop, union fuel_gauge_prop_val *val)
Callback API for getting a fuel_gauge property.
Definition fuel_gauge.h:277
int(* fuel_gauge_get_buffer_property_t)(const struct device *dev, fuel_gauge_prop_t prop_type, void *dst, size_t dst_len)
Callback API for getting a fuel_gauge buffer property.
Definition fuel_gauge.h:293
int fuel_gauge_get_props(const struct device *dev, const fuel_gauge_prop_t *props, union fuel_gauge_prop_val *vals, size_t len)
Fetch multiple battery fuel-gauge properties.
#define SBS_GAUGE_DEVICE_CHEMISTRY_MAX_SIZE
Definition fuel_gauge.h:255
@ FUEL_GAUGE_CURRENT
Battery current (uA); negative=discharging.
Definition fuel_gauge.h:51
@ FUEL_GAUGE_STATUS
Alarm, Status and Error codes (flags).
Definition fuel_gauge.h:87
@ FUEL_GAUGE_SBS_MFR_ACCESS
Retrieve word from SBS1.1 ManufactuerAccess.
Definition fuel_gauge.h:71
@ FUEL_GAUGE_CONNECT_STATE
Connect state of battery.
Definition fuel_gauge.h:57
@ FUEL_GAUGE_FLAGS
General Error/Runtime Flags.
Definition fuel_gauge.h:59
@ FUEL_GAUGE_CYCLE_COUNT
Cycle count in 1/100ths (number of charge/discharge cycles).
Definition fuel_gauge.h:55
@ FUEL_GAUGE_COMMON_COUNT
Reserved to demark end of common fuel gauge properties.
Definition fuel_gauge.h:142
@ FUEL_GAUGE_MANUFACTURER_NAME
Manufacturer of pack (1 byte length + 20 bytes data).
Definition fuel_gauge.h:105
@ FUEL_GAUGE_SBS_MODE
Battery Mode (flags).
Definition fuel_gauge.h:81
@ FUEL_GAUGE_STATE_OF_HEALTH
State of Health (SoH) (percent, 0-100).
Definition fuel_gauge.h:137
@ FUEL_GAUGE_HIGH_TEMPERATURE_ALARM
High Cell Temperature Alarm (dK).
Definition fuel_gauge.h:125
@ FUEL_GAUGE_SBS_ATRATE
AtRate (mA or 10 mW).
Definition fuel_gauge.h:93
@ FUEL_GAUGE_DESIGN_VOLTAGE
Design Voltage (mV).
Definition fuel_gauge.h:91
@ FUEL_GAUGE_HIGH_CURRENT_ALARM
High Cell Current Alarm (uA).
Definition fuel_gauge.h:121
@ FUEL_GAUGE_LOW_TEMPERATURE_ALARM
Low Cell Temperature Alarm (dK).
Definition fuel_gauge.h:123
@ FUEL_GAUGE_LOW_CURRENT_ALARM
Low Cell Current Alarm (uA).
Definition fuel_gauge.h:119
@ FUEL_GAUGE_AVG_CURRENT
Runtime Dynamic Battery Parameters.
Definition fuel_gauge.h:48
@ FUEL_GAUGE_RUNTIME_TO_FULL
Remaining time in minutes until battery reaches full charge.
Definition fuel_gauge.h:69
@ FUEL_GAUGE_CHARGE_CURRENT
Battery desired Max Charging Current (uA).
Definition fuel_gauge.h:83
@ FUEL_GAUGE_CUSTOM_BEGIN
Reserved to demark downstream custom properties - use this value as the actual value may change over ...
Definition fuel_gauge.h:147
@ FUEL_GAUGE_DEVICE_CHEMISTRY
Chemistry (1 byte length + 4 bytes data).
Definition fuel_gauge.h:109
@ FUEL_GAUGE_PROP_MAX
Reserved to demark end of valid enum properties.
Definition fuel_gauge.h:150
@ FUEL_GAUGE_SBS_ATRATE_TIME_TO_EMPTY
AtRateTimeToEmpty (minutes).
Definition fuel_gauge.h:97
@ FUEL_GAUGE_DESIGN_CAPACITY
Design Capacity (mAh or 10mWh).
Definition fuel_gauge.h:89
@ FUEL_GAUGE_VOLTAGE
Battery voltage (uV).
Definition fuel_gauge.h:79
@ FUEL_GAUGE_SBS_REMAINING_TIME_ALARM
Remaining Time Alarm (minutes).
Definition fuel_gauge.h:103
@ FUEL_GAUGE_CHARGE_CUTOFF
Whether the battery underlying the fuel-gauge is cut off from charge.
Definition fuel_gauge.h:53
@ FUEL_GAUGE_CHARGE_VOLTAGE
Battery desired Max Charging Voltage (uV).
Definition fuel_gauge.h:85
@ FUEL_GAUGE_HIGH_GPIO_ALARM
High GPIO Voltage Alarm (uV).
Definition fuel_gauge.h:129
@ FUEL_GAUGE_THERM_VOLTAGE_UV
Thermistor Voltage Sense reading (uV).
Definition fuel_gauge.h:139
@ FUEL_GAUGE_ABSOLUTE_STATE_OF_CHARGE
Absolute state of charge (percent, 0-100) - expressed as % of design capacity.
Definition fuel_gauge.h:73
@ FUEL_GAUGE_DEVICE_NAME
Name of pack (1 byte length + 20 bytes data).
Definition fuel_gauge.h:107
@ FUEL_GAUGE_SBS_ATRATE_TIME_TO_FULL
AtRateTimeToFull (minutes).
Definition fuel_gauge.h:95
@ FUEL_GAUGE_STATE_OF_CHARGE_ALARM
Remaining state of charge alarm (percent, 0-100).
Definition fuel_gauge.h:113
@ FUEL_GAUGE_TEMPERATURE
Temperature in 0.1 K.
Definition fuel_gauge.h:77
@ FUEL_GAUGE_LOW_GPIO_ALARM
Low GPIO Voltage Alarm (uV).
Definition fuel_gauge.h:127
@ FUEL_GAUGE_FULL_CHARGE_CAPACITY
Full Charge Capacity in uAh (might change in some implementations to determine wear).
Definition fuel_gauge.h:61
@ FUEL_GAUGE_CC_CONFIG
Coulomb Counter Config (flags).
Definition fuel_gauge.h:135
@ FUEL_GAUGE_RUNTIME_TO_EMPTY
Remaining battery life time in minutes.
Definition fuel_gauge.h:67
@ FUEL_GAUGE_PRESENT_STATE
Is the battery physically present.
Definition fuel_gauge.h:63
@ FUEL_GAUGE_REMAINING_CAPACITY
Remaining capacity in uAh.
Definition fuel_gauge.h:65
@ FUEL_GAUGE_HIGH_VOLTAGE_ALARM
High Cell Voltage Alarm (uV).
Definition fuel_gauge.h:117
@ FUEL_GAUGE_SBS_REMAINING_CAPACITY_ALARM
Remaining Capacity Alarm (mAh or 10mWh).
Definition fuel_gauge.h:101
@ FUEL_GAUGE_LOW_VOLTAGE_ALARM
Low Cell Voltage Alarm (uV).
Definition fuel_gauge.h:115
@ FUEL_GAUGE_CURRENT_DIRECTION
Battery current direction (flags).
Definition fuel_gauge.h:111
@ FUEL_GAUGE_GPIO_VOLTAGE
GPIO Voltage (uV).
Definition fuel_gauge.h:131
@ FUEL_GAUGE_ADC_MODE
ADC Mode (flags).
Definition fuel_gauge.h:133
@ FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE
Relative state of charge (percent, 0-100) - expressed as % of full charge capacity.
Definition fuel_gauge.h:75
@ FUEL_GAUGE_SBS_ATRATE_OK
AtRateOK (boolean).
Definition fuel_gauge.h:99
#define ENOSYS
Function not implemented.
Definition errno.h:82
#define NULL
Definition iar_missing_defs.h:20
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__INT32_TYPE__ int32_t
Definition stdint.h:74
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
#define UINT16_MAX
Definition stdint.h:28
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
__INT16_TYPE__ int16_t
Definition stdint.h:73
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
Definition fuel_gauge.h:306
fuel_gauge_battery_cutoff_t battery_cutoff
Definition fuel_gauge.h:316
fuel_gauge_set_property_t set_property
Definition fuel_gauge.h:314
fuel_gauge_get_property_t get_property
Note: Historically this API allowed drivers to implement a custom multi-get/set property function,...
Definition fuel_gauge.h:313
fuel_gauge_get_buffer_property_t get_buffer_property
Definition fuel_gauge.h:315
Definition fuel_gauge.h:267
char device_chemistry[4]
Definition fuel_gauge.h:269
uint8_t device_chemistry_length
Definition fuel_gauge.h:268
Definition fuel_gauge.h:262
uint8_t device_name_length
Definition fuel_gauge.h:263
char device_name[20]
Definition fuel_gauge.h:264
Definition fuel_gauge.h:257
uint8_t manufacturer_name_length
Definition fuel_gauge.h:258
char manufacturer_name[20]
Definition fuel_gauge.h:259
Property field to value/type union.
Definition fuel_gauge.h:156
int32_t high_gpio_alarm
FUEL_GAUGE_HIGH_GPIO_ALARM.
Definition fuel_gauge.h:239
uint16_t design_volt
FUEL_GAUGE_DESIGN_VOLTAGE.
Definition fuel_gauge.h:205
uint8_t state_of_health
FUEL_GAUGE_STATE_OF_HEALTH.
Definition fuel_gauge.h:245
uint16_t design_cap
FUEL_GAUGE_DESIGN_CAPACITY.
Definition fuel_gauge.h:203
uint32_t high_voltage_alarm
FUEL_GAUGE_HIGH_VOLTAGE_ALARM.
Definition fuel_gauge.h:225
uint32_t runtime_to_full
FUEL_GAUGE_RUNTIME_TO_FULL.
Definition fuel_gauge.h:183
uint8_t absolute_state_of_charge
FUEL_GAUGE_ABSOLUTE_STATE_OF_CHARGE.
Definition fuel_gauge.h:187
uint16_t temperature
FUEL_GAUGE_TEMPERATURE.
Definition fuel_gauge.h:191
uint8_t adc_mode
FUEL_GAUGE_ADC_MODE.
Definition fuel_gauge.h:241
uint8_t relative_state_of_charge
FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE.
Definition fuel_gauge.h:189
bool present_state
FUEL_GAUGE_PRESENT_STATE.
Definition fuel_gauge.h:177
uint16_t current_direction
FUEL_GAUGE_CURRENT_DIRECTION.
Definition fuel_gauge.h:219
uint16_t fg_status
FUEL_GAUGE_STATUS.
Definition fuel_gauge.h:201
uint32_t chg_current
FUEL_GAUGE_CHARGE_CURRENT.
Definition fuel_gauge.h:197
uint16_t sbs_at_rate_time_to_empty
FUEL_GAUGE_SBS_ATRATE_TIME_TO_EMPTY.
Definition fuel_gauge.h:211
uint16_t sbs_mode
FUEL_GAUGE_SBS_MODE.
Definition fuel_gauge.h:195
uint16_t sbs_remaining_capacity_alarm
FUEL_GAUGE_SBS_REMAINING_CAPACITY_ALARM.
Definition fuel_gauge.h:215
uint32_t chg_voltage
FUEL_GAUGE_CHARGE_VOLTAGE.
Definition fuel_gauge.h:199
uint16_t sbs_mfr_access_word
FUEL_GAUGE_SBS_MFR_ACCESS.
Definition fuel_gauge.h:185
bool sbs_at_rate_ok
FUEL_GAUGE_SBS_ATRATE_OK.
Definition fuel_gauge.h:213
int current
FUEL_GAUGE_CURRENT.
Definition fuel_gauge.h:167
uint16_t high_temperature_alarm
FUEL_GAUGE_HIGH_TEMPERATURE_ALARM.
Definition fuel_gauge.h:233
uint32_t therm_voltage_uv
FUEL_GAUGE_THERM_VOLTAGE_UV.
Definition fuel_gauge.h:247
uint32_t connect_state
FUEL_GAUGE_CONNECT_STATE.
Definition fuel_gauge.h:171
uint16_t sbs_remaining_time_alarm
FUEL_GAUGE_SBS_REMAINING_TIME_ALARM.
Definition fuel_gauge.h:217
uint32_t full_charge_capacity
FUEL_GAUGE_FULL_CHARGE_CAPACITY.
Definition fuel_gauge.h:175
int16_t sbs_at_rate
FUEL_GAUGE_SBS_ATRATE.
Definition fuel_gauge.h:207
uint8_t state_of_charge_alarm
FUEL_GAUGE_STATE_OF_CHARGE_ALARM.
Definition fuel_gauge.h:221
int32_t low_current_alarm
FUEL_GAUGE_LOW_CURRENT_ALARM.
Definition fuel_gauge.h:227
uint8_t cc_config
FUEL_GAUGE_CC_CONFIG.
Definition fuel_gauge.h:243
int32_t high_current_alarm
FUEL_GAUGE_HIGH_CURRENT_ALARM.
Definition fuel_gauge.h:229
int voltage
FUEL_GAUGE_VOLTAGE.
Definition fuel_gauge.h:193
uint32_t cycle_count
FUEL_GAUGE_CYCLE_COUNT.
Definition fuel_gauge.h:169
bool cutoff
FUEL_GAUGE_CHARGE_CUTOFF.
Definition fuel_gauge.h:165
int32_t gpio_voltage
FUEL_GAUGE_GPIO_VOLTAGE.
Definition fuel_gauge.h:235
uint16_t low_temperature_alarm
FUEL_GAUGE_LOW_TEMPERATURE_ALARM.
Definition fuel_gauge.h:231
int avg_current
FUEL_GAUGE_AVG_CURRENT.
Definition fuel_gauge.h:163
uint32_t flags
FUEL_GAUGE_FLAGS.
Definition fuel_gauge.h:173
uint32_t remaining_capacity
FUEL_GAUGE_REMAINING_CAPACITY.
Definition fuel_gauge.h:179
uint32_t runtime_to_empty
FUEL_GAUGE_RUNTIME_TO_EMPTY.
Definition fuel_gauge.h:181
uint16_t sbs_at_rate_time_to_full
FUEL_GAUGE_SBS_ATRATE_TIME_TO_FULL.
Definition fuel_gauge.h:209
int32_t low_gpio_alarm
FUEL_GAUGE_LOW_GPIO_ALARM.
Definition fuel_gauge.h:237
uint32_t low_voltage_alarm
FUEL_GAUGE_LOW_VOLTAGE_ALARM.
Definition fuel_gauge.h:223