繁体   English   中英

如何在数组缓冲区的键/值到达时存储它们?

[英]How to store key/values of an array buffer as they arrive?

因此,我正在使用cordova-plugin-ble-central从HM10的(BLE模块)UART TX / RX特性读取数据。

读取时,该插件返回ArrayBuffer,但我的HM10一次发送20个字节的数据,而我的代码仅接收尾随数组。

例如,如果您从计算机发送: 123456789012345678905

您只会收到手机的ArrayBuffer: 5

    this.ble.read(this.peripheral.id, 'ffe0', 'ffe1').then(
  buffer => {
            this.ngZone.run(() => {
            this.readMessage = this.arrayBufferToString(buffer); })
  });

}

arrayBufferToString(buffer){

var bufView = new Uint8Array(buffer);
var length = bufView.length;
var result = '';
var addition = 19;

for(var i = 0;i<length;i+=addition){

    if(i + addition > length){
        addition = length - i;
    }
    result += String.fromCharCode.apply(null, 
bufView.subarray(i,i+addition));
}

return result;

}

无济于事。 :(

我该如何返回函数,即以非常快的毫秒级增量(一次20个字节)返回各种ArrayBuffer,然后将所有值添加到一个“最终” ArrayBuffer中,然后转换为字符串?

如果您能帮助回答这个问题,您将成为我的英雄。 到目前为止,我已经花了15多个小时。 我弄清楚了如何以20字节为增量发送数据,但不接收。

直观示例(假设我的HC10发送40字节传输):

ArrayBuffer X = bytes 0-19 values (from 0-.01 seconds)
ArrayBuffer X = bytes 19-29 different values (from .01 seconds to .02 seconds)
ArrayBuffer X = bytes 29-39 (from .02 seconds to .03 seconds)

这是该插件的开发人员建议我执行的操作,但是我无法使用Ionic执行“ innerHTML”,因为它使用了ngZones。 可以吗

非常感谢大家!

对不起,大家 我这周时间很差。

这是我为自己找到的答案:

Ionic 3.x,Angular,您选择的BLE插件等。

logData = ' ';

onConnected(peripheral) {  

this.ngZone.run(() => {
  this.peripheral = peripheral;
          this.setStatus('Connected to ' + peripheral.name || peripheral.id);
    });

   this.ble.startNotification(this.peripheral.id, 'ffe0', 'ffe1').subscribe(
       buffer => {
      var s = this.arrayBufferToString(buffer);
        if (s.match('/')) {
        this.logData = s;
        this.ngZone.run(() => {
            this.readMessage = this.logData; })
    } else {
        this.logData += s;
        this.ngZone.run(() => {
            this.readMessage = this.logData; })
}
  });

    this.ble.read(this.peripheral.id, 'ffe0', 'ffe1').then(
  buffer => {
      var s = this.arrayBufferToString(buffer);
        if (s.match('/')) {
        this.logData = s;
        this.ngZone.run(() => {
            this.readMessage = this.logData; })
    } else {
        this.logData += s;
        this.ngZone.run(() => {
            this.readMessage = this.logData; })
}
  });

}

clear(box) {
    this.logData = '';
        this.ngZone.run(() => {
            this.readMessage = ''; })
}

在您的HTML文档上(用于“高级”调试):

<ion-card>
<ion-card-header>
<ion-icon name="md-cloud-download" item-start></ion-icon>
Data Recieved  <button ion-button round outline (click)="clear(box)">Clear</button>
</ion-card-header>
<ion-card-content>
<pre>{{ readMessage }}</pre>
</ion-card-content>

暂无
暂无

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

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