diff --git a/apps/bootgattbat/ChangeLog b/apps/bootgattbat/ChangeLog index 3df6422e5..df07f6ad0 100644 --- a/apps/bootgattbat/ChangeLog +++ b/apps/bootgattbat/ChangeLog @@ -1,3 +1,2 @@ 0.01: Initial release. 0.02: Handle the case where other apps have set bleAdvert to an array -0.03: Use the bleAdvert module diff --git a/apps/bootgattbat/boot.js b/apps/bootgattbat/boot.js index f9b5969e2..34d9f8d93 100644 --- a/apps/bootgattbat/boot.js +++ b/apps/bootgattbat/boot.js @@ -1,8 +1,26 @@ (() => { function advertiseBattery() { - require("ble_advert").set(0x180F, [E.getBattery()]); + if(Array.isArray(Bangle.bleAdvert)){ + // ensure we're in the cycle + var found = false; + for(var ad in Bangle.bleAdvert){ + if(ad[0x180F]){ + ad[0x180F] = [E.getBattery()]; + found = true; + break; + } + } + if(!found) + Bangle.bleAdvert.push({ 0x180F: [E.getBattery()] }); + }else{ + // simple object + Bangle.bleAdvert[0x180F] = [E.getBattery()]; + } + + NRF.setAdvertising(Bangle.bleAdvert); } + if (!Bangle.bleAdvert) Bangle.bleAdvert = {}; setInterval(advertiseBattery, 60 * 1000); advertiseBattery(); })(); diff --git a/apps/bootgattbat/metadata.json b/apps/bootgattbat/metadata.json index b53708c2e..f67b4507d 100644 --- a/apps/bootgattbat/metadata.json +++ b/apps/bootgattbat/metadata.json @@ -2,7 +2,7 @@ "id": "bootgattbat", "name": "BLE GATT Battery Service", "shortName": "BLE Battery Service", - "version": "0.03", + "version": "0.02", "description": "Adds the GATT Battery Service to advertise the percentage of battery currently remaining over Bluetooth.\n", "icon": "bluetooth.png", "type": "bootloader", diff --git a/apps/bootgatthrm/ChangeLog b/apps/bootgatthrm/ChangeLog index 205f036b5..2512ed877 100644 --- a/apps/bootgatthrm/ChangeLog +++ b/apps/bootgatthrm/ChangeLog @@ -1,4 +1,3 @@ 0.01: Initial release. 0.02: Added compatibility to OpenTracks and added HRM Location 0.03: Allow setting to keep BLE connected -0.04: Use the bleAdvert module diff --git a/apps/bootgatthrm/boot.js b/apps/bootgatthrm/boot.js index efba1f453..0fceb86d9 100644 --- a/apps/bootgatthrm/boot.js +++ b/apps/bootgatthrm/boot.js @@ -4,13 +4,18 @@ * This function prepares BLE heart rate Advertisement. */ - require("ble_advert").set(0x180d, undefined, { - // We need custom Advertisement settings for Apps like OpenTracks - connectable: true, - discoverable: true, - scannable: true, - whenConnected: true, - }); + NRF.setAdvertising( + { + 0x180d: undefined + }, + { + // We need custom Advertisement settings for Apps like OpenTracks + connectable: true, + discoverable: true, + scannable: true, + whenConnected: true, + } + ); NRF.setServices({ 0x180D: { // heart_rate @@ -23,6 +28,7 @@ } } }); + } const keepConnected = (require("Storage").readJSON("gatthrm.settings.json", 1) || {}).keepConnected; diff --git a/apps/bootgatthrm/metadata.json b/apps/bootgatthrm/metadata.json index d32b51601..dc831ab7d 100644 --- a/apps/bootgatthrm/metadata.json +++ b/apps/bootgatthrm/metadata.json @@ -2,7 +2,7 @@ "id": "bootgatthrm", "name": "BLE GATT HRM Service", "shortName": "BLE HRM Service", - "version": "0.04", + "version": "0.03", "description": "Adds the GATT HRM Service to advertise the measured HRM over Bluetooth.\n", "icon": "bluetooth.png", "type": "bootloader", diff --git a/apps/btadv/app.ts b/apps/btadv/app.ts index b56546ba1..713172ca1 100644 --- a/apps/btadv/app.ts +++ b/apps/btadv/app.ts @@ -667,8 +667,6 @@ const getBleAdvert = (map: (s: BleServ) => T, all = false) => { // done via advertise in setServices() //const updateBleAdvert = () => { -// require("ble_advert").set(...) -// // let bleAdvert: ReturnType>; // // if (!(bleAdvert = (Bangle as any).bleAdvert)) { diff --git a/apps/bthome/ChangeLog b/apps/bthome/ChangeLog index 82c93ee1f..ca91e0f34 100644 --- a/apps/bthome/ChangeLog +++ b/apps/bthome/ChangeLog @@ -2,5 +2,4 @@ 0.02: Fix double-button press if you press the next button within 30s (#3243) 0.03: Cope with identical duplicate buttons (fix #3260) Set 'n' for buttons in Bangle.btHomeData correctly (avoids adding extra buttons on end of advertising) -0.04: Fix duplicate button on edit->save -0.05: Use the bleAdvert module +0.04: Fix duplicate button on edit->save \ No newline at end of file diff --git a/apps/bthome/boot.js b/apps/bthome/boot.js index 00e08df90..7c9e37f77 100644 --- a/apps/bthome/boot.js +++ b/apps/bthome/boot.js @@ -1,3 +1,5 @@ +// Ensure we have the bleAdvert global (to play well with other stuff) +if (!Bangle.bleAdvert) Bangle.bleAdvert = {}; Bangle.btHomeData = []; { require("BTHome").packetId = 0|(Math.random()*256); // random packet id so new packets show up @@ -37,6 +39,20 @@ Bangle.btHome = function(extras, options) { if (bat) bat.v = E.getBattery(); var advert = require("BTHome").getAdvertisement(Bangle.btHomeData)[0xFCD2]; // Add to the list of available advertising + if(Array.isArray(Bangle.bleAdvert)){ + var found = false; + for(var ad in Bangle.bleAdvert){ + if(ad[0xFCD2]){ + ad[0xFCD2] = advert; + found = true; + break; + } + } + if(!found) + Bangle.bleAdvert.push({ 0xFCD2: advert }); + } else { + Bangle.bleAdvert[0xFCD2] = advert; + } var advOptions = {}; var updateTimeout = 10*60*1000; // update every 10 minutes if (options.event) { // if it's an event... @@ -44,7 +60,7 @@ Bangle.btHome = function(extras, options) { advOptions.whenConnected = true; updateTimeout = 30000; // slow down in 30 seconds } - require("ble_advert").set(0xFCD2, advert, advOptions); + NRF.setAdvertising(Bangle.bleAdvert, advOptions); if (Bangle.btHomeTimeout) clearTimeout(Bangle.btHomeTimeout); Bangle.btHomeTimeout = setTimeout(function() { delete Bangle.btHomeTimeout; diff --git a/apps/bthome/metadata.json b/apps/bthome/metadata.json index 0156a5d32..1ccc19316 100644 --- a/apps/bthome/metadata.json +++ b/apps/bthome/metadata.json @@ -1,7 +1,7 @@ { "id": "bthome", "name": "BTHome", "shortName":"BTHome", - "version":"0.05", + "version":"0.04", "description": "Allow your Bangle to advertise with BTHome and send events to Home Assistant via Bluetooth", "icon": "icon.png", "type": "app", diff --git a/apps/bthometemp/ChangeLog b/apps/bthometemp/ChangeLog index 082b44f4a..480780ec5 100644 --- a/apps/bthometemp/ChangeLog +++ b/apps/bthometemp/ChangeLog @@ -1,3 +1,2 @@ 0.01: New App! 0.02: Handle the case where other apps have set bleAdvert to an array -0.03: Use the bleAdvert module diff --git a/apps/bthometemp/app.js b/apps/bthometemp/app.js index f18e33c20..cf74c7937 100644 --- a/apps/bthometemp/app.js +++ b/apps/bthometemp/app.js @@ -38,7 +38,21 @@ function onTemperature(p) { pressure100&255,(pressure100>>8)&255,pressure100>>16 ]; - require("ble_advert").set(0xFCD2, advert); + if(Array.isArray(Bangle.bleAdvert)){ + var found = false; + for(var ad in Bangle.bleAdvert){ + if(ad[0xFCD2]){ + ad[0xFCD2] = advert; + found = true; + break; + } + } + if(!found) + Bangle.bleAdvert.push({ 0xFCD2: advert }); + }else{ + Bangle.bleAdvert[0xFCD2] = advert; + } + NRF.setAdvertising(Bangle.bleAdvert); } // Gets the temperature in the most accurate way with pressure sensor @@ -46,6 +60,7 @@ function drawTemperature() { Bangle.getPressure().then(p =>{if (p) onTemperature(p);}); } +if (!Bangle.bleAdvert) Bangle.bleAdvert = {}; setInterval(function() { drawTemperature(); }, 10000); // update every 10s diff --git a/apps/bthometemp/metadata.json b/apps/bthometemp/metadata.json index 3e96d95f8..fc6804f17 100644 --- a/apps/bthometemp/metadata.json +++ b/apps/bthometemp/metadata.json @@ -1,7 +1,7 @@ { "id": "bthometemp", "name": "BTHome Temperature and Pressure", "shortName":"BTHome T", - "version":"0.03", + "version":"0.02", "description": "Displays temperature and pressure, and advertises them over bluetooth for Home Assistant using BTHome.io standard", "icon": "app.png", "tags": "bthome,bluetooth,temperature", diff --git a/modules/ble_advert.js b/modules/ble_advert.js deleted file mode 100644 index 8b9615f36..000000000 --- a/modules/ble_advert.js +++ /dev/null @@ -1,51 +0,0 @@ -exports.set = function (id, advert, options) { - var _a, _b; - var bangle = Bangle; - if (Array.isArray(bangle.bleAdvert)) { - var found = false; - for (var _i = 0, _c = bangle.bleAdvert; _i < _c.length; _i++) { - var ad = _c[_i]; - if (ad[id]) { - ad[id] = advert; - found = true; - break; - } - } - if (!found) - bangle.bleAdvert.push((_a = {}, _a[id] = advert, _a)); - } - else if (bangle.bleAdvert) { - bangle.bleAdvert[id] = advert; - } - else { - bangle.bleAdvert = (_b = {}, - _b[id] = advert, - _b); - } - NRF.setAdvertising(bangle.bleAdvert, options); -}; -exports.remove = function (id, options) { - var bangle = Bangle; - if (Array.isArray(bangle.bleAdvert)) { - var i = 0; - for (var _i = 0, _a = bangle.bleAdvert; _i < _a.length; _i++) { - var ad = _a[_i]; - if (ad[id]) { - delete ad[id]; - var empty = true; - for (var _ in ad) { - empty = false; - break; - } - if (empty) - bangle.bleAdvert.splice(i, 1); - break; - } - i++; - } - } - else if (bangle.bleAdvert) { - delete bangle.bleAdvert[id]; - } - NRF.setAdvertising(bangle.bleAdvert, options); -}; diff --git a/modules/ble_advert.ts b/modules/ble_advert.ts deleted file mode 100644 index df71eef39..000000000 --- a/modules/ble_advert.ts +++ /dev/null @@ -1,56 +0,0 @@ -declare let exports: any; - -type BleAdvert = { [key: string | number]: number[] }; -type BangleWithAdvert = (typeof Bangle) & { bleAdvert?: BleAdvert | BleAdvert[]; }; -type SetAdvertisingOptions = typeof NRF.setAdvertising extends (data: any, options: infer Opts) => any ? Opts : never; - -exports.set = (id: string | number, advert: number[], options?: SetAdvertisingOptions) => { - const bangle = Bangle as BangleWithAdvert; - - if(Array.isArray(bangle.bleAdvert)){ - let found = false; - for(let ad of bangle.bleAdvert){ - if(ad[id]){ - ad[id] = advert; - found = true; - break; - } - } - if(!found) - bangle.bleAdvert.push({ [id]: advert }); - }else if(bangle.bleAdvert){ - bangle.bleAdvert[id] = advert; - }else{ - bangle.bleAdvert = { - [id]: advert, - }; - } - - NRF.setAdvertising(bangle.bleAdvert, options); -}; - -exports.remove = (id: string | number, options?: SetAdvertisingOptions) => { - const bangle = Bangle as BangleWithAdvert; - - if(Array.isArray(bangle.bleAdvert)){ - let i = 0; - for(const ad of bangle.bleAdvert){ - if(ad[id]){ - delete ad[id]; - let empty = true; - // eslint-disable-next-line no-unused-vars - for(const _ in ad){ - empty = false; - break; - } - if(empty) bangle.bleAdvert.splice(i, 1); - break; - } - i++; - } - }else if(bangle.bleAdvert){ - delete bangle.bleAdvert[id]; - } - - NRF.setAdvertising(bangle.bleAdvert, options); -}; diff --git a/tsconfig.json b/tsconfig.json index 5d46f672c..da6aba2e9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -61,7 +61,7 @@ "*/*/*.ts", "apps/*/*.js", // with checkJs: true "*/*/*.d.ts", - "modules/*.ts", + "modules/*.d.ts", "typescript/types/*.d.ts" ] }