Skip to content

Feature request: Add option to hide MagTag display status bar/header #928

Description

@flavio-fernandes

Is your feature request related to a problem? Please describe.

Yes. On the Adafruit MagTag running WipperSnapper, the firmware currently draws a status bar/header at the top of the eInk display. This is useful as a default, but for some display use cases I would like to use the full MagTag screen area for my own content.

Right now I do not see a documented secrets.json option or Adafruit IO display setting that allows this header/status bar to be hidden.

From reading the current implementation, the status bar appears to be drawn from the display component path:

  • src/components/display/controller.cpp

    • DisplayController::Handle_Display_AddOrReplace() calls display->drawStatusBar(WS._config.aio_user)
    • DisplayController::update() periodically calls hw_instance->updateStatusBar(rssi, 100, is_connected)
  • src/components/display/hardware.cpp

    • DisplayHardware::drawStatusBar() forwards to _drvDisp->drawStatusBar()
    • DisplayHardware::updateStatusBar() forwards to _drvDisp->updateStatusBar()
  • MagTag display drivers:

    • src/components/display/drivers/dispDrvThinkInkGrayscale4T5.h
    • src/components/display/drivers/dispDrvThinkInkGrayscale4Eaamfgn.h

Those drivers reserve STATUS_BAR_HEIGHT pixels, and writeMessage() starts below the status bar. So hiding the bar should also allow user content to use the full display area.

Describe the solution you'd like

Please add a supported option to hide the MagTag display status bar/header.

A possible implementation would be a boolean option such as:

{
  "display_status_bar": false
}

or, if the maintainers prefer grouping display settings:

{
  "display": {
    "status_bar": false
  }
}

Desired behavior:

  • Default behavior remains unchanged.
  • If the option is absent, the status bar is shown as it is today.
  • If the option is set to false, WipperSnapper should:
    • skip the initial drawStatusBar()
    • skip periodic updateStatusBar()
    • let writeMessage() use the full screen, starting at y=0 or an appropriate small top padding instead of below STATUS_BAR_HEIGHT
  • This should work for both pre-2025 and 2025 MagTag display drivers:
    • dispDrvThinkInkGrayscale4T5.h
    • dispDrvThinkInkGrayscale4Eaamfgn.h

Describe alternatives you've considered

  • Covering the top part of the eInk display physically, which is not a real solution.
  • Maintaining a custom local firmware patch, which would make normal WipperSnapper updates harder.
  • Using smaller text/content to work around the reserved top area, but that still wastes display space.

Additional context

I am happy to help with a PR if the maintainers agree with the approach.

Potential PR scope:

  1. Add a boolean config field, defaulting to current behavior.
  2. Parse it from secrets.json, or from whichever config path the maintainers prefer.
  3. Thread the setting into the display controller/hardware/driver path.
  4. Update both MagTag eInk drivers so full-screen layout works when the bar is hidden.
  5. Add documentation/examples showing the new option.
  6. Verify the PlatformIO build for magtag.

Related context I found:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions