[英]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.