【问题标题】:Widcomm bluetooth : how to open the virtual COMWidcomm蓝牙:如何打开虚拟COM
【发布时间】:2011-01-01 13:28:51
【问题描述】:

我正在尝试使用 Broadcomm 的 Widcomm 蓝牙堆栈,它应该可以工作,但我仍然无法理解一件事:当我需要通信时,如何自动打开虚拟 COM?

我正在尝试使用 SPP(串行端口配置文件),但 SDK 的文档并不那么详尽。

拜托,我就是不能使用 32 英尺!

我封装了 API 的 SPP 服务器部分:

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)]
    internal static extern IntPtr CreateSppServer(IntPtr pStack);

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)]
    internal static extern void DeleteSppServer(IntPtr pServer);

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)]
    internal static extern bool SppServerStart(IntPtr pServer, IntPtr pszServiceName);

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)]
    internal static extern bool SppServerStop(IntPtr pServer);

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)]
    internal static extern IntPtr SppServerNotifyWindow(IntPtr pServer, IntPtr hWnd, int nMsg);

什么是 pszServiceName?我在哪里可以找到它? 还有hWnd和nMsg???

谢谢

【问题讨论】:

    标签: windows-mobile stack bluetooth broadcom


    【解决方案1】:

    我早些时候发布了对此的回复,但它似乎从未出现过! :-(

    无论如何,我是 32feet.NET 库的维护者和 Widcomm 支持的作者。首先,据我所知,许可证对于商业发行不应该是问题。请参阅 http://32feet.net/forums/t/2289.aspx 的 Peter Foot 评论:

    "32feet.NET 可免费用于商业或非商业用途。如果您使用二进制文件,则可以按原样使用库,如果您对源代码进行修改,则需要包含 32feet.NET License.txt记录并确保文件头没有被修改/删除。”

    我会看看彼得是否可以在这里发表评论以给出确定性。

    无论如何,我们还没有实现对 Widcomm 虚拟 COM 端口功能的支持,(尽管没有人要求它当然是可能的——除了你自己)。我不是虚拟 COM 端口的忠实粉丝。使用直接“套接字”连接似乎总是容易得多,而不是尝试设置 COM 端口,并尝试找到它被创建为 [1] 的名称,然后必须打开一个 SerialPort 才能使用它,然后如果连接丢失,一个人不知道并且只需要继续重试......只需执行以下操作就容易多了:

    Dim addr As BluetoothAddress _
      = BluetoothAddress.Parse("001122334455")
    '
    Dim ep As New BluetoothEndPoint(addr, BluetoothService.SerialPort)
    Dim cli As New BluetoothClient
    cli.Connect(ep)
    Dim peerStream As Stream = cli.GetStream()
    peerStream.Write/Read ...
    

    http://www.alanjmcf.me.uk/comms/bluetooth/32feet.NET%20--%20User%20Guide.html查看更多信息

    回答您的具体 Widcomm 问题。可以创建蓝牙服务的多个实例,即多个 SPP 服务(每个使用 SPP 服务类 ID),每个都可以提供服务名称属性以允许客户端在它们之间进行选择。在大多数情况下,这不是必需的,因此只需传递 null 或零长度字符串 - Widcomm SDK 文档没有说明允许的内容。至于 Window 句柄,Widcomm 使用 C++ 虚拟方法(yuk -- 这使得 direct P/Invoking 几乎不可能)来实现事件/回调,大概是 Figueira 先生的代码将这些回调转换为 Window 消息。

    [1] 创建蓝牙虚拟 COM 端口并不简单。在 MSFT+Win32 上,不知道为 COM 端口选择了什么名称!在 MSFT+WM 上,官方 API 在许多设备类型上都无法正常工作。我们的非官方方法需要重启 IIRC。 :-(

    【讨论】:

      【解决方案2】:

      所以首先你说你不能使用32feet.net。为什么?您显然在使用João Paulo Figueira's bluetooth stack library,因为这就是 wcbts.dll 的含义,因此不能强制禁止使用某些 3rd 方库(并且 32feet 是免费且开源的)。

      这让我想到了问题 #2。如果您正在使用他的库,您是否看过他关于如何使用该库的示例?它是从您必须拥有的same place as the DLL 下载的。

      至于 hWnd 和 nMsg 是什么,仅基于这是 Windows 编程和 API 的名称这一事实,我会说 hWnd 是窗口的句柄,当库和 nMsg 发生某些事情时会收到通知是您想要传递给该窗口的任何自定义消息常量,以便您能够查找这些消息。同样,我打赌他提供的样本说明了所有这些。

      【讨论】:

      • 是的,我已经看到了示例,但是包装器没有实现我试图添加到项目中的 SPP 服务,实际上上面的代码是由我编写的
      • 如果你想卖你的产品,32英尺是不行的!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多