之前没有摸过蓝牙,这回的项目里面有蓝牙模块.而我目前对蓝牙只知道的有:1.我们的设计里蓝牙模块是连接在串口上的.2.蓝牙不是蓝色的牙齿.呵呵, ,我不得不提前开始接触一下蓝牙协议栈.粗看起来还挺复杂庞大的.单蓝牙组织公布的规范1.1多达1084页.先看张图(不知道如何贴图,图片是msdn里面蓝牙协议栈的结构图,可以访问http://msdn2.microsoft.com/en-us/library/ms890956.aspx) 

  


东西很多,先分类吧!从底向上看,蓝牙的协议和规范可以分这些大类: 

一:最底层.就是上图蓝色部分.其中有射频规范,基带规范和链路管理层(Link Manager Protocol).一个好消息是,不要管这部分内容.因为这部分都在蓝牙模块里面实现了.可能需要稍微了解下的就是链路管理协议主要是负责认证,加密,链路管理和控制这些功能.还有一些有趣的信息,一个主设备最大和7个从设备建立链接,从设备之间不能互通.主设备到从设备的最大数据传输速率为723.2kbps,反向57.6kbps.也可以配置为双向433.9kbps. 

二:接口层.协议栈和硬件之间的接口.在WinCE中,它也包括了3个部分:第一,HCI(Host Controller Interface),第二,Bluetooth Universal Transport Manager,第三,HCI Transport layer主机控制接口层.第一层向上提供一个接口,第三层是和硬件的接口,比如连接到Host的是串口,那第三层就是一个串口的抽象的传输层,那为什么还需要第二层呢?第二层叫统一传输管理,是因为WinCE是一个开放的平台,它也不知道蓝牙究竟是连接串口,usb口,sdio甚至一些pcmcia等其他的pnp设备,等等,而且作为HCI的上层也不想知道你用什么物理接口.于是它抽象出来这么一个东西来统一管理.简单说就是大一统所有的接口了,它先去扫描PCMCIA,USB和sdio等pnp设备,如果没有就根据注册表取默认的设备接口.最后被选定的接口会被安排到这里[HKEY_LOCAL_MACHINESoftwareMicrosoftBluetoothHCI] 

第二和第三部分的代码在WINCE500PUBLICCOMMONOAKDRIVERSBLUETOOTHTRANSPORTS目录下面,那个univ目录的就是Universal Transport Manager,其他是各个具体的Transport layer的实现. 

刚才说到如果没有扫描到pnp的蓝牙设备就使用默认的,这个默认的接口在哪里?其实也是根据注册表来找接口,看看下面的内容吧:1代表优先级别.name=COM2,baud=1c200,这很明显,就是以115200的波特率打开COM2口了. 

IF BSP_BLUETOOTH_BUILTIN_UART 

[HKEY_LOCAL_MACHINESoftwareMicrosoftBluetoothTransportsBuiltIn1] 

    "driver"="bthuart.dll" 

    "flags"=dword:4 

    "name"="COM2:" 

    "baud"=dword:1c200 

    "resetdelay"=dword:1388 

ENDIF

来源:http://bbs.21ic.com/icview-31255-1-1.html