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
以上就是在蓝牙方面的经验。