65.9K
CodeProject 正在变化。 阅读更多。
Home

Microsoft Device Emulator 的蓝牙

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.91/5 (16投票s)

2009年4月8日

GPL3

7分钟阅读

viewsIcon

164541

Microsoft 设备模拟器蓝牙可在模拟器和模拟器之间启用蓝牙通信。

引言

Microsoft 设备模拟器蓝牙 可在模拟器和模拟器之间启用蓝牙通信。

已使用以下 SDK 镜像测试了与 Microsoft 设备模拟器的蓝牙连接

  • Windows Mobile 5.0 Pocket PC SDK
  • Windows Mobile 5.0 Smartphone SDK
  • Windows Mobile 6 Professional SDK
  • Windows Mobile 6 Standard SDK

背景 

我曾听说诺基亚发布了 适用于 Windows XP 的 S60 SDK 蓝牙驱动程序。我的许多 Windows Mobile 项目都使用蓝牙,但 Windows Mobile 模拟器不支持它。我意识到,如果诺基亚能做到,为什么我不能。请注意,我不是微软员工,我在这里也不是为了推广微软或任何人。 

经过大量研究,我发现 Windows Mobile 镜像中包含 100% 有效的 Microsoft 蓝牙堆栈实现。唯一缺少的部分是蓝牙硬件。因此,所有需要做的工作是开发一个蓝牙 HCI 传输驱动程序,该驱动程序将 HCI/ACL 请求和响应传输到连接到台式机的真实蓝牙 USB 设备。但还有几个问题需要解决。第一个问题是如何访问蓝牙设备的 HCI 级别。Windows 上唯一可接受的允许访问 HCI 级别的蓝牙堆栈是 FreeBT堆栈。它是免费软件,并附带源代码。这正是我想要的。第二个问题是如何连接设备模拟器和台式机。我决定不使用 ActiveSync 相关的的方法。串行端口共享也阻止了我使用蜂窝模拟器。有一个 CoreConn接口,但它是在 Visual Studio 2008 中引入的,在 Visual Studio 2005 中不可用,而 Visual Studio 2005 是我的主要开发平台。因此,选择非常明显——Microsoft Remote Tools Framework。它也使用 CoreCon 接口。与 Visual Studio Smart Device Native Debugger 使用的完全相同。通过这种方式,您可以为模拟器获得功能齐全的蓝牙支持。您可以使用托管代码或非托管代码编写应用程序,使用第三方蓝牙实用程序等。

要求

请注意,您必须安装所有以下软件

  • Windows XP 或 Windows Vista 32 位,并安装最新的服务包。
  • Microsoft Visual Studio 2005 或 2008,并安装最新的服务包。您的 Visual Studio 安装必须包含 Smart Device Programmability 功能。
  • Windows Mobile 5.0 Pocket PC SDK 和/或 Windows Mobile 5.0 Smartphone SDK 和/或 Windows Mobile 6 Professional SDK 和/或 Windows Mobile 6 Standard SDK 模拟器镜像 
  • Microsoft 设备模拟器(推荐:版本 3.0)
  • Microsoft Remote Tools Framework 1.00

此外,您应该有一个可用的蓝牙 USB 加密狗。

注意

此版本的 Microsoft 设备模拟器蓝牙使用 FreeBT 项目来访问蓝牙 USB 加密狗。

架构概述

项目由以下组件组成

  1. 设备端
  2. 桌面端
    • Microsoft Remote Tools Framework 桌面插件
    • FreeBT USB 驱动程序运行时
    • FreeBT USB 驱动程序
    • 已连接的蓝牙 USB 设备

蓝牙 USB 驱动程序安装

  1. 打开 Windows 设备管理器。
  2. 在设备管理器中,找到要用作 FreeBT USB 设备的蓝牙设备。
  3. 右键单击,然后在弹出菜单中选择“更新驱动程序...” 。
  4. 选择“否,请勿更新”并单击“下一步 >”。
  5. 选择“从列表或指定位置安装”并单击“下一步 >”。
  6. 选择“不要搜索,我将选择要安装的驱动程序”并单击“下一步 >”。
  7. 选择设备驱动程序并单击“从磁盘…” 。
  8. 在“查找文件”对话框中,浏览到 fbtusb.inf 文件并单击“下一步 >”。
  9. 当出现“硬件安装警告”时,单击“继续安装”。
  10. 安装完成后,单击“完成”。
  11. 设备管理器现在应在 USB 控制器列表中显示“FreeBT USB Driver”。

有关更多详细信息,请参阅 FreeBT 文档。

安装

  1. 安装 Visual Studio 2005 或 2008 并安装最新的服务包。您的 Visual Studio 安装应包含 Smart Device Programmability 功能。
  2. 安装 Microsoft 设备模拟器。您应该已经随 VS 安装一起安装了一个。将其更新到 Microsoft 设备模拟器 3.0。
  3. 安装您需要的模拟器镜像。
  4. 您必须有一个可用的 USB 蓝牙加密狗。将其插入一个可用的 USB 端口。
  5. 按照“蓝牙 USB 驱动程序安装”部分中的说明安装 FreeBT USB 驱动程序。
  6. 安装 Microsoft Remote Tools Framework 1.00。

入门

  1. 按照“蓝牙 USB 驱动程序安装”部分中的说明安装 FreeBT USB 驱动程序。
  2. 按照“安装”部分中的说明安装所有“要求”部分。
  3. 从“RTFx Plugin”文件夹启动 Remote Tools Framework 插件 BthEmulManager.cetool
  4. 从列表中选择一个模拟器镜像。
  5. 等待模拟器连接。
  6. 选择“Microsoft 设备模拟器蓝牙”节点。
  7. 如果蓝牙设备已成功连接,则会显示蓝牙设备信息(地址、制造商、HCI 版本、LMP 版本)。此时蓝牙应在您的模拟器中运行。否则,将显示错误代码及其描述。
  8. 要清除通信日志,请右键单击并选择“清除所有”。
  9. 要将当前设备信息复制到剪贴板,请选择“Microsoft 设备模拟器蓝牙”节点,右键单击并选择“复制到剪贴板”。
  10. 要关闭模拟器上的蓝牙,请单击“连接”菜单项,然后选择“断开与...模拟器的连接”。
  11. Microsoft Remote Tools Framework 允许您同时启动两个设备模拟器。如果您已安装两个或更多 FreeBT USB 设备,请单击“窗口”菜单项并选择“拆分窗口视图”。重复步骤 3-6。您将获得两个同时运行的蓝牙驱动的模拟器。
  12. 可以启用/禁用设备端日志记录。如果选中“设备日志记录”复选框,则会在模拟器上启用远程日志记录。查看模拟器上的 \\Temp 目录。应该会创建 btd_bthemul_0.txtbtd_BthEmulAgent_0.txtbtd_bthemulcom_0.txt 文件。
  13. 可以启用/禁用桌面端日志记录。如果选中“桌面日志记录”复选框,则会启用本地日志记录。查看您的安装目录。应该会创建 BthEmulManager.txt 文件。
  14. 可以启用/禁用通信日志记录。通信日志记录允许查看模拟器和蓝牙设备之间的通信活动。

故障排除

。我已安装 FreeBT USB 驱动程序,但在部署模拟器后蓝牙仍无法工作。
。如果尚未安装 Microsoft Remote Tools Framework 1.00,请安装它。从“RTFx Plugin”文件夹启动 Remote Tools Framework 插件 BthEmulManager.cetool

。我正在尝试连接 Pocket PC 2003 SE 模拟器,但一直收到错误:“设备 Pocket PC 2003 SE VGA Emulator 的 CPU 类型为 ARMV4,操作系统版本为 4.21。”
。Pocket PC 2003 和 Smartphone 2003 尚不支持。

。README 指的是哪个 Windows 设备管理器?
。Win2K&XP:开始 -> 设置 -> 控制面板 -> 系统 -> 硬件选项卡 -> 设备管理器
Vista:开始 -> 设置 -> 控制面板 -> 硬件和声音 -> 设备管理器

。我首次启动 BthEmulManager.cetool 插件,但没有任何反应。模拟器中没有蓝牙。
。尝试重新启动先前选择的模拟器的插件。另外,在模拟器上,转到“设置”->“连接”->“蓝牙”->“模式”选项卡,然后打开蓝牙。

您可能还会遇到 FreeBT USB 驱动程序本身的问题。该驱动程序仍然(并且很可能仍处于此阶段)处于 alpha 版本。有许多报告称它存在问题。此驱动程序的问题包括

  1. 它会无缘无故停止工作。
  2. 它可能会在读/写操作中丢失数据包。问题开始于快速发送大量数据包。最可能的原因是 HCI 缓冲区使用不当(读取缓冲区大小命令、已完成数据包数事件)。
  3. 它在某些芯片组(如 CSR)上不稳定。

如果您遇到此类问题并且在 Windows 驱动程序开发方面有经验,我鼓励您尝试改进驱动程序并分享您的结果。

如果驱动程序运行一段时间后出现问题,请启动设备管理器,从 USB 设备列表中选择有问题的 FreeBT USb 驱动程序,右键单击并选择“禁用”。之后,再次右键单击并选择“启用”。

谢谢

感谢 Antony C. Roberts 的 FreeBT 开源堆栈。没有它,本次发布就不可能实现。

历史 

  • 2009-05-15
    • 一些小改进
  • 2009-04-13
    • 一些小改进
  • 2009-04-08 
    • 原文

附注:抱歉我的英语。我的母语是 C++。但我俄语也说得很好。请让我知道我的错误。

© . All rights reserved.