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