forked from FOSS/BangleApps
55 lines
1.9 KiB
JavaScript
55 lines
1.9 KiB
JavaScript
Bangle.btHomeData = [];
|
|
{
|
|
require("BTHome").packetId = 0|(Math.random()*256); // random packet id so new packets show up
|
|
let settings = require("Storage").readJSON("bthome.json",1)||{};
|
|
if (settings.showBattery)
|
|
Bangle.btHomeData.push({
|
|
type : "battery",
|
|
v : E.getBattery()
|
|
});
|
|
// If buttons defined, add events for them
|
|
if (settings.buttons instanceof Array) {
|
|
let n = settings.buttons.reduce((n,b)=>b.n>n?b.n:n,-1);
|
|
for (var i=0;i<=n;i++)
|
|
Bangle.btHomeData.push({type:"button_event",v:"none",n:i});
|
|
}
|
|
}
|
|
|
|
/* Global function to allow advertising BTHome adverts
|
|
extras = array of extra data, see require("BTHome").getAdvertisement - can add {n:0/1/2} for different instances
|
|
options = {
|
|
event : an event - advertise fast, and when connected
|
|
}
|
|
*/
|
|
Bangle.btHome = function(extras, options) {
|
|
options = options||{};
|
|
// clear any existing events
|
|
Bangle.btHomeData.forEach(d => {if (d.type=="button_event") d.v="none";});
|
|
// update with extras
|
|
if (extras) {
|
|
extras.forEach(extra => {
|
|
var n = Bangle.btHomeData.find(b=>b.type==extra.type && b.n==extra.n);
|
|
if (n) Object.assign(n, extra);
|
|
else Bangle.btHomeData.push(extra);
|
|
});
|
|
}
|
|
var bat = Bangle.btHomeData.find(b=>b.type=="battery");
|
|
if (bat) bat.v = E.getBattery();
|
|
var advert = require("BTHome").getAdvertisement(Bangle.btHomeData)[0xFCD2];
|
|
// Add to the list of available advertising
|
|
var advOptions = {};
|
|
var updateTimeout = 10*60*1000; // update every 10 minutes
|
|
if (options.event) { // if it's an event...
|
|
advOptions.interval = 50;
|
|
advOptions.whenConnected = true;
|
|
updateTimeout = 30000; // slow down in 30 seconds
|
|
}
|
|
require("ble_advert").set(0xFCD2, advert, advOptions);
|
|
if (Bangle.btHomeTimeout) clearTimeout(Bangle.btHomeTimeout);
|
|
Bangle.btHomeTimeout = setTimeout(function() {
|
|
delete Bangle.btHomeTimeout;
|
|
// update
|
|
Bangle.btHome();
|
|
}, updateTimeout);
|
|
};
|