mirror of
https://github.com/sipeed/MaixCDK.git
synced 2026-09-12 06:39:49 -05:00
161 lines
4.1 KiB
C++
161 lines
4.1 KiB
C++
/**
|
|
* @author 916BGAI
|
|
* @copyright Sipeed Ltd 2024-
|
|
* @license Apache 2.0
|
|
* @update 2024.10.28: Add framework, create this file.
|
|
*/
|
|
|
|
#pragma once
|
|
#include "maix_basic.hpp"
|
|
|
|
namespace maix::ext_dev::pmu {
|
|
|
|
/**
|
|
* @brief charger status
|
|
* @maixpy maix.ext_dev.pmu.ChargerStatus
|
|
*/
|
|
enum class ChargerStatus {
|
|
CHG_TRI_STATE, //tri_charge
|
|
CHG_PRE_STATE, //pre_charge
|
|
CHG_CC_STATE, //constant charge
|
|
CHG_CV_STATE, //constant voltage
|
|
CHG_DONE_STATE, //charge done
|
|
CHG_STOP_STATE, //not charge
|
|
};
|
|
|
|
/**
|
|
* @brief power channel
|
|
* @maixpy maix.ext_dev.pmu.PowerChannel
|
|
*/
|
|
enum class PowerChannel {
|
|
DCDC1,
|
|
DCDC2,
|
|
DCDC3,
|
|
DCDC4,
|
|
DCDC5,
|
|
ALDO1,
|
|
ALDO2,
|
|
ALDO3,
|
|
ALDO4,
|
|
BLDO1,
|
|
BLDO2,
|
|
DLDO1,
|
|
DLDO2,
|
|
VBACKUP,
|
|
CPULDO,
|
|
};
|
|
|
|
/**
|
|
* PMU driver class
|
|
* @maixpy maix.ext_dev.pmu.PMU
|
|
*/
|
|
class PMU {
|
|
|
|
public:
|
|
/**
|
|
* @brief Construct a new PMU object, will open PMU.
|
|
*
|
|
* @param driver driver name, support "axp2101" "maixcam2", default empty means use default.
|
|
* @param i2c_bus i2c bus number. Automatically selects the on-board pmu when -1 is passed in.
|
|
* @param addr PMU i2c addr.
|
|
*
|
|
* @maixpy maix.ext_dev.pmu.PMU.__init__
|
|
*/
|
|
PMU(std::string driver = "", int i2c_bus = -1, int addr = 0x34);
|
|
~PMU();
|
|
|
|
/**
|
|
* @brief Poweroff immediately.
|
|
* @return err::Err type, if init success, return err::ERR_NONE.
|
|
* @maixpy maix.ext_dev.pmu.PMU.poweroff
|
|
*/
|
|
err::Err poweroff();
|
|
|
|
/**
|
|
* @brief Is the battery connected.
|
|
* @return bool type, if battery is connected, return true.
|
|
* @maixpy maix.ext_dev.pmu.PMU.is_bat_connect
|
|
*/
|
|
bool is_bat_connect();
|
|
|
|
/**
|
|
* @brief Is the power adapter connected.
|
|
* @return bool type, if power adapter is connected, return true.
|
|
* @maixpy maix.ext_dev.pmu.PMU.is_vbus_in
|
|
*/
|
|
bool is_vbus_in();
|
|
|
|
/**
|
|
* @brief Is bat charging.
|
|
* @return bool type, if bat is charging, return true.
|
|
* @maixpy maix.ext_dev.pmu.PMU.is_charging
|
|
*/
|
|
bool is_charging();
|
|
|
|
/**
|
|
* @brief Get the battery percentage.
|
|
* @return int type, return battery percentage.
|
|
* @maixpy maix.ext_dev.pmu.PMU.get_bat_percent
|
|
*/
|
|
int get_bat_percent();
|
|
|
|
/**
|
|
* @brief Get the battery charging status.
|
|
* @return int type, return battery charging status.
|
|
* @maixpy maix.ext_dev.pmu.PMU.get_charger_status
|
|
*/
|
|
ext_dev::pmu::ChargerStatus get_charger_status();
|
|
|
|
/**
|
|
* @brief Get the battery voltage.
|
|
* @return uint16_t type, return battery voltage.
|
|
* @maixpy maix.ext_dev.pmu.PMU.get_bat_vol
|
|
*/
|
|
uint16_t get_bat_vol();
|
|
|
|
/**
|
|
* @brief Clear interrupt flag.
|
|
* @return err::Err type, if clean success, return err::ERR_NONE.
|
|
* @maixpy maix.ext_dev.pmu.PMU.clean_irq
|
|
*/
|
|
err::Err clean_irq();
|
|
|
|
/**
|
|
* @brief Set the battery charging current.
|
|
* @param current The current to be set.
|
|
* @return err::Err type, if set success, return err::ERR_NONE.
|
|
* @maixpy maix.ext_dev.pmu.PMU.set_bat_charging_cur
|
|
*/
|
|
err::Err set_bat_charging_cur(int current);
|
|
|
|
/**
|
|
* @brief Get the battery charging current.
|
|
* @return int, return the currently set charging current.
|
|
* @maixpy maix.ext_dev.pmu.PMU.get_bat_charging_cur
|
|
*/
|
|
int get_bat_charging_cur();
|
|
|
|
/**
|
|
* @brief Set the PMU channel voltage.
|
|
* You can retrieve the available channel from ext_dev.pmu.PowerChannel.
|
|
* @param voltage The voltage to be set.
|
|
* @return int, return the channel voltage.
|
|
* @maixpy maix.ext_dev.pmu.PMU.set_vol
|
|
*/
|
|
err::Err set_vol(ext_dev::pmu::PowerChannel channel, int voltage);
|
|
|
|
/**
|
|
* @brief Get the PMU channel voltage.
|
|
* You can retrieve the available channel from ext_dev.pmu.PowerChannel.
|
|
* @return err::Err type, if set success, return err::ERR_NONE.
|
|
* @maixpy maix.ext_dev.pmu.PMU.get_vol
|
|
*/
|
|
int get_vol(ext_dev::pmu::PowerChannel channel);
|
|
|
|
private:
|
|
std::string _driver;
|
|
void* _param;
|
|
bool _is_opened;
|
|
};
|
|
|
|
} |