HCI. 这个是最底层的了,称为 Host Control Interface. 之所以称为 HCI 是源于蓝芽的应用模型的。蓝芽是连接智能外设的无线接口,接口的一侧是设备,另一侧就是主机 (Host) 了,采用类似记法的还有 USB, IEEE1394,所以,从设计初衷来看,这几个东东都是针对差不多的市场的,当然,各有所长了。一个蓝芽适配器是否能被驱动起来,就看 HCI 的支持性了。最常见的蓝芽适配器就是笔者持有的这类 USB 接口的了,对于大部分标准的蓝芽设备,它的驱动模块是: hci-usb,对于我们的 2.6 内核,插入这个适配器,该模块就被自动加载了。
在 HCI 之上是 L2CAP,Logical Link Control and Adaptation Protocal 这一层的功能承上启下,向上层提供异步数据传输的链路控制功能,所谓异步,就是不存在一个主时钟来同步所有传输的一种传输方式,通常用于数据的传输;与之相反,同步传输是完全与时钟同步的,通常用在诸如语音或是多媒体通话之中,在蓝芽中,语音同步传输也是被支持的,bluez 协议栈中的 SCO 就是支持同步模式的。
gnawux@inspiration:~$ obex_test -b 00:17:00:7B:18:B8 8 Using Bluetooth RFCOMM transport OBEX Interactive test client/server. > c Connect OK! Version: 0x10. Flags: 0x00 > p wangxu.jpg me.jpg PUT file (local, remote)> name=wangxu.jpg, size=34177 Going to send 34177 bytes Made some progress... Made some progress... Made some progress... Made some progress... Made some progress... PUT successful! > q 可以看到,执行完 obex_test 之后,进入一个交互状态,首先建立连接,然后传送文件 (本地文件名是 wangxu.jpg,存在手机上叫 me.jpg,这个是我随便取的),最后,退出。这个过程需要看着点手机屏幕,可能要你确认是否连接,文件存放在哪里,当然,这个和手机有关。
gnawux@inspiration:~$ obex_test -b FF:FF:FF:00:00:00 9 Using Bluetooth RFCOMM transport OBEX Interactive test client/server. > s 现在,计算机进入了接收模式,在手机侧发送文件到计算机就可以了。