📄 pwr_api.c
字号:
/*******************************************************************************
*
* pwr_api.c
*
* Purpose: This file contains functions that can be accessed by any SWE
* to use power management services.
*
* Author Candice Bazanegue (c-brille@ti.com)
*
*
* (C) Texas Instruments 2001
*
******************************************************************************/
#include "rv_defined_swe.h" // for RVM_PWR_SWE
#ifdef RVM_PWR_SWE
#include "rvm_use_id_list.h"
#include "spi_api.h"
#include "spi_env.h"
#include "pwr_env.h"
#include "pwr_cust.h"
#include "pwr_messages.h"
#include "pwr_messages_i.h"
/* Define a pointer to the PWR Environment control block. */
extern T_PWR_ENV_CTRL_BLK *pwr_env_ctrl_blk;
/*******************************************************************************
**
** Function power_info_register
**
** Description Function called by the MMI to enable (or disable) the receipt
** of several events related to the charging process or the
** discharge levels.
**
**
*******************************************************************************/
T_POWER_RET power_info_register(BOOLEAN info_enable, T_RV_RETURN return_path)
{
if (((pwr_env_ctrl_blk->power_info.return_path.callback_func)!= NULL) ||
(pwr_env_ctrl_blk->power_info.return_path.addr_id != RVF_INVALID_ADDR_ID))
{
rvf_send_trace("power_info_register : info already registered, performs another registration",
76,
NULL_PARAM,
RV_TRACE_LEVEL_DEBUG_HIGH,
PWR_USE_ID);
}
pwr_env_ctrl_blk->power_info.info_enable = info_enable;
pwr_env_ctrl_blk->power_info.return_path.addr_id = return_path.addr_id;
pwr_env_ctrl_blk->power_info.return_path.callback_func = return_path.callback_func;
return (POWER_OK);
}
/*******************************************************************************
**
** Function power_alert_register
**
** Description Function called by the MMI to configure the threshold of
** remaining energy in the battery, under which the MMI will
** receive low battery alerts.
**
**
*******************************************************************************/
T_POWER_RET power_alert_register(T_PWR_PERCENT remain_capa_threshold,
T_RV_RETURN return_path)
{
if (((pwr_env_ctrl_blk->power_alert.return_path.callback_func)!= NULL) ||
(pwr_env_ctrl_blk->power_alert.return_path.addr_id != RVF_INVALID_ADDR_ID))
{
rvf_send_trace("power_alert_register : info already registered, performs another registration",
77,
NULL_PARAM,
RV_TRACE_LEVEL_DEBUG_HIGH,
PWR_USE_ID);
}
pwr_env_ctrl_blk->power_alert.remain_capa_threshold = remain_capa_threshold;
pwr_env_ctrl_blk->power_alert.return_path.addr_id = return_path.addr_id;
pwr_env_ctrl_blk->power_alert.return_path.callback_func = return_path.callback_func;
return (POWER_OK);
}
/*******************************************************************************
**
** Function power_emergency_register
**
** Description Function called by the MMI to define the call-back function
** which will be called in case of emergency switch OFF.
**
**
*******************************************************************************/
T_POWER_RET power_emergency_register(T_RV_RETURN return_path)
{
if (((pwr_env_ctrl_blk->power_emergency.callback_func)!= NULL) ||
(pwr_env_ctrl_blk->power_emergency.addr_id != RVF_INVALID_ADDR_ID))
{
rvf_send_trace("power_emergency_register : info already registered, performs another registration",
80,
NULL_PARAM,
RV_TRACE_LEVEL_DEBUG_HIGH,
PWR_USE_ID);
}
pwr_env_ctrl_blk->power_emergency.addr_id = return_path.addr_id;
pwr_env_ctrl_blk->power_emergency.callback_func = return_path.callback_func;
return (POWER_OK);
}
/*******************************************************************************
**
** Function pwr_callback_func
**
** Description
**
**
**
*******************************************************************************/
void pwr_callback_func(void *ptr)
{
T_PWR_CHARGING_STATE charge_started;
/* Charge started? */
charge_started = pwr_env_ctrl_blk->charging_state;
if (charge_started == CHARGE_STOPPED)
{
/* Ask for battery temperature measurement */
pwr_get_battery_temperature();
}
else if ((charge_started == CI_CHARGE_STARTED) ||
(charge_started == CV_CHARGE_STARTED))
{
/* The battery temperature has been measured during the charge */
pwr_get_bat_info();
}
}
/*******************************************************************************
**
** Function pwr_get_bat_info
**
** Description
**
**
*******************************************************************************/
void pwr_get_bat_info(void)
{
UINT16 bat_voltage, bat_madc_voltage;
UINT16 charger_current, bat_madc_current;
UINT16 status;
BOOLEAN charger_plugged;
T_PWR_CHARGING_STATE charge_started;
T_PWR_PERCENT remain_capacity;
INT16 bat_temperature;
/* Voltage and current */
/* Read the conversion results in the analog device registers */
bat_madc_voltage = ABB_Read_Register_on_page(PAGE0, VBATREG);
bat_madc_current = ABB_Read_Register_on_page(PAGE0, ICHGREG);
bat_voltage = pwr_adc_to_mvolt(bat_madc_voltage);
charger_current = pwr_adc_to_mA(bat_madc_current);
/* Remaining capacity in the battery */
remain_capacity = pwr_get_capacity_vs_voltage(bat_voltage);
/* Charger plugged? */
status = ABB_Read_Status();
if (status & CHGPRES)
{
charger_plugged = TRUE;
}
else
{
charger_plugged = FALSE;
}
/* Charge started? */
charge_started = pwr_env_ctrl_blk->charging_state;
/* The battery temperature is already measured during the charge */
/* Use the last result */
bat_temperature = pwr_env_ctrl_blk->bat_celsius_temp;
/* Send the results to the upper layer */
pwr_send_battery_info(bat_voltage, bat_temperature, charger_current,
charger_plugged, charge_started,
remain_capacity);
}
/*******************************************************************************
**
** Function power_battery_information
**
** Description Function called by the MMI to get information concerning
** the battery.
**
**
*******************************************************************************/
T_POWER_RET power_battery_information(void)
{
T_RV_RET spi_return;
spi_return = pwr_spi_battery_info(pwr_callback_func);
if (spi_return != RV_OK)
{
return (POWER_ERROR);
}
return (POWER_OK);
}
#endif /* #ifdef RVM_PWR_SWE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -