This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Zephyr/NCS BLE Central accepting fixed passkey

Hi,

I have successfully created a BT Peripheral which uses a static/fixed passkey upon connection with my phone (nrf connect mobile) or using the nrf52840 dongle. When I connect with the peripheral, I am prompted for the passkey on my phone or desktop and succedes to connect after writing the same "123456" passkey every time.

What I am struggling with, however, is how to connect to the peripheral with a Zephyr/NCS Central using the fixed passkey. Could you please aid me in getting this to work?

My Peripherals auth connection callback struct looks like:

static struct bt_conn_auth_cb auth_cb = {
	.cancel = auth_cancel,
	.passkey_display = auth_passkey_display,
	.pairing_confirm = NULL,
	.pairing_complete = pairing_complete,
	.pairing_failed = pairing_failed,
};

and my Centrals auth connection callback struct looks like:

static struct bt_conn_auth_cb conn_auth_callbacks = {
    .cancel = auth_cancel,
    .pairing_confirm = NULL,
	.passkey_confirm = passkey_confirm,
    .pairing_complete = pairing_complete,
    .pairing_failed = pairing_failed};

I though perhaps the Central would accept the Peripherals fixed passkey through:

static void passkey_confirm(struct bt_conn *conn, unsigned int passkey) {
	char addr[BT_ADDR_LE_STR_LEN];

  bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));

  int err;
  unsigned int fixed_passkey = 123456;
  if (passkey == fixed_passkey)
  {
    err = bt_conn_auth_passkey_confirm(conn);
    if (err)
    {
      printk("failed to confirm passkey, err: %d\n", err);
    }
  }
}

But that doesn't work. Any suggestions?

Thanks a lot in advance!

Best regards,

Jonas

Parents Reply Children
No Data
Related