wzhelp 发表于 2013-1-14 22:36:22

基于32feet.net对Broadcom(Widcomm)

基于32feet.net对Broadcom(Widcomm)

<div style="width: 700px;">  阅读: 86 评论: 0 作者: Jake Lin 发表于 2009-11-17 06:44 原文链接
背景

Widcomm是第一个为Windows编写蓝牙Stack的公司,后来给Broadcom收购了,由于他是第一个,所以目前很多蓝牙设备都是使用Broadcom Statck的。下面讲述如何使用32feet.net对基于Broadcom Statck的蓝牙设备进行开发。
本文的例子是基于 Windows Mobile 与 PC之间的通过蓝牙(Bluetooth) 传输文件的开发 和 Windows Moible, Wince 使用.NET Compact Framework进行蓝牙(Bluetooth)开发 之 32feet.NET 的基础上修改的。
驱动安装

进行Broadcom stack的开发,必须安装该驱动程序,下面以XP为例子,说明Broadcom驱动程序的安装。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-1_thumb.png
插入Broadcom stack的蓝牙dongle。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-2_thumb.png
插入驱动程序的CD进行安装。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-3_thumb.png
安装完毕能看到该蓝牙设备。
32feet.net源码下载

到codeplex下载32feet.net最新的代码,由于最新的32feet.net的release没有包含对Broadcom stack的支持,所以需要下载build版本。最新的build版本下载地址如下:
http://32feet.codeplex.com/SourceControl/ListDownloadableCommits.aspx
Broadcom stack的Native DLL

如果使用Microsoft Stack,32feet.net可以直接调用Wince(Windows Embedded CE)和Windows Mobile内置的btdrt.dll和BthUtil.dll。但是使用Broadcom stack的情况就不一样了。32feet.net封装了Native的DLL来调用Broadcom的驱动。 在源码包里面已经包含了build好的DLL,看下图。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-4_thumb.png    
上图为PC的Native DLL。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-5_thumb.png 
上图为Windows Mobile的Native DLL。
32feet.net编译

打开\32feet-61144\InTheHand.Net.Personal_Widcomm下的解决方案。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-6_thumb.png http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-7_thumb.png
分别编译InTheHand.Net.Personal.CF2和InTheHand.Net.Personal.FX2项目生成32feet.net的.NET Assembly InTheHand.Net.Personal.dll.
项目引用的更新

把引用都更新到新编译的InTheHand.Net.Personal.dll。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-8_thumb_1.png
为了节省时间,我的例子是在原先文章的基础上进行修改的。原文参考  Windows Mobile 与 PC之间的通过蓝牙(Bluetooth) 传输文件的开发 
修改以支持Broadcom Stack


修改对InTheHand.Net.Personal.dll的引用。
注释设置PrimaryRadio.Mode 的调用,因为Broadcom(Widcomm) stack不支持设置PrimaryRadio.Mode 。
//InTheHand.Net.Bluetooth.BluetoothRadio.PrimaryRadio.Mode = InTheHand.Net.Bluetooth.RadioMode.Discoverable;            部署程序

PC端

和Microsoft Stack不一样,部署的时候不仅仅需要部署程序,而且需要部署Native DLL及其依赖的DLL。如果不部署这些依赖DLL,程序会抛出异常。这是之前 崔江 同学调试一直出错的原因。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-20_thumb.png
我把这些依赖的DLL都放到源码包里面了。
 

Windows Mobile端

Windows Mobile端相对简单,依赖的DLL本身已经安装到设备上去了。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-9_thumb.png
 http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-21_thumb.png
只是需要部署应用程序,inthehand.net.personal.dll 和 32feetWidcomm.dll就可以了。
配对蓝牙设备

程序运行的时候,需要手工配对。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-12_thumb.png
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-13_thumb.png
但是在Microsoft Stack里面可以通过程序来配对的,可以参考 Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)设备配对的开发
测试基于Broadcom stack的文件传输程序

http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-11_thumb_1.png
两边都是Broadcom Stack,但是服务端接收到ObexListener的请求的时候会抛出异常,如下:
ObexListenerContext olc = listener.GetContext();http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-10_thumb.png
因为Broadcom(Widcomm) Stack是不支持sockets的,所以Broadcom(Widcomm) Stack不能作为ObexListener来使用,我把ObexListener换成Microsoft Stack,一切运行正常。
源代码: http://files.cnblogs.com/procoder/BroadcomBluetoothObex.rar
如果需要换成Microsoft Stack,只需要换InTheHand.Net.Personal.dll的引用就可以了。
同时我也在 Windows Moible, Wince 使用.NET Compact Framework进行蓝牙(Bluetooth)开发 之 32feet.NET 的基础上做了一个两端都Broadcom Stack的通信程序。
源代码:http://files.cnblogs.com/procoder/BroadcomBluetooth.rar
我同时发现如果服务端为Broadcom Stack的程序,有挂死现象,我改成Microsoft Stack问题又解决了。
http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/32f.netBroadcomWidcommstackBluetoothWind_9CB7/Broadcom-Bluetooth-14_thumb.png        
关于Broadcom Stack(Widcomm Stack)开发的建议

32feet.net对Broadcom Stack(Widcomm Stack)的支持是不完整的。支持情况可以参照这个文档:http://files.cnblogs.com/procoder/32feet-and-Widcomm-Broadcom.doc
我建议不是万不得已的情况下,不用使用Broadcom Stack(Widcomm Stack),使用Microsoft Stack很多问题都迎刃而解了。这里有一个文档讲述如何把非Microsoft Stack的设备安装Microsoft Stack。请参考:http://files.cnblogs.com/procoder/Belkin-F8T012-and-Microsoft-Stack.doc
进一步阅读

更多的蓝牙开发相关文章如下:
Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)开发 之 Windows Embedded Source Tools for Bluetooth
Windows Moible, Wince 使用.NET Compact Framework进行蓝牙(Bluetooth)开发 之 32feet.NET
Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)开发 之 蓝牙虚拟串口 (Bluetooth Virtual Serial Port)(可以用于把Bluetooth的GPS receiver变成串口)
Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)设备配对的开发
30 Days of .NET - Day 02: Bluetooth Manager(蓝牙管理器) (简单的Bluetooth应用)
Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)广播程序的开发
Windows Mobile 与 PC之间的通过蓝牙(Bluetooth) 传输文件的开发
Windows Mobile下通过蓝牙(Bluetooth)发送大文件的实现
页: [1]
查看完整版本: 基于32feet.net对Broadcom(Widcomm)