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.