Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 Mar 2015 12:35:30 -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_fwELvi9zK4y5fVvASdobwhCp9y%2BQGv7k4-MgFR5FMYn9g@mail.gmail.com>
In-Reply-To: <CAFuo_fzYPTKHCmk9c1KbSvGUJ=dbX3Dd7jEZgenEOkEhv%2BXNEg@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> <CAFuo_fz-hZ9WXX1Uvc-vEwTMrPeyakGsStTkS6RGEzwMTh%2BsUw@mail.gmail.com> <77352B43-637C-4E0D-B4CC-B42D977551F6@gmail.com> <CAFuo_fyHmY%2BO6uN4DkBoHr99=X3PN2gzL0gZ6EyrZfkRL8MWBw@mail.gmail.com> <CAFPOs6o7fSh=-Jossgo_nLLz5iPpZA%2BGX%2BvxH7bezdQSk1_j-w@mail.gmail.com> <CAFuo_fxME%2B9-bA6KWG4pjokAZhfEeMGptMw-H3z=eb%2B9KHGhug@mail.gmail.com> <CAFuo_fzYPTKHCmk9c1KbSvGUJ=dbX3Dd7jEZgenEOkEhv%2BXNEg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Mar 21, 2015 at 12:00 PM, Waitman Gobble <gobble.wa@gmail.com> wrote:
> On Sat, Mar 21, 2015 at 11:16 AM, Waitman Gobble <gobble.wa@gmail.com> wrote:
>> On Sat, Mar 21, 2015 at 11:02 AM, Maksim Yevmenkin
>> <maksim.yevmenkin@gmail.com> wrote:
>>> [...]
>>>
>>>> Hey, that works! Thank you.
>>>>
>>>> hccontrol Write_Class_Of_Device 02:50:40
>>>
>>> great! as i said, you can also automate it. please read
>>> bluetooth.device.conf(5). in your case you will need to create
>>> /etc/bluetooth/ubt0.conf and add
>>>
>>> class="02:50:40"
>>>
>>> this way class will be applied every time you start ubt0 device.
>>>
>>>> so now I have to figure out how to send the PIN that the connecting
>>>> device demands to receive. I suppose it's sending 0000. But it appears
>>>> there has to be a human action in this case.
>>>
>>> you have a couple of options here:
>>>
>>> (1) use hcsecd(8). since you want to pair with any host (because your
>>> code implements device) you can use default entry. please read
>>> hcsecd.conf(5) for more details.
>>>
>>>     device {
>>>              bdaddr  00:00:00:00:00:00;
>>>              name    "Default entry";
>>>              key     nokey;
>>>              pin     "0000";
>>>      }
>>>
>>> something like this might work;
>>>
>>> (2) write your own code. basically, you want to open raw HCI socket
>>> and listen for PIN code and link key requests and events. hcsecd(8)
>>> source code can be used as reference;
>>>
>>> thanks,
>>> max
>>
>> Max,
>>
>> I modified hcsecd a little. if you set the pin to "PROMPT" in hcsecd
>> it blocks on reading a FIFO at /tmp/pinprompt
>>
>> https://github.com/waitman/hcsecd
>>
>>
>> echo "835753" > /tmp/pinprompt
>>
>> it adds "enter key" 0x0D at the end so that device will continue.
>> Otherwise it sits there until the end of time, I think? I obviously
>> didn't wait until the end of time, but my android phone went way past
>> the timeout without the 'enter key' appended to the pin string.
>>
>> if you want PIN reply on some devices and PROMPT on others, that can
>> be an issue.
>>
>> looks like it works,but only tested like 10 times.
>>
>>
>> #define FIFO_NAME "/tmp/pinprompt"
>> ...
>> char newpin[16];
>> ...
>>
>> strncpy(newpin,pin,strlen(pin));
>> if (strcmp("PROMPT",pin)==0)
>> {
>>    char sfifo[300];
>>    int numfifo, fdfifo;
>>    mknod(FIFO_NAME, S_IFIFO | 0666, 0);
>>    fdfifo = open(FIFO_NAME, O_RDONLY);
>>    do {
>> if ((numfifo = read(fdfifo, sfifo, 300)) == -1)
>> {
>>  /* oh no */
>> } else {
>>  //syslog(LOG_DEBUG,"%s pincode entered",sfifo);
>> }
>>    } while (numfifo>0);
>>
>>    sfifo[strlen(sfifo)-1] = 0x0D; /* enter key */
>>    sfifo[strlen(sfifo)-1] = '\0';
>>    strncpy(newpin,sfifo,strlen(sfifo));
>> }
>>  ng_hci_pin_code_rep_cp *cp = NULL;
>>
>>  cmd->opcode = htole16(NG_HCI_OPCODE(NG_HCI_OGF_LINK_CONTROL,
>> NG_HCI_OCF_PIN_CODE_REP));
>>  cmd->length = sizeof(*cp);
>>
>>  cp = (ng_hci_pin_code_rep_cp *)(cmd + 1);
>>  memcpy(&cp->bdaddr, bdaddr, sizeof(cp->bdaddr));
>>  strncpy(cp->pin, newpin, strlen(newpin));
>>  cp->pin_size = strlen((char const *) cp->pin);
>>  syslog(LOG_DEBUG, "Sending PIN_Code_Reply to '%s' " \
>> "for remote bdaddr %s",
>> addr->hci_node, bt_ntoa(bdaddr, NULL));
>>
>>
>>
>> --
>> Waitman Gobble
>> Los Altos California USA
>> 510-830-7975
>
>
> correction, should be newpin[32], or maybe more.. MS windows asks for
> a longer pincode.
>
> --
> Waitman Gobble
> Los Altos California USA
> 510-830-7975

ok this is now tested to work on Android phone, bluedevil/KDE on a
GNU/Linux machine, an MS Windows 8.1 machine and an Apple OS X
machine. I don't have an Iphone but I suppose it should work.

The problem was when pairing a bluetooth keyboard on Android, it
demands to have the pin code entered 'manually' on the keyboard. Other
systems it looks like this is an option.

For example, on Apple OS X, pairing with the bt device on the FreeBSD
machine, there is a prompt displayed to "enter a pin code that is
displayed on the screen". "6450 3430"

so on the FreeBSD machine,

# echo "64503430" > /tmp/pinprompt

Then the Apple machine pairs to the FreeBSD device.

Maybe it's not so useful to have in FreeBSD source, but might be
helpful to some people browsing the mailing list archives.



-- 
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_fwELvi9zK4y5fVvASdobwhCp9y%2BQGv7k4-MgFR5FMYn9g>