/**
 * @file pmu_axp2101.h
 * @brief ⚡ AXP2101 PMU 纯 C 驱动 - I2C 直接寄存器操作
 */

#ifndef _PMU_AXP2101_H_
#define _PMU_AXP2101_H_

#include "esp_err.h"
#include <driver/i2c_master.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief ⚡ 初始化 AXP2101 PMU
 * @param i2c_bus I2C 总线句柄
 * @return ESP_OK 成功
 */
esp_err_t axp2101_init(i2c_master_bus_handle_t i2c_bus);

/**
 * @brief 📊 获取电池电量百分比
 * @return 0~100, 负数表示错误
 */
int pmu_get_battery_percent(void);

/**
 * @brief 🔌 是否正在充电
 */
bool pmu_is_charging(void);

/**
 * @brief ⚡ 获取电池电压 (mV)
 */
uint16_t pmu_get_batt_voltage(void);

/**
 * @brief ⚡ 获取 VBUS 电压 (mV)
 */
uint16_t pmu_get_vbus_voltage(void);

/**
 * @brief ⚡ 获取系统电压 (mV)
 */
uint16_t pmu_get_system_voltage(void);

/**
 * @brief ⚡ 获取充电恒流档位 (mA)
 */
uint16_t pmu_get_charger_current_limit_ma(void);

/**
 * @brief ⚡ 获取充电目标电压 (mV)
 */
uint16_t pmu_get_charge_target_voltage_mv(void);

/**
 * @brief ⚡ 获取 VBUS 输入限流档位 (mA)
 */
uint16_t pmu_get_vbus_current_limit_ma(void);

/**
 * @brief 📊 获取电池温度 (°C, 通过 TS/NTC)
 */
float pmu_get_batt_temperature(void);

/**
 * @brief 📊 获取 PMU 芯片内部温度 (°C)
 */
float pmu_get_die_temperature(void);

#ifdef __cplusplus
}
#endif

#endif /* _PMU_AXP2101_H_ */
