Skip to content

Firmware updates

The CrossPad holds two firmwares at once and can keep more on its SD card. An update is installed next to the firmware that runs, checked for a signature first, and tried before the CrossPad keeps it. The steps for players are in Updates; this page explains what happens underneath.

  • The CrossPad has two firmware slots, A and B, of 3.5 MB each. A firmware is always installed into the slot that is not running, so the running firmware is never touched.
  • Switching to the other slot is a restart. The first start of a new firmware is a trial: once it has run for 10 s, it confirms itself and stays.
  • A firmware that does not confirm itself is not kept. At the next start the CrossPad goes back to the other slot, and the Library shows the new one as rolled back, with Try this slot again and Reinstall. A firmware that stops responding during its trial is restarted by a watchdog within 30 s, so the way back never needs you.
  • Every way of updating ends in the same trial: over WiFi, from the browser, from the SD card and over USB.

The Library is the folder crosspad/firmware/ on the card. Each firmware package is a folder:

FileWhat it is
CrossPad.binthe firmware image (required)
manifest.jsonname, edition, version, board revision, and the SHA-256 of every file
assets.binthe assets partition built with this firmware (icons, fonts, the pad controller firmware)
settings.jsonthis firmware’s own settings, saved at the last switch
icon.binthe edition’s icon in the Library
.pinnedkeeps the package: the card cleanup never removes it

A .bin file copied straight into the folder is moved into a package folder of its own the next time the Library looks. Every image also carries a short description of itself (board revision, edition, the pad controller protocol it needs, its assets), and the CrossPad trusts that over the manifest. A package built for another board revision is not installed.

  • crosspad.app lists the published firmware for each board revision. Every package’s manifest is signed, and the manifest holds the SHA-256 of every file.
  • The CrossPad checks the signature against keys built into its firmware, then checks every file it downloads. A package that does not pass is not installed, and nothing is written for it.
  • A download that stops resumes where it stopped.
  • Each firmware edition has two channels, Stable and Beta; a version with a pre-release part (such as -rc1) is Beta. The Beta channel sees Stable releases too.
  • At startup, when Check at startup is on, once the MODE map shows.
  • Once a day: when the last check is 24 hours old and the MODE map has been on screen for 2 minutes with no pad pressed.
  • These checks run in the background. They show a result only when they find an update, and they stop as soon as you press a pad or open an app. After an update they wait for the new firmware to confirm itself first.
  • Downloading and installing happen only when you ask.

The Library may use up to 512 MB, and the CrossPad keeps at least 10 % of the card free. To make room it removes the oldest versions first. It never removes the packages in slots A and B, a pinned package or a download in progress.

  • Each firmware keeps its own settings. At a switch, the running firmware’s settings are saved into its package’s settings.json, and the arriving firmware reads its own back.
  • Some settings belong to the CrossPad, not to a firmware, and stay the same in both slots: the pad controller’s settings (power, charging and pad calibration), the screen brightness, USB audio, Ask before USB serial, Bluetooth MIDI on or off, and the audio sample rate. The saved WiFi networks are shared too.
  • Both slots share one assets partition. At startup the CrossPad compares it with the running firmware, and when they differ it rewrites the partition from the firmware’s package on the card, in about 4 s. With that package missing from the card, it leaves the partition as it is and asks you to insert the card that holds the package.
  • A switch to an older firmware never takes the pad controller back to an older version. See Pad controller updates.