Use `ble_advert` module

master
Rob Pilling 2024-05-24 17:18:35 +01:00
parent 85fd1cd53a
commit b4dffbfd0e
12 changed files with 20 additions and 54 deletions

View File

@ -1,2 +1,3 @@
0.01: Initial release. 0.01: Initial release.
0.02: Handle the case where other apps have set bleAdvert to an array 0.02: Handle the case where other apps have set bleAdvert to an array
0.03: Use the bleAdvert module

View File

@ -1,26 +1,8 @@
(() => { (() => {
function advertiseBattery() { function advertiseBattery() {
if(Array.isArray(Bangle.bleAdvert)){ require("ble_advert").set(0x180F, [E.getBattery()]);
// 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); setInterval(advertiseBattery, 60 * 1000);
advertiseBattery(); advertiseBattery();
})(); })();

View File

@ -2,7 +2,7 @@
"id": "bootgattbat", "id": "bootgattbat",
"name": "BLE GATT Battery Service", "name": "BLE GATT Battery Service",
"shortName": "BLE Battery Service", "shortName": "BLE Battery Service",
"version": "0.02", "version": "0.03",
"description": "Adds the GATT Battery Service to advertise the percentage of battery currently remaining over Bluetooth.\n", "description": "Adds the GATT Battery Service to advertise the percentage of battery currently remaining over Bluetooth.\n",
"icon": "bluetooth.png", "icon": "bluetooth.png",
"type": "bootloader", "type": "bootloader",

View File

@ -1,3 +1,4 @@
0.01: Initial release. 0.01: Initial release.
0.02: Added compatibility to OpenTracks and added HRM Location 0.02: Added compatibility to OpenTracks and added HRM Location
0.03: Allow setting to keep BLE connected 0.03: Allow setting to keep BLE connected
0.04: Use the bleAdvert module

View File

@ -4,18 +4,13 @@
* This function prepares BLE heart rate Advertisement. * This function prepares BLE heart rate Advertisement.
*/ */
NRF.setAdvertising( require("ble_advert").set(0x180d, undefined, {
{
0x180d: undefined
},
{
// We need custom Advertisement settings for Apps like OpenTracks // We need custom Advertisement settings for Apps like OpenTracks
connectable: true, connectable: true,
discoverable: true, discoverable: true,
scannable: true, scannable: true,
whenConnected: true, whenConnected: true,
} });
);
NRF.setServices({ NRF.setServices({
0x180D: { // heart_rate 0x180D: { // heart_rate
@ -28,7 +23,6 @@
} }
} }
}); });
} }
const keepConnected = (require("Storage").readJSON("gatthrm.settings.json", 1) || {}).keepConnected; const keepConnected = (require("Storage").readJSON("gatthrm.settings.json", 1) || {}).keepConnected;

View File

@ -2,7 +2,7 @@
"id": "bootgatthrm", "id": "bootgatthrm",
"name": "BLE GATT HRM Service", "name": "BLE GATT HRM Service",
"shortName": "BLE HRM Service", "shortName": "BLE HRM Service",
"version": "0.03", "version": "0.04",
"description": "Adds the GATT HRM Service to advertise the measured HRM over Bluetooth.\n", "description": "Adds the GATT HRM Service to advertise the measured HRM over Bluetooth.\n",
"icon": "bluetooth.png", "icon": "bluetooth.png",
"type": "bootloader", "type": "bootloader",

View File

@ -1,2 +1,3 @@
0.01: New app! 0.01: New app!
0.02: Advertise accelerometer data and sensor location 0.02: Advertise accelerometer data and sensor location
0.03: Use the bleAdvert module

View File

@ -667,6 +667,8 @@ const getBleAdvert = <T>(map: (s: BleServ) => T, all = false) => {
// done via advertise in setServices() // done via advertise in setServices()
//const updateBleAdvert = () => { //const updateBleAdvert = () => {
// require("ble_advert").set(...)
//
// let bleAdvert: ReturnType<typeof getBleAdvert<undefined>>; // let bleAdvert: ReturnType<typeof getBleAdvert<undefined>>;
// //
// if (!(bleAdvert = (Bangle as any).bleAdvert)) { // if (!(bleAdvert = (Bangle as any).bleAdvert)) {

View File

@ -2,7 +2,7 @@
"id": "btadv", "id": "btadv",
"name": "btadv", "name": "btadv",
"shortName": "btadv", "shortName": "btadv",
"version": "0.02", "version": "0.03",
"description": "Advertise & export live heart rate, accel, pressure, GPS & mag data over bluetooth", "description": "Advertise & export live heart rate, accel, pressure, GPS & mag data over bluetooth",
"icon": "icon.png", "icon": "icon.png",
"tags": "health,tool,sensors,bluetooth", "tags": "health,tool,sensors,bluetooth",

View File

@ -3,3 +3,4 @@
0.03: Cope with identical duplicate buttons (fix #3260) 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) 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.04: Fix duplicate button on edit->save
0.05: Use the bleAdvert module

View File

@ -1,5 +1,3 @@
// Ensure we have the bleAdvert global (to play well with other stuff)
if (!Bangle.bleAdvert) Bangle.bleAdvert = {};
Bangle.btHomeData = []; Bangle.btHomeData = [];
{ {
require("BTHome").packetId = 0|(Math.random()*256); // random packet id so new packets show up require("BTHome").packetId = 0|(Math.random()*256); // random packet id so new packets show up
@ -39,20 +37,6 @@ Bangle.btHome = function(extras, options) {
if (bat) bat.v = E.getBattery(); if (bat) bat.v = E.getBattery();
var advert = require("BTHome").getAdvertisement(Bangle.btHomeData)[0xFCD2]; var advert = require("BTHome").getAdvertisement(Bangle.btHomeData)[0xFCD2];
// Add to the list of available advertising // 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 advOptions = {};
var updateTimeout = 10*60*1000; // update every 10 minutes var updateTimeout = 10*60*1000; // update every 10 minutes
if (options.event) { // if it's an event... if (options.event) { // if it's an event...
@ -60,7 +44,7 @@ Bangle.btHome = function(extras, options) {
advOptions.whenConnected = true; advOptions.whenConnected = true;
updateTimeout = 30000; // slow down in 30 seconds updateTimeout = 30000; // slow down in 30 seconds
} }
NRF.setAdvertising(Bangle.bleAdvert, advOptions); require("ble_advert").set(0xFCD2, advert, advOptions);
if (Bangle.btHomeTimeout) clearTimeout(Bangle.btHomeTimeout); if (Bangle.btHomeTimeout) clearTimeout(Bangle.btHomeTimeout);
Bangle.btHomeTimeout = setTimeout(function() { Bangle.btHomeTimeout = setTimeout(function() {
delete Bangle.btHomeTimeout; delete Bangle.btHomeTimeout;

View File

@ -1,7 +1,7 @@
{ "id": "bthome", { "id": "bthome",
"name": "BTHome", "name": "BTHome",
"shortName":"BTHome", "shortName":"BTHome",
"version":"0.04", "version":"0.05",
"description": "Allow your Bangle to advertise with BTHome and send events to Home Assistant via Bluetooth", "description": "Allow your Bangle to advertise with BTHome and send events to Home Assistant via Bluetooth",
"icon": "icon.png", "icon": "icon.png",
"type": "app", "type": "app",