diff --git a/src/components/LandingHero.tsx b/src/components/LandingHero.tsx index 1ea8139..1f2c151 100644 --- a/src/components/LandingHero.tsx +++ b/src/components/LandingHero.tsx @@ -32,6 +32,7 @@ export default function LandingHero() { const textDecoderRef = useRef(null) const readableStreamClosedRef = useRef | null>(null) const logsRef = useRef('') + const [keepConfig, setKeepConfig] = useState(false); useEffect(() => { const userAgent = navigator.userAgent.toLowerCase(); @@ -116,6 +117,10 @@ export default function LandingHero() { } } + const handleKeepConfigToggle = (event: React.ChangeEvent) => { + setKeepConfig(event.target.checked); + }; + const startSerialLogging = async () => { if (!serialPortRef.current) { setStatus(t('status.connectFirst')); @@ -256,11 +261,34 @@ export default function LandingHero() { setStatus(t('status.flashing', { percent: 0 })) + // On all Bitaxe derivatives the same + const nvsStart = 0x9000; + const nvsSize = 0x6000; + + let parts; + + if (keepConfig) { + parts = [ + { + data: firmwareBinaryString.slice(0, nvsStart), // Data before NVS + address: 0, + }, + { + data: firmwareBinaryString.slice(nvsStart + nvsSize), // Data after NVS + address: nvsStart + nvsSize, + }, + ]; + } else { + parts = [ + { + data: firmwareBinaryString, // Entire firmware binary + address: 0, + }, + ]; + } + await loader.writeFlash({ - fileArray: [{ - data: firmwareBinaryString, - address: 0 - }], + fileArray: parts, flashSize: "keep", flashMode: "keep", flashFreq: "keep", @@ -354,6 +382,18 @@ export default function LandingHero() { disabled={isConnecting || isFlashing} /> )} +
+ + +