BLE采用的是 客户端-服务器的结构。该结构中通常只有客户端去读写服务器,服务器不会主动发数据给客户端,但是BLE的应用中比如一个防丢器,防丢器作为服务器,手机作为客户端,防丢器需要告诉手机自己的电量,一种方式是手机定时周期性的读,另一种更有效的方式是 防丢器自己电量发生改变的时候才主动发送改变的电量给手机。 所以为了应用于种类场景,BLE中定义了 notfiy和indication这两种由服务端主动发送数据给客户端通信方式。
PS:notify和indication的区别在于,notify只是将你要发的数据发送给手机,没有确认机制,不会保证数据发送是否到达。而indication的方式在手机收到数据时会主动回一个ack回来。即有确认机制,只有收到这个ack你才能继续发送下一个数据。这保证了数据的正确到达,也起到了流控的作用。
上面说过 本质上数据的传输实际上通过 名为 特性值 的属性条目中的那个 属性值 来进行的。你可以将属性值其想像成一个数组,当手机发向某个特性值写送数据过来时,设备协议找收到数据会对写到特性值对应的那个数组上。 而设备想向手机发数据时先写到对应的那个数据buff中,然后协议栈再提取数组数据将其发送出去。
其它的详细信息,及详细的图形描述,请参考如下网址:
http://blog.youkuaiyun.com/lilifang_2011/article/details/72875589