#ifndef __BATTERY_INTERFACE_H__
#define __BATTERY_INTERFACE_H__

#include <rtthread.h>
#include <stdint.h>
#include <stdbool.h>


/*
 * @brief 电池驱动原始数据
 * @details 包含电池的电压、电流、温度、SOC、循环次数和健康度等原始数据。
*/
typedef struct {
    uint16_t voltage;                   /**< 电池电压 (mV) */
    int16_t  current;                   /**< 实时电流 (mA, 正为充, 负为放) */
    int16_t  temperature;               /**< 电池温度 (0.1摄氏度) */
    uint16_t status;                    /**< 电池状态 */
    uint16_t soc;                       /**< 硬件电量计提供的SOC (可选, 0-100) */
    uint16_t remaining_capacity;        /**< 剩余容量 (mAh) */
    uint16_t full_charge_capacity;      /**< 满充电容量 (mAh) */
} battery_drv_raw_data_t;

/*
 * @brief 电池驱动控制指令
 * @details 定义了电池的充放电控制指令，包括开启充电、关闭充电、设置充电电流限制、允许放电和禁止放电。
*/
typedef enum {
    BATTERY_HW_CTRL_CHARGE_ENABLE,      /**< 开启充电 */
    BATTERY_HW_CTRL_CHARGE_DISABLE,     /**< 关闭充电 */
    BATTERY_HW_CTRL_SET_CURRENT_LIMIT,  /**< 设置充电电流限制 */
    BATTERY_HW_CTRL_DISCHARGE_ENABLE,   /**< 允许放电 (开启路径) */
    BATTERY_HW_CTRL_DISCHARGE_DISABLE,  /**< 禁止放电 (切断路径) */
} battery_drv_ctrl_cmd_t;

/*
 * @brief 电池驱动操作接口
 * @details 定义了电池驱动的初始化、数据采集、控制指令执行和反初始化等操作。
*/
typedef struct {
    const char *name;
    
    /* 初始化硬件 */
    rt_err_t (*init)(void);
    
    /* 感知：采集数据 */
    rt_err_t (*read)(battery_drv_raw_data_t *out_data);
    
    /* 执行：控制指令 */
    rt_err_t (*ctrl)(battery_drv_ctrl_cmd_t cmd, void *arg);
    
    /* 反初始化 */
    rt_err_t (*deinit)(void);
    
} battery_drv_ops_t;

const battery_drv_ops_t *battery_drv_get_ops(void);

#endif  /* __BATTERY_INTERFACE_H__ */


