FreeCalypso > hg > fc-magnetite
view src/cs/drivers/drv_app/power/board/power.c @ 600:8f50b202e81f
board preprocessor conditionals: prep for more FC hw in the future
This change eliminates the CONFIG_TARGET_FCDEV3B preprocessor symbol and
all preprocessor conditionals throughout the code base that tested for it,
replacing them with CONFIG_TARGET_FCFAM or CONFIG_TARGET_FCMODEM. These
new symbols are specified as follows:
CONFIG_TARGET_FCFAM is intended to cover all hardware designs created by
Mother Mychaela under the FreeCalypso trademark. This family will include
modem products (repackagings of the FCDEV3B, possibly with RFFE or even
RF transceiver changes), and also my desired FreeCalypso handset product.
CONFIG_TARGET_FCMODEM is intended to cover all FreeCalypso modem products
(which will be firmware-compatible with the FCDEV3B if they use TI Rita
transceiver, or will require a different fw build if we switch to one of
Silabs Aero transceivers), but not the handset product. Right now this
CONFIG_TARGET_FCMODEM preprocessor symbol is used to conditionalize
everything dealing with MCSI.
At the present moment the future of FC hardware evolution is still unknown:
it is not known whether we will ever have any beyond-FCDEV3B hardware at all
(contingent on uncertain funding), and if we do produce further FC hardware
designs, it is not known whether they will retain the same FIC modem core
(triband), if we are going to have a quadband design that still retains the
classic Rita transceiver, or if we are going to switch to Silabs Aero II
or some other transceiver. If we produce a quadband modem that still uses
Rita, it will run exactly the same fw as the FCDEV3B thanks to the way we
define TSPACT signals for the RF_FAM=12 && CONFIG_TARGET_FCFAM combination,
and the current fcdev3b build target will be renamed to fcmodem. OTOH, if
that putative quadband modem will be Aero-based, then it will require a
different fw build target, the fcdev3b target will stay as it is, and the
two targets will both define CONFIG_TARGET_FCFAM and CONFIG_TARGET_FCMODEM,
but will have different RF_FAM numbers. But no matter which way we are
going to evolve, it is not right to have conditionals on CONFIG_TARGET_FCDEV3B
in places like ACI, and the present change clears the way for future
evolution.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 01 Apr 2019 01:05:24 +0000 |
parents | 4b6acb68b851 |
children |
line wrap: on
line source
/******************************************************************************* * * power.c * * Purpose: This file contains the functions used for power on and off * management of the board. * In case of RVM_PWR_SWE, this file contains also the * functions used for charger plug and unplug management. * They are all called after the occurence of the ABB interrupt. * * Author: Candice Bazanegue (c-brille@ti.com) * * * (C) Texas Instruments 2001 * ******************************************************************************/ #ifndef _WINDOWS #include "rv.cfg" #endif #include "abb/abb.h" #include "rvm/rvm_use_id_list.h" #include "spi/spi_env.h" #include "power/power.h" #include "rv/rv_defined_swe.h" // for RVM_PWR_SWE #ifndef _WINDOWS #include "kpd/kpd_power_api.h" #include "ffs/ffs.h" #endif // _WINDOWS #ifdef RVM_PWR_SWE #include "spi/spi_task.h" #ifndef _WINDOWS #include "l1sw.cfg" #include "chipset.cfg" #endif // _WINDOWS #include "pwr/pwr_messages.h" #include "pwr/pwr_liion_cha.h" #include "pwr/pwr_disch.h" #endif /* #ifdef RVM_PWR_SWE */ #ifndef _WINDOWS /* Declare the variable containing pressed and released callback. */ extern T_KPD_KEYPAD Kp; extern effs_t ffs_exit(void); #endif // _WINDOWS /// The ABB status used to know the cause of the Switch ON event. static SYS_UWORD16 Power_abb_status = 0; /******************************************************************************* ** ** Function Power_ON_Button ** ** Description: Informs the Protocol Stack that the Power ON key has been ** pressed, and thus allows it to start. ** *******************************************************************************/ void Power_ON_Button(void) { #ifndef _WINDOWS SPI_GBL_INFO_PTR->is_gsm_on = TRUE; /* When we build for ACI, we have no MMI, so there's no point waiting for a keypress. See CR 17958. */ #if (OP_WCP == 0) && (MMI != 0) /* Wait until the pointers initialization by the SMI */ while(!(Kp.pressed && Kp.released)) rvf_delay(1); #if (TEST==0) (Kp.pressed)(KPD_PWR); /* tell key is pressed */ rvf_delay(5); (Kp.released)(); /* allow protocol stack to start */ #endif #endif // OP_WCP == 0 #else rvf_send_trace("Start from button", 17, NULL_PARAM, RV_TRACE_LEVEL_WARNING, LCC_USE_ID); SPI_GBL_INFO_PTR->is_gsm_on = TRUE; #endif // _WINDOWS } /******************************************************************************* ** ** Function Power_OFF_Button ** ** Description: Informs the Protocol Stack that the Power OFF key has been ** pressed, and thus allows it to stop. ** *******************************************************************************/ void Power_OFF_Button(void) { #ifndef _WINDOWS ffs_exit (); #endif // _WINDOWS rvf_send_trace("Power off button", 16, NULL_PARAM, RV_TRACE_LEVEL_WARNING, LCC_USE_ID); SPI_GBL_INFO_PTR->is_gsm_on = FALSE; #ifndef _WINDOWS #if (OP_WCP == 0) && (MMI != 0) (Kp.pressed)(KPD_PWR); /* tell key is pressed */ rvf_delay(5); (Kp.released)(); /* tell key is released */ #else ABB_Power_Off(); #endif #endif // _WINDOWS } /** * @brief Sets the cause of the swith ON event. * * This function get the ABB status register and stores it into the * global variable Power_abb_status. * * @noparam * * @noreturn */ void Set_Switch_ON_Cause(void) { Power_abb_status = ABB_Read_Status(); } /******************************************************************************* ** ** Function Switch_ON ** ** Description This function is called by the spi task after the board is ** switched ON. It calls the appropriate function according ** to the ABB status register. ** ** Warning The Set_Switch_ON_Cause() function has to be called prior. ** *******************************************************************************/ void Switch_ON(void) { #if ((ANLG_FAM == 1) || (ANLG_FAM == 2)) if (Power_abb_status & ONBSTS) #elif (ANLG_FAM == 3) if (Power_abb_status & PWONBSTS) #endif { /* Switch on Condition on ON BUTTON Push */ rvf_send_trace("Push Button from OFF to ON",26, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID); Power_ON_Button(); #ifdef RVM_PWR_SWE pwr_handle_discharge(); #endif } #if ((ANLG_FAM == 1) || (ANLG_FAM == 2)) else if (Power_abb_status & ONRSTS) #elif (ANLG_FAM == 3) else if (Power_abb_status & RPSTS) #endif { /* Switch on Condition on ON REM transition 0->1 */ rvf_send_trace("ON Remote",9, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID); Power_ON_Remote(); #ifdef RVM_PWR_SWE pwr_handle_discharge(); #endif } #ifdef RVM_PWR_SWE else if (Power_abb_status & CHGSTS) { /* Switch on Condition on CHARGER IC PLUG */ rvf_send_trace("PWR: Charger Plug",17, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID); if (Power_abb_status & CHGPRES) { /* charger still present */ PWR_Charger_Plug(); } } #endif /* #ifdef RVM_PWR_SWE */ else { // The reset should run the SW in the same way than a Power ON rvf_send_trace("Start from reset",16, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID); Power_ON_Button(); #ifdef RVM_PWR_SWE pwr_handle_discharge(); #endif } } /******************************************************************************* ** ** Function Power_ON_Remote ** ** Description ** ** *******************************************************************************/ void Power_ON_Remote(void) { } /******************************************************************************* ** ** Function Power_OFF_Remote ** ** Description ** ** *******************************************************************************/ void Power_OFF_Remote(void) { } /******************************************************************************* ** ** Function Power_IT_WakeUp ** ** Description ** ** *******************************************************************************/ void Power_IT_WakeUp(void) { } #ifdef RVM_PWR_SWE /******************************************************************************* ** ** Function PWR_Charger_Plug ** ** Description ** ** *******************************************************************************/ void PWR_Charger_Plug(void) { /* Start the fast charging cycle */ /* Since this function is called from the SPI task it can't be interrupt by another task so we can directly access the SPI through the low-level driver */ if (SPI_GBL_INFO_PTR->is_gsm_on == FALSE) /* GSM OFF */ { rvf_delay(RVF_MS_TO_TICKS(2000)); } rvf_stop_timer(SPI_TIMER3); /* informs the upper layer that the charger has been plugged */ pwr_send_charger_plug_event(); /* get the type of the battery */ pwr_get_battery_type(); } /******************************************************************************* ** ** Function PWR_Charger_Unplug ** ** Description ** ** *******************************************************************************/ void PWR_Charger_Unplug(void) { /* informs the upper layer that the charger has been unplugged */ pwr_send_charger_unplug_event(); rvf_send_trace("Charger unplug", 14, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID ); pwr_stop_charging(); if (SPI_GBL_INFO_PTR->is_gsm_on == FALSE) /* GSM OFF */ { #ifndef _WINDOWS #if (ANLG_FAM == 1) ABB_Write_Register_on_page(PAGE0, VRPCCTL2, 0x00EE); #elif ((ANLG_FAM == 2) || (ANLG_FAM == 3)) ABB_Write_Register_on_page(PAGE0, VRPCDEV, 0x0001); #endif #else ABB_Write_Register_on_page(PAGE0, VRPCDEV, 0x00EE); #endif // _WINDOWS } else { pwr_handle_discharge(); } } #endif /* #ifdef RVM_PWR_SWE */