You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
296 lines
11 KiB
296 lines
11 KiB
/*
|
|
* 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);
|
|
};
|