Skip to content

Art Computer life cycle

App flows

App startup

flowchart TD
    FF1Start[Art Computer Start] --> Bluetooth(Start Bluetooth)
    Bluetooth --> HasInternet(Has Internet)

    HasInternet --> |No| QRCode1(Display QRCode)
    HasInternet --> |Yes| UpToDate1{Up to date}

    UpToDate1 --> |No| Update(Update to latest version)
    UpToDate1 --> |Yes| Paired{Has paired<br/>with mobile app}
    Update --> |Restart| FF1Start
    Paired --> |No| QRCode2(Display QRCode)
    Paired --> |Yes| Artwork(Artwork Playback)
    QRCode2 --> |Connect bluetooth<br/>Command: keep_wifi| Relayer1(Get relayer credential<br/>Return keep_wifi)
    Relayer1 --> Artwork

    QRCode1 --> |Internet<br/>Detected| HasInternet
    QRCode1 --> |Connect bluetooth<br/>Command: connect_wifi| UpToDate2{Up to date}
    UpToDate2 --> |No| Update
    UpToDate2 --> |Yes| Relayer2(Get relayer credential<br/>Return connect_wifi)
    Relayer2 --> Artwork

App update

flowchart TD
    Current[Current Version] --> Trouble{Having<br/>trouble}

    Trouble --> |Yes| Rollback{Choose version<br/>to rollback}
    Trouble --> |No| Update[Update at 3am]

    Update --> |Restart| Latest

    Rollback --> |Fresh| FactoryVersion(Factory Version)
    Rollback --> LastVersion(Last Version)

    FactoryVersion --> |Force Update| Latest
    LastVersion --> |Force Update| Latest

Command Processing Flow

flowchart TD
    %% Command Flow from Mobile
    Mobile[Mobile Controller] --> |Send Command| Relayer[Relayer Service]
    Relayer --> |WebSocket Message| Connectd[Connectd Service]

    %% Command Processing
    Connectd --> Mediator[Mediator]
    Mediator --> |Parse Message| Parse{Message Type}

    Parse --> |System Message| System[Handle System Message<br/>Save Topic ID]
    Parse --> |Command Message| CmdType{Command Type}

    CmdType --> |Device Command| DeviceCmd[Command Handler<br/>Execute Device Commands]
    CmdType --> |Web Command| WebCmd[Chrome DevTools Protocol]

    DeviceCmd --> |Available Commands| Commands[Device Commands:<br/>• connect<br/>• showPairingQRCode<br/>• deviceMetrics<br/>• sendKeyboardEvent<br/>• dragGesture<br/>• tapGesture<br/>• rotate<br/>• shutdown<br/>• getDeviceStatus<br/>• updateToLatestVersion]

    WebCmd --> |Forward to Browser| Browser[Chromium Browser]
    Browser --> |Execute JavaScript| WebApp[Web Application]

    %% Response Flow
    Commands --> |Return Result| Response[Send Response]
    WebApp --> |Return Result| Response

    Response --> |RPC Response| Relayer
    Relayer --> |WebSocket Response| Mobile

    %% Error Handling
    DeviceCmd --> |Error| Error[Error Response]
    WebCmd --> |Error| Error
    Error --> Response

    class Connectd,Relayer service
    class Mediator,Commands,Browser,WebApp component
    class Parse,CmdType decision
    class Mobile external

Telemetry (Heartbeat)

Heartbeats are only sent while the device has network connectivity.

Device status

Field Type Description
Timestamp DateTime The ISO 8601 timestamp (UTC) when the heartbeat was generated.
MAC Address String The unique, immutable MAC address of the network interface.
Build String The current firmware build version (e.g., "develop-0.0.1").
Screen Info String String detailing screen status (e.g., "1920x1080@60").
CPU Temp Number The core CPU temperature in Celsius (°C).
CPU Usage Percent The current CPU utilization (0.00 to 1.00).
GPU Usage Percent The current GPU utilization (0.00 to 1.00).
Memory Usage Percent The percentage of total RAM currently in use (0.00 to 1.00).
Disk Usage Percent The percentage of total disk storage currently in use (0.00 to 1.00).
Uptime String The duration the device has been running since last boot, in "D H:M:S" format.
Public Key String The device's public key for signature verification.
Signature String The payload's cryptographic signature for data integrity.
Page String The setupd page state.
Page Uptime String The duration the setupd has been staying under this state page, in "D H:M:S" format.

Setupd pages

Name Notes
QRCode QR code displayed for pairing setup. Network already connected.
FactoryReset Device initiated rollback to factory version.
SystemUpgrade Force firmware update initiated
WebApp Artwork playback has begun.

Version control

FF OS images are deployed on two branches:

  • develop — internal development builds
  • release — production builds, served from https://ffos.feralfile.com

Versioning follows the Semantic Versioning format.

Each branch's API specifies a min_version and a latest_version. If the version on the device is older than min_version, the device is forced to update. Otherwise it updates to the latest version silently at 3am.