本文作者的博客地址:http://blog.sina.com.cn/samzhen1977
作者:Sam (甄峰) sam_code@hotmail.com
前面讲了Blueooth Remote Control发送Sniff request,要求每5ms发送一个数据包。这篇详细介绍一下Bluetooth Sniff.
在Sniff mode, Slave活动的占空比可能会降低。如果一个ACL逻辑传输的Slave 处于Active Mode,它将在在每个Master 发送ACL Slot中监听。除非link处理为分散连接或者在Hold Mode。
在Sniff Mode,Slave监听的次数会减少。于是, Master 只在指定的Slot中传送数据给Slave.
Sniff 定位点间隔由T(Sniff)指定。
也就是说:Sniff Mode. Slave只在固定间隔中的某个Master 传输Slot监听。
Sam在读到这里,不禁想到一个问题。Bluetooth Remote Control在于Linux 连接时,是作为Slave连接的。Sniff Mode下,只是可以约定Slave(手柄)每5ms去listen data. 但我们的手柄却每5ms去发送数据给主机。这好像讲不通。
Ray回答说:因为Per Bluetooth spec, slave can not send data to master unless master poll slave 。就是说:在Bluetooth协议中,Slave不能主动发送数据给Master除非Master向它发送 Poll。
So, the slave have to listen to Master first, when it receive the poll or other packet from master, then it can send thedata to master。 于是,双方约定Sniff Time后,Master 每5ms发送一个Poll。则Slave就可以发送数据给主机了。这就做到了手柄每5ms发送一个数据包给主机