Bluetooth LE OOB records

A Bluetooth LE device that has an NFC interface (a tag or a polling device) can use NFC to send or receive data required for connecting and pairing in the Bluetooth domain. This data should be presented in the form of a Bluetooth LE pairing message.

A Bluetooth LE pairing message that works with Android devices contains one Bluetooth LE OOB record. This record contains the Bluetooth LE advertising data structure with information that is used to establish the connection and pair.

The following Bluetooth LE pairing methods can be used in combination with this module:

Legacy and LE Secure Connections Just Works pairing

The NDEF record contains basic advertising data such as device name, address, and role. In this case, pairing over NFC does not provide MITM protection - the only advantage is automation of pairing through NFC touch.

LE Secure Connections pairing with OOB data

The NDEF record contains two additional data types that are used for OOB authentication: Confirmation Value and Random Value. In this case, pairing MITM protection is considered as strong as the MITM protection of NFC.

For more information about NFC Connection Handover pairing methods, refer to Bluetooth Secure Simple Pairing Using NFC and the Bluetooth Core Specification Volume 3 Part H Chapter 2.

The Bluetooth LE OOB record is used in the Bluetooth: Peripheral HIDS keyboard sample.

API documentation

Header file: include/nfc/ndef/le_oob_rec.h
Source file: subsys/nfc/ndef/le_oob_rec.c
group nfc_ndef_le_oob_rec

Generation of NFC NDEF LE OOB records for NDEF messages.

Defines

NFC_NDEF_LE_OOB_REC_TK_LEN

Temporary Key length.

NFC_NDEF_LE_OOB_REC_APPEARANCE(value)

Macro for including Appearance BLE AD Type to the nfc_ndef_le_oob_rec_payload_desc descriptor.

NFC_NDEF_LE_OOB_REC_FLAGS(value)

Macro for including Flags BLE AD Type to the nfc_ndef_le_oob_rec_payload_desc descriptor.

NFC_NDEF_LE_OOB_REC_LE_ROLE(value)

Macro for including LE Role BLE AD Type to the nfc_ndef_le_oob_rec_payload_desc descriptor.

NFC_NDEF_LE_OOB_RECORD_DESC_DEF(name, payload_id, payload_desc)

Generate a description of an NFC NDEF Bluetooth Carrier Configuration LE Record.

This macro declares and initializes an instance of an NFC NDEF record description for a Bluetooth Carrier Configuration LE record.

Note

The record descriptor is declared as automatic variable, which implies that the NDEF message encoding must be done in the same variable scope.

Parameters
  • name: Name for accessing the record descriptor.

  • payload_id: NDEF record header Payload ID field (limited to one byte). If 0, no ID is present in the record description.

  • payload_desc: Pointer to the description of the payload. This data is used to create the record payload.

NFC_NDEF_LE_OOB_RECORD_DESC(NAME)

Macro for accessing the NFC NDEF Bluetooth Carrier Configuration LE record descriptor instance that was created with NFC_NDEF_LE_OOB_RECORD_DESC_DEF.

Enums

enum nfc_ndef_le_oob_rec_le_role

LE role options.

Values:

enumerator NFC_NDEF_LE_OOB_REC_LE_ROLE_PERIPH_ONLY

Only Peripheral role supported.

enumerator NFC_NDEF_LE_OOB_REC_LE_ROLE_CENTRAL_ONLY

Only Central role supported.

enumerator NFC_NDEF_LE_OOB_REC_LE_ROLE_PERIPH_PREFFERED

Peripheral and Central roles supported. Peripheral role preferred for connection establishment.

enumerator NFC_NDEF_LE_OOB_REC_LE_ROLE_CENTRAL_PREFFERED

Peripheral and Central roles supported. Central role preferred for connection establishment.

enumerator NFC_NDEF_LE_OOB_REC_LE_ROLE_OPTIONS_NUM

Total number of options.

Functions

int nfc_ndef_le_oob_rec_payload_constructor(const struct nfc_ndef_le_oob_rec_payload_desc *payload_desc, uint8_t *buff, uint32_t *len)

Construct the payload for a Bluetooth Carrier Configuration LE Record.

This function encodes the record payload according to the payload descriptor. It implements an API compatible with payload_constructor_t.

Parameters
  • payload_desc: Pointer to the description of the payload.

  • buff: Pointer to payload destination. If NULL, function will calculate the expected size of the record payload.

  • len: Size of available memory to write as input. Size of generated payload as output.

Return Value
  • 0: If the payload was encoded successfully.

  • -EINVAL: If parameters in the payload descriptor are invalid or missing.

  • -ENOMEM: If the predicted payload size is bigger than the provided buffer space.

struct nfc_ndef_le_oob_rec_payload_desc
#include <le_oob_rec.h>

LE OOB record payload descriptor.