Razer手机目前是为数不多的支持DP over USB-C的设备之一。
在使用USB-C线连接Razer手机和外置显示器后,Razer手机可以成功识别并输出显示内容。adb日志如下。
为方便阅读,简化了部分内容:
01:51:51.124 I EventLogSendingHelper: Sending log events.
01:51:54.037 E [email protected]: uevent received SUBSYSTEM=dual_role_usb
//检测到外部USB设备接入,双角色模式
01:51:54.038 I [email protected]: otg_default
//默认OTG模式
01:51:54.040 I [email protected]: canChangeMode: 1 canChagedata: 0 canChangePower:0
//可以更改模式,不可以更改数据,不可以更改电源
01:51:54.041 I UsbPortManager: ClientCallback: otg_default
//发生了回调
01:51:54.041 I UsbPortManager: USB port changed: port=UsbPort{id=otg_default, supportedModes=dual}, status=UsbPortStatus{connected=true, currentMode=dfp, currentPowerRole=source, currentDataRole=host, supportedRoleCombinations=[source:host, sink:device]}, canChangeMode=true, canChangePowerRole=false, canChangeDataRole=false
//对USB设备的初步识别
//DFP(Downstraem Facing Port)HOST模式,电源角色:对外供电(source而不是drain),数据角色:HOST
//简言之:手机是HOST,外置显示器是DEVICE
//下面几行不相关,可以忽略
01:51:54.220 V LocSvc_HIDL_Subscription_jni: battery_level_update
01:51:54.220 V LocSvc_HIDL_Subscription_jni: [battery_level_update][943] [HC] =>> [HS]
01:51:54.221 D HeadsetStateMachine: Disconnected process message: 10, size: 0
01:51:54.221 D HeadsetStateMachine: Enter processIntentBatteryChanged()
01:51:54.221 D QtiCarrierConfigHelper: WARNING, no carrier configs on phone Id: 0
01:51:54.221 D HeadsetStateMachine: Exit processIntentBatteryChanged()
01:51:54.221 D HeadsetStateMachine: Exit Disconnected processMessage()
01:51:54.222 V LocSvc_HIDL_IzatSubscription: [batteryLevelUpdate][782] [HS] <<<<= [HC]
01:51:54.223 V LocSvc_HIDL_Subscription_jni: Exit Result 0
//以上忽略
//按照USB协议,USB设备被reset
01:51:54.276 E [email protected]: uevent received SUBSYSTEM=dual_role_usb
01:51:54.276 I [email protected]: otg_default
01:51:54.277 I [email protected]: canChangeMode: 1 canChagedata: 1 canChangePower:1
//可以更改模式,可以更改数据,可以更改电源
//相比reset前,设备拿到了更多权限
01:51:54.278 I UsbPortManager: ClientCallback: otg_default
01:51:54.278 I UsbPortManager: USB port changed: port=UsbPort{id=otg_default, supportedModes=dual}, status=UsbPortStatus{connected=true, currentMode=dfp, currentPowerRole=source, currentDataRole=host, supportedRoleCombinations=[source:host, source:device, sink:host, sink:device]}, canChangeMode=true, canChangePowerRole=true, canChangeDataRole=true
//DFP(Downstraem Facing Port)HOST模式,电源角色:对外供电(source而不是drain),数据角色:HOST
//简言之:手机是HOST,外置显示器是DEVICE
//到这里应该已经完成了USB设备的完整识别过程!!!
01:51:55.293 D UsbDeviceManager: push notification:USB supplying power to attached device
//推送通知:手机对设备供电
//以下不相关,忽略
01:51:55.308 W CHROMA.DeviceStatusChromaManager: No Razer Phone Foundjava.lang.NullPointerException: Attempt to read from field 'java.lang.Long com.razer.chromaconfigurator.db.b.a.h' on a null object reference
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at com.razer.chromaconfigurator.repositories.b.e(SourceFile:200)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at com.razer.chromaconfigurator.repositories.b.d(SourceFile:190)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at com.razer.chromaconfigurator.c.b.k.q(SourceFile:109)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at com.razer.chromaconfigurator.c.b.l.call(Unknown Source:2)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at io.reactivex.e.e.e.e.a(SourceFile:44)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at io.reactivex.v.b(SourceFile:3310)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at hu.akarnokd.rxjava2.debug.q.a(SourceFile:41)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at io.reactivex.v.b(SourceFile:3310)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at io.reactivex.e.e.e.i$a.run(SourceFile:89)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at io.reactivex.e.g.j.c(SourceFile:38)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at io.reactivex.e.g.j.call(SourceFile:26)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: at java.lang.Thread.run(Thread.java:764)
01:51:55.308 W CHROMA.DeviceStatusChromaManager: Caused by: hu.akarnokd.rxjava2.debug.RxJavaAssemblyException
01:51:55.308 W CHROMA.DeviceStatusChromaManager: Caused by: hu.akarnokd.rxjava2.debug.RxJavaAssemblyException
01:51:55.308 W CHROMA.DeviceStatusChromaManager: Caused by: hu.akarnokd.rxjava2.debug.RxJavaAssemblyException
01:51:55.308 W CHROMA.DeviceStatusChromaManager: Caused by: hu.akarnokd.rxjava2.debug.RxJavaAssemblyException