This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Added Peer Manage to ble_app_blinky

Hi All,

I want to add pairing and binding functions to the blinky project.

But nothing happens when I connect.

Please help me,thank you.

Here is my project => Lab10_PeerManager_pairing.zip

I'm using SDK v17.1.0

Best regards,

Kai

  • Hi Kai,

    I tested your project briefly (just connecting and pairing) and that seems to work as expected. With the unmodified project, I connect, and then the nRF initiates pairing and that proceeds successfully when I test with an iPhone with the nRF Connect app.

    After commenting out the call to pm_conn_secure() the nRF no longer initiates pairing, so that is now up to the central. iOS only pairs when needed (after not being allowed to access a characteristic due to too low security level). So in order to make the iPhone pair I did a small change to your LBS service so that reading or writing to the button or LED requires security, and thus makes the iPhone pair:

    diff --git a/ble_lbs/ble_lbs.c b/ble_lbs/ble_lbs.c
    index f2a72f9..c255ede 100644
    --- a/ble_lbs/ble_lbs.c
    +++ b/ble_lbs/ble_lbs.c
    @@ -107,8 +107,8 @@ uint32_t ble_lbs_init(ble_lbs_t * p_lbs, const ble_lbs_init_t * p_lbs_init)
         add_char_params.char_props.read   = 1;
         add_char_params.char_props.notify = 1;
     
    -    add_char_params.read_access       = SEC_OPEN;
    -    add_char_params.cccd_write_access = SEC_OPEN;
    +    add_char_params.read_access       = SEC_JUST_WORKS;
    +    add_char_params.cccd_write_access = SEC_JUST_WORKS;
     
         err_code = characteristic_add(p_lbs->service_handle,
                                       &add_char_params,
    @@ -127,8 +127,8 @@ uint32_t ble_lbs_init(ble_lbs_t * p_lbs, const ble_lbs_init_t * p_lbs_init)
         add_char_params.char_props.read  = 1;
         add_char_params.char_props.write = 1;
     
    -    add_char_params.read_access  = SEC_OPEN;
    -    add_char_params.write_access = SEC_OPEN;
    +    add_char_params.read_access  = SEC_JUST_WORKS;
    +    add_char_params.write_access = SEC_JUST_WORKS;
     
         return characteristic_add(p_lbs->service_handle, &add_char_params, &p_lbs->led_char_handles);
     }
    

    (This change is not needed when using Android or nRF Connect for Desktop, where you can force pairing as you like).

  • Hi Einar,

    I'm using Android.

    (This change is not needed when using Android or nRF Connect for Desktop, where you can force pairing as you like).

    It cannot match.

  • I am not able to see any issue in that case. Can you try to explain with words what the problem is, how you test and in what way it does not work?

  • Hi Einar,

    So in order to make the iPhone pair I did a small change to your LBS service so that reading or writing to the button or LED requires security, and thus makes the iPhone pair:

    I tested it not long ago, and Android also needs this setting to have the pairing function appear.

    Now my doubts are resolved, but there is still one question I don't understand.

    Why does pm_conn_secure() need to be paired twice?

  • Hi,

    kai19960504 said:
    I tested it not long ago, and Android also needs this setting to have the pairing function appear.

    It needs it for pairing to appear automatically, yes (because it needs to be initiated form one side, and if the phone does not do it one way or another, the nRF must). But pairing works regardless, just that it must be initiated in a different way. Also, there is not much point in pairing without also requiring security on some characteristics.

    kai19960504 said:
    Why does pm_conn_secure() need to be paired twice?

    What do you mean? The function just initiates pairing, it works the same every time (that said, if bonded already, it will just initiate encryption of the link using existing key. If not bonded, it will initiate pairing).

Related