1bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan/* 2bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * Copyright 2014 Intel Corporation All Rights Reserved. 3bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * 4bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * Licensed under the Apache License, Version 2.0 (the "License"); 5bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * you may not use this file except in compliance with the License. 6bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * You may obtain a copy of the License at 7bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * 8bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * http://www.apache.org/licenses/LICENSE-2.0 9bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * 10bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * Unless required by applicable law or agreed to in writing, software 11bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * distributed under the License is distributed on an "AS IS" BASIS, 12bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * See the License for the specific language governing permissions and 14bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * limitations under the License. 15bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan */ 16bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan 17bc0b49155603ba1c0c1fc86d13127d04021e7c70shravanpackage com.intel.thermal; 18bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan 19bc0b49155603ba1c0c1fc86d13127d04021e7c70shravanimport android.util.Log; 20bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan 21bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan/** 22bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * The ThermalZoneMonitor class runs a thread for each zone 23bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * with which it is instantiated. 24bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * 25bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan * @hide 26bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan */ 27bc0b49155603ba1c0c1fc86d13127d04021e7c70shravanpublic class ThermalZoneMonitor implements Runnable { 28bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan private static final String TAG = "ThermalZoneMonitor"; 29bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan private Thread t; 30bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan private ThermalZone zone; 31bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan private String mThreadName; 32bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan private boolean stop = false; 33bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan 34bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan public ThermalZoneMonitor(ThermalZone tz) { 35bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan zone = tz; 36bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan mThreadName = "ThermalZone" + zone.getZoneId(); 37bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan t = new Thread(this, mThreadName); 38bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan t.start(); 39bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan } 40bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan 41bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan public void stopMonitor() { 42bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan stop = true; 43bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan t.interrupt(); 44bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan } 45bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan 46bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan public void run() { 47bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan try { 48bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan while (!stop && !t.isInterrupted()) { 49bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan if (zone.isZoneStateChanged()) { 50bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan zone.sendThermalEvent(); 51bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan } 52bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan // stop value can be changed before going to sleep 53bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan if (!stop) { 54bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan Thread.sleep(zone.getPollDelay(zone.getZoneState())); 55bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan } 56bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan } 57bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan } catch (InterruptedException iex) { 58bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan Log.i(TAG, "Stopping thread " + mThreadName + " [InterruptedException]"); 59bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan } 60bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan } 61bc0b49155603ba1c0c1fc86d13127d04021e7c70shravan} 62