【ACCESS精品源码栏目提醒】:网学会员为需要ACCESS精品源码的朋友们搜集整理了WinCE蓝牙驱动 - 综合课件相关资料,希望对各位网友有所帮助!
WinCE蓝牙驱动 之前没有摸过蓝牙这回的项目里面有蓝牙模块.而我目前对蓝牙只知道的有:1.我们的设计里蓝牙模块是连接在串口上的.2.蓝牙不是蓝色的牙齿.呵呵 我不得不提前开始接触一下蓝牙协议栈.粗看起来还挺复杂庞大的.单蓝牙组织公布的规范1.1多达1084页.先看张图 东西很多先分类吧从底向上看蓝牙的协议和规范可以分这些大类: 一:最底层. 就是上图蓝色部分.其中有射频规范基带规范和链路管理层Link Manager Protocol.一个好消息是不要管这部分内容.因为这部分都在蓝牙模块里面实现了.可能需要稍微了解下的就是链路管理协议主要是负责认证加密链路管理和控制这些功能.还有一些有趣的信息一个主设备最大和7个从设备建立链接从设备之间不能互通.主设备到从设备的最大数据传输速率为723.2kbps反向57.6kbps.也可以配置为双向433.9kbps. 二:接口层. 协议栈和硬件之间的接口.在WinCE中它也包括了3个部分:第一HCIHost Controller Interface第二Bluetooth Universal Transport Manager第三HCI Transport layer主机控制接口层.第一层向上提供一个接口第三层是和硬件的接口比如连接到Host的是串口那第三层就是一个串口的抽象的传输层那为什么还需要第二层呢第二层叫统一传输管理是因为WinCE是一个开放的平台它也不知道蓝牙究竟是连接串口usb口sdio甚至一些pcmcia等其他的pnp设备等等而且作为HCI的上层也不想知道你用什么物理接口.于是它抽象出来这么一个东西来统一管理.简单说就是大一统所有的接口了它先去扫描PCMCIAUSB和sdio等pnp设备如果没有就根据注册表取默认的设备接口.最后被选定的接口会被安排到这里HKEY_LOCAL_MACHINESoftwareMicrosoftBluetoothHCI 第二和第三部分的代码在WINCE500 PUBLIC COMMONOAK DRIVERS BLUETOOTH TRANSPORTS 目录下面那个univ目录的就是Universal Transport Manager其他是各个具体的Transport layer的实现. 刚才说到如果没有扫描到pnp的蓝牙设备就使用默认的这个默认的接口在哪里其实也是根据注册表来找接口看看下面的内容吧:1代表优先级别.nameCOM2baud1c200这很明显就是以115200的波特率打开COM2口了. IF BSP_BLUETOOTH_BUILTIN_UART HKEY_LOCAL_MACHINESoftwareMicrosoftBluetoothTransportsBuiltIn1 driverbthuart.dll flagsdword:4 nameCOM2: bauddword:1c200 resetdelaydword:1388 ENDIF 细说HCI 对于HCI接口它向上提供了一个访问底层硬件的统一接口.比如提供给l2cap.其实不用关心HCI内部怎么实现的只要懂得怎么使用就可以更进一步如果所有应用都是在l2cap上的连HCI接口也没有必要知道.比如我们的应用只是基于winsockrfcomm或者obex这些都是l2cap的上层就不要关心HCI的上层接口.它是透明的当它不存在好了. 如果好奇HCI的上层比如l2cap如何使用hci接口其实是使用HCI_EstablishDeviceContext这个函数来获得接口并注册相关回调函数和事件响应函数.这些模块源代码都在WINCE500PRIVATEWINCEOSCOMMBLUETOOTH目录里面. 对于一些特殊的应用比如你有一些蓝牙耳机这样的应用就不是通过l2cap了那么就要从hci层扩展.还是使用同样的接口方法只是参数不同了.耳机这样的应用是要处理的是同步的连接SCO数据包于是透过参数告知hci将sco数据发给自己来处理.具体来说就是第2个参数BTH_CONTROL_ROUTE_BY_LINKTYPE第5个参数BT_LINK_TYPE_SCO以次来调用HCI_EstablishDeviceContext. 三:协议层. 这一层包括L2CAPSDPRFCOMM.首先要说L2CAP之前已经提及这个协议它建立在HCI上面.全名是逻辑链路控制和适应协议Logical Link Controller and Adaption Protocol看看它的功能:分发数据给更高层数据包分段和重组...看过tcpip协议栈感觉这一层像ip层.如果想基于L2CAP上做第3方扩展应用就要知道如何使用L2CAP接口.其实就是使用L2CAP_EstablishDeviceContext来获得L2CAP层的接口这是不是和HCI的接口太像了接下来是SDP这是一个服务发现协议service discovery protocol蓝牙设备是要组网的就是