Date: Sat, 21 Mar 2015 07:46:18 -0700 From: Waitman Gobble <gobble.wa@gmail.com> To: Maksim Yevmenkin <maksim.yevmenkin@gmail.com> Cc: "freebsd-bluetooth@freebsd.org" <freebsd-bluetooth@freebsd.org>, Iain Hibbert <plunky@ogmig.net> Subject: Re: register HID with SDP error Message-ID: <CAFuo_fz-hZ9WXX1Uvc-vEwTMrPeyakGsStTkS6RGEzwMTh%2BsUw@mail.gmail.com> In-Reply-To: <CAFPOs6oBd4OagKixg6NH-uWzWCc4g%2B7U-uO1VdQY-UzzcZQBPA@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> <alpine.NEB.2.11.1503170658130.4414@galant.ogmig.net> <CAFuo_fx47uRC-eKD_KtsSsrMCQZauyHyCOgRxGbtp_WEZ49o_Q@mail.gmail.com> <CAFPOs6rYXOFPk5_nqXivToUvGRjXDMS=XL60RyKbMQm7nP8wFg@mail.gmail.com> <CAFuo_fw5-YtH_sj3Ft52hpfXEP8QCkweptJzT0eUSos9DoBZ%2BA@mail.gmail.com> <CAFuo_fzSMNvwewpkKxcLr9aHyTcwaVgcreLtexSo=FNzNhC6og@mail.gmail.com> <CAFPOs6rJ_SaKjmXrbr%2Bpa9BoVL2HtjkzoyBo015BFK1QB9ZVsQ@mail.gmail.com> <CAFuo_fxGgWYp5x=xWbFogj8F8ZMULFQw_HOWZiJ42=vDO7tXnQ@mail.gmail.com> <CAFPOs6o7jrULqF%2BVSbZ0ckFx3MqAbO-eHyL5FfToTL4xMxSBLQ@mail.gmail.com> <CAFuo_fxocC6KhHqXf2HWpMLFNMFo2tdmv4RMv1MYYBXkC=3FJg@mail.gmail.com> <CAFuo_fwp_Nb2kOk=7qKO6VV5%2Bu_MG5GwaKYkwKFDjUuVo%2BG-aw@mail.gmail.com> <CAFPOs6rNSqS=ZyZKZDWy2T437bkoXpfKEFn_Znpo7X6UgXMNVw@mail.gmail.com> <CAFuo_fzMaRu-VgP48GqETT6AfYT20eR6Ry13J=CiC=mibSvCig@mail.gmail.com> <CAFPOs6oBd4OagKixg6NH-uWzWCc4g%2B7U-uO1VdQY-UzzcZQBPA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Mar 19, 2015 at 1:24 PM, Maksim Yevmenkin <maksim.yevmenkin@gmail.com> wrote: >> Hi, >> >> It's not for production use, but if someone comes across this post in >> the future maybe save a few minutes when tinkering and >> troubleshooting. >> >> I changed the Makefile so it will 'more easily' build as a standalone >> outside /usr/src >> I added the syslog line around ln 324 in server.c - just wanted to see >> that data was coming in. >> >> do { >> len = read(fd, &data, to_read); >> syslog(LOG_ERR,"%s",data.b); >> } while (len < 0 && errno == EINTR); > > ok, thanks. > > so, yes, please check your hid report format. > > this it the input report you should be using (this is taken from your > hid descriptor) > > Input id=1 size=8 count=6 page=Keyboard > usage=Reserved_(no_event_indicated), logical range 0..255 > > so, it means that on-the-wire packet should be 10 bytes > > byte 0: 0xA1 -- bluetooth header > byte 1: 0x01 -- hid report id > byte 2: 0xXX -- bitmask for modifier key pressed, i.e. ctrl, shift, alt, etc. > byte 3: 0x00 -- padding > byte 4: 0xXX -- key code pressed #1 > byte 5: 0xXX -- key code pressed #2 > byte 6: 0xXX -- key code pressed #3 > byte 7: 0xXX -- key code pressed #4 > byte 8: 0xXX -- key code pressed #5 > byte 9: 0xXX -- key code pressed #6 > > hid repot should tell which keys (scan codes 1..6) are pressed > currently, and, which modifier keys are pressed currently (byte 2). if > no keys are pressed currently, then, 0x00 should be used. host should > keep track of which keys were pressed previously, and, effectively > build a press/release logic itself. meaning if hid report N had key > code K, and, hid report N+1 did not have key code K, then it means > that key code K was pressed and subsequently released. > > here is another example that my be easier to understand. suppose we > start with no keys pressed. hid report will look like > > byte 0: 0xA1 > byte 1: 0x01 > byte 2: 0x00 > byte 3: 0x00 > byte 4: 0x00 > byte 5: 0x00 > byte 6: 0x00 > byte 7: 0x00 > byte 8: 0x00 > byte 9: 0x00 > > now, suppose key 'a' was pressed and then released. two hid reports > will go out, i.e. > > byte 0: 0xA1 > byte 1: 0x01 > byte 2: 0x00 > byte 3: 0x00 > byte 4: key code for 'a' key > byte 5: 0x00 > byte 6: 0x00 > byte 7: 0x00 > byte 8: 0x00 > byte 9: 0x00 > > followed by > > byte 0: 0xA1 > byte 1: 0x01 > byte 2: 0x00 > byte 3: 0x00 > byte 4: 0x00 > byte 5: 0x00 > byte 6: 0x00 > byte 7: 0x00 > byte 8: 0x00 > byte 9: 0x00 > > meaning key 'a' was released and no other keys were pressed. > > i hope it makes sense to you. > > thanks, > max Yes, thank you Max, that helps alot. One question, where is "Class" set? I believe this is causing me trouble # hccontrol -n ubt0hci inquiry Inquiry result, num_responses=1 Inquiry result #0 BD_ADDR: 00:1b:dc:06:94:d3 Page Scan Rep. Mode: 0x1 Page Scan Period Mode: 0x2 Page Scan Mode: 00 Class: ff:01:0c Clock offset: 0x2658 Inquiry complete. Status: No error [00] "Class: ff:01:0c" If I understand correctly, this is advertising this machine as a "computer" (actually the "C" is a laptop even though this machine isn't actually a laptop) right? So at the moment I'm announcing (through sdpd) that this is a computer with an 'available' 1124 HID interface. I'm guessing this is why it shows up on other machines as a "computer". I think what I really want to do is advertise the class to be something like 0x540, which I think I understand to be in the peripheral / keyboard class. Thank you, -- Waitman Gobble Los Altos California USA 510-830-7975
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFuo_fz-hZ9WXX1Uvc-vEwTMrPeyakGsStTkS6RGEzwMTh%2BsUw>