make_gatt_services工具详细指南

需积分: 0 5 下载量 154 浏览量 更新于2024-08-05 收藏 860KB PDF 举报
"make_gatt_services工具是杰理科技有限公司提供的一款用于生成GATT服务配置文件的工具。此工具主要用于BLE(Bluetooth Low Energy)设备在SERVER角色中的GATT服务配置,帮助用户创建自定义的GATT服务结构。文档内容包括工具的修改历史、目录结构、使用说明以及Profile格式定义等。\n\n1. 修改日志:该工具的更新历程从1.00到1.20,不断进行完善和功能增强,例如增加了支持128位UUID的例子、新增了关键字GATT_HANDLE_BEGIN和CHARACTERISTIC_USER_DESCRIPTION等。\n\n2. 目录结构:工具的使用需要确保两个关键文件位于同一级目录下,暗示了工具可能依赖于特定的输入文件或配置文件来生成GATT服务配置。\n\n3. 使用说明:make_gatt_services工具的核心是Profile格式定义。GATT服务profile由一系列的蓝牙规范定义的元素构成,包括Services和Characteristics等,这些元素在Attribute中存储。用户需按照特定的格式定义Profile,以便工具能正确解析并生成相应的GATT配置。\n\n4. GATT Services Profile:GATT服务结构遵循蓝牙SIG的规范,Service是数据交互的基本单元,可以包含一个或多个Characteristics。Characteristics是服务中可读、可写或可通知的数据字段,可以带有额外的Descriptor,如用户描述符,用于提供对Characteristic的解释或用户界面的显示信息。\n\n5. 关键字:工具支持的关键字如GATT_HANDLE_BEGIN用于标识服务或特征的起始句柄,CHARACTERISTIC_USER_DESCRIPTION则与蓝牙规范中的用户描述符特性相关,允许为Characteristic提供人类可读的描述。\n\n6. 法律免责声明:文档中的所有信息都受到法律保护,未经许可禁止擅自复制或使用。\n\nmake_gatt_services工具是开发BLE设备服务配置的重要辅助工具,它简化了GATT服务的创建过程,使得开发者能够更方便地根据需求定制蓝牙设备的服务功能。用户需要了解蓝牙GATT规范,并按照工具的使用指南正确编写Profile文件,以生成有效的GATT配置。"

对以下代码进行注释并给出可复制代码static void ble_tp_notify_task(void *pvParameters) { int err = -1; char data[244] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09}; while(1) { err = bt_gatt_notify(ble_tp_conn, get_attr(BT_CHAR_BLE_TP_NOT_ATTR_VAL_INDEX), data, (tx_mtu_size - 3)); BT_WARN("ble tp send notify : %d", err); } } static void ble_tp_not_ccc_changed(const struct bt_gatt_attr attr, u16_t value) { int err; BT_WARN("ccc:value=[%d]",value); if(tp_start) { if(value == BT_GATT_CCC_NOTIFY) { if(xTaskCreate(ble_tp_notify_task, (char)"bletp", 256, NULL, TP_PRIO, &ble_tp_task_h) == pdPASS) { created_tp_task = 1; BT_WARN("Create throughput tx task success."); } else { created_tp_task = 0; BT_WARN("Create throughput tx task fail."); } } else { if(created_tp_task) { BT_WARN("Delete throughput tx task."); vTaskDelete(ble_tp_task_h); created_tp_task = 0; } } } else { if(created_tp_task) { BT_WARN("Delete throughput tx task."); vTaskDelete(ble_tp_task_h); created_tp_task = 0; } if(value == BT_GATT_CCC_NOTIFY) { err = bt_gatt_notify(ble_tp_conn, get_attr(BT_CHAR_BLE_TP_NOT_ATTR_VAL_INDEX), "notify", strlen("notify")); BT_WARN("ble tp send indatcate: %d", err); } } } static struct bt_gatt_attr attrs[]= { BT_GATT_PRIMARY_SERVICE(BT_UUID_SVC_BLE_TP), BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_TP_RD, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_tp_recv_rd, NULL, NULL), BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_TP_WR, BT_GATT_CHRC_WRITE |BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE|BT_GATT_PERM_PREPARE_WRITE, NULL, ble_tp_recv_wr, NULL), BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_TP_IND, BT_GATT_CHRC_INDICATE, 0, NULL, NULL, NULL), BT_GATT_CCC(ble_tp_ind_ccc_changed, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE), BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_TP_NOT, BT_GATT_CHRC_NOTIFY, 0, NULL, NULL, NULL), BT_GATT_CCC(ble_tp_not_ccc_changed, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE) };

205 浏览量