Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Mar 2015 18:19:13 -0700
From:      Waitman Gobble <gobble.wa@gmail.com>
To:        freebsd-bluetooth@freebsd.org
Subject:   Re: register HID with SDP error
Message-ID:  <CAFuo_fzB3A5L3vivH7Z80OEoBtVEHftEYE4LUkhnrkguzL5GDA@mail.gmail.com>
In-Reply-To: <CAFuo_fzdmB79qdoH8P5EcO_ZZoa=_id6h=eqFBXvP_a%2B3WMkLw@mail.gmail.com>
References:  <CAFuo_fy9xRU2T3GUPY8116yZCUd8sL9pBQ9ixXnMwO56niJFog@mail.gmail.com> <CAFuo_fzdmB79qdoH8P5EcO_ZZoa=_id6h=eqFBXvP_a%2B3WMkLw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Mar 15, 2015 at 4:48 PM, Waitman Gobble <gobble.wa@gmail.com> wrote:
> On Sun, Mar 15, 2015 at 7:58 AM, Waitman Gobble <gobble.wa@gmail.com> wrote:
>> Hi,
>>
>> I'm having trouble registering HID service with sdpd, here is a simple example:
>>
>>
>> sdp_sp_profile_t sp;
>> bdaddr_t bt_addr_any;
>> void *ss;
>> uint32_t sdp_handle;
>>
>> memcpy(&addr, NG_HCI_BDADDR_ANY, sizeof(addr));
>> memset(&sp, 0, sizeof(sp));
>> sp.server_channel = 0;
>>
>> ss = sdp_open_local(NULL);
>>
>> sdp_register_service(ss, SDP_SERVICE_CLASS_HUMAN_INTERFACE_DEVICE,
>>     &bt_addr_any, (void *)&sp, sizeof(sp),
>>     &sdp_handle);
>>
>>
>>
>> messages I am receiving:
>>
>> sdp_error(ss) is Input/output error (5)
>>
>> sdpd[6621]: Could not process SDP request from control socket,
>> pdu->pid=129, pdu->tid=1, pdu->len=12, len=17, error=3
>>
>>
>> I see /usr/src/usr.sbin/bluetooth/bthidd/ but I believe that's to
>> connect to remote HID services.
>>
>>
>> Also I went to the local electronics store and picked up every bt
>> dongle they had on the shelf. (it looks like v4 bt devices they have
>> use the CSR8510 chip despite the "brand name". but I also have v3, v2,
>> and v1 devices to test). Starting the bluetooth service always seems
>> to result in error for all the devices, however I can run sdpd and
>> also browse remote services and pair from client to server and
>> vice-versa, so I'm not exactly sure of the importance of the bluetooth
>> service?
>>
>> ubt0: <vendor 0x0a12 CSR8510 A10, class 224/1, rev 2.00/88.91, addr 5> on usbus0
>> ubt0: ubt_bulk_read_callback:977: bulk-in transfer failed: USB_ERR_IOERROR
>> ubt0: at uhub0, port 8, addr 5 (disconnected)
>> ubt0: <vendor 0x0a12 CSR8510 A10, class 224/1, rev 2.00/88.91, addr 6> on usbus0
>> ubt0: at uhub0, port 8, addr 6 (disconnected)
>> ubt0: <vendor 0x0a12 CSR8510 A10, class 224/1, rev 2.00/88.91, addr 7> on usbus0
>> ng_hci_process_command_timeout: ubt0hci - unable to complete HCI
>> command OGF=0x3, OCF=0x3. Timeout
>> ng_hci_process_command_timeout: ubt0hci - unable to complete HCI
>> command OGF=0x4, OCF=0x9. Timeout
>> ubt0: ubt_bulk_read_callback:977: bulk-in transfer failed: USB_ERR_IOERROR
>> ubt0: at uhub0, port 8, addr 7 (disconnected)
>> ubt0: <vendor 0x0a12 CSR8510 A10, class 224/1, rev 2.00/88.91, addr 8> on usbus0
>> ng_hci_process_command_timeout: ubt0hci - unable to complete HCI
>> command OGF=0x3, OCF=0x3. Timeout
>> ubt0: ubt_bulk_read_callback:977: bulk-in transfer failed: USB_ERR_IOERROR
>> ubt0: at uhub0, port 8, addr 8 (disconnected)
>> ubt0: <vendor 0x0a12 CSR8510 A10, class 224/1, rev 2.00/88.91, addr 9> on usbus0
>> ng_hci_process_command_complete: ubt0hci - HCI command failed,
>> OGF=0x1, OCF=0xe, status=0xc
>> ng_hci_process_command_complete: ubt0hci - HCI command failed,
>> OGF=0x1, OCF=0xe, status=0xc
>> ng_hci_process_command_complete: ubt0hci - HCI command failed,
>> OGF=0x1, OCF=0xe, status=0xc
>> ubt0: ubt_bulk_read_callback:977: bulk-in transfer failed: USB_ERR_IOERROR
>> ubt0: at uhub0, port 8, addr 9 (disconnected)
>> ubt0: <vendor 0x0a12 CSR8510 A10, class 224/1, rev 2.00/88.91, addr
>> 10> on usbus0
>> ubt0: ubt_bulk_read_callback:977: bulk-in transfer failed: USB_ERR_IOERROR
>> ubt0: at uhub0, port 8, addr 10 (disconnected)
>> ubt0: <vendor 0x0a12 product 0x0001, class 224/1, rev 2.00/48.39, addr
>> 11> on usbus0
>> ubt0: ubt_bulk_read_callback:977: bulk-in transfer failed: USB_ERR_IOERROR
>> ubt0: at uhub0, port 8, addr 11 (disconnected)
>> ubt0: <vendor 0x0a12 product 0x0001, class 224/1, rev 2.00/48.39, addr
>> 12> on usbus0
>>
>>
>>
>> Thank you for any pointers, help, comments.
>>
>> --
>> Waitman Gobble
>> Los Altos, California USA
>> 510-830-7975
>
>
> it 'seems like' the problem is that there is no corresponding profile
> implemented in sdpd,
>
> ie, /usr/src/usr.sbin/bluetooth/sdpd/profile.c
>
> profile_p profile_get_descriptor(uint16_t uuid) { ... }
>
> When I issue a request to register
> SDP_SERVICE_CLASS_HUMAN_INTERFACE_DEVICE  it's looking for profile
> with uuid (base10) 4388 (0x1124), but
> 4355,4358,4356,4359,4354,4357,4353,4374,4375,4373  are the only ones
> defined in that function.
>
>
> --
> Waitman Gobble
> Los Altos California USA
> 510-830-7975


It's not 100% correct yet but I did have some luck making a hid
profile in sdpd, shows up in sdpcontrol local browse. So, it 'appears'
.

https://github.com/waitman/sdpd


 Now on to make it actually work as it's supposed to :)


# sdpcontrol -l browse

Record Handle: 00000000
Service Class ID List:
        Service Discovery Server (0x1000)
Protocol Descriptor List:
        L2CAP (0x0100)
        SDP (0x0001)
Bluetooth Profile Descriptor List:
        Service Discovery Server (0x1000) ver. 1.0

Record Handle: 0x00000001
Service Class ID List:
        Browse Group Descriptor (0x1001)

Record Handle: 0x00000002
Service Class ID List:
        Human Interface Device (0x1124)
Bluetooth Profile Descriptor List:
        Human Interface Device (0x1124) ver. 1.0



-- 
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_fzB3A5L3vivH7Z80OEoBtVEHftEYE4LUkhnrkguzL5GDA>