Wince 添加蓝牙设备

  Wince中添加蓝牙设备,蓝牙接口可能有多种,MS已经提供了CSR,UART,USB,SDIO的。以下将会简单说说蓝牙设备的配置。

 

  CSR的配置和UART的配置相似。UART就是利用串口来连接蓝牙设备。需要在Wince工程里添加相应的组件。这部分比较简单。在/WINCE600/PUBLIC/COMMON/OAK/FILES目录下,有个common.reg,需要修改里面的设备。如UART:

 

  ; @CESYSGEN IF BTD_UART
[HKEY_LOCAL_MACHINE/Software/Microsoft/Bluetooth/HCI]
    "flags"=dword:0
    "name"="COM2:" ;修改为你的蓝牙设备连接的串口
    "baud"=dword:1c200;修改为蓝牙通信的波特率。

; @CESYSGEN ENDIF

如果你的串口工作正常的话,这样配置蓝牙模块就能够工作了。在CE5上可以工作,但是在CE6上却会出现问题。后来跟踪发现。串口的mdd层接口貌似有问题。在/WINCE600/PUBLIC/COMMON/OAK/DRIVERS/SERIAL/COM_MDD2目录下有个mdd.c文件,其中有个ApplyDCB( )函数会做一些检测,如果需要蓝牙工作,那么就需要去掉这部分代码。我是这样做的:

 

BOOL
ApplyDCB (PHW_INDEP_INFO pSerialHead, DCB *pDCB, BOOL fOpen)
{
    PHWOBJ          pHWObj      = pSerialHead->pHWObj;
#ifndef BSP_BLUETOOTH                   //这里的意思就是如果不编译蓝牙的话就编译这段代码。为的是不破坏源码

    if (!(pDCB->XoffLim< pSerialHead->RxBufferInfo.Length &&
            pDCB->XonLim< pSerialHead->RxBufferInfo.Length - pDCB->XoffLim )) {
        return FALSE;
    }
   
    if (pDCB->fOutX || pDCB->fInX ) {
        if (pDCB->XonChar == pDCB->XoffChar)
            return FALSE;
    }
#endif

...................................................................................................................

虽然在这里修改了代码,但是去掉这部分代码后,也不会影响其他串口。

 

USB一般不需要怎么配置就能工作,只要接口没有问题。

如果要检查蓝牙设备,可以写一个串口工具,为什么要写串口工具呢?因为蓝牙对外导出的也是port,系统命名为BSP,但是你也可以改名。

在/WINCE600/PUBLIC/COMMON/OAK/DRIVERS/BLUETOOTH/SAMPLE/BTENUM下有两个文件需要修改。

头文件:

#ifdef BSP_BLUETOOTH
#define BTENUM_PORT_NAME            L"COM" //你想改成什么都行。
#else
#define BTENUM_PORT_NAME            L"BSP"
#endif

程序文件:

static DWORD FindFreeBluetoothPort (BTDEV *pbt) {
#ifdef BSP_BLUETOOTH
    for (int i = 5 ; i < 10 ; ++i) {  //起始端口号可以自己设置,比如我的设备上有4个串口,所以我就从串口5开始。
#else
    for (int i = 2 ; i < 10 ; ++i) {
#endif

...............................................................................

这样重新编译,修改后的代码必须要编译,可以用blddemo clean cleanplat -c来编译。

如此就可以利用串口工具来检测蓝牙设备了。

如果是USB的设备,需要根据common.reg中的package和block大小来设置波特率。波特率为下面红色字体的乘积。

; @CESYSGEN IF BTD_USB
[HKEY_LOCAL_MACHINE/Software/Microsoft/Bluetooth/HCI]
    "flags"=dword:80000000
    "PacketSize"=dword:200
    "BlockSize"=dword:5

; @CESYSGEN IF CE_MODULES_BTSCOSND
    "IsochAltSetting"=dword:1
; @CESYSGEN ENDIF CE_MODULES_BTSCOSND

; @CESYSGEN ENDIF

 

以上就是在蓝牙方面的经验。

你可能感兴趣的:(WINCE)