繁体   English   中英

Android上的BLE外设配对引脚

[英]BLE peripheral pairing pin on android

我在Android上实现了GATT服务器和客户端应用程序。 连接正常,我通过将PERMISSION_READ / WRITE_ENCRYPTED_MITM添加到所有GattCharacteristics来强制配对。

但是配对行为在不同的客户端上有所不同:

1)Pin显示在客户端/中央(Samsung Galaxy S3上的Android 5)上,应插入服务器/外围设备(Nexus 5上的Android 7)。

2)密钥显示在客户端/中央设备(Samsung Galaxy S3上的Android 5)和服务器/外围设备(Nexus 7上的Android 6)上

3)与Windows或iOS配对失败,服务器/外围设备需要输入引脚。

我期望和想要发生的是:

引脚显示在服务器/外围设备上,必须插入客户端/中央

有没有办法配置这种行为?

提前致谢!

编辑

这是我的设置:

BluetoothGattService gattService = new BluetoothGattService(
    serviceUUID, BluetoothGattService.SERVICE_TYPE_PRIMARY);
gattService.addCharacteristic(new BluetoothGattCharacteristic(
    charReadUUID,
    BluetoothGattCharacteristic.PROPERTY_READ,
    BluetoothGattCharacteristic.PERMISSION_READ_ENCRYPTED_MITM
));
gattService.addCharacteristic(new BluetoothGattCharacteristic(
    charWriteUUID,
    BluetoothGattCharacteristic.PROPERTY_WRITE,
    BluetoothGattCharacteristic.PERMISSION_WRITE_ENCRYPTED_MITM
));
gattServer.addService(gattService);

...

AdvertiseSettings settings = new AdvertiseSettings.Builder()
    .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED)
    .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
    .setConnectable(true)
    .build();

AdvertiseData data = new AdvertiseData.Builder()
    .setIncludeTxPowerLevel(false)
    .addServiceUuid(serviceUUID)
    .build();

BluetoothLeAdvertiser advertiser = adaper.getBluetoothLeAdvertiser()
advertiser.startAdvertising(settings, data, callback);

摘要: 将客户端的I / O功能设置为“仅限键盘”。

说明:

我不完全确定你的系统“幕后”会发生什么。 但是根据BLE CoreSpec,我可以告诉你应该发生什么。 首先看CoreSpec V4.2,Vol。 3,H部分,第二章。 2.3.5.1,表2.7和2.8。 在那里定义了使用哪种配对,具体取决于认证要求和设备的I / O能力。

您想要的是“密码输入:响应者显示,启动器输入”。 如果使用传统配对(根据蓝牙V4.0配对),并且如果:

  • 服务器(响应者)有一个显示AND
  • 客户端(发起者)有一个键盘AND
  • 服务器和客户端都没有显示和键盘。

(如果不使用OOB数据并强制执行MITM,但我认为这是给定的。)请注意,如果客户端和服务器都有显示和键盘,则默认情况是客户端显示和服务器输入。 看起来如果你的协议自动处理配对,它也会自动选择CoreSpec中定义的配对方法。

所以你看到的是对应不同服务器的不同I / O功能。 您的客户端似乎有显示器和键盘,因此如果您使用带显示器和键盘的服务器,客户端将显示密钥,响应者将等待输入(适合您的情况1)。 对于案例2,我们有数字比较; 只有当客户端和服务器都支持LE安全连接(根据蓝牙V4.2进行配对)时,才可以执行此操作。

对于案例3,我不知道发生了什么,但它可能是Android系统和iOS系统之间不能很好地运行的问题(但我不知道为什么)。

由于配对似乎在这里完全自动化,因此改变事物的唯一可能性是改变I / O能力。 应该有一个功能来改变这些功能,检查你的手册。 如果您不想在客户端上使用显示器,请将其I / O功能设置为“仅限键盘”,它将显示您期望的行为。(*)

(*)仅在使用传统配对时才有效。 如果两个设备都支持LE Secure Connections,则建议您使用此新配对协议,因为它消除了旧协议的安全问题。 (但我会假设在这种情况下,无论如何都会自动使用更新的协议。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM