From 6ed805f8a0e793900125d047f1fe4f68ec5a0bbe Mon Sep 17 00:00:00 2001 From: RD Babiera Date: Mon, 23 Jan 2023 18:45:10 +0000 Subject: [PATCH] Add hpd and link training status to usb frameworks Adds hpd and linkTrainingStatus fields to DisplayPortAltModeInfo. Changes dumpsys simulation to update new fields, and defines expected types for all DisplayPortAltModeInfo fields. Test: manually check field population using simulator Bug: 253534975 Change-Id: Icd49fb468bbc186ae44f9b8169cb8045997390c0 --- .../hardware/usb/DisplayPortAltModeInfo.java | 19 ++++++++++++++++-- .../android/server/usb/UsbPortManager.java | 6 ++++-- .../com/android/server/usb/UsbService.java | 20 +++++++++++++++---- .../server/usb/hal/port/UsbPortAidl.java | 4 +++- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/core/java/android/hardware/usb/DisplayPortAltModeInfo.java b/core/java/android/hardware/usb/DisplayPortAltModeInfo.java index febc643339930..ef2fefca244a5 100644 --- a/core/java/android/hardware/usb/DisplayPortAltModeInfo.java +++ b/core/java/android/hardware/usb/DisplayPortAltModeInfo.java @@ -39,6 +39,8 @@ public final class DisplayPortAltModeInfo implements Parcelable { private final @DisplayPortAltModeStatus int mPartnerSinkStatus; private final @DisplayPortAltModeStatus int mCableStatus; private final int mNumLanes; + private final boolean mHpd; + private final int mLinkTrainingStatus; /** * Port Partners: @@ -103,14 +105,18 @@ public final class DisplayPortAltModeInfo implements Parcelable { mPartnerSinkStatus = DISPLAYPORT_ALT_MODE_STATUS_UNKNOWN; mCableStatus = DISPLAYPORT_ALT_MODE_STATUS_UNKNOWN; mNumLanes = 0; + mHpd = false; + mLinkTrainingStatus = 0; } /** @hide */ public DisplayPortAltModeInfo(int partnerSinkStatus, int cableStatus, - int numLanes) { + int numLanes, boolean hpd, int linkTrainingStatus) { mPartnerSinkStatus = partnerSinkStatus; mCableStatus = cableStatus; mNumLanes = numLanes; + mHpd = hpd; + mLinkTrainingStatus = linkTrainingStatus; } /** @@ -155,6 +161,8 @@ public final class DisplayPortAltModeInfo implements Parcelable { dest.writeInt(mPartnerSinkStatus); dest.writeInt(mCableStatus); dest.writeInt(mNumLanes); + dest.writeBoolean(mHpd); + dest.writeInt(mLinkTrainingStatus); } @NonNull @@ -166,6 +174,10 @@ public final class DisplayPortAltModeInfo implements Parcelable { + mCableStatus + " numLanes=" + mNumLanes + + " hpd=" + + mHpd + + " linkTrainingStatus=" + + mLinkTrainingStatus + "}"; } @@ -195,7 +207,10 @@ public final class DisplayPortAltModeInfo implements Parcelable { int partnerSinkStatus = in.readInt(); int cableStatus = in.readInt(); int numLanes = in.readInt(); - return new DisplayPortAltModeInfo(partnerSinkStatus, cableStatus, numLanes); + boolean hpd = in.readBoolean(); + int linkTrainingStatus = in.readInt(); + return new DisplayPortAltModeInfo(partnerSinkStatus, cableStatus, numLanes, hpd, + linkTrainingStatus); } @Override diff --git a/services/usb/java/com/android/server/usb/UsbPortManager.java b/services/usb/java/com/android/server/usb/UsbPortManager.java index 28d726e480884..1a1af3b929d11 100644 --- a/services/usb/java/com/android/server/usb/UsbPortManager.java +++ b/services/usb/java/com/android/server/usb/UsbPortManager.java @@ -866,7 +866,8 @@ public class UsbPortManager implements IBinder.DeathRecipient { public void simulateDisplayPortAltModeInfo(String portId, int partnerSinkStatus, - int cableStatus, int numLanes, IndentingPrintWriter pw) { + int cableStatus, int numLanes, boolean hpd, int linkTrainingStatus, + IndentingPrintWriter pw) { synchronized (mLock) { final RawPortInfo portInfo = mSimulatedPorts.get(portId); if (portInfo == null) { @@ -875,7 +876,8 @@ public class UsbPortManager implements IBinder.DeathRecipient { } DisplayPortAltModeInfo displayPortAltModeInfo = - new DisplayPortAltModeInfo(partnerSinkStatus, cableStatus, numLanes); + new DisplayPortAltModeInfo(partnerSinkStatus, cableStatus, numLanes, hpd, + linkTrainingStatus); portInfo.displayPortAltModeInfo = displayPortAltModeInfo; pw.println("Simulating DisplayPort Info: " + displayPortAltModeInfo); updatePortsLocked(pw, null); diff --git a/services/usb/java/com/android/server/usb/UsbService.java b/services/usb/java/com/android/server/usb/UsbService.java index 7d84222d55a45..0aa17157934dc 100644 --- a/services/usb/java/com/android/server/usb/UsbService.java +++ b/services/usb/java/com/android/server/usb/UsbService.java @@ -1169,14 +1169,17 @@ public class UsbService extends IUsbManager.Stub { mPortManager.dump(new DualDumpOutputStream(new IndentingPrintWriter(pw, " ")), "", 0); } - } else if ("set-displayport-status".equals(args[0]) && args.length == 5) { + } else if ("set-displayport-status".equals(args[0]) && args.length == 7) { final String portId = args[1]; final int partnerSinkStatus = Integer.parseInt(args[2]); final int cableStatus = Integer.parseInt(args[3]); final int displayPortNumLanes = Integer.parseInt(args[4]); + final boolean hpd = Boolean.parseBoolean(args[5]); + final int linkTrainingStatus = Integer.parseInt(args[6]); if (mPortManager != null) { mPortManager.simulateDisplayPortAltModeInfo(portId, - partnerSinkStatus, cableStatus, displayPortNumLanes, pw); + partnerSinkStatus, cableStatus, displayPortNumLanes, + hpd, linkTrainingStatus, pw); pw.println(); mPortManager.dump(new DualDumpOutputStream(new IndentingPrintWriter(pw, " ")), "", 0); @@ -1187,7 +1190,10 @@ public class UsbService extends IUsbManager.Stub { mPortManager.simulateDisplayPortAltModeInfo(portId, DisplayPortAltModeInfo.DISPLAYPORT_ALT_MODE_STATUS_UNKNOWN, DisplayPortAltModeInfo.DISPLAYPORT_ALT_MODE_STATUS_UNKNOWN, - 0, pw); + 0, + false, + 0, + pw); pw.println(); mPortManager.dump(new DualDumpOutputStream(new IndentingPrintWriter(pw, " ")), "", 0); @@ -1259,7 +1265,13 @@ public class UsbService extends IUsbManager.Stub { pw.println("Example simulate DisplayPort Alt Mode Changes:"); pw.println(" dumpsys usb add-port \"matrix\" dual --displayport"); pw.println(" dumpsys usb set-displayport-status \"matrix\" " - + " "); + + " "); + pw.println("The required fields are as followed:"); + pw.println(" : type DisplayPortAltModeStatus"); + pw.println(" : type DisplayPortAltModeStatus"); + pw.println(" : type int, expected 0, 2, or 4"); + pw.println(" : type boolean, expected true or false"); + pw.println(" : type int with range [0,2]"); pw.println(" dumpsys usb reset-displayport-status \"matrix\""); pw.println("reset-displayport-status can also be used in order to set"); pw.println("the DisplayPortInfo to default values."); diff --git a/services/usb/java/com/android/server/usb/hal/port/UsbPortAidl.java b/services/usb/java/com/android/server/usb/hal/port/UsbPortAidl.java index b9ccacea7aa48..c7a7a9bbe59ed 100644 --- a/services/usb/java/com/android/server/usb/hal/port/UsbPortAidl.java +++ b/services/usb/java/com/android/server/usb/hal/port/UsbPortAidl.java @@ -639,7 +639,9 @@ public final class UsbPortAidl implements UsbPortHal { altModeData.getDisplayPortAltModeData(); return new DisplayPortAltModeInfo(displayPortData.partnerSinkStatus, displayPortData.cableStatus, - toDisplayPortAltModeNumLanesInt(displayPortData.pinAssignment)); + toDisplayPortAltModeNumLanesInt(displayPortData.pinAssignment), + displayPortData.hpd, + displayPortData.linkTrainingStatus); } } return null;