Android和其他设备之间的蓝牙SPP,UUID和PIN问题

时间:2011-03-10 17:05:15

标签: android bluetooth serial-port

我正在尝试实施一个Android应用程序来接收来自医疗设备的数据,但我无法完成发现过程并让手机与设备配对或相互连接。

描述医疗器械: 该设备使用服务发现协议(SDP)和串行端口配置文件(SPP)。 它启动一个查询程序,用匹配的COD过滤器和服务名称发现(最多10个)周围的接入点。然后通过检查PIN顺序建立与接入点的连接(使用Page Procedure)。匹配PIN后,将上载数据。上传数据后,设备等待确认。决策是主人并启动沟通。

我无法控制医疗设备。我所能做的就是启动它并等待上述程序(测量后)。

Android应用程序: 我是从开发者页面上的Bluetooth Chat Example开始的。到目前为止,我已使用00001101-0000-1000-8000-00805f9b34fb替换了UUID以使用SPP并将服务名称设置为适当的名称。通过从计算机检查服务,我可以确认这似乎是正确的。由于医疗设备是询问和启动通信的设备,我的服务使用BluetoothServerSocketaccept()方法开始收听它。

  1. 在我看过的开发者页面中,UUID必须在尝试通信的应用程序之间匹配。由于我无法为医疗设备设置任何UUID,我想知道这是否会成为一个问题,或者医疗设备是否足够使用SP配置文件?

  2. 如果服务名称和UUID正确且医疗设备实际上会尝试连接到正在侦听连接的蓝牙服务,那么Android系统会提示我手动输入PIN以便能够配对设备(因为医疗设备有预先设定的PIN码)?

  3. 我没有在Android SDK API中找到任何可以让我为我的蓝牙服务设置PIN的内容(如果这是失败的话),这可能吗?

  4. 我读过,通常现在系统会生成PIN,并且只需要用户确认。我想不在我的系统中,因为设备有点老了。

    如果你想分享一些与我上面描述的相关的知识,提示,猜测,我会很高兴。

    提前致谢, 弗雷德里克


    编辑:

    现在,我已将设备与 bluegiga 框配对,并且它们正确通信。现在我正在寻找满足血压设备连接到手机的标准。我可以从Linux计算机(终端中的sdptool search SP)检查 bluegiga 提供的蓝牙服务,并将其与我在Android上提供的蓝牙服务进行比较。这些值是我得到的:

      

    〜$ sdptool搜索SP

         

    询问......

         

    在8C上搜索SP:71:F8:E5:XX:XX。 。

         

    服务名称:1808130054

         

    Service RecHandle:0x10003

         

    服务类ID列表:

         

    UUID 128:00001101-0000-1000-8000-00805f9b34fb

         

    协议描述符列表:

         

    “L2CAP”(0x0100)

         

    “RFCOMM”(0x0003)

         

    频道:13

         

         

    在00:07:80:88:XX:XX上搜索SP。 。

         

    服务名称:1808130054

         

    服务说明:1808130054

         

    Service RecHandle:0x10005

         

    服务类ID列表:

         

    “串行端口”(0x1101)

         

    协议描述符列表:

         

    “L2CAP”(0x0100)

         

    “RFCOMM”(0x0003)

         

    频道:12

         

    语言库Attr列表:

         

    code_ISO639:0x656e

         

    enconding:0x6a

         

    base_offset:0x100

    找到的第一个设备是手机(mac = 8C:71 ... Google Nexus S),第二个设备(mac = 00:07 ...)是 bluegiga 。我注意到Android设备上没有服务描述。我认为最重要的区别在于服务类ID列表。 Android上的UUID 128,但在 bluegiga 上描述的格式完全不同。

    1. 是否可以在Android上使用除UUID以外的其他格式的服务类ID?

    2. 您可以操作服务发现数据库中注册的服务记录吗?

    3. 是否有可能以某种方式直接使用本机开发c / c ++实现BlueZ?

    4. /弗雷德里克

1 个答案:

答案 0 :(得分:6)

如果您可以提供医疗设备的名称/链接(如果它是商业设备),可能有助于阅读其指南以更多地猜测可能发生的情况。 以下是一些建议:

  1. 除了串行端口UUID之外,SPP上的每个服务都可以具有自定义的特定UUID - 例如,医疗设备可以使用此特定于自定义的UUID查找与其兼容的服务。
    如果医疗设备当前成功连接到PC或某个其他接入点并传输数据,您可以尝试读取该设备的SDP记录,并确定除SPP UUID之外的任何特定UUID(如果有),并使用在你的申请中也一样。

  2. 如果医疗设备无法找到您的手机/应用程序,可能是因为它无法被发现。 Android设备默认情况下即使您是服务器也无法被发现,它只能连接且不可发现,您可以尝试通过编程方式或通过设置使其可被发现,并查看医疗设备是否可以找到您的设备。 见这里 - Enabling Discoverability in Android

  3. 对于PIN配对,Android设备应该在非配对设备尝试连接时启动配对过程,您可以在完成建议(1)和(2)后尝试, 如果其中一个设备的版本高于蓝牙2.1版本,则使用PIN配对。即使是较新的设备,手机也需要一个带有一些用户干预/确认的6位密钥,以便进行配对(这只是一个很好的安全策略)不允许这种情况在没有用户干预的情况下自动发生),希望配对只需要第一次连接发生,以后不需要任何用户干预后续连接。