Generic Access Profile (GAP)

GAP 一共有四种角色:

Broadcaster ,Observer,Peripheral ,Central

Connection Interval  (主从设备连接间隔)    最小7.5ms 最大4.0s

Slave Latency  (从设备延迟): 忽略主设备的应答 继续处于睡眠状态

Supervision Timeout (检测时间超时) : 最大可连接时间。

 有效连接时间:

Effective Connection Interval = (Connection Interval) * ( 1 + (Slave Latency) ) ;

从设备可以通过Connection Parameter Update Request去要求主设备改变连接的设置,同时对于主设备的应答采取接受或者拒绝。解决函数在L2CAP层中。

改变的连接设置包括四种:

1 minimum connection interval 

2 maximum connection Interval 

3  slave latency  

4  timeout

GAP层还负责连接状态时主从设备的安全信息的初始化。

GAP Central Role Profile

 两个主要的设置函数:

GAPCentralRole_GetParameter 与 GAPCentralRole_SetParameter

GAP central role profile 使用的是回调函数功能区通知事件的发生。使用GAPCentralRole_StartDevice进行初始化设置,且只能被声明一次。

gapCentralRolesCBs_t : 结构体中包涵了两个函数指针,

eventCB:当设备发现或者连接建立或者暂停事件发生的时候会调用此回调函数。

rssiCB:回调当前的RSSI.

在例程中 simpleBLECentralEventCB和 RSSI 回调函数是 simpleBLECentralRssiCB;

Generic Attribute Profile (GATT)

 两个角色:

GATT Client  :在GATT服务端读/ 写数据

GATT Server  :  数据被GATT 客户端读写

GATT层所提供的服务:

Mandatory GAP Service :包涵设备和接入信息(设备名,设备识别码等),以库的形式在协议栈中。

Mandatory GATT Service :(自我理解是本协议层的相关服务信息)以库的形式提供。

SimpleGATTProfile Service: 配置文件。( 在simpleGATTProfile.c 和simpleGATTProfile.h中).

特征值(characteristic):是包涵任务属性和配置的类似接口的值。

特征值有以下属性:

handle(句柄):服务属性的地址。

Type:UUID;

Permissions(许可)是否允许从设备得到特征信息。

GATT提供的子服务(部分):

Read Characteristic Value

Read Using Characteristic UUID

Read Multiple Characteristic Values

Read Characteristic Descriptor

Discover Characteristic by UUID

Write Characteristic Value

Write Characteristic Descriptor

Characteristic Value Notification

四个特殊的特征值:

GATT_PRIMARY_SERVICE_UUID:由服务端提供的特征值。自我理解是此项服务的ID

GATT_CHARACTER_UUID: 紧随特征值后面的声明值。自我理解是特征值在GATT层的另一种表达。

GATT_CLIENT_CHAR_CFG_UUID:允许GATT client使能通知功能的特征值。

GATT_CHAR_USER_DESC_UUID : 用ASCII 来表示的特征值。

GATT层API主要功能:

1 从GATT层服务器注册或者撤销服务属性以及回调。

2 加入或删除GATT服务。

GAP层API  相关参数:

GAPROLE_PARAM_UPDATE_ENABLE        使能或失能自动连接功能。

GAPROLE_MIN_CONN_INTERVAL               最小连接时间间隔

GAPROLE_MAX_CONN_INTERVAL              最大连接时间间隔

GAPROLE_SLAVE_LATENCY                         从设备延时( 默认 0)

GAPROLE_TIMEOUT_MULTIPLIER              最大连接等待时间

GAPROLE_ADVERT_ENABLED                    使能或使能广播功能

GAPROLE_ADVERT_DATA                             改变其值可以限制发现的模式

GAPROLE_SCAN_RSP_DATA                      设备名称

GAPROLE_ADVERT_OFF_TIME                   未建立连接时,启动第二次连接的间隔

GAP层的API应该使用回调函数来通知应用程序发生了事件,并使用 GAPRole_StartDevice(外面没找到到,估计在库里)进行初始化设置。

gapRolesCBs_t:结构体有两个非常重要的内部指针:

pfnStateChange :得到当前的链接状态

pfnRssiRead: 得到当前的RSSI(信号强度)

在例程中, peripheralStateNotificationCB是返回当前状态的回调函数,但是无法得到信号强度 ,因为指针被指向了NULL.

同时,在 peripheral profile 中包涵了一个自动连接参数:

GAPROLE_PARAM_UPDATE_ENABLE(在SimpleBLEPeripheral_Init中进行初始化)

如果它的值是TRUE 则在连接的状态下从设备就可以向主设备发送连接参数,去更新当前的连接状态。

Simple GATT Profile (是用来储存和处理与GATT 服务器的数据文件)

SimpleProfile_AddService          初始化程序将属性加入到属性列表里。 在GATT serive中注册和读写回调函数

SimpleProfile_SetParameter     设置GATT层参数函数

SimpleProfile_GetParameter     得到GATT层参数函数

SimpleProfile_RegisterAppCBs 应用程序注册的一个回调函数  目的是在GATT client一个服务中可以写一个新值给特征值。

利用simpleProfileCBs_t结构体中的函数指针指向一个回调函数来实现此操作。

simpleProfile_ReadAttrCB 当GATT client 在profile中想读取属性值时,调用次函数。

simpleProfile_WriteAttrCB 当GATTclient  在profile中想写新的特征值时,调用此函数。

simpleProfile_HandleConnStatusCB  当连接状态发生变化时,回调函数将会受到此函数的信息,如果一个连接暂停,它会改变所有特征值配置值。通常这个函数用来查看特

征值配置,读写值,或者处理一个特征值的通知。

The simple GATT profile 中有5个特征值:

SIMPLEPROFILE_CHAR1:读写

SIMPLEPROFILE_CHAR2:读

SIMPLEPROFILE_CHAR3:写

SIMPLEPROFILE_CHAR4:给client一个通知

SIMPLEPROFILE_CHAR5:当连接时可以写5个字节的数据给client

为了能接收到GATT serive 发来的通知(notification),GATT client 必须打开通知功能

方法:GATT_CLIENT_CFG_NOTIFY写入0x0001  {每当设置新值使用SimpleProfile_SetParameter}

两个single-device 的project说明在TI CC254x Bluetooth Low Energy Software Developer’s Guide中有说明。

Generic Access Profile (GAP)相关推荐

  1. 泰凌微8258入门教程 BLE篇⑤——BLE Single Connection 通用访问协议 Generic Access Profile (GAP)

    文章目录 一.前言 二.GAP 简介 三.GAP Event 事件定义 四.源码修改 4.1 vendor/b85m_ble_remote/app_config.h 4.2 vendor/b85m_b ...

  2. Bluetooth core 5.0 Generic Access Profile ---------- 模式 - BR/EDR 物理传输(physical transport)

    4.1.可发现性模式(discoverability modes) 关于 inquiry(查询),蓝牙设备应处于 non-discoverable mode(不可发现模式)或 discoverable ...

  3. 通用属性配置文件(Generic Attribute profile,GATT)

    1. 角色 除了GAP定义了角色之外,BLE还定义了另外2种角色:GATT服务器和GATT客户端,它们完全独立于GAP的角色.提供数据的设备称为GATT,访问GATT服务器而获得数据的设备称为GATT ...

  4. 【IoT】Android/TI 蓝牙 profile 详解

    1.TI BLE profile详解 BLE 协议栈的 GATT 层是设计用于应用程序在两个连接设备之间的数据通信. 从 GATT 层的角度看,当设备连接后,将充当一下两种角色中的一个: GATT C ...

  5. 转载_对蓝牙profile的理解

     蓝牙profile协议概览.pdf    PS:从网上找的  http://blog.csdn.net/evilcode/   http://blog.sina.com.cn/samzhen1977 ...

  6. AliOS Things蓝牙协议栈及应用开发框架介绍

    摘要: AliOS Things从1.2.0版本开始支持蓝牙协议栈(BLE),及基于蓝牙协议栈的应用层开发框架.本文分为三部分对蓝牙组件进行介绍:蓝牙组件,蓝牙协议栈介绍及接口说明,和应用开发框架介绍 ...

  7. linux蓝牙obex协议,蓝牙协议英文缩写——记录

    参考wili百科:https://en.wikipedia.org/wiki/List_of_Bluetooth_profiles Contents 1 Advanced Audio Distribu ...

  8. 二 蓝牙系统架构 - 2.1 核心系统架构

    蓝牙核心系统包括一个主机,一个主要控制器和零到多个次要控制器. 2.1.1 蓝牙BR/EDR最小系统 蓝牙BR/EDR最小核心系统包括: 控制器中四个最底层,BR/EDR射频物理层(PHY),链路控制 ...

  9. 蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)

    声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受益于xubin341719的蓝牙系列文章,同时还有其他网上作者的资料.由于有些文章只做参考或统计不足,如涉 ...

最新文章

  1. SQLite数据转换成sql server数据
  2. java线程-保护性暂停(wait,notify实现)
  3. JTable动态显示隐藏列
  4. python【数据结构与算法】一种时间复杂度和空间复杂度的计算方法
  5. 三元组顺序表表示的稀疏矩阵加法_Matlab入门教程 第 2 章 Matlab矩阵处理之稀疏矩阵...
  6. 刚体运动中变换矩阵的逆
  7. LSP(分层服务提供者)
  8. Redis:07---Redis数据结构
  9. 关于HyperLink的NavigateUrl属性的链接地址带参数出错的问题【整理】
  10. 据我所知目前就只飞秋表情库
  11. 谷歌SEO算法更新大全(2010-2021)
  12. HTML5在线播放本地视频(IE9以上的浏览器)
  13. rails 调试工具pry 换掉debugger 和 rails c
  14. 练习4.圆中四只鸭子在同一个半圆的概率——MATLAB
  15. android判断两个图片相同,android中比较两张图片的相似度
  16. Wyn Enterprise 嵌入式商业智能和报表软件
  17. C和C++哪个更快?
  18. 副业项目做什么比较靠谱,如何知道自己适合做什么?
  19. 阶跃信号的matlab,单位阶跃信号的表示-matlab
  20. 什么是身份和访问管理(IAM)?

热门文章

  1. docker化你的java应用(上)
  2. 中国SaaS死或生之二:ERP两大邪术,尽出歪门邪路
  3. 多线程:Callable
  4. 6.MYSQL视图的使用和管理
  5. H5-代码的执行顺序影响着系统的性能:(position)
  6. 建设世界级数据中心正当时
  7. ML之KMeans:利用KMeans算法对Boston房价数据集(两特征+归一化)进行二聚类分析
  8. 成功解决:连接sql server时插入数据库内容为乱码,并且输出也为乱码
  9. VideoTool之FFmpeg:FFmpeg的简介、安装、使用方法之详细攻略
  10. 成功解决 ValueError: feature_names mismatch training data did not have the following fields