请教BLE 中的sever u和client角色问题

CS的问题_百度知道请教BLE 中的sever和client角色问题_百度知道查看: 2787|回复: 4
BLE协议详解
连续签到天数:14天签到总天数:316天签到总奖励:5274金币
马上注册,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
& & 本人接触蓝牙不久,研究BLE的时间不足半月,曾看到有网友指出BLE 走SPP协议,也有的说是走GATT协议,也有人认为是GATT+SPP......我觉得这是个人理解的不同,都有各自的道理!在此本人也只是根据CSR的BLE的电池电量服务及相关数据资料说说GATT协议,不正确的地方,大神勿喷,还请多多指教!
 一、GATT的概念:
  Generic Attribute Profile (GATT)
  通过BLE连接,读写属性类小数据的Profile通用规范。现在所有的BLE应用Profile都是基于GATT的。
  Attribute Protocol (ATT)
  GATT是基于ATT Protocol的。ATT针对BLE设备做了专门的优化,具体就是在传输过程中使用尽量少的数据。每个属性都有一个唯一的UUID,属性将以characteristics and services的形式传输。
  Characteristic
  Characteristic可以理解为一个数据类型,它包括一个value和0至多个对次value的描述(Descriptor)。
  Descriptor
  对Characteristic的描述,例如范围、计量单位等。
  Service
  Characteristic的集合。例如一个service叫做“Heart Rate Monitor”,它可能包含多个Characteristics,其中可能包含一个叫做“heart rate measurement&的Characteristic。
 二、GATT的角色和职责:
  Android设备与BLE设备交互有两组角色:
  中心设备和外围设备(Central vs. peripheral);
  GATT server vs. GATT client.
  Central vs. peripheral:
  中心设备和外围设备的概念针对的是BLE连接本身。Central角色负责scan advertisement。而peripheral角色负责make advertisement。
  GATT server vs. GATT client:
  这两种角色取决于BLE连接成功后,两个设备间通信的方式。
  举例说明:
  现 有一个活动追踪的BLE设备和一个支持BLE的Android设备。Android设备支持Central角色,而BLE设备支持peripheral角 色。创建一个BLE连接需要这两个角色都存在,都仅支持Central角色或者都仅支持peripheral角色则无法建立连接。
  当 连接建立后,它们之间就需要传输GATT数据。谁做server,谁做client,则取决于具体数据传输的情况。例如,如果活动追踪的BLE设备需要向 Android设备传输sensor数据,则活动追踪器自然成为了server端;而如果活动追踪器需要从Android设备获取更新信息,则 Android设备作为server端可能更合适。
三、权限及feature:  和经典蓝牙一样,应用使用蓝牙,需要声明BLUETOOTH权限,如果需要扫描设备或者操作蓝牙设置,则还需要BLUETOOTH_ADMIN权限:
  &uses-permission android:name=&android.permission.BLUETOOTH&/&
  &uses-permission android:name=&android.permission.BLUETOOTH_ADMIN&/&
  除了蓝牙权限外,如果需要BLE feature则还需要声明uses-feature:
  &uses-feature android:name=&android.hardware.bluetooth_le& android:required=&true&/&
  按时required为true时,则应用只能在支持BLE的Android设备上安装运行;required为false时,Android设备均可正常安装运行,需要在代码运行时判断设备是否支持BLE feature:
  // Use this check to determine whether BLE is supported on the device. Then
  // you can selectively disable BLE-related features.
  if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
& &   Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
& &   finish();
四、Android连接GATT Server:  两个设备通过BLE通信,首先需要建立GATT连接。这里我们讲的是Android设备作为client端,连接GATT Server。
  连接GATT Server,你需要调用BluetoothDevice的方法。此函数带三个参数:Context、autoConnect(boolean)和对象。调用示例:
  mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
  函数成功,返回对象,它是GATT profile的封装。通过这个对象,我们就能进行GATT Client端的相关操作。用于传递一些连接状态及结果。
  BluetoothGatt常规用到的几个操作示例:
  connect() :连接远程设备。
  discoverServices() : 搜索连接设备所支持的service。
  disconnect():断开与远程设备的GATT连接。
  close():关闭GATT Client端。
  readCharacteristic(characteristic) :读取指定的characteristic。
  setCharacteristicNotification(characteristic, enabled) :设置当指定characteristic值变化时,发出通知。
  getServices() :获取远程设备所支持的services。
  等等。
  1、某些函数调用之间存在先后关系。例如首先需要connect上才能discoverServices。
  2、 一些函数调用是异步的,需要得到的值不会立即返回,而会在BluetoothGattCallback的回调函数中返回。例如 discoverServices与onServicesDiscovered回调,readCharacteristic与 onCharacteristicRead回调,setCharacteristicNotification与 onCharacteristicChanged回调等。
上一篇:下一篇:
- 让您的金币更有价值!|| - 让您的沟通更加及时!
享有帖子相关版权3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和的同意4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意7、管理员和版主有权不事先通知发贴者而删除本文', this.href);">论坛版权
连续签到天数:1天签到总天数:371天签到总奖励:6080金币
太棒了!!!
- 让您的金币更有价值!|| - 让您的沟通更加及时!
连续签到天数:1天签到总天数:487天签到总奖励:10230金币
顶一下的说
- 让您的金币更有价值!|| - 让您的沟通更加及时!
连续签到天数:1天签到总天数:38天签到总奖励:286金币
这个帖子太好了,顶
- 让您的金币更有价值!|| - 让您的沟通更加及时!
连续签到天数:1天签到总天数:91天签到总奖励:656金币
顶顶更健康
- 让您的金币更有价值!|| - 让您的沟通更加及时!
站长推荐 /1
如下载权限不够,可以通过发帖、回帖、上传附件等方式升级,点击查看更多详情......
Powered by

我要回帖

更多关于 android ble client 的文章

 

随机推荐