Nordic如何将服务特征的UUID设置为128位?

项目设计中,通常服务UUID为128bit,特征的UUID只修改服务UUID中的两个字节,其余字节保持不变;而一些特殊项目中会要求特征的UUID是与服务UUID完全不同的128bit的值,本片文章便是说明在Nordic中,是如何修改来达到这个目的的。
(注:本文讲解使用协议栈为:SDK17.0.2;主控为:NRF52840
使用其他版本的协议栈与主控时,修改方式略有不同,思路是一样的)
步骤一:
在添加新的特征值之前重新添加一次UUID,如下图所示 在这里插入图片描述
其中BLE_UUID_RX_CHAR_BASE是重新定义的特征的UUID(128bit),如:
#define BLE_UUID_RX_CHAR_BASE {0xE2, 0xFF, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x00, 0x00, 0x01, 0x00}

步骤二:
修改Option for target中的Target选项卡下的IRAM1的起始位置与大小,原则就是修改了一个特征的UUID,则相对的起始位置+0x10,大小-0x10,如下图:
在这里插入图片描述

步骤三:
修改宏定义NRF_SDH_BLE_VS_UUID_COUNT,原则就是修改了一个特征的UUID,宏定义在原有基础上+1,如下图:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用sd_ble_gattc_discover_primary_services()函数发现远程设备私有服务列表的示例代码: ```c #define BLE_UUID_PRIVATE_SERVICE 0x1234 // 假设私有服务UUID为0x1234 static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID; // 保存连接句柄的全局变量 // 定义事件处理程序 static void on_gattc_evt(ble_gattc_evt_t const * p_evt) { switch (p_evt->evt_id) { case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP: // 发现主服务的响应事件 { // 遍历服务列表,查找私有服务 for (uint32_t i = 0; i < p_evt->params.prim_srvc_disc_rsp.count; i++) { if (p_evt->params.prim_srvc_disc_rsp.services[i].uuid.uuid == BLE_UUID_PRIVATE_SERVICE) { // 找到私有服务了,做相应的处理 // ... } } break; } // 其他事件处理 // ... } } // 发现远程设备的主服务列表 void discover_remote_services(uint16_t conn_handle) { ret_code_t err_code; ble_uuid_t srvc_uuid; uint8_t start_handle = 0; m_conn_handle = conn_handle; // 保存连接句柄 // 设置要发现的服务UUID srvc_uuid.type = BLE_UUID_TYPE_BLE; srvc_uuid.uuid = BLE_UUID_PRIVATE_SERVICE; // 发现主服务 err_code = sd_ble_gattc_primary_services_discover(m_conn_handle, start_handle, &srvc_uuid); if (err_code != NRF_SUCCESS) { // 发现服务失败,做相应的处理 // ... } } ``` 在上述代码中,我们定义了一个私有服务UUID(假设为0x1234),然后在discover_remote_services()函数中调用了sd_ble_gattc_primary_services_discover()函数发现远程设备的主服务列表。当发现主服务的响应事件BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP被触发时,我们遍历服务列表,查找是否有UUID为0x1234的私有服务。如果找到私有服务,则做相应的处理。这里的具体处理逻辑可以根据实际需求自行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值