/*
Copyright (C) 2011 The University of Michigan
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Please send inquiries to powertutor@umich.edu
*/
package edu.umich.PowerTutor.phone;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.WindowManager;
public class PassionConstants extends DreamConstants {
protected int screenWidth;
protected int screenHeight;
public PassionConstants(Context context) {
super(context);
DisplayMetrics metrics = new DisplayMetrics();
WindowManager windowManager =
(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(metrics);
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
}
public String modelName() {
return "passion";
}
public double maxPower() {
return 2800;
}
public double lcdBrightness() {
return 1.2217;
}
public double lcdBacklight() {
throw new RuntimeException("lcdBacklight() for passion which has no LCD " +
"display");
}
public double oledBasePower() {
return 365; // This incorporates all the constant component in the model.
}
private static final double[] arrayChannelPower = {
3.0647e-006, 4.4799e-006, 6.4045e-006};
public double[] oledChannelPower() {
return arrayChannelPower;
}
public double oledModulation() {
return 1.7582e-006;
}
private static final double[] arrayCpuPowerRatios = {1.1273, 1.5907, 1.8736,
2.1745, 2.6031, 2.9612, 3.1373,3.4513, 3.9073 ,4.1959, 4.6492, 5.4818};
public double[] cpuPowerRatios() {
return arrayCpuPowerRatios;
}
private static final double[] arrayCpuFreqs = {245, 384, 460, 499, 576, 614,
653, 691, 768, 806, 845, 998};
public double[] cpuFreqs() {
return arrayCpuFreqs;
}
public double audioPower() {
return 106.81;
}
private static final double[] arrayGpsStatePower = {0.0, 17.5, 268.94};
public double[] gpsStatePower() {
return arrayGpsStatePower;
}
public double gpsSleepTime() {
return 6.0;
}
public double wifiLowPower() {
return 34.37;
}
public double wifiHighPower() {
return 404.46 ;
}
public double wifiLowHighTransition() {
return 15;
}
public double wifiHighLowTransition() {
return 8;
}
private static final double[] arrayWifiLinkRatios = {
47.122645, 46.354821, 43.667437, 43.283525, 40.980053, 39.44422, 38.676581,
34.069637, 29.462693, 20.248805, 11.034917, 6.427122
};
public double[] wifiLinkRatios() {
return arrayWifiLinkRatios;
}
private static final double[] arrayWifiLinkSpeeds = {
1, 2, 5.5, 6, 9, 11, 12, 18, 24, 36, 48, 54
};
public double[] wifiLinkSpeeds() {
return arrayWifiLinkSpeeds;
}
public String threegInterface() {
return "rmnet0";
}
public double threegIdlePower(String oper) {
if(OPER_TMOBILE.equals(oper)) {
return 10;
}
return 10; // Return the worst case for unknown operators.
}
public double threegFachPower(String oper) {
if(OPER_TMOBILE.equals(oper)) {
return 405.81;
}
return 405.81; // Return the worst case for unknown operators.
}
public double threegDchPower(String oper) {
if(OPER_TMOBILE.equals(oper)) {
return 902.03;
}
return 902.03; // Return the worst case for unknown operators.
}
public double getMaxPower(String componentName) {
if("OLED".equals(componentName)) {
double[] channel = oledChannelPower();
return oledBasePower() + 255 * screenWidth * screenHeight *
(channel[0] + channel[1] + channel[2] - oledModulation());
}
return super.getMaxPower(componentName);
}
}