1#define LOG_TAG "android.hardware.thermal.thermalcallback@1.1-impl"
2#include <log/log.h>
3
4#include "ThermalCallback.h"
5#include "services/thermalservice/ThermalService.h"
6#include <math.h>
7#include <android/os/Temperature.h>
8#include <hardware/thermal.h>
9
10namespace android {
11namespace hardware {
12namespace thermal {
13namespace V1_1 {
14namespace implementation {
15
16using ::android::os::ThermalService;
17using ::android::hardware::thermal::V1_0::TemperatureType;
18
19// Register a binder ThermalService object for sending events
20void ThermalCallback::registerThermalService(sp<ThermalService> thermalService)
21{
22    mThermalService = thermalService;
23}
24
25// Methods from IThermalCallback::V1_1 follow.
26Return<void> ThermalCallback::notifyThrottling(
27      bool isThrottling,
28      const android::hardware::thermal::V1_0::Temperature& temperature) {
29
30    // Convert HIDL IThermal Temperature to binder IThermalService Temperature.
31    if (mThermalService != nullptr) {
32        float value = NAN;
33        int type = DEVICE_TEMPERATURE_UNKNOWN;
34
35        switch(temperature.type) {
36          case TemperatureType::CPU:
37            type = DEVICE_TEMPERATURE_CPU;
38            break;
39          case TemperatureType::GPU:
40            type = DEVICE_TEMPERATURE_GPU;
41            break;
42          case TemperatureType::BATTERY:
43            type = DEVICE_TEMPERATURE_BATTERY;
44            break;
45          case TemperatureType::SKIN:
46            type = DEVICE_TEMPERATURE_SKIN;
47            break;
48          case TemperatureType::UNKNOWN:
49          default:
50            type = DEVICE_TEMPERATURE_UNKNOWN;
51            break;
52        }
53
54        value = temperature.currentValue == UNKNOWN_TEMPERATURE ? NAN :
55            temperature.currentValue;
56
57        android::os::Temperature thermal_svc_temp(value, type);
58        mThermalService->notifyThrottling(isThrottling, thermal_svc_temp);
59    } else {
60        ALOGE("IThermalService binder service not created, drop throttling event");
61    }
62    return Void();
63}
64
65}  // namespace implementation
66}  // namespace V1_1
67}  // namespace thermal
68}  // namespace hardware
69}  // namespace android
70