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