蓝牙学习笔记(五)——AC692x_BLE工具make_gatt_services

前言:这篇文章用来记录AC692x_SDK工具中make_gatt_services工具的使用以及后续同步到代码中的步骤。


服务和规范

  低功耗蓝牙使用了一种截然不同的方法来明确设备对自身的行为定义,它采用了纯粹的“客户端——服务器”结构,针对不同的用例对服务器和客户端的行为单独进行描述。在le_server_module.h中定义了规范数组profile_datda,它包含了定义的特征的UUID和句柄:

const uint8_t profile_data[] = 
{
     
    //
    //
    // 0x0001 PRIMARY_SERVICE  1800
    //
    //
    0x0a, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28, 0x00, 0x18,

     /* CHARACTERISTIC,  2A00, READ | DYNAMIC, */
    // 0x0002 CHARACTERISTIC 2A00 READ | DYNAMIC 
    0x0d, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28, 0x02, 0x03, 0x00, 0x00, 0x2a,
    // 0x0003 VALUE 2A00 READ | DYNAMIC  
    0x08, 0x00, 0x02, 0x01, 0x03, 0x00, 0x00, 0x2a,

    //
    //
    // 0x0004 PRIMARY_SERVICE  2B00
    //
    //
    0x0a, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28, 0x00, 0x2b,

     /* CHARACTERISTIC,  2B10, NOTIFY | READ | DYNAMIC, */
    // 0x0005 CHARACTERISTIC 2B10 NOTIFY | READ | DYNAMIC 
    0x0d, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28, 0x12, 0x06, 0x00, 0x10, 0x2b,
    // 0x0006 VALUE 2B10 NOTIFY | READ | DYNAMIC  
    0x08, 0x00, 0x12, 0x01, 0x06, 0x00, 0x10, 0x2b,
    // 0x0007 CLIENT_CHARACTERISTIC_CONFIGURATION 
    0x0a, 0x00, 0x0a, 0x01, 0x07, 0x00, 0x02, 0x29, 0x00, 0x00,

     /* CHARACTERISTIC,  2B11, WRITE_WITHOUT_RESPONSE | DYNAMIC, */
    // 0x0008 CHARACTERISTIC 2B11 WRITE_WITHOUT_RESPONSE | DYNAMIC 
    0x0d, 0x00, 0x02, 0x00, 0x08, 0x00, 0x03, 0x28, 0x04, 0x09, 0x00, 0x11, 0x2b,
    // 0x0009 VALUE 2B11 WRITE_WITHOUT_RESPONSE | DYNAMIC  
    0x08, 0x00, 0x04, 0x01, 0x09, 0x00, 0x11, 0x2b,

    // END
    0x00, 0x00, 
}; 

  在BLE协议栈初始化之初,会将profile规范和ATT的读写回调一起初始化,这样每次调用读写回调函数时,服务端(server)都会根据预先定义的profile规范来读写数据,为客户端(client)提供了统一标准。

ble_att_server_setup_init(profile_data, att_read_callback, att_write_callback);

make_gatt_services工具

  AC692xSDK提供的make_gatt_services工具只有两个文件。需注意,这两个文件必须在同一级目录下才可使用。
在这里插入图片描述

1.gatt_profile.cfg文件填写

  以下是该文件夹下的gatt_profile.cfg内容:

PRIMARY_SERVICE, 0x1800
CHARACTERISTIC,  2A00, READ | DYNAMIC,

PRIMARY_SERVICE, FFF0
CHARACTERISTIC,  FFF1, READ | NOTIFY | DYNAMIC,
CHARACTERISTIC,  FFF2, WRITE | DYNAMIC,
CHARACTERISTIC,  FFF3, WRITE | DYNAMIC,

  该文件第1行定义了一个服务,第2行的特征从属于该服务。为0x1800的UUID是蓝牙官网规定的Generic Access服务,是连接必有的服务,无需改动
  该文件的第3行是自定义服务,4~6行是从属于该服务的特质。可以模仿给出的样例修改,UUID可以根据需要自行修改。在修改描述符时,需注意,若描述符中有READ、WRITE、WRITE_WITHOUT_REPONSE时,则必须在描述符后添加DYNAMIC
  完成该文件填写后,双击同文件夹下的gatt_inc_generator.exe工具,生成gatt_profile_cfg.h

2.填充profile数组

  按照上述配置内容生成的gatt_profile_cfg.h文件内容如下:

//
// gatt profile include file, generated by jieli gatt_inc_generator.exe
//
const uint8_t profile_data[] = 
{
    //
    //
    // 0x0001 PRIMARY_SERVICE  0x1800
    //
    //
    0x0a, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28, 0x00, 0x18,
  /* CHARACTERISTIC,  2A00, READ | DYNAMIC, */
    // 0x0002 CHARACTERISTIC 2A00 READ | DYNAMIC 
    0x0d, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28, 0x02, 0x03, 0x00,   0x00, 0x2a,
    // 0x0003 VALUE 2A00 READ | DYNAMIC  
    0x08, 0x00, 0x02, 0x01, 0x03, 0x00, 0x00, 0x2a,
    //
    //
    // 0x0004 PRIMARY_SERVICE  FFF0
    //
    //
    0x0a, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28, 0xf0, 0xff,
    
  /* CHARACTERISTIC,  FFF1, READ | NOTIFY | DYNAMIC, */
    // 0x0005 CHARACTERISTIC FFF1 READ | NOTIFY | DYNAMIC 
    0x0d, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28, 0x12, 0x06, 0x00, 0xf1, 0xff,
    
    // 0x0006 VALUE FFF1 READ | NOTIFY | DYNAMIC  
    0x08, 0x00, 0x12, 0x01, 0x06, 0x00, 0xf1, 0xff,
    // 0x0007 CLIENT_CHARACTERISTIC_CONFIGURATION 
    0x0a, 0x00, 0x0a, 0x01, 0x07, 0x00, 0x02, 0x29, 0x00, 0x00,

/* CHARACTERISTIC,  FFF2, WRITE | DYNAMIC, */
    // 0x0008 CHARACTERISTIC FFF2 WRITE | DYNAMIC 
    0x0d, 0x00, 0x02, 0x00, 0x08, 0x00, 0x03, 0x28, 0x08, 0x09, 0x00, 0xf2, 0xff,
    // 0x0009 VALUE FFF2 WRITE | DYNAMIC  
    0x08, 0x00, 0x08, 0x01, 0x09, 0x00, 0xf2, 0xff,
    
/* CHARACTERISTIC,  FFF3, WRITE | DYNAMIC, */
    // 0x000a CHARACTERISTIC FFF3 WRITE | DYNAMIC 
    0x0d, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x03, 0x28, 0x08, 0x0b, 0x00, 0xf3, 0xff,
    // 0x000b VALUE FFF3 WRITE | DYNAMIC  
    0x08, 0x00, 0x08, 0x01, 0x0b, 0x00, 0xf3, 0xff,
 // END
    0x00, 0x00, 
}; 
//
// characteristics <--> handles
//

#define ATT_CHARACTERISTIC_2A00_01_VALUE_HANDLE 0x0003
#define ATT_CHARACTERISTIC_FFF1_01_VALUE_HANDLE 0x0006
#define ATT_CHARACTERISTIC_FFF1_01_CLIENT_CONFIGURATION_HANDLE 0x0007
#define ATT_CHARACTERISTIC_FFF2_01_VALUE_HANDLE 0x0009
#define ATT_CHARACTERISTIC_FFF3_01_VALUE_HANDLE 0x000b

  将其内容复制粘贴,找到le_server_module.h中的之前的profile_data[]内容和句柄宏定义进行替换。

3.句柄宏定义替换

  像上述的的特征句柄,以宏定义的方式出现,在le_server_module.c中各种回调函数中出现,若与之前的句柄不同,要记得及时修改在各个函数中的定义。

  • 将带有READ属性的放到att_read_callback函数中
    蓝牙学习笔记(五)——AC692x_BLE工具make_gatt_services_第1张图片
  • 将带有WRITE属性的放到att_write_callback函数中
    蓝牙学习笔记(五)——AC692x_BLE工具make_gatt_services_第2张图片
  • 将带有NOTIFY或INDICATE的属性放到发送数据函数中:
    蓝牙学习笔记(五)——AC692x_BLE工具make_gatt_services_第3张图片

如果您觉得有帮助,请给我一个赞。
您的鼓励是我前进的动力(๑‾ ꇴ ‾๑)。

你可能感兴趣的:(蓝牙)