| /* |
| * 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); |
| }; |