nt9856x/code/application/source/cardv/SrcCode/Gx/include/GxPower.h
2023-03-28 15:07:53 +08:00

278 lines
9.0 KiB
C
Executable File

/**
System power control module.
This module handles the power control, including battery level detection, auto power off, auto sleep.
It also control the battery charge flow.
@file GxPower.h
@ingroup mILibPowerCtrl
Copyright Novatek Microelectronics Corp. 2011. All rights reserved.
*/
#ifndef _GXPOWER_H
#define _GXPOWER_H
#include "GxCommon.h"
#include "DxType.h"
#include "Dx.h"
#include <time.h>
/**
@addtogroup mILibPowerCtrl
*/
//@{
////////////////////////////////////////////////////////////////////////////////
/**
Gx Power time ID
*/
typedef enum _GXTIME_ID {
GXTIME_HWRESET = 0x0102, ///< hw-reset time, use tm struct (hour, min, sec)
GXTIME_SWRESET = 0x0103, ///< sw-reset keep-alive period (sec)
}
GXTIME_ID;
extern UINT32 GxPower_GetTime(GXTIME_ID tid, struct tm* p_ctv);
extern void GxPower_SetTime(GXTIME_ID tid, struct tm ctv, UINT32 param);
/**
Calculate maximum days number of given (year, month).
Calculate maximum days number of given (year, month).
@param[in] year Year.
@param[in] month Month
@return Days number.
*/
extern INT32 GxTime_CalcMonthDays(INT32 year, INT32 month);
/**
Convert date-time value to days number.
Convert date-time value to days number.
@param[in] ctv Date time value.
@return Days number. [second precison]
*/
extern UINT32 GxTime_Time2Days(struct tm ctv);
/**
Convert days number to date-time value.
Convert days number to date-time value.
@param[in] days Days number.
@return Date time value. [day precison]
*/
extern struct tm GxTime_Days2Time(UINT32 days);
/**
Calculate sum of date-time value and another differece
Calculate sum of date-time value and another differece
@param[in] ctv Date time value.
@param[in] diff Difference (date time value).
@return Sum (date time value). [second precison]
*/
extern struct tm GxTime_AddTime(struct tm ctv, struct tm diff);
/**
Check if leap year
This function is used to check if the specified year is a leap year.
@param[in] uiYear The year you want to check (0~0xFFFFFFFF)
@return
- @b TRUE : Is a leap year
- @b FALSE : Isn't a leap year
*/
extern BOOL GxTime_IsLeapYear(UINT32 year);
/**
Gx Power key ID
*/
typedef enum _GXPWR_KEY {
//time and alaram
GXPWR_KEY_POWER1 = 0x0000, ///< power key 1: write 0xf0: clear auto-power-off timer, 0xff: power off immediately
//GXPWR_KEY_POWER2 = 0x0001, ///< power key 2:
//GXPWR_KEY_POWER3 = 0x0002, ///< power key 3:
//GXPWR_KEY_POWER4 = 0x0003, ///< power key 4:
GXPWR_KEY_HWRESET = 0x0005, ///< hw-reset key: write 0x00: disable, 0x01: enable, 0xff: reset immediately / read: is enable?
GXPWR_KEY_SWRESET = 0x0006, ///< sw-reset key: write 0x00: disable, 0x01: enable, 0xf0: kick: 0xff: reset immediately / read: is enable?
}
GXPWR_KEY;
/**
Gx Power control ID
*/
typedef enum _GXPWR_CTRL {
//power-on
GXPWR_CTRL_POWERON_DETECT_EN = 0x1000, ///< power-on detect enable (WO), ex: PIR sensor
GXPWR_CTRL_POWERON_SRC= 0x1001, ///< after power-on, get power source type (RO)
GXPWR_CTRL_POWERON_LOST= 0x1002, ///< after power-on, get date-time power lost status (RO)
//auto-power-off
GXPWR_CTRL_AUTOPOWEROFF_EN = 0x1030, ///< write 0x00: disable, 0x01: enable, 0xff: reset
GXPWR_CTRL_AUTOPOWEROFF_TIME = 0x1031, ///< auto power off system time value set, get
//power-save
GXPWR_CTRL_SLEEP_LEVEL = 0x2000, ///< current sleep level 0~3 (RO)
//auto-power-save
GXPWR_CTRL_AUTOSLEEP_EN = 0x2001, ///< write 0x00: disable, 0x01: enable, 0xff: reset
GXPWR_CTRL_AUTOSLEEP_TIME_L = 0x2003, ///< low level sleep mode time value set, get
GXPWR_CTRL_AUTOSLEEP_TIME = 0x2004, ///< normal level sleep mode time value set, get
GXPWR_CTRL_AUTOSLEEP_TIME_D = 0x2005, ///< deep level sleep mode time value set, get
//power-detect
GXPWR_CTRL_BATTERY_DETECT_EN = 0x3000, ///< write 0x00: disable, 0x01: enable
GXPWR_CTRL_BATTERY_VALUE = 0x3001, ///< current battery native value get (RO)
GXPWR_CTRL_BATTERY_LEVEL = 0x3002, ///< current battery level get (RO)
GXPWR_CTRL_BATTERY_IS_INSERT = 0x3003, ///< battery is insert or not (RO)
GXPWR_CTRL_BATTERY_IS_DEAD = 0x3004, ///< battery is dead or not (RO)
GXPWR_CTRL_BATTERY_POWERON_CHECK_EN = 0x3005, ///< power on battery "dummy load" check, default enable, write 0 to disable
GXPWR_CTRL_BATTERY_FAIL_POWEROFF_EN = 0x3006, ///< if "dummy load" check battery fail need to power off (RO)
//power-charge
GXPWR_CTRL_BATTERY_CHARGE_EN = 0x3010, ///< write 0x00: disable, 0x01: enable
GXPWR_CTRL_BATTERY_CHARGE_CURRENT = 0x3011, ///< battery charge current set ,get(RW)
GXPWR_CTRL_BATTERY_CHARGE_OK = 0x3012, ///< battery charge ok status get (RO)
ENUM_DUMMY4WORD(GXPWR_CTRL)
} GXPWR_CTRL;
/**
@name Battery charge current value
*/
//@{
#define BATT_CHARGE_CURRENT_LOW 0 ///< charge current low
#define BATT_CHARGE_CURRENT_MEDIUM 1 ///< charge current medimum
#define BATT_CHARGE_CURRENT_HIGH 2 ///< charge current high
//@}
/**
@name Power Callback event
*/
//@{
#define POWER_CB_BATT_EMPTY 0 ///< battery is emtpy
#define POWER_CB_BATT_CHG 1 ///< battery level changed
#define POWER_CB_SLEEP_ENTER_L 2 ///< enter low level sleep mode
#define POWER_CB_SLEEP_ENTER 3 ///< enter normal level sleep mode
#define POWER_CB_SLEEP_ENTER_D 4 ///< enter deep level sleep mode
#define POWER_CB_SLEEP_RESET 5 ///< reset auto sleep count down timer
#define POWER_CB_POWEROFF 6 ///< auto power off time is up
#define POWER_CB_BATT_OVERHEAT 7 ///< battery temperature is overheat
#define POWER_CB_CHARGE_OK 8 ///< battery charge is ok (charge full)
#define POWER_CB_CHARGE_SUSPEND 9 ///< temperature is too high suspend charge
#define POWER_CB_CHARGE_RESUME 10 ///< resume charge after temperature becomes normal
//@}
/**
GxPower power on init.
@note User must register callback funcion then can receive the Driver Power Callback event DRVPWR_CB_XXX.
@param[in] fpDxPowerCB: the callback function pointer.
*/
extern UINT32 GxPower_Open(DX_HANDLE hPwr, GX_CALLBACK_PTR DxPower_CB);
extern UINT32 GxPower_Close(void);
extern UINT32 GxPower_GetPwrKey(GXPWR_KEY kid);
extern void GxPower_SetPwrKey(GXPWR_KEY kid, UINT32 key);
/**
Detect battery voltage level.
Detect battery voltage level and store it in uiBatteryLvl (static variable)
If the battery voltage is VOLDET_BATTERY_LVL_EMPTY, then callback event POWER_CB_BATT_EMPTY to power off the system.
*/
extern void GxPower_DetBattery(void);
/**
Detect auto power off
Detect auto power off.
If the auto power off counter reach auto power off setting, then callback event POWER_CB_POWEROFF to do power off.
*/
extern void GxPower_DetAutoPoweroff(void);
/**
Get GxPower setting value.
@param[in] PowerCtrl: setting ID
@return the setting value.
*/
extern UINT32 GxPower_GetControl(GXPWR_CTRL PowerCtrl);
/**
Set GxPower setting value.
@param[in] PowerCtrl: setting ID
@param[in] value: the setting value
*/
extern void GxPower_SetControl(GXPWR_CTRL PowerCtrl, UINT32 value);
/**
Do the dummy loading.
This API is just mapping to DrvPower_DummyLoad(). User need to implement the function DrvPower_DummyLoad() to do the dummy load.\n
@note User must call this API before calling GxPower_Open() when system power on.
@return TRUE: battery status is ok can power on.
FALSE: battery status is not ok can't power on.
*/
extern UINT32 GxPower_DummyLoad(void);
/**
Register callback function.
@note User must register callback funcion then can receive the Power Callback event POWER_CB_XXX.
@param[in] fpPowerCB: the callback function pointer.
*/
extern void GxPower_RegCB(GX_CALLBACK_PTR fpPowerCB);
/**
Detect if enter sleep mode.
If the sleep mode counter reachs setting, then callback event to enter sleep mode.\n
The sleep mode have 3 levels, each level has separate time setting and separate callback event.
*/
extern void GxPower_DetSleep(void);
/**
Detect if the charge status is ok.
Detect battery charge status and determine to continue charge or stop charging.\n
It will also detect the battery temperature to check if the battery is overheat and need to suspend charge.
*/
extern void GxPower_DetCharge(void);
/**
Install SxCmd.
Install uart command to SxCmd.
*/
extern void GxPower_InstallCmd(void);
extern void GxPower_InstallID(void);
//@}
#endif //_GXPOWER_H