CE上的蓝牙开发,分为驱动和应用。CE下的蓝牙整体比较复杂,有提供一些组件可以直接使用,相对于在mobile5.0上面还是麻烦多了,一些蓝牙的应用,对于我们这些不是专业做蓝牙方面的人员来说,难于入手。跌跌碰碰总算也是实现了蓝牙的一些基本功能,满足蓝牙的基本应用(CE5.0下通过PDA上的蓝牙和GPS蓝牙通信,蓝牙设备间文件传输等)。在完成蓝牙模块,做的记录不多,把以前一些记录整理上来,作为CE上蓝牙开发参考。
蓝牙协议栈的体系结构:
RFCOMM (Serial Cable Emulation Protocol) 是蓝牙的TS07.10协议的适配器。这服务是基于com端口模拟工具和源于点对点协议。多路技术和流控基于设备和应用程序也在这里执行。
L2CAP (Logical Link Control and Adaptation Protocol) 是底层基于蓝牙通信多路技术协议的连接。L2CPA不执行流控。它依赖蓝牙硬件提供的一个可靠的设备对设备基带链路。
CE下的蓝牙
蓝牙设备驱动作为一个流设备驱动被执行,它被Device.exe加载。蓝牙协议栈包含在微软的PB底下。最后的应用程序和包依赖于OEM和设计模板。这协议栈是有标准组件的,所以它可以使用作为一个多用途的软件栈,被默认连接,或它可以被分开使用。(可以自己定制?)
默认连接在下面的两个DLL
Btd.dll是蓝牙设备驱动包含所有的协议层。它被device.exe加载,被AFD使用,提供给TDI。执行在它自己的COM虚拟端口。通过IOCTLs来进行控制。
Btdrt.dll是一个实时的thunk DLL,提供标准应用程序接口给用户编程。通过IOCTL访问驱动和提供回调函数。
每一层都被直接连接入设备驱动,包括HCI传输,dll连接后,是不能被代替和扩展的,因为协议栈层APIs是不能被标准输出的。
然而,每一步连接都是用户控制的,每一层都作为一个库提供出来,任何一层都可以被代替,因此方便以后的更新。大部分可以使用来创建一个设备,有一个可更换的HCI传输,所以传输支持可以被安装为特殊的蓝牙卡。
在HCI,每一层都可以被公开。扩充可以被写实现SCO,ACL协议是类似L2CAP,和控制器管理命令。
每层都允许多接口去设置它,每个上层的接口可以限制一个子集的连接权力,RFCOMM和SDP必须只连接在它们自己的PSM(protocol/service multiplexer);SCO栈也只是操作CSO连接;自定义的软件栈也只能影响一个定义好的蓝牙设备连接。