thermal: add getUndefinedTemperature function.
Bug: 34107726
Test: cts, vts
Change-Id: I8a3794158fbc0c9518a26f4616263aa464b43924
diff --git a/thermal/1.0/IThermal.hal b/thermal/1.0/IThermal.hal
index e5f70cb..076b697 100644
--- a/thermal/1.0/IThermal.hal
+++ b/thermal/1.0/IThermal.hal
@@ -75,4 +75,19 @@
getCoolingDevices()
generates (ThermalStatus status, vec<CoolingDevice> devices);
+ /* Retrieves an undefined temperature value.
+ *
+ * @return status Status of the operation. If status code is FAILURE,
+ * the status.debugMessage must be populated with the human-readable
+ * error message.
+ * @return undefinedTemperature returns an undefined temperature value if
+ * status code is SUCCESS. Undefined temperature value is an
+ * unreachable constant device temperature value for HAL.
+ *
+ */
+ @callflow(next={"*"})
+ @entry
+ @exit
+ getUndefinedTemperature()
+ generates (ThermalStatus status, float undefinedTemperature);
};
diff --git a/thermal/1.0/default/Thermal.cpp b/thermal/1.0/default/Thermal.cpp
index 8a8ad0a..5bc313d 100644
--- a/thermal/1.0/default/Thermal.cpp
+++ b/thermal/1.0/default/Thermal.cpp
@@ -169,6 +169,13 @@
return Void();
}
+Return<void> Thermal::getUndefinedTemperature(getUndefinedTemperature_cb _hidl_cb) {
+ ThermalStatus status;
+ status.code = ThermalStatusCode::SUCCESS;
+ _hidl_cb(status, UNKNOWN_TEMPERATURE);
+ return Void();
+}
+
IThermal* HIDL_FETCH_IThermal(const char* /* name */) {
thermal_module_t* module;
status_t err = hw_get_module(THERMAL_HARDWARE_MODULE_ID,
diff --git a/thermal/1.0/default/Thermal.h b/thermal/1.0/default/Thermal.h
index 2e06289..eec0ff5 100644
--- a/thermal/1.0/default/Thermal.h
+++ b/thermal/1.0/default/Thermal.h
@@ -45,6 +45,7 @@
Return<void> getTemperatures(getTemperatures_cb _hidl_cb) override;
Return<void> getCpuUsages(getCpuUsages_cb _hidl_cb) override;
Return<void> getCoolingDevices(getCoolingDevices_cb _hidl_cb) override;
+ Return<void> getUndefinedTemperature(getUndefinedTemperature_cb _hidl_cb) override;
private:
thermal_module_t* mModule;
};
diff --git a/thermal/1.0/types.hal b/thermal/1.0/types.hal
index 8864f43..30cfdd9 100644
--- a/thermal/1.0/types.hal
+++ b/thermal/1.0/types.hal
@@ -46,27 +46,27 @@
/**
* Current temperature in Celsius. If not available set by HAL to
- * UNKNOWN_TEMPERATURE.
+ * undefined temperature value.
* Current temperature can be in any units if type=UNKNOWN.
*/
float currentValue;
/**
* Throttling temperature constant for this temperature.
- * If not available, set by HAL to UNKNOWN_TEMPERATURE.
+ * If not available, set by HAL to undefined temperature value.
*/
float throttlingThreshold;
/**
* Shutdown temperature constant for this temperature.
- * If not available, set by HAL to UNKNOWN_TEMPERATURE.
+ * If not available, set by HAL to undefined temperature value.
*/
float shutdownThreshold;
/**
* Threshold temperature above which the VR mode clockrate minimums cannot
* be maintained for this device.
- * If not available, set by HAL to UNKNOWN_TEMPERATURE.
+ * If not available, set by HAL to undefined temperature value.
*/
float vrThrottlingThreshold;
@@ -135,7 +135,3 @@
*/
string debugMessage;
};
-
-/**
- * TODO(pbond): add float constant UNDEFINED_TEMPERATURE.
- */
diff --git a/thermal/1.0/vts/Thermal.vts b/thermal/1.0/vts/Thermal.vts
index e76d943..d8cc670 100644
--- a/thermal/1.0/vts/Thermal.vts
+++ b/thermal/1.0/vts/Thermal.vts
@@ -79,4 +79,25 @@
}
}
+ api: {
+ name: "getUndefinedTemperature"
+ return_type_hidl: {
+ type: TYPE_STRUCT
+ predefined_type: "::android::hardware::thermal::V1_0::ThermalStatus"
+ }
+ return_type_hidl: {
+ type: TYPE_SCALAR
+ scalar_type: "float_t"
+ }
+ callflow: {
+ next: "*"
+ }
+ callflow: {
+ entry: true
+ }
+ callflow: {
+ exit: true
+ }
+ }
+
}
diff --git a/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp b/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp
index 8a5ea2c..6eb6269 100644
--- a/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp
+++ b/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp
@@ -43,8 +43,6 @@
#define THERMAL_SERVICE_NAME "thermal"
#define MONITORING_OPERATION_NUMBER 10
-#define UNDEFINED_TEMPERATURE (-FLT_MAX)
-
#define MAX_DEVICE_TEMPERATURE 200
#define MAX_FAN_SPEED 20000
@@ -56,6 +54,17 @@
ASSERT_NE(thermal_, nullptr);
baseSize_ = 0;
names_.clear();
+
+ {
+ float undefined_temperature;
+ thermal_->getUndefinedTemperature(
+ [&undefined_temperature](ThermalStatus status, float temperature) {
+ EXPECT_EQ(ThermalStatusCode::SUCCESS, status.code);
+ EXPECT_LT(MAX_DEVICE_TEMPERATURE, std::abs(undefined_temperature));
+ undefined_temperature = temperature;
+ });
+ undefined_temperature_ = undefined_temperature;
+ }
}
virtual void TearDown() override {}
@@ -127,21 +136,20 @@
// .currentValue of known type is in Celsius and must be reasonable.
EXPECT_TRUE(temperature.type == TemperatureType::UNKNOWN ||
std::abs(temperature.currentValue) < MAX_DEVICE_TEMPERATURE ||
- temperature.currentValue == UNDEFINED_TEMPERATURE);
+ temperature.currentValue == undefined_temperature_);
// .name must not be empty.
EXPECT_LT(0u, temperature.name.size());
// .currentValue must not exceed .shutdwonThreshold if defined.
EXPECT_TRUE(temperature.currentValue < temperature.shutdownThreshold ||
- temperature.currentValue == UNDEFINED_TEMPERATURE ||
- temperature.shutdownThreshold == UNDEFINED_TEMPERATURE);
+ temperature.currentValue == undefined_temperature_ ||
+ temperature.shutdownThreshold == undefined_temperature_);
// .throttlingThreshold must not exceed .shutdownThreshold if defined.
- EXPECT_TRUE(temperature.throttlingThreshold <
- temperature.shutdownThreshold ||
- temperature.throttlingThreshold == UNDEFINED_TEMPERATURE ||
- temperature.shutdownThreshold == UNDEFINED_TEMPERATURE);
+ EXPECT_TRUE(temperature.throttlingThreshold < temperature.shutdownThreshold ||
+ temperature.throttlingThreshold == undefined_temperature_ ||
+ temperature.shutdownThreshold == undefined_temperature_);
}
// Check validity of CPU usage returned by Thermal HAL.
@@ -164,6 +172,7 @@
size_t baseSize_;
std::vector<hidl_string> names_;
+ float undefined_temperature_;
};
// Sanity test for Thermal::getTemperatures().