Files
meshtastic_firmware/src/graphics/HUB75Display.h
T
Jonathan BennettGitHubThomas Göttgenscoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>IxitxachitlCopilot Autofix powered by AI
8d1fbbf55f Snake! (#10936)
* Snake!

* Add spiLock to snake score saving

* Check fixes

* More careful locking

* WIP: Big Display Node

* Update src/graphics/HUB75Display.cpp

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Add HUB75 Native

* Add Tetris game module with core logic and UI integration

- Implement TetrisGame class for game logic, including piece movement, rotation, and line clearing.
- Create TetrisModule class to manage game state, input handling, and rendering on OLED display.
- Introduce high score tracking with persistence and optional mesh broadcasting.
- Define UI states for title, playing, paused, game over, and high scores.
- Implement input handling for game controls and state transitions.
- Add rendering functions for the game board, high scores, and title screen.

* feat(snake): add snake graphics and update display logic in SnakeModule

* Prompt for Initials for Tetris, too

* refactor games module

* Games refactor

* hub75 native double buffer

* Games tuning

* Make joystick repeat events on held button

* Add clouds and colors

* Fix breakout and more color

* difficulty tuning

* trunk

* refactor game announcements, etc

* Scale chirpy gravity as game speed increases

* Portduino, check for hub75 display before reading in hub75 options

* Final(?) games tuning

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Properly ignore input when games screen not shown

* Fail gracefully when HUB75 is selected but not supported.

---------

Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Ixitxachitl <kramerfm@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-16 18:35:33 -05:00

49 lines
1.0 KiB
C++

#pragma once
#include "configuration.h"
#if defined(USE_HUB75)
#include <OLEDDisplay.h>
#ifndef HUB75_BRIGHTNESS_DEFAULT
#define HUB75_BRIGHTNESS_DEFAULT 180
#endif
class MatrixPanel_I2S_DMA;
/**
* A color display backend that drives a HUB75 RGB LED matrix panel from the
* BaseUI color path.
*/
class HUB75Display : public OLEDDisplay
{
public:
HUB75Display(uint8_t address, int sda, int scl, OLEDDISPLAY_GEOMETRY geometry, HW_I2C i2cBus);
~HUB75Display();
// Write the buffer to the matrix (full-frame, region-aware color expansion).
void display() override;
void setDisplayBrightness(uint8_t brightness);
protected:
int getBufferOffset(void) override { return 0; }
void sendCommand(uint8_t com) override;
bool connect() override;
private:
MatrixPanel_I2S_DMA *matrix = nullptr;
uint8_t brightness = HUB75_BRIGHTNESS_DEFAULT;
bool firstFrame = true;
bool haveThemeDefaults = false;
uint16_t lastOnBe = 0;
uint16_t lastOffBe = 0;
uint32_t lastColorSig = 0;
};
#endif // USE_HUB75