Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Mar 2015 13:24:16 -0700
From:      Maksim Yevmenkin <maksim.yevmenkin@gmail.com>
To:        Waitman Gobble <gobble.wa@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:  <CAFPOs6oBd4OagKixg6NH-uWzWCc4g%2B7U-uO1VdQY-UzzcZQBPA@mail.gmail.com>
In-Reply-To: <CAFuo_fzMaRu-VgP48GqETT6AfYT20eR6Ry13J=CiC=mibSvCig@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>

next in thread | previous in thread | raw e-mail | index | archive | help
> 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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFPOs6oBd4OagKixg6NH-uWzWCc4g%2B7U-uO1VdQY-UzzcZQBPA>