Line data Source code
1 1 : /*
2 : * Copyright (c) 2023 Google LLC
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /**
8 : * @file
9 : * @brief Backend APIs for the fuel gauge emulators.
10 : */
11 :
12 : #ifndef ZEPHYR_INCLUDE_DRIVERS_EMUL_FUEL_GAUGE_H_
13 : #define ZEPHYR_INCLUDE_DRIVERS_EMUL_FUEL_GAUGE_H_
14 :
15 : #include <stdint.h>
16 : #include <zephyr/drivers/emul.h>
17 : #include <zephyr/drivers/fuel_gauge.h>
18 :
19 : #ifdef __cplusplus
20 : extern "C" {
21 : #endif
22 :
23 : /**
24 : * @brief Fuel gauge backend emulator APIs
25 : * @defgroup fuel_gauge_emulator_backend Fuel gauge backend emulator APIs
26 : * @ingroup io_interfaces
27 : * @{
28 : */
29 :
30 : /**
31 : * @cond INTERNAL_HIDDEN
32 : *
33 : * These are for internal use only, so skip these in public documentation.
34 : */
35 : __subsystem struct fuel_gauge_emul_driver_api {
36 : int (*set_battery_charging)(const struct emul *emul, uint32_t uV, int uA);
37 : int (*is_battery_cutoff)(const struct emul *emul, bool *cutoff);
38 : };
39 : /**
40 : * @endcond
41 : */
42 :
43 : /**
44 : * @brief Set charging for fuel gauge associated battery.
45 : *
46 : * Set how much the battery associated with a fuel gauge IC is charging or discharging. Where
47 : * voltage is always positive and a positive or negative current denotes charging or discharging,
48 : * respectively.
49 : *
50 : * @param target Pointer to the emulator structure for the fuel gauge emulator instance.
51 : * @param uV Microvolts describing the battery voltage.
52 : * @param uA Microamps describing the battery current where negative is discharging.
53 : *
54 : * @retval 0 If successful.
55 : * @retval -EINVAL if mV or mA are 0.
56 : */
57 1 : __syscall int emul_fuel_gauge_set_battery_charging(const struct emul *target, uint32_t uV, int uA);
58 : static inline int z_impl_emul_fuel_gauge_set_battery_charging(const struct emul *target,
59 : uint32_t uV, int uA)
60 : {
61 : const struct fuel_gauge_emul_driver_api *backend_api =
62 : (const struct fuel_gauge_emul_driver_api *)target->backend_api;
63 :
64 : if (backend_api->set_battery_charging == 0) {
65 : return -ENOTSUP;
66 : }
67 :
68 : return backend_api->set_battery_charging(target, uV, uA);
69 : }
70 :
71 : /**
72 : * @brief Check if the battery has been cut off.
73 : *
74 : * @param target Pointer to the emulator structure for the fuel gauge emulator instance.
75 : * @param cutoff Pointer to bool storing variable.
76 : *
77 : * @retval 0 If successful.
78 : * @retval -ENOTSUP if not supported by emulator.
79 : */
80 1 : __syscall int emul_fuel_gauge_is_battery_cutoff(const struct emul *target, bool *cutoff);
81 : static inline int z_impl_emul_fuel_gauge_is_battery_cutoff(const struct emul *target, bool *cutoff)
82 : {
83 : const struct fuel_gauge_emul_driver_api *backend_api =
84 : (const struct fuel_gauge_emul_driver_api *)target->backend_api;
85 :
86 : if (backend_api->is_battery_cutoff == 0) {
87 : return -ENOTSUP;
88 : }
89 : return backend_api->is_battery_cutoff(target, cutoff);
90 : }
91 :
92 : #ifdef __cplusplus
93 : }
94 : #endif
95 :
96 : #include <zephyr/syscalls/emul_fuel_gauge.h>
97 :
98 : /**
99 : * @}
100 : */
101 :
102 : #endif /* ZEPHYR_INCLUDE_DRIVERS_EMUL_FUEL_GAUGE_H_*/
|