diff --git a/public/firmware-loader/images/board-xrp-nano.jpg b/public/firmware-loader/images/board-xrp-nano.jpg new file mode 100644 index 0000000..847a648 Binary files /dev/null and b/public/firmware-loader/images/board-xrp-nano.jpg differ diff --git a/public/firmware-loader/images/board-xrp-nano_bootsel.jpg b/public/firmware-loader/images/board-xrp-nano_bootsel.jpg new file mode 100644 index 0000000..0e1c0b0 Binary files /dev/null and b/public/firmware-loader/images/board-xrp-nano_bootsel.jpg differ diff --git a/public/firmware-loader/images/board-xrp-nano_poweroff.jpg b/public/firmware-loader/images/board-xrp-nano_poweroff.jpg new file mode 100644 index 0000000..a3b0707 Binary files /dev/null and b/public/firmware-loader/images/board-xrp-nano_poweroff.jpg differ diff --git a/public/firmware-loader/index.json b/public/firmware-loader/index.json index e348634..d50656d 100644 --- a/public/firmware-loader/index.json +++ b/public/firmware-loader/index.json @@ -15,6 +15,13 @@ "description": "XRP robot headers", "image": "/firmware-loader/images/board-xrp-2350.jpg", "nextLevel": "boards/xrp-2350.json" + }, + { + "id": "xrp-nano", + "name": "NanoXRP", + "description": "NanoXRP with the RP2040 controller", + "image": "/firmware-loader/images/board-xrp-nano.jpg", + "nextLevel": "boards/xrp-nano.json" } ] } diff --git a/public/firmware-loader/wizard-assets.json b/public/firmware-loader/wizard-assets.json index 2baa6c7..52b65d2 100644 --- a/public/firmware-loader/wizard-assets.json +++ b/public/firmware-loader/wizard-assets.json @@ -1,11 +1,13 @@ { "powerOff": { "xrp-beta": "/firmware-loader/images/board-xrp-beta_poweroff.jpg", - "xrp-2350": "/firmware-loader/images/board-xrp-2350_poweroff.jpg" + "xrp-2350": "/firmware-loader/images/board-xrp-2350_poweroff.jpg", + "xrp-nano": "/firmware-loader/images/board-xrp-nano_poweroff.jpg" }, "bootSel": { "xrp-beta": "/firmware-loader/images/board-xrp-beta_bootsel.jpg", - "xrp-2350": "/firmware-loader/images/board-xrp-2350_bootsel.jpg" + "xrp-2350": "/firmware-loader/images/board-xrp-2350_bootsel.jpg", + "xrp-nano": "/firmware-loader/images/board-xrp-nano_bootsel.jpg" }, "selectDir": { "xrp-beta-win": "/firmware-loader/images/board-xrp-beta-selectdir-win.png", @@ -13,6 +15,9 @@ "xrp-beta-linux": "/firmware-loader/images/board-xrp-beta-selectdir-linux.png", "xrp-2350-win": "/firmware-loader/images/board-xrp-2350-selectdir-win.png", "xrp-2350-mac": "/firmware-loader/images/board-xrp-2350-selectdir-mac.jpg", - "xrp-2350-linux": "/firmware-loader/images/board-xrp-2350-selectdir-linux.png" + "xrp-2350-linux": "/firmware-loader/images/board-xrp-2350-selectdir-linux.png", + "xrp-nano-win": "/firmware-loader/images/board-xrp-beta-selectdir-win.png", + "xrp-nano-mac": "/firmware-loader/images/board-xrp-beta-selectdir-mac.jpg", + "xrp-nano-linux": "/firmware-loader/images/board-xrp-beta-selectdir-linux.png" } } diff --git a/src/components/dialogs/firmware-install-wizard.tsx b/src/components/dialogs/firmware-install-wizard.tsx index 8014972..a4078b8 100644 --- a/src/components/dialogs/firmware-install-wizard.tsx +++ b/src/components/dialogs/firmware-install-wizard.tsx @@ -26,6 +26,11 @@ function boardIdToProcessor(boardId: string): 2040 | 2350 { return boardId === 'xrp-2350' ? 2350 : 2040; } +/** The NanoXRP is RP2040-based but runs its own firmware build. */ +function boardIdIsNanoXRP(boardId: string): boolean { + return boardId === 'xrp-nano'; +} + /** BOOTSEL mass-storage drive name for the given XRP board. */ function expectedDriveForBoard(boardId: string): string { return boardId === 'xrp-2350' ? 'RP2350' : 'RPI-RP2'; @@ -155,10 +160,12 @@ export default function FirmwareInstallWizard({ const { t } = useTranslation(); const os = useMemo(() => detectOsFamily(), []); + const boardCtx = boardIdIsNanoXRP(boardId) ? { context: 'nano' } : undefined; + const cmd = CommandToXRPMgr.getInstance(); useEffect(() => { - cmd.setProcessorTypeForFirmwareLoader(boardIdToProcessor(boardId)); + cmd.setProcessorTypeForFirmwareLoader(boardIdToProcessor(boardId), boardIdIsNanoXRP(boardId)); }, [boardId, cmd]); const [phase, setPhase] = useState({ kind: 'instruction', step: 1 }); @@ -238,7 +245,7 @@ export default function FirmwareInstallWizard({ setError(null); setPhase({ kind: 'uf2' }); setUf2Pct(0); - cmd.setProcessorTypeForFirmwareLoader(boardIdToProcessor(boardId)); + cmd.setProcessorTypeForFirmwareLoader(boardIdToProcessor(boardId), boardIdIsNanoXRP(boardId)); try { if (!dirHandle) { @@ -442,28 +449,28 @@ export default function FirmwareInstallWizard({
{phase.step === 1 && ( <> -

{t('firmwareWizardStep1Title')}

+

{t('firmwareWizardStep1Title', boardCtx)}

- {t('firmwareWizardStep1Body')} + {t('firmwareWizardStep1Body', boardCtx)}

)} {phase.step === 2 && ( <> -

{t('firmwareWizardStep2Title')}

+

{t('firmwareWizardStep2Title', boardCtx)}

- {t('firmwareWizardStep2Body')} + {t('firmwareWizardStep2Body', boardCtx)}

)} {phase.step === 3 && ( <> -

{t('firmwareWizardStep3Title')}

+

{t('firmwareWizardStep3Title', boardCtx)}

- {t('firmwareWizardStep3Body', { drive: cmd.getXRPDrive() })} + {t('firmwareWizardStep3Body', { drive: cmd.getXRPDrive(), ...boardCtx })}