From b6cdc1a4b41234969ffca7f22b497c3dc65286df Mon Sep 17 00:00:00 2001 From: Cameron Clough Date: Wed, 1 Jan 2025 18:51:48 +0000 Subject: [PATCH] Revert QDL flashing (#77) * Revert QDL flashing Revert "fix linux unbind command (#63)" This reverts commit 786081d3a23a6c212ca472e6322b13a5affae266. Revert "fix reset by draining buffer (#64)" This reverts commit 0484fb07e5fd558423ec773a0a87fbc3d35f4eb6. Revert "no more fastboot!" This reverts commit d7e66f3aa54ee7f11977681cd49304e6d0ce0d01. Revert "unplug" This reverts commit cd654d15ea29ae1589e665169b0313613b662d6b. Revert "Fastboot -> QDL (#54)" This reverts commit 9d561c2e7ac850260dfbd957856f12d4e020b7f7. * post AGNOS 11 image --- README.md | 2 +- bun.lockb | Bin 226889 -> 227684 bytes package.json | 2 +- src/QDL/firehose.js | 293 ----------------- src/QDL/gpt.js | 255 --------------- src/QDL/{sdm845_fhprg.bin => programmer.bin} | Bin 679953 -> 678961 bytes src/QDL/qdl.js | 318 ------------------- src/QDL/sahara.js | 258 --------------- src/QDL/saharaDefs.js | 98 ------ src/QDL/sparse.js | 260 --------------- src/QDL/usblib.js | 140 -------- src/QDL/utils.js | 110 ------- src/QDL/xmlParser.js | 53 ---- src/app/Flash.jsx | 65 +--- src/app/index.jsx | 32 +- src/assets/zadig_create_new_device.png | Bin 13805 -> 11106 bytes src/assets/zadig_form.png | Bin 12389 -> 9582 bytes src/config.js | 3 - src/utils/{flash.js => fastboot.js} | 141 ++++---- 19 files changed, 110 insertions(+), 1920 deletions(-) delete mode 100644 src/QDL/firehose.js delete mode 100644 src/QDL/gpt.js rename src/QDL/{sdm845_fhprg.bin => programmer.bin} (65%) delete mode 100644 src/QDL/qdl.js delete mode 100644 src/QDL/sahara.js delete mode 100644 src/QDL/saharaDefs.js delete mode 100644 src/QDL/sparse.js delete mode 100644 src/QDL/usblib.js delete mode 100644 src/QDL/utils.js delete mode 100644 src/QDL/xmlParser.js rename src/utils/{flash.js => fastboot.js} (65%) diff --git a/README.md b/README.md index b2b463a..9059008 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ► [flash.comma.ai](https://flash.comma.ai) -This tool allows you to flash AGNOS onto your comma device. +This tool allows you to flash AGNOS onto your comma device. Uses a fork of [fastboot.js](https://github.com/kdrag0n/fastboot.js). ## Development diff --git a/bun.lockb b/bun.lockb index 17c17782afd7acc6f618818cf3a8ed4846ee6f48..f6df6cac3c993ce89b0d22fd1383de154254796a 100755 GIT binary patch delta 44272 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 delta 44072 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‹PJDA^3Ar7N>Sqq8y25m=l?7e&TkLy1FZHsUv;?uW)1G5hzn!La@Sla+k{ zVY`fVqhAa{gSJZ+qch9G4}S;b%Bx-Z49tf_`5LP|NHPgj_D;qYdb=2o1-i`|O%fFaF~^}? z!yFdC^?ipvzu)ETlLVq~O1Vko9sxC_UKxP5e|UW2kFvQTgN2QX10xKNHeB0Zzdo!o zim$1rRx!lM>$tsiN)@Ji8Rls6(v7iY@tA0FL==ctFD(Vdv!c^WbrZrR4B~2X5?7nt9$-+f3o5`rrH7vKM=TtyRQeP(O zRY6eNgCyV3sL8@PSrS593C6dM+@7CnnP)%|jH4`{!ni$c7xTj04a3?i^Uog3EEBLkI-YA;#dC$51Of5J^)jYC4REKyEp$51%GtJVw+wDrjbl-3^?ZO{8Fdn98>NghAk zM~MrNIO83L7E+iL(omNrn=X6JGKT!L2;DhDeu=SOKl#RqW7B=3cjTQJH!y;r#WfsM zSoA&7=|8sFMUN?nh;LCRYUU&jVS4L zcY^%PQSwgW)XcC#+0UWB%^Rf4H^X{Tc3tCCvYSdRLasCwqg%wBTPT?}^Jz#F(_aPs1m}aNJy{;U+!}JHyMTVOa&zq09~W zK%_)ixNrw5j36vb^wZA~;8=AL+{Vns_fQ(=TqtmNf zl+G%c9dyNcm_0xxQ3MeeW-x-#^Y^a@-@Lk$fjRD21!B|`pw=krNZHydxtQlbAy%sc zBVr9iMWeH2Ktd!B1QH2X!8Z&`VJkil?i-X*@znbIy2y(SM=-)IyNFaE!xjTa71S03 zx2^zv6vI-@c!5KkYRx}U{C$*LSumYnXvYX2ntSJ>J!j4YQo!z^LHZ{Kx6=V(^T1p3 z*s722*>kn}7AHDSNJv{9rbZN?%$J7c{obEE-Z5{jH>+rnZuw%OFx5rLbS5n)QSesW#-S~1HbjxgK zw)xQUS58_UJd9`Ns=K1O=(eeLt_RO0c)qxK*Go^o>-r(2uYUR+^`|NEa-Q0KS timeout) { - break; - } - } - rData = concatUint8Array([rData, tmp]); - } - - const resp = this.xml.getReponse(rData); - const status = this.getStatus(resp); - if ("rawmode" in resp) { - if (resp["rawmode"] == "false") { - let log = this.xml.getLog(rData); - return new response(status, rData, "", log) - } - } else { - if (status) { - if (containsBytes("log value=", rData)) { - let log = this.xml.getLog(rData); - return new response(status, rData, "", log); - } - return new response(status, rData); - } - } - return new response(true, rData); - } - - getLuns() { - return Array.from({length: this.cfg.maxlun}, (x, i) => i) - } - - async configure() { - const connectCmd = `` + - `` + - `` - - await this.xmlSend(connectCmd, false); - this.luns = this.getLuns(); - return true; - } - - async cmdReadBuffer(physicalPartitionNumber, startSector, numPartitionSectors) { - const data = `\n` - - let rsp = await this.xmlSend(data); - let resData = new Uint8Array(); - if (!rsp.resp) { - return rsp; - } else { - let bytesToRead = this.cfg.SECTOR_SIZE_IN_BYTES * numPartitionSectors; - while (bytesToRead > 0) { - let tmp = await this.cdc.read(Math.min(this.cdc.maxSize, bytesToRead)); - const size = tmp.length; - bytesToRead -= size; - resData = concatUint8Array([resData, tmp]); - } - - const wd = await this.waitForData(); - const info = this.xml.getLog(wd); - rsp = this.xml.getReponse(wd); - if ("value" in rsp) { - if (rsp["value"] !== "ACK") { - return new response(false, resData, info); - } else if ("rawmode" in rsp) { - if (rsp["rawmode"] === "false") { - return new response(true, resData); - } - } - } else { - console.error("Failed read buffer"); - return new response(false, resData, rsp[2]); - } - } - let resp = rsp["value"] === "ACK"; - return response(resp, resData, rsp[2]); - } - - async waitForData() { - let tmp = new Uint8Array(); - let timeout = 0; - - while (!containsBytes("response value", tmp)) { - let res = await this.cdc.read(); - if (compareStringToBytes("", res)) { - timeout += 1; - if (timeout === 4) { - break; - } - await sleep(20); - } - tmp = concatUint8Array([tmp, res]); - } - return tmp; - } - - async cmdProgram(physicalPartitionNumber, startSector, blob, onProgress=()=>{}) { - let total = blob.size; - let sparseformat = false; - - let sparseHeader = await Sparse.parseFileHeader(blob.slice(0, Sparse.FILE_HEADER_SIZE)); - if (sparseHeader !== null) { - sparseformat = true; - total = await Sparse.getSparseRealSize(blob, sparseHeader); - } - - let numPartitionSectors = Math.floor(total / this.cfg.SECTOR_SIZE_IN_BYTES); - if (total % this.cfg.SECTOR_SIZE_IN_BYTES !== 0) { - numPartitionSectors += 1; - } - - const data = `\n` + - `\n`; - let i = 0; - let bytesWritten = 0; - let rsp = await this.xmlSend(data); - - if (rsp.resp) { - for await (let split of Sparse.splitBlob(blob)) { - let offset = 0; - let bytesToWriteSplit = split.size; - - while (bytesToWriteSplit > 0) { - const wlen = Math.min(bytesToWriteSplit, this.cfg.MaxPayloadSizeToTargetInBytes); - let wdata = new Uint8Array(await readBlobAsBuffer(split.slice(offset, offset + wlen))); - if (wlen % this.cfg.SECTOR_SIZE_IN_BYTES !== 0) { - let fillLen = (Math.floor(wlen/this.cfg.SECTOR_SIZE_IN_BYTES) * this.cfg.SECTOR_SIZE_IN_BYTES) + - this.cfg.SECTOR_SIZE_IN_BYTES; - const fillArray = new Uint8Array(fillLen-wlen).fill(0x00); - wdata = concatUint8Array([wdata, fillArray]); - } - await this.cdc.write(wdata); - await this.cdc.write(new Uint8Array(0), null, true); - offset += wlen; - bytesWritten += wlen; - bytesToWriteSplit -= wlen; - - // Need this for sparse image when the data.length < MaxPayloadSizeToTargetInBytes - // Add ~2.4s to total flash time - if (sparseformat && bytesWritten < total) { - await this.cdc.write(new Uint8Array(0), null, true); - } - - if (i % 10 === 0) { - onProgress(bytesWritten/total); - } - i += 1; - } - } - - const wd = await this.waitForData(); - const response = this.xml.getReponse(wd); - if ("value" in response) { - if (response["value"] !== "ACK") { - return false; - } - } else { - return false; - } - } - - onProgress(1.0); - return true; - } - - async cmdErase(physicalPartitionNumber, startSector, numPartitionSectors) { - const data = `\n` + - `\n`; - let rsp = await this.xmlSend(data) - let bytesToWrite = this.cfg.SECTOR_SIZE_IN_BYTES * numPartitionSectors; - let empty = new Uint8Array(this.cfg.MaxPayloadSizeToTargetInBytes).fill(0); - - if (rsp.resp) { - while (bytesToWrite > 0) { - let wlen = Math.min(bytesToWrite, this.cfg.MaxPayloadSizeToTargetInBytes); - await this.cdc.write(empty.slice(0, wlen)); - bytesToWrite -= wlen; - await this.cdc.write(new Uint8Array(0)); - } - - const res = await this.waitForData(); - const response = this.xml.getReponse(res); - if ("value" in response) { - if (response["value"] !== "ACK") { - throw "Failed to erase: NAK"; - } - } else { - throw "Failed to erase no return value"; - } - } - return true; - } - - async cmdSetBootLunId(lun) { - const data = `\n` - const val = await this.xmlSend(data); - if (val.resp) { - console.log(`Successfully set bootID to lun ${lun}`); - return true; - } else { - throw `Firehose - Failed to set boot lun ${lun}`; - } - } - - async cmdReset() { - let data = ''; - let val = await this.xmlSend(data); - if (val.resp) { - console.log("Reset succeeded"); - // Drain log buffer - try { - await this.waitForData(); - } catch { - // Ignore any errors - } - return true; - } else { - throw "Firehose - Reset failed"; - } - } -} diff --git a/src/QDL/gpt.js b/src/QDL/gpt.js deleted file mode 100644 index 09a0640..0000000 --- a/src/QDL/gpt.js +++ /dev/null @@ -1,255 +0,0 @@ -import { containsBytes, bytes2Number } from "./utils" -import { buf as crc32 } from "crc-32" - -export const AB_FLAG_OFFSET = 6; -export const AB_PARTITION_ATTR_SLOT_ACTIVE = (0x1 << 2); -export const PART_ATT_PRIORITY_BIT = BigInt(48) -export const PART_ATT_ACTIVE_BIT = BigInt(50) -export const PART_ATT_ACTIVE_VAL = BigInt(0x1) << PART_ATT_ACTIVE_BIT - -const efiType = { - 0x00000000 : "EFI_UNUSED", - 0xEBD0A0A2 : "EFI_BASIC_DATA", -} - - -class structHelper { - constructor(data, pos = 0) { - this.pos = pos; - this.data = data; - } - - qword(littleEndian=true) { - const view = new DataView(this.data.slice(this.pos, this.pos+=8).buffer, 0); - return Number(view.getBigUint64(0, littleEndian)); - } - - dword(littleEndian=true) { - let view = new DataView(this.data.slice(this.pos, this.pos+=4).buffer, 0); - return view.getUint32(0, littleEndian); - } - - bytes(rlen=1) { - const dat = this.data.slice(this.pos, this.pos+=rlen); - return dat; - } - - toString(rlen=1) { - const dat = this.data.slice(this.pos, this.pos+=rlen); - return dat; - } -} - - -class gptHeader { - constructor(data) { - let sh = new structHelper(data); - this.signature = sh.bytes(8); - this.revision = sh.dword(); - this.headerSize = sh.dword(); - this.crc32 = sh.dword(); - this.reserved = sh.dword(); - this.currentLba = sh.qword(); - this.backupLba = sh.qword(); - this.firstUsableLba = sh.qword(); - this.lastUsableLba = sh.qword(); - this.diskGuid = sh.bytes(16); - this.partEntryStartLba = sh.qword(); - this.numPartEntries = sh.dword(); - this.partEntrySize = sh.dword(); - this.crc32PartEntries = sh.dword(); - } -} - - -export class gptPartition { - constructor(data) { - let sh = new structHelper(data) - this.type = sh.bytes(16); - this.unique = sh.bytes(16); - this.firstLba = sh.qword(); - this.lastLba = sh.qword(); - this.flags = sh.qword(); - this.name = sh.toString(72); - } - - create() { - let buffer = new ArrayBuffer(16 + 16 + 8 + 8 + 8 + 72); - let view = new DataView(buffer); - let offset = 0; - for (let i = 0; i < this.type.length; i++) { - view.setUint8(offset++, this.type[i], true); - } - for (let i = 0; i < this.unique.length; i++) { - view.setUint8(offset++, this.unique[i], true); - } - let tmp = [BigInt(this.firstLba), BigInt(this.lastLba), BigInt(this.flags)]; - for (let i = 0; i < 3; i++) { - view.setBigUint64(offset, tmp[i], true); - offset += 8; - } - for (let i = 0; i < 72; i++) { - view.setUint8(offset++, this.name[i]); - } - return new Uint8Array(view.buffer); - } -} - - -class partf { - firstLba = 0; - lastLba = 0; - flags = 0; - sector = 0; - sectors = 0; - entryOffset = 0; - type = null; - name = ""; - unique = new Uint8Array(); -} - - -export class gpt { - constructor() { - this.header = null; - this.sectorSize = null; - this.partentries = {}; - } - - parseHeader(gptData, sectorSize=512) { - return new gptHeader(gptData.slice(sectorSize, sectorSize + 0x5C)); - } - - parse(gptData, sectorSize=512) { - this.header = new gptHeader(gptData.slice(sectorSize, sectorSize + 0x5C)); - this.sectorSize = sectorSize; - - if (!containsBytes("EFI PART", this.header.signature)) { - return false; - } - - if (this.header.revision != 0x10000) { - console.error("Unknown GPT revision."); - return false; - } - - // mbr (even for backup gpt header to ensure offset consistency) + gpt header + part_table - const start = 2 * sectorSize; - - const entrySize = this.header.partEntrySize; - this.partentries = {}; - const numPartEntries = this.header.numPartEntries; - for (let idx = 0; idx < numPartEntries; idx++) { - const data = gptData.slice(start + (idx * entrySize), start + (idx * entrySize) + entrySize); - if (new DataView(data.slice(16,32).buffer, 0).getUint32(0, true) == 0) { - break; - } - - let partentry = new gptPartition(data); - let pa = new partf(); - const guid1 = new DataView(partentry.unique.slice(0, 0x4).buffer, 0).getUint32(0, true); - const guid2 = new DataView(partentry.unique.slice(0x4, 0x6).buffer, 0).getUint16(0, true); - const guid3 = new DataView(partentry.unique.slice(0x6, 0x8).buffer, 0).getUint16(0, true); - const guid4 = new DataView(partentry.unique.slice(0x8, 0xA).buffer, 0).getUint16(0, true); - const guid5 = Array.from(partentry.unique.subarray(0xA, 0x10)) - .map(byte => byte.toString(16).padStart(2, '0')) - .join(''); - pa.unique =`${guid1.toString(16).padStart(8, '0')}- - ${guid2.toString(16).padStart(4, '0')}- - ${guid3.toString(16).padStart(4, '0')}- - ${guid4.toString(16).padStart(4, '0')}- - ${guid5}`; - pa.sector = partentry.firstLba; - pa.sectors = partentry.lastLba - partentry.firstLba + 1; - pa.flags = partentry.flags; - pa.entryOffset = start + (idx * entrySize); - const typeOfPartentry = new DataView(partentry.type.slice(0, 0x4).buffer, 0).getUint32(0, true); - if (typeOfPartentry in efiType) { - pa.type = efiType[typeOfPartentry]; - } else { - pa.type = typeOfPartentry.toString(16); - } - let nullIndex = Array.from(partentry.name).findIndex((element, index) => index % 2 === 0 && element === 0); - let nameWithoutNull = partentry.name.slice(0, nullIndex); - let decodedName = new TextDecoder('utf-16').decode(nameWithoutNull); - pa.name = decodedName; - if (pa.type == "EFI_UNUSED") { - continue; - } - this.partentries[pa.name] = pa; - } - return true; - } - - fixGptCrc(data) { - const headerOffset = this.sectorSize; - const partentryOffset = 2 * this.sectorSize; - const partentrySize = this.header.numPartEntries * this.header.partEntrySize; - const partdata = Uint8Array.from(data.slice(partentryOffset, partentryOffset + partentrySize)); - let headerdata = Uint8Array.from(data.slice(headerOffset, headerOffset + this.header.headerSize)); - - let view = new DataView(new ArrayBuffer(4)); - view.setInt32(0, crc32(partdata), true); - headerdata.set(new Uint8Array(view.buffer), 0x58); - view.setInt32(0, 0, true); - headerdata.set(new Uint8Array(view.buffer) , 0x10); - view.setInt32(0, crc32(headerdata), true); - headerdata.set(new Uint8Array(view.buffer), 0x10); - - data.set(headerdata, headerOffset); - return data; - } -} - - -// 0x003a for inactive and 0x006f for active boot partitions. This follows fastboot standard -export function setPartitionFlags(flags, active, isBoot) { - let newFlags = BigInt(flags); - if (active) { - if (isBoot) { - newFlags = BigInt(0x006f) << PART_ATT_PRIORITY_BIT; - } else { - newFlags |= PART_ATT_ACTIVE_VAL; - } - } else { - if (isBoot) { - newFlags = BigInt(0x003a) << PART_ATT_PRIORITY_BIT; - } else { - newFlags &= ~PART_ATT_ACTIVE_VAL; - } - } - return Number(newFlags); -} - - -function checkHeaderCrc(gptData, guidGpt) { - const headerOffset = guidGpt.sectorSize; - const headerSize = guidGpt.header.headerSize; - const testGptData = guidGpt.fixGptCrc(gptData).buffer; - const testHeader = new Uint8Array(testGptData.slice(headerOffset, headerOffset + headerSize)); - - const headerCrc = guidGpt.header.crc32; - const testHeaderCrc = bytes2Number(testHeader.slice(0x10, 0x10 + 4)); - const partTableCrc = guidGpt.header.crc32PartEntries; - const testPartTableCrc = bytes2Number(testHeader.slice(0x58, 0x58 + 4)); - - return [(headerCrc !== testHeaderCrc) || (partTableCrc !== testPartTableCrc), partTableCrc]; -} - - -export function ensureGptHdrConsistency(gptData, backupGptData, guidGpt, backupGuidGpt) { - const partTableOffset = guidGpt.sectorSize * 2; - - const [primCorrupted, primPartTableCrc] = checkHeaderCrc(gptData, guidGpt); - const [backupCorrupted, backupPartTableCrc] = checkHeaderCrc(backupGptData, backupGuidGpt); - - const headerConsistency = primPartTableCrc === backupPartTableCrc; - if (primCorrupted || !headerConsistency) { - if (backupCorrupted) { - throw "Both primary and backup gpt headers are corrupted, cannot recover"; - } - gptData.set(backupGptData.slice(partTableOffset), partTableOffset); - gptData = guidGpt.fixGptCrc(gptData); - } - return gptData; -} diff --git a/src/QDL/sdm845_fhprg.bin b/src/QDL/programmer.bin similarity index 65% rename from src/QDL/sdm845_fhprg.bin rename to src/QDL/programmer.bin index c5b73bb89c67eff5c56d914e08d4504497bd0c74..d10d768abb363f8a3e1ed916feb53e368361a89d 100644 GIT binary patch delta 94661 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

j%MS2%Rs(2$X*mmH4 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 Ok)9fT;|FSgivM3Yqo1 { - this._connectResolve = resolve; - this._connectReject = reject; - }); - } - - async connectToSahara() { - while (!this.cdc.connected) { - await this.cdc?.connect(); - if (this.cdc.connected) { - console.log("QDL device detected"); - let resp = await runWithTimeout(this.sahara?.connect(), 10000); - if ("mode" in resp) { - this.mode = resp["mode"]; - console.log("Mode detected:", this.mode); - return resp; - } - } - } - return {"mode" : "error"}; - } - - async connect() { - try { - let resp = await this.connectToSahara(); - let mode = resp["mode"]; - if (mode === "sahara") { - await this.sahara?.uploadLoader(); - } else if (mode === "error") { - throw "Error connecting to Sahara"; - } - await this.firehose?.configure(); - this.mode = "firehose"; - } catch (error) { - if (this._connectReject !== null) { - this._connectReject(error); - this._connectResolve = null; - this._connectReject = null; - } - } - - if (this._connectResolve !== null) { - this._connectResolve(undefined); - this._connectResolve = null; - this._connectReject = null; - } - return true; - } - - async getGpt(lun, startSector=1) { - let resp; - resp = await this.firehose.cmdReadBuffer(lun, 0, 1); - if (!resp.resp) { - console.error(resp.error); - return [null, null]; - } - let data = concatUint8Array([resp.data, (await this.firehose.cmdReadBuffer(lun, startSector, 1)).data]); - let guidGpt = new gpt.gpt(); - const header = guidGpt.parseHeader(data, this.firehose.cfg.SECTOR_SIZE_IN_BYTES); - if (containsBytes("EFI PART", header.signature)) { - const partTableSize = header.numPartEntries * header.partEntrySize; - const sectors = Math.floor(partTableSize / this.firehose.cfg.SECTOR_SIZE_IN_BYTES); - data = concatUint8Array([data, (await this.firehose.cmdReadBuffer(lun, header.partEntryStartLba, sectors)).data]); - guidGpt.parse(data, this.firehose.cfg.SECTOR_SIZE_IN_BYTES); - return [guidGpt, data]; - } else { - throw "Error reading gpt header"; - } - } - - async detectPartition(partitionName, sendFull=false) { - const luns = this.firehose.luns; - for (const lun of luns) { - const [guidGpt, data] = await this.getGpt(lun); - if (guidGpt === null) { - break; - } else { - if (partitionName in guidGpt.partentries) { - return sendFull ? [true, lun, data, guidGpt] : [true, lun, guidGpt.partentries[partitionName]]; - } - } - } - return [false]; - } - - async flashBlob(partitionName, blob, onProgress=()=>{}) { - let startSector = 0; - let dp = await this.detectPartition(partitionName); - const found = dp[0]; - if (found) { - let lun = dp[1]; - const imgSize = blob.size; - let imgSectors = Math.floor(imgSize / this.firehose.cfg.SECTOR_SIZE_IN_BYTES); - if (imgSize % this.firehose.cfg.SECTOR_SIZE_IN_BYTES !== 0) { - imgSectors += 1; - } - if (partitionName.toLowerCase() !== "gpt") { - const partition = dp[2]; - if (imgSectors > partition.sectors) { - console.error("partition has fewer sectors compared to the flashing image"); - return false; - } - startSector = partition.sector; - console.log(`Flashing ${partitionName}...`); - if (await this.firehose.cmdProgram(lun, startSector, blob, (progress) => onProgress(progress))) { - console.log(`partition ${partitionName}: startSector ${partition.sector}, sectors ${partition.sectors}`); - } else { - throw `Error while writing ${partitionName}`; - } - } - } else { - throw `Can't find partition ${partitionName}`; - } - return true; - } - - async erase(partitionName) { - const luns = this.firehose.luns; - for (const lun of luns) { - let [guidGpt] = await this.getGpt(lun); - if (partitionName in guidGpt.partentries) { - const partition = guidGpt.partentries[partitionName]; - console.log(`Erasing ${partitionName}...`); - await this.firehose.cmdErase(lun, partition.sector, partition.sectors); - console.log(`Erased ${partitionName} starting at sector ${partition.sector} with sectors ${partition.sectors}`); - } else { - continue; - } - } - return true; - } - - async getDevicePartitionsInfo() { - const slots = []; - const partitions = []; - const luns = this.firehose.luns; - for (const lun of luns) { - let [guidGpt] = await this.getGpt(lun); - if (guidGpt === null) { - throw "Error while reading device partitions"; - } - for (let partition in guidGpt.partentries) { - let slot = partition.slice(-2); - if (slot === "_a" || slot === "_b") { - partition = partition.substring(0, partition.length-2); - if (!slots.includes(slot)) { - slots.push(slot); - } - } - if (!partitions.includes(partition)) { - partitions.push(partition); - } - } - } - return [slots.length, partitions]; - } - - async getActiveSlot() { - const luns = this.firehose.luns; - for (const lun of luns) { - const [guidGpt] = await this.getGpt(lun); - if (guidGpt === null) { - throw "Cannot get active slot." - } - for (const partitionName in guidGpt.partentries) { - const slot = partitionName.slice(-2); - // backup gpt header is more reliable, since it would always has the non-corrupted gpt header - const [backupGuidGpt] = await this.getGpt(lun, guidGpt.header.backupLba); - const partition = backupGuidGpt.partentries[partitionName]; - const active = (((BigInt(partition.flags) >> (BigInt(gpt.AB_FLAG_OFFSET) * BigInt(8)))) - & BigInt(gpt.AB_PARTITION_ATTR_SLOT_ACTIVE)) === BigInt(gpt.AB_PARTITION_ATTR_SLOT_ACTIVE); - if (slot == "_a" && active) { - return "a"; - } else if (slot == "_b" && active) { - return "b"; - } - } - } - throw "Can't detect slot A or B"; - } - - patchNewGptData(gptDataA, gptDataB, guidGpt, partA, partB, slot_a_status, slot_b_status, isBoot) { - const partEntrySize = guidGpt.header.partEntrySize; - - const sdataA = gptDataA.slice(partA.entryOffset, partA.entryOffset+partEntrySize); - const sdataB = gptDataB.slice(partB.entryOffset, partB.entryOffset+partEntrySize); - - const partEntryA = new gpt.gptPartition(sdataA); - const partEntryB = new gpt.gptPartition(sdataB); - - partEntryA.flags = gpt.setPartitionFlags(partEntryA.flags, slot_a_status, isBoot); - partEntryB.flags = gpt.setPartitionFlags(partEntryB.flags, slot_b_status, isBoot); - const tmp = partEntryB.type; - partEntryB.type = partEntryA.type; - partEntryA.type = tmp; - const pDataA = partEntryA.create(), pDataB = partEntryB.create(); - - return [pDataA, partA.entryOffset, pDataB, partB.entryOffset]; - } - - async setActiveSlot(slot) { - slot = slot.toLowerCase(); - const luns = this.firehose.luns - let slot_a_status, slot_b_status; - - if (slot == "a") { - slot_a_status = true; - } else if (slot == "b") { - slot_a_status = false; - } - slot_b_status = !slot_a_status; - - for (const lunA of luns) { - let checkGptHeader = false; - let sameLun = false; - let hasPartitionA = false; - let [guidGptA, gptDataA] = await this.getGpt(lunA); - let [backupGuidGptA, backupGptDataA] = await this.getGpt(lunA, guidGptA.header.backupLba); - let lunB, gptDataB, guidGptB, backupGptDataB, backupGuidGptB; - - if (guidGptA === null) { - throw "Error while getting gpt header data"; - } - for (const partitionNameA in guidGptA.partentries) { - let slotSuffix = partitionNameA.toLowerCase().slice(-2); - if (slotSuffix !== "_a") { - continue; - } - const partitionNameB = partitionNameA.slice(0, partitionNameA.length-1) + "b"; - let sts; - if (!checkGptHeader) { - hasPartitionA = true; - if (partitionNameB in guidGptA.partentries) { - lunB = lunA; - sameLun = true; - gptDataB = gptDataA; - guidGptB = guidGptA; - backupGptDataB = backupGptDataA; - backupGuidGptB = backupGuidGptA; - } else { - const resp = await this.detectPartition(partitionNameB, true); - sts = resp[0]; - if (!sts) { - throw `Cannot find partition ${partitionNameB}`; - } - [sts, lunB, gptDataB, guidGptB] = resp; - [backupGuidGptB, backupGptDataB] = await this.getGpt(lunB, guidGptB.header.backupLba); - } - } - - if (!checkGptHeader && partitionNameA.slice(0, 3) !== "xbl") { // xbl partitions aren't affected by failure of changing slot, saves time - gptDataA = gpt.ensureGptHdrConsistency(gptDataA, backupGptDataA, guidGptA, backupGuidGptA); - if (!sameLun) { - gptDataB = gpt.ensureGptHdrConsistency(gptDataB, backupGptDataB, guidGptB, backupGuidGptB); - } - checkGptHeader = true; - } - - const partA = guidGptA.partentries[partitionNameA]; - const partB = guidGptB.partentries[partitionNameB]; - - let isBoot = false; - if (partitionNameA === "boot_a") { - isBoot = true; - } - const [pDataA, pOffsetA, pDataB, pOffsetB] = this.patchNewGptData( - gptDataA, gptDataB, guidGptA, partA, partB, slot_a_status, slot_b_status, isBoot - ); - - gptDataA.set(pDataA, pOffsetA) - guidGptA.fixGptCrc(gptDataA); - if (lunA === lunB) { - gptDataB = gptDataA; - } - gptDataB.set(pDataB, pOffsetB) - guidGptB.fixGptCrc(gptDataB); - } - - if (!hasPartitionA) { - continue; - } - const writeOffset = this.firehose.cfg.SECTOR_SIZE_IN_BYTES; - const gptBlobA = new Blob([gptDataA.slice(writeOffset)]); - await this.firehose.cmdProgram(lunA, 1, gptBlobA); - if (!sameLun) { - const gptBlobB = new Blob([gptDataB.slice(writeOffset)]); - await this.firehose.cmdProgram(lunB, 1, gptBlobB); - } - } - const activeBootLunId = (slot === "a") ? 1 : 2; - await this.firehose.cmdSetBootLunId(activeBootLunId); - console.log(`Successfully set slot ${slot} active`); - return true; - } - - async reset() { - await this.firehose.cmdReset(); - return true; - } -} diff --git a/src/QDL/sahara.js b/src/QDL/sahara.js deleted file mode 100644 index cb9c3ea..0000000 --- a/src/QDL/sahara.js +++ /dev/null @@ -1,258 +0,0 @@ -import { CommandHandler, cmd_t, sahara_mode_t, status_t, exec_cmd_t } from "./saharaDefs" -import { concatUint8Array, packGenerator, readBlobAsBuffer } from "./utils"; -import config from "@/config" - - -export class Sahara { - constructor(cdc) { - this.cdc = cdc; - this.ch = new CommandHandler(); - this.programmer = "6000000000010000_f8ab20526358c4fa_fhprg.bin"; - this.id = null; - this.serial = ""; - this.mode = ""; - this.rootDir = null; - } - - async connect() { - const v = await this.cdc?.read(0xC * 0x4); - if (v.length > 1) { - if (v[0] == 0x01) { - let pkt = this.ch.pkt_cmd_hdr(v); - if (pkt.cmd === cmd_t.SAHARA_HELLO_REQ) { - const rsp = this.ch.pkt_hello_req(v); - return { "mode" : "sahara", "cmd" : cmd_t.SAHARA_HELLO_REQ, "data" : rsp }; - } - } - } - throw "Sahara - Unable to connect to Sahara"; - } - - async cmdHello(mode, version=2, version_min=1, max_cmd_len=0) { - const cmd = cmd_t.SAHARA_HELLO_RSP; - const len = 0x30; - const elements = [cmd, len, version, version_min, max_cmd_len, mode, 1, 2, 3, 4, 5, 6]; - const responseData = packGenerator(elements); - await this.cdc?.write(responseData); - return true; - } - - async cmdModeSwitch(mode) { - const elements = [cmd_t.SAHARA_SWITCH_MODE, 0xC, mode]; - let data = packGenerator(elements); - await this.cdc?.write(data); - return true; - } - - async getResponse() { - try { - let data = await this.cdc?.read(); - let data_text = new TextDecoder('utf-8').decode(data.data); - if (data.length == 0) { - return {}; - } else if (data_text.includes("= 0) { - let resp = await this.getResponse(); - let cmd; - if ("cmd" in resp) { - cmd = resp["cmd"]; - } else { - throw "Sahara - Timeout while uploading loader. Wrong loader?"; - } - if (cmd == cmd_t.SAHARA_64BIT_MEMORY_READ_DATA) { - let pkt = resp["data"]; - this.id = pkt.image_id; - if (this.id >= 0xC) { - this.mode = "firehose"; - if (loop == 0) { - console.log("Firehose mode detected, uploading..."); - } - } else { - throw "Sahara - Unknown sahara id"; - } - - loop += 1; - let dataOffset = pkt.data_offset; - let dataLen = pkt.data_len; - if (dataOffset + dataLen > programmer.length) { - const fillerArray = new Uint8Array(dataOffset+dataLen-programmer.length).fill(0xff); - programmer = concatUint8Array([programmer, fillerArray]); - } - let dataToSend = programmer.slice(dataOffset, dataOffset+dataLen); - await this.cdc?.write(dataToSend); - datalen -= dataLen; - } else if (cmd == cmd_t.SAHARA_END_TRANSFER) { - let pkt = resp["data"]; - if (pkt.image_tx_status == status_t.SAHARA_STATUS_SUCCESS) { - if (await this.cmdDone()) { - console.log("Loader successfully uploaded"); - } else { - throw "Sahara - Failed to upload loader"; - } - return this.mode; - } - } - } - return this.mode; - } - - async cmdDone() { - const toSendData = packGenerator([cmd_t.SAHARA_DONE_REQ, 0x8]); - if (await this.cdc.write(toSendData)) { - let res = await this.getResponse(); - if ("cmd" in res) { - let cmd = res["cmd"]; - if (cmd == cmd_t.SAHARA_DONE_RSP) { - return true; - } else if (cmd == cmd_t.SAHARA_END_TRANSFER) { - if ("data" in res) { - let pkt = res["data"]; - if (pkt.image_tx_status == status_t.SAHARA_NAK_INVALID_CMD) { - console.error("Invalid transfer command received"); - return false; - } - } - } else { - throw "Sahara - Received invalid response"; - } - } - } - return false; - } -} diff --git a/src/QDL/saharaDefs.js b/src/QDL/saharaDefs.js deleted file mode 100644 index 7258f74..0000000 --- a/src/QDL/saharaDefs.js +++ /dev/null @@ -1,98 +0,0 @@ -import { structHelper_io } from "./utils" - - -export const cmd_t = { - SAHARA_HELLO_REQ : 0x1, - SAHARA_HELLO_RSP : 0x2, - SAHARA_READ_DATA : 0x3, - SAHARA_END_TRANSFER : 0x4, - SAHARA_DONE_REQ : 0x5, - SAHARA_DONE_RSP : 0x6, - SAHARA_RESET_RSP : 0x8, - SAHARA_CMD_READY : 0xB, - SAHARA_SWITCH_MODE : 0xC, - SAHARA_EXECUTE_REQ : 0xD, - SAHARA_EXECUTE_RSP : 0xE, - SAHARA_EXECUTE_DATA : 0xF, - SAHARA_64BIT_MEMORY_READ_DATA : 0x12, -} - -export const exec_cmd_t = { - SAHARA_EXEC_CMD_SERIAL_NUM_READ : 0x01 -} - -export const sahara_mode_t = { - SAHARA_MODE_IMAGE_TX_PENDING : 0x0, - SAHARA_MODE_COMMAND : 0x3 -} - -export const status_t = { - SAHARA_STATUS_SUCCESS : 0x00, // Invalid command received in current state - SAHARA_NAK_INVALID_CMD : 0x01, // Protocol mismatch between host and targe -} - - -export class CommandHandler { - pkt_cmd_hdr(data) { - let st = new structHelper_io(data); - return { cmd : st.dword(), len : st.dword() } - } - - pkt_hello_req(data) { - let st = new structHelper_io(data); - return { - cmd : st.dword(), - len : st.dword(), - version : st.dword(), - version_supported : st.dword(), - cmd_packet_length : st.dword(), - mode : st.dword(), - reserved1 : st.dword(), - reserved2 : st.dword(), - reserved3 : st.dword(), - reserved4 : st.dword(), - reserved5 : st.dword(), - reserved6 : st.dword(), - } - } - - pkt_image_end(data) { - let st = new structHelper_io(data); - return { - cmd : st.dword(), - len : st.dword(), - image_id : st.dword(), - image_tx_status : st.dword(), - } - } - - pkt_done(data) { - let st = new structHelper_io(data); - return { - cmd : st.dword(), - len : st.dword(), - image_tx_status : st.dword() - } - } - - pkt_read_data_64(data) { - let st = new structHelper_io(data); - return { - cmd : st.dword(), - len : st.dword(), - image_id : Number(st.qword()), - data_offset : Number(st.qword()), - data_len : Number(st.qword()), - } - } - - pkt_execute_rsp_cmd(data) { - let st = new structHelper_io(data); - return { - cmd : st.dword(), - len : st.dword(), - client_cmd : st.dword(), - data_len : st.dword(), - } - } -} diff --git a/src/QDL/sparse.js b/src/QDL/sparse.js deleted file mode 100644 index c0577eb..0000000 --- a/src/QDL/sparse.js +++ /dev/null @@ -1,260 +0,0 @@ -import { readBlobAsBuffer } from "./utils"; - -const FILE_MAGIC = 0xed26ff3a; -export const FILE_HEADER_SIZE = 28; -const CHUNK_HEADER_SIZE = 12; - -const ChunkType = { - Raw : 0xCAC1, - Fill : 0xCAC2, - Skip : 0xCAC3, - Crc32 : 0xCAC4, -} - - -class QCSparse { - constructor(blob, header) { - this.blob = blob; - this.blockSize = header.blockSize; - this.totalChunks = header.totalChunks; - this.blobOffset = 0; - } - - async getChunkSize() { - const chunkHeader = await parseChunkHeader(this.blob.slice(this.blobOffset, this.blobOffset + CHUNK_HEADER_SIZE)); - const chunkType = chunkHeader.type; - const blocks = chunkHeader.blocks; - const dataSize = chunkHeader.dataBytes; - this.blobOffset += CHUNK_HEADER_SIZE + dataSize; - - if (chunkType == ChunkType.Raw) { - if (dataSize != (blocks * this.blockSize)) { - throw "Sparse - Chunk input size does not match output size"; - } else { - return dataSize; - } - } else if (chunkType == ChunkType.Fill) { - if (dataSize != 4) { - throw "Sparse - Fill chunk should have 4 bytes"; - } else { - return blocks * this.blockSize; - } - } else if (chunkType == ChunkType.Skip) { - return blocks * this.blockSize; - } else if (chunkType == ChunkType.Crc32) { - if (dataSize != 4) { - throw "Sparse - CRC32 chunk should have 4 bytes"; - } else { - return 0; - } - } else { - throw "Sparse - Unknown chunk type"; - } - } - - async getSize() { - this.blobOffset = FILE_HEADER_SIZE; - let length = 0, chunk = 0; - while (chunk < this.totalChunks) { - let tlen = await this.getChunkSize(); - length += tlen; - chunk += 1; - } - this.blobOffset = FILE_HEADER_SIZE; - return length; - } -} - - -export async function getSparseRealSize(blob, header) { - const sparseImage = new QCSparse(blob, header); - return await sparseImage.getSize(); -} - - -async function parseChunkHeader(blobChunkHeader) { - let chunkHeader = await readBlobAsBuffer(blobChunkHeader); - let view = new DataView(chunkHeader); - return { - type : view.getUint16(0, true), - blocks : view.getUint32(4, true), - dataBytes : view.getUint32(8, true) - CHUNK_HEADER_SIZE, - data : null, - } -} - -export async function parseFileHeader(blobHeader) { - let header = await readBlobAsBuffer(blobHeader); - let view = new DataView(header); - - let magic = view.getUint32(0, true); - let majorVersion = view.getUint16(4, true); - let minorVersion = view.getUint16(6, true); - let fileHeadrSize = view.getUint16(8, true); - let chunkHeaderSize = view.getUint16(10, true); - let blockSize = view.getUint32(12, true); - let totalBlocks = view.getUint32(16, true); - let totalChunks = view.getUint32(20, true); - let crc32 = view.getUint32(24, true); - - if (magic != FILE_MAGIC) { - return null; - } - if (fileHeadrSize != FILE_HEADER_SIZE) { - console.error(`The file header size was expected to be 28, but is ${fileHeadrSize}.`); - return null; - } - if (chunkHeaderSize != CHUNK_HEADER_SIZE) { - console.error(`The chunk header size was expected to be 12, but is ${chunkHeaderSize}.`); - return null; - } - - return { - magic : magic, - majorVersion : majorVersion, - minorVersion : minorVersion, - fileHeadrSize : fileHeadrSize, - chunkHeaderSize : chunkHeaderSize, - blockSize : blockSize, - totalBlocks : totalBlocks, - totalChunks : totalChunks, - crc32 : crc32, - } -} - -async function populate(chunks, blockSize) { - const nBlocks = calcChunksBlocks(chunks); - let ret = new Uint8Array(nBlocks * blockSize); - let offset = 0; - - for (const chunk of chunks) { - const chunkType = chunk.type; - const blocks = chunk.blocks; - const dataSize = chunk.dataBytes; - const data = chunk.data; - - if (chunkType == ChunkType.Raw) { - let rawData = new Uint8Array(await readBlobAsBuffer(data)); - ret.set(rawData, offset); - offset += blocks * blockSize; - } else if (chunkType == ChunkType.Fill) { - const fillBin = new Uint8Array(await readBlobAsBuffer(data)); - const bufferSize = blocks * blockSize; - for (let i = 0; i < bufferSize; i += dataSize) { - ret.set(fillBin, offset); - offset += dataSize; - } - } else if (chunkType == ChunkType.Skip) { - let byteToSend = blocks * blockSize; - let skipData = new Uint8Array(byteToSend).fill(0); - ret.set(skipData, offset); - offset += byteToSend; - } else if (chunkType == ChunkType.Crc32) { - continue; - } else { - throw "Sparse - Unknown chunk type"; - } - } - return new Blob([ret.buffer]); -} - - -function calcChunksRealDataBytes(chunk, blockSize) { - switch (chunk.type) { - case ChunkType.Raw: - return chunk.dataBytes; - case ChunkType.Fill: - return chunk.blocks * blockSize; - case ChunkType.Skip: - return chunk.blocks * blockSize; - case ChunkType.Crc32: - return 0; - default: - throw "Sparse - Unknown chunk type"; - } -} - - -function calcChunksSize(chunks, blockSize) { - return chunks.map((chunk) => calcChunksRealDataBytes(chunk, blockSize)).reduce((total, c) => total + c, 0); -} - - -function calcChunksBlocks(chunks) { - return chunks.map((chunk) => chunk.blocks).reduce((total, c) => total + c, 0); -} - - -export async function* splitBlob(blob, splitSize = 1048576 /* maxPayloadSizeToTarget */) { - const safeToSend = splitSize; - - let header = await parseFileHeader(blob.slice(0, FILE_HEADER_SIZE)); - if (header === null) { - yield blob; - return; - } - - header.crc32 = 0; - blob = blob.slice(FILE_HEADER_SIZE); - let splitChunks = []; - for (let i = 0; i < header.totalChunks; i++) { - let originalChunk = await parseChunkHeader(blob.slice(0, CHUNK_HEADER_SIZE)); - originalChunk.data = blob.slice(CHUNK_HEADER_SIZE, CHUNK_HEADER_SIZE + originalChunk.dataBytes); - blob = blob.slice(CHUNK_HEADER_SIZE + originalChunk.dataBytes); - - let chunksToProcess = []; - let realBytesToWrite = calcChunksRealDataBytes(originalChunk, header.blockSize) - - const isChunkTypeSkip = originalChunk.type == ChunkType.Skip; - const isChunkTypeFill = originalChunk.type == ChunkType.Fill; - - if (realBytesToWrite > safeToSend) { - let bytesToWrite = isChunkTypeSkip ? 1 : originalChunk.dataBytes; - let originalChunkData = originalChunk.data; - - while (bytesToWrite > 0) { - const toSend = Math.min(safeToSend, bytesToWrite); - let tmpChunk; - - if (isChunkTypeFill || isChunkTypeSkip) { - while (realBytesToWrite > 0) { - const realSend = Math.min(safeToSend, realBytesToWrite); - tmpChunk = { - type : originalChunk.type, - blocks : realSend / header.blockSize, - dataBytes : isChunkTypeSkip ? 0 : toSend, - data : isChunkTypeSkip ? new Blob([]) : originalChunkData.slice(0, toSend), - } - chunksToProcess.push(tmpChunk); - realBytesToWrite -= realSend; - } - } else { - tmpChunk = { - type : originalChunk.type, - blocks : toSend / header.blockSize, - dataBytes : toSend, - data : originalChunkData.slice(0, toSend), - } - chunksToProcess.push(tmpChunk); - } - bytesToWrite -= toSend; - originalChunkData = originalChunkData?.slice(toSend); - } - } else { - chunksToProcess.push(originalChunk) - } - for (const chunk of chunksToProcess) { - const remainingBytes = splitSize - calcChunksSize(splitChunks); - const realChunkBytes = calcChunksRealDataBytes(chunk); - if (remainingBytes >= realChunkBytes) { - splitChunks.push(chunk); - } else { - yield await populate(splitChunks, header.blockSize); - splitChunks = [chunk]; - } - } - } - if (splitChunks.length > 0) { - yield await populate(splitChunks, header.blockSize); - } -} diff --git a/src/QDL/usblib.js b/src/QDL/usblib.js deleted file mode 100644 index dc431d0..0000000 --- a/src/QDL/usblib.js +++ /dev/null @@ -1,140 +0,0 @@ -import { concatUint8Array, sleep } from "./utils"; - -const vendorID = 0x05c6; -const productID = 0x9008; -const QDL_USB_CLASS = 0xff; -const BULK_TRANSFER_SIZE = 16384; - - -export class usbClass { - constructor() { - this.device = null; - this.epIn = null; - this.epOut = null; - this.maxSize = 512; - } - - get connected() { - return ( - this.device !== null && - this.device.opened && - this.device.configurations[0].interfaces[0].claimed - ); - } - - async _validateAndConnectDevice() { - let ife = this.device?.configurations[0].interfaces[0].alternates[0]; - if (ife.endpoints.length !== 2) { - throw "USB - Attempted to connect to null device"; - } - - this.epIn = null; - this.epOut = null; - - for (let endpoint of ife.endpoints) { - if (endpoint.type !== "bulk") { - throw "USB - Interface endpoint is not bulk"; - } - if (endpoint.direction === "in") { - if (this.epIn === null) { - this.epIn = endpoint; - } else { - throw "USB - Interface has multiple IN endpoints"; - } - } else if (endpoint.direction === "out") { - if (this.epOut === null) { - this.epOut = endpoint; - } else { - throw "USB - Interface has multiple OUT endpoints"; - } - } - this.maxSize = this.epIn.packetSize; - } - console.log("Endpoints: in =", this.epIn, ", out =", this.epOut); - - try { - await this.device?.open(); - await this.device?.selectConfiguration(1); - try { - await this.device?.claimInterface(0); - } catch(error) { - await this.device?.reset(); - await this.device?.forget(); - await this.device?.close(); - console.error(error); - } - } catch (error) { - throw `USB - ${error}`; - } - } - - async connect() { - this.device = await navigator.usb.requestDevice({ - filters: [ - { - vendorID : vendorID, - productID : productID, - classCode : QDL_USB_CLASS, - }, - ], - }); - console.log("Using USB device:", this.device); - - navigator.usb.addEventListener("connect", async (event) =>{ - console.log("USB device connect:", event.device); - this.device = event.device; - try { - await this._validateAndConnectDevice(); - } catch (error) { - console.log("Error while connecting to the device"); - throw error; - } - }); - await this._validateAndConnectDevice(); - } - - async read(resplen=null) { - let respData = new Uint8Array(); - let covered = 0; - if (resplen === null) { - resplen = this.epIn.packetSize; - } - - while (covered < resplen) { - let respPacket = await this.device?.transferIn(this.epIn?.endpointNumber, resplen); - respData = concatUint8Array([respData, new Uint8Array(respPacket.data.buffer)]); - resplen = respData.length; - covered += respData.length; - } - return respData; - } - - - async write(cmdPacket, pktSize=null, wait=true) { - if (cmdPacket.length === 0) { - try { - await this.device?.transferOut(this.epOut?.endpointNumber, cmdPacket); - } catch(error) { - await this.device?.transferOut(this.epOut?.endpointNumber, cmdPacket); - } - return true; - } - - let offset = 0; - if (pktSize === null) { - pktSize = BULK_TRANSFER_SIZE; - } - while (offset < cmdPacket.length) { - if (wait) { - await this.device?.transferOut(this.epOut?.endpointNumber, cmdPacket.slice(offset, offset + pktSize)); - } else { - // this is a hack, webusb doesn't have timed out catching - // this only happens in sahara.configure(). The loader receive the packet but doesn't respond back (same as edl repo). - this.device?.transferOut(this.epOut?.endpointNumber, cmdPacket.slice(offset, offset + pktSize)); - await sleep(80); - } - offset += pktSize; - } - return true; - } -} diff --git a/src/QDL/utils.js b/src/QDL/utils.js deleted file mode 100644 index daf8345..0000000 --- a/src/QDL/utils.js +++ /dev/null @@ -1,110 +0,0 @@ -export const sleep = ms => new Promise(r => setTimeout(r, ms)); - - -export class structHelper_io { - constructor(data, pos=0) { - this.pos = pos - this.data = data; - } - - dword(littleEndian=true) { - let view = new DataView(this.data.slice(this.pos, this.pos+4).buffer, 0); - this.pos += 4; - return view.getUint32(0, littleEndian); - } - - qword(littleEndian=true) { - let view = new DataView(this.data.slice(this.pos, this.pos+8).buffer, 0); - this.pos += 8; - return view.getBigUint64(0, littleEndian); - } -} - - -export function packGenerator(elements, littleEndian=true) { - let n = elements.length; - const buffer = new ArrayBuffer(n*4); - const view = new DataView(buffer); - for (let i = 0; i < n; i++) { - view.setUint32(i*4, elements[i], littleEndian); - } - return new Uint8Array(view.buffer); -} - - -export function concatUint8Array(arrays) { - let length = 0; - arrays.forEach(item => { - if (item !== null) { - length += item.length; - } - }); - let concatArray = new Uint8Array(length); - let offset = 0; - arrays.forEach( item => { - if (item !== null) { - concatArray.set(item, offset); - offset += item.length; - } - }); - return concatArray; -} - - -export function containsBytes(subString, array) { - let tArray = new TextDecoder().decode(array); - return tArray.includes(subString); -} - - -export function compareStringToBytes(compareString, array) { - let tArray = new TextDecoder().decode(array); - return compareString == tArray; -} - - -export function readBlobAsBuffer(blob) { - return new Promise((resolve, reject) => { - let reader = new FileReader(); - reader.onload = () => { - resolve(reader.result); - }; - reader.onerror = () => { - reject(reader.error); - }; - reader.readAsArrayBuffer(blob); - }); -} - - -export function bytes2Number(array) { - let view = new DataView(array.buffer, 0); - if (array.length !== 8 && array.length !== 4) { - throw "Only convert to 64 and 32 bit Number"; - } - return (array.length === 8) ? view.getBigUint64(0, true) : view.getUint32(0, true); -} - - -export function runWithTimeout(promise, timeout) { - return new Promise((resolve, reject) => { - let timedOut = false; - let tid = setTimeout(() => { - timedOut = true; - reject(new Error(`Timed out while trying to connect ${timeout}`)); - }, timeout); - promise - .then((val) => { - if (!timedOut) - resolve(val); - }) - .catch((err) => { - if (!timedOut) - reject(err); - }) - .finally(() => { - if (!timedOut) - clearTimeout(tid); - }); - }); -} diff --git a/src/QDL/xmlParser.js b/src/QDL/xmlParser.js deleted file mode 100644 index f5cd31b..0000000 --- a/src/QDL/xmlParser.js +++ /dev/null @@ -1,53 +0,0 @@ -export class xmlParser { - getReponse(input) { - let tInput = new TextDecoder().decode(input); - let lines = tInput.split(" { - obj[attr.name] = attr.value; - return obj; - }, content); - } - } - return content; - } - - - getLog(input) { - let tInput = new TextDecoder().decode(input); - let lines = tInput.split(" { - if (attr.name == "value") - obj.push(attr.value); - return obj; - }, data); - } - } - return data; - } -} diff --git a/src/app/Flash.jsx b/src/app/Flash.jsx index 1bff6d1..d7c544d 100644 --- a/src/app/Flash.jsx +++ b/src/app/Flash.jsx @@ -1,6 +1,6 @@ -import { useCallback, useState } from 'react' +import { useCallback } from 'react' -import { Step, Error, useQdl } from '@/utils/flash' +import { Step, Error, useFastboot } from '@/utils/fastboot' import bolt from '@/assets/bolt.svg' import cable from '@/assets/cable.svg' @@ -57,9 +57,8 @@ const steps = { }, [Step.DONE]: { status: 'Done', - description: 'Your device has been updated successfully. You can now unplug the all cables from your device, ' - +'and wait for the light to stop blinking then plug the power cord in again. ' - +' To complete the system reset, follow the instructions on your device.', + description: 'Your device has been updated successfully. You can now unplug the USB cable from your computer. To ' + + 'complete the system reset, follow the instructions on your device.', bgColor: 'bg-green-500', icon: done, }, @@ -68,8 +67,7 @@ const steps = { const errors = { [Error.UNKNOWN]: { status: 'Unknown error', - description: 'An unknown error has occurred. Unplug your device and wait for 20s. ' + - 'Restart your browser and try again.', + description: 'An unknown error has occurred. Restart your browser and try again.', bgColor: 'bg-red-500', icon: exclamation, }, @@ -81,14 +79,12 @@ const errors = { }, [Error.LOST_CONNECTION]: { status: 'Lost connection', - description: 'The connection to your device was lost. Check that your cables are connected properly and try again. ' + - 'Unplug your device and wait for around 20s.', + description: 'The connection to your device was lost. Check that your cables are connected properly and try again.', icon: cable, }, [Error.DOWNLOAD_FAILED]: { status: 'Download failed', - description:'The system image could not be downloaded. Unplug your device and wait for 20s. ' + - 'Check your internet connection and try again.', + description: 'The system image could not be downloaded. Check your internet connection and try again.', icon: cloudError, }, [Error.CHECKSUM_MISMATCH]: { @@ -115,11 +111,6 @@ const errors = { }, } -const detachScript = [ - "for d in /sys/bus/usb/drivers/qcserial/*-*; do [ -e \"$d\" ] && echo -n \"$(basename $d)\" | sudo tee /sys/bus/usb/drivers/qcserial/unbind > /dev/null; done" -]; - -const isLinux = navigator.userAgent.toLowerCase().includes('linux'); function LinearProgress({ value, barColor }) { if (value === -1 || value > 100) value = 100 @@ -196,7 +187,7 @@ export default function Flash() { connected, serial, - } = useQdl() + } = useFastboot() const handleContinue = useCallback(() => { onContinue?.() @@ -229,15 +220,6 @@ export default function Flash() { window.removeEventListener("beforeunload", beforeUnloadListener, { capture: true }) } - const [copied, setCopied] = useState(false); - const handleCopy = () => { - setCopied(true); - setTimeout(() => { - setCopied(false); - }, 1000); - }; - - return (

{title} {description} - {(title === "Lost connection" || title === "Ready") && isLinux && ( - <> - - It seems that you're on Linux, make sure to run the script below in your terminal after plugging in your device. - -
-
-
-
-                  {detachScript.map((line, index) => (
-                    
-                      {line}
-                    
-                  ))}
-                
-
- -
-
-
-
- - )} {error && (