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>