diff options
author | Simone <26844016+simonebortolin@users.noreply.github.com> | 2023-01-16 21:44:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-16 21:44:44 +0100 |
commit | ed42ac7a996ef49249b67594635d800aae7dc711 (patch) | |
tree | 15877470eef469fdb2d990bc8dcaa74a7e505350 /_ont | |
parent | Create a unique page for Luna SDK 1.9 based ONT and add odi rtk DFP 34G (#107) (diff) | |
download | hack-gpon.github.io-ed42ac7a996ef49249b67594635d800aae7dc711.tar hack-gpon.github.io-ed42ac7a996ef49249b67594635d800aae7dc711.tar.gz hack-gpon.github.io-ed42ac7a996ef49249b67594635d800aae7dc711.tar.bz2 hack-gpon.github.io-ed42ac7a996ef49249b67594635d800aae7dc711.tar.lz hack-gpon.github.io-ed42ac7a996ef49249b67594635d800aae7dc711.tar.xz hack-gpon.github.io-ed42ac7a996ef49249b67594635d800aae7dc711.tar.zst hack-gpon.github.io-ed42ac7a996ef49249b67594635d800aae7dc711.zip |
Diffstat (limited to '_ont')
-rw-r--r-- | _ont/ont-huawei-ma5671a-ymodem.md | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/_ont/ont-huawei-ma5671a-ymodem.md b/_ont/ont-huawei-ma5671a-ymodem.md new file mode 100644 index 0000000..9756dd0 --- /dev/null +++ b/_ont/ont-huawei-ma5671a-ymodem.md @@ -0,0 +1,206 @@ +--- +title: Root Procedure for Huawei MA5671A (flash firmware) +has_children: false +parent: Huawei MA5671A +layout: default +--- + +<div class="modal" data-jtd-modal="flash-modal" data-jtd-modal-backdrop="static" id="flash-modal"> + <div class="modal-content"> + <div class="modal-header"> + <span class="close">×</span> + <h2>Flash firmware</h2> + </div> + <form id="flash-form" class="p-4" novalidate> + <div class="form-floating mb-3"> + <input type="file" class="form-control" placeholder="Flash MTD" name="flash-mtd" id="flash-mtd" required> + <label for="flash-mtd">Flash MTD</label> + </div> + <div class="mb-3 form-check"> + <input type="checkbox" class="form-check-input" id="baud-rate-oc" name="baud-rate-oc"> + <label class="form-check-label" for="baud-rate-oc">230400 baud rate, do not enable unless told to do so</label> + </div> + <div class="form-check"> + <input class="form-check-input" type="radio" name="image" id="image0" value="image0"> + <label class="form-check-label" for="image0"> + Image 0 + </label> + </div> + <div class="form-check"> + <input class="form-check-input" type="radio" name="image" id="image1" value="image1"> + <label class="form-check-label" for="image1"> + Image 1 + </label> + </div> + <div class="mb-3"> + <input type="submit" class="btn btn-primary" value="Flash!"> + </div> + <progress id="flash-progress" value="0" max="100"></progress> + <p id="flash-text-step"></p> + </form> + </div> +</div> + +<button id="flash-start-button" class="btn btn-blue" data-jtd-toogle="modal" data-jtd-target="#flash-modal">Start flash!</button> + +<script type="text/javascript" src="/assets/js/xymini.js"></script> +<script type="text/javascript" src="/assets/js/rootLantiq.js"></script> +<script type="text/javascript" src="/assets/js/serialUtil.js"></script> +<script> + const acontroller = new AbortController(); + const cs = acontroller.signal; + let flashModal = document.getElementById("flash-modal"); + let flashForm = document.getElementById("flash-form"); + let flashProgress = document.getElementById("flash-progress"); + let flashTextStep = document.getElementById("flash-text-step"); + flashModal.addEventListener('modal-jtd-close', async function(event) { + acontroller.abort(); + }); + flashModal.addEventListener('modal-jtd-open', async function(event) { + flash({signal: cs}); + }); + function initTextStep() { + flashTextStep.textContent = ""; + flashTextStep.classList.remove('success'); + flashTextStep.classList.remove('error'); + } + function pause(message) { + flashTextStep.textContent = message; + } + function loading(message) { + flashTextStep.textContent = message; + } + function showError(message) { + flashTextStep.textContent = message; + flashTextStep.classList.add('error'); + flashTextStep.classList.remove('success'); + } + function showSuccess(message) { + flashTextStep.textContent = message; + flashTextStep.classList.add('success'); + flashTextStep.classList.remove('error'); + } + async function flash({ signal } = {}) { + initTextStep(); + let port; + try { + port = await navigator.serial.requestPort(); + } catch (err) { + showError(`Error: ${err.message}`); + console.log(`Error: ${err.message}\n`); + return; + } + if (!port) { + showError('Error: port not open'); + console.log('Error: port not open\n'); + return; + } + flashForm.addEventListener('submit', async function(event) { + [...flashForm.elements].map(function(e){return e.parentNode}).forEach(function(e){e.classList.toggle('was-validated', true)}); + if (!flashForm.checkValidity()) { + event.preventDefault(); + } else { + event.preventDefault(); + var fomrdata = new FormData(flashForm); + var file = fomrdata.get('flash-mtd'); + var image = fomrdata.get('image'); + var data = new Uint8Array(await file.arrayBuffer()); + console.log(data); + + /* Unlock U-Boot if needed and stop booting */ + let result = await lantiqRootUboot(port, "Huawei MA5671A", + (msg) => { + loading(msg); + console.log(msg); + }, + (err) => { + showError(err); + console.log(err); + } + ); + + if (!result) { + return; + } + + let baudrate = 115200; + if(fomrdata.has('baud-rate-oc')) { + let newBaudrate = 230400; + loading(`Changing baudrate to: ${newBaudrate}`); + + result = await changeBaudrate(port, newBaudrate, baudrate, + (err) => { + showError(err); + console.log(err); + } + ); + + if (result) { + baudrate = newBaudrate; + } else { + return; + } + } + + loading("Start sending image to the SFP..."); + result = await sendImageMtd(port, data, baudrate, + (err) => { + showError(err); + console.log(err); + }, + (byteTransfered) => { + const perc = (byteTransfered/data.length) * 100; + const percTrunc = Math.trunc(perc*100)/100; /* Two decimal trunc */ + flashProgress.value = perc; + loading(`Image transfer: ${percTrunc}% complete`) + } + ); + + if (!result) { + return; + } + + result = await waitEndImageLoad(port, baudrate, + (err) => { + showError(err); + console.log(err); + } + ); + + if (!result) { + return; + } + + if(fomrdata.has('baud-rate-oc')) { + let newBaudrate = 115200; + loading(`Restore baudrate to: ${newBaudrate}`); + + result = await changeBaudrate(port, newBaudrate, baudrate, + (err) => { + showError(err); + console.log(err); + } + ); + + if (result) { + baudrate = newBaudrate; + } else { + return; + } + } + + loading("Transfer complete, image flash in progress. DO NOT REMOVE the SFP!"); + result = await flashImageMtd(port, image, baudrate, + (err) => { + showError(err); + console.log(err); + } + ); + + if (result) { + showSuccess("Flash completed, now you can remove SFP"); + } + } + }); + }; +</script> |