NRF SDK宏SERVICE_UUID_BASE的用法
时间: 2023-10-10 11:05:27 浏览: 120
NRF SDK中的宏SERVICE_UUID_BASE用于定义BLE服务的UUID基础值。在创建BLE服务时,可以使用此基础值与一个特定的16位UUID值(例如0x180D,表示心率服务)相加得到完整的128位UUID值。
以下是使用SERVICE_UUID_BASE的示例代码:
```
#define SERVICE_UUID_BASE {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, \
0x12, 0x34, 0x56, 0x78, 0x00, 0x00, 0x00, 0x00}
// Create a new BLE service with UUID 0x180D (Heart Rate)
ble_uuid_t service_uuid;
service_uuid.uuid = BLE_UUID_HEART_RATE_SERVICE;
service_uuid.type = BLE_UUID_TYPE_BLE;
// Combine the service UUID with the base UUID to get the full 128-bit UUID
ble_uuid128_t full_uuid;
memcpy(full_uuid.uuid128, SERVICE_UUID_BASE, sizeof(SERVICE_UUID_BASE));
memcpy(full_uuid.uuid128 + 12, &service_uuid.uuid, sizeof(service_uuid.uuid));
// Now use the full UUID to create the BLE service
err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &full_uuid, &service_handle);
```
在上面的代码中,首先定义了一个常量SERVICE_UUID_BASE,它是一个长度为16字节的字节数组。这个数组包含了UUID的前12个字节,最后4个字节留空,以便在创建BLE服务时与16位的UUID值相加。
接下来,创建一个表示心率服务的ble_uuid_t结构体,并将其类型设置为BLE_UUID_TYPE_BLE。
然后,将SERVICE_UUID_BASE复制到一个新的128位UUID值中,并将心率服务的16位UUID值复制到新UUID的最后2个字节中。
最后,使用新的完整UUID值创建BLE服务。
总之,SERVICE_UUID_BASE宏用于定义BLE服务的UUID基础值,可以与特定的16位UUID值相加得到完整的128位UUID值。
阅读全文