I've just updated from nRF Connect v1.9.1 to V2.0.0. In my bluetooth code that worked in the older version, I setup a couple of callbacks for BLE pairing:
static void pairing_complete(struct bt_conn *conn, bool bonded)
{
char addr[BT_ADDR_LE_STR_LEN];
bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));
#ifdef DEBUG
printk("Pairing completed: %s, bonded: %d\n", addr, bonded);
#endif
}
static void pairing_failed(struct bt_conn *conn, enum bt_security_err reason)
{
char addr[BT_ADDR_LE_STR_LEN];
bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));
#ifdef DEBUG_BLE
printk("Pairing failed conn: %s, reason %d\n", addr, reason);
#endif
bt_conn_disconnect(conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN);
}
static struct bt_conn_auth_cb conn_auth_callbacks = {
.cancel = auth_cancel,
.pairing_complete = pairing_complete,
.pairing_failed = pairing_failed
};
In v2.0.0, I'm getting build errors in my call-back definition:
c:\Nordic\Development\LSR-MAX\LSR-MAX_V0_09\src\ble_config.c:266:3: error: 'struct bt_conn_auth_cb' has no member named 'pairing_complete'
266 | .pairing_complete = pairing_complete,
| ^~~~~~~~~~~~~~~~
c:\Nordic\Development\LSR-MAX\LSR-MAX_V0_09\src\ble_config.c:266:22: warning: initialization of 'void (*)(struct bt_conn *)' from incompatible pointer type 'void (*)(struct bt_conn *, _Bool)' [-Wincompatible-pointer-types]
266 | .pairing_complete = pairing_complete,
| ^~~~~~~~~~~~~~~~
c:\Nordic\Development\LSR-MAX\LSR-MAX_V0_09\src\ble_config.c:266:22: note: (near initialization for 'conn_auth_callbacks.pairing_confirm')
c:\Nordic\Development\LSR-MAX\LSR-MAX_V0_09\src\ble_config.c:267:3: error: 'struct bt_conn_auth_cb' has no member named 'pairing_failed'
267 | .pairing_failed = pairing_failed
| ^~~~~~~~~~~~~~
c:\Nordic\Development\LSR-MAX\LSR-MAX_V0_09\src\ble_config.c:267:20: warning: excess elements in struct initializer
267 | .pairing_failed = pairing_failed
| ^~~~~~~~~~~~~~
c:\Nordic\Development\LSR-MAX\LSR-MAX_V0_09\src\ble_config.c:267:20: note: (near initialization for 'conn_auth_callbacks')
The struct 'bt_conn_auth_cb' is defined in ...v2.0.0/zephyr/include/zephyr/bluetooth/conn.h, and I can confirm from this that is does indeed include the two elements .pairing_failed and .pairing_complete. I include this header in my code via:
#include <bluetooth/conn.h>
It all worked seemelessly in v1.9.1, but something has changed in v2.0.0 to cause it to fall over.
Anyone got any ideas?
Cheers,
Mike