• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.hardware.usb;
18 
19 import android.annotation.IntDef;
20 import android.annotation.NonNull;
21 import android.annotation.Nullable;
22 import android.annotation.SystemApi;
23 import android.os.Parcel;
24 import android.os.Parcelable;
25 
26 import com.android.internal.annotations.Immutable;
27 
28 import java.lang.annotation.Retention;
29 import java.lang.annotation.RetentionPolicy;
30 
31 /**
32  * Describes the status of a USB port.
33  *
34  * @hide
35  */
36 @Immutable
37 @SystemApi
38 public final class UsbPortStatus implements Parcelable {
39     private static final String TAG = "UsbPortStatus";
40     private final int mCurrentMode;
41     private final @UsbPowerRole int mCurrentPowerRole;
42     private final @UsbDataRole int mCurrentDataRole;
43     private final int mSupportedRoleCombinations;
44     private final @ContaminantProtectionStatus int mContaminantProtectionStatus;
45     private final @ContaminantDetectionStatus int mContaminantDetectionStatus;
46     private final boolean mPowerTransferLimited;
47     private final @UsbDataStatus int mUsbDataStatus;
48     private final @PowerBrickConnectionStatus int mPowerBrickConnectionStatus;
49 
50     /**
51      * Power role: This USB port does not have a power role.
52      */
53     public static final int POWER_ROLE_NONE = 0;
54 
55     /**
56      * Power role: This USB port can act as a source (provide power).
57      */
58     public static final int POWER_ROLE_SOURCE = 1;
59 
60     /**
61      * Power role: This USB port can act as a sink (receive power).
62      */
63     public static final int POWER_ROLE_SINK = 2;
64 
65     @IntDef(prefix = { "POWER_ROLE_" }, value = {
66             POWER_ROLE_NONE,
67             POWER_ROLE_SOURCE,
68             POWER_ROLE_SINK
69     })
70     @Retention(RetentionPolicy.SOURCE)
71     @interface UsbPowerRole{}
72 
73     /**
74      * Power role: This USB port does not have a data role.
75      */
76     public static final int DATA_ROLE_NONE = 0;
77 
78     /**
79      * Data role: This USB port can act as a host (access data services).
80      */
81     public static final int DATA_ROLE_HOST = 1;
82 
83     /**
84      * Data role: This USB port can act as a device (offer data services).
85      */
86     public static final int DATA_ROLE_DEVICE = 2;
87 
88     @IntDef(prefix = { "DATA_ROLE_" }, value = {
89             DATA_ROLE_NONE,
90             DATA_ROLE_HOST,
91             DATA_ROLE_DEVICE
92     })
93     @Retention(RetentionPolicy.SOURCE)
94     @interface UsbDataRole{}
95 
96     /**
97      * There is currently nothing connected to this USB port.
98      */
99     public static final int MODE_NONE = 0;
100 
101     /**
102      * This USB port can act as an upstream facing port (device).
103      *
104      * <p> Implies that the port supports the {@link #POWER_ROLE_SINK} and
105      * {@link #DATA_ROLE_DEVICE} combination of roles (and possibly others as well).
106      */
107     public static final int MODE_UFP = 1 << 0;
108 
109     /**
110      * This USB port can act as a downstream facing port (host).
111      *
112      * <p> Implies that the port supports the {@link #POWER_ROLE_SOURCE} and
113      * {@link #DATA_ROLE_HOST} combination of roles (and possibly others as well).
114      */
115     public static final int MODE_DFP = 1 << 1;
116 
117     /**
118      * This USB port can act either as an downstream facing port (host) or as
119      * an upstream facing port (device).
120      *
121      * <p> Implies that the port supports the {@link #POWER_ROLE_SOURCE} and
122      * {@link #DATA_ROLE_HOST} combination of roles and the {@link #POWER_ROLE_SINK} and
123      * {@link #DATA_ROLE_DEVICE} combination of roles (and possibly others as well).
124      *
125      * @hide
126      */
127     public static final int MODE_DUAL = MODE_UFP | MODE_DFP;
128 
129     /**
130      * This USB port can support USB Type-C Audio accessory.
131      */
132     public static final int MODE_AUDIO_ACCESSORY = 1 << 2;
133 
134     /**
135      * This USB port can support USB Type-C debug accessory.
136      */
137     public static final int MODE_DEBUG_ACCESSORY = 1 << 3;
138 
139    /**
140      * Contaminant presence detection not supported by the device.
141      * @hide
142      */
143     public static final int CONTAMINANT_DETECTION_NOT_SUPPORTED = 0;
144 
145     /**
146      * Contaminant presence detection supported but disabled.
147      * @hide
148      */
149     public static final int CONTAMINANT_DETECTION_DISABLED = 1;
150 
151     /**
152      * Contaminant presence enabled but not detected.
153      * @hide
154      */
155     public static final int CONTAMINANT_DETECTION_NOT_DETECTED = 2;
156 
157     /**
158      * Contaminant presence enabled and detected.
159      * @hide
160      */
161     public static final int CONTAMINANT_DETECTION_DETECTED = 3;
162 
163     /**
164      * Contaminant protection - No action performed upon detection of
165      * contaminant presence.
166      * @hide
167      */
168     public static final int CONTAMINANT_PROTECTION_NONE = 0;
169 
170     /**
171      * Contaminant protection - Port is forced to sink upon detection of
172      * contaminant presence.
173      * @hide
174      */
175     public static final int CONTAMINANT_PROTECTION_SINK = 1 << 0;
176 
177     /**
178      * Contaminant protection - Port is forced to source upon detection of
179      * contaminant presence.
180      * @hide
181      */
182     public static final int CONTAMINANT_PROTECTION_SOURCE = 1 << 1;
183 
184     /**
185      * Contaminant protection - Port is disabled upon detection of
186      * contaminant presence.
187      * @hide
188      */
189     public static final int CONTAMINANT_PROTECTION_FORCE_DISABLE = 1 << 2;
190 
191     /**
192      * Contaminant protection - Port is disabled upon detection of
193      * contaminant presence.
194      * @hide
195      */
196     public static final int CONTAMINANT_PROTECTION_DISABLED = 1 << 3;
197 
198     /**
199      * USB data status is not known.
200      */
201     public static final int DATA_STATUS_UNKNOWN = 0;
202 
203     /**
204      * USB data is enabled.
205      */
206     public static final int DATA_STATUS_ENABLED = 1 << 0;
207 
208     /**
209      * USB data is disabled as the port is too hot.
210      */
211     public static final int DATA_STATUS_DISABLED_OVERHEAT = 1 << 1;
212 
213     /**
214      * USB data is disabled due to contaminated port.
215      */
216     public static final int DATA_STATUS_DISABLED_CONTAMINANT = 1 << 2;
217 
218     /**
219      * USB data is disabled due to docking event.
220      */
221     public static final int DATA_STATUS_DISABLED_DOCK = 1 << 3;
222 
223     /**
224      * USB data is disabled by
225      * {@link UsbPort#enableUsbData UsbPort.enableUsbData}.
226      */
227     public static final int DATA_STATUS_DISABLED_FORCE = 1 << 4;
228 
229     /**
230      * USB data is disabled for debug.
231      */
232     public static final int DATA_STATUS_DISABLED_DEBUG = 1 << 5;
233 
234     /**
235      * Unknown whether a power brick is connected.
236      */
237     public static final int POWER_BRICK_STATUS_UNKNOWN = 0;
238 
239     /**
240      * The connected device is a power brick.
241      */
242     public static final int POWER_BRICK_STATUS_CONNECTED = 1;
243 
244     /**
245      * The connected device is not power brick.
246      */
247     public static final int POWER_BRICK_STATUS_DISCONNECTED = 2;
248 
249     @IntDef(prefix = { "CONTAMINANT_DETECTION_" }, value = {
250             CONTAMINANT_DETECTION_NOT_SUPPORTED,
251             CONTAMINANT_DETECTION_DISABLED,
252             CONTAMINANT_DETECTION_NOT_DETECTED,
253             CONTAMINANT_DETECTION_DETECTED,
254     })
255     @Retention(RetentionPolicy.SOURCE)
256     @interface ContaminantDetectionStatus{}
257 
258     @IntDef(prefix = { "CONTAMINANT_PROTECTION_" }, flag = true, value = {
259             CONTAMINANT_PROTECTION_NONE,
260             CONTAMINANT_PROTECTION_SINK,
261             CONTAMINANT_PROTECTION_SOURCE,
262             CONTAMINANT_PROTECTION_FORCE_DISABLE,
263             CONTAMINANT_PROTECTION_DISABLED,
264     })
265     @Retention(RetentionPolicy.SOURCE)
266     @interface ContaminantProtectionStatus{}
267 
268     @IntDef(prefix = { "MODE_" }, value = {
269             MODE_NONE,
270             MODE_DFP,
271             MODE_UFP,
272             MODE_AUDIO_ACCESSORY,
273             MODE_DEBUG_ACCESSORY,
274     })
275     @Retention(RetentionPolicy.SOURCE)
276     @interface UsbPortMode{}
277 
278     /** @hide */
279     @IntDef(prefix = { "DATA_STATUS_" }, flag = true, value = {
280             DATA_STATUS_UNKNOWN,
281             DATA_STATUS_ENABLED,
282             DATA_STATUS_DISABLED_OVERHEAT,
283             DATA_STATUS_DISABLED_CONTAMINANT,
284             DATA_STATUS_DISABLED_DOCK,
285             DATA_STATUS_DISABLED_FORCE,
286             DATA_STATUS_DISABLED_DEBUG
287     })
288     @Retention(RetentionPolicy.SOURCE)
289     @interface UsbDataStatus{}
290 
291     /** @hide */
292     @IntDef(prefix = { "POWER_BRICK_STATUS_" }, value = {
293             POWER_BRICK_STATUS_UNKNOWN,
294             POWER_BRICK_STATUS_DISCONNECTED,
295             POWER_BRICK_STATUS_CONNECTED,
296     })
297     @Retention(RetentionPolicy.SOURCE)
298     @interface PowerBrickConnectionStatus{}
299 
300     /** @hide */
UsbPortStatus(int currentMode, int currentPowerRole, int currentDataRole, int supportedRoleCombinations, int contaminantProtectionStatus, int contaminantDetectionStatus, @UsbDataStatus int usbDataStatus, boolean powerTransferLimited, @PowerBrickConnectionStatus int powerBrickConnectionStatus)301     public UsbPortStatus(int currentMode, int currentPowerRole, int currentDataRole,
302             int supportedRoleCombinations, int contaminantProtectionStatus,
303             int contaminantDetectionStatus, @UsbDataStatus int usbDataStatus,
304             boolean powerTransferLimited,
305             @PowerBrickConnectionStatus int powerBrickConnectionStatus) {
306         mCurrentMode = currentMode;
307         mCurrentPowerRole = currentPowerRole;
308         mCurrentDataRole = currentDataRole;
309         mSupportedRoleCombinations = supportedRoleCombinations;
310         mContaminantProtectionStatus = contaminantProtectionStatus;
311         mContaminantDetectionStatus = contaminantDetectionStatus;
312         mUsbDataStatus = usbDataStatus;
313         mPowerTransferLimited = powerTransferLimited;
314         mPowerBrickConnectionStatus = powerBrickConnectionStatus;
315     }
316 
317     /** @hide */
UsbPortStatus(int currentMode, int currentPowerRole, int currentDataRole, int supportedRoleCombinations, int contaminantProtectionStatus, int contaminantDetectionStatus)318     public UsbPortStatus(int currentMode, int currentPowerRole, int currentDataRole,
319             int supportedRoleCombinations, int contaminantProtectionStatus,
320             int contaminantDetectionStatus) {
321         mCurrentMode = currentMode;
322         mCurrentPowerRole = currentPowerRole;
323         mCurrentDataRole = currentDataRole;
324         mSupportedRoleCombinations = supportedRoleCombinations;
325         mContaminantProtectionStatus = contaminantProtectionStatus;
326         mContaminantDetectionStatus = contaminantDetectionStatus;
327         mUsbDataStatus = DATA_STATUS_UNKNOWN;
328         mPowerBrickConnectionStatus = POWER_BRICK_STATUS_UNKNOWN;
329         mPowerTransferLimited = false;
330     }
331 
332     /**
333      * Returns true if there is anything connected to the port.
334      *
335      * @return {@code true} iff there is anything connected to the port.
336      */
isConnected()337     public boolean isConnected() {
338         return mCurrentMode != 0;
339     }
340 
341     /**
342      * Gets the current mode of the port.
343      *
344      * @return The current mode: {@link #MODE_DFP}, {@link #MODE_UFP},
345      * {@link #MODE_AUDIO_ACCESSORY}, {@link #MODE_DEBUG_ACCESSORY}, or {@link {@link #MODE_NONE} if
346      * nothing is connected.
347      */
getCurrentMode()348     public @UsbPortMode int getCurrentMode() {
349         return mCurrentMode;
350     }
351 
352     /**
353      * Gets the current power role of the port.
354      *
355      * @return The current power role: {@link #POWER_ROLE_SOURCE}, {@link #POWER_ROLE_SINK}, or
356      * {@link #POWER_ROLE_NONE} if nothing is connected.
357      */
getCurrentPowerRole()358     public @UsbPowerRole int getCurrentPowerRole() {
359         return mCurrentPowerRole;
360     }
361 
362     /**
363      * Gets the current data role of the port.
364      *
365      * @return The current data role: {@link #DATA_ROLE_HOST}, {@link #DATA_ROLE_DEVICE}, or
366      * {@link #DATA_ROLE_NONE} if nothing is connected.
367      */
getCurrentDataRole()368     public @UsbDataRole int getCurrentDataRole() {
369         return mCurrentDataRole;
370     }
371 
372     /**
373      * Returns true if the specified power and data role combination is supported
374      * given what is currently connected to the port.
375      *
376      * @param powerRole The power role to check: {@link #POWER_ROLE_SOURCE}  or
377      *                  {@link #POWER_ROLE_SINK}, or {@link #POWER_ROLE_NONE} if no power role.
378      * @param dataRole  The data role to check: either {@link #DATA_ROLE_HOST} or
379      *                  {@link #DATA_ROLE_DEVICE}, or {@link #DATA_ROLE_NONE} if no data role.
380      */
isRoleCombinationSupported(@sbPowerRole int powerRole, @UsbDataRole int dataRole)381     public boolean isRoleCombinationSupported(@UsbPowerRole int powerRole,
382             @UsbDataRole int dataRole) {
383         return (mSupportedRoleCombinations &
384                 UsbPort.combineRolesAsBit(powerRole, dataRole)) != 0;
385     }
386 
387     /**
388      * Get the supported role combinations.
389      */
getSupportedRoleCombinations()390     public int getSupportedRoleCombinations() {
391         return mSupportedRoleCombinations;
392     }
393 
394     /**
395      * Returns contaminant detection status.
396      *
397      * @hide
398      */
getContaminantDetectionStatus()399     public @ContaminantDetectionStatus int getContaminantDetectionStatus() {
400         return mContaminantDetectionStatus;
401     }
402 
403     /**
404      * Returns contamiant protection status.
405      *
406      * @hide
407      */
getContaminantProtectionStatus()408     public @ContaminantProtectionStatus int getContaminantProtectionStatus() {
409         return mContaminantProtectionStatus;
410     }
411 
412     /**
413      * Returns UsbData status.
414      *
415      * @return Current USB data status of the port with one or more of the following values
416      *         {@link #DATA_STATUS_UNKNOWN}, {@link #DATA_STATUS_ENABLED},
417      *         {@link #DATA_STATUS_DISABLED_OVERHEAT}, {@link #DATA_STATUS_DISABLED_CONTAMINANT},
418      *         {@link #DATA_STATUS_DISABLED_DOCK}, {@link #DATA_STATUS_DISABLED_FORCE},
419      *         {@link #DATA_STATUS_DISABLED_DEBUG}
420      */
getUsbDataStatus()421     public @UsbDataStatus int getUsbDataStatus() {
422         return mUsbDataStatus;
423     }
424 
425     /**
426      * Returns whether power transfer is limited.
427      *
428      * @return true when power transfer is limited.
429      *         false otherwise.
430      */
isPowerTransferLimited()431     public boolean isPowerTransferLimited() {
432         return mPowerTransferLimited;
433     }
434 
435     /**
436      * Returns the connection status of the power brick.
437      *
438      * @return {@link #POWER_BRICK_STATUS_UNKNOWN}
439      *         or {@link #POWER_BRICK_STATUS_CONNECTED}
440      *         or {@link #POWER_BRICK_STATUS_DISCONNECTED}
441      */
getPowerBrickConnectionStatus()442     public @PowerBrickConnectionStatus int getPowerBrickConnectionStatus() {
443         return mPowerBrickConnectionStatus;
444     }
445 
446     @NonNull
447     @Override
toString()448     public String toString() {
449         return "UsbPortStatus{connected=" + isConnected()
450                 + ", currentMode=" + UsbPort.modeToString(mCurrentMode)
451                 + ", currentPowerRole=" + UsbPort.powerRoleToString(mCurrentPowerRole)
452                 + ", currentDataRole=" + UsbPort.dataRoleToString(mCurrentDataRole)
453                 + ", supportedRoleCombinations="
454                         + UsbPort.roleCombinationsToString(mSupportedRoleCombinations)
455                 + ", contaminantDetectionStatus="
456                         + getContaminantDetectionStatus()
457                 + ", contaminantProtectionStatus="
458                         + getContaminantProtectionStatus()
459                 + ", usbDataStatus="
460                         + UsbPort.usbDataStatusToString(getUsbDataStatus())
461                 + ", isPowerTransferLimited="
462                         + isPowerTransferLimited()
463                 +", powerBrickConnectionStatus="
464                         + UsbPort
465                             .powerBrickConnectionStatusToString(getPowerBrickConnectionStatus())
466                 + "}";
467     }
468 
469     @Override
describeContents()470     public int describeContents() {
471         return 0;
472     }
473 
474     @Override
writeToParcel(Parcel dest, int flags)475     public void writeToParcel(Parcel dest, int flags) {
476         dest.writeInt(mCurrentMode);
477         dest.writeInt(mCurrentPowerRole);
478         dest.writeInt(mCurrentDataRole);
479         dest.writeInt(mSupportedRoleCombinations);
480         dest.writeInt(mContaminantProtectionStatus);
481         dest.writeInt(mContaminantDetectionStatus);
482         dest.writeInt(mUsbDataStatus);
483         dest.writeBoolean(mPowerTransferLimited);
484         dest.writeInt(mPowerBrickConnectionStatus);
485     }
486 
487     public static final @NonNull Parcelable.Creator<UsbPortStatus> CREATOR =
488             new Parcelable.Creator<UsbPortStatus>() {
489         @Override
490         public UsbPortStatus createFromParcel(Parcel in) {
491             int currentMode = in.readInt();
492             int currentPowerRole = in.readInt();
493             int currentDataRole = in.readInt();
494             int supportedRoleCombinations = in.readInt();
495             int contaminantProtectionStatus = in.readInt();
496             int contaminantDetectionStatus = in.readInt();
497             int usbDataStatus = in.readInt();
498             boolean powerTransferLimited = in.readBoolean();
499             int powerBrickConnectionStatus = in.readInt();
500             return new UsbPortStatus(currentMode, currentPowerRole, currentDataRole,
501                     supportedRoleCombinations, contaminantProtectionStatus,
502                     contaminantDetectionStatus, usbDataStatus, powerTransferLimited,
503                     powerBrickConnectionStatus);
504         }
505 
506         @Override
507         public UsbPortStatus[] newArray(int size) {
508             return new UsbPortStatus[size];
509         }
510     };
511 
512     /**
513      * Builder is used to create {@link UsbPortStatus} objects.
514      *
515      * @hide
516      */
517     public static final class Builder {
518         private @UsbPortMode int mCurrentMode;
519         private @UsbPowerRole int mCurrentPowerRole;
520         private @UsbDataRole int mCurrentDataRole;
521         private int mSupportedRoleCombinations;
522         private @ContaminantProtectionStatus int mContaminantProtectionStatus;
523         private @ContaminantDetectionStatus int mContaminantDetectionStatus;
524         private boolean mPowerTransferLimited;
525         private @UsbDataStatus int mUsbDataStatus;
526         private @PowerBrickConnectionStatus int mPowerBrickConnectionStatus;
527 
Builder()528         public Builder() {
529             mCurrentMode = MODE_NONE;
530             mCurrentPowerRole = POWER_ROLE_NONE;
531             mCurrentDataRole = DATA_ROLE_NONE;
532             mContaminantProtectionStatus = CONTAMINANT_PROTECTION_NONE;
533             mContaminantDetectionStatus = CONTAMINANT_DETECTION_NOT_SUPPORTED;
534             mUsbDataStatus = DATA_STATUS_UNKNOWN;
535             mPowerBrickConnectionStatus = POWER_BRICK_STATUS_UNKNOWN;
536         }
537 
538         /**
539          * Sets the current mode of {@link UsbPortStatus}
540          *
541          * @return Instance of {@link Builder}
542          */
543         @NonNull
setCurrentMode(@sbPortMode int currentMode)544         public Builder setCurrentMode(@UsbPortMode int currentMode) {
545             mCurrentMode = currentMode;
546             return this;
547         }
548 
549         /**
550          * Sets the current power role and data role of {@link UsbPortStatus}
551          *
552          * @return Instance of {@link Builder}
553          */
554         @NonNull
setCurrentRoles(@sbPowerRole int currentPowerRole, @UsbDataRole int currentDataRole)555         public Builder setCurrentRoles(@UsbPowerRole int currentPowerRole,
556                 @UsbDataRole int currentDataRole) {
557             mCurrentPowerRole = currentPowerRole;
558             mCurrentDataRole = currentDataRole;
559             return this;
560         }
561 
562         /**
563          * Sets supported role combinations of {@link UsbPortStatus}
564          *
565          * @return Instance of {@link Builder}
566          */
567         @NonNull
setSupportedRoleCombinations(int supportedRoleCombinations)568         public Builder setSupportedRoleCombinations(int supportedRoleCombinations) {
569             mSupportedRoleCombinations = supportedRoleCombinations;
570             return this;
571         }
572 
573         /**
574          * Sets current contaminant status of {@link UsbPortStatus}
575          *
576          * @return Instance of {@link Builder}
577          */
578         @NonNull
setContaminantStatus( @ontaminantProtectionStatus int contaminantProtectionStatus, @ContaminantDetectionStatus int contaminantDetectionStatus)579         public Builder setContaminantStatus(
580                 @ContaminantProtectionStatus int contaminantProtectionStatus,
581                 @ContaminantDetectionStatus int contaminantDetectionStatus) {
582             mContaminantProtectionStatus = contaminantProtectionStatus;
583             mContaminantDetectionStatus = contaminantDetectionStatus;
584             return this;
585         }
586 
587         /**
588          * Sets power limit power transfer of {@link UsbPortStatus}
589          *
590          * @return Instance of {@link Builder}
591          */
592         @NonNull
setPowerTransferLimited(boolean powerTransferLimited)593         public Builder setPowerTransferLimited(boolean powerTransferLimited) {
594             mPowerTransferLimited = powerTransferLimited;
595             return this;
596         }
597 
598         /**
599          * Sets the USB data status of {@link UsbPortStatus}
600          *
601          * @return Instance of {@link Builder}
602          */
603         @NonNull
setUsbDataStatus(@sbDataStatus int usbDataStatus)604         public Builder setUsbDataStatus(@UsbDataStatus int usbDataStatus) {
605             mUsbDataStatus = usbDataStatus;
606             return this;
607         }
608 
609         /**
610          * Sets the power brick connection status of {@link UsbPortStatus}
611          *
612          * @return Instance of {@link Builder}
613          */
614         @NonNull
setPowerBrickConnectionStatus( @owerBrickConnectionStatus int powerBrickConnectionStatus)615         public Builder setPowerBrickConnectionStatus(
616                 @PowerBrickConnectionStatus int powerBrickConnectionStatus) {
617             mPowerBrickConnectionStatus = powerBrickConnectionStatus;
618             return this;
619         }
620 
621         /**
622          * Creates the {@link UsbPortStatus} object.
623          */
624         @NonNull
build()625         public UsbPortStatus build() {
626             UsbPortStatus status = new UsbPortStatus(mCurrentMode, mCurrentPowerRole,
627                     mCurrentDataRole, mSupportedRoleCombinations, mContaminantProtectionStatus,
628                     mContaminantDetectionStatus, mUsbDataStatus, mPowerTransferLimited,
629                     mPowerBrickConnectionStatus);
630             return status;
631         }
632     };
633 }
634