From d0c2211727e4c0a487ba9063914a41b950920dc2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 26 Oct 2021 10:23:39 +0100 Subject: [PATCH] boot 0.34: Use Storage.hash if available + Rearrange NRF.setServices to allow .boot.js files to add services (eg ANCS) --- apps.json | 2 +- apps/boot/ChangeLog | 2 ++ apps/boot/bootupdate.js | 17 ++++++++++++++--- apps/setting/settings-icon.js | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/apps.json b/apps.json index a0185c8db..83f08f47e 100644 --- a/apps.json +++ b/apps.json @@ -18,7 +18,7 @@ { "id": "boot", "name": "Bootloader", - "version": "0.33", + "version": "0.34", "description": "This is needed by Bangle.js to automatically load the clock, menu, widgets and settings", "icon": "bootloader.png", "type": "bootloader", diff --git a/apps/boot/ChangeLog b/apps/boot/ChangeLog index 104afed63..d3a241d7c 100644 --- a/apps/boot/ChangeLog +++ b/apps/boot/ChangeLog @@ -35,3 +35,5 @@ improve g.stringMetrics polyfill Fix issue where re-running bootupdate could disable existing polyfills 0.33: Add E.showScroller polyfill +0.34: Use Storage.hash if available + Rearrange NRF.setServices to allow .boot.js files to add services (eg ANCS) diff --git a/apps/boot/bootupdate.js b/apps/boot/bootupdate.js index c0f494726..c96cc8e83 100644 --- a/apps/boot/bootupdate.js +++ b/apps/boot/bootupdate.js @@ -5,15 +5,22 @@ E.showMessage("Updating boot0..."); var s = require('Storage').readJSON('setting.json',1)||{}; var isB2 = process.env.HWVERSION; // Is Bangle.js 2 var boot = ""; -var CRC = E.CRC32(require('Storage').read('setting.json'))+E.CRC32(require('Storage').list(/\.boot\.js/)); -boot += `if (E.CRC32(require('Storage').read('setting.json'))+E.CRC32(require('Storage').list(/\.boot\.js/))!=${CRC}) { eval(require('Storage').read('bootupdate.js')); throw "Storage Updated!"}\n`; +if (require('Storage').hash) { // new in 2v11 - helps ensure files haven't changed + var CRC = E.CRC32(require('Storage').read('setting.json'))+require('Storage').hash(/\.boot\.js/); + boot += `if (E.CRC32(require('Storage').read('setting.json'))+require('Storage').hash(/\\.boot\\.js/)!=${CRC})`; +} else { + var CRC = E.CRC32(require('Storage').read('setting.json'))+E.CRC32(require('Storage').list(/\.boot\.js/)); + boot += `if (E.CRC32(require('Storage').read('setting.json'))+E.CRC32(require('Storage').list(/\\.boot\\.js/))!=${CRC})`; +} +boot += ` { eval(require('Storage').read('bootupdate.js')); throw "Storage Updated!"}\n`; boot += `E.setFlags({pretokenise:1});\n`; +boot += `var bleServices = {}, bleServiceOptions = { uart : true};\n`; if (s.ble!==false) { if (s.HID) { // Human interface device if (s.HID=="joy") boot += `Bangle.HID = E.toUint8Array(atob("BQEJBKEBCQGhAAUJGQEpBRUAJQGVBXUBgQKVA3UBgQMFAQkwCTEVgSV/dQiVAoECwMA="));`; else if (s.HID=="kb") boot += `Bangle.HID = E.toUint8Array(atob("BQEJBqEBBQcZ4CnnFQAlAXUBlQiBApUBdQiBAZUFdQEFCBkBKQWRApUBdQORAZUGdQgVACVzBQcZAClzgQAJBRUAJv8AdQiVArECwA=="));` else /*kbmedia*/boot += `Bangle.HID = E.toUint8Array(atob("BQEJBqEBhQIFBxngKecVACUBdQGVCIEClQF1CIEBlQV1AQUIGQEpBZEClQF1A5EBlQZ1CBUAJXMFBxkAKXOBAAkFFQAm/wB1CJUCsQLABQwJAaEBhQEVACUBdQGVAQm1gQIJtoECCbeBAgm4gQIJzYECCeKBAgnpgQIJ6oECwA=="));`; - boot += `NRF.setServices({}, {uart:true, hid:Bangle.HID});\n`; + boot += `bleServiceOptions.hid=Bangle.HID;\n`; } } if (s.blerepl===false) { // If not programmable, force terminal off Bluetooth @@ -178,12 +185,16 @@ if (!g.wrapString) { // added in 2v11 - this is a limited functionality polyfill } // Append *.boot.js files +// These could change bleServices/bleServiceOptions if needed require('Storage').list(/\.boot\.js/).forEach(bootFile=>{ // we add a semicolon so if the file is wrapped in (function(){ ... }() // with no semicolon we don't end up with (function(){ ... }()(function(){ ... }() // which would cause an error! boot += require('Storage').read(bootFile)+";\n"; }); +// update ble +boot += `NRF.setServices(bleServices, bleServiceOptions);delete bleServices,bleServiceOptions;\n`; +// write file require('Storage').write('.boot0',boot); delete boot; E.showMessage("Reloading..."); diff --git a/apps/setting/settings-icon.js b/apps/setting/settings-icon.js index 7b68f80c0..abc7a3060 100644 --- a/apps/setting/settings-icon.js +++ b/apps/setting/settings-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwghC/AFEiAAgX/C/4SFkADBgQXFBIgECAAYSCkAWGBIoXGyQTHABBZLkUhiMRiQXLIQwVBAAZlIC44tCAAYxGIxIWFGA4XIFwwwHXBAWHGAwXHFxAwGPAYXTX44XDiAJBgIXGyDAHFAYKDMAq+EGAgXNCwwX/C453XU6IWHa6ZFCC6JJCC4hgEAAoOEC5AwIFwhgEBAgwIBoqmGGBIuFVAgXFGAwLFYAoLFGIYtFeA4MGABMpC4pICkBMGBIpGFC4SuIBIoWFAAxZLC/4X/AFQ")) +require("heatshrink").decompress(atob("mEw4UA///+Nj5lCt9TH+cBqtVoALWqALTgoLUiALFgoLDqoBBAAQGCHAdRBYdFKwZECqv614ECGQQsCr2q1W1BYkVAoPqBYOrAoNUBYdXBQIAB6oLDEQgkEBYdaBYelBYt6BYetBYYvBtWq0EK1WpF4ZfBIwIFBJATCDBY6PDiuq1AEBlWqBdA7KKZZrLQZabNWZLLLcZb7LBYVV/WvAgRfCNYNRBAVVoq/FJQRECR4gnBEwQEBggLDGQg4CBag4DBaBWBBaoATA"))