/* * Copyright (c) 2023 Google LLC * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief Backend APIs for the fuel gauge emulators. */ #ifndef ZEPHYR_INCLUDE_DRIVERS_EMUL_FUEL_GAUGE_H_ #define ZEPHYR_INCLUDE_DRIVERS_EMUL_FUEL_GAUGE_H_ #include #include #include #ifdef __cplusplus extern "C" { #endif /** * @brief Fuel gauge backend emulator APIs * @defgroup fuel_gauge_emulator_backend Fuel gauge backend emulator APIs * @ingroup io_interfaces * @{ */ /** * @cond INTERNAL_HIDDEN * * These are for internal use only, so skip these in public documentation. */ __subsystem struct fuel_gauge_emul_driver_api { int (*set_battery_charging)(const struct emul *emul, uint32_t uV, int uA); int (*is_battery_cutoff)(const struct emul *emul, bool *cutoff); }; /** * @endcond */ /** * @brief Set charging for fuel gauge associated battery. * * Set how much the battery associated with a fuel gauge IC is charging or discharging. Where * voltage is always positive and a positive or negative current denotes charging or discharging, * respectively. * * @param target Pointer to the emulator structure for the fuel gauge emulator instance. * @param uV Microvolts describing the battery voltage. * @param uA Microamps describing the battery current where negative is discharging. * * @retval 0 If successful. * @retval -EINVAL if mV or mA are 0. */ __syscall int emul_fuel_gauge_set_battery_charging(const struct emul *target, uint32_t uV, int uA); static inline int z_impl_emul_fuel_gauge_set_battery_charging(const struct emul *target, uint32_t uV, int uA) { const struct fuel_gauge_emul_driver_api *backend_api = (const struct fuel_gauge_emul_driver_api *)target->backend_api; if (backend_api->set_battery_charging == 0) { return -ENOTSUP; } return backend_api->set_battery_charging(target, uV, uA); } /** * @brief Check if the battery has been cut off. * * @param target Pointer to the emulator structure for the fuel gauge emulator instance. * @param cutoff Pointer to bool storing variable. * * @retval 0 If successful. * @retval -ENOTSUP if not supported by emulator. */ __syscall int emul_fuel_gauge_is_battery_cutoff(const struct emul *target, bool *cutoff); static inline int z_impl_emul_fuel_gauge_is_battery_cutoff(const struct emul *target, bool *cutoff) { const struct fuel_gauge_emul_driver_api *backend_api = (const struct fuel_gauge_emul_driver_api *)target->backend_api; if (backend_api->is_battery_cutoff == 0) { return -ENOTSUP; } return backend_api->is_battery_cutoff(target, cutoff); } #ifdef __cplusplus } #endif #include /** * @} */ #endif /* ZEPHYR_INCLUDE_DRIVERS_EMUL_FUEL_GAUGE_H_*/