if (E.CRC32(require('Storage').read('setting.json'))+require('Storage').hash(/\.boot\.js/)!=4455296975) { eval(require('Storage').read('bootupdate.js')); throw "Storage Updated!"} E.setFlags({pretokenise:1}); var bleServices = {}, bleServiceOptions = { uart : true}; Bluetooth.setConsole(true); Bangle.setLCDTimeout(5); E.setTimeZone(0);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.3); //health.boot.js (ª(){¬settings=require("Storage").readJSON("health.json",1) {};¬hrm=0|settings.hrm;£(hrmŠ1){ªonHealth(){Bangle.setHRMPower(1,"health");setTimeout(()¢Bangle.setHRMPower(0,"health"),2*60000);}Bangle.on("health",onHealth);Bangle.on('HRM',h¢{£(h.confidence>80)Bangle.setHRMPower(0,"health");});£(Bangle.getHealthStatus().bpmConfidence)«;onHealth();}¤Bangle.setHRMPower(hrmŒ0,"health");})(); Bangle.on("health",health¢{¬d=¸Date(Date.now()-590000);®DB_RECORD_LEN=4;®DB_RECORDS_PER_HR=6;®DB_RECORDS_PER_DAY=DB_RECORDS_PER_HR*24+1;®DB_RECORDS_PER_MONTH=DB_RECORDS_PER_DAY*31;®DB_HEADER_LEN=8;®DB_FILE_LEN=DB_HEADER_LEN+DB_RECORDS_PER_MONTH*DB_RECORD_LEN;ªgetRecordFN(d){«"health-"+d.getFullYear()+"-"+d.getMonth()+".raw";}ªgetRecordIdx(d){«(DB_RECORDS_PER_DAY*(d.getDate()-1))+(DB_RECORDS_PER_HR*d.getHours())+(0|(d.getMinutes()*DB_RECORDS_PER_HR/60));}ªgetRecordData(health){«String.fromCharCode(health.steps’8,health.steps&255,health.bpm,Math.min(health.movement/8,255));}¬rec=getRecordIdx(d);¬fn=getRecordFN(d);¬f=require("Storage").read(fn);£(f){¬dt=f.substr(DB_HEADER_LEN+(rec*DB_RECORD_LEN),DB_RECORD_LEN);£(dtŒ"\xFF\xFF\xFF\xFF"){print("HEALTH ERR: Already written!");«;}}¤{require("Storage").write(fn,"HEALTH1\0",0,DB_FILE_LEN);}¬recordPos=DB_HEADER_LEN+(rec*DB_RECORD_LEN);require("Storage").write(fn,getRecordData(health),recordPos,DB_FILE_LEN);£(rec%DB_RECORDS_PER_DAYŒDB_RECORDS_PER_DAY-2)«;¬sumPos=recordPos+DB_RECORD_LEN;£(f.substr(sumPos,DB_RECORD_LEN)Œ"\xFF\xFF\xFF\xFF"){print("HEALTH ERR: Daily summary already written!");«;}health={steps:0,bpm:0,movement:0,movCnt:0,bpmCnt:0};¬records=DB_RECORDS_PER_HR*24;§(¬i=0;i