2011-03-10 249 views
20

我试图实现一个Android应用程序从一个医疗设备接收数据,但我无法通过发现过程弄到手机和设备配对或彼此连接。Android等设备,UUID和PIN之间的蓝牙SPP质疑

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

我没有任何医疗设备的控制。我所能做的就是启动它并等待上述过程(测量后)。

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

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

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

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

我已经读过,通常PIN是由系统生成的,而用户确认是唯一需要的。我猜不是在我的系统中,因为该设备有点老。

我将不胜感激,如果你想和大家分享一些知识,提示,任何事情的猜测与我所上述!

由于提前, 弗雷德里克


编辑:

现在,我已经有了一个蓝兆盒配对的设备,他们正常通信。现在我正在寻找血压设备连接到我的手机的标准。我可以从Linux计算机(终端中的sdptool search SP)检查由bluegiga提供的蓝牙服务,并将其与我在Android上提供的蓝牙服务进行比较。这些值是我得到什么:

〜$搜索的sdptool SP

探究......

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

服务名称:1808130054

服务RecHandle:0x10003

服务类ID列表:

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

协议描述符列表:

“L2CAP”(0100)

“RFCOMM”(为0x0003)

频道:13

'

Seaching为SP上00:07:80:88:XX:XX。 。 。

服务名称:1808130054

服务描述:1808130054

服务RecHandle:0x10005

服务类ID列表:

“串行端口”(0x1101)

协议描述符列表:

“L2CAP”(0100)

“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?

/弗雷德里克

+0

对于最后三个问题,我想答案是否定的 - 不 - 不 - 不。 – Fredricus 2011-03-16 16:25:31

+0

Android始终会为应用程序注册128位UUID。但只要UUID的上半部分相同,即“0x1101”,医疗设备就应该查询下转换并找到应该识别的具有UUID“0x1101”的服务。您是否可以在手机上记录活动并检查医疗设备是否正在查询并能够连接到手机? – 2011-03-16 17:41:24

+0

是的,我一直使用LogCat来监视测试会话。我终于在设备和我的Android手机之间建立了连接。在配对过程中,我必须在耗尽时间之前手动输入PIN码。在我终于完成之前,我失败了几次。配对成功,我收到了预期的数据包。非常好。正如你所说,无论如何它都承认UUID,这非常重要! 我还没有尝试过那么多(这是工作日的结束)。我现在要继续工作。 – Fredricus 2011-03-17 07:31:44

回答

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位数的密钥并进行一些用户干预/确认,以允许配对(它只是一个很好的安全性政策不允许这种情况在没有用户干预的情况下自动发生),希望配对只会在第一次连接发生时需要,稍后它不需要任何用户干预以后的连接。

+0

谢谢你的时间!是的,该设备是[血压计](http://www.andonline.com/medical/products/details.php?catname=Connected_Health&product_num=UA-767PBT) – Fredricus 2011-03-14 10:21:49

+0

替代[链接](http:// www。 aandd.jp/products/medical/bluetooth/ua_767pbt.html)和[更多详情](http://www.telemedicine.jp/product_ua767pbt.html)。 是的,我设置了Android可发现的。你的第一点是非常有趣的,但我怎样才能同时以编程方式设置另一个自定义UUID? :-O – Fredricus 2011-03-14 10:47:10

+0

您可以使用自定义UUID而不是您的应用程序当前正在使用的SPP UUID进行注册......请参阅最后提示 - createRfcommSocketToServiceRecord(java.util.UUID) - http:// developer的说明.android.com/reference/android/bluetooth/BluetoothDevice.html#createRfcommSocketToServiceRecord(java.util.UUID),您将需要浏览医疗设备的SDP记录以获取其使用的UUID。 – 2011-03-14 16:04:59