From 8c49dea47485c0d9f31dd9793d7822a3fd3e58b4 Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Thu, 26 Jan 2023 12:40:38 +1100 Subject: [PATCH] Add delay after connecting to BLE device and start notifications before adding on characteristic change event listener --- static/js/BLE.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/static/js/BLE.js b/static/js/BLE.js index c73c104..baae75a 100644 --- a/static/js/BLE.js +++ b/static/js/BLE.js @@ -1,3 +1,7 @@ +function delay(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + async function connect(props) { const device = await navigator.bluetooth.requestDevice({ filters: [{ services: ["cycling_speed_and_cadence"] }], @@ -5,15 +9,19 @@ async function connect(props) { }); console.log(`%c\nšŸ‘©šŸ¼ā€āš•ļø`, "font-size: 82px;", "Starting CSC...\n\n"); const server = await device.gatt.connect(); + await delay(500); + console.log("Getting Service..."); const service = await server.getPrimaryService("cycling_speed_and_cadence"); - const char = await service.getCharacteristic("csc_measurement"); - char.oncharacteristicvaluechanged = props.onChange; - char.startNotifications(); - return char; + console.log("Getting Characteristic..."); + const characteristic = await service.getCharacteristic("csc_measurement"); + await characteristic.startNotifications(); + console.log("> Notifications started"); + characteristic.addEventListener("characteristicvaluechanged", props.onChange); } function parseCSC(e) { - const flags = e.target.value.getUint8(0, true); + const value = e.target.value; + const flags = value.getUint8(0, true); const hasWheel = !!(flags & 0x01); const hasCrank = !!(flags & 0x02); let index = 1;