From 9a29af42426c5b53a7a9a01eae72d51bcbd78cdd Mon Sep 17 00:00:00 2001 From: gouthamsk98 Date: Fri, 15 Nov 2024 10:56:06 +0000 Subject: [PATCH] deploy: 5e3a79d308b355f52032f7c73af8fc14ab36e84a --- assets/index-BtuymZ8s.js | 39 --------------------------------------- assets/index-DEa_AqGa.js | 39 +++++++++++++++++++++++++++++++++++++++ index.html | 2 +- 3 files changed, 40 insertions(+), 40 deletions(-) delete mode 100644 assets/index-BtuymZ8s.js create mode 100644 assets/index-DEa_AqGa.js diff --git a/assets/index-BtuymZ8s.js b/assets/index-BtuymZ8s.js deleted file mode 100644 index b463690..0000000 --- a/assets/index-BtuymZ8s.js +++ /dev/null @@ -1,39 +0,0 @@ -var p=Object.defineProperty;var A=(i,t,e)=>t in i?p(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var o=(i,t,e)=>A(i,typeof t!="symbol"?t+"":t,e);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const n of s)if(n.type==="childList")for(const a of n.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function e(s){const n={};return s.integrity&&(n.integrity=s.integrity),s.referrerPolicy&&(n.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?n.credentials="include":s.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function r(s){if(s.ep)return;s.ep=!0;const n=e(s);fetch(s.href,n)}})();class y{constructor(t){o(this,"baudrate",9600);o(this,"buffer_size",1024*1024);o(this,"traceLog","");o(this,"lastTraceTime",Date.now());o(this,"tracing",!0);o(this,"leftOver",new Uint8Array(0));o(this,"reader");o(this,"slipReaderEnabled",!0);o(this,"trace_dom_log",!0);this.device=t,console.log("SerialTransport intialized")}_appendBuffer(t,e){const r=new Uint8Array(t.byteLength+e.byteLength);return r.set(new Uint8Array(t),0),r.set(new Uint8Array(e),t.byteLength),r.buffer}async read(t=0,e=12){let r,s=this.leftOver;if(this.leftOver=new Uint8Array(0),this.slipReaderEnabled){const n=this.slipReader(s);if(n.length>0)return n;s=this.leftOver,this.leftOver=new Uint8Array(0)}if(this.device.readable==null)return this.leftOver;this.reader=this.device.readable.getReader();try{t>0&&(r=setTimeout(()=>{this.reader&&this.reader.cancel()},t));do{if(!this.reader)throw new Error("Reader is undefined");const{value:n,done:a}=await this.reader.read();if(a&&(this.leftOver=s,console.log("Timeout")),!n)break;s=new Uint8Array(this._appendBuffer(s.buffer,n.buffer))}while(s.length0&&clearTimeout(r),!this.reader)throw new Error("Reader is undefined");this.reader.releaseLock()}if(this.tracing&&(console.log("Read bytes"),this.trace(`Read ${s.length} bytes: ${this.hexConvert(s)}`)),this.slipReaderEnabled){const n=this.slipReader(s);return this.tracing&&(console.log("Slip reader results"),this.trace(`Slip Read ${n.length} bytes: ${this.hexConvert(n)}`)),n}return s}slipReader(t){let a=[],d=!1;for(const _ of t)_!==15968&&(_===219?d=!0:d?(_===220?a.push(15968):_===221&&a.push(219),d=!1):a.push(_));return new Uint8Array(a)}trace(t){const s=`${`TRACE ${(Date.now()-this.lastTraceTime).toFixed(3)}`} ${t}`;if(console.log(s),this.traceLog+=s+` -`,this.trace_dom_log){const n=document.querySelector("#traceLog");n&&(n.value=this.traceLog,n.scrollTop=n.scrollHeight)}}hexify(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("").padEnd(16," ")}hexConvert(t,e=!0){if(e&&t.length>16){let r="",s=t;for(;s.length>0;){const n=s.slice(0,16),a=String.fromCharCode(...n).split("").map(d=>d===" "||d>=" "&&d<="~"&&d!==" "?d:".").join("");s=s.slice(16),r+=` - ${this.hexify(n.slice(0,8))} ${this.hexify(n.slice(8))} | ${a}`}return r}else return this.hexify(t)}debug(t,e,r=!0,s=!0,n="#console"){if(r&&console.log(t,e),s){const a=document.querySelector(`${n}`);a&&(a.value+=t+` -`,a.scrollTop=a.scrollHeight)}}async sleep(t){return new Promise(e=>setTimeout(e,t))}async connect(t=this.baudrate){try{await this.device.open({baudRate:t,bufferSize:this.buffer_size}),this.debug("Device Connected"),this.leftOver=new Uint8Array(0)}catch(e){this.debug("Error in connect",e)}}async disconnect(){try{await this.device.close(),this.debug("Device Disconnected")}catch(t){this.debug("Error in disconnect",t)}}async send(t){if(this.device.writable){const e=this.device.writable.getWriter();await e.write(t),this.tracing&&this.trace(`Write ${t.length} bytes: ${this.hexConvert(t)}`),e.releaseLock()}}intelHexToUint8Array(t){const e=t.trim().split(` -`),r=[];return e.forEach(s=>{if(s.startsWith(":")){const n=parseInt(s.substr(1,2),16),a=9,d=a+n*2;for(let _=a;_0&&(e=setTimeout(()=>{this.reader&&this.reader.cancel()},t)),!this.reader)throw new Error("Reader is undefined");const{value:r,done:s}=await this.reader.read();return console.log("Raw Read bytes",r),s?r||new Uint8Array(0):(this.tracing&&(console.log("Raw Read bytes"),this.trace(`Read ${r.length} bytes: ${this.hexConvert(r)}`)),r)}finally{if(t>0&&clearTimeout(e),!this.reader)throw new Error("Reader is undefined");this.reader.releaseLock()}}}var h=(i=>(i[i.ALIGN_DEFAULT=0]="ALIGN_DEFAULT",i[i.ALIGN_TOP_LEFT=1]="ALIGN_TOP_LEFT",i[i.ALIGN_TOP_MID=2]="ALIGN_TOP_MID",i[i.ALIGN_TOP_RIGHT=3]="ALIGN_TOP_RIGHT",i[i.ALIGN_BOTTOM_LEFT=4]="ALIGN_BOTTOM_LEFT",i[i.ALIGN_BOTTOM_MED=5]="ALIGN_BOTTOM_MED",i[i.ALIGN_BOTTOM_RIGHT=6]="ALIGN_BOTTOM_RIGHT",i[i.ALIGN_LEFT_MID=7]="ALIGN_LEFT_MID",i[i.ALIGN_RIGHT_MID=8]="ALIGN_RIGHT_MID",i[i.ALIGN_CENTER=9]="ALIGN_CENTER",i))(h||{}),u=(i=>(i[i.BSL_ACK=0]="BSL_ACK",i[i.BSL_ERROR_HEADER_INCORRECT=81]="BSL_ERROR_HEADER_INCORRECT",i[i.BSL_ERROR_CHECKSUM_INCORRECT=82]="BSL_ERROR_CHECKSUM_INCORRECT",i[i.BSL_ERROR_PACKET_SIZE_ZERO=83]="BSL_ERROR_PACKET_SIZE_ZERO",i[i.BSL_ERROR_PACKET_SIZE_TOO_BIG=84]="BSL_ERROR_PACKET_SIZE_TOO_BIG",i[i.BSL_ERROR_UNKNOWN_ERROR=85]="BSL_ERROR_UNKNOWN_ERROR",i[i.BSL_ERROR_UNKNOWN_BAUD_RATE=86]="BSL_ERROR_UNKNOWN_BAUD_RATE",i))(u||{});class c{static softwareCRC(t,e){let r=4294967295;for(let s=0;s>>1^this.CRC32_POLYNOMIAL&d}}return r=r>>>0,new Uint8Array([r&255,r>>>8&255,r>>>16&255,r>>>24&255])}static async getFrameRaw(t){switch(t.type){case"Connection":{const e=this.softwareCRC(new Uint8Array([this.CONNECTION]),1);return new Uint8Array([this.HEADER,1,0,this.CONNECTION,...e])}case"StartApp":{const e=this.softwareCRC(new Uint8Array([this.START_APP]),1);return new Uint8Array([this.HEADER,1,0,this.START_APP,...e])}case"GetDeviceInfo":{const e=this.softwareCRC(new Uint8Array([this.GET_DEVICE_INFO]),1);return new Uint8Array([this.HEADER,1,0,this.GET_DEVICE_INFO,...e])}case"MassErase":{const e=this.softwareCRC(new Uint8Array([this.MASS_ERASE]),1);return new Uint8Array([this.HEADER,1,0,this.MASS_ERASE,...e])}case"ProgramData":{const e=t.data,r=[t.start_address>>24&255,t.start_address>>16&255,t.start_address>>8&255,t.start_address&255],s=e.length+4+1,n=this.softwareCRC(new Uint8Array([this.PROGRAM_DATA,...r,...e]),s);return new Uint8Array([this.HEADER,s&255,s>>8,this.PROGRAM_DATA,...r,...e,...n])}case"UnlockBootloader":{const e=t.data;if(e.length!=32)throw new Error("Data length should be 32");const r=e.length+1,s=this.softwareCRC(new Uint8Array([this.UNLOCK_BOOTLOADER,...e]),r);return new Uint8Array([this.HEADER,r&255,r>>8,this.UNLOCK_BOOTLOADER,...e,...s])}case"MemoryRead":{const e=t.data;if(e.length!=4)throw new Error("Data length should be 4");const r=[t.start_address>>24&255,t.start_address>>16&255,t.start_address>>8&255,t.start_address&255],s=e.length+4+1,n=this.softwareCRC(new Uint8Array([this.MEMORY_READ,...r,...e]),s);return new Uint8Array([this.HEADER,s&255,s>>8,this.MEMORY_READ,...r,...e,...n])}default:throw new Error("Unimplemented command")}}static getResponse(t,e){switch(e.type){case"Connection":case"StartApp":return{type:e.type,response:t[0]};case"MassErase":case"ProgramData":case"UnlockBootloader":return{type:e.type,response:t[5]};case"GetDeviceInfo":return{type:e.type,response:t[5],CMD_interpreter_version:t[this.OFFSET_BYTE+2]<<8|t[this.OFFSET_BYTE+1],build_id:t[this.OFFSET_BYTE+4]<<8|t[this.OFFSET_BYTE+3],app_version:t[this.OFFSET_BYTE+8]<<24|t[this.OFFSET_BYTE+7]<<16|t[this.OFFSET_BYTE+6]<<8|t[this.OFFSET_BYTE+5],active_plugin_interface_version:t[this.OFFSET_BYTE+10]<<8|t[this.OFFSET_BYTE+9],BSL_max_buffer_size:t[this.OFFSET_BYTE+12]<<8|t[this.OFFSET_BYTE+11],BSL_buffer_start_address:t[this.OFFSET_BYTE+16]<<24|t[this.OFFSET_BYTE+15]<<16|t[this.OFFSET_BYTE+14]<<8|t[this.OFFSET_BYTE+13],BCR_config_id:t[this.OFFSET_BYTE+20]<<24|t[this.OFFSET_BYTE+19]<<16|t[this.OFFSET_BYTE+18]<<8|t[this.OFFSET_BYTE+17],BSL_config_id:t[this.OFFSET_BYTE+24]<<24|t[this.OFFSET_BYTE+23]<<16|t[this.OFFSET_BYTE+22]<<8|t[this.OFFSET_BYTE+21]};default:throw new Error("Unimplemented command")}}}o(c,"HEADER",128),o(c,"CONNECTION",18),o(c,"UNLOCK_BOOTLOADER",33),o(c,"FLASH_RANGE_ERASE",35),o(c,"MASS_ERASE",21),o(c,"PROGRAM_DATA",32),o(c,"PROGRAM_DATA_FAST",36),o(c,"MEMORY_READ",41),o(c,"FACTORY_RESET",48),o(c,"GET_DEVICE_INFO",25),o(c,"STANDALONE_VERIFY",49),o(c,"START_APP",64),o(c,"CRC32_POLYNOMIAL",3988292384),o(c,"INITIAL_SEED",4294967295),o(c,"OFFSET_BYTE",4);class L extends y{constructor(e){super(e);o(this,"BSL_TRY",0);o(this,"BSL_TRY_MAX",10);o(this,"DEFAULT_TIMEOUT",2e3);o(this,"conn_established",!1);o(this,"FLASH_START_ADDRESS",0);o(this,"FLASH_MAX_BUFFER_SIZE",0);o(this,"BSL_PW_RESET",[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]);o(this,"MEMORY_READ_RESPONSE",48);o(this,"DEVICE_INFO_RESPONSE",49);o(this,"STANDALONE_VERIFY_RESPONSE",50);o(this,"MESSAGE_RESPONSE",59);o(this,"ERROR_RESPONSE",58);o(this,"ESP_CMD",{BSL_ENBL:["B","S","L"],OLED_CLR:["O","L","D","R","S","T"],OLED_ON:["O","L","D","O","N"],OLED_OFF:["O","L","D","O","F","F"],OLED_PRINT:["O","L","D","W","R","T"]})}sa2a(e){let r=new Uint8Array(e.length);for(let s=0;s{if(E&&l){l.disconnect(),i.innerHTML="Connect",E=!1;return}navigator.serial.requestPort({filters:S}).then(async t=>{l=await new L(t),await l.connect(),i.innerHTML="disconnect",E=!0}).catch(t=>{console.error(t),l.debug("Error Connecting"),w.disconnect(),i.innerHTML="Connect",E=!1})})}function F(i){i.addEventListener("click",async()=>{if(!E){l.debug("Please Connect First");return}i.innerHTML="Erasing...";try{await l.mass_earse()}catch(t){console.log(t),l.debug("Error Erasing")}i.innerHTML="Mass Erase"})}function O(i){i.addEventListener("click",async()=>{if(!E){l.debug("Please Connect First");return}if(!f){l.debug("Please upload a .Hex file first");return}i.innerHTML="Flashing...";try{await l.program_data(f),l.debug("Flashing Done")}catch{l.debug("Error Flashing")}i.innerHTML="Flash"})}function I(i){i.addEventListener("click",async()=>{if(!E){l.debug("Please Connect First");return}i.innerHTML="Verifying...";try{await l.read_memory()}catch(t){console.log(t),l.debug("Error Verifying")}i.innerHTML="Verify"})}function R(i){return new Promise((t,e)=>{const r=new FileReader;r.onload=()=>t(r.result),r.onerror=e,r.readAsText(i)})}function C(i){i.addEventListener("change",async t=>{f="";const e=t.target.files[0];e&&e.name.endsWith(".hex")?(f=await R(e),console.log(f)):l.debug("Please upload a valid .hex file")})}function B(i){i.addEventListener("click",async()=>{if(!E){l.debug("Please Connect First");return}i.innerHTML="Resting...",await l.start_app(),i.innerHTML="Reset"})}function v(i){i.addEventListener("click",async()=>{if(!E){l.debug("Please Connect First");return}i.innerHTML="Getting Device Info...";try{await l.establish_conn()}catch(t){console.log(t),l.debug("Error Getting Device Info")}i.innerHTML="Get Device Info"})}function M(i,t,e){i.addEventListener("dragover",r=>{r.preventDefault(),i.style.borderColor="#646cff"}),i.addEventListener("dragleave",()=>{i.style.borderColor="#ccc"}),i.addEventListener("drop",async r=>{if(r.preventDefault(),i.style.borderColor="#ccc",!r.dataTransfer)return;const s=r.dataTransfer.files;s.length>0&&(e.style.display="block",t.files=s,s&&s[0].name.endsWith(".hex")?(f=await R(s[0]),console.log(f)):l.debug("Please upload a valid .hex file"))})}document.querySelector("#app").innerHTML=` -

MSPMO Flasher via UART

-

Supported Browsers: Chrome, Edge

-
-
- - -
- Drag and drop your file here -
-

- Enable Trace Log - - - - - - -
-
-

Trace Log

- -
-
-`;const g=document.getElementById("toggleTraceLog"),T=document.getElementById("trace");console.log("trace",T,g);g&&T&&g.addEventListener("change",function(){T.style.display=="none"?T.style.display="inline":T.style.display="none"});b(document.querySelector("#connect"));v(document.querySelector("#getDeviceInfo"));F(document.querySelector("#erase"));O(document.querySelector("#flash"));C(document.querySelector("#myfile"));B(document.querySelector("#reset"));I(document.querySelector("#verify"));M(document.querySelector("#dropZone"),document.querySelector("#myfile"),document.querySelector("#dropMessage")); diff --git a/assets/index-DEa_AqGa.js b/assets/index-DEa_AqGa.js new file mode 100644 index 0000000..b093ade --- /dev/null +++ b/assets/index-DEa_AqGa.js @@ -0,0 +1,39 @@ +var p=Object.defineProperty;var A=(i,e,t)=>e in i?p(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var o=(i,e,t)=>A(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const n of s)if(n.type==="childList")for(const a of n.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function t(s){const n={};return s.integrity&&(n.integrity=s.integrity),s.referrerPolicy&&(n.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?n.credentials="include":s.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function r(s){if(s.ep)return;s.ep=!0;const n=t(s);fetch(s.href,n)}})();class y{constructor(e){o(this,"baudrate",9600);o(this,"buffer_size",1024*1024);o(this,"traceLog","");o(this,"lastTraceTime",Date.now());o(this,"tracing",!0);o(this,"leftOver",new Uint8Array(0));o(this,"reader");o(this,"slipReaderEnabled",!0);o(this,"trace_dom_log",!0);this.device=e,console.log("SerialTransport intialized")}_appendBuffer(e,t){const r=new Uint8Array(e.byteLength+t.byteLength);return r.set(new Uint8Array(e),0),r.set(new Uint8Array(t),e.byteLength),r.buffer}async read(e=0,t=12){let r,s=this.leftOver;if(this.leftOver=new Uint8Array(0),this.slipReaderEnabled){const n=this.slipReader(s);if(n.length>0)return n;s=this.leftOver,this.leftOver=new Uint8Array(0)}if(this.device.readable==null)return this.leftOver;this.reader=this.device.readable.getReader();try{e>0&&(r=setTimeout(()=>{this.reader&&this.reader.cancel()},e));do{if(!this.reader)throw new Error("Reader is undefined");const{value:n,done:a}=await this.reader.read();if(a&&(this.leftOver=s,console.log("Timeout")),!n)break;s=new Uint8Array(this._appendBuffer(s.buffer,n.buffer))}while(s.length0&&clearTimeout(r),!this.reader)throw new Error("Reader is undefined");this.reader.releaseLock()}if(this.tracing&&(console.log("Read bytes"),this.trace(`Read ${s.length} bytes: ${this.hexConvert(s)}`)),this.slipReaderEnabled){const n=this.slipReader(s);return this.tracing&&(console.log("Slip reader results"),this.trace(`Slip Read ${n.length} bytes: ${this.hexConvert(n)}`)),n}return s}slipReader(e){let a=[],c=!1;for(const E of e)E!==15968&&(E===219?c=!0:c?(E===220?a.push(15968):E===221&&a.push(219),c=!1):a.push(E));return new Uint8Array(a)}trace(e){const s=`${`TRACE ${(Date.now()-this.lastTraceTime).toFixed(3)}`} ${e}`;if(console.log(s),this.traceLog+=s+` +`,this.trace_dom_log){const n=document.querySelector("#traceLog");n&&(n.value=this.traceLog,n.scrollTop=n.scrollHeight)}}hexify(e){return Array.from(e).map(t=>t.toString(16).padStart(2,"0")).join("").padEnd(16," ")}hexConvert(e,t=!0){if(t&&e.length>16){let r="",s=e;for(;s.length>0;){const n=s.slice(0,16),a=String.fromCharCode(...n).split("").map(c=>c===" "||c>=" "&&c<="~"&&c!==" "?c:".").join("");s=s.slice(16),r+=` + ${this.hexify(n.slice(0,8))} ${this.hexify(n.slice(8))} | ${a}`}return r}else return this.hexify(e)}debug(e,t,r=!0,s=!0,n="#console"){if(r&&console.log(e,t),s){const a=document.querySelector(`${n}`);a&&(a.value+=e+` +`,a.scrollTop=a.scrollHeight)}}async sleep(e){return new Promise(t=>setTimeout(t,e))}async connect(e=this.baudrate){try{await this.device.open({baudRate:e,bufferSize:this.buffer_size}),this.debug("Device Connected"),this.leftOver=new Uint8Array(0)}catch(t){this.debug("Error in connect",t)}}async disconnect(){try{await this.device.close(),this.debug("Device Disconnected")}catch(e){this.debug("Error in disconnect",e)}}async send(e){if(this.device.writable){const t=this.device.writable.getWriter();await t.write(e),this.tracing&&this.trace(`Write ${e.length} bytes: ${this.hexConvert(e)}`),t.releaseLock()}}mergeSections(e){e.sort((a,c)=>a.offset-c.offset);const t=e[0].offset,s=e[e.length-1].offset+e[e.length-1].value.length-t,n=new Uint8Array(s);for(const a of e){const c=a.offset-t;n.set(a.value,c)}return n}async readIHex(e){console.log("read intel hex");const t=[];let r=0;const s=e.split(` +`);for(const n of s)if(n.startsWith(":")){const a=this.parseIHexRecord(n);switch(a.type){case"00":const c=r+a.offset;t.push({offset:c,value:a.data});break;case"01":break;case"02":r=a.address*16;break;case"03":break;case"04":r=a.address<<16;break}}return this.mergeSections(t)}parseIHexRecord(e){const t=parseInt(e.substr(1,2),16),r=parseInt(e.substr(3,4),16),s=e.substr(7,2),n=new Uint8Array(t);for(let c=0;c0&&(t=setTimeout(()=>{this.reader&&this.reader.cancel()},e)),!this.reader)throw new Error("Reader is undefined");const{value:r,done:s}=await this.reader.read();return console.log("Raw Read bytes",r),s?r||new Uint8Array(0):(this.tracing&&(console.log("Raw Read bytes"),this.trace(`Read ${r.length} bytes: ${this.hexConvert(r)}`)),r)}finally{if(e>0&&clearTimeout(t),!this.reader)throw new Error("Reader is undefined");this.reader.releaseLock()}}}var _=(i=>(i[i.ALIGN_DEFAULT=0]="ALIGN_DEFAULT",i[i.ALIGN_TOP_LEFT=1]="ALIGN_TOP_LEFT",i[i.ALIGN_TOP_MID=2]="ALIGN_TOP_MID",i[i.ALIGN_TOP_RIGHT=3]="ALIGN_TOP_RIGHT",i[i.ALIGN_BOTTOM_LEFT=4]="ALIGN_BOTTOM_LEFT",i[i.ALIGN_BOTTOM_MED=5]="ALIGN_BOTTOM_MED",i[i.ALIGN_BOTTOM_RIGHT=6]="ALIGN_BOTTOM_RIGHT",i[i.ALIGN_LEFT_MID=7]="ALIGN_LEFT_MID",i[i.ALIGN_RIGHT_MID=8]="ALIGN_RIGHT_MID",i[i.ALIGN_CENTER=9]="ALIGN_CENTER",i))(_||{}),f=(i=>(i[i.BSL_ACK=0]="BSL_ACK",i[i.BSL_ERROR_HEADER_INCORRECT=81]="BSL_ERROR_HEADER_INCORRECT",i[i.BSL_ERROR_CHECKSUM_INCORRECT=82]="BSL_ERROR_CHECKSUM_INCORRECT",i[i.BSL_ERROR_PACKET_SIZE_ZERO=83]="BSL_ERROR_PACKET_SIZE_ZERO",i[i.BSL_ERROR_PACKET_SIZE_TOO_BIG=84]="BSL_ERROR_PACKET_SIZE_TOO_BIG",i[i.BSL_ERROR_UNKNOWN_ERROR=85]="BSL_ERROR_UNKNOWN_ERROR",i[i.BSL_ERROR_UNKNOWN_BAUD_RATE=86]="BSL_ERROR_UNKNOWN_BAUD_RATE",i))(f||{});class l{static softwareCRC(e,t){let r=4294967295;for(let s=0;s>>1^this.CRC32_POLYNOMIAL&c}}return r=r>>>0,new Uint8Array([r&255,r>>>8&255,r>>>16&255,r>>>24&255])}static async getFrameRaw(e){switch(e.type){case"Connection":{const t=this.softwareCRC(new Uint8Array([this.CONNECTION]),1);return new Uint8Array([this.HEADER,1,0,this.CONNECTION,...t])}case"StartApp":{const t=this.softwareCRC(new Uint8Array([this.START_APP]),1);return new Uint8Array([this.HEADER,1,0,this.START_APP,...t])}case"GetDeviceInfo":{const t=this.softwareCRC(new Uint8Array([this.GET_DEVICE_INFO]),1);return new Uint8Array([this.HEADER,1,0,this.GET_DEVICE_INFO,...t])}case"MassErase":{const t=this.softwareCRC(new Uint8Array([this.MASS_ERASE]),1);return new Uint8Array([this.HEADER,1,0,this.MASS_ERASE,...t])}case"ProgramData":{const t=e.data,r=[e.start_address>>24&255,e.start_address>>16&255,e.start_address>>8&255,e.start_address&255],s=t.length+4+1,n=this.softwareCRC(new Uint8Array([this.PROGRAM_DATA,...r,...t]),s);return new Uint8Array([this.HEADER,s&255,s>>8,this.PROGRAM_DATA,...r,...t,...n])}case"UnlockBootloader":{const t=e.data;if(t.length!=32)throw new Error("Data length should be 32");const r=t.length+1,s=this.softwareCRC(new Uint8Array([this.UNLOCK_BOOTLOADER,...t]),r);return new Uint8Array([this.HEADER,r&255,r>>8,this.UNLOCK_BOOTLOADER,...t,...s])}case"MemoryRead":{const t=e.data;if(t.length!=4)throw new Error("Data length should be 4");const r=[e.start_address>>24&255,e.start_address>>16&255,e.start_address>>8&255,e.start_address&255],s=t.length+4+1,n=this.softwareCRC(new Uint8Array([this.MEMORY_READ,...r,...t]),s);return new Uint8Array([this.HEADER,s&255,s>>8,this.MEMORY_READ,...r,...t,...n])}default:throw new Error("Unimplemented command")}}static getResponse(e,t){switch(t.type){case"Connection":case"StartApp":return{type:t.type,response:e[0]};case"MassErase":case"ProgramData":case"UnlockBootloader":return{type:t.type,response:e[5]};case"GetDeviceInfo":return{type:t.type,response:e[5],CMD_interpreter_version:e[this.OFFSET_BYTE+2]<<8|e[this.OFFSET_BYTE+1],build_id:e[this.OFFSET_BYTE+4]<<8|e[this.OFFSET_BYTE+3],app_version:e[this.OFFSET_BYTE+8]<<24|e[this.OFFSET_BYTE+7]<<16|e[this.OFFSET_BYTE+6]<<8|e[this.OFFSET_BYTE+5],active_plugin_interface_version:e[this.OFFSET_BYTE+10]<<8|e[this.OFFSET_BYTE+9],BSL_max_buffer_size:e[this.OFFSET_BYTE+12]<<8|e[this.OFFSET_BYTE+11],BSL_buffer_start_address:e[this.OFFSET_BYTE+16]<<24|e[this.OFFSET_BYTE+15]<<16|e[this.OFFSET_BYTE+14]<<8|e[this.OFFSET_BYTE+13],BCR_config_id:e[this.OFFSET_BYTE+20]<<24|e[this.OFFSET_BYTE+19]<<16|e[this.OFFSET_BYTE+18]<<8|e[this.OFFSET_BYTE+17],BSL_config_id:e[this.OFFSET_BYTE+24]<<24|e[this.OFFSET_BYTE+23]<<16|e[this.OFFSET_BYTE+22]<<8|e[this.OFFSET_BYTE+21]};default:throw new Error("Unimplemented command")}}}o(l,"HEADER",128),o(l,"CONNECTION",18),o(l,"UNLOCK_BOOTLOADER",33),o(l,"FLASH_RANGE_ERASE",35),o(l,"MASS_ERASE",21),o(l,"PROGRAM_DATA",32),o(l,"PROGRAM_DATA_FAST",36),o(l,"MEMORY_READ",41),o(l,"FACTORY_RESET",48),o(l,"GET_DEVICE_INFO",25),o(l,"STANDALONE_VERIFY",49),o(l,"START_APP",64),o(l,"CRC32_POLYNOMIAL",3988292384),o(l,"INITIAL_SEED",4294967295),o(l,"OFFSET_BYTE",4);class L extends y{constructor(t){super(t);o(this,"BSL_TRY",0);o(this,"BSL_TRY_MAX",10);o(this,"DEFAULT_TIMEOUT",2e3);o(this,"conn_established",!1);o(this,"FLASH_START_ADDRESS",0);o(this,"FLASH_MAX_BUFFER_SIZE",0);o(this,"BSL_PW_RESET",[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]);o(this,"MEMORY_READ_RESPONSE",48);o(this,"DEVICE_INFO_RESPONSE",49);o(this,"STANDALONE_VERIFY_RESPONSE",50);o(this,"MESSAGE_RESPONSE",59);o(this,"ERROR_RESPONSE",58);o(this,"ESP_CMD",{BSL_ENBL:["B","S","L"],OLED_CLR:["O","L","D","R","S","T"],OLED_ON:["O","L","D","O","N"],OLED_OFF:["O","L","D","O","F","F"],OLED_PRINT:["O","L","D","W","R","T"]})}sa2a(t){let r=new Uint8Array(t.length);for(let s=0;s{if(h&&d){d.disconnect(),i.innerHTML="Connect",h=!1;return}navigator.serial.requestPort({filters:S}).then(async e=>{d=await new L(e),await d.connect(),i.innerHTML="disconnect",h=!0}).catch(e=>{console.error(e),d.debug("Error Connecting"),w.disconnect(),i.innerHTML="Connect",h=!1})})}function F(i){i.addEventListener("click",async()=>{if(!h){d.debug("Please Connect First");return}i.innerHTML="Erasing...";try{await d.mass_earse()}catch(e){console.log(e),d.debug("Error Erasing")}i.innerHTML="Mass Erase"})}function O(i){i.addEventListener("click",async()=>{if(!h){d.debug("Please Connect First");return}if(!u){d.debug("Please upload a .Hex file first");return}i.innerHTML="Flashing...";try{await d.program_data(u),d.debug("Flashing Done")}catch{d.debug("Error Flashing")}i.innerHTML="Flash"})}function I(i){i.addEventListener("click",async()=>{if(!h){d.debug("Please Connect First");return}i.innerHTML="Verifying...";try{await d.read_memory()}catch(e){console.log(e),d.debug("Error Verifying")}i.innerHTML="Verify"})}function R(i){return new Promise((e,t)=>{const r=new FileReader;r.onload=()=>e(r.result),r.onerror=t,r.readAsText(i,"utf-8")})}function C(i){i.addEventListener("change",async e=>{u="";const t=e.target.files[0];t&&t.name.endsWith(".hex")?(u=await R(t),console.log(u)):d.debug("Please upload a valid .hex file")})}function v(i){i.addEventListener("click",async()=>{if(!h){d.debug("Please Connect First");return}i.innerHTML="Resting...",await d.start_app(),i.innerHTML="Reset"})}function B(i){i.addEventListener("click",async()=>{if(!h){d.debug("Please Connect First");return}i.innerHTML="Getting Device Info...";try{await d.establish_conn()}catch(e){console.log(e),d.debug("Error Getting Device Info")}i.innerHTML="Get Device Info"})}function M(i,e,t){i.addEventListener("dragover",r=>{r.preventDefault(),i.style.borderColor="#646cff"}),i.addEventListener("dragleave",()=>{i.style.borderColor="#ccc"}),i.addEventListener("drop",async r=>{if(r.preventDefault(),i.style.borderColor="#ccc",!r.dataTransfer)return;const s=r.dataTransfer.files;s.length>0&&(t.style.display="block",e.files=s,s&&s[0].name.endsWith(".hex")?(u=await R(s[0]),console.log(u)):d.debug("Please upload a valid .hex file"))})}document.querySelector("#app").innerHTML=` +

MSPMO Flasher via UART

+

Supported Browsers: Chrome, Edge

+
+
+ + +
+ Drag and drop your file here +
+

+ Enable Trace Log + + + + + + +
+
+

Trace Log

+ +
+
+`;const g=document.getElementById("toggleTraceLog"),T=document.getElementById("trace");console.log("trace",T,g);g&&T&&g.addEventListener("change",function(){T.style.display=="none"?T.style.display="inline":T.style.display="none"});b(document.querySelector("#connect"));B(document.querySelector("#getDeviceInfo"));F(document.querySelector("#erase"));O(document.querySelector("#flash"));C(document.querySelector("#myfile"));v(document.querySelector("#reset"));I(document.querySelector("#verify"));M(document.querySelector("#dropZone"),document.querySelector("#myfile"),document.querySelector("#dropMessage")); diff --git a/index.html b/index.html index 29661cd..6cc9e26 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ MSPM0 Flasher - +