I've experimented some more. If I declare a characteristic with the
BLE_GATT_CHR_F_XXX_ENC flags, then accessing that characteristic
prompts me for a pin code, and if I connect from a previously bonded
profile, then no pin is requested (as expected). So this seems to work
fine, in that I can pin code-protect certain characteristics of a
service and require a pin to access them. However, is it possible to
pin code-protect connections from the advertising stage? Because at
the moment, any device can connect to and query the services and
characteristics of the end device.

Amr
On Tue, 10 Jul 2018 at 10:12, Amr Bekhit <amrbek...@gmail.com> wrote:
>
> Hi Andrzej,
>
> Thank you - that does indeed work.
>
> I have another question. Bonding now works (i.e. using the nRF52
> Connect app on Android, I connect to the advertising end device and
> then bond with it to save the credentials), however I would also like
> to configure the end device so that it requires a pin when connecting
> to the advertising device. How would this be realised using Nimble?
>
> Thanks
>
> Amr
> On Tue, 10 Jul 2018 at 00:50, Andrzej Kaczmarek
> <andrzej.kaczma...@codecoup.pl> wrote:
> >
> > Hi,
> >
> > You code looks ok. However, I noticed strange thing when testing with
> > Android phone on my side: pairing fails if specified passkey has less
> > than 6 digits (i.e. <100000). This does not seem to be issue in NimBLE
> > since the same happens when trying to pair Android with BlueZ while
> > pairing between NimBLE and BlueZ works just fine. Looks like some
> > issue in Android LE SC implementation tbh...
> >
> > So please try with 6 digits passkey (i.e. >=100000) and it should work.
> >
> > Best,
> > Andrzej
> >
> >
> > On Mon, Jul 9, 2018 at 12:08 PM Amr Bekhit <amrbek...@gmail.com> wrote:
> > >
> > > Hi Andrzej,
> > >
> > > Below is my GAP event callback function and the console output when I
> > > attempt to bond with my device (I'm using the Nordic nRF Connect app
> > > on my phone to interact with the device):
> > >
> > > static int bleprph_gap_event(struct ble_gap_event *event, void *arg) {
> > >     int rc = 0;
> > >
> > >     switch(event->type) {
> > >         case BLE_GAP_EVENT_CONNECT:
> > >             console_printf("Connected\n");
> > >             break;
> > >
> > >         case BLE_GAP_EVENT_DISCONNECT:
> > >             console_printf("Disconnected\n");
> > >             ble_advertise();
> > >             break;
> > >
> > >         case BLE_GAP_EVENT_CONN_UPDATE:
> > >             console_printf("Connection updated\n");
> > >             break;
> > >
> > >         case BLE_GAP_EVENT_CONN_UPDATE_REQ:
> > >             console_printf("Connection update requested\n");
> > >             break;
> > >
> > >         case BLE_GAP_EVENT_PASSKEY_ACTION: {
> > >             console_printf("Passkey Request. Action: %d, Numcmp: %lu\n",
> > >                 event->passkey.params.action,
> > >                 event->passkey.params.numcmp);
> > >
> > >             if (event->passkey.params.action == BLE_SM_IOACT_DISP) {
> > >                 struct ble_sm_io pk;
> > >                 pk.action = event->passkey.params.action;
> > >                 pk.passkey = 4539;
> > >                 rc = ble_sm_inject_io(event->passkey.conn_handle, &pk);
> > >                 console_printf("ble_sm_inject_io result: %d\n", rc);
> > >             }
> > >             break;
> > >         }
> > >
> > >         default:
> > >             console_printf("GAP Event: %i\n", event->type);
> > >     }
> > >
> > >     return rc;
> > > }
> > >
> > > 001039 Passkey Request. Action: 3, Numcmp: 0
> > > 001040 ble_sm_inject_io result: 0
> > > 001639 GAP Event: 10
> > > 002037 Connection updated
> > > 002037 Disconnected
> > >
> > > On the phone, I get requested for a pin number and I enter 4539. After
> > > that, the end device just disconnects from the bluetooth.

Reply via email to