Date: Tue, 17 Mar 2015 07:26:24 +0000 (GMT) From: Iain Hibbert <plunky@ogmig.net> To: Waitman Gobble <gobble.wa@gmail.com> Cc: "freebsd-bluetooth@freebsd.org" <freebsd-bluetooth@freebsd.org> Subject: Re: register HID with SDP error Message-ID: <alpine.NEB.2.11.1503170658130.4414@galant.ogmig.net> In-Reply-To: <CAFuo_fye5RWNtjsutHa%2BbXL0AYHYRpJxW-b=48o0iMwX227wdA@mail.gmail.com> References: <CAFuo_fy9xRU2T3GUPY8116yZCUd8sL9pBQ9ixXnMwO56niJFog@mail.gmail.com> <CAFuo_fzdmB79qdoH8P5EcO_ZZoa=_id6h=eqFBXvP_a%2B3WMkLw@mail.gmail.com> <CAFuo_fzB3A5L3vivH7Z80OEoBtVEHftEYE4LUkhnrkguzL5GDA@mail.gmail.com> <CAFuo_fzrk%2BWLXivZrnTsGQD%2BS7mq%2BUSXB7Mn6%2BJT=y64JakGSw@mail.gmail.com> <CAFPOs6q3iVcNthF=S--UgTm=5wA0HM6coqB7AcmCKb=55OWdTQ@mail.gmail.com> <CAFuo_fxgBVKxmzbJs%2B-XDz%2Bu4tb2_i3eYXSa-oiOoU%2BQD6ApwQ@mail.gmail.com> <CAFPOs6r_D7bcGCMP_bP%2BQtZgKt7Oj5jRJ2v872RODekn%2B6xv1Q@mail.gmail.com> <CAFuo_fwPuaD4bYwfZou0RBswZsTmdtVZA1B2GqUdo3ZJJiWRQg@mail.gmail.com> <0AD7A2F7-37BE-4F6A-9FD6-F6C81B2CAF36@gmail.com> <CAFuo_fye5RWNtjsutHa%2BbXL0AYHYRpJxW-b=48o0iMwX227wdA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 16 Mar 2015, Waitman Gobble wrote:
> I reviewed the HID_SPEC_V11 PDF and think i'm getting closer.
> not yet sure about 11 & 12
>
> 11) HIDDescriptorList 0x0206
this is effectively the HID Descriptor, as per a USB keyboard, should be
something like
seq
seq
uint8 0x22
str8 "the descriptor itself"
where 0x22 means a Report
> 12) HIDLANGIDBaseList 0x0207
This should be something like
seq
seq
uint16 0x0409
uint16 0x0100
where 0x0409 translates as "English (US)" and 0x0100 is the offset of the
default language attributes, from LanguageBaseAttributeIDList
both of these allow multiple versions, which is why they are wrapped in a
sequence
> I can't seem to find examples of people using several of the
> 'mandatory' attributes.
using the NetBSD sdpquery(1) program, from my Apple wireless keyboard (the
old white one), I get:
ServiceRecordHandle: 0x00010000
ServiceClassIDList:
Human Interface Device
ProtocolDescriptorList:
L2CAP (PSM 0x0011)
HIDP
BrowseGroupList:
Public Browse Root
LanguageBaseAttributeIDList:
en.UTF-8 base 0x0100
BluetoothProfileDescriptorList:
Human Interface Device, v1.0
AdditionalProtocolDescriptorLists:
L2CAP (PSM 0x0013)
HIDP
ServiceName: "Apple Wireless Keyboard"
ServiceDescription: "Apple Wireless Keyboard"
ProviderName: "Apple Computer, Inc."
HIDDeviceReleaseNumber: v1.1.0
HIDParserVersion: v1.1.1
HIDDeviceSubClass: Peripheral <Keyboard>
HIDCountryCode: 0x0d
HIDVirtualCable: true
HIDReconnectInitiate: true
HIDDescriptorList:
Type 0x22: Report
Data 0x05 0x01 0x09 0x06 0xa1 0x01 0x85 0x01
0x05 0x07 0x19 0xe0 0x29 0xe7 0x15 0x00
0x25 0x01 0x75 0x01 0x95 0x08 0x81 0x02
0x75 0x08 0x95 0x01 0x81 0x01 0x75 0x01
0x95 0x05 0x05 0x08 0x19 0x01 0x29 0x05
0x91 0x02 0x75 0x03 0x95 0x01 0x91 0x01
0x75 0x08 0x95 0x06 0x15 0x00 0x26 0xff
0x00 0x05 0x07 0x19 0x00 0x2a 0xff 0x00
0x81 0x00 0x75 0x01 0x95 0x01 0x15 0x00
0x25 0x01 0x05 0x0c 0x09 0xb8 0x81 0x06
0x09 0xe2 0x81 0x06 0x09 0xe9 0x81 0x02
0x09 0xea 0x81 0x02 0x75 0x01 0x95 0x04
0x81 0x01 0xc0
HIDLANGIDBaseList:
English (US) base 0x0100
HIDSDPDisable: false
HIDRemoteWake: true
HIDProfileVersion: v1.0
HIDSupervisionTimeout: 8000
HIDNormallyConnectable: true
HIDBootDevice: true
which, in 'raw' form is:
AttributeID 0x0000:
uint32 0x00010000
AttributeID 0x0001:
seq8(3)
uuid16 0x1124
AttributeID 0x0004:
seq8(13)
seq8(6)
uuid16 0x0100
uint16 0x0011
seq8(3)
uuid16 0x0011
AttributeID 0x0005:
seq8(3)
uuid16 0x1002
AttributeID 0x0006:
seq8(9)
uint16 0x656e
uint16 0x006a
uint16 0x0100
AttributeID 0x0009:
seq8(8)
seq8(6)
uuid16 0x1124
uint16 0x0100
AttributeID 0x000d:
seq8(15)
seq8(13)
seq8(6)
uuid16 0x0100
uint16 0x0013
seq8(3)
uuid16 0x0011
AttributeID 0x0100:
str8(23) "Apple Wireless Keyboard"
AttributeID 0x0101:
str8(23) "Apple Wireless Keyboard"
AttributeID 0x0102:
str8(20) "Apple Computer, Inc."
AttributeID 0x0200:
uint16 0x0110
AttributeID 0x0201:
uint16 0x0111
AttributeID 0x0202:
uint8 0x40
AttributeID 0x0203:
uint8 0x0d
AttributeID 0x0204:
bool true
AttributeID 0x0205:
bool true
AttributeID 0x0206:
seq8(105)
seq8(103)
uint8 0x22
str8(99) "\^E\^A \^F\M-!\^A\M^E\^A\^E\a\^Y\M-`)\M-g\^U\0 ...
AttributeID 0x0207:
seq8(8)
seq8(6)
uint16 0x0409
uint16 0x0100
AttributeID 0x0208:
bool false
AttributeID 0x020a:
bool true
AttributeID 0x020b:
uint16 0x0100
AttributeID 0x020c:
uint16 0x1f40
AttributeID 0x020d:
bool true
AttributeID 0x020e:
bool true
and the plain hex values:
AttributeID 0x0000:
0x0a 0x00 0x01 0x00 0x00
AttributeID 0x0001:
0x35 0x03 0x19 0x11 0x24
AttributeID 0x0004:
0x35 0x0d 0x35 0x06 0x19 0x01 0x00 0x09
0x00 0x11 0x35 0x03 0x19 0x00 0x11
AttributeID 0x0005:
0x35 0x03 0x19 0x10 0x02
AttributeID 0x0006:
0x35 0x09 0x09 0x65 0x6e 0x09 0x00 0x6a
0x09 0x01 0x00
AttributeID 0x0009:
0x35 0x08 0x35 0x06 0x19 0x11 0x24 0x09
0x01 0x00
AttributeID 0x000d:
0x35 0x0f 0x35 0x0d 0x35 0x06 0x19 0x01
0x00 0x09 0x00 0x13 0x35 0x03 0x19 0x00
0x11
AttributeID 0x0100:
0x25 0x17 0x41 0x70 0x70 0x6c 0x65 0x20
0x57 0x69 0x72 0x65 0x6c 0x65 0x73 0x73
0x20 0x4b 0x65 0x79 0x62 0x6f 0x61 0x72
0x64
AttributeID 0x0101:
0x25 0x17 0x41 0x70 0x70 0x6c 0x65 0x20
0x57 0x69 0x72 0x65 0x6c 0x65 0x73 0x73
0x20 0x4b 0x65 0x79 0x62 0x6f 0x61 0x72
0x64
AttributeID 0x0102:
0x25 0x14 0x41 0x70 0x70 0x6c 0x65 0x20
0x43 0x6f 0x6d 0x70 0x75 0x74 0x65 0x72
0x2c 0x20 0x49 0x6e 0x63 0x2e
AttributeID 0x0200:
0x09 0x01 0x10
AttributeID 0x0201:
0x09 0x01 0x11
AttributeID 0x0202:
0x08 0x40
AttributeID 0x0203:
0x08 0x0d
AttributeID 0x0204:
0x28 0x01
AttributeID 0x0205:
0x28 0x01
AttributeID 0x0206:
0x35 0x69 0x35 0x67 0x08 0x22 0x25 0x63
0x05 0x01 0x09 0x06 0xa1 0x01 0x85 0x01
0x05 0x07 0x19 0xe0 0x29 0xe7 0x15 0x00
0x25 0x01 0x75 0x01 0x95 0x08 0x81 0x02
0x75 0x08 0x95 0x01 0x81 0x01 0x75 0x01
0x95 0x05 0x05 0x08 0x19 0x01 0x29 0x05
0x91 0x02 0x75 0x03 0x95 0x01 0x91 0x01
0x75 0x08 0x95 0x06 0x15 0x00 0x26 0xff
0x00 0x05 0x07 0x19 0x00 0x2a 0xff 0x00
0x81 0x00 0x75 0x01 0x95 0x01 0x15 0x00
0x25 0x01 0x05 0x0c 0x09 0xb8 0x81 0x06
0x09 0xe2 0x81 0x06 0x09 0xe9 0x81 0x02
0x09 0xea 0x81 0x02 0x75 0x01 0x95 0x04
0x81 0x01 0xc0
AttributeID 0x0207:
0x35 0x08 0x35 0x06 0x09 0x04 0x09 0x09
0x01 0x00
AttributeID 0x0208:
0x28 0x00
AttributeID 0x020a:
0x28 0x01
AttributeID 0x020b:
0x09 0x01 0x00
AttributeID 0x020c:
0x09 0x1f 0x40
AttributeID 0x020d:
0x28 0x01
AttributeID 0x020e:
0x28 0x01
the HID descriptor decodes as follows: (in the style of bthidcontrol)
Collection page=Generic_Desktop usage=Keyboard
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_LeftControl Variable, logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_LeftShift Variable, logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_LeftAlt Variable, logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_Left_GUI Variable, logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_RightControl Variable, logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_RightShift Variable, logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_RightAlt Variable, logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_Right_GUI Variable, logical range 0..1
Input id=1 size=8 count=1 page=0x0000 usage=0x0000 Const, logical range 0..1
Output id=1 size=1 count=1 page=LEDs usage=Num_Lock Variable, logical range 0..1
Output id=1 size=1 count=1 page=LEDs usage=Caps_Lock Variable, logical range 0..1
Output id=1 size=1 count=1 page=LEDs usage=Scroll_Lock Variable, logical range 0..1
Output id=1 size=1 count=1 page=LEDs usage=Compose Variable, logical range 0..1
Output id=1 size=1 count=1 page=LEDs usage=Kana Variable, logical range 0..1
Output id=1 size=3 count=1 page=0x0000 usage=0x0000 Const, logical range 0..1
Input id=1 size=8 count=6 page=Keyboard usage=No_Event, logical range 0..255
Input id=1 size=1 count=1 page=Consumer usage=Eject Variable Relative, logical range 0..1
Input id=1 size=1 count=1 page=Consumer usage=Mute Variable Relative, logical range 0..1
Input id=1 size=1 count=1 page=Consumer usage=Volume_Up Variable, logical range 0..1
Input id=1 size=1 count=1 page=Consumer usage=Volume_Down Variable, logical range 0..1
Input id=1 size=1 count=4 page=0x0000 usage=0x0000 Const, logical range 0..1
End collection
or, in a more raw format:
05 01 Global:Usage Page (1)
09 06 Local:Usage (6)
a1 01 Main:Collection(Application)
85 01 Global:Report ID (1)
05 07 Global:Usage Page (7)
19 e0 Local:Usage Minimum (-32)
29 e7 Local:Usage Maximum (-25)
15 00 Global:Logical Minimum (0)
25 01 Global:Logical Maximum (1)
75 01 Global:Report Size (1)
95 08 Global:Report Count (8)
81 02 Main:Input(Variable)
75 08 Global:Report Size (8)
95 01 Global:Report Count (1)
81 01 Main:Input(Constant)
75 01 Global:Report Size (1)
95 05 Global:Report Count (5)
05 08 Global:Usage Page (8)
19 01 Local:Usage Minimum (1)
29 05 Local:Usage Maximum (5)
91 02 Main:Output(Variable)
75 03 Global:Report Size (3)
95 01 Global:Report Count (1)
91 01 Main:Output(Constant)
75 08 Global:Report Size (8)
95 06 Global:Report Count (6)
15 00 Global:Logical Minimum (0)
26 ff 00 Global:Logical Maximum (255)
05 07 Global:Usage Page (7)
19 00 Local:Usage Minimum (0)
2a ff 00 Local:Usage Maximum (255)
81 00 Main:Input()
75 01 Global:Report Size (1)
95 01 Global:Report Count (1)
15 00 Global:Logical Minimum (0)
25 01 Global:Logical Maximum (1)
05 0c Global:Usage Page (12)
09 b8 Local:Usage (-72)
81 06 Main:Input(Variable, Relative)
09 e2 Local:Usage (-30)
81 06 Main:Input(Variable, Relative)
09 e9 Local:Usage (-23)
81 02 Main:Input(Variable)
09 ea Local:Usage (-22)
81 02 Main:Input(Variable)
75 01 Global:Report Size (1)
95 04 Global:Report Count (4)
81 01 Main:Input(Constant)
c0 Main:End Collection
regards,
iain
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.NEB.2.11.1503170658130.4414>
