From owner-freebsd-bluetooth@FreeBSD.ORG Wed Mar 18 18:14:46 2015 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id F0BDC3DE for ; Wed, 18 Mar 2015 18:14:45 +0000 (UTC) Received: from mail-we0-x235.google.com (mail-we0-x235.google.com [IPv6:2a00:1450:400c:c03::235]) (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 7554826B for ; Wed, 18 Mar 2015 18:14:45 +0000 (UTC) Received: by wegp1 with SMTP id p1so38908635weg.1 for ; Wed, 18 Mar 2015 11:14:44 -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=rq8yq7R8jf4BxIuxp8jZ107L8Ad0d3JKr7Z82VIobQU=; b=HL1zAfWzcCbPOoT1wR8Is9TU2j3vY7w/8UWFdbUspI7TsWBn9vPwMsNNzQ7bNFpj4n tAMDAOVZW2uupRafO1Pg655kywbNe7mhBKut+kxrK1fJ2j2/bkXYb0W1U4c9wyiO6Wf4 zaN2vpICW4j++MwdIzG4PzcLTuvTcqxvcCRIz0iGhy653YyB2iAJ64lXglNAFSK/eTgQ x5Ie34wJ53j1yOB6ZmsJWPJ8VJg8DpbXByGKh+m3wp5ildh1xyIUQqDEJNosd+LG1f/x N9lfTesXKH6hDuF7KGqSJpS/qiVE7hAvMiztOUcxQV0ztpeuUklnK+8FJ5lxj0V1vMGq wO+g== MIME-Version: 1.0 X-Received: by 10.195.12.97 with SMTP id ep1mr147415559wjd.134.1426702483953; Wed, 18 Mar 2015 11:14:43 -0700 (PDT) Received: by 10.27.214.136 with HTTP; Wed, 18 Mar 2015 11:14:43 -0700 (PDT) In-Reply-To: References: <0AD7A2F7-37BE-4F6A-9FD6-F6C81B2CAF36@gmail.com> Date: Wed, 18 Mar 2015 11:14:43 -0700 Message-ID: Subject: Re: register HID with SDP error From: Waitman Gobble To: Maksim Yevmenkin 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: Wed, 18 Mar 2015 18:14:46 -0000 On Wed, Mar 18, 2015 at 10:06 AM, Maksim Yevmenkin wrote: > Hello, > > [...] > >> I think I'm getting close, I finally have a good scan with bthidcontrol >> >> Note that bthidcontrol doesn't seem to connect after sdpd is restarted >> on the server, unless I do sdpcontrol browse first. > > hmm... i'm sorry, i do not follow. both bthidcontrol(8) and > sdpcontrol(8) are using exactly the same way to obtain sdp records. it > should not make any difference. > > >> #sdpcontrol -a 00:1b:dc:06:94:d3 browse > > [...] > >> # bthidcontrol -a 00:1b:dc:06:94:d3 query > > [...] > > this looks better to me. > >> latest version at https://github.com/waitman/sdpd/blob/master/hid.c > > thanks! i will take a look. few minor nits: attribute list must be > sorted. when generating protocol descriptor list and additional > protocol descriptor list, you may re-use one function, i.e. additional > protocol descriptor list is just a protocol descriptor list wrapped > into a sequence. you hardwired lots of hid related things. while its > ok for testing, i feel like it should be moved to parameters so > clients can set those up as needed. > >> I didn't see a "bool(8)" defined in sdp.h, I was thinking maybe it was >> the same as UINT8 but then I noticed Iain's post that showed a >> 'bool(8)' as 0x28 instead of 0x08, thank you. > > huh? from /usr/include/sdp.h > > /* Unsigned integer */ > #define SDP_DATA_UINT8 0x08 > > /* Boolean */ > #define SDP_DATA_BOOL 0x28 > > thanks, > max Max, I'm wrong on both accounts, I'm not sure why I missed the 0x28 definition before and I'm also not sure why yesterday it seemed that bthidcontrol was not connecting without first doing spdcontrol. But it's working today. Sorry about my mistake. I'm working on the hid code. It opens the l2cap control and interrupt sockets then waits for client connect. When the client connects it sends the key codes. very simply, struct sockaddr_l2cap l2addr, cli_addr; controlsock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BLUETOOTH_PROTO_L2CAP); bind(controlsock, (struct sockaddr *) &l2addr, sizeof(l2addr)); intrsock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BLUETOOTH_PROTO_L2CAP); bind(intrsock, (struct sockaddr *) &l2addr, sizeof(l2addr)); clilen = sizeof(cli_addr); newsockfd = accept(controlsock, (struct sockaddr *) &cli_addr, &clilen); //blocks until client connect then loop while reading chars from FIFO: evkeyb->btcode = 0xA1; evkeyb->rep_id = REPORTID_KEYBD; evkeyb->key[0] = retkey(sfifo[i]); //translate to key code send ( newsockfd, evkeyb,sizeof(struct hidrep_keyb_t),MSG_NOSIGNAL ); The client is connecting (seen in btsockstat) # btsockstat Active raw HCI sockets Socket PCB Flags Recv-Q Send-Q Local address fffff8003a505000 fffff8011a6bd180 000003 0 0 * fffff801554418b8 fffff80004765780 000002 0 0 * Active L2CAP sockets PCB Recv-Q Send-Q Local address/PSM Foreign address CID State fffff8000d2d7100 0 0 00:1b:dc:06:94:d3/19 00:10:60:af:5b:af 157 CLOSED fffff8000d0a4600 0 0 00:1b:dc:06:94:d3/17 00:10:60:af:5b:af 156 OPEN fffff8000d2d6000 0 0 * /19 * 0 LISTEN fffff8000d0a7500 0 0 * /17 * 0 LISTEN fffff801a19b8c00 0 0 * /1 * 0 LISTEN # ./hid_sppd control socket created interrupt socket created waiting for connect waiting for fifo.. press Control-C to exit. sent data 38 "key 0" sent data 29 "key 1" sent data 30 "key 2" sent data 31 "key 3" sent data 32 "key 4" ... ...and it's reading the fifo buffer and sending the keys through the clientfd, but nothing useful is happening on client.. So I think I'm either doing this wrong, or my SDP record is still incorrect. Thank you, -- Waitman Gobble Los Altos California USA 510-830-7975