在Ionic的蓝牙设备中输入密码

时间:2016-07-14 11:28:22

标签: angularjs ionic-framework bluetooth bluetooth-lowenergy password-encryption

我已经在Ionic / Angular应用程序和一些BluetoothLE设备之间建立了连接。

文档https://github.com/randdusing/cordova-plugin-bluetoothle引起的连接要求只是地址(无密码)

但是当我开始读取数据时,加密的数据无法读取。因此,如果我不包含密码,我将无法读取这些数据。我的意思是我需要这样的东西(图片来自Play商店的蓝牙应用程序),但我不知道把收集的密码放在哪里。

a

在阅读不同服务的价值后,这些就是结果。

b

连接:

$rootScope.connect = function(addressParam) {
  var params = {address: addressParam};

  $cordovaBluetoothLE.connect(params).then(null, function (obj) {
    console.log("Conexión error " + obj.status + " con dirección: " + obj.address);
    $rootScope.close(addressParam);
  }, function (obj) {
    console.log("Conexión success " + obj.status + " con dirección: " + obj.address);
    $rootScope.isCon(addressParam);
    if(obj.status==="disconnected" || obj.status==="undefined" ){
      $rootScope.connect(addressParam);
    }
  });
}

由于

PD:我正在连接的设备是信标。

3 个答案:

答案 0 :(得分:1)

  

我的意思是我需要这样的东西(图像来自蓝牙   Play商店中的应用程序)但我不知道收集的位置   密码。

“输入密码”对话框将出现或不依赖于两个想要相互连接的设备的IO功能。配对蓝牙LE设备有几种方法。其中一个名为“Passkey”,需要用户输入密码才能完成配对程序。另一个被称为“Just Works”,将用于至少有一个设备没有能够显示六位数字的显示器,也没有能够输入六位十进制数字的键盘。 如果您连接的信标设备无法显示或传送6位十进制数字,则不会查询输入密码。

  

但是当我开始读取数据时,加密的数据不是   可供阅读。

我看到你已经阅读了一些数据。 服务(UUID=0x1800)代表通用访问。特征(UUID=0x2a00)代表设备名称。此处设备名称为“2-3”。 ASCII中的“2”为0x32,“-”为0x2D,“3”为0x33。 蓝牙正式未定义服务(UUID=0xfff0)。也许它是制造商专业。如果要解析这些数据,您可能需要了解这些数据结构的组织方式。你想读什么其他数据?这些数据是什么类型的?

希望这对你有所帮助。

答案 1 :(得分:0)

0xFFF30xFFF4是基于Jaalee-Beacon-Android-SDK实施的majorminor的UUID (link)。 在Android SDK中,他们使用密码编写Major和minor并将其读回。写入操作中使用的密码是在与Beacon连接时设置的。相关代码:

majorChar.setValue(this.arraycat(PasswordBytes, MajorAsBytes));
this.bluetoothGatt.writeCharacteristic(majorChar);

在Cordova中,例如,使用默认密码0x666666,要将Major值更改为4660(0x1234),必须在写入值框中写入以下内容: 0x6666661234。 也就是说,使用Params的值

bluetoothle.write(writeSuccess, writeError, params);

您需要在数组中输入密码和主要值并按

进行编码
bluetoothle.bytesToEncodedString();

然后执行写操作。

答案 2 :(得分:0)

我对Cordova的理解是它为“Androind”和“iOS”SDK提供了一种包装层,以便为这两个平台提供通用API。

根据cordova-plugin-bluetoothle项目,低级Android和iOS实现在herehere中完成。但是,它并不一定适用于每个ble设备。

幸运的是,Jaalee Beacon在here中托管了他们的iOS SDK(虽然实现看起来不是开源的),而here中的android SDK也是如此。我们可能需要做的是分别端口修改 cordova-plugin-bluetoothle驱动程序类的低级实现。否则,我认为一切都不能与jaalee灯塔完美配合。

根据密码输入,在连接到ble设备时没有使用它,它只在读取/写入ble特性时使用。你可以查看file行143~159。注意密码的使用位置。

所以,在你的cordova代码中有一个硬编码值(也就是0x666666)是可以的。

我没有彻底阅读源代码,但我建议你这样做。希望你能得到一些有用的东西。