diff --git a/apps/batchart/app.js b/apps/batchart/app.js index 684f9a88d..e8b30ba69 100644 --- a/apps/batchart/app.js +++ b/apps/batchart/app.js @@ -1,20 +1,100 @@ -// place your const, vars, functions or classes here +const GraphXZero = 40; +const GraphYZero = 180; +const GraphY100 = 80; +const GraphMarkerOffset = 5; +const MaxValueCount = 144; +const GraphXMax = GraphXZero + MaxValueCount; +var Storage = require("Storage"); -function renderBatteryChart(){ - g.drawString("t", 215, 175); - g.drawLine(40,190,40,80); +function renderCoordinateSystem() { + g.setFont("6x8", 1); + g.drawString("t", GraphXMax + GraphMarkerOffset, GraphYZero - GraphMarkerOffset); + g.drawLine(GraphXZero, GraphYZero + GraphMarkerOffset, GraphXZero, GraphY100); g.drawString("%", 39, 70); - g.drawString("100", 15, 75); - g.drawLine(35,80,40,80); - g.drawString("50", 20,125); - g.drawLine(35,130,40,130); + g.setFontAlign(1, -1, 0); + g.drawString("100", 30, GraphY100 - GraphMarkerOffset); + g.drawLine(GraphXZero - GraphMarkerOffset, GraphY100, GraphXZero, GraphY100); - g.drawString("0", 25, 175); - g.drawLine(35,180,210,180); + g.drawString("50", 30, GraphYZero - 50 - GraphMarkerOffset); + g.drawLine(GraphXZero - GraphMarkerOffset, 130, GraphXZero, 130); - g.drawString("Chart not yet functional", 60, 125); + g.drawString("0", 30, GraphYZero - GraphMarkerOffset); + g.drawLine(GraphXZero - GraphMarkerOffset, GraphYZero, GraphXMax, GraphYZero); +} + +function decrementDay(dayToDecrement) { + return dayToDecrement === 0 ? 6 : dayToDecrement-1; +} +function loadData() { + const MaxValueCount = 144; + const startingDay = new Date().getDay(); + + // Load data for the current day + var logFileName = "bclog" + startingDay; + + var dataLines = loadLinesFromFile(MaxValueCount, logFileName); + + // Top up to MaxValueCount from previous days as required + var previousDay = decrementDay(startingDay); + while (dataLines.length < MaxValueCount + && previousDay !== startingDay) { + + var topUpLogFileName = "bclog" + previousDay; + var remainingLines = MaxValueCount - dataLines.length; + var topUpLines = loadLinesFromFile(remainingLines, topUpLogFileName); + dataLines = topUpLines.concat(dataLines); + + previousDay = decrementDay(previousDay); + } + + return dataLines; +} + +function loadLinesFromFile(requestedLineCount, fileName) { + var allLines = []; + var returnLines = []; + + var readFile = Storage.open(fileName, "r"); + + while ((nextLine = readFile.readLine())) { + if(nextLine) { + allLines.push(nextLine); + } + } + + if (allLines.length <= 0) return; + + linesToReadCount = Math.min(requestedLineCount, allLines.length); + startingLineIndex = Math.max(0, allLines.length - requestedLineCount - 1); + + for (let i = startingLineIndex; i < linesToReadCount + startingLineIndex; i++) { + if(allLines[i]) { + returnLines.push(allLines[i]); + } + } + + allLines = null; + + return returnLines; +} + +function renderData(dataArray) { + g.setColor(1, 1, 0); + for (let i = 0; i < dataArray.length; i++) { + const element = dataArray[i]; + var dataInfo = element.split(","); + var batteryPercentage = parseInt(dataInfo[1]); + + g.setPixel(GraphXZero + i, GraphYZero - batteryPercentage); + } +} + +function renderBatteryChart() { + renderCoordinateSystem(); + var data = loadData(); + renderData(data); } // special function to handle display switch on @@ -22,7 +102,10 @@ Bangle.on('lcdPower', (on) => { if (on) { // call your app function here // If you clear the screen, do Bangle.drawWidgets(); - renderBatteryChart(); + //g.clear() + Bangle.loadWidgets(); + Bangle.drawWidgets(); + //renderBatteryChart(); } }); diff --git a/apps/batchart/batchart.dat b/apps/batchart/batchart.dat deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/batchart/widget.js b/apps/batchart/widget.js index 2e2f43cdf..de7ce230d 100644 --- a/apps/batchart/widget.js +++ b/apps/batchart/widget.js @@ -60,7 +60,6 @@ } } - // Called by the heart app to reload settings and decide what's function reload() { WIDGETS["batchart"].width = 24;