2 lines
5.0 KiB
JavaScript
2 lines
5.0 KiB
JavaScript
"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[817],{29817:(t,e,i)=>{i.r(e),i.d(e,{cell_bot_ble_gui:()=>n});var a=i(65865);class s{constructor(){(0,a.e)(this),this.clear_connection(),this.is_little_endian=!0,this.verbose_return=!0,this.is_sim=!1,this.INPUT=1,this.OUTPUT=2,this.uuid={resetHardware:"60cb180e-838d-4f65-aff4-20b609b453f3",pinMode:"6ea6d9b6-7b7e-451c-ab45-221298e43562",digitalWrite:"d3423cf6-6da7-4dd8-a5ba-3c980c74bd6d",digitalRead:"c370bc79-11c1-4530-9f69-ab9d961aa497",ledcSetup:"6be57cea-3c46-4687-972b-03429d2acf9b",ledcAttachPin:"2cd63861-078f-436f-9ed9-79e57ec8b638",ledcDetachPin:"b9b0cabe-25d8-4965-9259-7d3b6330e940",ledcWrite:"40698030-a343-448f-a9ea-54b39b03bf81"}}clear_connection(){this.server&&this.server.disconnect(),this.server=void 0,this.service=void 0,this.characteristic={}}is_ble_supported(){return Boolean(navigator.bluetooth)}async has_ble(t){return!!this.is_sim||!(!this.is_ble_supported()||!await navigator.bluetooth.getAvailability())&&(navigator.bluetooth.addEventListener("availabilitychanged",t),!0)}paired(){return this.is_sim||this.server&&this.server.connected}async pair(t){if(this.is_sim)return;if(this.paired())return;this.clear_connection();let e="6c533793-9bd6-47d6-8d3b-c10a704b6b97";this.device=await navigator.bluetooth.requestDevice({filters:[{services:[e]}]}),this.device.addEventListener("gattserverdisconnected",t),this.device.addEventListener("gattserverdisconnected",this.clear_connection),this.server=await this.device.gatt.connect(),this.service=await this.server.getPrimaryService(e)}async invoke_Arduino(t,e,i){if(this.is_sim)return[0,""];await t.writeValue(i);let a,s=await t.readValue();switch(e){case 0:a=void 0;break;case 1:a=s.getUint8(0);break;case-1:a=s.getInt8(0);break;case 2:a=s.getUint16(0);break;case-2:a=s.getInt16(0,this.is_little_endian);break;case 4:a=s.getUint32(0,this.is_little_endian);break;case-4:a=s.getInt32(0,this.is_little_endian);break;case.4:a=s.getFloat32(0,this.is_little_endian),e=4;break;case.8:a=s.getFloat64(0,this.is_little_endian),e=8}let r=s.buffer.slice(e);if(r=String.fromCharCode.apply(null,new Uint8Array(r)),!this.verbose_return)throw`BLE protocol error: ${r}`;return[a,r]}async get_characteristic(t){return this.is_sim?t:t in this.characteristic?this.characteristic[t]:this.characteristic[t]=await this.service.getCharacteristic(this.uuid[t])}async resetHardware(){return this.invoke_Arduino(await this.get_characteristic("resetHardware"),0,new Uint8Array([1]))}async pinMode(t,e){return this.invoke_Arduino(await this.get_characteristic("pinMode"),0,new Uint8Array([t,e]))}async digitalWrite(t,e){return this.invoke_Arduino(await this.get_characteristic("digitalWrite"),0,new Uint8Array([t,e]))}async digitalRead(t){return this.invoke_Arduino(await this.get_characteristic("digitalRead"),1,new Uint8Array([t]))}async ledcSetup(t,e,i){let a=new ArrayBuffer(11),s=new DataView(a);return s.setUint8(0,t),s.setFloat64(1,e,this.is_little_endian),s.setUint8(10,i),this.invoke_Arduino(await this.get_characteristic("ledcSetup"),.8,a)}async ledcAttachPin(t,e){return this.invoke_Arduino(await this.get_characteristic("ledcAttachPin"),0,new Uint8Array([t,e]))}async ledcWrite(t,e){let i=new ArrayBuffer(5),a=new DataView(i);return a.setUint8(0,t),a.setUint32(1,e,this.is_little_endian),this.invoke_Arduino(await this.get_characteristic("ledcWrite"),0,i)}async ledcDetachPin(t){return this.invoke_Arduino(await this.get_characteristic("ledcDetachPin"),0,new Uint8Array([t]))}}class r{constructor(t,e){(0,a.e)(this),this.ble_pair_button=document.getElementById(t),this.ble_pair_status=document.getElementById(e),this.ble_pair_button&&this.ble_pair_status&&(this.cell_bot_ble=new s,this.cell_bot_ble.has_ble(this.on_availability_changed).then(this.on_ble_available),this.ble_pair_button.addEventListener("click",(t=>{this.async_on_pair_clicked()})))}async async_on_pair_clicked(){if(this.cell_bot_ble.paired())this.cell_bot_ble.server.disconnect();else{this.ble_pair_button.disabled=!0,this.ble_pair_status.innerHTML="Pairing...";try{await this.cell_bot_ble.pair(this.on_disconnect),this.ble_pair_status.innerHTML=`Paired to ${this.cell_bot_ble.device.name}.`,this.ble_pair_button.innerHTML="Disconnect"}catch(t){throw this.ble_pair_status.innerHTML="Unable to pair.",t}finally{this.ble_pair_button.disabled=!1}}}on_availability_changed(t){console.log(t)}on_ble_available(t){this.ble_pair_button.disabled=!t,this.ble_pair_status.innerHTML=t?"Not connected.":"Not available."}on_disconnect(){this.ble_pair_status.innerHTML="Disconnected.",this.ble_pair_button.innerHTML="Pair"}}let n;$(document).ready((function(){n=new r("ble_pair_button","ble_pair_status")}))},65865:(t,e,i)=>{i.d(e,{e:()=>s});const a=t=>{const e=new Set;do{for(const i of Reflect.ownKeys(t))e.add([t,i])}while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};function s(t){for(const[e,i]of a(t.constructor.prototype)){if("constructor"===i)continue;const a=Reflect.getOwnPropertyDescriptor(e,i);a&&"function"==typeof a.value&&(t[i]=t[i].bind(t))}}}}]);
|
|
//# sourceMappingURL=817.3438cd0f1b0f98bc.js.map
|