代码之家  ›  专栏  ›  技术社区  ›  badbod99

C中的蓝牙,哪个堆栈,哪个SDK?

  •  17
  • badbod99  · 技术社区  · 17 年前

    我们有一个应用程序需要能够使用蓝牙满足以下要求:

    1. 从蓝牙设备接收文件(同时最多2个设备)
    2. 显示范围内的所有蓝牙设备
    3. 将文件发送到蓝牙设备
    4. 同时扫描蓝牙设备和传输文件

    我们在Windows XP上运行。

    我环顾四周,发现有三个主要的堆栈:

    蓝牙驱动

    在BlueSoleil的网站上,在他们的sdk部分,似乎只提到支持1个连接,这显然是不好的。

    窗户

    似乎只支持1个蓝牙加密狗,这可能意味着我们不能满足所有的要求。

    蓝牙驱动程序

    代价高昂,而且可能造成过度杀伤力?更复杂的API?思想?

    关于c的sdk,有没有人使用过这个api?

    谢谢

    3 回复  |  直到 16 年前
        1
  •  18
  •   alanjmcf    17 年前

    首先是免责声明,我是32feet.net库的维护者。-)

    我刚刚检查过,在XP上使用Microsoft堆栈(使用一个加密狗),我可以同时接收两个OBEX输入,还可以发现设备。它使用了32英尺.NET的obexListener类和bluetouthclient.discoverdevices方法。要发送obex-puts,可以使用其obexwebrequest类。为了使用obexListener进行多个并行连接,我只让多个线程调用其getContext()方法。

    所以这可能比我们想象的要简单…

    我还使用andy hume的obex服务器使用他的brecham.obex库对它进行了测试,并且并发接收在那里也可以正常工作。它可从 http://32feet.net/files/folders/objectexchange/entry6511.aspx .

    关于我们的widcomm支持。希望它在客户端看起来不太“不完整”…查询(设备发现)和连接全部工作。但是,服务器端仍然需要一些工作,而且有一些事情WIDCOMM API根本不支持,例如(编程身份验证处理)。

    样品有什么问题?编译时还是运行时?在MSFT堆栈或widcomm上?跟进时间: http://32feet.net/forums/37.aspx 如果你愿意的话。

        2
  •  5
  •   badbod99    16 年前

    是时候解释一下我们到底在做什么了…

    2个狗为什么?

    1. 如果加密狗正在进行扫描,传输速度会大大减慢。
    2. 一个加密狗只能支持7个并发传输,如果您进行扫描,这将下降到6个。如果你想同时发送、接收和扫描所有内容,那么一切都会变慢,而且你的频道非常有限。

    因此,我们的想法是运行一个加密狗连续扫描(这样设备就可以尽快出现),另一个加密狗保留用于传输,因为它不扫描,传输就很好和快速。

    我们使用的图书馆

    经过大量的测试和思考,我们最终选择了 WirelessCommunicationLibrary from BT framework .

    它支持widcomm、windows、bluesoleil和东芝栈。它支持我们所需要的所有服务器端的东西,是一个得到很好支持的商业产品,可以毫无错误地完美工作。

    哪一个堆栈?

    嗯,这是一个复杂的问题。所有堆栈都不同时支持2个加密狗。所以唯一的选择是在一个堆栈上运行一个加密狗,在另一个堆栈上运行另一个加密狗。这就是wcl库的用武之地!

    微软 -如果扫描过程中发生错误,则整个堆栈通常会崩溃。这不太理想!你必须关闭和重启无线电设备,这需要时间,而且很容易出错。但是…微软的栈处理文件传输非常好。

    蓝牙驱动程序 -widcomm堆栈不适合文件传输。有一些讨厌的小应用程序安装在widcomm上,它们一直试图从你的应用程序中获得控制权。您可以杀死bttray.exe,这有帮助,但在传输过程中仍然会从堆栈中得到一些奇怪的行为。我相信这是可以解决的,但是由于Windows不适合扫描,所以使用widcomm进行扫描是有意义的。

    所以…我们已经将一个加密狗设置为widcomm进行反复扫描,将一个加密狗设置为Microsoft,只处理文件传输(输入和输出)。

    让2个软件狗工作

    我们使用了两个相同的加密狗,我们可以批量订购它们,并存储它们,减少混乱。每台设备只需要2个蓝牙加密狗,很简单。

    唯一的问题是,这些是widcomm软件狗,我们需要在Windows堆栈上有一个软件狗。Windows不将它们识别为Windows软件狗,因此不会将它们注册到Windows堆栈中。所以…您可以对bt.inf文件进行黑客攻击,使其识别Windows的加密狗。然后你需要切换驱动程序,让其中一个软件狗在Windows驱动程序上运行,你就完成了。

    总结

    所以…我们一直有一个加密狗扫描,一个处理传输,每一个在单独的堆栈上,它都很好地工作。这是我找到的唯一能让两个加密狗在窗户上顺利工作的方法。如果你有更好的建议,请贴出来!

        3
  •  4
  •   arbiter    17 年前

    试试这个: 32feet.NET . 从2.4版开始,它们除了支持Windows堆栈外还支持widcomm堆栈。

    顺便问一下:为什么你需要同时使用两个加密狗?通常单个加密狗可以处理最多7个同时连接的设备。