Merge "Thermalmanagerservice: Add shell interface to inject temperatures" am: 21877c39e4 am: 4057e05e7e

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2620330

Change-Id: Ie7d675700d1004d7eefc7c8f1c72eaef04425419
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Michael Wright
2023-06-09 17:43:34 +00:00
committed by Automerger Merge Worker

View File

@@ -547,6 +547,8 @@ public class ThermalManagerService extends SystemService {
@Override
public int onCommand(String cmd) {
switch(cmd != null ? cmd : "") {
case "inject-temperature":
return runInjectTemperature();
case "override-status":
return runOverrideStatus();
case "reset":
@@ -569,6 +571,95 @@ public class ThermalManagerService extends SystemService {
}
}
private int runInjectTemperature() {
final long token = Binder.clearCallingIdentity();
try {
final PrintWriter pw = getOutPrintWriter();
int type;
String typeName = getNextArgRequired();
switch (typeName.toUpperCase()) {
case "UNKNOWN":
type = Temperature.TYPE_UNKNOWN;
break;
case "CPU":
type = Temperature.TYPE_CPU;
break;
case "GPU":
type = Temperature.TYPE_GPU;
break;
case "BATTERY":
type = Temperature.TYPE_BATTERY;
break;
case "SKIN":
type = Temperature.TYPE_SKIN;
break;
case "USB_PORT":
type = Temperature.TYPE_USB_PORT;
break;
case "POWER_AMPLIFIER":
type = Temperature.TYPE_POWER_AMPLIFIER;
break;
case "BCL_VOLTAGE":
type = Temperature.TYPE_BCL_VOLTAGE;
break;
case "BCL_CURRENT":
type = Temperature.TYPE_BCL_CURRENT;
break;
case "BCL_PERCENTAGE":
type = Temperature.TYPE_BCL_PERCENTAGE;
break;
case "NPU":
type = Temperature.TYPE_NPU;
break;
default:
pw.println("Invalid temperature type: " + typeName);
return -1;
}
int throttle;
String throttleName = getNextArgRequired();
switch (throttleName.toUpperCase()) {
case "NONE":
throttle = Temperature.THROTTLING_NONE;
break;
case "LIGHT":
throttle = Temperature.THROTTLING_LIGHT;
break;
case "MODERATE":
throttle = Temperature.THROTTLING_MODERATE;
break;
case "SEVERE":
throttle = Temperature.THROTTLING_SEVERE;
break;
case "CRITICAL":
throttle = Temperature.THROTTLING_CRITICAL;
break;
case "EMERGENCY":
throttle = Temperature.THROTTLING_EMERGENCY;
break;
case "SHUTDOWN":
throttle = Temperature.THROTTLING_SHUTDOWN;
break;
default:
pw.println("Invalid throttle status: " + throttleName);
return -1;
}
String name = getNextArgRequired();
float value = 28.0f;
try {
String valueStr = getNextArg();
if (valueStr != null) value = Float.parseFloat(valueStr);
} catch (RuntimeException ex) {
pw.println("Error: " + ex.toString());
return -1;
}
onTemperatureChanged(new Temperature(value, type, name, throttle), true);
return 0;
} finally {
Binder.restoreCallingIdentity(token);
}
}
private int runOverrideStatus() {
final long token = Binder.clearCallingIdentity();
try {
@@ -601,6 +692,9 @@ public class ThermalManagerService extends SystemService {
pw.println(" help");
pw.println(" Print this help text.");
pw.println("");
pw.println(" inject-temperature TYPE STATUS NAME [VALUE]");
pw.println(" injects a new temperature sample for the specified device.");
pw.println(" type and status strings follow the names in android.os.Temperature.");
pw.println(" override-status STATUS");
pw.println(" sets and locks the thermal status of the device to STATUS.");
pw.println(" status code is defined in android.os.Temperature.");