Skip to content

feat(firmware): integrate kaomoji eyes into animations via eyes_style #39

Description

@jamro

Area

Firmware

Problem

#37 added TinyEngineerExpressions and an OLED-only expression-demo, but the library is not used by the robot firmware.

  • Existing activity-driven eye modes stay the only on-robot face path.
  • Applications and Config cannot choose the kaomoji catalogue without a separate demo flash.
  • /anim docs and eye behavior assume classic procedural eyes only (blinks, flicker, X eyes, etc.).

Result: the expression library is optional and isolated; desk-robot animations cannot show those faces.

Proposed change

Integrate #37 faces as a selectable OLED eye style beside classic rounded eyes. Keep animation → servo / audio / RGB unchanged; only the OLED drawer switches.

  • Extensible style layer under src/display/eyes/styles/ (EyeStyleRenderer + registry) so later styles do not fork the animation registry.
  • New setting eyes_style: classic | kaomoji (NVS, GET/POST /settings, Config). Default classic. Apply immediately.
  • When kaomoji, map animation / eye mode / sleep phase → Expression and render() into the shared OLED (never run classic and kaomoji drawers together).
  • Reset face playback to elapsed 0 when the expression or style changes (sleep phase, live style switch).
  • Docs: qualify classic-specific eye details under /anim; document the kaomoji map; cross-link from eyes_style.

Animation → face map

Animation / phase Face
none (idle) Idle
typing, thinking Thinking
reading, attention Curious
ring Surprise
welcome Happy
error Angry
abort Panic
wakeup Sleepy
sleep / sleep-close Sleep
sleep-open Idle
dead Sad (no classic X)

Acceptance criteria

  • eyes_style in NVS + /settings + Config; docs/HTML synced.
  • Default classic preserves current eye sequences.
  • kaomoji maps all anims; sleep/wake and style switches start at frame 0.
  • pio run; validate eyes_style; expression asset checks still pass.
  • Bench: live style toggle, anim cycle, sleep/wake; no OLED fights with boot/text.

Out of scope

  • Per-anim HTTP face overrides
  • Unused faces (Laugh, Wink, Smug, Cry, Shy, Love) unless mapped later
  • Servo / audio / RGB changes for this feature

References

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions