2019-11-12 19:14:14 +00:00
|
|
|
Bangle.setLCDMode("doublebuffered");
|
2019-11-13 10:11:11 +00:00
|
|
|
var img = {
|
|
|
|
width : 48, height : 48, bpp : 8,
|
|
|
|
transparent : 254,
|
|
|
|
buffer : require("heatshrink").decompress(atob("/wA/AH4A/ACl5p9PvIutp9V0YvpFwV553OFlIAC44vnFwtPFwJfnGIl55vNX1dVsQQMvQvdsQADHpd6AYIvnTgd6F4QxbF4gwFfYgvBGAYvbnAyGFwiOBAAVVLzlcrgvEqxeHAAQvdm4vPlYwZF4gHCrguFqxfFF6QWGF44tERw4wSC467DrgOCFxAZGFhhHKGAgxBRoiMEPRItJFxQABwAxDF4VVLBIGCmQuLRpAwFF4i4MLxwvNL4VcvSLEdCaoDF5iODBxQvfRoeAF7wwLRogvgGBYucF47yNF9FVqwuNqoaDeCQvHBQNVFxYbGYDFWfhx8HMCQfRXoowRF5KtBDpbtGMCgdFPpovcDgh7OF7JMGF87cWCY4vPDZZgQlgABF6qaIIhwveYKQvaVp4wYOo59ORioYEDIreOdqwA/AH4A2A"))
|
|
|
|
};
|
|
|
|
// ideally we'd just load the image file but it looks like NodeConf
|
|
|
|
// Bangle.js firmware had bug which meant that transparency in image
|
|
|
|
// strings wasn't used
|
|
|
|
//var img = require("Storage").read("*horsey");
|
2019-11-12 19:14:14 +00:00
|
|
|
var mycounter = 0;
|
|
|
|
var players = {};
|
|
|
|
setWatch(x=>{
|
|
|
|
mycounter++;
|
|
|
|
updateAdvertising();
|
|
|
|
},BTN1,{repeat:true});
|
|
|
|
|
|
|
|
function updateAdvertising() {
|
2020-05-23 21:32:33 +00:00
|
|
|
try {
|
|
|
|
NRF.setAdvertising({},{
|
|
|
|
manufacturer: 0x0590,
|
|
|
|
manufacturerData: new Uint8Array([mycounter>>8,mycounter&255]),
|
|
|
|
interval: 60
|
|
|
|
});
|
|
|
|
} catch(e){}
|
2019-11-12 19:14:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function drawPlayers() {
|
2019-11-13 10:11:11 +00:00
|
|
|
g.setColor(0,0.3,0);
|
|
|
|
g.fillRect(0,0,240,160);
|
|
|
|
g.setColor(1,1,1);
|
|
|
|
g.setFont("6x8");
|
|
|
|
g.setFontAlign(0,0);
|
2019-11-12 19:14:14 +00:00
|
|
|
var max = mycounter;
|
2019-11-13 10:56:44 +00:00
|
|
|
var playerCount=0;
|
2019-11-12 19:14:14 +00:00
|
|
|
for (var player of players) {
|
|
|
|
max = Math.max(player.cnt, mycounter);
|
2019-11-13 10:56:44 +00:00
|
|
|
playerCount++;
|
2019-11-12 19:14:14 +00:00
|
|
|
}
|
|
|
|
var offset = 0;
|
2019-11-13 10:11:11 +00:00
|
|
|
if (max > 200)
|
|
|
|
offset = max-200;
|
2019-11-12 19:14:14 +00:00
|
|
|
|
|
|
|
var d = 63 - (offset&63);
|
|
|
|
g.fillRect(0,10,240,12);
|
|
|
|
for (var x=d;x<240;x+=64)
|
2020-05-23 21:32:33 +00:00
|
|
|
g.fillRect(x,12,x+2,12+20);
|
2019-11-12 19:14:14 +00:00
|
|
|
var y = 20;
|
2019-11-13 10:11:11 +00:00
|
|
|
var p = mycounter-offset;
|
|
|
|
g.drawString("You",p-16,y+20);
|
|
|
|
g.drawImage(img, p,y);
|
2019-11-12 19:14:14 +00:00
|
|
|
|
2019-11-13 10:56:44 +00:00
|
|
|
var spacing = (120-20)/(playerCount+1);
|
2019-11-12 19:14:14 +00:00
|
|
|
for (var player of players) {
|
|
|
|
y+=45;
|
2019-11-13 10:11:11 +00:00
|
|
|
var p = player.cnt-offset;
|
|
|
|
g.drawString(player.name,p-16,y+20);
|
|
|
|
g.drawImage(img, p,y);
|
2019-11-12 19:14:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
g.fillRect(0,150,240,152);
|
|
|
|
for (var x=d;x<240;x+=64)
|
2020-05-23 21:32:33 +00:00
|
|
|
g.fillRect(x,152,x+2,160);
|
2019-11-12 19:14:14 +00:00
|
|
|
g.flip();
|
|
|
|
}
|
|
|
|
|
|
|
|
function doScan() {
|
|
|
|
NRF.findDevices(devs=>{
|
|
|
|
devs.forEach(dev => {
|
|
|
|
players[dev.id] = {
|
|
|
|
name : dev.id.substr(12,5),
|
|
|
|
cnt : (dev.manufacturerData[0]<<8)|dev.manufacturerData[1]
|
|
|
|
};
|
|
|
|
});
|
|
|
|
drawPlayers();
|
|
|
|
doScan();
|
|
|
|
},{timeout : 250, filters : [{ manufacturerData:{0x0590:{}} }] });
|
|
|
|
}
|
|
|
|
|
|
|
|
drawPlayers();
|
|
|
|
try { NRF.wake(); } catch (e) {}
|
|
|
|
doScan();
|
|
|
|
setInterval(drawPlayers, 100);
|
|
|
|
|
|
|
|
updateAdvertising();
|