Broadcasting data 60 FPS with GATT
oishi89 opened this issue · 6 comments
Hello.
I'm using a CSR V.4 (csr8510 a10) and I'm trying to broadcast 40 bytes of data with 40 - 60 time per second. It seems to be possible and working fine but after sending data for a while I got a disconnection randomly with LIB USB ERROR message. I don't know how to figure out the throughput or bandwidth of CSR V.4. Do you have any ideal about that?
Thanks
Hi @oishi89,
How do you broadcast the data?
Could you please upload the relevant code snippets?
@zach-luman I was creating a timer with interval time is 16 ms.
In onSubscribe handler? @oishi89
Please upload the full characteristic code here.
const bleno = require("bleno");
console.log("Starting bleno...");
const COUNTER_SERVICE_UUID = "00010000-9FAB-43C8-9231-40F6E305F96D";
const COUNTER_CHAR_UUID = "00010001-9FAB-43C8-9231-40F6E305F96D";
class CounterCharacteristic extends bleno.Characteristic {
constructor() {
super({
uuid: COUNTER_CHAR_UUID,
properties: ["notify"],
value: null
});
this.counter = 0;
}
onSubscribe(maxValueSize, updateValueCallback) {
console.log(`Counter subscribed, max value size is ${maxValueSize}`);
this.updateValueCallback = updateValueCallback;
}
onUnsubscribe() {
console.log("Counter unsubscribed");
this.updateValueCallback = null;
}
sendNotification(value) {
if(this.updateValueCallback) {
console.log(`Sending notification with value ${value}`);
const notificationBytes = new Buffer(4 * 10);
for (var i = 0; i < 10; i++) {
notificationBytes.writeFloatLE(value * 0.01, i * 4);
}
this.updateValueCallback(notificationBytes);
}
}
start() {
console.log("Starting counter");
this.handle = setInterval(() => {
this.counter = (this.counter + 1) % 0xFFFF;
this.sendNotification(this.counter);
}, 16);
}
stop() {
console.log("Stopping counter");
clearInterval(this.handle);
this.handle = null;
}
}
let counter = new CounterCharacteristic();
counter.start();
bleno.on("stateChange", state => {
if (state === "poweredOn") {
bleno.startAdvertising("Counter", [COUNTER_SERVICE_UUID], err => {
if (err) console.log(err);
});
} else {
console.log("Stopping...");
counter.stop();
bleno.stopAdvertising();
}
});
bleno.on("advertisingStart", err => {
console.log("Configuring services...");
if(err) {
console.error(err);
return;
}
let service = new bleno.PrimaryService({
uuid: COUNTER_CHAR_UUID,
characteristics: [counter]
});
bleno.setServices([service], err => {
if(err)
console.log(err);
else
console.log("Services configured");
});
});
// some diagnostics
bleno.on("stateChange", state => console.log(Bleno: Adapter changed state to ${state}
));
bleno.on("advertisingStart", err => console.log("Bleno: advertisingStart"));
bleno.on("advertisingStartError", err => console.log("Bleno: advertisingStartError"));
bleno.on("advertisingStop", err => console.log("Bleno: advertisingStop"));
bleno.on("servicesSet", err => console.log("Bleno: servicesSet"));
bleno.on("servicesSetError", err => console.log("Bleno: servicesSetError"));
bleno.on("accept", clientAddress => console.log(Bleno: accept ${clientAddress}
));
bleno.on("disconnect", clientAddress => console.log(Bleno: disconnect ${clientAddress}
));
@oishi89
Thanks for uploading code snippet.
But I'm wondering how did you let this peripheral subscribed?
In other word, how is onSubscribe handler called?