1 /*
2  * Copyright 2014 Intel Corporation All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.intel.thermal;
18 
19 import android.util.Log;
20 
21 import java.lang.reflect.Method;
22 import java.util.ArrayList;
23 
24 /**
25  * This class contains the cooling device specific information. It also contains
26  * a reference to the actual throttle function.
27  *
28  * @hide
29  */
30 public class ThermalCoolingDevice {
31 
32     private static final String TAG = "ThermalCoolingDevice";
33 
34     private String mDeviceName;
35 
36     private String mClassPath;
37 
38     private String mThrottlePath;
39 
40     private int mCurrentThermalState;
41 
42     private int mDeviceId;
43 
44     private Class mDeviceClass;
45 
46     private Method mThrottleMethod;
47 
48     /* Maintains list of zoneid's under which this cooling device falls. */
49     private ArrayList<Integer> mZoneIdList = new ArrayList<Integer>();
50 
51     /* Maintains corresponding state of zone present in mZoneidList */
52     private ArrayList<Integer> mZoneStateList = new ArrayList<Integer>();
53 
54     /* List of values used to throttle this cooling device */
55     private ArrayList<Integer> mThrottleValues = null;
56 
57     private int mNumThrottleValues = ThermalManager.DEFAULT_NUM_THROTTLE_VALUES;
58 
ThermalCoolingDevice()59     public ThermalCoolingDevice() {
60         mCurrentThermalState = -1;
61         mThrottlePath = "auto";
62         mClassPath = "auto";
63     }
64 
setNumThrottleValues(int num)65     public void setNumThrottleValues(int num) {
66         mNumThrottleValues = num;
67     }
68 
getNumThrottleValues()69     public int getNumThrottleValues() {
70         return mNumThrottleValues;
71     }
72 
setDeviceName(String Name)73     public void setDeviceName(String Name) {
74         mDeviceName = Name;
75     }
76 
getDeviceName()77     public String getDeviceName() {
78         return mDeviceName;
79     }
80 
setDeviceId(int deviceId)81     public void setDeviceId(int deviceId) {
82         mDeviceId = deviceId;
83     }
84 
getDeviceId()85     public int getDeviceId() {
86         return mDeviceId;
87     }
88 
getClassPath()89     public String getClassPath() {
90         return mClassPath;
91     }
92 
setClassPath(String Path)93     public void setClassPath(String Path) {
94         mClassPath = Path;
95     }
96 
getDeviceClass()97     public Class getDeviceClass() {
98         return mDeviceClass;
99     }
100 
setDeviceClass(Class cls)101     public void setDeviceClass(Class cls) {
102         mDeviceClass = cls;
103     }
104 
getThrottleMethod()105     public Method getThrottleMethod() {
106         return mThrottleMethod;
107     }
108 
setThrottleMethod(Method method)109     public void setThrottleMethod(Method method) {
110         mThrottleMethod = method;
111     }
112 
getThrottlePath()113     public String getThrottlePath() {
114         return mThrottlePath;
115     }
116 
setThrottlePath(String path)117     public void setThrottlePath(String path) {
118         if (path.equalsIgnoreCase("auto") && !mDeviceName.equalsIgnoreCase("battery")) {
119             //construct the throttle path
120             int indx = ThermalUtils.getCoolingDeviceIndexContains(mDeviceName);
121             if (indx != -1) {
122                 mThrottlePath = ThermalManager.sCoolingDeviceBasePath + indx +
123                         ThermalManager.sCoolingDeviceState;
124             } else {
125                 mThrottlePath = "invalid";
126             }
127         } else {
128             mThrottlePath = path;
129         }
130     }
131 
getZoneIdList()132     public ArrayList<Integer> getZoneIdList() {
133         return mZoneIdList;
134     }
135 
getZoneStateList()136     public ArrayList<Integer> getZoneStateList() {
137         return mZoneStateList;
138     }
139 
getThrottleValuesList()140     public ArrayList<Integer> getThrottleValuesList() {
141         return mThrottleValues;
142     }
143 
setThrottleValuesList(ArrayList<Integer> list)144     public void setThrottleValuesList(ArrayList<Integer> list) {
145         mThrottleValues = list;
146         mNumThrottleValues = list.size();
147     }
148     /**
149      * Sets the current thermal state of cooling device which will be maximum of
150      * all states of zones under which this cooling device falls.
151      */
updateCurrentThermalState()152     private void updateCurrentThermalState() {
153         int state = 0;
154         for (Integer coolingDevState : mZoneStateList) {
155             state = Math.max(state, coolingDevState);
156         }
157         mCurrentThermalState = state;
158     }
159 
160     /**
161      * Adds zoneID and its thermal state to mListOfZoneIDs and
162      * mListOfTStatesOfZones array. If zoneId exists then its thermal state is
163      * updated else zoneId and its state will be added to array.
164      */
updateZoneState(int zoneId, int state)165     public void updateZoneState(int zoneId, int state) {
166         int index = -1;
167 
168         if (!mZoneIdList.isEmpty()) {
169             index = mZoneIdList.indexOf(zoneId);
170         }
171 
172         // Entry does not exist
173         if (index == -1) {
174             mZoneIdList.add(zoneId);
175             mZoneStateList.add(state);
176         } else {
177             mZoneStateList.set(index, state);
178         }
179 
180         updateCurrentThermalState();
181     }
182 
getThermalState()183     public int getThermalState() {
184         return mCurrentThermalState;
185     }
186 
187 }
188