if (E.CRC32(require('Storage').read('setting.json'))+require('Storage').hash(/\.boot\.js/)+E.CRC32(process.env.GIT_COMMIT)!=4699573043) { eval(require('Storage').read('bootupdate.js')); throw "Storage Updated!"} E.setFlags({pretokenise:1}); var bleServices = {}, bleServiceOptions = { uart : true}; Bluetooth.setConsole(true); if (!NRF.getSecurityStatus().connected) NRF.sleep(); Bangle.setLCDTimeout(5); E.setTimeZone(2);E.on('errorFlag', function(errorFlags) { g.reset(1).setColor("#ff0000").setFont("6x8").setFontAlign(0,1).drawString(errorFlags,g.getWidth()/2,g.getHeight()-1).flip(); print("Interpreter error:", errorFlags); E.getErrorFlags(); // clear flags so we get called next time }); Bangle.setOptions({wakeOnBTN1:true,wakeOnBTN2:true,wakeOnBTN3:true,wakeOnFaceUp:false,wakeOnTouch:false,wakeOnTwist:false,twistThreshold:819.2,twistMaxY:-800,twistTimeout:1000}); Bangle.setLCDBrightness(0.6); //android.boot.js (ª(){ªgbSend(message){Bluetooth.println("");Bluetooth.println(JSON.stringify(message));}¬lastMsg;¬settings=require("Storage").readJSON("android.settings.json",1) {};£(settings.rpŠ·)settings.rp=´;£(settings.asŠ·)settings.as=´;£(settings.vibrateŠ·)settings.vibrate="..";require('Storage').writeJSON("android.settings.json",settings);¬_GB=global.GB;global.GB=(event)¢{£(_GB)setTimeout(_GB,0,Object.assign({},event));¬HANDLERS={"notify":ª(){Object.assign(event,{t:"add",positive:´,negative:´});£(lastMsgževent.bodyŠlastMsg.bodyžlastMsg.srcŠ·ževent.srcŠ"Messages"){event.id=lastMsg.id;}lastMsg=event;require("messages").pushMessage(event);},"notify~":ª(){event.t="modify";require("messages").pushMessage(event);},"notify-":ª(){event.t="remove";require("messages").pushMessage(event);},"find":ª(){£(Bangle.findDeviceInterval){clearInterval(Bangle.findDeviceInterval);¾Bangle.findDeviceInterval;}£(event.n)Bangle.findDeviceInterval=setInterval(_¢Bangle.buzz(),1000);},"musicstate":ª(){require("messages").pushMessage({t:"modify",id:"music",title:"Music",state:event.state});},"musicinfo":ª(){require("messages").pushMessage(Object.assign(event,{t:"modify",id:"music",title:"Music"}));},"call":ª(){Object.assign(event,{t:event.cmdŠ"incoming"?"add":"remove",id:"call",src:"Phone",positive:´,negative:´,title:event.name "Call",body:"Incoming call\n"+event.number});require("messages").pushMessage(event);},"alarm":ª(){¬sched;±{sched=require("sched");}catch(e){}£(!sched)«;¬gbalarms=sched.getAlarms().filter(a¢a.appidŠ"gbalarms");§(¬i=0;iBangle.setHRMPower(0,"health"),6E4*a);if(1==a)for(var b=1;2>=b;b++)setTimeout(()=>{Bangle.setHRMPower(1,"health");setTimeout(()=>{Bangle.setHRMPower(0,"health")},2E5*b+6E4)},2E5*b)}Bangle.on("health",f);Bangle.on("HRM",b=>{80{function f(c){return String.fromCharCode(c.steps>>8,c.steps&255,c.bpm,Math.min(c.movement/8,255))}var b=new Date(Date.now()-59E4),e=function(c){return 145*(c.getDate()-1)+6*c.getHours()+(0|6*c.getMinutes()/60)}(b);b=function(c){return"health-"+c.getFullYear()+"-"+(c.getMonth()+1)+".raw"}(b);var g=require("Storage").read(b);if(g){var d=g.substr(8+4*e,4);if("\u00ff\u00ff\u00ff\u00ff"!=d){print("HEALTH ERR: Already written!");return}}else require("Storage").write(b, "HEALTH1\x00",0,17988);var h=8+4*e;require("Storage").write(b,f(a),h,17988);if(143==e%145)if(e=h+4,"\u00ff\u00ff\u00ff\u00ff"!=g.substr(e,4))print("HEALTH ERR: Daily summary already written!");else{a={steps:0,bpm:0,movement:0,movCnt:0,bpmCnt:0};for(var k=0;144>k;k++)d=g.substr(h,4),"\u00ff\u00ff\u00ff\u00ff"!=d&&(a.steps+=(d.charCodeAt(0)<<8)+d.charCodeAt(1),a.movement+=d.charCodeAt(2),a.movCnt++,d=d.charCodeAt(2),a.bpm+=d,d&&a.bpmCnt++),h-=4;a.bpmCnt&&(a.bpm/=a.bpmCnt);a.movCnt&&(a.movement/=a.movCnt); require("Storage").write(b,f(a),e,17988)}}); //sched.boot.js (ª(){£(Bangle.SCHED){clearTimeout(Bangle.SCHED);¾Bangle.SCHED;}¬alarms=require('Storage').readJSON('sched.json',1) [];¬time=¸Date();¬currentTime=(time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000);¬d=time.getDate();¬active=alarms.filter(a¢a.onž(a.lastŒd)ž(a.t+60000>currentTime)ž(a.dow’time.getDay()&1)ž(!a.date a.dateŠtime.toISOString().substr(0,10)));£(active.length){active=active.sort((a,b)¢a.t-b.t);¬t=active[0].t-currentTime;£(t<1000)t=1000;Bangle.SCHED=setTimeout(active[0].js 'load("sched.js")',t);}¤{Bangle.SCHED=setTimeout('eval(require("Storage").read("sched.boot.js"))',86400000-(Date.now()%86400000));}})();; NRF.setServices(bleServices, bleServiceOptions);delete bleServices,bleServiceOptions;