/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * Adjust the controller's power states. */ #pragma once #include "SyncEvent.h" #include "nfa_api.h" /***************************************************************************** ** ** Name: PowerSwitch ** ** Description: Adjust the controller's power states. ** *****************************************************************************/ class PowerSwitch { public: /******************************************************************************* ** ** Description: UNKNOWN_LEVEL: power level is unknown because the stack is *off. ** FULL_POWER: controller is in full-power state. ** LOW_POWER: controller is in lower-power state. ** *******************************************************************************/ enum PowerLevel { UNKNOWN_LEVEL, FULL_POWER, LOW_POWER, POWER_OFF }; /******************************************************************************* ** ** Description: POWER_STATE_OFF: power level is OFF when screen is off. ** POWER_STATE_FULL: controller is in full-power state when *screen is off. ** after a period of inactivity, controller *goes into snooze ** mode. ** POWER_STATE_CARD_EMULATION: screen-off card-emulation ** (CE4/CE3/CE1 modes are used), ** *******************************************************************************/ enum ScreenOffPowerState { POWER_STATE_OFF = 0, POWER_STATE_FULL = 1, POWER_STATE_CARD_EMULATION = 2 }; /******************************************************************************* ** ** Description: DISCOVERY: Discovery is enabled ** SE_ROUTING: Routing to SE is enabled. ** SE_CONNECTED: SE is connected. ** *******************************************************************************/ typedef int PowerActivity; static const PowerActivity DISCOVERY; static const PowerActivity SE_ROUTING; static const PowerActivity SE_CONNECTED; static const PowerActivity HOST_ROUTING; /******************************************************************************* ** ** Description: Platform Power Level, copied from *NativeNfcBrcmPowerMode.java. ** UNKNOWN_LEVEL: power level is unknown. ** POWER_OFF: The phone is turned OFF ** SCREEN_OFF: The phone is turned ON but screen is OFF ** SCREEN_ON_LOCKED: The phone is turned ON, screen is ON but *user locked ** SCREEN_ON_UNLOCKED: The phone is turned ON, screen is ON, *and user unlocked ** *******************************************************************************/ static const int PLATFORM_UNKNOWN_LEVEL = 0; static const int PLATFORM_POWER_OFF = 1; static const int PLATFORM_SCREEN_OFF = 2; static const int PLATFORM_SCREEN_ON_LOCKED = 3; static const int PLATFORM_SCREEN_ON_UNLOCKED = 4; static const int VBAT_MONITOR_ENABLED = 1; static const int VBAT_MONITOR_PRIMARY_THRESHOLD = 5; static const int VBAT_MONITOR_SECONDARY_THRESHOLD = 8; /******************************************************************************* ** ** Function: PowerSwitch ** ** Description: Initialize member variables. ** ** Returns: None ** *******************************************************************************/ PowerSwitch(); /******************************************************************************* ** ** Function: ~PowerSwitch ** ** Description: Release all resources. ** ** Returns: None ** *******************************************************************************/ ~PowerSwitch(); /******************************************************************************* ** ** Function: getInstance ** ** Description: Get the singleton of this object. ** ** Returns: Reference to this object. ** *******************************************************************************/ static PowerSwitch& getInstance(); /******************************************************************************* ** ** Function: initialize ** ** Description: Initialize member variables. ** ** Returns: None ** *******************************************************************************/ void initialize(PowerLevel level); /******************************************************************************* ** ** Function: getLevel ** ** Description: Get the current power level of the controller. ** ** Returns: Power level. ** *******************************************************************************/ PowerLevel getLevel(); /******************************************************************************* ** ** Function: setLevel ** ** Description: Set the controller's power level. ** level: power level. ** ** Returns: True if ok. ** *******************************************************************************/ bool setLevel(PowerLevel level); /******************************************************************************* ** ** Function: setScreenOffPowerState ** ** Description: Set the controller's screen off power state. ** state: the desired screen off power state. ** ** Returns: True if ok. ** *******************************************************************************/ bool setScreenOffPowerState(ScreenOffPowerState state); /******************************************************************************* ** ** Function: setModeOff ** ** Description: Set a mode to be deactive. ** ** Returns: True if any mode is still active. ** *******************************************************************************/ bool setModeOff(PowerActivity deactivated); /******************************************************************************* ** ** Function: setModeOn ** ** Description: Set a mode to be active. ** ** Returns: True if any mode is active. ** *******************************************************************************/ bool setModeOn(PowerActivity activated); /******************************************************************************* ** ** Function: abort ** ** Description: Abort and unblock currrent operation. ** ** Returns: None ** *******************************************************************************/ void abort(); /******************************************************************************* ** ** Function: deviceManagementCallback ** ** Description: Callback function for the stack. ** event: event ID. ** eventData: event's data. ** ** Returns: None ** *******************************************************************************/ static void deviceManagementCallback(uint8_t event, tNFA_DM_CBACK_DATA* eventData); /******************************************************************************* ** ** Function: isPowerOffSleepFeatureEnabled ** ** Description: Whether power-off-sleep feature is enabled in .conf file. ** ** Returns: True if feature is enabled. ** *******************************************************************************/ bool isPowerOffSleepFeatureEnabled(); private: PowerLevel mCurrLevel; uint8_t mCurrDeviceMgtPowerState; // device management power state; such as // NFA_BRCM_PWR_MODE_??? uint8_t mExpectedDeviceMgtPowerState; // device management power state; such // as NFA_BRCM_PWR_MODE_??? int mDesiredScreenOffPowerState; // read from .conf file; 0=power-off-sleep; // 1=full power; 2=CE4 power static PowerSwitch sPowerSwitch; // singleton object static const uint8_t NFA_DM_PWR_STATE_UNKNOWN = -1; // device management power state power state is unknown SyncEvent mPowerStateEvent; PowerActivity mCurrActivity; Mutex mMutex; /******************************************************************************* ** ** Function: setPowerOffSleepState ** ** Description: Adjust controller's power-off-sleep state. ** sleep: whether to enter sleep state. ** ** Returns: True if ok. ** *******************************************************************************/ bool setPowerOffSleepState(bool sleep); /******************************************************************************* ** ** Function: deviceMgtPowerStateToString ** ** Description: Decode power level to a string. ** deviceMgtPowerState: power level. ** ** Returns: Text representation of power level. ** *******************************************************************************/ const char* deviceMgtPowerStateToString(uint8_t deviceMgtPowerState); /******************************************************************************* ** ** Function: powerLevelToString ** ** Description: Decode power level to a string. ** level: power level. ** ** Returns: Text representation of power level. ** *******************************************************************************/ const char* powerLevelToString(PowerLevel level); /******************************************************************************* ** ** Function: screenOffPowerStateToString ** ** Description: Decode screen-off power state to a string. ** state: power state ** ** Returns: Text representation of screen-off power state. ** *******************************************************************************/ const char* screenOffPowerStateToString(ScreenOffPowerState state); };