| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| /** |
| * @file battery.h |
| * @brief Hardware-agnostic interface for fuel gauge ICs |
| * |
| * The Batter interface provides a hardware-agnostic layer for reading |
| * fuel gauge controller ICs. |
| */ |
| |
| #ifndef __BATTERY_DRV_H__ |
| #define __BATTERY_DRV_H__ |
| |
| #include "os/mynewt.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* Package init function. Remove when we have post-kernel init stages. |
| */ |
| void battery_pkg_init(void); |
| |
| |
| /* Forward declaration of battery structure. */ |
| struct battery; |
| struct battery_driver; |
| struct battery_property; |
| |
| /* Comments above intentionally not in Doxygen format */ |
| |
| /* ================================================================= |
| * ====================== DEFINES/MACROS =========================== |
| * ================================================================= |
| */ |
| |
| /** |
| * @{ Fuel Gauge API |
| */ |
| |
| |
| /* ---------------------- DRIVER FUNCTIONS ------------------------- */ |
| |
| /** |
| * Set the driver functions for this battery, along with the type of |
| * data available for the given battery. |
| * |
| * @param The battery to set the driver information for |
| * @param The battery driver |
| * @param The battery properties provided by driver |
| * |
| * @return 0 on success, non-zero error code on failure |
| */ |
| int battery_add_driver(struct os_dev *battery, struct battery_driver *driver); |
| |
| /** |
| * Get value of battery property |
| * (e.g. BATTERY_PROP_STATUS). |
| * |
| * @param The battery to get property from |
| * @param The property to read. The type of property should have type |
| * supported by fuel gauge. Data filed in property will be filled |
| * by the driver. |
| * @param Timeout. If block until result, specify OS_TIMEOUT_NEVER, 0 returns |
| * immediately (no wait.) |
| * |
| * @return 0 on success, non-zero error code on failure. |
| */ |
| typedef int (*battery_property_get_func_t)(struct battery_driver *driver, |
| struct battery_property *property, uint32_t timeout); |
| |
| /** |
| * Set value of battery property |
| * Setting value is supported for certain values only. |
| * Usually threshold properties can be set. |
| * |
| * @param The desired battery |
| * @param The new value of battery property, type must be known to driver |
| * and data files should be set to correct value. |
| * |
| * @return 0 on success, non-zero error code on failure. |
| */ |
| typedef int (*battery_property_set_func_t)(struct battery_driver *driver, |
| struct battery_property *property); |
| |
| /** |
| * Enable a fuel gauge |
| * |
| * @param The battery to enable fuel gauge functionality |
| * |
| * @return 0 on success, non-zero error code on failure. |
| */ |
| typedef int (*battery_enable_func_t)(struct battery *battery); |
| |
| /** |
| * Disable a fuel gauge |
| * |
| * @param The battery to disable fuel gauge |
| * |
| * @return 0 on success, non-zero error code on failure |
| */ |
| typedef int (*battery_disable_func_t)(struct battery *battery); |
| |
| /** |
| * Let driver handle interrupt in the battery manager context |
| * |
| * @param The battery. |
| * @param Interrupt argument |
| * |
| * @return 0 on success, non-zero error code on failure. |
| */ |
| typedef int (*battery_handle_interrupt_t)(struct battery *battery, void *arg); |
| |
| /** |
| * Pointers to battery-specific driver functions. |
| */ |
| struct battery_driver_functions { |
| battery_property_get_func_t bdf_property_get; |
| battery_property_set_func_t bdf_property_set; |
| |
| battery_enable_func_t bdf_enable; |
| battery_disable_func_t bdf_disable; |
| }; |
| |
| struct battery_driver { |
| /* Underlying OS device */ |
| struct os_dev dev; |
| |
| const struct battery_driver_functions *bd_funcs; |
| /* Array of properties supported by this battery */ |
| const struct battery_driver_property *bd_driver_properties; |
| void *bd_driver_data; |
| |
| /* |
| * Fields below are managed by battery manager, they don't need |
| * to be filled by the driver. |
| */ |
| |
| /* Number of elements in b_driver_properties array |
| * Battery manager will fill this field using data from |
| * bd_driver_properties field |
| */ |
| uint8_t bd_property_count; |
| uint8_t bd_first_property; |
| }; |
| |
| /** |
| * }@ |
| */ |
| |
| /* End Battery Manager API */ |
| |
| |
| /** |
| * @} |
| */ |
| |
| /* End Battery API */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __BATTERY_DRV_H__ */ |