adafruit / adafruit/Adafruit_Wippersnapper_Arduino
Feature request: Add option to hide MagTag display status bar/header
- Dominant language
- C++
- Stars
- 54
- Forks
- 56
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 11
Description
**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:
- Existing MagTag display lifecycle issue: #852
- Existing precedent for user-configurable status UI behavior: #365
- Display implementation PRs: #824, #827, #875
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with src/components/display/controller.cpp and src/components/display/hardware.cpp, then compare the two MagTag drivers: dispDrvThinkInkGrayscale4T5.h and dispDrvThinkInkGrayscale4Eaamfgn.h. Trace the existing configuration path before choosing where the boolean option belongs. Done means the default behavior is unchanged, disabled status bars do not draw or update, both drivers use the full display, documentation is updated, and the magtag PlatformIO build passes.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- arduino, cpp
- Domain
- embedded-iot
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100