Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68f03b10 authored by Michael Wright's avatar Michael Wright Committed by Automerger Merge Worker
Browse files

Merge "Thermalmanagerservice: Add shell interface to inject temperatures" am:...

Merge "Thermalmanagerservice: Add shell interface to inject temperatures" am: 21877c39 am: 4057e05e am: ce720ea0

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



Change-Id: Ia4e08d5a1c8edf8d0626a7ca749b79809ebf2f65
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 1e20e2bb ce720ea0
Loading
Loading
Loading
Loading
+94 −0
Original line number Diff line number Diff line
@@ -589,6 +589,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":
@@ -611,6 +613,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 {
@@ -643,6 +734,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.");