| #define LOG_TAG "android.hardware.thermal.thermalcallback@1.1-impl" |
| #include <log/log.h> |
| |
| #include "ThermalCallback.h" |
| #include "services/thermalservice/ThermalService.h" |
| #include <math.h> |
| #include <android/os/Temperature.h> |
| #include <hardware/thermal.h> |
| |
| namespace android { |
| namespace hardware { |
| namespace thermal { |
| namespace V1_1 { |
| namespace implementation { |
| |
| using ::android::os::ThermalService; |
| using ::android::hardware::thermal::V1_0::TemperatureType; |
| |
| // Register a binder ThermalService object for sending events |
| void ThermalCallback::registerThermalService(sp<ThermalService> thermalService) |
| { |
| mThermalService = thermalService; |
| } |
| |
| // Methods from IThermalCallback::V1_1 follow. |
| Return<void> ThermalCallback::notifyThrottling( |
| bool isThrottling, |
| const android::hardware::thermal::V1_0::Temperature& temperature) { |
| |
| // Convert HIDL IThermal Temperature to binder IThermalService Temperature. |
| if (mThermalService != nullptr) { |
| float value = NAN; |
| int type = DEVICE_TEMPERATURE_UNKNOWN; |
| |
| switch(temperature.type) { |
| case TemperatureType::CPU: |
| type = DEVICE_TEMPERATURE_CPU; |
| break; |
| case TemperatureType::GPU: |
| type = DEVICE_TEMPERATURE_GPU; |
| break; |
| case TemperatureType::BATTERY: |
| type = DEVICE_TEMPERATURE_BATTERY; |
| break; |
| case TemperatureType::SKIN: |
| type = DEVICE_TEMPERATURE_SKIN; |
| break; |
| case TemperatureType::UNKNOWN: |
| default: |
| type = DEVICE_TEMPERATURE_UNKNOWN; |
| break; |
| } |
| |
| value = temperature.currentValue == UNKNOWN_TEMPERATURE ? NAN : |
| temperature.currentValue; |
| |
| android::os::Temperature thermal_svc_temp(value, type); |
| mThermalService->notifyThrottling(isThrottling, thermal_svc_temp); |
| } else { |
| ALOGE("IThermalService binder service not created, drop throttling event"); |
| } |
| return Void(); |
| } |
| |
| } // namespace implementation |
| } // namespace V1_1 |
| } // namespace thermal |
| } // namespace hardware |
| } // namespace android |