Skip to content

Factory-reset animation and audio

Timeline

The reset UX is produced by check-factory-reset, before the normal voice-agent starts.

Phase Segment display RGB ring Input/audio
Initial chord sample Reset icon loop hwreset_intro.json Volume Up + Volume Down must be held
Five-second window Loop is repeated to fill duration Intro runs in parallel Extra keys invalidate subsequent strict checks
Combo rejected/timeout Animation stops and output clears Output clears Utility returns 0; boot continues
Combo accepted factoryResetEnter_digits.json hwreset_done.json 30_reset_v3.flac plays
Return to S60 Output cleared Output cleared S60 writes reset marker and reboots
Next boot, S03 No reset animation from this utility No reset animation from this utility S03 deletes data and removes marker

Decompiled: the main loop is in check-factory-reset:main (0x9734 within the function). Rendering is in sub_10C00; the two threads are explicitly created with a five-second duration and a display/RGB selector. The accepted path logs showFinal, starts playback, then returns 1.

Resource durations

From the dumped JSON:

  • resetIconLoop_digits.json: 96 frames, 1.594 seconds; repeated as necessary.
  • hwreset_intro.json: 301 frames, 4.997 seconds.
  • factoryResetEnter_digits.json: 123 frames, 2.042 seconds.
  • hwreset_done.json: 123 frames, 2.042 seconds.

The final display/RGB animations and audio are initiated after the hold is accepted; S60 does not reboot until check-factory-reset returns.

Reset marker versus animation

The animation does not itself erase data. The only stock wipe trigger in this path is S60's subsequent touch /data/do_factory_reset and reboot. The animation utility also stops any running boot_animation process before taking over the LEDs.

The voice-agent::hwResetDevice path can create the same marker after setup failure code 4, but it does not use this early S60 utility to perform the wipe. See factory-reset paths.

Hidden joke is not a reset

voice-agent:0x1442e0 (doFun) can select factoryResetJoke_digits.json, factoryResetJoke_diodes.json, and 30_reset_v3.flac after a high-count hidden gesture. This audiovisual sequence resembles reset feedback but does not create /data/do_factory_reset in that function. It must not be used as evidence that a wipe occurred.