From owner-freebsd-bluetooth@FreeBSD.ORG Thu Mar 19 20:24:17 2015 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 3DCA3C54 for ; Thu, 19 Mar 2015 20:24:17 +0000 (UTC) Received: from mail-ie0-x22e.google.com (mail-ie0-x22e.google.com [IPv6:2607:f8b0:4001:c03::22e]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E47D022A for ; Thu, 19 Mar 2015 20:24:16 +0000 (UTC) Received: by iecsl2 with SMTP id sl2so76458718iec.1 for ; Thu, 19 Mar 2015 13:24:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=NAGQ62VcMD5+OZoZ68p9jErfeC0o2XZMJmtDo5VAkHo=; b=Dw8CW+jCMtwejHXp9D+ucfp3/ACTLm3LNs4ZsGujY84P/bZZRNQ4/3qsFal6VaYcY4 IQLk1h6c4uBK920YmTFy0srHiPY7s85fwrt/1ZCouQcKyjMbcyZRpLUkU7eG11vZlNEq DyvCVTyjKnItuWSGUCYrND2Tri6T34QXvz0E4s/OyclLxlh/SOtLWmlKO6+34CQpsd2i pFUJrSvIgPZOhgUCtYXwUG4TWZLflmP7r+X9CPZ9PJP3EwKF9iedHOldxFaIr1FdCVht +IlAvEmr6h3dGJLKZbibUkB5Sq/L63QAlNp24MfWXbv0xVO9+ZVV/KMLgJOViJSAhz2O MfvA== MIME-Version: 1.0 X-Received: by 10.50.56.82 with SMTP id y18mr19938336igp.25.1426796656298; Thu, 19 Mar 2015 13:24:16 -0700 (PDT) Received: by 10.36.66.74 with HTTP; Thu, 19 Mar 2015 13:24:16 -0700 (PDT) In-Reply-To: References: <0AD7A2F7-37BE-4F6A-9FD6-F6C81B2CAF36@gmail.com> Date: Thu, 19 Mar 2015 13:24:16 -0700 Message-ID: Subject: Re: register HID with SDP error From: Maksim Yevmenkin To: Waitman Gobble Content-Type: text/plain; charset=UTF-8 Cc: "freebsd-bluetooth@freebsd.org" , Iain Hibbert X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Mar 2015 20:24:17 -0000 > 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