如何识别当前的USB连接是向别的设备充电?
? ? ? ?最好的方式是获取USB的供电电流,如果当前低电量,而且供电电流太大,则对USB总线断电。但是在USB服务上没法似乎无法获得供电电流。按功能是否可行?如果USB没有配置音频、视频、录音、录像、拍照, otg存储等功能,也就是没有常用的defined codes, 则掐断电源。
场景 | mode | power | data | class | sub-c | 组合 | 备注 |
---|
pc? 充电 | ufp | sink | device | / | / | 2 | [source:host, sink:device] | pc? mtp | ufp | sink | device | / | / | 2 | | pc ptp | ufp | sink | device | / | / | 2 | | pc cdrom | ufp | sink | device | / | / | 2 | | pc rndis | / | / | / | / | / | / | 不支持rndis | 充电头 | dfp | sink | host | / | / | 3 | [source:host, sink:host, sink:device] | 充电头 | ufp | sink | device | / | / | 2 | [source:host, sink:device] | headset | dfp | source | host | 6 | 1 | 2 | | otg udisk | | source | host | | | 2 | | printer | | source | host | | | 2 | | y31s | dfp | source | host | 8 | 6 | 2 | | 790 充电 | ufp | sink | device | | | 4 | [source:host, source:device, sink:host, sink:device] | 790 mtp | ufp | sink | device | | | 4 | | 790 ptp | ufp | sink | device | | | 4 | | 790cdrom | ufp | sink | device | | | 4 | | 790 充电 | | sink | host | | | 4 | | 790 mtp | | sink | host | | | 4 | | 790 ptp | | sink | host | | | 4 | | 790cdrom | | sink | host | | | 4 | | 790 充电 | ufp | source | device | | | 4 | 供电方不能弹起连接选择框,受电方可以弹起。 | 790 mtp | | source | device | | | 4 | | 790 ptp | | source | device | | | 4 | | 790cdrom | | source | device | | | 4 | | 790 充电 | dfp | source | host | 255 | 255 | 4 | | 790 mtp | | source | host | 6 | 1 | 4 | | 790 ptp | | source | host | 6 | 1 | 4 | | 790cdrom | | source | host | 8 | 6 | 4 | |
Defined Class Codes 类型
USB 耳机
07-14 15:34:06.836 ?1091 ?2461 I android.hardware.usb@1.2-service-qti: auto suspend usb interfaces /sys/devices/platform/soc/a600000.ssusb/a600000.dwc3/xhci-hcd.2.auto/usb2/2-1 07-14 15:33:51.712 21715 21715 I [21715:kworker/0:3]input: bestechnic HUAWEI USB-C HEADSET as /devices/platform/soc/a600000.ssusb/a600000.dwc3/xhci-hcd.2.auto/usb2/2-1/2-1:1.3/0003:12D1:3A07.0001/input/input6 07-14 15:33:51.784 21715 21715 I [21715:kworker/0:3]hid-generic 0003: 12D1:3A07.0001: input,hidraw0: USB HID v1.11 Device [bestechnic HUAWEI USB-C HEADSET] on usb-xhci-hcd.2.auto-1/input3 07-14 15:34:06.941 12615 12821 D EventHub: No input device configuration file found for device 'bestechnic HUAWEI USB-C HEADSET'. 07-14 15:34:06.947 ?1091 ?2461 I android.hardware.usb@1.2-service-qti: auto suspend usb interfaces /sys/devices/platform/soc/a600000.ssusb/a600000.dwc3/xhci-hcd.2.auto/usb2/2-1 07-14 15:34:06.950 12615 12939 D UsbHostManager: USB device attached: vidpid 12d1:3a07 mfg/product/ver/serial bestechnic/HUAWEI USB-C HEADSET/0.24/0296A100000000000000000000000 hasAudio/HID/Storage: true/true/false 07-14 15:34:06.955 12615 12939 D UsbDeviceDescriptor: ? 1 configs 07-14 15:34:06.958 12615 12939 D UsbHostManager: Added device UsbDevice[mName=/dev/bus/usb/002/002,mVendorId=4817,mProductId=14855,mClass=0,mSubclass=0,mProtocol=0,mManufacturerName=bestechnic,mProductName=HUAWEI USB-C HEADSET,mVersion=0.24,mSerialNumberReader=com.android.server.usb.UsbSerialReader@fb536d0, mHasAudioPlayback=true, mHasAudioCapture=true, mHasMidi=false, mHasVideoCapture=false, mHasVideoPlayback=false, mConfigurations=[ 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbConfiguration[mId=1,mName=null,mAttributes=160,mMaxPower=50,mInterfaces=[ 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=1,mSubclass=1,mProtocol=0,mEndpoints=[] 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbInterface[mId=1,mAlternateSetting=0,mName=null,mClass=1,mSubclass=2,mProtocol=0,mEndpoints=[] 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbInterface[mId=1,mAlternateSetting=1,mName=null,mClass=1,mSubclass=2,mProtocol=0,mEndpoints=[ 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=131,mAttributes=13,mMaxPacketSize=192,mInterval=1]] 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbInterface[mId=2,mAlternateSetting=0,mName=null,mClass=1,mSubclass=2,mProtocol=0,mEndpoints=[] 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbInterface[mId=2,mAlternateSetting=1,mName=null,mClass=1,mSubclass=2,mProtocol=0,mEndpoints=[ 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=3,mAttributes=13,mMaxPacketSize=384,mInterval=1]] 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbInterface[mId=2,mAlternateSetting=2,mName=null,mClass=1,mSubclass=2,mProtocol=0,mEndpoints=[ 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=3,mAttributes=13,mMaxPacketSize=576,mInterval=1]] 07-14 15:34:06.958 12615 12939 D UsbHostManager: UsbInterface[mId=3,mAlternateSetting=0,mName=null,mClass=3,mSubclass=0,mProtocol=0,mEndpoints=[ 07-14 15:34:06.958 12615 12939 D UsbHostManager:
UsbEndpoint[mAddress=132,mAttributes=3,mMaxPacketSize=3,mInterval=1]]]]
对端是 DRP端口的手机,仅充电config
07-14 17:59:40.935 11994 11994 I [11994:kworker/u16:2]hub 3-0: 1.0: 1 port detected 07-14 17:59:41.488 ?1091 ?2461 I android.hardware.usb@1.2-service-qti: uevent received change@/devices/platform/soc/soc:qcom,pmic_glink/soc:qcom,pmic_glink:qcom,ucsi/typec/port0 07-14 17:59:41.496 ?1091 ?2461 I android.hardware.usb@1.2-service-qti: port0 07-14 17:59:41.499 ?1091 ?2461 I android.hardware.usb@1.2-service-qti: connected:1 canChangeMode:1 canChagedata:1 canChangePower:1 07-14 17:59:41.501 12615 12911 I UsbPortManager: ClientCallback V1_2: port0 07-14 17:59:41.502 12615 12648 I UsbPortManager: USB port changed: port=UsbPort{id=port0, supportedModes=dual, audio_accsupportedContaminantProtectionModes=5supportsEnableContaminantPresenceProtection=falsesupportsEnableContaminantPresenceDetection=false, status=UsbPortStatus{connected=true, currentMode=dfp, currentPowerRole=source, currentDataRole=host, supportedRoleCombinations=[source:host, source:device, sink:host, sink:device], contaminantDetectionStatus=2, contaminantProtectionStatus=1}, canChangeMode=true, canChangePowerRole=true, canChangeDataRole=true, connectedAtMillis=14369516, lastConnectDurationMillis=0 07-14 17:59:41.504 12615 12615 I UsbDeviceManager: updateHostState UsbPort{id=port0, supportedModes=dual, audio_accsupportedContaminantProtectionModes=5supportsEnableContaminantPresenceProtection=falsesupportsEnableContaminantPresenceDetection=false status=UsbPortStatus{connected=true, currentMode=dfp, currentPowerRole=source, currentDataRole=host, supportedRoleCombinations=[source:host, source:device, sink:host, sink:device], contaminantDetectionStatus=2, contaminantProtectionStatus=1} 07-14 17:59:41.341 31352 31352 I [31352:kworker/0:2]usb 2-1: new high-speed USB device number 2 using xhci-hcd 07-14 17:59:41.500 31352 31352 I [31352:kworker/0:2]usb 2-1: New USB device found, VID=109b, PID=90be 07-14 17:59:42.011 12615 12939 D UsbHostManager: USB device attached: vidpid 109b:90be mfg/product/ver/serial Android/Android/5.04/ABCDEFGH hasAudio/HID/Storage: false/false/false 07-14 17:59:42.020 12615 12939 D UsbDeviceDescriptor: ? 1 configs 07-14 17:59:42.038 12615 12939 D UsbHostManager: Added device UsbDevice[mName=/dev/bus/usb/002/002,mVendorId=4251,mProductId=37054,mClass=0,mSubclass=0,mProtocol=0,mManufacturerName=Android,mProductName=Android,mVersion=5.04,mSerialNumberReader=com.android.server.usb.UsbSerialReader@c9820d6, mHasAudioPlayback=false, mHasAudioCapture=false, mHasMidi=false, mHasVideoCapture=false, mHasVideoPlayback=false, mConfigurations=[ 07-14 17:59:42.038 12615 12939 D UsbHostManager: UsbConfiguration[mId=1,mName=diag_adb,mAttributes=192,mMaxPower=0,mInterfaces=[ 07-14 17:59:42.038 12615 12939 D UsbHostManager: UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=255,mSubclass=255,mProtocol=48,mEndpoints=[ 07-14 17:59:42.038 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=1,mAttributes=2,mMaxPacketSize=512,mInterval=0] 07-14 17:59:42.038 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=129,mAttributes=2,mMaxPacketSize=512,mInterval=0]] 07-14 17:59:42.038 12615 12939 D UsbHostManager: UsbInterface[mId=1,mAlternateSetting=0,mName=ADB Interface,mClass=255,mSubclass=66,mProtocol=1,mEndpoints=[ 07-14 17:59:42.038 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=512,mInterval=0] 07-14 17:59:42.038 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=130,mAttributes=2,mMaxPacketSize=512,mInterval=0]]]] 07-14 17:59:42.047 12615 12615 D AS.AudioService: onReceive() ?action= android.hardware.usb.action.USB_DEVICE_ATTACHED
对端是手机且设置为mtp
07-14 18:10:49.967 12615 12939 D UsbHostManager: USB device attached: vidpid 109b:9135 mfg/product/ver/serial Android/Android/5.04/ABCDEFGH hasAudio/HID/Storage: false/false/false 07-14 18:10:49.972 12615 12939 D UsbDeviceDescriptor: ? 1 configs 07-14 18:10:49.991 12615 12939 D UsbHostManager: Added device UsbDevice[mName=/dev/bus/usb/002/003,mVendorId=4251,mProductId=37173,mClass=0,mSubclass=0,mProtocol=0,mManufacturerName=Android,mProductName=Android,mVersion=5.04,mSerialNumberReader=com.android.server.usb.UsbSerialReader@6872391, mHasAudioPlayback=false, mHasAudioCapture=false, mHasMidi=false, mHasVideoCapture=false, mHasVideoPlayback=false, mConfigurations=[ 07-14 18:10:49.991 12615 12939 D UsbHostManager: UsbConfiguration[mId=1,mName=mtp_adb,mAttributes=192,mMaxPower=0,mInterfaces=[ 07-14 18:10:49.991 12615 12939 D UsbHostManager: UsbInterface[mId=0,mAlternateSetting=0,mName=MTP,mClass=6,mSubclass=1,mProtocol=1,mEndpoints=[ 07-14 18:10:49.991 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=129,mAttributes=2,mMaxPacketSize=512,mInterval=0] 07-14 18:10:49.991 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=1,mAttributes=2,mMaxPacketSize=512,mInterval=0] 07-14 18:10:49.991 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=130,mAttributes=3,mMaxPacketSize=28,mInterval=6]] 07-14 18:10:49.991 12615 12939 D UsbHostManager: UsbInterface[mId=1,mAlternateSetting=0,mName=ADB Interface,mClass=255,mSubclass=66,mProtocol=1,mEndpoints=[ 07-14 18:10:49.991 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=512,mInterval=0] 07-14 18:10:49.991 12615 12939 D UsbHostManager: UsbEndpoint[mAddress=131,mAttributes=2,mMaxPacketSize=512,mInterval=0]]]]
|