3.2. GATT COMMON

3.2.1. 2.20.1概述

主要描述新版本SDK(v2.0.0及以后)在COMMON目录新增GATT公共模块,主要处理GATT层跟蓝牙协议栈的功能信息交换,GATT跟apps层的功能信息交换;有效使apps不需要太依赖协议栈接口的直接调用,只需要关注GATT接口模块配置以及控制就可以。

3.2.2. 2.20.2 代码说明

目录路径:apps/common/third_party_profile/jieli/gatt_common

  • 文件信息:

le_gatt_client.c
le_gatt_common.c
le_gatt_common.h
le_gatt_server.c
  • 模块主要由app_config.h里面的gatt配置管理,如下:

*//蓝牙BLE配置*

#define CONFIG_BT_GATT_COMMON_ENABLE       1 \ *//配置使用gatt公共模块*

#define CONFIG_BT_SM_SUPPORT_ENABLE        0 \ *//配置是否支持加密*

#define CONFIG_BT_GATT_CLIENT_NUM          0 \ *//配置主机client个数 (app not support)*

#define CONFIG_BT_GATT_SERVER_NUM          1 \ *//配置从机server个数*

#define CONFIG_BT_GATT_CONNECTION_NUM      (CONFIG_BT_GATT_SERVER_NUM + CONFIG_BT_GATT_CLIENT_NUM) \ *//配置连接个数*
  • GATT主从角色各自单独最多支持8个,若同时使用,连接最多支持调链路。

  • le_gatt_common.c:主要执行蓝牙协议栈的初始化驱动,包含GATT、ATT和SM等配置初始化,驱动GATT server 和 GATTclient模块实现,分发两个模块的消息处理,支持多机GATT多机连接管理。提供一些GATT通过接口调用,例如ATT数据发送,蓝牙链路断开等。

  • 提供的接口列表,具体接口定义看代码注释说明:

    //common
    
    u32  ble_comm_cbuffer_vaild_len(u16 conn_handle);
    
    int ble_comm_att_send_data(u16 conn_handle, u16 att_handle, u8 *data, u16 len, att_op_type_e op_type);
    
    bool ble_comm_att_check_send(u16 conn_handle, u16 pre_send_len);
    
    const char *ble_comm_get_gap_name(void);
    
    int ble_comm_disconnect(u16 conn_handle);
    
    u8 ble_comm_dev_get_handle_state(u16 handle, u8 role);
    
    void ble_comm_dev_set_handle_state(u16 handle, u8 role, u8 state);
    
    void ble_comm_register_state_cbk(void (*cbk)(u16 handle, u8 state));
    
    le_comm_dev_get_index(u16 handle, u8 role);
    
    le_comm_dev_get_idle_index(u8 role);
    
    le_comm_dev_get_handle_role(u16 handle);
    
    ble_comm_dev_get_handle(u8 index, u8 role);
    
    ble_comm_set_config_name(const char *name_p, u8 add_ext_name);
    
    ble_comm_init(const gatt_ctrl_t *control_blk);
    
    ble_comm_exit(void);
    
    ble_comm_module_enable(u8 en);
    
    ble_comm_set_connection_data_length(u16 conn_handle, u16 tx_octets, u16 tx_time);
    
    int ble_comm_set_connection_data_phy(u16 conn_handle, u8 tx_phy, u8 rx_phy);
    
  • le_gatt_server.c:主要执行GATT server 角色的操作,例如配置profile,开广播,连接参数更新流程、ota通用操作,协议栈的事件处理,多机机制管理等。apps层只需执行配置操作,就可以实现驱动模块实现基本功能。

  • 提供的接口列表,具体接口定义看代码注释说明:

    *//server*
    
    void ble_gatt_server_init(gatt_server_cfg_t *server_cfg);
    
    void ble_gatt_server_exit(void);
    
    ble_state_e ble_gatt_server_get_work_state(void);
    
    ble_state_e ble_gatt_server_get_connect_state(u16 conn_handle);
    
    int ble_gatt_server_adv_enable(u32 en);
    
    void ble_gatt_server_module_enable(u8 en);
    
    void ble_gatt_server_disconnect_all(void);
    
    int  ble_gatt_server_connetion_update_request(u16 conn_handle, const struct conn_update_param_t *update_table, u16 table_count);
    
    
    ble_gatt_server_characteristic_ccc_set(u16 conn_handle, u16 att_handle, u16 ccc_config);
    
    
    ble_gatt_server_characteristic_ccc_get(u16 conn_handle, u16 att_handle);
    
    
     ble_gatt_server_set_update_send(u16 conn_handle, u16 att_handle, u8 att_handle_type);
    
    
     ble_gatt_server_receive_update_data(void *priv, void *buf, u16 len);
    
    
     ble_gatt_server_set_adv_config(adv_cfg_t *adv_cfg);
    
    
    void ble_gatt_server_set_profile(const u8 *profile_table, u16 size);
    
  • le_gatt_client.c:主要执行GATT client 角色的操作,例如配置scan参数,匹配设备扫描连接,匹配profile搜索连接,协议栈的事件处理;多机机制管理等。apps层只需执行配置操作,就可以实现驱动模块实现基本功能。

  • 提供的接口列表,具体接口定义看代码注释说明:

    *//client*
    
    void ble_gatt_client_init(gatt_client_cfg_t *client_cfg);
    
    void ble_gatt_client_exit(void);
    
    void ble_gatt_client_set_scan_config(scan_conn_cfg_t *scan_conn_cfg);
    
    void ble_gatt_client_set_search_config(gatt_search_cfg_t *gatt_search_cfg);
    
    ble_state_e ble_gatt_client_get_work_state(void);
    
    ble_state_e ble_gatt_client_get_connect_state(u16 conn_handle);
    
    int ble_gatt_client_create_connection_request(u8 *address, u8 addr_type, int mode);
    
    int ble_gatt_client_create_connection_cannel(void);
    
    ble_gatt_client_scan_enable(u32 en);
    
    ble_gatt_client_module_enable(u8 en);
    
    void ble_gatt_client_disconnect_all(void);