나는 Xubuntu 14.04에서 USB 사운드 카드용 간단한 드라이버를 작성하려고 합니다(그저 재미로). 예를 들어, 이 장치를 통해 내 노트북의 볼륨을 제어할 수 있는 기회를 원합니다.
문제는 - 어떤 결과도 얻지 못한다는 것입니다 sudo cat /dev/hidraw0
. 이런 식으로 USB 마우스를 테스트했습니다. 클릭하고 움직이는 동안 일부 출력이 나왔습니다. 이 장치는 플러그를 꽂으면 카탈로그에 나타나고 플러그를 뽑으면 사라지는 /dev/hidraw0
유일한 장치 이기 때문에 이것이 바로 이 장치의 경우라고 가정합니다./dev/
이런 예도 있어요http://lxr.free-electrons.com/source/samples/hidraw/hid-example.c보여줘
Report Descriptor Size: 50
Report Descriptor:
5 c 9 1 a1 1 15 0 25 1 9 e9 9 ea 75 1 95 2 81 2 9 e2 9 0 81 6 9 0 95 4 81 2 26 ff 0 9 0 75 8 95 f 81 2 9 0 95 10 91 2 c0
Raw Name: C-Media Electronics Inc. USB Advanced Audio Device
Raw Phys: usb-0000:00:1a.0-1.2/input3
Raw Info:
bustype: 3 (USB)
vendor: 0x0b05
product: 0x1743
HIDIOCSFEATURE: Broken pipe
HIDIOCGFEATURE: Broken pipe
Error: 32
write: Broken pipe
read: Resource temporarily unavailable
이 장치에서 일부 입력을 어떻게 읽을 수 있습니까? 뭐가 문제 야?
[편집 1]
명령 sudo lsusb -v -d 0b05:1743
표시
Bus 001 Device 005: ID 0b05:1743 ASUSTek Computer, Inc. Xonar U1 Audio Station
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b05 ASUSTek Computer, Inc.
idProduct 0x1743 Xonar U1 Audio Station
bcdDevice 1.00
iManufacturer 3 C-Media Electronics Inc.
iProduct 1 USB Advanced Audio Device
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 293
bNumInterfaces 4
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 0
iInterface 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 128
bInCollection 2
baInterfaceNr( 0) 1
baInterfaceNr( 1) 2
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 1
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 2
wTerminalType 0x0201 Microphone
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 3
wTerminalType 0x0603 Line Connector
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 4
wTerminalType 0x0605 SPDIF interface
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 6
wTerminalType 0x0301 Speaker
bAssocTerminal 0
bSourceID 9
iTerminal 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 7
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bSourceID 8
iTerminal 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 5 (SELECTOR_UNIT)
bUnitID 8
bNrInPins 3
baSource( 0) 10
baSource( 1) 11
baSource( 2) 12
iSelector 0
AudioControl Interface Descriptor:
bLength 13
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 9
bSourceID 1
bControlSize 2
bmaControls( 0) 0x01
bmaControls( 0) 0x02
Mute Control
Loudness Control
bmaControls( 1) 0x02
bmaControls( 1) 0x00
Volume Control
bmaControls( 2) 0x02
bmaControls( 2) 0x00
Volume Control
iFeature 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 10
bSourceID 2
bControlSize 1
bmaControls( 0) 0x01
Mute Control
bmaControls( 1) 0x02
Volume Control
bmaControls( 2) 0x02
Volume Control
iFeature 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 11
bSourceID 3
bControlSize 1
bmaControls( 0) 0x01
Mute Control
bmaControls( 1) 0x02
Volume Control
bmaControls( 2) 0x02
Volume Control
iFeature 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 12
bSourceID 4
bControlSize 1
bmaControls( 0) 0x01
Mute Control
bmaControls( 1) 0x00
bmaControls( 2) 0x00
iFeature 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 1
bDelay 1 frames
wFormatTag 1 PCM
AudioStreaming Interface Descriptor:
bLength 20
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 4 Discrete
tSamFreq[ 0] 8000
tSamFreq[ 1] 16000
tSamFreq[ 2] 44100
tSamFreq[ 3] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x00c8 1x 200 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioControl Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x01
Sampling Frequency
bLockDelayUnits 1 Milliseconds
wLockDelay 1 Milliseconds
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 7
bDelay 1 frames
wFormatTag 1 PCM
AudioStreaming Interface Descriptor:
bLength 20
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 4 Discrete
tSamFreq[ 0] 8000
tSamFreq[ 1] 16000
tSamFreq[ 2] 44100
tSamFreq[ 3] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x00c8 1x 200 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioControl Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x01
Sampling Frequency
bLockDelayUnits 0 Undefined
wLockDelay 0 Undefined
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 3
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.00
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 50
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x87 EP 7 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 1
Device Status: 0x0000
(Bus Powered)
명령에 printf '01%030d' | xxd -ps -r | sudo tee /dev/hidraw0
오류가 표시됩니다 tee: /dev/hidraw0: Broken pipe
.
[편집 2]
명령이 sudo evtest /dev/input/event14
장치와의 상호 작용에 응답하지 않습니다.
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0xb05 product 0x1743 version 0x100
Input device name: "C-Media Electronics Inc. USB Advanced Audio Device"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 113 (KEY_MUTE)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
[편집 3]
내 sudo dumpcap -i usbmon1 -w - > usb.pcapng
결과는 다음과 같습니다.
http://www.wikiupload.com/Q3QZA5LCTAUS5P2
답변1
/dev/hidraw0
제어 메시지는 오디오 메시지와 다른 끝점을 통해 처리되므로 오디오를 "볼" 수 없습니다 . 제어 메시지는 안정적인 전송이 필요하지만 오디오는 손실될 수 있으며 일반적으로 사용됩니다.동기 전송.
테스트 프로그램이 길이가 2인 보고서를 작성하려고 시도하기 때문에 오류가 발생합니다.
다음은 디코딩된 HID 보고서 설명자입니다(변환 사용 hidrd-convert
).
Usage Page (Consumer), ; 05 0C - Consumer (0Ch)
Usage (Consumer Control), ; 09 01 - Consumer control (01h, application collection)
Collection (Application), ; A1 01
Logical Minimum (0), ; 15 00
Logical Maximum (1), ; 25 01
Usage (Volume Inc), ; 09 E9 - Volume increment (E9h, re-trigger control)
Usage (Volume Dec), ; 09 EA - Volume decrement (EAh, re-trigger control)
Report Size (1), ; 75 01
Report Count (2), ; 95 02
Input (Variable), ; 81 02
Usage (Mute), ; 09 E2 - Mute (E2h, on/off control)
Usage (00h), ; 09 00
Input (Variable, Relative), ; 81 06
Usage (00h), ; 09 00
Report Count (4), ; 95 04
Input (Variable), ; 81 02
Logical Maximum (255), ; 26 FF 00
Usage (00h), ; 09 00
Report Size (8), ; 75 08
Report Count (15), ; 95 0F
Input (Variable), ; 81 02
Usage (00h), ; 09 00
Report Count (16), ; 95 10
Output (Variable), ; 91 02
End Collection ; C0
이 설명자는 Set_Report
요청을 사용하여(제어 파이프를 통해) 전송할 수 있는 데이터의 바이너리 형식을 설명합니다. (이거 봐요HID(휴먼 인터페이스 장치) 문서에 대한 장치 클래스 정의자세한 내용은 특히 8.5 보고서 예)를 참조하세요.
비트 레이아웃 설명자 설명입력하다보고서(장치에서 호스트로, 인터럽트 엔드포인트를 통해 수신됩니다. HID 1.1의 섹션 4.4 참조):
0.0: Volume Increment
0.1: Volume Decrement
0.2: Mute
0.3: (null)
0.4-7: (null)
15 times 8 bits (1 byte): (null)
HID 보고서를 보내야 하는 경우 출력 보고서의 보고서 개수는 16개(및 비트 크기는 8개)입니다. 그래서산출보고서(인터럽트 출력 엔드포인트를 통해 전송된 보고서)는 16바이트입니다.
내가 아는 한, 귀하의 장치는 운영 체제에서 처리해야 하는 중요한 이벤트만 보낼 수 있습니다. 소프트웨어를 통해 하드웨어 오디오 레벨을 조정하는 기능은 제공하지 않습니다.
읽을 수 없는 경우 장치에는 제어 파이프를 통해 보고할 의미 있는 데이터가 없으므로 제조업체는 아마도 Get_Report
해당 방법을 구현하는 데 신경을 쓰지 않았을 것입니다. 그런데, sudo lsusb -v -d 0b05:1743
어떻게 보이나요?