aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Stendahl <jakob.stendahl@outlook.com>2021-02-09 12:01:41 +0100
committerJakob Stendahl <jakob.stendahl@outlook.com>2021-02-09 12:01:41 +0100
commit8e2221ee7bef5738c377c157878f8553d5ce9243 (patch)
tree1e637a965f300d546caa8202bf27383be1c214f5
parenteadc1b840dbe89e527a2d4b0765cb53432c0c777 (diff)
downloadhoverbit-ble-8e2221ee7bef5738c377c157878f8553d5ce9243.tar.gz
hoverbit-ble-8e2221ee7bef5738c377c157878f8553d5ce9243.zip
:rocket: Deploy app v1.0.8-alpha
-rw-r--r--index.html2
-rw-r--r--main.3047e937.js.map1
-rw-r--r--main.7b0c10bd.js (renamed from main.3047e937.js)4
-rw-r--r--main.7b0c10bd.js.map1
-rw-r--r--service-worker.js4
5 files changed, 6 insertions, 6 deletions
diff --git a/index.html b/index.html
index 1ab2662..233a627 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en" dir="ltr"><head><meta charset="utf-8"><meta name="viewport" content="viewport-fit=cover,width=device-width, initial-scale=1, shrink-to-fit=no,initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><meta name="HandheldFriendly" content="true"><title>HOVER:BIT Controller</title><link rel="canonical"><link rel="stylesheet" type="text/css" href="/hoverbit-ble/styles.96ce15e4.css"><link rel="manifest" href="/hoverbit-ble/manifest.webmanifest" crossorigin="use-credentials"><link rel="preconnect" href="https://fonts.gstatic.com"><link href="https://fonts.googleapis.com/css2?family=Kufam&display=swap" rel="stylesheet"></head><body> <div class="app-info"> <h1>HOVER:BIT Controller</h1> <span class="version">1.0.7</span> </div> <div class="landscape-warning"> <div class="landscape-warning-content"> <i class="fa-sync-alt fas"></i> <h1>Please use landscape mode</h1> <button id="btn_ignore_landscape_warning">Ignore</button> </div> </div> <div class="top-buttons"> </div> <button class="button-center button-center-top" id="btn_connect">CONNECT</button> <button class="button-center button-center-top" id="btn_disconnect">DISCONNECT</button> <div class="acc-string"><pre>T: 0, R: 0</pre></div> <button class="button-center button-center-bottom" id="btn_arm">ARM</button> <button class="button-center button-center-bottom" id="btn_disarm">DISARM</button> <div class="joystick joystick-left"></div> <div class="joystick joystick-right"></div> <div class="statusline"> <span class="connection statusline-item"> <i class="fa-bluetooth-b fab"></i> </span> <span class="arm statusline-item"> <i class="fa-exclamation-triangle fas"></i> </span> <span class="notification-area"></span> <span class="ping statusline-item"> <i class="fa-broadcast-tower fas"></i> </span> <span class="battery statusline-item"> <i class="fa-car-battery fas"></i> <span class="battery-status">0%</span> </span> </div> <script type="text/javascript" src="/hoverbit-ble/main.3047e937.js"></script> </body></html>
+<!DOCTYPE html><html lang="en" dir="ltr"><head><meta charset="utf-8"><meta name="viewport" content="viewport-fit=cover,width=device-width, initial-scale=1, shrink-to-fit=no,initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><meta name="HandheldFriendly" content="true"><title>HOVER:BIT Controller</title><link rel="canonical"><link rel="stylesheet" type="text/css" href="/hoverbit-ble/styles.96ce15e4.css"><link rel="manifest" href="/hoverbit-ble/manifest.webmanifest" crossorigin="use-credentials"><link rel="preconnect" href="https://fonts.gstatic.com"><link href="https://fonts.googleapis.com/css2?family=Kufam&display=swap" rel="stylesheet"></head><body> <div class="app-info"> <h1>HOVER:BIT Controller</h1> <span class="version">1.0.8-alpha</span> </div> <div class="landscape-warning"> <div class="landscape-warning-content"> <i class="fa-sync-alt fas"></i> <h1>Please use landscape mode</h1> <button id="btn_ignore_landscape_warning">Ignore</button> </div> </div> <div class="top-buttons"> </div> <button class="button-center button-center-top" id="btn_connect">CONNECT</button> <button class="button-center button-center-top" id="btn_disconnect">DISCONNECT</button> <div class="acc-string"><pre>T: 0, R: 0</pre></div> <button class="button-center button-center-bottom" id="btn_arm">ARM</button> <button class="button-center button-center-bottom" id="btn_disarm">DISARM</button> <div class="joystick joystick-left"></div> <div class="joystick joystick-right"></div> <div class="statusline"> <span class="connection statusline-item"> <i class="fa-bluetooth-b fab"></i> </span> <span class="arm statusline-item"> <i class="fa-exclamation-triangle fas"></i> </span> <span class="notification-area"></span> <span class="ping statusline-item"> <i class="fa-broadcast-tower fas"></i> </span> <span class="battery statusline-item"> <i class="fa-car-battery fas"></i> <span class="battery-status">0%</span> </span> </div> <script type="text/javascript" src="/hoverbit-ble/main.7b0c10bd.js"></script> </body></html>
diff --git a/main.3047e937.js.map b/main.3047e937.js.map
deleted file mode 100644
index 0c278eb..0000000
--- a/main.3047e937.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../node_modules/nipplejs/dist/nipplejs.js","../src/services/dfu-control.ts","../src/promise-queue.ts","../src/services/device-information.ts","../src/service-helper.ts","../node_modules/rollup-plugin-node-builtins/src/es6/events.js","../src/event-dispatcher.ts","../src/services/button.ts","../src/services/led.ts","../src/services/temperature.ts","../src/services/accelerometer.ts","../src/services/magnetometer.ts","../src/services/io-pin.ts","../src/services/uart.ts","../src/services/event.ts","../src/index.ts","js/notification.js","js/hoverControlModule.js","js/main.js"],"names":["DeviceInformationCharacteristic","concurrent","this","PromiseQueue","running","promise","queue","shift","fn","result","_a","resolve","reject","error_1","pump","Promise","_this","push","service","emitter","ServiceHelper","uuid","characteristics","getCharacteristics","_b","find","characteristic","getCharacteristic","Error","add","readValue","value","writeValue","event","handler","startNotifications","on","emitterEvent","listenerCount","addEventListener","removeEventListener","helper","DeviceInformationService","info","readStringCharacteristic","modelNumber","serialNumber","firmwareRevision","hardwareRevision","manufacturer","getCharacteristicValue","view","buffer","slice","byteOffset","byteLength","String","fromCharCode","apply","Array","from","Uint8Array","undefined","EventHandlers","EventEmitter","init","call","$getMaxListeners","that","_maxListeners","defaultMaxListeners","emitNone","isFn","self","len","length","listeners","arrayClone","i","emitOne","arg1","emitTwo","arg2","emitThree","arg3","emitMany","args","_addListener","target","type","listener","prepend","m","events","existing","e","TypeError","_events","newListener","emit","_eventsCount","unshift","warned","w","name","count","console","warn","log","_onceWrap","fired","g","removeListener","arguments","evlistener","arr","copy","prototype","Object","create","usingDomains","domain","active","getPrototypeOf","setMaxListeners","n","isNaN","getMaxListeners","er","doError","error","err","context","domainEmitter","domainThrown","addListener","prependListener","once","prependOnceListener","list","position","originalListener","index","k","pop","removeAllListeners","key","keys","ret","eventNames","Reflect","ownKeys","ButtonCharacteristic","ButtonState","handleEvent","__extends","EventDispatcher","isEventListenerObject","_super","callback","eventOrType","detail","CustomEvent","LedCharacteristic","ButtonService","bluetoothService","handleListener","buttonAState","buttonAStateChangedHandler","bind","buttonBState","buttonBStateChangedHandler","getUint8","dispatchEvent","TemperatureCharacteristic","LedService","text","encoded","encodeString","setCharacteristicValue","ledText","ledMatrixState","viewToLedMatrix","state","ledMatrixToView","scrollingDelay","getUint16","delay","DataView","ArrayBuffer","setUint16","charCodeAt","matrix","byteToBoolArray","byte","bools","reverse","setUint8","boolArrayToByte","reduce","bool","AccelerometerCharacteristic","TemperatureService","temperature","temperatureChangedHandler","getInt8","temperaturePeriod","frequency","MagnetometerCharacteristic","MagnetometerCalibration","AccelerometerService","accelerometerData","accelerometerDataChangedHandler","dataViewToAccelerometerData","accelerometerPeriod","x","getInt16","y","z","IoPinCharacteristic","AD","IO","MagnetometerService","magnetometerData","magnetometerDataChangedHandler","magnetometerBearing","magnetometerBearingChangedHandler","magnetometerCalibration","magnetometerCalibrationChangedHandler","dataViewToMagnetometerData","magnetometerPeriod","UartCharacteristic","IoPinService","pinData","pinDataChangedHandler","dataViewToPinData","data","pinDataToDataView","pinAdConfiguration","dataViewToConfig","config","configToDataView","pinIoConfiguration","pwmControlDataToDataView","pwmControl","pin","forEach","setUint32","period","EventCharacteristic","UartService","tx","receiveHandler","receiveTextHandler","rx","arrayData","split","map","numberArray","DfuCharacteristic","EventService","microBitEvent","eventHandler","microBitRequirements","microbitRequirementsChangedHandler","viewToMicrobitEvent","clientRequirements","clientEvent","microbitEvent","DfuControlService","dfuControl","services","ServiceBuilder","serviceClass","found","requestMicrobit","bluetooth","requestDevice","filters","namePrefix","optionalServices","getServices","device","gatt","connected","connect","getPrimaryServices","builder","createService","deviceInformationService","buttonService","ledService","temperatureService","accelerometerService","magnetometerService","uartService","eventService","dfuControlService","ioPinService","notif_queue","notif","notif_c","notification_area","document","querySelector","notif_elem","createElement","className","appendChild","setTimeout","removeChild","notif_alert","alert_str","div","innerHTML","icon","notif_warn","notif_info","info_str","notif_success","success_str","hoverControlModule","constructor","acc","accString","match","item","substring","parseInt","body","classList","remove","reset","setArm","setThrottle","setRudder","throttle","getThrottle","rudder","getRudder","arm","getArm","sw","navigator","serviceWorker","register","scope","then","registration","onupdatefound","installingWorker","installing","onstatechange","controller","catch","getElementById","bluetoothDevice","bluetoothDeviceServices","hoverControl","joystickLeft","nipplejs","zone","size","left","bottom","mode","lockX","joystickRight","lockY","evt","distance","angle","degree","disconnect","intervalConnectionChecker","setInterval","reconnect","intervalSendCommands","command","toString","sendText","receiveText","elm","newone","cloneNode","parentNode","replaceChild","indexOf","parts","onclick","window"],"mappings":"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","file":"main.3047e937.js","sourceRoot":"../src","sourcesContent":["!function(t,i){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(\"nipplejs\",[],i):\"object\"==typeof exports?exports.nipplejs=i():t.nipplejs=i()}(window,function(){return function(t){var i={};function e(o){if(i[o])return i[o].exports;var n=i[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,e),n.l=!0,n.exports}return e.m=t,e.c=i,e.d=function(t,i,o){e.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:o})},e.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.t=function(t,i){if(1&i&&(t=e(t)),8&i)return t;if(4&i&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(e.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&i&&\"string\"!=typeof t)for(var n in t)e.d(o,n,function(i){return t[i]}.bind(null,n));return o},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,\"a\",i),i},e.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},e.p=\"\",e(e.s=0)}([function(t,i,e){\"use strict\";e.r(i);var o,n=function(t,i){var e=i.x-t.x,o=i.y-t.y;return Math.sqrt(e*e+o*o)},s=function(t){return t*(Math.PI/180)},r=function(t){return t*(180/Math.PI)},d=function(t,i,e){for(var o,n=i.split(/[ ,]+/g),s=0;s<n.length;s+=1)o=n[s],t.addEventListener?t.addEventListener(o,e,!1):t.attachEvent&&t.attachEvent(o,e)},a=function(t,i,e){for(var o,n=i.split(/[ ,]+/g),s=0;s<n.length;s+=1)o=n[s],t.removeEventListener?t.removeEventListener(o,e):t.detachEvent&&t.detachEvent(o,e)},p=function(t){return t.preventDefault(),t.type.match(/^touch/)?t.changedTouches:t},c=function(){return{x:void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,y:void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop}},h=function(t,i){i.top||i.right||i.bottom||i.left?(t.style.top=i.top,t.style.right=i.right,t.style.bottom=i.bottom,t.style.left=i.left):(t.style.left=i.x+\"px\",t.style.top=i.y+\"px\")},l=function(t,i,e){var o=u(t);for(var n in o)if(o.hasOwnProperty(n))if(\"string\"==typeof i)o[n]=i+\" \"+e;else{for(var s=\"\",r=0,d=i.length;r<d;r+=1)s+=i[r]+\" \"+e+\", \";o[n]=s.slice(0,-2)}return o},u=function(t){var i={};i[t]=\"\";return[\"webkit\",\"Moz\",\"o\"].forEach(function(e){i[e+t.charAt(0).toUpperCase()+t.slice(1)]=\"\"}),i},f=function(t,i){for(var e in i)i.hasOwnProperty(e)&&(t[e]=i[e]);return t},y=function(t,i){if(t.length)for(var e=0,o=t.length;e<o;e+=1)i(t[e]);else i(t)},m=!!(\"ontouchstart\"in window),v=!!window.PointerEvent,g=!!window.MSPointerEvent,b={start:\"mousedown\",move:\"mousemove\",end:\"mouseup\"},x={};function O(){}v?o={start:\"pointerdown\",move:\"pointermove\",end:\"pointerup, pointercancel\"}:g?o={start:\"MSPointerDown\",move:\"MSPointerMove\",end:\"MSPointerUp\"}:m?(o={start:\"touchstart\",move:\"touchmove\",end:\"touchend, touchcancel\"},x=b):o=b,O.prototype.on=function(t,i){var e,o=t.split(/[ ,]+/g);this._handlers_=this._handlers_||{};for(var n=0;n<o.length;n+=1)e=o[n],this._handlers_[e]=this._handlers_[e]||[],this._handlers_[e].push(i);return this},O.prototype.off=function(t,i){return this._handlers_=this._handlers_||{},void 0===t?this._handlers_={}:void 0===i?this._handlers_[t]=null:this._handlers_[t]&&this._handlers_[t].indexOf(i)>=0&&this._handlers_[t].splice(this._handlers_[t].indexOf(i),1),this},O.prototype.trigger=function(t,i){var e,o=this,n=t.split(/[ ,]+/g);o._handlers_=o._handlers_||{};for(var s=0;s<n.length;s+=1)e=n[s],o._handlers_[e]&&o._handlers_[e].length&&o._handlers_[e].forEach(function(t){t.call(o,{type:e,target:o},i)})},O.prototype.config=function(t){this.options=this.defaults||{},t&&(this.options=function(t,i){var e={};for(var o in t)t.hasOwnProperty(o)&&i.hasOwnProperty(o)?e[o]=i[o]:t.hasOwnProperty(o)&&(e[o]=t[o]);return e}(this.options,t))},O.prototype.bindEvt=function(t,i){var e=this;return e._domHandlers_=e._domHandlers_||{},e._domHandlers_[i]=function(){\"function\"==typeof e[\"on\"+i]?e[\"on\"+i].apply(e,arguments):console.warn('[WARNING] : Missing \"on'+i+'\" handler.')},d(t,o[i],e._domHandlers_[i]),x[i]&&d(t,x[i],e._domHandlers_[i]),e},O.prototype.unbindEvt=function(t,i){return this._domHandlers_=this._domHandlers_||{},a(t,o[i],this._domHandlers_[i]),x[i]&&a(t,x[i],this._domHandlers_[i]),delete this._domHandlers_[i],this};var _=O;function w(t,i){return this.identifier=i.identifier,this.position=i.position,this.frontPosition=i.frontPosition,this.collection=t,this.defaults={size:100,threshold:.1,color:\"white\",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:.5,mode:\"dynamic\",zone:document.body,lockX:!1,lockY:!1,shape:\"circle\"},this.config(i),\"dynamic\"===this.options.mode&&(this.options.restOpacity=0),this.id=w.id,w.id+=1,this.buildEl().stylize(),this.instance={el:this.ui.el,on:this.on.bind(this),off:this.off.bind(this),show:this.show.bind(this),hide:this.hide.bind(this),add:this.addToDom.bind(this),remove:this.removeFromDom.bind(this),destroy:this.destroy.bind(this),setPosition:this.setPosition.bind(this),resetDirection:this.resetDirection.bind(this),computeDirection:this.computeDirection.bind(this),trigger:this.trigger.bind(this),position:this.position,frontPosition:this.frontPosition,ui:this.ui,identifier:this.identifier,id:this.id,options:this.options},this.instance}w.prototype=new _,w.constructor=w,w.id=0,w.prototype.buildEl=function(t){return this.ui={},this.options.dataOnly?this:(this.ui.el=document.createElement(\"div\"),this.ui.back=document.createElement(\"div\"),this.ui.front=document.createElement(\"div\"),this.ui.el.className=\"nipple collection_\"+this.collection.id,this.ui.back.className=\"back\",this.ui.front.className=\"front\",this.ui.el.setAttribute(\"id\",\"nipple_\"+this.collection.id+\"_\"+this.id),this.ui.el.appendChild(this.ui.back),this.ui.el.appendChild(this.ui.front),this)},w.prototype.stylize=function(){if(this.options.dataOnly)return this;var t=this.options.fadeTime+\"ms\",i=function(t,i){var e=u(t);for(var o in e)e.hasOwnProperty(o)&&(e[o]=i);return e}(\"borderRadius\",\"50%\"),e=l(\"transition\",\"opacity\",t),o={};return o.el={position:\"absolute\",opacity:this.options.restOpacity,display:\"block\",zIndex:999},o.back={position:\"absolute\",display:\"block\",width:this.options.size+\"px\",height:this.options.size+\"px\",marginLeft:-this.options.size/2+\"px\",marginTop:-this.options.size/2+\"px\",background:this.options.color,opacity:\".5\"},o.front={width:this.options.size/2+\"px\",height:this.options.size/2+\"px\",position:\"absolute\",display:\"block\",marginLeft:-this.options.size/4+\"px\",marginTop:-this.options.size/4+\"px\",background:this.options.color,opacity:\".5\"},f(o.el,e),\"circle\"===this.options.shape&&f(o.back,i),f(o.front,i),this.applyStyles(o),this},w.prototype.applyStyles=function(t){for(var i in this.ui)if(this.ui.hasOwnProperty(i))for(var e in t[i])this.ui[i].style[e]=t[i][e];return this},w.prototype.addToDom=function(){return this.options.dataOnly||document.body.contains(this.ui.el)?this:(this.options.zone.appendChild(this.ui.el),this)},w.prototype.removeFromDom=function(){return this.options.dataOnly||!document.body.contains(this.ui.el)?this:(this.options.zone.removeChild(this.ui.el),this)},w.prototype.destroy=function(){clearTimeout(this.removeTimeout),clearTimeout(this.showTimeout),clearTimeout(this.restTimeout),this.trigger(\"destroyed\",this.instance),this.removeFromDom(),this.off()},w.prototype.show=function(t){var i=this;return i.options.dataOnly?i:(clearTimeout(i.removeTimeout),clearTimeout(i.showTimeout),clearTimeout(i.restTimeout),i.addToDom(),i.restCallback(),setTimeout(function(){i.ui.el.style.opacity=1},0),i.showTimeout=setTimeout(function(){i.trigger(\"shown\",i.instance),\"function\"==typeof t&&t.call(this)},i.options.fadeTime),i)},w.prototype.hide=function(t){var i=this;return i.options.dataOnly?i:(i.ui.el.style.opacity=i.options.restOpacity,clearTimeout(i.removeTimeout),clearTimeout(i.showTimeout),clearTimeout(i.restTimeout),i.removeTimeout=setTimeout(function(){var e=\"dynamic\"===i.options.mode?\"none\":\"block\";i.ui.el.style.display=e,\"function\"==typeof t&&t.call(i),i.trigger(\"hidden\",i.instance)},i.options.fadeTime),i.options.restJoystick&&i.setPosition(t,{x:0,y:0}),i)},w.prototype.setPosition=function(t,i){var e=this;e.frontPosition={x:i.x,y:i.y};var o=e.options.fadeTime+\"ms\",n={};n.front=l(\"transition\",[\"top\",\"left\"],o);var s={front:{}};s.front={left:e.frontPosition.x+\"px\",top:e.frontPosition.y+\"px\"},e.applyStyles(n),e.applyStyles(s),e.restTimeout=setTimeout(function(){\"function\"==typeof t&&t.call(e),e.restCallback()},e.options.fadeTime)},w.prototype.restCallback=function(){var t={};t.front=l(\"transition\",\"none\",\"\"),this.applyStyles(t),this.trigger(\"rested\",this.instance)},w.prototype.resetDirection=function(){this.direction={x:!1,y:!1,angle:!1}},w.prototype.computeDirection=function(t){var i,e,o,n=t.angle.radian,s=Math.PI/4,r=Math.PI/2;if(n>s&&n<3*s&&!t.lockX?i=\"up\":n>-s&&n<=s&&!t.lockY?i=\"left\":n>3*-s&&n<=-s&&!t.lockX?i=\"down\":t.lockY||(i=\"right\"),t.lockY||(e=n>-r&&n<r?\"left\":\"right\"),t.lockX||(o=n>0?\"up\":\"down\"),t.force>this.options.threshold){var d,a={};for(d in this.direction)this.direction.hasOwnProperty(d)&&(a[d]=this.direction[d]);var p={};for(d in this.direction={x:e,y:o,angle:i},t.direction=this.direction,a)a[d]===this.direction[d]&&(p[d]=!0);if(p.x&&p.y&&p.angle)return t;p.x&&p.y||this.trigger(\"plain\",t),p.x||this.trigger(\"plain:\"+e,t),p.y||this.trigger(\"plain:\"+o,t),p.angle||this.trigger(\"dir dir:\"+i,t)}else this.resetDirection();return t};var T=w;function k(t,i){return this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=t,this.id=k.id,k.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:\"dynamic\",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:\"white\",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:.5,lockX:!1,lockY:!1,shape:\"circle\",dynamicPage:!1},this.config(i),\"static\"!==this.options.mode&&\"semi\"!==this.options.mode||(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}k.prototype=new _,k.constructor=k,k.id=0,k.prototype.prepareNipples=function(){var t=this.nipples;t.on=this.on.bind(this),t.off=this.off.bind(this),t.options=this.options,t.destroy=this.destroy.bind(this),t.ids=this.ids,t.id=this.id,t.processOnMove=this.processOnMove.bind(this),t.processOnEnd=this.processOnEnd.bind(this),t.get=function(i){if(void 0===i)return t[0];for(var e=0,o=t.length;e<o;e+=1)if(t[e].identifier===i)return t[e];return!1}},k.prototype.bindings=function(){this.bindEvt(this.options.zone,\"start\"),this.options.zone.style.touchAction=\"none\",this.options.zone.style.msTouchAction=\"none\"},k.prototype.begin=function(){var t=this.options;if(\"static\"===t.mode){var i=this.createNipple(t.position,this.manager.getIdentifier());i.add(),this.idles.push(i)}},k.prototype.createNipple=function(t,i){var e=c(),o={},n=this.options;if(t.x&&t.y)o={x:t.x-(e.x+this.box.left),y:t.y-(e.y+this.box.top)};else if(t.top||t.right||t.bottom||t.left){var s=document.createElement(\"DIV\");s.style.display=\"hidden\",s.style.top=t.top,s.style.right=t.right,s.style.bottom=t.bottom,s.style.left=t.left,s.style.position=\"absolute\",n.zone.appendChild(s);var r=s.getBoundingClientRect();n.zone.removeChild(s),o=t,t={x:r.left+e.x,y:r.top+e.y}}var d=new T(this,{color:n.color,size:n.size,threshold:n.threshold,fadeTime:n.fadeTime,dataOnly:n.dataOnly,restJoystick:n.restJoystick,restOpacity:n.restOpacity,mode:n.mode,identifier:i,position:t,zone:n.zone,frontPosition:{x:0,y:0},shape:n.shape});return n.dataOnly||(h(d.ui.el,o),h(d.ui.front,d.frontPosition)),this.nipples.push(d),this.trigger(\"added \"+d.identifier+\":added\",d),this.manager.trigger(\"added \"+d.identifier+\":added\",d),this.bindNipple(d),d},k.prototype.updateBox=function(){this.box=this.options.zone.getBoundingClientRect()},k.prototype.bindNipple=function(t){var i,e=this,o=function(t,o){i=t.type+\" \"+o.id+\":\"+t.type,e.trigger(i,o)};t.on(\"destroyed\",e.onDestroyed.bind(e)),t.on(\"shown hidden rested dir plain\",o),t.on(\"dir:up dir:right dir:down dir:left\",o),t.on(\"plain:up plain:right plain:down plain:left\",o)},k.prototype.pressureFn=function(t,i,e){var o=this,n=0;clearInterval(o.pressureIntervals[e]),o.pressureIntervals[e]=setInterval(function(){var e=t.force||t.pressure||t.webkitForce||0;e!==n&&(i.trigger(\"pressure\",e),o.trigger(\"pressure \"+i.identifier+\":pressure\",e),n=e)}.bind(o),100)},k.prototype.onstart=function(t){var i=this,e=i.options,o=t;t=p(t),i.updateBox();return y(t,function(n){i.actives.length<e.maxNumberOfNipples?i.processOnStart(n):o.type.match(/^touch/)&&(Object.keys(i.manager.ids).forEach(function(e){if(Object.values(o.touches).findIndex(function(t){return t.identifier===e})<0){var n=[t[0]];n.identifier=e,i.processOnEnd(n)}}),i.actives.length<e.maxNumberOfNipples&&i.processOnStart(n))}),i.manager.bindDocument(),!1},k.prototype.processOnStart=function(t){var i,e=this,o=e.options,s=e.manager.getIdentifier(t),r=t.force||t.pressure||t.webkitForce||0,d={x:t.pageX,y:t.pageY},a=e.getOrCreate(s,d);a.identifier!==s&&e.manager.removeIdentifier(a.identifier),a.identifier=s;var p=function(i){i.trigger(\"start\",i),e.trigger(\"start \"+i.id+\":start\",i),i.show(),r>0&&e.pressureFn(t,i,i.identifier),e.processOnMove(t)};if((i=e.idles.indexOf(a))>=0&&e.idles.splice(i,1),e.actives.push(a),e.ids.push(a.identifier),\"semi\"!==o.mode)p(a);else{if(!(n(d,a.position)<=o.catchDistance))return a.destroy(),void e.processOnStart(t);p(a)}return a},k.prototype.getOrCreate=function(t,i){var e,o=this.options;return/(semi|static)/.test(o.mode)?(e=this.idles[0])?(this.idles.splice(0,1),e):\"semi\"===o.mode?this.createNipple(i,t):(console.warn(\"Coudln't find the needed nipple.\"),!1):e=this.createNipple(i,t)},k.prototype.processOnMove=function(t){var i=this.options,e=this.manager.getIdentifier(t),o=this.nipples.get(e);if(function(t){return isNaN(t.buttons)?0!==t.pressure:0!==t.buttons}(t)){if(!o)return console.error(\"Found zombie joystick with ID \"+e),void this.manager.removeIdentifier(e);if(i.dynamicPage){var d=c();p=o.el.getBoundingClientRect(),o.position={x:d.x+p.left,y:d.y+p.top}}o.identifier=e;var a=o.options.size/2,p={x:t.pageX,y:t.pageY};i.lockX&&(p.y=o.position.y),i.lockY&&(p.x=o.position.x);var l,u,f,y,m,v,g,b,x=n(p,o.position),O=(l=p,u=o.position,f=u.x-l.x,y=u.y-l.y,r(Math.atan2(y,f))),_=s(O),w=x/a,T={distance:x,position:p};\"circle\"===o.options.shape?(x=Math.min(x,a),m=o.position,v=x,b={x:0,y:0},g=s(g=O),b.x=m.x-v*Math.cos(g),b.y=m.y-v*Math.sin(g),p=b):(p=function(t,i,e){return{x:Math.min(Math.max(t.x,i.x-e),i.x+e),y:Math.min(Math.max(t.y,i.y-e),i.y+e)}}(p,o.position,a),x=n(p,o.position));var k=p.x-o.position.x,P=p.y-o.position.y;o.frontPosition={x:k,y:P},i.dataOnly||h(o.ui.front,o.frontPosition);var E={identifier:o.identifier,position:p,force:w,pressure:t.force||t.pressure||t.webkitForce||0,distance:x,angle:{radian:_,degree:O},vector:{x:k/a,y:-P/a},raw:T,instance:o,lockX:i.lockX,lockY:i.lockY};(E=o.computeDirection(E)).angle={radian:s(180-O),degree:180-O},o.trigger(\"move\",E),this.trigger(\"move \"+o.id+\":move\",E)}else this.processOnEnd(t)},k.prototype.processOnEnd=function(t){var i=this,e=i.options,o=i.manager.getIdentifier(t),n=i.nipples.get(o),s=i.manager.removeIdentifier(n.identifier);n&&(e.dataOnly||n.hide(function(){\"dynamic\"===e.mode&&(n.trigger(\"removed\",n),i.trigger(\"removed \"+n.id+\":removed\",n),i.manager.trigger(\"removed \"+n.id+\":removed\",n),n.destroy())}),clearInterval(i.pressureIntervals[n.identifier]),n.resetDirection(),n.trigger(\"end\",n),i.trigger(\"end \"+n.id+\":end\",n),i.ids.indexOf(n.identifier)>=0&&i.ids.splice(i.ids.indexOf(n.identifier),1),i.actives.indexOf(n)>=0&&i.actives.splice(i.actives.indexOf(n),1),/(semi|static)/.test(e.mode)?i.idles.push(n):i.nipples.indexOf(n)>=0&&i.nipples.splice(i.nipples.indexOf(n),1),i.manager.unbindDocument(),/(semi|static)/.test(e.mode)&&(i.manager.ids[s.id]=s.identifier))},k.prototype.onDestroyed=function(t,i){this.nipples.indexOf(i)>=0&&this.nipples.splice(this.nipples.indexOf(i),1),this.actives.indexOf(i)>=0&&this.actives.splice(this.actives.indexOf(i),1),this.idles.indexOf(i)>=0&&this.idles.splice(this.idles.indexOf(i),1),this.ids.indexOf(i.identifier)>=0&&this.ids.splice(this.ids.indexOf(i.identifier),1),this.manager.removeIdentifier(i.identifier),this.manager.unbindDocument()},k.prototype.destroy=function(){for(var t in this.unbindEvt(this.options.zone,\"start\"),this.nipples.forEach(function(t){t.destroy()}),this.pressureIntervals)this.pressureIntervals.hasOwnProperty(t)&&clearInterval(this.pressureIntervals[t]);this.trigger(\"destroyed\",this.nipples),this.manager.unbindDocument(),this.off()};var P=k;function E(t){var i,e=this;return e.ids={},e.index=0,e.collections=[],e.config(t),e.prepareCollections(),d(window,\"resize\",function(t){clearTimeout(i),i=setTimeout(function(){var t,i=c();e.collections.forEach(function(e){e.forEach(function(e){t=e.el.getBoundingClientRect(),e.position={x:i.x+t.left,y:i.y+t.top}})})},100)}),e.collections}E.prototype=new _,E.constructor=E,E.prototype.prepareCollections=function(){var t=this;t.collections.create=t.create.bind(t),t.collections.on=t.on.bind(t),t.collections.off=t.off.bind(t),t.collections.destroy=t.destroy.bind(t),t.collections.get=function(i){var e;return t.collections.every(function(t){return!(e=t.get(i))}),e}},E.prototype.create=function(t){return this.createCollection(t)},E.prototype.createCollection=function(t){var i=new P(this,t);return this.bindCollection(i),this.collections.push(i),i},E.prototype.bindCollection=function(t){var i,e=this,o=function(t,o){i=t.type+\" \"+o.id+\":\"+t.type,e.trigger(i,o)};t.on(\"destroyed\",e.onDestroyed.bind(e)),t.on(\"shown hidden rested dir plain\",o),t.on(\"dir:up dir:right dir:down dir:left\",o),t.on(\"plain:up plain:right plain:down plain:left\",o)},E.prototype.bindDocument=function(){this.binded||(this.bindEvt(document,\"move\").bindEvt(document,\"end\"),this.binded=!0)},E.prototype.unbindDocument=function(t){Object.keys(this.ids).length&&!0!==t||(this.unbindEvt(document,\"move\").unbindEvt(document,\"end\"),this.binded=!1)},E.prototype.getIdentifier=function(t){var i;return t?void 0===(i=void 0===t.identifier?t.pointerId:t.identifier)&&(i=this.latest||0):i=this.index,void 0===this.ids[i]&&(this.ids[i]=this.index,this.index+=1),this.latest=i,this.ids[i]},E.prototype.removeIdentifier=function(t){var i={};for(var e in this.ids)if(this.ids[e]===t){i.id=e,i.identifier=this.ids[e],delete this.ids[e];break}return i},E.prototype.onmove=function(t){return this.onAny(\"move\",t),!1},E.prototype.onend=function(t){return this.onAny(\"end\",t),!1},E.prototype.oncancel=function(t){return this.onAny(\"end\",t),!1},E.prototype.onAny=function(t,i){var e,o=this,n=\"processOn\"+t.charAt(0).toUpperCase()+t.slice(1);i=p(i);return y(i,function(t){e=o.getIdentifier(t),y(o.collections,function(t,i,e){e.ids.indexOf(i)>=0&&(e[n](t),t._found_=!0)}.bind(null,t,e)),t._found_||o.removeIdentifier(e)}),!1},E.prototype.destroy=function(){this.unbindDocument(!0),this.ids={},this.index=0,this.collections.forEach(function(t){t.destroy()}),this.off()},E.prototype.onDestroyed=function(t,i){if(this.collections.indexOf(i)<0)return!1;this.collections.splice(this.collections.indexOf(i),1)};var I=new E;i.default={create:function(t){return I.create(t)},factory:I}}]).default});","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum DfuCharacteristic {\n dfuControl = \"e95d93b1-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * @hidden\n */\nexport class DfuControlService {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d93b0-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<DfuControlService> {\n return new DfuControlService(service);\n }\n\n /**\n * @hidden\n */\n public helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n this.helper = new ServiceHelper(service);\n }\n\n /**\n * Request device switches to DFU mode\n */\n public requestDfu(): Promise<void> {\n return this.helper.setCharacteristicValue(DfuCharacteristic.dfuControl, new Uint8Array([1]));\n }\n\n /**\n * Request flash code\n */\n public requestFlashCode(): Promise<void> {\n return this.helper.setCharacteristicValue(DfuCharacteristic.dfuControl, new Uint8Array([2]));\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\n/**\n * @hidden\n */\ninterface QueuedPromise {\n fn: () => Promise<any>;\n resolve: (value?: any | PromiseLike<any> | undefined) => void;\n reject: (reason?: any) => void;\n}\n\n/**\n * @hidden\n */\nexport class PromiseQueue {\n\n private queue: QueuedPromise[] = [];\n private running = 0;\n\n constructor(private concurrent = 1) {\n }\n\n private async pump(): Promise<void> {\n if (this.running >= this.concurrent) {\n return;\n }\n\n const promise = this.queue.shift();\n\n if (!promise) {\n return;\n }\n\n this.running ++;\n\n try {\n const result = await promise.fn();\n promise.resolve(result);\n } catch (error) {\n promise.reject(error);\n }\n\n this.running --;\n return this.pump();\n }\n\n public add<T>(fn: () => Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n this.queue.push({\n fn,\n resolve,\n reject\n });\n\n return this.pump();\n });\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum DeviceInformationCharacteristic {\n modelNumber = \"00002a24-0000-1000-8000-00805f9b34fb\",\n serialNumber = \"00002a25-0000-1000-8000-00805f9b34fb\",\n firmwareRevision = \"00002a26-0000-1000-8000-00805f9b34fb\",\n hardwareRevision = \"00002a27-0000-1000-8000-00805f9b34fb\",\n manufacturer = \"00002a29-0000-1000-8000-00805f9b34fb\"\n}\n\n/**\n * Device information structure\n */\nexport interface DeviceInformation {\n /**\n * Model Number\n */\n modelNumber?: string;\n /**\n * Serial Number\n */\n serialNumber?: string;\n /**\n * Firmware Revision\n */\n firmwareRevision?: string;\n /**\n * Hardware Revision\n */\n hardwareRevision?: string;\n /**\n * Manufacturer Name\n */\n manufacturer?: string;\n}\n\n/**\n * Device Information Service\n */\nexport class DeviceInformationService {\n\n /**\n * @hidden\n */\n public static uuid = \"0000180a-0000-1000-8000-00805f9b34fb\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<DeviceInformationService> {\n return new DeviceInformationService(service);\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n this.helper = new ServiceHelper(service);\n }\n\n /**\n * Read device information\n */\n public async readDeviceInformation(): Promise<DeviceInformation> {\n const info: DeviceInformation = {};\n\n const modelNumber = await this.readStringCharacteristic(DeviceInformationCharacteristic.modelNumber);\n if (modelNumber) info.modelNumber = modelNumber;\n\n const serialNumber = await this.readStringCharacteristic(DeviceInformationCharacteristic.serialNumber);\n if (serialNumber) info.serialNumber = serialNumber;\n\n const firmwareRevision = await this.readStringCharacteristic(DeviceInformationCharacteristic.firmwareRevision);\n if (firmwareRevision) info.firmwareRevision = firmwareRevision;\n\n const hardwareRevision = await this.readStringCharacteristic(DeviceInformationCharacteristic.hardwareRevision);\n if (hardwareRevision) info.hardwareRevision = hardwareRevision;\n\n const manufacturer = await this.readStringCharacteristic(DeviceInformationCharacteristic.manufacturer);\n if (manufacturer) info.manufacturer = manufacturer;\n\n return info;\n }\n\n private async readStringCharacteristic(uuid: BluetoothCharacteristicUUID): Promise<string | undefined> {\n try {\n const view = await this.helper.getCharacteristicValue(uuid);\n const buffer = view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength);\n return String.fromCharCode.apply(null, Array.from(new Uint8Array(buffer)));\n } catch (_e) {\n return undefined;\n }\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventEmitter } from \"events\";\nimport { PromiseQueue } from \"./promise-queue\";\n\n/**\n * @hidden\n */\nexport interface ServiceEventHandler {\n characteristic: BluetoothCharacteristicUUID;\n handler: (event: Event) => void;\n}\n\n/**\n * @hidden\n */\nexport class ServiceHelper {\n\n private static queue = new PromiseQueue();\n\n private characteristics?: BluetoothRemoteGATTCharacteristic[];\n\n constructor(private service: BluetoothRemoteGATTService, private emitter?: EventEmitter) {\n }\n\n private async getCharacteristic(uuid: BluetoothCharacteristicUUID): Promise<BluetoothRemoteGATTCharacteristic | undefined> {\n if (!this.characteristics) {\n this.characteristics = await this.service.getCharacteristics();\n }\n\n return this.characteristics.find(characteristic => characteristic.uuid === uuid);\n }\n\n public async getCharacteristicValue(uuid: BluetoothCharacteristicUUID): Promise<DataView> {\n const characteristic = await this.getCharacteristic(uuid);\n\n if (!characteristic) {\n throw new Error(\"Unable to locate characteristic\");\n }\n\n return await ServiceHelper.queue.add(async () => characteristic.readValue());\n }\n\n public async setCharacteristicValue(uuid: BluetoothCharacteristicUUID, value: BufferSource): Promise<void> {\n const characteristic = await this.getCharacteristic(uuid);\n\n if (!characteristic) {\n throw new Error(\"Unable to locate characteristic\");\n }\n\n await ServiceHelper.queue.add(async () => characteristic.writeValue(value));\n }\n\n public async handleListener(event: string, uuid: BluetoothCharacteristicUUID, handler: (event: Event) => void) {\n const characteristic = await this.getCharacteristic(uuid);\n\n if (!characteristic) {\n return;\n }\n\n await ServiceHelper.queue.add(async () => characteristic.startNotifications());\n\n this.emitter!.on(\"newListener\", (emitterEvent: string) => {\n if (emitterEvent !== event || this.emitter!.listenerCount(event) > 0) {\n return;\n }\n\n return ServiceHelper.queue.add(async () => characteristic.addEventListener(\"characteristicvaluechanged\", handler));\n });\n\n this.emitter!.on(\"removeListener\", (emitterEvent: string) => {\n if (emitterEvent !== event || this.emitter!.listenerCount(event) > 0) {\n return;\n }\n\n return ServiceHelper.queue.add(async () => characteristic.removeEventListener(\"characteristicvaluechanged\", handler));\n });\n }\n}\n","'use strict';\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nexport default EventEmitter;\nexport {EventEmitter};\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter.EventEmitter = EventEmitter\n\nEventEmitter.usingDomains = false;\n\nEventEmitter.prototype.domain = undefined;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\nEventEmitter.init = function() {\n this.domain = null;\n if (EventEmitter.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active && !(this instanceof domain.Domain)) {\n this.domain = domain.active;\n }\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var needDomainExit = false;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n if (needDomainExit)\n domain.exit();\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction _onceWrap(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventEmitter } from \"events\";\n\n/**\n * @hidden\n */\nexport interface TypedDispatcher<T> {\n addEventListener<K extends keyof T>(type: K, listener: (event: CustomEvent<T[K]>) => void): void;\n removeEventListener<K extends keyof T>(type: K, callback: (event: CustomEvent<T[K]>) => void): void;\n dispatchEvent(event: CustomEvent<T>): boolean;\n dispatchEvent<K extends keyof T>(type: K, detail: T[K]): boolean;\n addListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n on<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n once<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n prependListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n prependOnceListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n removeListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n removeAllListeners<K extends keyof T>(event?: K): this;\n // tslint:disable-next-line:ban-types\n listeners<K extends keyof T>(event: K): Function[];\n emit<K extends keyof T>(event: K, data: T[K]): boolean;\n // tslint:disable-next-line:array-type\n eventNames<K extends keyof T>(): Array<K>;\n listenerCount<K extends keyof T>(type: K): number;\n setMaxListeners(n: number): this;\n getMaxListeners(): number;\n}\n\n/**\n * @hidden\n */\nexport class EventDispatcher extends EventEmitter implements EventTarget {\n\n private isEventListenerObject = (listener: EventListenerOrEventListenerObject): listener is EventListenerObject => (listener as EventListenerObject).handleEvent !== undefined;\n\n public addEventListener(type: string, listener: EventListenerOrEventListenerObject | null) {\n if (listener) {\n const handler = this.isEventListenerObject(listener) ? listener.handleEvent : listener;\n super.addListener(type, handler);\n }\n }\n\n public removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null) {\n if (callback) {\n const handler = this.isEventListenerObject(callback) ? callback.handleEvent : callback;\n super.removeListener(type, handler);\n }\n }\n\n public dispatchEvent(event: Event): boolean;\n public dispatchEvent<T>(type: string, detail: T): boolean;\n public dispatchEvent<T>(eventOrType: Event | string, detail?: T): boolean {\n let event: Event;\n if (typeof eventOrType === \"string\") {\n event = new CustomEvent(eventOrType, {\n detail\n });\n } else {\n event = eventOrType;\n }\n\n return super.emit(event.type, event);\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum ButtonCharacteristic {\n buttonAState = \"e95dda90-251d-470a-a062-fa1922dfa9a8\",\n buttonBState = \"e95dda91-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * Button state enum\n */\nexport enum ButtonState {\n /**\n * Button released\n */\n Release = 0,\n /**\n * Button pressed - short\n */\n ShortPress = 1,\n /**\n * Button pressed - long\n */\n LongPress = 2\n}\n\n/**\n * Events raised by the button service\n */\nexport interface ButtonEvents {\n /**\n * @hidden\n */\n newListener: keyof ButtonEvents;\n /**\n * @hidden\n */\n removeListener: keyof ButtonEvents;\n /**\n * Button A state changed event\n */\n buttonastatechanged: ButtonState;\n /**\n * Button B state changed event\n */\n buttonbstatechanged: ButtonState;\n}\n\n/**\n * Button Service\n */\nexport class ButtonService extends (EventDispatcher as new() => TypedDispatcher<ButtonEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d9882-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<ButtonService> {\n const bluetoothService = new ButtonService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"buttonastatechanged\", ButtonCharacteristic.buttonAState, this.buttonAStateChangedHandler.bind(this));\n await this.helper.handleListener(\"buttonbstatechanged\", ButtonCharacteristic.buttonBState, this.buttonBStateChangedHandler.bind(this));\n }\n\n /**\n * Read state of button A\n */\n public async readButtonAState(): Promise<ButtonState> {\n const view = await this.helper.getCharacteristicValue(ButtonCharacteristic.buttonAState);\n return view.getUint8(0);\n }\n\n /**\n * Read state of button B\n */\n public async readButtonBState(): Promise<ButtonState> {\n const view = await this.helper.getCharacteristicValue(ButtonCharacteristic.buttonBState);\n return view.getUint8(0);\n }\n\n private buttonAStateChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n this.dispatchEvent(\"buttonastatechanged\", view.getUint8(0));\n }\n\n private buttonBStateChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n this.dispatchEvent(\"buttonbstatechanged\", view.getUint8(0));\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum LedCharacteristic {\n ledMatrixState = \"e95d7b77-251d-470a-a062-fa1922dfa9a8\",\n ledText = \"e95d93ee-251d-470a-a062-fa1922dfa9a8\",\n scrollingDelay = \"e95d0d2d-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * LED matrix structure\n */\nexport type LedMatrix = [\n [boolean, boolean, boolean, boolean, boolean],\n [boolean, boolean, boolean, boolean, boolean],\n [boolean, boolean, boolean, boolean, boolean],\n [boolean, boolean, boolean, boolean, boolean],\n [boolean, boolean, boolean, boolean, boolean]\n];\n\n/**\n * LED Service\n */\nexport class LedService {\n\n /**\n * @hidden\n */\n public static uuid = \"e95dd91d-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<LedService> {\n return new LedService(service);\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n this.helper = new ServiceHelper(service);\n }\n\n /**\n * Write text to the LED matrix\n * @param text Te text to display\n */\n public async writeText(text: string): Promise<void> {\n const encoded = this.encodeString(text);\n return this.helper.setCharacteristicValue(LedCharacteristic.ledText, encoded);\n }\n\n /**\n * Read matrix state\n */\n public async readMatrixState(): Promise<LedMatrix> {\n const view = await this.helper.getCharacteristicValue(LedCharacteristic.ledMatrixState);\n return this.viewToLedMatrix(view);\n }\n\n /**\n * Write matrix state\n * @param state The matrix data to set\n */\n public async writeMatrixState(state: LedMatrix): Promise<void> {\n const view = this.ledMatrixToView(state);\n return this.helper.setCharacteristicValue(LedCharacteristic.ledMatrixState, view);\n }\n\n /**\n * Get scrolling delay\n */\n public async getScrollingDelay(): Promise<number> {\n const view = await this.helper.getCharacteristicValue(LedCharacteristic.scrollingDelay);\n return view.getUint16(0, true);\n }\n\n /**\n * Set scrolling delay\n * @param delay The delay to set (milliseconds)\n */\n public async setScrollingDelay(delay: number): Promise<void> {\n const view = new DataView(new ArrayBuffer(2));\n view.setUint16(0, delay, true);\n return this.helper.setCharacteristicValue(LedCharacteristic.scrollingDelay, view);\n }\n\n private encodeString(text: string): ArrayBuffer {\n const buffer = new ArrayBuffer(text.length);\n const view = new Uint8Array(buffer);\n for (let i = 0; i < text.length; i++) {\n view[i] = text.charCodeAt(i);\n }\n return buffer;\n }\n\n private viewToLedMatrix(view: DataView): LedMatrix {\n const matrix: boolean[][] = [];\n for (let i = 0; i < 5; i ++) {\n matrix[i] = this.byteToBoolArray(view.getUint8(i));\n }\n return matrix as LedMatrix;\n }\n\n private byteToBoolArray(byte: number): boolean[] {\n const bools = [false, false, false, false, false];\n for (let i = 0; i < bools.length; i++) {\n bools[i] = (byte & 1) === 1;\n byte >>= 1;\n }\n return bools.reverse();\n }\n\n private ledMatrixToView(matrix: LedMatrix): DataView {\n const view = new DataView(new ArrayBuffer(5));\n for (let i = 0; i < 5; i ++) {\n view.setUint8(i, this.boolArrayToByte(matrix[i]));\n }\n return view;\n }\n\n private boolArrayToByte(bools: boolean[]): number {\n return bools.reduce((byte, bool) => byte << 1 | (bool ? 1 : 0), 0);\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { TypedDispatcher, EventDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum TemperatureCharacteristic {\n temperature = \"e95d9250-251d-470a-a062-fa1922dfa9a8\",\n temperaturePeriod = \"e95d1b25-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * Events raised by the temperature service\n */\nexport interface TemperatureEvents {\n /**\n * @hidden\n */\n newListener: keyof TemperatureEvents;\n /**\n * @hidden\n */\n removeListener: keyof TemperatureEvents;\n /**\n * Temperature changed event\n */\n temperaturechanged: number;\n}\n\n/**\n * Temperature Service\n */\nexport class TemperatureService extends (EventDispatcher as new() => TypedDispatcher<TemperatureEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d6100-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<TemperatureService> {\n const bluetoothService = new TemperatureService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"temperaturechanged\", TemperatureCharacteristic.temperature, this.temperatureChangedHandler.bind(this));\n }\n\n /**\n * Read temperature\n */\n public async readTemperature(): Promise<number> {\n const view = await this.helper.getCharacteristicValue(TemperatureCharacteristic.temperature);\n return view.getInt8(0);\n }\n\n /**\n * Get temperature sample period\n */\n public async getTemperaturePeriod(): Promise<number> {\n const view = await this.helper.getCharacteristicValue(TemperatureCharacteristic.temperaturePeriod);\n return view.getUint16(0, true);\n }\n\n /**\n * Set temperature sample period\n * @param frequency The frequency to use (milliseconds)\n */\n public async setTemperaturePeriod(frequency: number): Promise<void> {\n const view = new DataView(new ArrayBuffer(2));\n view.setUint16(0, frequency, true);\n return await this.helper.setCharacteristicValue(TemperatureCharacteristic.temperaturePeriod, view);\n }\n\n private temperatureChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n this.dispatchEvent(\"temperaturechanged\", view.getInt8(0));\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum AccelerometerCharacteristic {\n accelerometerData = \"e95dca4b-251d-470a-a062-fa1922dfa9a8\",\n accelerometerPeriod = \"e95dfb24-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * Data received from the accelerometer\n */\nexport interface AccelerometerData {\n /**\n * Force in direction X\n */\n x: number;\n /**\n * Force in direction Y\n */\n y: number;\n /**\n * Force in direction Z\n */\n z: number;\n}\n\n/**\n * The sample period to read accelerometer data (milliseconds)\n */\nexport type AccelerometerPeriod = 1 | 2 | 5 | 10 | 20 | 80 | 160 | 640;\n\n/**\n * Events raised by the accelerometer service\n */\nexport interface AccelerometerEvents {\n /**\n * @hidden\n */\n newListener: keyof AccelerometerEvents;\n /**\n * @hidden\n */\n removeListener: keyof AccelerometerEvents;\n /**\n * Accelerometer data changed event\n */\n accelerometerdatachanged: AccelerometerData;\n}\n\n/**\n * Accelerometer Service\n */\nexport class AccelerometerService extends (EventDispatcher as new() => TypedDispatcher<AccelerometerEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d0753-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<AccelerometerService> {\n const bluetoothService = new AccelerometerService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"accelerometerdatachanged\", AccelerometerCharacteristic.accelerometerData, this.accelerometerDataChangedHandler.bind(this));\n }\n\n /**\n * Read acceleromter data\n */\n public async readAccelerometerData(): Promise<AccelerometerData> {\n const view = await this.helper.getCharacteristicValue(AccelerometerCharacteristic.accelerometerData);\n return this.dataViewToAccelerometerData(view);\n }\n\n /**\n * Get accelerometer sample period\n */\n public async getAccelerometerPeriod(): Promise<AccelerometerPeriod> {\n const view = await this.helper.getCharacteristicValue(AccelerometerCharacteristic.accelerometerPeriod);\n return view.getUint16(0, true) as AccelerometerPeriod;\n }\n\n /**\n * Set accelerometer sample period\n * @param frequency The frequency interval to use\n */\n public async setAccelerometerPeriod(frequency: AccelerometerPeriod): Promise<void> {\n const view = new DataView(new ArrayBuffer(2));\n view.setUint16(0, frequency, true);\n return this.helper.setCharacteristicValue(AccelerometerCharacteristic.accelerometerPeriod, view);\n }\n\n private accelerometerDataChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const value = this.dataViewToAccelerometerData(view);\n this.dispatchEvent(\"accelerometerdatachanged\", value);\n }\n\n private dataViewToAccelerometerData(view: DataView): AccelerometerData {\n return {\n x: view.getInt16(0, true) / 1000.0,\n y: view.getInt16(2, true) / 1000.0,\n z: view.getInt16(4, true) / 1000.0\n };\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum MagnetometerCharacteristic {\n magnetometerData = \"e95dfb11-251d-470a-a062-fa1922dfa9a8\",\n magnetometerPeriod = \"e95d386c-251d-470a-a062-fa1922dfa9a8\",\n magnetometerBearing = \"e95d9715-251d-470a-a062-fa1922dfa9a8\",\n magnetometerCalibration = \"e95db358-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * Data received from the magnetometer\n */\nexport interface MagnetometerData {\n /**\n * Force in direction X\n */\n x: number;\n /**\n * Force in direction Y\n */\n y: number;\n /**\n * Force in direction Z\n */\n z: number;\n}\n\n/**\n * Magnetometer calibation state\n */\nexport enum MagnetometerCalibration {\n /**\n * Unknown state\n */\n unknown = 0,\n /**\n * Calibration has been requestes\n */\n requested = 1,\n /**\n * Calibration completed\n */\n completed = 2,\n /**\n * Calibration had an error\n */\n errored = 3\n}\n\n/**\n * The sample period to read magnetometer data (milliseconds)\n */\nexport type MagnetometerPeriod = 1 | 2 | 5 | 10 | 20 | 80 | 160 | 640;\n\n/**\n * Events raised by the magnetometer service\n */\nexport interface MagnetometerEvents {\n /**\n * @hidden\n */\n newListener: keyof MagnetometerEvents;\n /**\n * @hidden\n */\n removeListener: keyof MagnetometerEvents;\n /**\n * Magnetometer data changed event\n */\n magnetometerdatachanged: MagnetometerData;\n /**\n * Magnetometer bearing changed event\n */\n magnetometerbearingchanged: number;\n /**\n * Magnetometer calibration changed event\n */\n magnetometercalibrationchanged: MagnetometerCalibration;\n}\n\n/**\n * Magnetometer Service\n */\nexport class MagnetometerService extends (EventDispatcher as new() => TypedDispatcher<MagnetometerEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95df2d8-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<MagnetometerService> {\n const bluetoothService = new MagnetometerService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"magnetometerdatachanged\", MagnetometerCharacteristic.magnetometerData, this.magnetometerDataChangedHandler.bind(this));\n await this.helper.handleListener(\"magnetometerbearingchanged\", MagnetometerCharacteristic.magnetometerBearing, this.magnetometerBearingChangedHandler.bind(this));\n await this.helper.handleListener(\"magnetometercalibrationchanged\", MagnetometerCharacteristic.magnetometerCalibration, this.magnetometerCalibrationChangedHandler.bind(this));\n }\n\n /**\n * Request magnetometer calibration\n */\n public async calibrate() {\n return this.helper.setCharacteristicValue(MagnetometerCharacteristic.magnetometerCalibration, new Uint8Array([1]));\n }\n\n /**\n * Read magnetometer data\n */\n public async readMagnetometerData(): Promise<MagnetometerData> {\n const view = await this.helper.getCharacteristicValue(MagnetometerCharacteristic.magnetometerData);\n return this.dataViewToMagnetometerData(view);\n }\n\n /**\n * Read magnetometer bearing\n */\n public async readMagnetometerBearing(): Promise<number | undefined> {\n const view = await this.helper.getCharacteristicValue(MagnetometerCharacteristic.magnetometerBearing);\n if (view.byteLength === 2) {\n return view.getUint16(0, true);\n }\n return undefined;\n }\n\n /**\n * Get magnetometer sample period\n */\n public async getMagnetometerPeriod(): Promise<MagnetometerPeriod> {\n const view = await this.helper.getCharacteristicValue(MagnetometerCharacteristic.magnetometerPeriod);\n return view.getUint16(0, true) as MagnetometerPeriod;\n }\n\n /**\n * Set magnetometer sample period\n * @param frequency The frequency interval to use\n */\n public async setMagnetometerPeriod(frequency: MagnetometerPeriod): Promise<void> {\n const view = new DataView(new ArrayBuffer(2));\n view.setUint16(0, frequency, true);\n return this.helper.setCharacteristicValue(MagnetometerCharacteristic.magnetometerPeriod, view);\n }\n\n private magnetometerDataChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const value = this.dataViewToMagnetometerData(view);\n this.dispatchEvent(\"magnetometerdatachanged\", value);\n }\n\n private magnetometerBearingChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n if (view.byteLength === 2) {\n this.dispatchEvent(\"magnetometerbearingchanged\", view.getUint16(0, true));\n }\n }\n\n private magnetometerCalibrationChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n if (view.byteLength === 1) {\n this.dispatchEvent(\"magnetometercalibrationchanged\", view.getUint8(0) as MagnetometerCalibration);\n }\n }\n\n private dataViewToMagnetometerData(view: DataView): MagnetometerData {\n return {\n x: view.getInt16(0, true),\n y: view.getInt16(1, true),\n z: view.getInt16(2, true)\n };\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { ServiceHelper } from \"../service-helper\";\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\n\n/**\n * @hidden\n */\nexport enum IoPinCharacteristic {\n pinData = \"e95d8d00-251d-470a-a062-fa1922dfa9a8\",\n pinAdConfiguration = \"e95d5899-251d-470a-a062-fa1922dfa9a8\",\n pinIoConfiguration = \"e95db9fe-251d-470a-a062-fa1922dfa9a8\",\n pwmControl = \"e95dd822-251d-470a-a062-fa1922dfa9a8\"\n}\n\nconst littleEndian = true;\n\n/**\n * Pin data\n */\nexport interface PinData {\n /**\n * Pin number\n */\n pin: number;\n /**\n * Pin value\n */\n value: number;\n}\n\n/**\n * PWM control data\n */\nexport interface PwmControlData {\n /**\n * Pin number\n */\n pin: number;\n /**\n * Pin value\n */\n value: number;\n /**\n * Period (in microseconds)\n */\n period: number;\n}\n\n/**\n * Analogue/Digital Enum\n */\nexport enum AD {\n Digital = 0,\n Analogue = 1\n}\n\n/**\n * Input/Output Enum\n */\nexport enum IO {\n Output = 0,\n Input = 1\n}\n\n/**\n * Events raised by the magnetometer service\n */\nexport interface IoPinEvents {\n /**\n * @hidden\n */\n newListener: keyof IoPinEvents;\n /**\n * @hidden\n */\n removeListener: keyof IoPinEvents;\n /**\n * Pin data changed event\n */\n pindatachanged: PinData[];\n}\n\n/**\n * @hidden\n */\nexport class IoPinService extends (EventDispatcher as new() => TypedDispatcher<IoPinEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d127b-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<IoPinService> {\n const bluetoothService = new IoPinService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n /**\n * @hidden\n */\n public helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"pindatachanged\", IoPinCharacteristic.pinData, this.pinDataChangedHandler.bind(this));\n }\n\n /**\n * Read pin data\n */\n public async readPinData(): Promise<PinData[]> {\n const view = await this.helper.getCharacteristicValue(IoPinCharacteristic.pinData);\n return this.dataViewToPinData(view);\n }\n\n /**\n * Write pin data\n * @param data The pin data to write\n */\n public async writePinData(data: PinData[]): Promise<void> {\n const view = this.pinDataToDataView(data);\n return this.helper.setCharacteristicValue(IoPinCharacteristic.pinData, view);\n }\n\n /**\n * Get pin analogue/digital configuration\n */\n public async getAdConfiguration(): Promise<AD[]> {\n const view = await this.helper.getCharacteristicValue(IoPinCharacteristic.pinAdConfiguration);\n return this.dataViewToConfig(view);\n }\n\n /**\n * Set pin analogue/digital configuration\n * @param config The analogue/digital configuration to set\n */\n public async setAdConfiguration(config: AD[]): Promise<void> {\n const view = this.configToDataView(config);\n return this.helper.setCharacteristicValue(IoPinCharacteristic.pinAdConfiguration, view);\n }\n\n /**\n * Get pin input/output configuration\n */\n public async getIoConfiguration(): Promise<IO[]> {\n const view = await this.helper.getCharacteristicValue(IoPinCharacteristic.pinIoConfiguration);\n return this.dataViewToConfig(view);\n }\n\n /**\n * Set pin input/output configuration\n * @param config The input/output configuration to set\n */\n public async setIoConfiguration(config: IO[]): Promise<void> {\n const view = this.configToDataView(config);\n return this.helper.setCharacteristicValue(IoPinCharacteristic.pinIoConfiguration, view);\n }\n\n /**\n * Set pin PWM control\n * @param data The PWM control data to set\n */\n public async setPwmControl(data: PwmControlData): Promise<void> {\n const view = this.pwmControlDataToDataView(data);\n return this.helper.setCharacteristicValue(IoPinCharacteristic.pwmControl, view);\n }\n\n private pinDataChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const value = this.dataViewToPinData(view);\n this.dispatchEvent(\"pindatachanged\", value);\n }\n\n private dataViewToPinData(view: DataView): PinData[] {\n const data = [];\n for (let i = 0; i < view.byteLength; i += 2) {\n data.push({\n pin: view.getUint8(i),\n value: view.getUint8(i + 1)\n });\n }\n return data;\n }\n\n private pinDataToDataView(data: PinData[]): DataView {\n const view = new DataView(new ArrayBuffer(data.length * 2));\n data.forEach((pinData, index) => {\n view.setUint8(index * 2, pinData.pin);\n view.setUint8(index * 2 + 1, pinData.value);\n });\n return view;\n }\n\n private dataViewToConfig(view: DataView): number[] {\n const result: number[] = [];\n const value = (view.getUint16(0) << 8) + view.getUint8(2);\n\n for (let i = 0; i < 24; i++) {\n result.push(value >> i);\n }\n\n return result;\n }\n\n private configToDataView(config: number[]): DataView {\n const view = new DataView(new ArrayBuffer(3));\n let value = 0;\n\n // tslint:disable-next-line:prefer-for-of\n for (let i = 0; i < config.length; i++) {\n value &= 1 << config[i];\n }\n\n view.setUint16(0, value >> 8, littleEndian);\n view.setUint8(2, value & 0xff);\n return view;\n }\n\n private pwmControlDataToDataView(data: PwmControlData): DataView {\n const view = new DataView(new ArrayBuffer(7));\n view.setUint8(0, data.pin);\n view.setUint16(1, data.value, littleEndian);\n view.setUint32(3, data.period, littleEndian);\n return view;\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum UartCharacteristic {\n tx = \"6e400002-b5a3-f393-e0a9-e50e24dcca9e\",\n rx = \"6e400003-b5a3-f393-e0a9-e50e24dcca9e\"\n}\n\n/**\n * Events raised by the UART service\n */\nexport interface UartEvents {\n /**\n * @hidden\n */\n newListener: keyof UartEvents;\n /**\n * @hidden\n */\n removeListener: keyof UartEvents;\n /**\n * Serial data received event\n */\n receive: Uint8Array;\n /**\n * Serial received text event\n */\n receiveText: string;\n}\n\n/**\n * UART Service\n */\nexport class UartService extends (EventDispatcher as new() => TypedDispatcher<UartEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"6e400001-b5a3-f393-e0a9-e50e24dcca9e\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<UartService> {\n const bluetoothService = new UartService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"receive\", UartCharacteristic.tx, this.receiveHandler.bind(this));\n await this.helper.handleListener(\"receiveText\", UartCharacteristic.tx, this.receiveTextHandler.bind(this));\n }\n\n /**\n * Send serial data\n * @param value The buffer to send\n */\n public async send(value: BufferSource): Promise<void> {\n return this.helper.setCharacteristicValue(UartCharacteristic.rx, value);\n }\n\n /**\n * Send serial text\n * @param value The text to send\n */\n public async sendText(value: string): Promise<void> {\n const arrayData = value.split(\"\").map((e: string) => e.charCodeAt(0));\n return this.helper.setCharacteristicValue(UartCharacteristic.rx, new Uint8Array(arrayData).buffer);\n }\n\n private receiveHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const value = new Uint8Array(view.buffer);\n this.dispatchEvent(\"receive\", value);\n }\n\n private receiveTextHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const numberArray = Array.prototype.slice.call(new Uint8Array(view.buffer));\n const value = String.fromCharCode.apply(null, numberArray);\n this.dispatchEvent(\"receiveText\", value);\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum EventCharacteristic {\n microBitRequirements = \"e95db84c-251d-470a-a062-fa1922dfa9a8\",\n microBitEvent = \"e95d9775-251d-470a-a062-fa1922dfa9a8\",\n clientRequirements = \"e95d23c4-251d-470a-a062-fa1922dfa9a8\",\n clientEvent = \"e95d5404-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * micro:bit event\n */\nexport interface MicrobitEvent {\n /**\n * The type of event\n */\n type: number;\n /**\n * The value for the event\n */\n value: number;\n}\n\n/**\n * Events raised by the event service\n */\nexport interface MicrobitEvents {\n /**\n * @hidden\n */\n newListener: keyof MicrobitEvents;\n /**\n * @hidden\n */\n removeListener: keyof MicrobitEvents;\n /**\n * micro:bit requirements changed event\n */\n microbitrequirementschanged: MicrobitEvent;\n /**\n * micro:bit event event\n */\n microbitevent: MicrobitEvent;\n}\n\n/**\n * Event Service\n */\nexport class EventService extends (EventDispatcher as new() => TypedDispatcher<MicrobitEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d93af-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<EventService> {\n const bluetoothService = new EventService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"microbitevent\", EventCharacteristic.microBitEvent, this.eventHandler.bind(this));\n await this.helper.handleListener(\"microbitrequirementschanged\", EventCharacteristic.microBitRequirements, this.microbitRequirementsChangedHandler.bind(this));\n }\n\n /**\n * Get micro:bit event requirements\n */\n public async getMicrobitRequirements(): Promise<MicrobitEvent> {\n const view = await this.helper.getCharacteristicValue(EventCharacteristic.microBitRequirements);\n return this.viewToMicrobitEvent(view);\n }\n\n /**\n * Set client event requirements\n * @param type The type of event to set\n * @param value The value to set\n */\n public async setClientRequirements(type: number, value: number): Promise<void> {\n const view = new DataView(new ArrayBuffer(4));\n view.setUint16(0, type, true);\n view.setUint16(1, value, true);\n return await this.helper.setCharacteristicValue(EventCharacteristic.clientRequirements, view);\n }\n\n /**\n * Read micro:bit event\n */\n public async readMicrobitEvent(): Promise<MicrobitEvent> {\n const view = await this.helper.getCharacteristicValue(EventCharacteristic.microBitEvent);\n return this.viewToMicrobitEvent(view);\n }\n\n /**\n * Write client event\n * @param type The event type\n * @param value The event value\n */\n public async writeClientEvent(type: number, value: number): Promise<void> {\n const view = new DataView(new ArrayBuffer(4));\n view.setUint16(0, type, true);\n view.setUint16(1, value, true);\n return await this.helper.setCharacteristicValue(EventCharacteristic.clientEvent, view);\n }\n\n private microbitRequirementsChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const microbitEvent = this.viewToMicrobitEvent(view);\n this.dispatchEvent(\"microbitrequirementschanged\", microbitEvent);\n }\n\n private eventHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const microbitEvent = this.viewToMicrobitEvent(view);\n this.dispatchEvent(\"microbitevent\", microbitEvent);\n }\n\n private viewToMicrobitEvent(view: DataView): MicrobitEvent {\n const type = view.getUint16(0, true);\n const value = view.getUint16(1, true);\n return {\n type,\n value\n };\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { DeviceInformationService } from \"./services/device-information\";\nimport { ButtonService } from \"./services/button\";\nimport { LedService } from \"./services/led\";\nimport { TemperatureService } from \"./services/temperature\";\nimport { AccelerometerService } from \"./services/accelerometer\";\nimport { MagnetometerService } from \"./services/magnetometer\";\nimport { IoPinService } from \"./services/io-pin\";\nimport { UartService } from \"./services/uart\";\nimport { EventService } from \"./services/event\";\nimport { DfuControlService } from \"./services/dfu-control\";\n\nexport interface Services {\n deviceInformationService?: DeviceInformationService;\n buttonService?: ButtonService;\n ledService?: LedService;\n temperatureService?: TemperatureService;\n accelerometerService?: AccelerometerService;\n magnetometerService?: MagnetometerService;\n uartService?: UartService;\n eventService?: EventService;\n dfuControlService?: DfuControlService;\n ioPinService?: IoPinService;\n}\n\n/**\n * @hidden\n */\ninterface Service {\n uuid: BluetoothCharacteristicUUID;\n create(service: BluetoothRemoteGATTService): Promise<any>;\n}\n\n/**\n * @hidden\n */\nclass ServiceBuilder {\n\n constructor(private services: BluetoothRemoteGATTService[]) {\n }\n\n public async createService<T>(serviceClass: (new (service: BluetoothRemoteGATTService) => T) & Service): Promise<T | undefined> {\n const found = this.services.find(service => service.uuid === serviceClass.uuid);\n\n if (!found) {\n return undefined;\n }\n\n return await serviceClass.create(found);\n }\n}\n\nexport const requestMicrobit = async (bluetooth: Bluetooth): Promise<BluetoothDevice | undefined> => {\n const device = await bluetooth.requestDevice({\n filters: [\n {\n namePrefix: \"BBC micro:bit\"\n }\n ],\n optionalServices: [\n DeviceInformationService.uuid,\n ButtonService.uuid,\n LedService.uuid,\n TemperatureService.uuid,\n AccelerometerService.uuid,\n MagnetometerService.uuid,\n IoPinService.uuid,\n UartService.uuid,\n EventService.uuid,\n DfuControlService.uuid\n ]\n });\n\n return device;\n};\n\nexport const getServices = async (device: BluetoothDevice): Promise<Services> => {\n if (!device || !device.gatt) {\n return {};\n }\n\n if (!device.gatt.connected) {\n await device.gatt.connect();\n }\n\n const services = await device.gatt.getPrimaryServices();\n const builder = new ServiceBuilder(services);\n\n const deviceInformationService = await builder.createService(DeviceInformationService);\n const buttonService = await builder.createService(ButtonService);\n const ledService = await builder.createService(LedService);\n const temperatureService = await builder.createService(TemperatureService);\n const accelerometerService = await builder.createService(AccelerometerService);\n const magnetometerService = await builder.createService(MagnetometerService);\n const uartService = await builder.createService(UartService);\n const eventService = await builder.createService(EventService);\n const dfuControlService = await builder.createService(DfuControlService);\n const ioPinService = await builder.createService(IoPinService);\n\n return {\n deviceInformationService,\n buttonService,\n ledService,\n temperatureService,\n accelerometerService,\n magnetometerService,\n uartService,\n eventService,\n dfuControlService,\n ioPinService\n };\n};\n","let notif_queue = [];\n\nfunction notif(notif_c) {\n let notification_area = document.querySelector(\".statusline .notification-area\");\n\n if (notification_area.querySelector(\".notification\") === null) {\n let notif_elem = document.createElement(\"div\");\n notif_elem.className = \"notification\";\n notif_elem.appendChild(notif_c[0]);\n notif_elem.appendChild(notif_c[1]);\n\n notification_area.appendChild(notif_elem);\n\n setTimeout(() => {\n notification_area.removeChild(notif_elem);\n if (notif_queue.length > 0) {\n notif(notif_queue.pop());\n }\n }, 5000);\n } else {\n notif_queue.push(notif_c);\n }\n}\n\nexport function notif_alert(alert_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = alert_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"alert fas fa-exclamation-triangle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_warn(alert_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = alert_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"warning fas fa-exclamation-triangle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_info(info_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = info_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"info fas fa-info-circle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_success(success_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = success_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"success fas fa-check-circle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n","import { notif_alert, notif_warn, notif_info, notif_success } from './notification';\n\nexport default class hoverControlModule {\n #throttle = 0;\n #throttleAcc = 0;\n #rudder = 0;\n #rudderAcc = 0;\n #arm = 0;\n #armAcc = 0;\n\n constructor() {}\n\n acc(accString) {\n accString.match(/[A-Z][-,0-9]+/g).forEach((item, i) => {\n switch (item.substring(0, 1)) {\n case \"T\":\n this.#throttleAcc = parseInt(item.substring(1, item.length));\n break;\n case \"R\":\n this.#rudderAcc = parseInt(item.substring(1, item.length));\n break;\n case \"A\":\n this.#armAcc = parseInt(item.substring(1, item.length)) == 1;\n if (this.#armAcc) {\n document.body.classList.add(\"armed\");\n } else {\n document.body.classList.remove(\"armed\");\n }\n break;\n case \"S\":\n break;\n default:\n console.log(`Unkown acc: ${item}`);\n }\n });\n document.querySelector(\".acc-string pre\").innerHTML = `T: ${this.#throttleAcc}, R: ${this.#rudderAcc}`;\n }\n\n reset() {\n this.setArm(0);\n this.setThrottle(0);\n this.setRudder(0);\n }\n\n setThrottle(throttle) {\n if (!this.#armAcc) { return; }\n if (throttle > 100) { throttle = 100; }\n if (throttle < 0) { throttle = 0; }\n this.#throttle = throttle;\n }\n getThrottle() {\n return this.#throttle;\n }\n\n setRudder(rudder) {\n if (!this.#armAcc) { return; }\n if (rudder > 90) { rudder = 90; }\n if (rudder < -90) { rudder = -90; }\n this.#rudder = rudder;\n }\n getRudder() {\n return this.#rudder;\n }\n\n setArm(arm) {\n this.#arm = arm;\n if (!this.#arm) {\n this.#throttle = 0;\n this.#rudder = 0;\n }\n }\n getArm() {\n return this.#arm;\n }\n}\n","import nipplejs from 'nipplejs';\nimport { requestMicrobit, getServices } from 'microbit-web-bluetooth';\nimport hoverControlModule from './hoverControlModule';\nimport { notif_alert, notif_warn, notif_info, notif_success } from './notification';\n\nlet sw = \"service-worker.js\";\nif (navigator.serviceWorker) {\n // navigator.serviceWorker.register(sw, {scope: '/hoverbit-ble/'});\n //}\n navigator.serviceWorker.register(\n sw, {scope: '/hoverbit-ble/'}\n ).then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) { return; }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n notif_info(\"New content is available, relaunch the app to install it.\");\n } else {\n notif_success(\"Content is cached for offline use.\");\n }\n }\n };\n };\n }).catch(error => {\n notif_alert(\"Could not install service worker...\");\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\ndocument.getElementById(\"btn_ignore_landscape_warning\").addEventListener(\"click\", () => {\n document.body.classList.add(\"ignore-landscape-warning\");\n});\n\n/* Define and initialize things */\nlet hoverControl = new hoverControlModule();\nlet bluetoothDevice;\nlet bluetoothDeviceServices;\n\nlet joystickLeft = nipplejs.create({\n zone: document.querySelector(\".joystick-left\"),\n size: 200,\n position: {left: '50%', bottom: '50%'},\n mode: \"static\",\n lockX: true\n});\nlet joystickRight = nipplejs.create({\n zone: document.querySelector(\".joystick-right\"),\n size: 200,\n position: {left: '50%', bottom: '50%'},\n mode: \"static\",\n lockY: true\n});\n\n/* Setup event_listeners */\njoystickLeft.on(\"move\", (evt, data) => {\n let rudder = ((data.distance * 90) / 100);\n if (data.angle.degree > 90) { rudder = rudder * -1; }\n hoverControl.setRudder(rudder);\n});\njoystickLeft.on(\"end\", (evt, data) => {\n hoverControl.setRudder(0);\n});\n\njoystickRight.on(\"move\", (evt, data) => {\n let throttle = data.distance;\n if (data.angle.degree > 90) { throttle = 0; }\n hoverControl.setThrottle(throttle);\n});\njoystickRight.on(\"end\", (evt, data) => {\n hoverControl.setThrottle(0);\n});\n\ndocument.getElementById(\"btn_arm\").addEventListener(\"click\", () => {\n hoverControl.setArm(true);\n});\n\ndocument.getElementById(\"btn_disarm\").addEventListener(\"click\", () => {\n hoverControl.setArm(false);\n});\n\ndocument.querySelector(\"#btn_disconnect\").addEventListener(\"click\", () => {\n hoverControl.reset();\n bluetoothDevice.gatt.disconnect();\n});\n\nlet intervalConnectionChecker = setInterval(() => {\n if (bluetoothDevice !== undefined && bluetoothDevice) {\n if (bluetoothDevice.gatt.connected) {\n document.body.classList.add(\"connected\");\n } else {\n document.body.classList.remove(\"connected\");\n document.body.classList.remove(\"armed\");\n }\n } else if (bluetoothDevice !== undefined) {\n bluetoothDevice.gatt.reconnect();\n }\n}, 500);\n\nlet intervalSendCommands = setInterval(async() => {\n if (bluetoothDevice !== undefined && bluetoothDevice) {\n if (bluetoothDevice.gatt.connected && bluetoothDeviceServices.uartService) {\n let command =\n \"T\" + hoverControl.getThrottle().toString() +\n \"R\" + hoverControl.getRudder().toString() +\n \"A\" + (hoverControl.getArm() ? \"1\" : \"0\") +\n \"S0\" +\n \":\";\n await bluetoothDeviceServices.uartService.sendText(command);\n }\n }\n}, 70);\n\nfunction receiveText(event) {\n /* Just make the ping symbol reappear. */\n var elm = document.querySelector(\".ping i\");\n var newone = elm.cloneNode(true);\n elm.parentNode.replaceChild(newone, elm);\n\n /* Actually handle received text. */\n if ((event.detail).indexOf(\":\") != -1) {\n let parts = (event.detail).split(\":\");\n\n if (parts[0] == \"B\") {\n document.querySelector(\".battery-status\").innerHTML = parts[1] + \"mV\";\n } else if (parts[0] == \"ACC\") {\n hoverControl.acc(parts[1]);\n } else {\n console.log(parts);\n }\n } else {\n notif_warn(\"Received weird data from MICRO:BIT...\");\n console.log(`Received unknown: ${event.detail}`);\n }\n}\n\ndocument.getElementById(\"btn_connect\").onclick = async () => {\n if (bluetoothDevice !== undefined && bluetoothDevice.gatt.connected) {\n bluetoothDevice.disconnect();\n }\n\n const device = await requestMicrobit(window.navigator.bluetooth);\n bluetoothDevice = device;\n\n if (device) {\n hoverControl.reset();\n const services = await getServices(device);\n bluetoothDeviceServices = services;\n\n if (bluetoothDeviceServices.deviceInformationService) {\n // logJson(await services.deviceInformationService.readDeviceInformation());\n }\n\n if (services.uartService) {\n services.uartService.addEventListener(\"receiveText\", receiveText);\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/main.3047e937.js b/main.7b0c10bd.js
index 89b3a84..149da76 100644
--- a/main.3047e937.js
+++ b/main.7b0c10bd.js
@@ -4,10 +4,10 @@ var t;!function(i,e){"object"==typeof exports&&"object"==typeof module?module.ex
},{}],"GaXO":[function(require,module,exports) {
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.requestMicrobit=exports.getServices=void 0;var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};function t(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}function n(e,t,n,r){return new(n||(n=Promise))(function(i,a){function o(e){try{s(r.next(e))}catch(e){a(e)}}function u(e){try{s(r.throw(e))}catch(e){a(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(o,u)}s((r=r.apply(e,t||[])).next())})}function r(e,t){var n,r,i,a,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(a){return function(u){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(i=2&a[0]?r.return:a[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;switch(r=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,r=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!((i=(i=o.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],r=0}finally{n=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}}var i,a=function(){function e(e){void 0===e&&(e=1),this.concurrent=e,this.queue=[],this.running=0}return e.prototype.pump=function(){return n(this,void 0,void 0,function(){var e,t,n;return r(this,function(r){switch(r.label){case 0:if(this.running>=this.concurrent)return[2];if(!(e=this.queue.shift()))return[2];this.running++,r.label=1;case 1:return r.trys.push([1,3,,4]),[4,e.fn()];case 2:return t=r.sent(),e.resolve(t),[3,4];case 3:return n=r.sent(),e.reject(n),[3,4];case 4:return this.running--,[2,this.pump()]}})})},e.prototype.add=function(e){var t=this;return new Promise(function(n,r){return t.queue.push({fn:e,resolve:n,reject:r}),t.pump()})},e}(),o=function(){function e(e,t){this.service=e,this.emitter=t}return e.prototype.getCharacteristic=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){switch(n.label){case 0:return this.characteristics?[3,2]:(t=this,[4,this.service.getCharacteristics()]);case 1:t.characteristics=n.sent(),n.label=2;case 2:return[2,this.characteristics.find(function(t){return t.uuid===e})]}})})},e.prototype.getCharacteristicValue=function(t){return n(this,void 0,void 0,function(){var i,a=this;return r(this,function(o){switch(o.label){case 0:return[4,this.getCharacteristic(t)];case 1:if(!(i=o.sent()))throw new Error("Unable to locate characteristic");return[4,e.queue.add(function(){return n(a,void 0,void 0,function(){return r(this,function(e){return[2,i.readValue()]})})})];case 2:return[2,o.sent()]}})})},e.prototype.setCharacteristicValue=function(t,i){return n(this,void 0,void 0,function(){var a,o=this;return r(this,function(u){switch(u.label){case 0:return[4,this.getCharacteristic(t)];case 1:if(!(a=u.sent()))throw new Error("Unable to locate characteristic");return[4,e.queue.add(function(){return n(o,void 0,void 0,function(){return r(this,function(e){return[2,a.writeValue(i)]})})})];case 2:return u.sent(),[2]}})})},e.prototype.handleListener=function(t,i,a){return n(this,void 0,void 0,function(){var o,u=this;return r(this,function(s){switch(s.label){case 0:return[4,this.getCharacteristic(i)];case 1:return(o=s.sent())?[4,e.queue.add(function(){return n(u,void 0,void 0,function(){return r(this,function(e){return[2,o.startNotifications()]})})})]:[2];case 2:return s.sent(),this.emitter.on("newListener",function(i){if(!(i!==t||u.emitter.listenerCount(t)>0))return e.queue.add(function(){return n(u,void 0,void 0,function(){return r(this,function(e){return[2,o.addEventListener("characteristicvaluechanged",a)]})})})}),this.emitter.on("removeListener",function(i){if(!(i!==t||u.emitter.listenerCount(t)>0))return e.queue.add(function(){return n(u,void 0,void 0,function(){return r(this,function(e){return[2,o.removeEventListener("characteristicvaluechanged",a)]})})})}),[2]}})})},e.queue=new a,e}();!function(e){e.modelNumber="00002a24-0000-1000-8000-00805f9b34fb",e.serialNumber="00002a25-0000-1000-8000-00805f9b34fb",e.firmwareRevision="00002a26-0000-1000-8000-00805f9b34fb",e.hardwareRevision="00002a27-0000-1000-8000-00805f9b34fb",e.manufacturer="00002a29-0000-1000-8000-00805f9b34fb"}(i||(i={}));var u=function(){function e(e){this.helper=new o(e)}return e.create=function(t){return n(this,void 0,void 0,function(){return r(this,function(n){return[2,new e(t)]})})},e.prototype.readDeviceInformation=function(){return n(this,void 0,void 0,function(){var e,t,n,a,o,u;return r(this,function(r){switch(r.label){case 0:return e={},[4,this.readStringCharacteristic(i.modelNumber)];case 1:return(t=r.sent())&&(e.modelNumber=t),[4,this.readStringCharacteristic(i.serialNumber)];case 2:return(n=r.sent())&&(e.serialNumber=n),[4,this.readStringCharacteristic(i.firmwareRevision)];case 3:return(a=r.sent())&&(e.firmwareRevision=a),[4,this.readStringCharacteristic(i.hardwareRevision)];case 4:return(o=r.sent())&&(e.hardwareRevision=o),[4,this.readStringCharacteristic(i.manufacturer)];case 5:return(u=r.sent())&&(e.manufacturer=u),[2,e]}})})},e.prototype.readStringCharacteristic=function(e){return n(this,void 0,void 0,function(){var t,n;return r(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,this.helper.getCharacteristicValue(e)];case 1:return t=r.sent(),n=t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength),[2,String.fromCharCode.apply(null,Array.from(new Uint8Array(n)))];case 2:return r.sent(),[2,void 0];case 3:return[2]}})})},e.uuid="0000180a-0000-1000-8000-00805f9b34fb",e}();function s(){}function c(){c.init.call(this)}function h(e){return void 0===e._maxListeners?c.defaultMaxListeners:e._maxListeners}function f(e,t,n){if(t)e.call(n);else for(var r=e.length,i=y(e,r),a=0;a<r;++a)i[a].call(n)}function d(e,t,n,r){if(t)e.call(n,r);else for(var i=e.length,a=y(e,i),o=0;o<i;++o)a[o].call(n,r)}function l(e,t,n,r,i){if(t)e.call(n,r,i);else for(var a=e.length,o=y(e,a),u=0;u<a;++u)o[u].call(n,r,i)}function v(e,t,n,r,i,a){if(t)e.call(n,r,i,a);else for(var o=e.length,u=y(e,o),s=0;s<o;++s)u[s].call(n,r,i,a)}function p(e,t,n,r){if(t)e.apply(n,r);else for(var i=e.length,a=y(e,i),o=0;o<i;++o)a[o].apply(n,r)}function g(e,t,n,r){var i,a,o,u;if("function"!=typeof n)throw new TypeError('"listener" argument must be a function');if((a=e._events)?(a.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),a=e._events),o=a[t]):(a=e._events=new s,e._eventsCount=0),o){if("function"==typeof o?o=a[t]=r?[n,o]:[o,n]:r?o.unshift(n):o.push(n),!o.warned&&(i=h(e))&&i>0&&o.length>i){o.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=o.length,u=c,"function"==typeof console.warn?console.warn(u):console.log(u)}}else o=a[t]=n,++e._eventsCount;return e}function m(e,t,n){var r=!1;function i(){e.removeListener(t,i),r||(r=!0,n.apply(e,arguments))}return i.listener=n,i}function w(e){var t=this._events;if(t){var n=t[e];if("function"==typeof n)return 1;if(n)return n.length}return 0}function y(e,t){for(var n=new Array(t);t--;)n[t]=e[t];return n}s.prototype=Object.create(null),c.EventEmitter=c,c.usingDomains=!1,c.prototype.domain=void 0,c.prototype._events=void 0,c.prototype._maxListeners=void 0,c.defaultMaxListeners=10,c.init=function(){this.domain=null,c.usingDomains&&(void 0).active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new s,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},c.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},c.prototype.getMaxListeners=function(){return h(this)},c.prototype.emit=function(e){var t,n,r,i,a,o,u,s="error"===e;if(o=this._events)s=s&&null==o.error;else if(!s)return!1;if(u=this.domain,s){if(t=arguments[1],!u){if(t instanceof Error)throw t;var c=new Error('Uncaught, unspecified "error" event. ('+t+")");throw c.context=t,c}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=u,t.domainThrown=!1,u.emit("error",t),!1}if(!(n=o[e]))return!1;var h="function"==typeof n;switch(r=arguments.length){case 1:f(n,h,this);break;case 2:d(n,h,this,arguments[1]);break;case 3:l(n,h,this,arguments[1],arguments[2]);break;case 4:v(n,h,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(r-1),a=1;a<r;a++)i[a-1]=arguments[a];p(n,h,this,i)}return!0},c.prototype.addListener=function(e,t){return g(this,e,t,!1)},c.prototype.on=c.prototype.addListener,c.prototype.prependListener=function(e,t){return g(this,e,t,!0)},c.prototype.once=function(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.on(e,m(this,e,t)),this},c.prototype.prependOnceListener=function(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.prependListener(e,m(this,e,t)),this},c.prototype.removeListener=function(e,t){var n,r,i,a,o;if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');if(!(r=this._events))return this;if(!(n=r[e]))return this;if(n===t||n.listener&&n.listener===t)0==--this._eventsCount?this._events=new s:(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(i=-1,a=n.length;a-- >0;)if(n[a]===t||n[a].listener&&n[a].listener===t){o=n[a].listener,i=a;break}if(i<0)return this;if(1===n.length){if(n[0]=void 0,0==--this._eventsCount)return this._events=new s,this;delete r[e]}else!function(e,t){for(var n=t,r=n+1,i=e.length;r<i;n+=1,r+=1)e[n]=e[r];e.pop()}(n,i);r.removeListener&&this.emit("removeListener",e,o||t)}return this},c.prototype.removeAllListeners=function(e){var t,n;if(!(n=this._events))return this;if(!n.removeListener)return 0===arguments.length?(this._events=new s,this._eventsCount=0):n[e]&&(0==--this._eventsCount?this._events=new s:delete n[e]),this;if(0===arguments.length){for(var r,i=Object.keys(n),a=0;a<i.length;++a)"removeListener"!==(r=i[a])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=new s,this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(t)do{this.removeListener(e,t[t.length-1])}while(t[0]);return this},c.prototype.listeners=function(e){var t,n=this._events;return n&&(t=n[e])?"function"==typeof t?[t.listener||t]:function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(t):[]},c.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):w.call(e,t)},c.prototype.listenerCount=w,c.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};var b,C,V=function(e){function n(){var t=null!==e&&e.apply(this,arguments)||this;return t.isEventListenerObject=function(e){return void 0!==e.handleEvent},t}return t(n,e),n.prototype.addEventListener=function(t,n){if(n){var r=this.isEventListenerObject(n)?n.handleEvent:n;e.prototype.addListener.call(this,t,r)}},n.prototype.removeEventListener=function(t,n){if(n){var r=this.isEventListenerObject(n)?n.handleEvent:n;e.prototype.removeListener.call(this,t,r)}},n.prototype.dispatchEvent=function(t,n){var r;return r="string"==typeof t?new CustomEvent(t,{detail:n}):t,e.prototype.emit.call(this,r.type,r)},n}(c);!function(e){e.buttonAState="e95dda90-251d-470a-a062-fa1922dfa9a8",e.buttonBState="e95dda91-251d-470a-a062-fa1922dfa9a8"}(b||(b={})),function(e){e[e.Release=0]="Release",e[e.ShortPress=1]="ShortPress",e[e.LongPress=2]="LongPress"}(C||(C={}));var L,D=function(e){function i(t){var n=e.call(this)||this;return n.helper=new o(t,n),n}return t(i,e),i.create=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){switch(n.label){case 0:return[4,(t=new i(e)).init()];case 1:return n.sent(),[2,t]}})})},i.prototype.init=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.handleListener("buttonastatechanged",b.buttonAState,this.buttonAStateChangedHandler.bind(this))];case 1:return e.sent(),[4,this.helper.handleListener("buttonbstatechanged",b.buttonBState,this.buttonBStateChangedHandler.bind(this))];case 2:return e.sent(),[2]}})})},i.prototype.readButtonAState=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.getCharacteristicValue(b.buttonAState)];case 1:return[2,e.sent().getUint8(0)]}})})},i.prototype.readButtonBState=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.getCharacteristicValue(b.buttonBState)];case 1:return[2,e.sent().getUint8(0)]}})})},i.prototype.buttonAStateChangedHandler=function(e){var t=e.target.value;this.dispatchEvent("buttonastatechanged",t.getUint8(0))},i.prototype.buttonBStateChangedHandler=function(e){var t=e.target.value;this.dispatchEvent("buttonbstatechanged",t.getUint8(0))},i.uuid="e95d9882-251d-470a-a062-fa1922dfa9a8",i}(V);!function(e){e.ledMatrixState="e95d7b77-251d-470a-a062-fa1922dfa9a8",e.ledText="e95d93ee-251d-470a-a062-fa1922dfa9a8",e.scrollingDelay="e95d0d2d-251d-470a-a062-fa1922dfa9a8"}(L||(L={}));var S,E=function(){function e(e){this.helper=new o(e)}return e.create=function(t){return n(this,void 0,void 0,function(){return r(this,function(n){return[2,new e(t)]})})},e.prototype.writeText=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){return t=this.encodeString(e),[2,this.helper.setCharacteristicValue(L.ledText,t)]})})},e.prototype.readMatrixState=function(){return n(this,void 0,void 0,function(){var e;return r(this,function(t){switch(t.label){case 0:return[4,this.helper.getCharacteristicValue(L.ledMatrixState)];case 1:return e=t.sent(),[2,this.viewToLedMatrix(e)]}})})},e.prototype.writeMatrixState=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){return t=this.ledMatrixToView(e),[2,this.helper.setCharacteristicValue(L.ledMatrixState,t)]})})},e.prototype.getScrollingDelay=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.getCharacteristicValue(L.scrollingDelay)];case 1:return[2,e.sent().getUint16(0,!0)]}})})},e.prototype.setScrollingDelay=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){return(t=new DataView(new ArrayBuffer(2))).setUint16(0,e,!0),[2,this.helper.setCharacteristicValue(L.scrollingDelay,t)]})})},e.prototype.encodeString=function(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r<e.length;r++)n[r]=e.charCodeAt(r);return t},e.prototype.viewToLedMatrix=function(e){for(var t=[],n=0;n<5;n++)t[n]=this.byteToBoolArray(e.getUint8(n));return t},e.prototype.byteToBoolArray=function(e){for(var t=[!1,!1,!1,!1,!1],n=0;n<t.length;n++)t[n]=1==(1&e),e>>=1;return t.reverse()},e.prototype.ledMatrixToView=function(e){for(var t=new DataView(new ArrayBuffer(5)),n=0;n<5;n++)t.setUint8(n,this.boolArrayToByte(e[n]));return t},e.prototype.boolArrayToByte=function(e){return e.reduce(function(e,t){return e<<1|(t?1:0)},0)},e.uuid="e95dd91d-251d-470a-a062-fa1922dfa9a8",e}();!function(e){e.temperature="e95d9250-251d-470a-a062-fa1922dfa9a8",e.temperaturePeriod="e95d1b25-251d-470a-a062-fa1922dfa9a8"}(S||(S={}));var A,x=function(e){function i(t){var n=e.call(this)||this;return n.helper=new o(t,n),n}return t(i,e),i.create=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){switch(n.label){case 0:return[4,(t=new i(e)).init()];case 1:return n.sent(),[2,t]}})})},i.prototype.init=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.handleListener("temperaturechanged",S.temperature,this.temperatureChangedHandler.bind(this))];case 1:return e.sent(),[2]}})})},i.prototype.readTemperature=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.getCharacteristicValue(S.temperature)];case 1:return[2,e.sent().getInt8(0)]}})})},i.prototype.getTemperaturePeriod=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.getCharacteristicValue(S.temperaturePeriod)];case 1:return[2,e.sent().getUint16(0,!0)]}})})},i.prototype.setTemperaturePeriod=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){switch(n.label){case 0:return(t=new DataView(new ArrayBuffer(2))).setUint16(0,e,!0),[4,this.helper.setCharacteristicValue(S.temperaturePeriod,t)];case 1:return[2,n.sent()]}})})},i.prototype.temperatureChangedHandler=function(e){var t=e.target.value;this.dispatchEvent("temperaturechanged",t.getInt8(0))},i.uuid="e95d6100-251d-470a-a062-fa1922dfa9a8",i}(V);!function(e){e.accelerometerData="e95dca4b-251d-470a-a062-fa1922dfa9a8",e.accelerometerPeriod="e95dfb24-251d-470a-a062-fa1922dfa9a8"}(A||(A={}));var T,U,_=function(e){function i(t){var n=e.call(this)||this;return n.helper=new o(t,n),n}return t(i,e),i.create=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){switch(n.label){case 0:return[4,(t=new i(e)).init()];case 1:return n.sent(),[2,t]}})})},i.prototype.init=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.handleListener("accelerometerdatachanged",A.accelerometerData,this.accelerometerDataChangedHandler.bind(this))];case 1:return e.sent(),[2]}})})},i.prototype.readAccelerometerData=function(){return n(this,void 0,void 0,function(){var e;return r(this,function(t){switch(t.label){case 0:return[4,this.helper.getCharacteristicValue(A.accelerometerData)];case 1:return e=t.sent(),[2,this.dataViewToAccelerometerData(e)]}})})},i.prototype.getAccelerometerPeriod=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.getCharacteristicValue(A.accelerometerPeriod)];case 1:return[2,e.sent().getUint16(0,!0)]}})})},i.prototype.setAccelerometerPeriod=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){return(t=new DataView(new ArrayBuffer(2))).setUint16(0,e,!0),[2,this.helper.setCharacteristicValue(A.accelerometerPeriod,t)]})})},i.prototype.accelerometerDataChangedHandler=function(e){var t=e.target.value,n=this.dataViewToAccelerometerData(t);this.dispatchEvent("accelerometerdatachanged",n)},i.prototype.dataViewToAccelerometerData=function(e){return{x:e.getInt16(0,!0)/1e3,y:e.getInt16(2,!0)/1e3,z:e.getInt16(4,!0)/1e3}},i.uuid="e95d0753-251d-470a-a062-fa1922dfa9a8",i}(V);!function(e){e.magnetometerData="e95dfb11-251d-470a-a062-fa1922dfa9a8",e.magnetometerPeriod="e95d386c-251d-470a-a062-fa1922dfa9a8",e.magnetometerBearing="e95d9715-251d-470a-a062-fa1922dfa9a8",e.magnetometerCalibration="e95db358-251d-470a-a062-fa1922dfa9a8"}(T||(T={})),function(e){e[e.unknown=0]="unknown",e[e.requested=1]="requested",e[e.completed=2]="completed",e[e.errored=3]="errored"}(U||(U={}));var B,P,M,q=function(e){function i(t){var n=e.call(this)||this;return n.helper=new o(t,n),n}return t(i,e),i.create=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){switch(n.label){case 0:return[4,(t=new i(e)).init()];case 1:return n.sent(),[2,t]}})})},i.prototype.init=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.handleListener("magnetometerdatachanged",T.magnetometerData,this.magnetometerDataChangedHandler.bind(this))];case 1:return e.sent(),[4,this.helper.handleListener("magnetometerbearingchanged",T.magnetometerBearing,this.magnetometerBearingChangedHandler.bind(this))];case 2:return e.sent(),[4,this.helper.handleListener("magnetometercalibrationchanged",T.magnetometerCalibration,this.magnetometerCalibrationChangedHandler.bind(this))];case 3:return e.sent(),[2]}})})},i.prototype.calibrate=function(){return n(this,void 0,void 0,function(){return r(this,function(e){return[2,this.helper.setCharacteristicValue(T.magnetometerCalibration,new Uint8Array([1]))]})})},i.prototype.readMagnetometerData=function(){return n(this,void 0,void 0,function(){var e;return r(this,function(t){switch(t.label){case 0:return[4,this.helper.getCharacteristicValue(T.magnetometerData)];case 1:return e=t.sent(),[2,this.dataViewToMagnetometerData(e)]}})})},i.prototype.readMagnetometerBearing=function(){return n(this,void 0,void 0,function(){var e;return r(this,function(t){switch(t.label){case 0:return[4,this.helper.getCharacteristicValue(T.magnetometerBearing)];case 1:return 2===(e=t.sent()).byteLength?[2,e.getUint16(0,!0)]:[2,void 0]}})})},i.prototype.getMagnetometerPeriod=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.getCharacteristicValue(T.magnetometerPeriod)];case 1:return[2,e.sent().getUint16(0,!0)]}})})},i.prototype.setMagnetometerPeriod=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){return(t=new DataView(new ArrayBuffer(2))).setUint16(0,e,!0),[2,this.helper.setCharacteristicValue(T.magnetometerPeriod,t)]})})},i.prototype.magnetometerDataChangedHandler=function(e){var t=e.target.value,n=this.dataViewToMagnetometerData(t);this.dispatchEvent("magnetometerdatachanged",n)},i.prototype.magnetometerBearingChangedHandler=function(e){var t=e.target.value;2===t.byteLength&&this.dispatchEvent("magnetometerbearingchanged",t.getUint16(0,!0))},i.prototype.magnetometerCalibrationChangedHandler=function(e){var t=e.target.value;1===t.byteLength&&this.dispatchEvent("magnetometercalibrationchanged",t.getUint8(0))},i.prototype.dataViewToMagnetometerData=function(e){return{x:e.getInt16(0,!0),y:e.getInt16(1,!0),z:e.getInt16(2,!0)}},i.uuid="e95df2d8-251d-470a-a062-fa1922dfa9a8",i}(V);!function(e){e.pinData="e95d8d00-251d-470a-a062-fa1922dfa9a8",e.pinAdConfiguration="e95d5899-251d-470a-a062-fa1922dfa9a8",e.pinIoConfiguration="e95db9fe-251d-470a-a062-fa1922dfa9a8",e.pwmControl="e95dd822-251d-470a-a062-fa1922dfa9a8"}(B||(B={})),function(e){e[e.Digital=0]="Digital",e[e.Analogue=1]="Analogue"}(P||(P={})),function(e){e[e.Output=0]="Output",e[e.Input=1]="Input"}(M||(M={}));var H,R=function(e){function i(t){var n=e.call(this)||this;return n.helper=new o(t,n),n}return t(i,e),i.create=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){switch(n.label){case 0:return[4,(t=new i(e)).init()];case 1:return n.sent(),[2,t]}})})},i.prototype.init=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.handleListener("pindatachanged",B.pinData,this.pinDataChangedHandler.bind(this))];case 1:return e.sent(),[2]}})})},i.prototype.readPinData=function(){return n(this,void 0,void 0,function(){var e;return r(this,function(t){switch(t.label){case 0:return[4,this.helper.getCharacteristicValue(B.pinData)];case 1:return e=t.sent(),[2,this.dataViewToPinData(e)]}})})},i.prototype.writePinData=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){return t=this.pinDataToDataView(e),[2,this.helper.setCharacteristicValue(B.pinData,t)]})})},i.prototype.getAdConfiguration=function(){return n(this,void 0,void 0,function(){var e;return r(this,function(t){switch(t.label){case 0:return[4,this.helper.getCharacteristicValue(B.pinAdConfiguration)];case 1:return e=t.sent(),[2,this.dataViewToConfig(e)]}})})},i.prototype.setAdConfiguration=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){return t=this.configToDataView(e),[2,this.helper.setCharacteristicValue(B.pinAdConfiguration,t)]})})},i.prototype.getIoConfiguration=function(){return n(this,void 0,void 0,function(){var e;return r(this,function(t){switch(t.label){case 0:return[4,this.helper.getCharacteristicValue(B.pinIoConfiguration)];case 1:return e=t.sent(),[2,this.dataViewToConfig(e)]}})})},i.prototype.setIoConfiguration=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){return t=this.configToDataView(e),[2,this.helper.setCharacteristicValue(B.pinIoConfiguration,t)]})})},i.prototype.setPwmControl=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){return t=this.pwmControlDataToDataView(e),[2,this.helper.setCharacteristicValue(B.pwmControl,t)]})})},i.prototype.pinDataChangedHandler=function(e){var t=e.target.value,n=this.dataViewToPinData(t);this.dispatchEvent("pindatachanged",n)},i.prototype.dataViewToPinData=function(e){for(var t=[],n=0;n<e.byteLength;n+=2)t.push({pin:e.getUint8(n),value:e.getUint8(n+1)});return t},i.prototype.pinDataToDataView=function(e){var t=new DataView(new ArrayBuffer(2*e.length));return e.forEach(function(e,n){t.setUint8(2*n,e.pin),t.setUint8(2*n+1,e.value)}),t},i.prototype.dataViewToConfig=function(e){for(var t=[],n=(e.getUint16(0)<<8)+e.getUint8(2),r=0;r<24;r++)t.push(n>>r);return t},i.prototype.configToDataView=function(e){for(var t=new DataView(new ArrayBuffer(3)),n=0,r=0;r<e.length;r++)n&=1<<e[r];return t.setUint16(0,n>>8,!0),t.setUint8(2,255&n),t},i.prototype.pwmControlDataToDataView=function(e){var t=new DataView(new ArrayBuffer(7));return t.setUint8(0,e.pin),t.setUint16(1,e.value,!0),t.setUint32(3,e.period,!0),t},i.uuid="e95d127b-251d-470a-a062-fa1922dfa9a8",i}(V);!function(e){e.tx="6e400002-b5a3-f393-e0a9-e50e24dcca9e",e.rx="6e400003-b5a3-f393-e0a9-e50e24dcca9e"}(H||(H={}));var I,O=function(e){function i(t){var n=e.call(this)||this;return n.helper=new o(t,n),n}return t(i,e),i.create=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){switch(n.label){case 0:return[4,(t=new i(e)).init()];case 1:return n.sent(),[2,t]}})})},i.prototype.init=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.handleListener("receive",H.tx,this.receiveHandler.bind(this))];case 1:return e.sent(),[4,this.helper.handleListener("receiveText",H.tx,this.receiveTextHandler.bind(this))];case 2:return e.sent(),[2]}})})},i.prototype.send=function(e){return n(this,void 0,void 0,function(){return r(this,function(t){return[2,this.helper.setCharacteristicValue(H.rx,e)]})})},i.prototype.sendText=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){return t=e.split("").map(function(e){return e.charCodeAt(0)}),[2,this.helper.setCharacteristicValue(H.rx,new Uint8Array(t).buffer)]})})},i.prototype.receiveHandler=function(e){var t=e.target.value,n=new Uint8Array(t.buffer);this.dispatchEvent("receive",n)},i.prototype.receiveTextHandler=function(e){var t=e.target.value,n=Array.prototype.slice.call(new Uint8Array(t.buffer)),r=String.fromCharCode.apply(null,n);this.dispatchEvent("receiveText",r)},i.uuid="6e400001-b5a3-f393-e0a9-e50e24dcca9e",i}(V);!function(e){e.microBitRequirements="e95db84c-251d-470a-a062-fa1922dfa9a8",e.microBitEvent="e95d9775-251d-470a-a062-fa1922dfa9a8",e.clientRequirements="e95d23c4-251d-470a-a062-fa1922dfa9a8",e.clientEvent="e95d5404-251d-470a-a062-fa1922dfa9a8"}(I||(I={}));var k,j=function(e){function i(t){var n=e.call(this)||this;return n.helper=new o(t,n),n}return t(i,e),i.create=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){switch(n.label){case 0:return[4,(t=new i(e)).init()];case 1:return n.sent(),[2,t]}})})},i.prototype.init=function(){return n(this,void 0,void 0,function(){return r(this,function(e){switch(e.label){case 0:return[4,this.helper.handleListener("microbitevent",I.microBitEvent,this.eventHandler.bind(this))];case 1:return e.sent(),[4,this.helper.handleListener("microbitrequirementschanged",I.microBitRequirements,this.microbitRequirementsChangedHandler.bind(this))];case 2:return e.sent(),[2]}})})},i.prototype.getMicrobitRequirements=function(){return n(this,void 0,void 0,function(){var e;return r(this,function(t){switch(t.label){case 0:return[4,this.helper.getCharacteristicValue(I.microBitRequirements)];case 1:return e=t.sent(),[2,this.viewToMicrobitEvent(e)]}})})},i.prototype.setClientRequirements=function(e,t){return n(this,void 0,void 0,function(){var n;return r(this,function(r){switch(r.label){case 0:return(n=new DataView(new ArrayBuffer(4))).setUint16(0,e,!0),n.setUint16(1,t,!0),[4,this.helper.setCharacteristicValue(I.clientRequirements,n)];case 1:return[2,r.sent()]}})})},i.prototype.readMicrobitEvent=function(){return n(this,void 0,void 0,function(){var e;return r(this,function(t){switch(t.label){case 0:return[4,this.helper.getCharacteristicValue(I.microBitEvent)];case 1:return e=t.sent(),[2,this.viewToMicrobitEvent(e)]}})})},i.prototype.writeClientEvent=function(e,t){return n(this,void 0,void 0,function(){var n;return r(this,function(r){switch(r.label){case 0:return(n=new DataView(new ArrayBuffer(4))).setUint16(0,e,!0),n.setUint16(1,t,!0),[4,this.helper.setCharacteristicValue(I.clientEvent,n)];case 1:return[2,r.sent()]}})})},i.prototype.microbitRequirementsChangedHandler=function(e){var t=e.target.value,n=this.viewToMicrobitEvent(t);this.dispatchEvent("microbitrequirementschanged",n)},i.prototype.eventHandler=function(e){var t=e.target.value,n=this.viewToMicrobitEvent(t);this.dispatchEvent("microbitevent",n)},i.prototype.viewToMicrobitEvent=function(e){return{type:e.getUint16(0,!0),value:e.getUint16(1,!0)}},i.uuid="e95d93af-251d-470a-a062-fa1922dfa9a8",i}(V);(k||(k={})).dfuControl="e95d93b1-251d-470a-a062-fa1922dfa9a8";var N=function(){function e(e){this.helper=new o(e)}return e.create=function(t){return n(this,void 0,void 0,function(){return r(this,function(n){return[2,new e(t)]})})},e.prototype.requestDfu=function(){return this.helper.setCharacteristicValue(k.dfuControl,new Uint8Array([1]))},e.prototype.requestFlashCode=function(){return this.helper.setCharacteristicValue(k.dfuControl,new Uint8Array([2]))},e.uuid="e95d93b0-251d-470a-a062-fa1922dfa9a8",e}(),z=function(){function e(e){this.services=e}return e.prototype.createService=function(e){return n(this,void 0,void 0,function(){var t;return r(this,function(n){switch(n.label){case 0:return(t=this.services.find(function(t){return t.uuid===e.uuid}))?[4,e.create(t)]:[2,void 0];case 1:return[2,n.sent()]}})})},e}(),F=function(e){return n(void 0,void 0,void 0,function(){return r(this,function(t){switch(t.label){case 0:return[4,e.requestDevice({filters:[{namePrefix:"BBC micro:bit"}],optionalServices:[u.uuid,D.uuid,E.uuid,x.uuid,_.uuid,q.uuid,R.uuid,O.uuid,j.uuid,N.uuid]})];case 1:return[2,t.sent()]}})})},G=function(e){return n(void 0,void 0,void 0,function(){var t,n,i,a,o,s,c,h,f,d,l,v;return r(this,function(r){switch(r.label){case 0:return e&&e.gatt?e.gatt.connected?[3,2]:[4,e.gatt.connect()]:[2,{}];case 1:r.sent(),r.label=2;case 2:return[4,e.gatt.getPrimaryServices()];case 3:return t=r.sent(),[4,(n=new z(t)).createService(u)];case 4:return i=r.sent(),[4,n.createService(D)];case 5:return a=r.sent(),[4,n.createService(E)];case 6:return o=r.sent(),[4,n.createService(x)];case 7:return s=r.sent(),[4,n.createService(_)];case 8:return c=r.sent(),[4,n.createService(q)];case 9:return h=r.sent(),[4,n.createService(O)];case 10:return f=r.sent(),[4,n.createService(j)];case 11:return d=r.sent(),[4,n.createService(N)];case 12:return l=r.sent(),[4,n.createService(R)];case 13:return v=r.sent(),[2,{deviceInformationService:i,buttonService:a,ledService:o,temperatureService:s,accelerometerService:c,magnetometerService:h,uartService:f,eventService:d,dfuControlService:l,ioPinService:v}]}})})};exports.getServices=G,exports.requestMicrobit=F;
},{}],"SiMs":[function(require,module,exports) {
-"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.notif_alert=n,exports.notif_warn=a,exports.notif_info=i,exports.notif_success=c;let e=[];function t(n){let a=document.querySelector(".statusline .notification-area");if(null===a.querySelector(".notification")){let i=document.createElement("div");i.className="notification",i.appendChild(n[0]),i.appendChild(n[1]),a.appendChild(i),setTimeout(()=>{a.removeChild(i),e.length>0&&t(e.pop())},5e3)}else e.push(n)}function n(e){let n=document.createElement("div");n.className="notification-content";let a=document.createElement("p");a.innerHTML=e,n.appendChild(a);let i=document.createElement("i");i.className="alert fas fa-exclamation-triangle",n.appendChild(i),t([i,n])}function a(e){let n=document.createElement("div");n.className="notification-content";let a=document.createElement("p");a.innerHTML=e,n.appendChild(a);let i=document.createElement("i");i.className="warning fas fa-exclamation-triangle",n.appendChild(i),t([i,n])}function i(e){let n=document.createElement("div");n.className="notification-content";let a=document.createElement("p");a.innerHTML=e,n.appendChild(a);let i=document.createElement("i");i.className="info fas fa-info-circle",n.appendChild(i),t([i,n])}function c(e){let n=document.createElement("div");n.className="notification-content";let a=document.createElement("p");a.innerHTML=e,n.appendChild(a);let i=document.createElement("i");i.className="success fas fa-check-circle",n.appendChild(i),t([i,n])}
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.notif_alert=a,exports.notif_warn=i,exports.notif_info=c,exports.notif_success=l;let e=void 0,t=[];function n(a){let i=document.querySelector(".statusline .notification-area");if(null===i.querySelector(".notification")&&void 0===e){if(screen.availHeight>screen.availWidth&&!document.body.classList.contains("ignore-landscape-warning"))return e=setInterval(()=>{(screen.availHeight<screen.availWidth||document.body.classList.contains("ignore-landscape-warning"))&&(clearInterval(e),e=void 0,n(t.pop()))},1e3),void t.push(a);let c=document.createElement("div");c.className="notification",c.appendChild(a[0]),c.appendChild(a[1]),i.appendChild(c),setTimeout(()=>{i.removeChild(c),t.length>0&&n(t.pop())},5e3)}else t.push(a)}function a(e){let t=document.createElement("div");t.className="notification-content";let a=document.createElement("p");a.innerHTML=e,t.appendChild(a);let i=document.createElement("i");i.className="alert fas fa-exclamation-triangle",t.appendChild(i),n([i,t])}function i(e){let t=document.createElement("div");t.className="notification-content";let a=document.createElement("p");a.innerHTML=e,t.appendChild(a);let i=document.createElement("i");i.className="warning fas fa-exclamation-triangle",t.appendChild(i),n([i,t])}function c(e){let t=document.createElement("div");t.className="notification-content";let a=document.createElement("p");a.innerHTML=e,t.appendChild(a);let i=document.createElement("i");i.className="info fas fa-info-circle",t.appendChild(i),n([i,t])}function l(e){let t=document.createElement("div");t.className="notification-content";let a=document.createElement("p");a.innerHTML=e,t.appendChild(a);let i=document.createElement("i");i.className="success fas fa-check-circle",t.appendChild(i),n([i,t])}
},{}],"CLny":[function(require,module,exports) {
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("./notification");function t(e,t){var s=t.get(e);if(!s)throw new TypeError("attempted to get private field on non-instance");return s.get?s.get.call(e):s.value}function s(e,t,s){var r=t.get(e);if(!r)throw new TypeError("attempted to set private field on non-instance");if(r.set)r.set.call(e,s);else{if(!r.writable)throw new TypeError("attempted to set read only private field");r.value=s}return s}var r=new WeakMap,a=new WeakMap,i=new WeakMap,n=new WeakMap,l=new WeakMap,o=new WeakMap;class h{constructor(){r.set(this,{writable:!0,value:0}),a.set(this,{writable:!0,value:0}),i.set(this,{writable:!0,value:0}),n.set(this,{writable:!0,value:0}),l.set(this,{writable:!0,value:0}),o.set(this,{writable:!0,value:0})}acc(e){e.match(/[A-Z][-,0-9]+/g).forEach((e,r)=>{switch(e.substring(0,1)){case"T":s(this,a,parseInt(e.substring(1,e.length)));break;case"R":s(this,n,parseInt(e.substring(1,e.length)));break;case"A":s(this,o,1==parseInt(e.substring(1,e.length))),t(this,o)?document.body.classList.add("armed"):document.body.classList.remove("armed");break;case"S":break;default:console.log(`Unkown acc: ${e}`)}}),document.querySelector(".acc-string pre").innerHTML=`T: ${t(this,a)}, R: ${t(this,n)}`}reset(){this.setArm(0),this.setThrottle(0),this.setRudder(0)}setThrottle(e){t(this,o)&&(e>100&&(e=100),e<0&&(e=0),s(this,r,e))}getThrottle(){return t(this,r)}setRudder(e){t(this,o)&&(e>90&&(e=90),e<-90&&(e=-90),s(this,i,e))}getRudder(){return t(this,i)}setArm(e){s(this,l,e),t(this,l)||(s(this,r,0),s(this,i,0))}getArm(){return t(this,l)}}exports.default=h;
},{"./notification":"SiMs"}],"d6sW":[function(require,module,exports) {
"use strict";var e=r(require("nipplejs")),t=require("microbit-web-bluetooth"),n=r(require("./hoverControlModule")),o=require("./notification");function r(e){return e&&e.__esModule?e:{default:e}}let i="service-worker.js";navigator.serviceWorker&&navigator.serviceWorker.register(i,{scope:"/hoverbit-ble/"}).then(e=>{e.onupdatefound=(()=>{const t=e.installing;null!=t&&(t.onstatechange=(()=>{"installed"===t.state&&(navigator.serviceWorker.controller?(0,o.notif_info)("New content is available, relaunch the app to install it."):(0,o.notif_success)("Content is cached for offline use."))}))})}).catch(e=>{(0,o.notif_alert)("Could not install service worker..."),console.error("Error during service worker registration:",e)}),document.getElementById("btn_ignore_landscape_warning").addEventListener("click",()=>{document.body.classList.add("ignore-landscape-warning")});let c,a,d=new n.default,s=e.default.create({zone:document.querySelector(".joystick-left"),size:200,position:{left:"50%",bottom:"50%"},mode:"static",lockX:!0}),l=e.default.create({zone:document.querySelector(".joystick-right"),size:200,position:{left:"50%",bottom:"50%"},mode:"static",lockY:!0});s.on("move",(e,t)=>{let n=90*t.distance/100;t.angle.degree>90&&(n*=-1),d.setRudder(n)}),s.on("end",(e,t)=>{d.setRudder(0)}),l.on("move",(e,t)=>{let n=t.distance;t.angle.degree>90&&(n=0),d.setThrottle(n)}),l.on("end",(e,t)=>{d.setThrottle(0)}),document.getElementById("btn_arm").addEventListener("click",()=>{d.setArm(!0)}),document.getElementById("btn_disarm").addEventListener("click",()=>{d.setArm(!1)}),document.querySelector("#btn_disconnect").addEventListener("click",()=>{d.reset(),c.gatt.disconnect()});let u=setInterval(()=>{void 0!==c&&c?c.gatt.connected?document.body.classList.add("connected"):(document.body.classList.remove("connected"),document.body.classList.remove("armed")):void 0!==c&&c.gatt.reconnect()},500),v=setInterval(async()=>{if(void 0!==c&&c&&c.gatt.connected&&a.uartService){let e="T"+d.getThrottle().toString()+"R"+d.getRudder().toString()+"A"+(d.getArm()?"1":"0")+"S0:";await a.uartService.sendText(e)}},70);function g(e){var t=document.querySelector(".ping i"),n=t.cloneNode(!0);if(t.parentNode.replaceChild(n,t),-1!=e.detail.indexOf(":")){let t=e.detail.split(":");"B"==t[0]?document.querySelector(".battery-status").innerHTML=t[1]+"mV":"ACC"==t[0]?d.acc(t[1]):console.log(t)}else(0,o.notif_warn)("Received weird data from MICRO:BIT..."),console.log(`Received unknown: ${e.detail}`)}document.getElementById("btn_connect").onclick=(async()=>{void 0!==c&&c.gatt.connected&&c.disconnect();const e=await(0,t.requestMicrobit)(window.navigator.bluetooth);if(c=e,e){d.reset();const n=await(0,t.getServices)(e);(a=n).deviceInformationService,n.uartService&&n.uartService.addEventListener("receiveText",g)}});
},{"nipplejs":"thIN","microbit-web-bluetooth":"GaXO","./hoverControlModule":"CLny","./notification":"SiMs"}]},{},["d6sW"], null)
-//# sourceMappingURL=/hoverbit-ble/main.3047e937.js.map \ No newline at end of file
+//# sourceMappingURL=/hoverbit-ble/main.7b0c10bd.js.map \ No newline at end of file
diff --git a/main.7b0c10bd.js.map b/main.7b0c10bd.js.map
new file mode 100644
index 0000000..9571199
--- /dev/null
+++ b/main.7b0c10bd.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../node_modules/nipplejs/dist/nipplejs.js","../src/services/dfu-control.ts","../src/promise-queue.ts","../src/services/device-information.ts","../src/service-helper.ts","../node_modules/rollup-plugin-node-builtins/src/es6/events.js","../src/event-dispatcher.ts","../src/services/button.ts","../src/services/led.ts","../src/services/temperature.ts","../src/services/accelerometer.ts","../src/services/magnetometer.ts","../src/services/io-pin.ts","../src/services/uart.ts","../src/services/event.ts","../src/index.ts","js/notification.js","js/hoverControlModule.js","js/main.js"],"names":["DeviceInformationCharacteristic","concurrent","this","PromiseQueue","running","promise","queue","shift","fn","result","_a","resolve","reject","error_1","pump","Promise","_this","push","service","emitter","ServiceHelper","uuid","characteristics","getCharacteristics","_b","find","characteristic","getCharacteristic","Error","add","readValue","value","writeValue","event","handler","startNotifications","on","emitterEvent","listenerCount","addEventListener","removeEventListener","helper","DeviceInformationService","info","readStringCharacteristic","modelNumber","serialNumber","firmwareRevision","hardwareRevision","manufacturer","getCharacteristicValue","view","buffer","slice","byteOffset","byteLength","String","fromCharCode","apply","Array","from","Uint8Array","undefined","EventHandlers","EventEmitter","init","call","$getMaxListeners","that","_maxListeners","defaultMaxListeners","emitNone","isFn","self","len","length","listeners","arrayClone","i","emitOne","arg1","emitTwo","arg2","emitThree","arg3","emitMany","args","_addListener","target","type","listener","prepend","m","events","existing","e","TypeError","_events","newListener","emit","_eventsCount","unshift","warned","w","name","count","console","warn","log","_onceWrap","fired","g","removeListener","arguments","evlistener","arr","copy","prototype","Object","create","usingDomains","domain","active","getPrototypeOf","setMaxListeners","n","isNaN","getMaxListeners","er","doError","error","err","context","domainEmitter","domainThrown","addListener","prependListener","once","prependOnceListener","list","position","originalListener","index","k","pop","removeAllListeners","key","keys","ret","eventNames","Reflect","ownKeys","ButtonCharacteristic","ButtonState","handleEvent","__extends","EventDispatcher","isEventListenerObject","_super","callback","eventOrType","detail","CustomEvent","LedCharacteristic","ButtonService","bluetoothService","handleListener","buttonAState","buttonAStateChangedHandler","bind","buttonBState","buttonBStateChangedHandler","getUint8","dispatchEvent","TemperatureCharacteristic","LedService","text","encoded","encodeString","setCharacteristicValue","ledText","ledMatrixState","viewToLedMatrix","state","ledMatrixToView","scrollingDelay","getUint16","delay","DataView","ArrayBuffer","setUint16","charCodeAt","matrix","byteToBoolArray","byte","bools","reverse","setUint8","boolArrayToByte","reduce","bool","AccelerometerCharacteristic","TemperatureService","temperature","temperatureChangedHandler","getInt8","temperaturePeriod","frequency","MagnetometerCharacteristic","MagnetometerCalibration","AccelerometerService","accelerometerData","accelerometerDataChangedHandler","dataViewToAccelerometerData","accelerometerPeriod","x","getInt16","y","z","IoPinCharacteristic","AD","IO","MagnetometerService","magnetometerData","magnetometerDataChangedHandler","magnetometerBearing","magnetometerBearingChangedHandler","magnetometerCalibration","magnetometerCalibrationChangedHandler","dataViewToMagnetometerData","magnetometerPeriod","UartCharacteristic","IoPinService","pinData","pinDataChangedHandler","dataViewToPinData","data","pinDataToDataView","pinAdConfiguration","dataViewToConfig","config","configToDataView","pinIoConfiguration","pwmControlDataToDataView","pwmControl","pin","forEach","setUint32","period","EventCharacteristic","UartService","tx","receiveHandler","receiveTextHandler","rx","arrayData","split","map","numberArray","DfuCharacteristic","EventService","microBitEvent","eventHandler","microBitRequirements","microbitRequirementsChangedHandler","viewToMicrobitEvent","clientRequirements","clientEvent","microbitEvent","DfuControlService","dfuControl","services","ServiceBuilder","serviceClass","found","requestMicrobit","bluetooth","requestDevice","filters","namePrefix","optionalServices","getServices","device","gatt","connected","connect","getPrimaryServices","builder","createService","deviceInformationService","buttonService","ledService","temperatureService","accelerometerService","magnetometerService","uartService","eventService","dfuControlService","ioPinService","waiting_timer","notif_queue","notif","notif_c","notification_area","document","querySelector","screen","availHeight","availWidth","body","classList","contains","setInterval","clearInterval","notif_elem","createElement","className","appendChild","setTimeout","removeChild","notif_alert","alert_str","div","innerHTML","icon","notif_warn","notif_info","info_str","notif_success","success_str","hoverControlModule","constructor","acc","accString","match","item","substring","parseInt","remove","reset","setArm","setThrottle","setRudder","throttle","getThrottle","rudder","getRudder","arm","getArm","sw","navigator","serviceWorker","register","scope","then","registration","onupdatefound","installingWorker","installing","onstatechange","controller","catch","getElementById","bluetoothDevice","bluetoothDeviceServices","hoverControl","joystickLeft","nipplejs","zone","size","left","bottom","mode","lockX","joystickRight","lockY","evt","distance","angle","degree","disconnect","intervalConnectionChecker","reconnect","intervalSendCommands","command","toString","sendText","receiveText","elm","newone","cloneNode","parentNode","replaceChild","indexOf","parts","onclick","window"],"mappings":"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","file":"main.7b0c10bd.js","sourceRoot":"../src","sourcesContent":["!function(t,i){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(\"nipplejs\",[],i):\"object\"==typeof exports?exports.nipplejs=i():t.nipplejs=i()}(window,function(){return function(t){var i={};function e(o){if(i[o])return i[o].exports;var n=i[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,e),n.l=!0,n.exports}return e.m=t,e.c=i,e.d=function(t,i,o){e.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:o})},e.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.t=function(t,i){if(1&i&&(t=e(t)),8&i)return t;if(4&i&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(e.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&i&&\"string\"!=typeof t)for(var n in t)e.d(o,n,function(i){return t[i]}.bind(null,n));return o},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,\"a\",i),i},e.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},e.p=\"\",e(e.s=0)}([function(t,i,e){\"use strict\";e.r(i);var o,n=function(t,i){var e=i.x-t.x,o=i.y-t.y;return Math.sqrt(e*e+o*o)},s=function(t){return t*(Math.PI/180)},r=function(t){return t*(180/Math.PI)},d=function(t,i,e){for(var o,n=i.split(/[ ,]+/g),s=0;s<n.length;s+=1)o=n[s],t.addEventListener?t.addEventListener(o,e,!1):t.attachEvent&&t.attachEvent(o,e)},a=function(t,i,e){for(var o,n=i.split(/[ ,]+/g),s=0;s<n.length;s+=1)o=n[s],t.removeEventListener?t.removeEventListener(o,e):t.detachEvent&&t.detachEvent(o,e)},p=function(t){return t.preventDefault(),t.type.match(/^touch/)?t.changedTouches:t},c=function(){return{x:void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,y:void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop}},h=function(t,i){i.top||i.right||i.bottom||i.left?(t.style.top=i.top,t.style.right=i.right,t.style.bottom=i.bottom,t.style.left=i.left):(t.style.left=i.x+\"px\",t.style.top=i.y+\"px\")},l=function(t,i,e){var o=u(t);for(var n in o)if(o.hasOwnProperty(n))if(\"string\"==typeof i)o[n]=i+\" \"+e;else{for(var s=\"\",r=0,d=i.length;r<d;r+=1)s+=i[r]+\" \"+e+\", \";o[n]=s.slice(0,-2)}return o},u=function(t){var i={};i[t]=\"\";return[\"webkit\",\"Moz\",\"o\"].forEach(function(e){i[e+t.charAt(0).toUpperCase()+t.slice(1)]=\"\"}),i},f=function(t,i){for(var e in i)i.hasOwnProperty(e)&&(t[e]=i[e]);return t},y=function(t,i){if(t.length)for(var e=0,o=t.length;e<o;e+=1)i(t[e]);else i(t)},m=!!(\"ontouchstart\"in window),v=!!window.PointerEvent,g=!!window.MSPointerEvent,b={start:\"mousedown\",move:\"mousemove\",end:\"mouseup\"},x={};function O(){}v?o={start:\"pointerdown\",move:\"pointermove\",end:\"pointerup, pointercancel\"}:g?o={start:\"MSPointerDown\",move:\"MSPointerMove\",end:\"MSPointerUp\"}:m?(o={start:\"touchstart\",move:\"touchmove\",end:\"touchend, touchcancel\"},x=b):o=b,O.prototype.on=function(t,i){var e,o=t.split(/[ ,]+/g);this._handlers_=this._handlers_||{};for(var n=0;n<o.length;n+=1)e=o[n],this._handlers_[e]=this._handlers_[e]||[],this._handlers_[e].push(i);return this},O.prototype.off=function(t,i){return this._handlers_=this._handlers_||{},void 0===t?this._handlers_={}:void 0===i?this._handlers_[t]=null:this._handlers_[t]&&this._handlers_[t].indexOf(i)>=0&&this._handlers_[t].splice(this._handlers_[t].indexOf(i),1),this},O.prototype.trigger=function(t,i){var e,o=this,n=t.split(/[ ,]+/g);o._handlers_=o._handlers_||{};for(var s=0;s<n.length;s+=1)e=n[s],o._handlers_[e]&&o._handlers_[e].length&&o._handlers_[e].forEach(function(t){t.call(o,{type:e,target:o},i)})},O.prototype.config=function(t){this.options=this.defaults||{},t&&(this.options=function(t,i){var e={};for(var o in t)t.hasOwnProperty(o)&&i.hasOwnProperty(o)?e[o]=i[o]:t.hasOwnProperty(o)&&(e[o]=t[o]);return e}(this.options,t))},O.prototype.bindEvt=function(t,i){var e=this;return e._domHandlers_=e._domHandlers_||{},e._domHandlers_[i]=function(){\"function\"==typeof e[\"on\"+i]?e[\"on\"+i].apply(e,arguments):console.warn('[WARNING] : Missing \"on'+i+'\" handler.')},d(t,o[i],e._domHandlers_[i]),x[i]&&d(t,x[i],e._domHandlers_[i]),e},O.prototype.unbindEvt=function(t,i){return this._domHandlers_=this._domHandlers_||{},a(t,o[i],this._domHandlers_[i]),x[i]&&a(t,x[i],this._domHandlers_[i]),delete this._domHandlers_[i],this};var _=O;function w(t,i){return this.identifier=i.identifier,this.position=i.position,this.frontPosition=i.frontPosition,this.collection=t,this.defaults={size:100,threshold:.1,color:\"white\",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:.5,mode:\"dynamic\",zone:document.body,lockX:!1,lockY:!1,shape:\"circle\"},this.config(i),\"dynamic\"===this.options.mode&&(this.options.restOpacity=0),this.id=w.id,w.id+=1,this.buildEl().stylize(),this.instance={el:this.ui.el,on:this.on.bind(this),off:this.off.bind(this),show:this.show.bind(this),hide:this.hide.bind(this),add:this.addToDom.bind(this),remove:this.removeFromDom.bind(this),destroy:this.destroy.bind(this),setPosition:this.setPosition.bind(this),resetDirection:this.resetDirection.bind(this),computeDirection:this.computeDirection.bind(this),trigger:this.trigger.bind(this),position:this.position,frontPosition:this.frontPosition,ui:this.ui,identifier:this.identifier,id:this.id,options:this.options},this.instance}w.prototype=new _,w.constructor=w,w.id=0,w.prototype.buildEl=function(t){return this.ui={},this.options.dataOnly?this:(this.ui.el=document.createElement(\"div\"),this.ui.back=document.createElement(\"div\"),this.ui.front=document.createElement(\"div\"),this.ui.el.className=\"nipple collection_\"+this.collection.id,this.ui.back.className=\"back\",this.ui.front.className=\"front\",this.ui.el.setAttribute(\"id\",\"nipple_\"+this.collection.id+\"_\"+this.id),this.ui.el.appendChild(this.ui.back),this.ui.el.appendChild(this.ui.front),this)},w.prototype.stylize=function(){if(this.options.dataOnly)return this;var t=this.options.fadeTime+\"ms\",i=function(t,i){var e=u(t);for(var o in e)e.hasOwnProperty(o)&&(e[o]=i);return e}(\"borderRadius\",\"50%\"),e=l(\"transition\",\"opacity\",t),o={};return o.el={position:\"absolute\",opacity:this.options.restOpacity,display:\"block\",zIndex:999},o.back={position:\"absolute\",display:\"block\",width:this.options.size+\"px\",height:this.options.size+\"px\",marginLeft:-this.options.size/2+\"px\",marginTop:-this.options.size/2+\"px\",background:this.options.color,opacity:\".5\"},o.front={width:this.options.size/2+\"px\",height:this.options.size/2+\"px\",position:\"absolute\",display:\"block\",marginLeft:-this.options.size/4+\"px\",marginTop:-this.options.size/4+\"px\",background:this.options.color,opacity:\".5\"},f(o.el,e),\"circle\"===this.options.shape&&f(o.back,i),f(o.front,i),this.applyStyles(o),this},w.prototype.applyStyles=function(t){for(var i in this.ui)if(this.ui.hasOwnProperty(i))for(var e in t[i])this.ui[i].style[e]=t[i][e];return this},w.prototype.addToDom=function(){return this.options.dataOnly||document.body.contains(this.ui.el)?this:(this.options.zone.appendChild(this.ui.el),this)},w.prototype.removeFromDom=function(){return this.options.dataOnly||!document.body.contains(this.ui.el)?this:(this.options.zone.removeChild(this.ui.el),this)},w.prototype.destroy=function(){clearTimeout(this.removeTimeout),clearTimeout(this.showTimeout),clearTimeout(this.restTimeout),this.trigger(\"destroyed\",this.instance),this.removeFromDom(),this.off()},w.prototype.show=function(t){var i=this;return i.options.dataOnly?i:(clearTimeout(i.removeTimeout),clearTimeout(i.showTimeout),clearTimeout(i.restTimeout),i.addToDom(),i.restCallback(),setTimeout(function(){i.ui.el.style.opacity=1},0),i.showTimeout=setTimeout(function(){i.trigger(\"shown\",i.instance),\"function\"==typeof t&&t.call(this)},i.options.fadeTime),i)},w.prototype.hide=function(t){var i=this;return i.options.dataOnly?i:(i.ui.el.style.opacity=i.options.restOpacity,clearTimeout(i.removeTimeout),clearTimeout(i.showTimeout),clearTimeout(i.restTimeout),i.removeTimeout=setTimeout(function(){var e=\"dynamic\"===i.options.mode?\"none\":\"block\";i.ui.el.style.display=e,\"function\"==typeof t&&t.call(i),i.trigger(\"hidden\",i.instance)},i.options.fadeTime),i.options.restJoystick&&i.setPosition(t,{x:0,y:0}),i)},w.prototype.setPosition=function(t,i){var e=this;e.frontPosition={x:i.x,y:i.y};var o=e.options.fadeTime+\"ms\",n={};n.front=l(\"transition\",[\"top\",\"left\"],o);var s={front:{}};s.front={left:e.frontPosition.x+\"px\",top:e.frontPosition.y+\"px\"},e.applyStyles(n),e.applyStyles(s),e.restTimeout=setTimeout(function(){\"function\"==typeof t&&t.call(e),e.restCallback()},e.options.fadeTime)},w.prototype.restCallback=function(){var t={};t.front=l(\"transition\",\"none\",\"\"),this.applyStyles(t),this.trigger(\"rested\",this.instance)},w.prototype.resetDirection=function(){this.direction={x:!1,y:!1,angle:!1}},w.prototype.computeDirection=function(t){var i,e,o,n=t.angle.radian,s=Math.PI/4,r=Math.PI/2;if(n>s&&n<3*s&&!t.lockX?i=\"up\":n>-s&&n<=s&&!t.lockY?i=\"left\":n>3*-s&&n<=-s&&!t.lockX?i=\"down\":t.lockY||(i=\"right\"),t.lockY||(e=n>-r&&n<r?\"left\":\"right\"),t.lockX||(o=n>0?\"up\":\"down\"),t.force>this.options.threshold){var d,a={};for(d in this.direction)this.direction.hasOwnProperty(d)&&(a[d]=this.direction[d]);var p={};for(d in this.direction={x:e,y:o,angle:i},t.direction=this.direction,a)a[d]===this.direction[d]&&(p[d]=!0);if(p.x&&p.y&&p.angle)return t;p.x&&p.y||this.trigger(\"plain\",t),p.x||this.trigger(\"plain:\"+e,t),p.y||this.trigger(\"plain:\"+o,t),p.angle||this.trigger(\"dir dir:\"+i,t)}else this.resetDirection();return t};var T=w;function k(t,i){return this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=t,this.id=k.id,k.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:\"dynamic\",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:\"white\",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:.5,lockX:!1,lockY:!1,shape:\"circle\",dynamicPage:!1},this.config(i),\"static\"!==this.options.mode&&\"semi\"!==this.options.mode||(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}k.prototype=new _,k.constructor=k,k.id=0,k.prototype.prepareNipples=function(){var t=this.nipples;t.on=this.on.bind(this),t.off=this.off.bind(this),t.options=this.options,t.destroy=this.destroy.bind(this),t.ids=this.ids,t.id=this.id,t.processOnMove=this.processOnMove.bind(this),t.processOnEnd=this.processOnEnd.bind(this),t.get=function(i){if(void 0===i)return t[0];for(var e=0,o=t.length;e<o;e+=1)if(t[e].identifier===i)return t[e];return!1}},k.prototype.bindings=function(){this.bindEvt(this.options.zone,\"start\"),this.options.zone.style.touchAction=\"none\",this.options.zone.style.msTouchAction=\"none\"},k.prototype.begin=function(){var t=this.options;if(\"static\"===t.mode){var i=this.createNipple(t.position,this.manager.getIdentifier());i.add(),this.idles.push(i)}},k.prototype.createNipple=function(t,i){var e=c(),o={},n=this.options;if(t.x&&t.y)o={x:t.x-(e.x+this.box.left),y:t.y-(e.y+this.box.top)};else if(t.top||t.right||t.bottom||t.left){var s=document.createElement(\"DIV\");s.style.display=\"hidden\",s.style.top=t.top,s.style.right=t.right,s.style.bottom=t.bottom,s.style.left=t.left,s.style.position=\"absolute\",n.zone.appendChild(s);var r=s.getBoundingClientRect();n.zone.removeChild(s),o=t,t={x:r.left+e.x,y:r.top+e.y}}var d=new T(this,{color:n.color,size:n.size,threshold:n.threshold,fadeTime:n.fadeTime,dataOnly:n.dataOnly,restJoystick:n.restJoystick,restOpacity:n.restOpacity,mode:n.mode,identifier:i,position:t,zone:n.zone,frontPosition:{x:0,y:0},shape:n.shape});return n.dataOnly||(h(d.ui.el,o),h(d.ui.front,d.frontPosition)),this.nipples.push(d),this.trigger(\"added \"+d.identifier+\":added\",d),this.manager.trigger(\"added \"+d.identifier+\":added\",d),this.bindNipple(d),d},k.prototype.updateBox=function(){this.box=this.options.zone.getBoundingClientRect()},k.prototype.bindNipple=function(t){var i,e=this,o=function(t,o){i=t.type+\" \"+o.id+\":\"+t.type,e.trigger(i,o)};t.on(\"destroyed\",e.onDestroyed.bind(e)),t.on(\"shown hidden rested dir plain\",o),t.on(\"dir:up dir:right dir:down dir:left\",o),t.on(\"plain:up plain:right plain:down plain:left\",o)},k.prototype.pressureFn=function(t,i,e){var o=this,n=0;clearInterval(o.pressureIntervals[e]),o.pressureIntervals[e]=setInterval(function(){var e=t.force||t.pressure||t.webkitForce||0;e!==n&&(i.trigger(\"pressure\",e),o.trigger(\"pressure \"+i.identifier+\":pressure\",e),n=e)}.bind(o),100)},k.prototype.onstart=function(t){var i=this,e=i.options,o=t;t=p(t),i.updateBox();return y(t,function(n){i.actives.length<e.maxNumberOfNipples?i.processOnStart(n):o.type.match(/^touch/)&&(Object.keys(i.manager.ids).forEach(function(e){if(Object.values(o.touches).findIndex(function(t){return t.identifier===e})<0){var n=[t[0]];n.identifier=e,i.processOnEnd(n)}}),i.actives.length<e.maxNumberOfNipples&&i.processOnStart(n))}),i.manager.bindDocument(),!1},k.prototype.processOnStart=function(t){var i,e=this,o=e.options,s=e.manager.getIdentifier(t),r=t.force||t.pressure||t.webkitForce||0,d={x:t.pageX,y:t.pageY},a=e.getOrCreate(s,d);a.identifier!==s&&e.manager.removeIdentifier(a.identifier),a.identifier=s;var p=function(i){i.trigger(\"start\",i),e.trigger(\"start \"+i.id+\":start\",i),i.show(),r>0&&e.pressureFn(t,i,i.identifier),e.processOnMove(t)};if((i=e.idles.indexOf(a))>=0&&e.idles.splice(i,1),e.actives.push(a),e.ids.push(a.identifier),\"semi\"!==o.mode)p(a);else{if(!(n(d,a.position)<=o.catchDistance))return a.destroy(),void e.processOnStart(t);p(a)}return a},k.prototype.getOrCreate=function(t,i){var e,o=this.options;return/(semi|static)/.test(o.mode)?(e=this.idles[0])?(this.idles.splice(0,1),e):\"semi\"===o.mode?this.createNipple(i,t):(console.warn(\"Coudln't find the needed nipple.\"),!1):e=this.createNipple(i,t)},k.prototype.processOnMove=function(t){var i=this.options,e=this.manager.getIdentifier(t),o=this.nipples.get(e);if(function(t){return isNaN(t.buttons)?0!==t.pressure:0!==t.buttons}(t)){if(!o)return console.error(\"Found zombie joystick with ID \"+e),void this.manager.removeIdentifier(e);if(i.dynamicPage){var d=c();p=o.el.getBoundingClientRect(),o.position={x:d.x+p.left,y:d.y+p.top}}o.identifier=e;var a=o.options.size/2,p={x:t.pageX,y:t.pageY};i.lockX&&(p.y=o.position.y),i.lockY&&(p.x=o.position.x);var l,u,f,y,m,v,g,b,x=n(p,o.position),O=(l=p,u=o.position,f=u.x-l.x,y=u.y-l.y,r(Math.atan2(y,f))),_=s(O),w=x/a,T={distance:x,position:p};\"circle\"===o.options.shape?(x=Math.min(x,a),m=o.position,v=x,b={x:0,y:0},g=s(g=O),b.x=m.x-v*Math.cos(g),b.y=m.y-v*Math.sin(g),p=b):(p=function(t,i,e){return{x:Math.min(Math.max(t.x,i.x-e),i.x+e),y:Math.min(Math.max(t.y,i.y-e),i.y+e)}}(p,o.position,a),x=n(p,o.position));var k=p.x-o.position.x,P=p.y-o.position.y;o.frontPosition={x:k,y:P},i.dataOnly||h(o.ui.front,o.frontPosition);var E={identifier:o.identifier,position:p,force:w,pressure:t.force||t.pressure||t.webkitForce||0,distance:x,angle:{radian:_,degree:O},vector:{x:k/a,y:-P/a},raw:T,instance:o,lockX:i.lockX,lockY:i.lockY};(E=o.computeDirection(E)).angle={radian:s(180-O),degree:180-O},o.trigger(\"move\",E),this.trigger(\"move \"+o.id+\":move\",E)}else this.processOnEnd(t)},k.prototype.processOnEnd=function(t){var i=this,e=i.options,o=i.manager.getIdentifier(t),n=i.nipples.get(o),s=i.manager.removeIdentifier(n.identifier);n&&(e.dataOnly||n.hide(function(){\"dynamic\"===e.mode&&(n.trigger(\"removed\",n),i.trigger(\"removed \"+n.id+\":removed\",n),i.manager.trigger(\"removed \"+n.id+\":removed\",n),n.destroy())}),clearInterval(i.pressureIntervals[n.identifier]),n.resetDirection(),n.trigger(\"end\",n),i.trigger(\"end \"+n.id+\":end\",n),i.ids.indexOf(n.identifier)>=0&&i.ids.splice(i.ids.indexOf(n.identifier),1),i.actives.indexOf(n)>=0&&i.actives.splice(i.actives.indexOf(n),1),/(semi|static)/.test(e.mode)?i.idles.push(n):i.nipples.indexOf(n)>=0&&i.nipples.splice(i.nipples.indexOf(n),1),i.manager.unbindDocument(),/(semi|static)/.test(e.mode)&&(i.manager.ids[s.id]=s.identifier))},k.prototype.onDestroyed=function(t,i){this.nipples.indexOf(i)>=0&&this.nipples.splice(this.nipples.indexOf(i),1),this.actives.indexOf(i)>=0&&this.actives.splice(this.actives.indexOf(i),1),this.idles.indexOf(i)>=0&&this.idles.splice(this.idles.indexOf(i),1),this.ids.indexOf(i.identifier)>=0&&this.ids.splice(this.ids.indexOf(i.identifier),1),this.manager.removeIdentifier(i.identifier),this.manager.unbindDocument()},k.prototype.destroy=function(){for(var t in this.unbindEvt(this.options.zone,\"start\"),this.nipples.forEach(function(t){t.destroy()}),this.pressureIntervals)this.pressureIntervals.hasOwnProperty(t)&&clearInterval(this.pressureIntervals[t]);this.trigger(\"destroyed\",this.nipples),this.manager.unbindDocument(),this.off()};var P=k;function E(t){var i,e=this;return e.ids={},e.index=0,e.collections=[],e.config(t),e.prepareCollections(),d(window,\"resize\",function(t){clearTimeout(i),i=setTimeout(function(){var t,i=c();e.collections.forEach(function(e){e.forEach(function(e){t=e.el.getBoundingClientRect(),e.position={x:i.x+t.left,y:i.y+t.top}})})},100)}),e.collections}E.prototype=new _,E.constructor=E,E.prototype.prepareCollections=function(){var t=this;t.collections.create=t.create.bind(t),t.collections.on=t.on.bind(t),t.collections.off=t.off.bind(t),t.collections.destroy=t.destroy.bind(t),t.collections.get=function(i){var e;return t.collections.every(function(t){return!(e=t.get(i))}),e}},E.prototype.create=function(t){return this.createCollection(t)},E.prototype.createCollection=function(t){var i=new P(this,t);return this.bindCollection(i),this.collections.push(i),i},E.prototype.bindCollection=function(t){var i,e=this,o=function(t,o){i=t.type+\" \"+o.id+\":\"+t.type,e.trigger(i,o)};t.on(\"destroyed\",e.onDestroyed.bind(e)),t.on(\"shown hidden rested dir plain\",o),t.on(\"dir:up dir:right dir:down dir:left\",o),t.on(\"plain:up plain:right plain:down plain:left\",o)},E.prototype.bindDocument=function(){this.binded||(this.bindEvt(document,\"move\").bindEvt(document,\"end\"),this.binded=!0)},E.prototype.unbindDocument=function(t){Object.keys(this.ids).length&&!0!==t||(this.unbindEvt(document,\"move\").unbindEvt(document,\"end\"),this.binded=!1)},E.prototype.getIdentifier=function(t){var i;return t?void 0===(i=void 0===t.identifier?t.pointerId:t.identifier)&&(i=this.latest||0):i=this.index,void 0===this.ids[i]&&(this.ids[i]=this.index,this.index+=1),this.latest=i,this.ids[i]},E.prototype.removeIdentifier=function(t){var i={};for(var e in this.ids)if(this.ids[e]===t){i.id=e,i.identifier=this.ids[e],delete this.ids[e];break}return i},E.prototype.onmove=function(t){return this.onAny(\"move\",t),!1},E.prototype.onend=function(t){return this.onAny(\"end\",t),!1},E.prototype.oncancel=function(t){return this.onAny(\"end\",t),!1},E.prototype.onAny=function(t,i){var e,o=this,n=\"processOn\"+t.charAt(0).toUpperCase()+t.slice(1);i=p(i);return y(i,function(t){e=o.getIdentifier(t),y(o.collections,function(t,i,e){e.ids.indexOf(i)>=0&&(e[n](t),t._found_=!0)}.bind(null,t,e)),t._found_||o.removeIdentifier(e)}),!1},E.prototype.destroy=function(){this.unbindDocument(!0),this.ids={},this.index=0,this.collections.forEach(function(t){t.destroy()}),this.off()},E.prototype.onDestroyed=function(t,i){if(this.collections.indexOf(i)<0)return!1;this.collections.splice(this.collections.indexOf(i),1)};var I=new E;i.default={create:function(t){return I.create(t)},factory:I}}]).default});","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum DfuCharacteristic {\n dfuControl = \"e95d93b1-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * @hidden\n */\nexport class DfuControlService {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d93b0-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<DfuControlService> {\n return new DfuControlService(service);\n }\n\n /**\n * @hidden\n */\n public helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n this.helper = new ServiceHelper(service);\n }\n\n /**\n * Request device switches to DFU mode\n */\n public requestDfu(): Promise<void> {\n return this.helper.setCharacteristicValue(DfuCharacteristic.dfuControl, new Uint8Array([1]));\n }\n\n /**\n * Request flash code\n */\n public requestFlashCode(): Promise<void> {\n return this.helper.setCharacteristicValue(DfuCharacteristic.dfuControl, new Uint8Array([2]));\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\n/**\n * @hidden\n */\ninterface QueuedPromise {\n fn: () => Promise<any>;\n resolve: (value?: any | PromiseLike<any> | undefined) => void;\n reject: (reason?: any) => void;\n}\n\n/**\n * @hidden\n */\nexport class PromiseQueue {\n\n private queue: QueuedPromise[] = [];\n private running = 0;\n\n constructor(private concurrent = 1) {\n }\n\n private async pump(): Promise<void> {\n if (this.running >= this.concurrent) {\n return;\n }\n\n const promise = this.queue.shift();\n\n if (!promise) {\n return;\n }\n\n this.running ++;\n\n try {\n const result = await promise.fn();\n promise.resolve(result);\n } catch (error) {\n promise.reject(error);\n }\n\n this.running --;\n return this.pump();\n }\n\n public add<T>(fn: () => Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n this.queue.push({\n fn,\n resolve,\n reject\n });\n\n return this.pump();\n });\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum DeviceInformationCharacteristic {\n modelNumber = \"00002a24-0000-1000-8000-00805f9b34fb\",\n serialNumber = \"00002a25-0000-1000-8000-00805f9b34fb\",\n firmwareRevision = \"00002a26-0000-1000-8000-00805f9b34fb\",\n hardwareRevision = \"00002a27-0000-1000-8000-00805f9b34fb\",\n manufacturer = \"00002a29-0000-1000-8000-00805f9b34fb\"\n}\n\n/**\n * Device information structure\n */\nexport interface DeviceInformation {\n /**\n * Model Number\n */\n modelNumber?: string;\n /**\n * Serial Number\n */\n serialNumber?: string;\n /**\n * Firmware Revision\n */\n firmwareRevision?: string;\n /**\n * Hardware Revision\n */\n hardwareRevision?: string;\n /**\n * Manufacturer Name\n */\n manufacturer?: string;\n}\n\n/**\n * Device Information Service\n */\nexport class DeviceInformationService {\n\n /**\n * @hidden\n */\n public static uuid = \"0000180a-0000-1000-8000-00805f9b34fb\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<DeviceInformationService> {\n return new DeviceInformationService(service);\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n this.helper = new ServiceHelper(service);\n }\n\n /**\n * Read device information\n */\n public async readDeviceInformation(): Promise<DeviceInformation> {\n const info: DeviceInformation = {};\n\n const modelNumber = await this.readStringCharacteristic(DeviceInformationCharacteristic.modelNumber);\n if (modelNumber) info.modelNumber = modelNumber;\n\n const serialNumber = await this.readStringCharacteristic(DeviceInformationCharacteristic.serialNumber);\n if (serialNumber) info.serialNumber = serialNumber;\n\n const firmwareRevision = await this.readStringCharacteristic(DeviceInformationCharacteristic.firmwareRevision);\n if (firmwareRevision) info.firmwareRevision = firmwareRevision;\n\n const hardwareRevision = await this.readStringCharacteristic(DeviceInformationCharacteristic.hardwareRevision);\n if (hardwareRevision) info.hardwareRevision = hardwareRevision;\n\n const manufacturer = await this.readStringCharacteristic(DeviceInformationCharacteristic.manufacturer);\n if (manufacturer) info.manufacturer = manufacturer;\n\n return info;\n }\n\n private async readStringCharacteristic(uuid: BluetoothCharacteristicUUID): Promise<string | undefined> {\n try {\n const view = await this.helper.getCharacteristicValue(uuid);\n const buffer = view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength);\n return String.fromCharCode.apply(null, Array.from(new Uint8Array(buffer)));\n } catch (_e) {\n return undefined;\n }\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventEmitter } from \"events\";\nimport { PromiseQueue } from \"./promise-queue\";\n\n/**\n * @hidden\n */\nexport interface ServiceEventHandler {\n characteristic: BluetoothCharacteristicUUID;\n handler: (event: Event) => void;\n}\n\n/**\n * @hidden\n */\nexport class ServiceHelper {\n\n private static queue = new PromiseQueue();\n\n private characteristics?: BluetoothRemoteGATTCharacteristic[];\n\n constructor(private service: BluetoothRemoteGATTService, private emitter?: EventEmitter) {\n }\n\n private async getCharacteristic(uuid: BluetoothCharacteristicUUID): Promise<BluetoothRemoteGATTCharacteristic | undefined> {\n if (!this.characteristics) {\n this.characteristics = await this.service.getCharacteristics();\n }\n\n return this.characteristics.find(characteristic => characteristic.uuid === uuid);\n }\n\n public async getCharacteristicValue(uuid: BluetoothCharacteristicUUID): Promise<DataView> {\n const characteristic = await this.getCharacteristic(uuid);\n\n if (!characteristic) {\n throw new Error(\"Unable to locate characteristic\");\n }\n\n return await ServiceHelper.queue.add(async () => characteristic.readValue());\n }\n\n public async setCharacteristicValue(uuid: BluetoothCharacteristicUUID, value: BufferSource): Promise<void> {\n const characteristic = await this.getCharacteristic(uuid);\n\n if (!characteristic) {\n throw new Error(\"Unable to locate characteristic\");\n }\n\n await ServiceHelper.queue.add(async () => characteristic.writeValue(value));\n }\n\n public async handleListener(event: string, uuid: BluetoothCharacteristicUUID, handler: (event: Event) => void) {\n const characteristic = await this.getCharacteristic(uuid);\n\n if (!characteristic) {\n return;\n }\n\n await ServiceHelper.queue.add(async () => characteristic.startNotifications());\n\n this.emitter!.on(\"newListener\", (emitterEvent: string) => {\n if (emitterEvent !== event || this.emitter!.listenerCount(event) > 0) {\n return;\n }\n\n return ServiceHelper.queue.add(async () => characteristic.addEventListener(\"characteristicvaluechanged\", handler));\n });\n\n this.emitter!.on(\"removeListener\", (emitterEvent: string) => {\n if (emitterEvent !== event || this.emitter!.listenerCount(event) > 0) {\n return;\n }\n\n return ServiceHelper.queue.add(async () => characteristic.removeEventListener(\"characteristicvaluechanged\", handler));\n });\n }\n}\n","'use strict';\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nexport default EventEmitter;\nexport {EventEmitter};\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter.EventEmitter = EventEmitter\n\nEventEmitter.usingDomains = false;\n\nEventEmitter.prototype.domain = undefined;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\nEventEmitter.init = function() {\n this.domain = null;\n if (EventEmitter.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active && !(this instanceof domain.Domain)) {\n this.domain = domain.active;\n }\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var needDomainExit = false;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n if (needDomainExit)\n domain.exit();\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction _onceWrap(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventEmitter } from \"events\";\n\n/**\n * @hidden\n */\nexport interface TypedDispatcher<T> {\n addEventListener<K extends keyof T>(type: K, listener: (event: CustomEvent<T[K]>) => void): void;\n removeEventListener<K extends keyof T>(type: K, callback: (event: CustomEvent<T[K]>) => void): void;\n dispatchEvent(event: CustomEvent<T>): boolean;\n dispatchEvent<K extends keyof T>(type: K, detail: T[K]): boolean;\n addListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n on<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n once<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n prependListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n prependOnceListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n removeListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;\n removeAllListeners<K extends keyof T>(event?: K): this;\n // tslint:disable-next-line:ban-types\n listeners<K extends keyof T>(event: K): Function[];\n emit<K extends keyof T>(event: K, data: T[K]): boolean;\n // tslint:disable-next-line:array-type\n eventNames<K extends keyof T>(): Array<K>;\n listenerCount<K extends keyof T>(type: K): number;\n setMaxListeners(n: number): this;\n getMaxListeners(): number;\n}\n\n/**\n * @hidden\n */\nexport class EventDispatcher extends EventEmitter implements EventTarget {\n\n private isEventListenerObject = (listener: EventListenerOrEventListenerObject): listener is EventListenerObject => (listener as EventListenerObject).handleEvent !== undefined;\n\n public addEventListener(type: string, listener: EventListenerOrEventListenerObject | null) {\n if (listener) {\n const handler = this.isEventListenerObject(listener) ? listener.handleEvent : listener;\n super.addListener(type, handler);\n }\n }\n\n public removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null) {\n if (callback) {\n const handler = this.isEventListenerObject(callback) ? callback.handleEvent : callback;\n super.removeListener(type, handler);\n }\n }\n\n public dispatchEvent(event: Event): boolean;\n public dispatchEvent<T>(type: string, detail: T): boolean;\n public dispatchEvent<T>(eventOrType: Event | string, detail?: T): boolean {\n let event: Event;\n if (typeof eventOrType === \"string\") {\n event = new CustomEvent(eventOrType, {\n detail\n });\n } else {\n event = eventOrType;\n }\n\n return super.emit(event.type, event);\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum ButtonCharacteristic {\n buttonAState = \"e95dda90-251d-470a-a062-fa1922dfa9a8\",\n buttonBState = \"e95dda91-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * Button state enum\n */\nexport enum ButtonState {\n /**\n * Button released\n */\n Release = 0,\n /**\n * Button pressed - short\n */\n ShortPress = 1,\n /**\n * Button pressed - long\n */\n LongPress = 2\n}\n\n/**\n * Events raised by the button service\n */\nexport interface ButtonEvents {\n /**\n * @hidden\n */\n newListener: keyof ButtonEvents;\n /**\n * @hidden\n */\n removeListener: keyof ButtonEvents;\n /**\n * Button A state changed event\n */\n buttonastatechanged: ButtonState;\n /**\n * Button B state changed event\n */\n buttonbstatechanged: ButtonState;\n}\n\n/**\n * Button Service\n */\nexport class ButtonService extends (EventDispatcher as new() => TypedDispatcher<ButtonEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d9882-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<ButtonService> {\n const bluetoothService = new ButtonService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"buttonastatechanged\", ButtonCharacteristic.buttonAState, this.buttonAStateChangedHandler.bind(this));\n await this.helper.handleListener(\"buttonbstatechanged\", ButtonCharacteristic.buttonBState, this.buttonBStateChangedHandler.bind(this));\n }\n\n /**\n * Read state of button A\n */\n public async readButtonAState(): Promise<ButtonState> {\n const view = await this.helper.getCharacteristicValue(ButtonCharacteristic.buttonAState);\n return view.getUint8(0);\n }\n\n /**\n * Read state of button B\n */\n public async readButtonBState(): Promise<ButtonState> {\n const view = await this.helper.getCharacteristicValue(ButtonCharacteristic.buttonBState);\n return view.getUint8(0);\n }\n\n private buttonAStateChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n this.dispatchEvent(\"buttonastatechanged\", view.getUint8(0));\n }\n\n private buttonBStateChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n this.dispatchEvent(\"buttonbstatechanged\", view.getUint8(0));\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum LedCharacteristic {\n ledMatrixState = \"e95d7b77-251d-470a-a062-fa1922dfa9a8\",\n ledText = \"e95d93ee-251d-470a-a062-fa1922dfa9a8\",\n scrollingDelay = \"e95d0d2d-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * LED matrix structure\n */\nexport type LedMatrix = [\n [boolean, boolean, boolean, boolean, boolean],\n [boolean, boolean, boolean, boolean, boolean],\n [boolean, boolean, boolean, boolean, boolean],\n [boolean, boolean, boolean, boolean, boolean],\n [boolean, boolean, boolean, boolean, boolean]\n];\n\n/**\n * LED Service\n */\nexport class LedService {\n\n /**\n * @hidden\n */\n public static uuid = \"e95dd91d-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<LedService> {\n return new LedService(service);\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n this.helper = new ServiceHelper(service);\n }\n\n /**\n * Write text to the LED matrix\n * @param text Te text to display\n */\n public async writeText(text: string): Promise<void> {\n const encoded = this.encodeString(text);\n return this.helper.setCharacteristicValue(LedCharacteristic.ledText, encoded);\n }\n\n /**\n * Read matrix state\n */\n public async readMatrixState(): Promise<LedMatrix> {\n const view = await this.helper.getCharacteristicValue(LedCharacteristic.ledMatrixState);\n return this.viewToLedMatrix(view);\n }\n\n /**\n * Write matrix state\n * @param state The matrix data to set\n */\n public async writeMatrixState(state: LedMatrix): Promise<void> {\n const view = this.ledMatrixToView(state);\n return this.helper.setCharacteristicValue(LedCharacteristic.ledMatrixState, view);\n }\n\n /**\n * Get scrolling delay\n */\n public async getScrollingDelay(): Promise<number> {\n const view = await this.helper.getCharacteristicValue(LedCharacteristic.scrollingDelay);\n return view.getUint16(0, true);\n }\n\n /**\n * Set scrolling delay\n * @param delay The delay to set (milliseconds)\n */\n public async setScrollingDelay(delay: number): Promise<void> {\n const view = new DataView(new ArrayBuffer(2));\n view.setUint16(0, delay, true);\n return this.helper.setCharacteristicValue(LedCharacteristic.scrollingDelay, view);\n }\n\n private encodeString(text: string): ArrayBuffer {\n const buffer = new ArrayBuffer(text.length);\n const view = new Uint8Array(buffer);\n for (let i = 0; i < text.length; i++) {\n view[i] = text.charCodeAt(i);\n }\n return buffer;\n }\n\n private viewToLedMatrix(view: DataView): LedMatrix {\n const matrix: boolean[][] = [];\n for (let i = 0; i < 5; i ++) {\n matrix[i] = this.byteToBoolArray(view.getUint8(i));\n }\n return matrix as LedMatrix;\n }\n\n private byteToBoolArray(byte: number): boolean[] {\n const bools = [false, false, false, false, false];\n for (let i = 0; i < bools.length; i++) {\n bools[i] = (byte & 1) === 1;\n byte >>= 1;\n }\n return bools.reverse();\n }\n\n private ledMatrixToView(matrix: LedMatrix): DataView {\n const view = new DataView(new ArrayBuffer(5));\n for (let i = 0; i < 5; i ++) {\n view.setUint8(i, this.boolArrayToByte(matrix[i]));\n }\n return view;\n }\n\n private boolArrayToByte(bools: boolean[]): number {\n return bools.reduce((byte, bool) => byte << 1 | (bool ? 1 : 0), 0);\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { TypedDispatcher, EventDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum TemperatureCharacteristic {\n temperature = \"e95d9250-251d-470a-a062-fa1922dfa9a8\",\n temperaturePeriod = \"e95d1b25-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * Events raised by the temperature service\n */\nexport interface TemperatureEvents {\n /**\n * @hidden\n */\n newListener: keyof TemperatureEvents;\n /**\n * @hidden\n */\n removeListener: keyof TemperatureEvents;\n /**\n * Temperature changed event\n */\n temperaturechanged: number;\n}\n\n/**\n * Temperature Service\n */\nexport class TemperatureService extends (EventDispatcher as new() => TypedDispatcher<TemperatureEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d6100-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<TemperatureService> {\n const bluetoothService = new TemperatureService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"temperaturechanged\", TemperatureCharacteristic.temperature, this.temperatureChangedHandler.bind(this));\n }\n\n /**\n * Read temperature\n */\n public async readTemperature(): Promise<number> {\n const view = await this.helper.getCharacteristicValue(TemperatureCharacteristic.temperature);\n return view.getInt8(0);\n }\n\n /**\n * Get temperature sample period\n */\n public async getTemperaturePeriod(): Promise<number> {\n const view = await this.helper.getCharacteristicValue(TemperatureCharacteristic.temperaturePeriod);\n return view.getUint16(0, true);\n }\n\n /**\n * Set temperature sample period\n * @param frequency The frequency to use (milliseconds)\n */\n public async setTemperaturePeriod(frequency: number): Promise<void> {\n const view = new DataView(new ArrayBuffer(2));\n view.setUint16(0, frequency, true);\n return await this.helper.setCharacteristicValue(TemperatureCharacteristic.temperaturePeriod, view);\n }\n\n private temperatureChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n this.dispatchEvent(\"temperaturechanged\", view.getInt8(0));\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum AccelerometerCharacteristic {\n accelerometerData = \"e95dca4b-251d-470a-a062-fa1922dfa9a8\",\n accelerometerPeriod = \"e95dfb24-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * Data received from the accelerometer\n */\nexport interface AccelerometerData {\n /**\n * Force in direction X\n */\n x: number;\n /**\n * Force in direction Y\n */\n y: number;\n /**\n * Force in direction Z\n */\n z: number;\n}\n\n/**\n * The sample period to read accelerometer data (milliseconds)\n */\nexport type AccelerometerPeriod = 1 | 2 | 5 | 10 | 20 | 80 | 160 | 640;\n\n/**\n * Events raised by the accelerometer service\n */\nexport interface AccelerometerEvents {\n /**\n * @hidden\n */\n newListener: keyof AccelerometerEvents;\n /**\n * @hidden\n */\n removeListener: keyof AccelerometerEvents;\n /**\n * Accelerometer data changed event\n */\n accelerometerdatachanged: AccelerometerData;\n}\n\n/**\n * Accelerometer Service\n */\nexport class AccelerometerService extends (EventDispatcher as new() => TypedDispatcher<AccelerometerEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d0753-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<AccelerometerService> {\n const bluetoothService = new AccelerometerService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"accelerometerdatachanged\", AccelerometerCharacteristic.accelerometerData, this.accelerometerDataChangedHandler.bind(this));\n }\n\n /**\n * Read acceleromter data\n */\n public async readAccelerometerData(): Promise<AccelerometerData> {\n const view = await this.helper.getCharacteristicValue(AccelerometerCharacteristic.accelerometerData);\n return this.dataViewToAccelerometerData(view);\n }\n\n /**\n * Get accelerometer sample period\n */\n public async getAccelerometerPeriod(): Promise<AccelerometerPeriod> {\n const view = await this.helper.getCharacteristicValue(AccelerometerCharacteristic.accelerometerPeriod);\n return view.getUint16(0, true) as AccelerometerPeriod;\n }\n\n /**\n * Set accelerometer sample period\n * @param frequency The frequency interval to use\n */\n public async setAccelerometerPeriod(frequency: AccelerometerPeriod): Promise<void> {\n const view = new DataView(new ArrayBuffer(2));\n view.setUint16(0, frequency, true);\n return this.helper.setCharacteristicValue(AccelerometerCharacteristic.accelerometerPeriod, view);\n }\n\n private accelerometerDataChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const value = this.dataViewToAccelerometerData(view);\n this.dispatchEvent(\"accelerometerdatachanged\", value);\n }\n\n private dataViewToAccelerometerData(view: DataView): AccelerometerData {\n return {\n x: view.getInt16(0, true) / 1000.0,\n y: view.getInt16(2, true) / 1000.0,\n z: view.getInt16(4, true) / 1000.0\n };\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum MagnetometerCharacteristic {\n magnetometerData = \"e95dfb11-251d-470a-a062-fa1922dfa9a8\",\n magnetometerPeriod = \"e95d386c-251d-470a-a062-fa1922dfa9a8\",\n magnetometerBearing = \"e95d9715-251d-470a-a062-fa1922dfa9a8\",\n magnetometerCalibration = \"e95db358-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * Data received from the magnetometer\n */\nexport interface MagnetometerData {\n /**\n * Force in direction X\n */\n x: number;\n /**\n * Force in direction Y\n */\n y: number;\n /**\n * Force in direction Z\n */\n z: number;\n}\n\n/**\n * Magnetometer calibation state\n */\nexport enum MagnetometerCalibration {\n /**\n * Unknown state\n */\n unknown = 0,\n /**\n * Calibration has been requestes\n */\n requested = 1,\n /**\n * Calibration completed\n */\n completed = 2,\n /**\n * Calibration had an error\n */\n errored = 3\n}\n\n/**\n * The sample period to read magnetometer data (milliseconds)\n */\nexport type MagnetometerPeriod = 1 | 2 | 5 | 10 | 20 | 80 | 160 | 640;\n\n/**\n * Events raised by the magnetometer service\n */\nexport interface MagnetometerEvents {\n /**\n * @hidden\n */\n newListener: keyof MagnetometerEvents;\n /**\n * @hidden\n */\n removeListener: keyof MagnetometerEvents;\n /**\n * Magnetometer data changed event\n */\n magnetometerdatachanged: MagnetometerData;\n /**\n * Magnetometer bearing changed event\n */\n magnetometerbearingchanged: number;\n /**\n * Magnetometer calibration changed event\n */\n magnetometercalibrationchanged: MagnetometerCalibration;\n}\n\n/**\n * Magnetometer Service\n */\nexport class MagnetometerService extends (EventDispatcher as new() => TypedDispatcher<MagnetometerEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95df2d8-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<MagnetometerService> {\n const bluetoothService = new MagnetometerService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"magnetometerdatachanged\", MagnetometerCharacteristic.magnetometerData, this.magnetometerDataChangedHandler.bind(this));\n await this.helper.handleListener(\"magnetometerbearingchanged\", MagnetometerCharacteristic.magnetometerBearing, this.magnetometerBearingChangedHandler.bind(this));\n await this.helper.handleListener(\"magnetometercalibrationchanged\", MagnetometerCharacteristic.magnetometerCalibration, this.magnetometerCalibrationChangedHandler.bind(this));\n }\n\n /**\n * Request magnetometer calibration\n */\n public async calibrate() {\n return this.helper.setCharacteristicValue(MagnetometerCharacteristic.magnetometerCalibration, new Uint8Array([1]));\n }\n\n /**\n * Read magnetometer data\n */\n public async readMagnetometerData(): Promise<MagnetometerData> {\n const view = await this.helper.getCharacteristicValue(MagnetometerCharacteristic.magnetometerData);\n return this.dataViewToMagnetometerData(view);\n }\n\n /**\n * Read magnetometer bearing\n */\n public async readMagnetometerBearing(): Promise<number | undefined> {\n const view = await this.helper.getCharacteristicValue(MagnetometerCharacteristic.magnetometerBearing);\n if (view.byteLength === 2) {\n return view.getUint16(0, true);\n }\n return undefined;\n }\n\n /**\n * Get magnetometer sample period\n */\n public async getMagnetometerPeriod(): Promise<MagnetometerPeriod> {\n const view = await this.helper.getCharacteristicValue(MagnetometerCharacteristic.magnetometerPeriod);\n return view.getUint16(0, true) as MagnetometerPeriod;\n }\n\n /**\n * Set magnetometer sample period\n * @param frequency The frequency interval to use\n */\n public async setMagnetometerPeriod(frequency: MagnetometerPeriod): Promise<void> {\n const view = new DataView(new ArrayBuffer(2));\n view.setUint16(0, frequency, true);\n return this.helper.setCharacteristicValue(MagnetometerCharacteristic.magnetometerPeriod, view);\n }\n\n private magnetometerDataChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const value = this.dataViewToMagnetometerData(view);\n this.dispatchEvent(\"magnetometerdatachanged\", value);\n }\n\n private magnetometerBearingChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n if (view.byteLength === 2) {\n this.dispatchEvent(\"magnetometerbearingchanged\", view.getUint16(0, true));\n }\n }\n\n private magnetometerCalibrationChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n if (view.byteLength === 1) {\n this.dispatchEvent(\"magnetometercalibrationchanged\", view.getUint8(0) as MagnetometerCalibration);\n }\n }\n\n private dataViewToMagnetometerData(view: DataView): MagnetometerData {\n return {\n x: view.getInt16(0, true),\n y: view.getInt16(1, true),\n z: view.getInt16(2, true)\n };\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { ServiceHelper } from \"../service-helper\";\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\n\n/**\n * @hidden\n */\nexport enum IoPinCharacteristic {\n pinData = \"e95d8d00-251d-470a-a062-fa1922dfa9a8\",\n pinAdConfiguration = \"e95d5899-251d-470a-a062-fa1922dfa9a8\",\n pinIoConfiguration = \"e95db9fe-251d-470a-a062-fa1922dfa9a8\",\n pwmControl = \"e95dd822-251d-470a-a062-fa1922dfa9a8\"\n}\n\nconst littleEndian = true;\n\n/**\n * Pin data\n */\nexport interface PinData {\n /**\n * Pin number\n */\n pin: number;\n /**\n * Pin value\n */\n value: number;\n}\n\n/**\n * PWM control data\n */\nexport interface PwmControlData {\n /**\n * Pin number\n */\n pin: number;\n /**\n * Pin value\n */\n value: number;\n /**\n * Period (in microseconds)\n */\n period: number;\n}\n\n/**\n * Analogue/Digital Enum\n */\nexport enum AD {\n Digital = 0,\n Analogue = 1\n}\n\n/**\n * Input/Output Enum\n */\nexport enum IO {\n Output = 0,\n Input = 1\n}\n\n/**\n * Events raised by the magnetometer service\n */\nexport interface IoPinEvents {\n /**\n * @hidden\n */\n newListener: keyof IoPinEvents;\n /**\n * @hidden\n */\n removeListener: keyof IoPinEvents;\n /**\n * Pin data changed event\n */\n pindatachanged: PinData[];\n}\n\n/**\n * @hidden\n */\nexport class IoPinService extends (EventDispatcher as new() => TypedDispatcher<IoPinEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d127b-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<IoPinService> {\n const bluetoothService = new IoPinService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n /**\n * @hidden\n */\n public helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"pindatachanged\", IoPinCharacteristic.pinData, this.pinDataChangedHandler.bind(this));\n }\n\n /**\n * Read pin data\n */\n public async readPinData(): Promise<PinData[]> {\n const view = await this.helper.getCharacteristicValue(IoPinCharacteristic.pinData);\n return this.dataViewToPinData(view);\n }\n\n /**\n * Write pin data\n * @param data The pin data to write\n */\n public async writePinData(data: PinData[]): Promise<void> {\n const view = this.pinDataToDataView(data);\n return this.helper.setCharacteristicValue(IoPinCharacteristic.pinData, view);\n }\n\n /**\n * Get pin analogue/digital configuration\n */\n public async getAdConfiguration(): Promise<AD[]> {\n const view = await this.helper.getCharacteristicValue(IoPinCharacteristic.pinAdConfiguration);\n return this.dataViewToConfig(view);\n }\n\n /**\n * Set pin analogue/digital configuration\n * @param config The analogue/digital configuration to set\n */\n public async setAdConfiguration(config: AD[]): Promise<void> {\n const view = this.configToDataView(config);\n return this.helper.setCharacteristicValue(IoPinCharacteristic.pinAdConfiguration, view);\n }\n\n /**\n * Get pin input/output configuration\n */\n public async getIoConfiguration(): Promise<IO[]> {\n const view = await this.helper.getCharacteristicValue(IoPinCharacteristic.pinIoConfiguration);\n return this.dataViewToConfig(view);\n }\n\n /**\n * Set pin input/output configuration\n * @param config The input/output configuration to set\n */\n public async setIoConfiguration(config: IO[]): Promise<void> {\n const view = this.configToDataView(config);\n return this.helper.setCharacteristicValue(IoPinCharacteristic.pinIoConfiguration, view);\n }\n\n /**\n * Set pin PWM control\n * @param data The PWM control data to set\n */\n public async setPwmControl(data: PwmControlData): Promise<void> {\n const view = this.pwmControlDataToDataView(data);\n return this.helper.setCharacteristicValue(IoPinCharacteristic.pwmControl, view);\n }\n\n private pinDataChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const value = this.dataViewToPinData(view);\n this.dispatchEvent(\"pindatachanged\", value);\n }\n\n private dataViewToPinData(view: DataView): PinData[] {\n const data = [];\n for (let i = 0; i < view.byteLength; i += 2) {\n data.push({\n pin: view.getUint8(i),\n value: view.getUint8(i + 1)\n });\n }\n return data;\n }\n\n private pinDataToDataView(data: PinData[]): DataView {\n const view = new DataView(new ArrayBuffer(data.length * 2));\n data.forEach((pinData, index) => {\n view.setUint8(index * 2, pinData.pin);\n view.setUint8(index * 2 + 1, pinData.value);\n });\n return view;\n }\n\n private dataViewToConfig(view: DataView): number[] {\n const result: number[] = [];\n const value = (view.getUint16(0) << 8) + view.getUint8(2);\n\n for (let i = 0; i < 24; i++) {\n result.push(value >> i);\n }\n\n return result;\n }\n\n private configToDataView(config: number[]): DataView {\n const view = new DataView(new ArrayBuffer(3));\n let value = 0;\n\n // tslint:disable-next-line:prefer-for-of\n for (let i = 0; i < config.length; i++) {\n value &= 1 << config[i];\n }\n\n view.setUint16(0, value >> 8, littleEndian);\n view.setUint8(2, value & 0xff);\n return view;\n }\n\n private pwmControlDataToDataView(data: PwmControlData): DataView {\n const view = new DataView(new ArrayBuffer(7));\n view.setUint8(0, data.pin);\n view.setUint16(1, data.value, littleEndian);\n view.setUint32(3, data.period, littleEndian);\n return view;\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum UartCharacteristic {\n tx = \"6e400002-b5a3-f393-e0a9-e50e24dcca9e\",\n rx = \"6e400003-b5a3-f393-e0a9-e50e24dcca9e\"\n}\n\n/**\n * Events raised by the UART service\n */\nexport interface UartEvents {\n /**\n * @hidden\n */\n newListener: keyof UartEvents;\n /**\n * @hidden\n */\n removeListener: keyof UartEvents;\n /**\n * Serial data received event\n */\n receive: Uint8Array;\n /**\n * Serial received text event\n */\n receiveText: string;\n}\n\n/**\n * UART Service\n */\nexport class UartService extends (EventDispatcher as new() => TypedDispatcher<UartEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"6e400001-b5a3-f393-e0a9-e50e24dcca9e\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<UartService> {\n const bluetoothService = new UartService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"receive\", UartCharacteristic.tx, this.receiveHandler.bind(this));\n await this.helper.handleListener(\"receiveText\", UartCharacteristic.tx, this.receiveTextHandler.bind(this));\n }\n\n /**\n * Send serial data\n * @param value The buffer to send\n */\n public async send(value: BufferSource): Promise<void> {\n return this.helper.setCharacteristicValue(UartCharacteristic.rx, value);\n }\n\n /**\n * Send serial text\n * @param value The text to send\n */\n public async sendText(value: string): Promise<void> {\n const arrayData = value.split(\"\").map((e: string) => e.charCodeAt(0));\n return this.helper.setCharacteristicValue(UartCharacteristic.rx, new Uint8Array(arrayData).buffer);\n }\n\n private receiveHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const value = new Uint8Array(view.buffer);\n this.dispatchEvent(\"receive\", value);\n }\n\n private receiveTextHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const numberArray = Array.prototype.slice.call(new Uint8Array(view.buffer));\n const value = String.fromCharCode.apply(null, numberArray);\n this.dispatchEvent(\"receiveText\", value);\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { EventDispatcher, TypedDispatcher } from \"../event-dispatcher\";\nimport { ServiceHelper } from \"../service-helper\";\n\n/**\n * @hidden\n */\nexport enum EventCharacteristic {\n microBitRequirements = \"e95db84c-251d-470a-a062-fa1922dfa9a8\",\n microBitEvent = \"e95d9775-251d-470a-a062-fa1922dfa9a8\",\n clientRequirements = \"e95d23c4-251d-470a-a062-fa1922dfa9a8\",\n clientEvent = \"e95d5404-251d-470a-a062-fa1922dfa9a8\"\n}\n\n/**\n * micro:bit event\n */\nexport interface MicrobitEvent {\n /**\n * The type of event\n */\n type: number;\n /**\n * The value for the event\n */\n value: number;\n}\n\n/**\n * Events raised by the event service\n */\nexport interface MicrobitEvents {\n /**\n * @hidden\n */\n newListener: keyof MicrobitEvents;\n /**\n * @hidden\n */\n removeListener: keyof MicrobitEvents;\n /**\n * micro:bit requirements changed event\n */\n microbitrequirementschanged: MicrobitEvent;\n /**\n * micro:bit event event\n */\n microbitevent: MicrobitEvent;\n}\n\n/**\n * Event Service\n */\nexport class EventService extends (EventDispatcher as new() => TypedDispatcher<MicrobitEvents>) {\n\n /**\n * @hidden\n */\n public static uuid = \"e95d93af-251d-470a-a062-fa1922dfa9a8\";\n\n /**\n * @hidden\n */\n public static async create(service: BluetoothRemoteGATTService): Promise<EventService> {\n const bluetoothService = new EventService(service);\n await bluetoothService.init();\n return bluetoothService;\n }\n\n private helper: ServiceHelper;\n\n /**\n * @hidden\n */\n constructor(service: BluetoothRemoteGATTService) {\n super();\n this.helper = new ServiceHelper(service, this);\n }\n\n private async init() {\n await this.helper.handleListener(\"microbitevent\", EventCharacteristic.microBitEvent, this.eventHandler.bind(this));\n await this.helper.handleListener(\"microbitrequirementschanged\", EventCharacteristic.microBitRequirements, this.microbitRequirementsChangedHandler.bind(this));\n }\n\n /**\n * Get micro:bit event requirements\n */\n public async getMicrobitRequirements(): Promise<MicrobitEvent> {\n const view = await this.helper.getCharacteristicValue(EventCharacteristic.microBitRequirements);\n return this.viewToMicrobitEvent(view);\n }\n\n /**\n * Set client event requirements\n * @param type The type of event to set\n * @param value The value to set\n */\n public async setClientRequirements(type: number, value: number): Promise<void> {\n const view = new DataView(new ArrayBuffer(4));\n view.setUint16(0, type, true);\n view.setUint16(1, value, true);\n return await this.helper.setCharacteristicValue(EventCharacteristic.clientRequirements, view);\n }\n\n /**\n * Read micro:bit event\n */\n public async readMicrobitEvent(): Promise<MicrobitEvent> {\n const view = await this.helper.getCharacteristicValue(EventCharacteristic.microBitEvent);\n return this.viewToMicrobitEvent(view);\n }\n\n /**\n * Write client event\n * @param type The event type\n * @param value The event value\n */\n public async writeClientEvent(type: number, value: number): Promise<void> {\n const view = new DataView(new ArrayBuffer(4));\n view.setUint16(0, type, true);\n view.setUint16(1, value, true);\n return await this.helper.setCharacteristicValue(EventCharacteristic.clientEvent, view);\n }\n\n private microbitRequirementsChangedHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const microbitEvent = this.viewToMicrobitEvent(view);\n this.dispatchEvent(\"microbitrequirementschanged\", microbitEvent);\n }\n\n private eventHandler(event: Event) {\n const view = (event.target as BluetoothRemoteGATTCharacteristic).value!;\n const microbitEvent = this.viewToMicrobitEvent(view);\n this.dispatchEvent(\"microbitevent\", microbitEvent);\n }\n\n private viewToMicrobitEvent(view: DataView): MicrobitEvent {\n const type = view.getUint16(0, true);\n const value = view.getUint16(1, true);\n return {\n type,\n value\n };\n }\n}\n","/*\n* micro:bit Web Bluetooth\n* Copyright (c) 2019 Rob Moran\n*\n* The MIT License (MIT)\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in all\n* copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\nimport { DeviceInformationService } from \"./services/device-information\";\nimport { ButtonService } from \"./services/button\";\nimport { LedService } from \"./services/led\";\nimport { TemperatureService } from \"./services/temperature\";\nimport { AccelerometerService } from \"./services/accelerometer\";\nimport { MagnetometerService } from \"./services/magnetometer\";\nimport { IoPinService } from \"./services/io-pin\";\nimport { UartService } from \"./services/uart\";\nimport { EventService } from \"./services/event\";\nimport { DfuControlService } from \"./services/dfu-control\";\n\nexport interface Services {\n deviceInformationService?: DeviceInformationService;\n buttonService?: ButtonService;\n ledService?: LedService;\n temperatureService?: TemperatureService;\n accelerometerService?: AccelerometerService;\n magnetometerService?: MagnetometerService;\n uartService?: UartService;\n eventService?: EventService;\n dfuControlService?: DfuControlService;\n ioPinService?: IoPinService;\n}\n\n/**\n * @hidden\n */\ninterface Service {\n uuid: BluetoothCharacteristicUUID;\n create(service: BluetoothRemoteGATTService): Promise<any>;\n}\n\n/**\n * @hidden\n */\nclass ServiceBuilder {\n\n constructor(private services: BluetoothRemoteGATTService[]) {\n }\n\n public async createService<T>(serviceClass: (new (service: BluetoothRemoteGATTService) => T) & Service): Promise<T | undefined> {\n const found = this.services.find(service => service.uuid === serviceClass.uuid);\n\n if (!found) {\n return undefined;\n }\n\n return await serviceClass.create(found);\n }\n}\n\nexport const requestMicrobit = async (bluetooth: Bluetooth): Promise<BluetoothDevice | undefined> => {\n const device = await bluetooth.requestDevice({\n filters: [\n {\n namePrefix: \"BBC micro:bit\"\n }\n ],\n optionalServices: [\n DeviceInformationService.uuid,\n ButtonService.uuid,\n LedService.uuid,\n TemperatureService.uuid,\n AccelerometerService.uuid,\n MagnetometerService.uuid,\n IoPinService.uuid,\n UartService.uuid,\n EventService.uuid,\n DfuControlService.uuid\n ]\n });\n\n return device;\n};\n\nexport const getServices = async (device: BluetoothDevice): Promise<Services> => {\n if (!device || !device.gatt) {\n return {};\n }\n\n if (!device.gatt.connected) {\n await device.gatt.connect();\n }\n\n const services = await device.gatt.getPrimaryServices();\n const builder = new ServiceBuilder(services);\n\n const deviceInformationService = await builder.createService(DeviceInformationService);\n const buttonService = await builder.createService(ButtonService);\n const ledService = await builder.createService(LedService);\n const temperatureService = await builder.createService(TemperatureService);\n const accelerometerService = await builder.createService(AccelerometerService);\n const magnetometerService = await builder.createService(MagnetometerService);\n const uartService = await builder.createService(UartService);\n const eventService = await builder.createService(EventService);\n const dfuControlService = await builder.createService(DfuControlService);\n const ioPinService = await builder.createService(IoPinService);\n\n return {\n deviceInformationService,\n buttonService,\n ledService,\n temperatureService,\n accelerometerService,\n magnetometerService,\n uartService,\n eventService,\n dfuControlService,\n ioPinService\n };\n};\n","let waiting_timer = undefined;\nlet notif_queue = [];\n\nfunction notif(notif_c) {\n let notification_area = document.querySelector(\".statusline .notification-area\");\n\n if ((notification_area.querySelector(\".notification\") === null) && (waiting_timer === undefined)) {\n // This is just so no notifications will be played and disappears while the full screen landscape warning is in the way.\n if( (screen.availHeight > screen.availWidth) && (!document.body.classList.contains(\"ignore-landscape-warning\"))){\n waiting_timer = setInterval(() => {\n if( (screen.availHeight < screen.availWidth) || (document.body.classList.contains(\"ignore-landscape-warning\"))){\n clearInterval(waiting_timer);\n waiting_timer = undefined;\n notif(notif_queue.pop());\n }\n }, 1000);\n notif_queue.push(notif_c);\n return;\n }\n\n let notif_elem = document.createElement(\"div\");\n notif_elem.className = \"notification\";\n notif_elem.appendChild(notif_c[0]);\n notif_elem.appendChild(notif_c[1]);\n\n notification_area.appendChild(notif_elem);\n\n setTimeout(() => {\n notification_area.removeChild(notif_elem);\n if (notif_queue.length > 0) {\n notif(notif_queue.pop());\n }\n }, 5000);\n } else {\n notif_queue.push(notif_c);\n }\n}\n\nexport function notif_alert(alert_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = alert_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"alert fas fa-exclamation-triangle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_warn(alert_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = alert_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"warning fas fa-exclamation-triangle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_info(info_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = info_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"info fas fa-info-circle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_success(success_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = success_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"success fas fa-check-circle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n","import { notif_alert, notif_warn, notif_info, notif_success } from './notification';\n\nexport default class hoverControlModule {\n #throttle = 0;\n #throttleAcc = 0;\n #rudder = 0;\n #rudderAcc = 0;\n #arm = 0;\n #armAcc = 0;\n\n constructor() {}\n\n acc(accString) {\n accString.match(/[A-Z][-,0-9]+/g).forEach((item, i) => {\n switch (item.substring(0, 1)) {\n case \"T\":\n this.#throttleAcc = parseInt(item.substring(1, item.length));\n break;\n case \"R\":\n this.#rudderAcc = parseInt(item.substring(1, item.length));\n break;\n case \"A\":\n this.#armAcc = parseInt(item.substring(1, item.length)) == 1;\n if (this.#armAcc) {\n document.body.classList.add(\"armed\");\n } else {\n document.body.classList.remove(\"armed\");\n }\n break;\n case \"S\":\n break;\n default:\n console.log(`Unkown acc: ${item}`);\n }\n });\n document.querySelector(\".acc-string pre\").innerHTML = `T: ${this.#throttleAcc}, R: ${this.#rudderAcc}`;\n }\n\n reset() {\n this.setArm(0);\n this.setThrottle(0);\n this.setRudder(0);\n }\n\n setThrottle(throttle) {\n if (!this.#armAcc) { return; }\n if (throttle > 100) { throttle = 100; }\n if (throttle < 0) { throttle = 0; }\n this.#throttle = throttle;\n }\n getThrottle() {\n return this.#throttle;\n }\n\n setRudder(rudder) {\n if (!this.#armAcc) { return; }\n if (rudder > 90) { rudder = 90; }\n if (rudder < -90) { rudder = -90; }\n this.#rudder = rudder;\n }\n getRudder() {\n return this.#rudder;\n }\n\n setArm(arm) {\n this.#arm = arm;\n if (!this.#arm) {\n this.#throttle = 0;\n this.#rudder = 0;\n }\n }\n getArm() {\n return this.#arm;\n }\n}\n","import nipplejs from 'nipplejs';\nimport { requestMicrobit, getServices } from 'microbit-web-bluetooth';\nimport hoverControlModule from './hoverControlModule';\nimport { notif_alert, notif_warn, notif_info, notif_success } from './notification';\n\nlet sw = \"service-worker.js\";\nif (navigator.serviceWorker) {\n // navigator.serviceWorker.register(sw, {scope: '/hoverbit-ble/'});\n //}\n navigator.serviceWorker.register(\n sw, {scope: '/hoverbit-ble/'}\n ).then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) { return; }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n notif_info(\"New content is available, relaunch the app to install it.\");\n } else {\n notif_success(\"Content is cached for offline use.\");\n }\n }\n };\n };\n }).catch(error => {\n notif_alert(\"Could not install service worker...\");\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\ndocument.getElementById(\"btn_ignore_landscape_warning\").addEventListener(\"click\", () => {\n document.body.classList.add(\"ignore-landscape-warning\");\n});\n\n/* Define and initialize things */\nlet hoverControl = new hoverControlModule();\nlet bluetoothDevice;\nlet bluetoothDeviceServices;\n\nlet joystickLeft = nipplejs.create({\n zone: document.querySelector(\".joystick-left\"),\n size: 200,\n position: {left: '50%', bottom: '50%'},\n mode: \"static\",\n lockX: true\n});\nlet joystickRight = nipplejs.create({\n zone: document.querySelector(\".joystick-right\"),\n size: 200,\n position: {left: '50%', bottom: '50%'},\n mode: \"static\",\n lockY: true\n});\n\n/* Setup event_listeners */\njoystickLeft.on(\"move\", (evt, data) => {\n let rudder = ((data.distance * 90) / 100);\n if (data.angle.degree > 90) { rudder = rudder * -1; }\n hoverControl.setRudder(rudder);\n});\njoystickLeft.on(\"end\", (evt, data) => {\n hoverControl.setRudder(0);\n});\n\njoystickRight.on(\"move\", (evt, data) => {\n let throttle = data.distance;\n if (data.angle.degree > 90) { throttle = 0; }\n hoverControl.setThrottle(throttle);\n});\njoystickRight.on(\"end\", (evt, data) => {\n hoverControl.setThrottle(0);\n});\n\ndocument.getElementById(\"btn_arm\").addEventListener(\"click\", () => {\n hoverControl.setArm(true);\n});\n\ndocument.getElementById(\"btn_disarm\").addEventListener(\"click\", () => {\n hoverControl.setArm(false);\n});\n\ndocument.querySelector(\"#btn_disconnect\").addEventListener(\"click\", () => {\n hoverControl.reset();\n bluetoothDevice.gatt.disconnect();\n});\n\nlet intervalConnectionChecker = setInterval(() => {\n if (bluetoothDevice !== undefined && bluetoothDevice) {\n if (bluetoothDevice.gatt.connected) {\n document.body.classList.add(\"connected\");\n } else {\n document.body.classList.remove(\"connected\");\n document.body.classList.remove(\"armed\");\n }\n } else if (bluetoothDevice !== undefined) {\n bluetoothDevice.gatt.reconnect();\n }\n}, 500);\n\nlet intervalSendCommands = setInterval(async() => {\n if (bluetoothDevice !== undefined && bluetoothDevice) {\n if (bluetoothDevice.gatt.connected && bluetoothDeviceServices.uartService) {\n let command =\n \"T\" + hoverControl.getThrottle().toString() +\n \"R\" + hoverControl.getRudder().toString() +\n \"A\" + (hoverControl.getArm() ? \"1\" : \"0\") +\n \"S0\" +\n \":\";\n await bluetoothDeviceServices.uartService.sendText(command);\n }\n }\n}, 70);\n\nfunction receiveText(event) {\n /* Just make the ping symbol reappear. */\n var elm = document.querySelector(\".ping i\");\n var newone = elm.cloneNode(true);\n elm.parentNode.replaceChild(newone, elm);\n\n /* Actually handle received text. */\n if ((event.detail).indexOf(\":\") != -1) {\n let parts = (event.detail).split(\":\");\n\n if (parts[0] == \"B\") {\n document.querySelector(\".battery-status\").innerHTML = parts[1] + \"mV\";\n } else if (parts[0] == \"ACC\") {\n hoverControl.acc(parts[1]);\n } else {\n console.log(parts);\n }\n } else {\n notif_warn(\"Received weird data from MICRO:BIT...\");\n console.log(`Received unknown: ${event.detail}`);\n }\n}\n\ndocument.getElementById(\"btn_connect\").onclick = async () => {\n if (bluetoothDevice !== undefined && bluetoothDevice.gatt.connected) {\n bluetoothDevice.disconnect();\n }\n\n const device = await requestMicrobit(window.navigator.bluetooth);\n bluetoothDevice = device;\n\n if (device) {\n hoverControl.reset();\n const services = await getServices(device);\n bluetoothDeviceServices = services;\n\n if (bluetoothDeviceServices.deviceInformationService) {\n // logJson(await services.deviceInformationService.readDeviceInformation());\n }\n\n if (services.uartService) {\n services.uartService.addEventListener(\"receiveText\", receiveText);\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/service-worker.js b/service-worker.js
index a1b5ca2..ff0cde3 100644
--- a/service-worker.js
+++ b/service-worker.js
@@ -1,7 +1,7 @@
var APP_PREFIX = 'hoverbitcontroller' // Identifier for this app (this needs to be consistent across every cache update)
-var VERSION = '1.0.7' // Version of the off-line cache (change this value everytime you want to update cache)
+var VERSION = '1.0.8-alpha' // Version of the off-line cache (change this value everytime you want to update cache)
var CACHE_NAME = APP_PREFIX + VERSION
-var URLS = ['/hoverbit-ble/fa-brands-400.0a2f2d3f.woff2','/hoverbit-ble/fa-brands-400.529a9178.svg','/hoverbit-ble/fa-brands-400.61a02662.eot','/hoverbit-ble/fa-brands-400.a43d027d.ttf','/hoverbit-ble/fa-brands-400.abaa6551.woff','/hoverbit-ble/fa-regular-400.12e902ff.woff2','/hoverbit-ble/fa-regular-400.4fc407aa.svg','/hoverbit-ble/fa-regular-400.779979e6.woff','/hoverbit-ble/fa-regular-400.b26d94f4.eot','/hoverbit-ble/fa-regular-400.d59f1e49.ttf','/hoverbit-ble/fa-solid-900.26506ae2.svg','/hoverbit-ble/fa-solid-900.50887a69.woff','/hoverbit-ble/fa-solid-900.6c3fc37b.eot','/hoverbit-ble/fa-solid-900.be8a4f74.woff2','/hoverbit-ble/fa-solid-900.f6ec8168.ttf','/hoverbit-ble/index.html','/hoverbit-ble/main.3047e937.js','/hoverbit-ble/main.3047e937.js.map','/hoverbit-ble/maskable_icon_x128.ae1e74f9.png','/hoverbit-ble/maskable_icon_x144.fc14e37c.png','/hoverbit-ble/maskable_icon_x152.ce6c1441.png','/hoverbit-ble/maskable_icon_x384.1af8edb2.png','/hoverbit-ble/maskable_icon_x512.a9ac38fa.png','/hoverbit-ble/maskable_icon_x72.b43d35ec.png','/hoverbit-ble/maskable_icon_x96.e03bc2e8.png','/hoverbit-ble/pwa-192x192.b3dbd8bb.png','/hoverbit-ble/pwa-512x512.b27071b7.png','/hoverbit-ble/service-worker.js','/hoverbit-ble/styles.96ce15e4.css','/hoverbit-ble/styles.96ce15e4.css.map'] // This will be replaced by the deploy-script
+var URLS = ['/hoverbit-ble/fa-brands-400.0a2f2d3f.woff2','/hoverbit-ble/fa-brands-400.529a9178.svg','/hoverbit-ble/fa-brands-400.61a02662.eot','/hoverbit-ble/fa-brands-400.a43d027d.ttf','/hoverbit-ble/fa-brands-400.abaa6551.woff','/hoverbit-ble/fa-regular-400.12e902ff.woff2','/hoverbit-ble/fa-regular-400.4fc407aa.svg','/hoverbit-ble/fa-regular-400.779979e6.woff','/hoverbit-ble/fa-regular-400.b26d94f4.eot','/hoverbit-ble/fa-regular-400.d59f1e49.ttf','/hoverbit-ble/fa-solid-900.26506ae2.svg','/hoverbit-ble/fa-solid-900.50887a69.woff','/hoverbit-ble/fa-solid-900.6c3fc37b.eot','/hoverbit-ble/fa-solid-900.be8a4f74.woff2','/hoverbit-ble/fa-solid-900.f6ec8168.ttf','/hoverbit-ble/index.html','/hoverbit-ble/main.7b0c10bd.js','/hoverbit-ble/main.7b0c10bd.js.map','/hoverbit-ble/maskable_icon_x128.ae1e74f9.png','/hoverbit-ble/maskable_icon_x144.fc14e37c.png','/hoverbit-ble/maskable_icon_x152.ce6c1441.png','/hoverbit-ble/maskable_icon_x384.1af8edb2.png','/hoverbit-ble/maskable_icon_x512.a9ac38fa.png','/hoverbit-ble/maskable_icon_x72.b43d35ec.png','/hoverbit-ble/maskable_icon_x96.e03bc2e8.png','/hoverbit-ble/pwa-192x192.b3dbd8bb.png','/hoverbit-ble/pwa-512x512.b27071b7.png','/hoverbit-ble/service-worker.js','/hoverbit-ble/styles.96ce15e4.css','/hoverbit-ble/styles.96ce15e4.css.map'] // This will be replaced by the deploy-script
// Respond with cached resources
self.addEventListener('fetch', function (e) {