FreeCalypso > hg > fc-tourmaline
diff src/cs/drivers/drv_app/pwr/pwr_api.c @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cs/drivers/drv_app/pwr/pwr_api.c Fri Oct 16 06:23:26 2020 +0000 @@ -0,0 +1,240 @@ +/******************************************************************************* + * + * 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/rv_defined_swe.h" // for RVM_PWR_SWE + +#ifdef RVM_PWR_SWE + +#include "rvm/rvm_use_id_list.h" +#include "spi/spi_api.h" +#include "spi/spi_env.h" +#include "pwr/pwr_env.h" +#include "pwr/pwr_cust.h" +#include "pwr/pwr_messages.h" +#include "pwr/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 */ + +