Connection Handover messages and records
Connection Handover records and the corresponding messages are used to negotiate and activate an alternative communication carrier. The negotiated communication carrier can then be used to perform certain activities between the two devices, such as Bluetooth® pairing.
Connection Handover records
The Connection Handover library provides functions for creating and encoding the following Connection Handover records:
Handover Request record
Handover Select record
Handover Mediation record
Handover Initiate record
Handover Carrier record
Local records:
Alternative Carrier record
Collision Resolution record
Connection Handover messages
The Connection Handover message library provides functions for encoding the following messages:
Bluetooth LE OOB message
Handover Select message
Handover Request message
Handover Mediation message
Handover Initiate message
The following code sample from the Bluetooth: NFC pairing sample demonstrates how to create a Handover Select message with one Alternative Carrier record that has a reference to the Bluetooth LE OOB record:
static int pairing_msg_generate(uint32_t *len)
{
int err;
struct nfc_ndef_le_oob_rec_payload_desc rec_payload = {0};
struct nfc_ndef_ch_msg_records ch_records;
uint32_t ndef_size = nfc_t4t_ndef_file_msg_size_get(*len);
NFC_NDEF_MSG_DEF(hs_msg, 2);
rec_payload.addr = &oob_local->addr;
rec_payload.le_sc_data = oob_local;
rec_payload.tk_value = tk_value;
rec_payload.local_name = device_name;
rec_payload.le_role = NFC_NDEF_LE_OOB_REC_LE_ROLE(
NFC_NDEF_LE_OOB_REC_LE_ROLE_PERIPH_ONLY);
rec_payload.flags = NFC_NDEF_LE_OOB_REC_FLAGS(BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED);
NFC_NDEF_LE_OOB_RECORD_DESC_DEF(oob_rec, '0', &rec_payload);
NFC_NDEF_CH_AC_RECORD_DESC_DEF(oob_ac, NFC_AC_CPS_ACTIVE, 1, "0", 0);
NFC_NDEF_CH_HS_RECORD_DESC_DEF(hs_rec, NFC_NDEF_CH_MSG_MAJOR_VER,
NFC_NDEF_CH_MSG_MINOR_VER, 1);
ch_records.ac = &NFC_NDEF_CH_AC_RECORD_DESC(oob_ac);
ch_records.carrier = &NFC_NDEF_LE_OOB_RECORD_DESC(oob_rec);
ch_records.cnt = 1;
err = nfc_ndef_ch_msg_hs_create(&NFC_NDEF_MSG(hs_msg),
&NFC_NDEF_CH_RECORD_DESC(hs_rec),
&ch_records);
if (err) {
return err;
}
err = nfc_ndef_msg_encode(&NFC_NDEF_MSG(hs_msg),
nfc_t4t_ndef_file_msg_get(ndef_msg_buf),
&ndef_size);
if (err) {
return err;
}
err = nfc_t4t_ndef_file_encode(ndef_msg_buf, &ndef_size);
if (err) {
return err;
}
*len = ndef_size;
return 0;
}
API documentation
Connection Handover records
bm/nfc/ndef/ch.hsubsys/nfc/ndef/ch.cConnection Handover messages
bm/nfc/ndef/ch_msg.hsubsys/nfc/ndef/ch_msg.c