Files
v2x-sniffer/v2x_fw/include/v2x_display.h
T
Clawdia 240a374148 Display UI: ST7735 Treiber + Frame-Scroller + Speicheranzeige
- ST7735 SPI-Treiber für 0.96 Zoll Display (80x160 Pixel)
- ASCII-Font 6x8 mit Text-Ausgabe
- Frame-Counter (gross, rot)
- SD-Speicher-Balken (grün/gelb/rot)
- Frame-Scroller: rollende Liste der letzten 7 Frames
  - RSSI-Farbbalken (rot/gelb/grün)
  - Message-Type (B=BSM, C=CAM, D=DENM)
  - BSSID Hex + Kanal/RSSI
- Display UI Task aktualisiert alle 2 Sekunden
- Frame Writer sendet Frames an Scroller Queue
- Channel Hopper aktualisiert g_v2x_channel_idx
2026-05-09 11:47:55 +02:00

94 lines
2.8 KiB
C

#ifndef V2X_DISPLAY_H
#define V2X_DISPLAY_H
#include <stdint.h>
/* ST7735 Display: 80x160 Pixel, SPI */
#define DISP_W 80
#define DISP_H 160
/* Display-Pins (T-Dongle-C5 ST7735) */
#define DISP_GPIO_CS 10
#define DISP_GPIO_RST 1
#define DISP_GPIO_BL 0
#define DISP_GPIO_SDA 2 /* MOSI */
#define DISP_GPIO_SCK 6
/* Farben */
#define DISP_COLOR_BLACK 0x0000
#define DISP_COLOR_WHITE 0xFFFF
#define DISP_COLOR_RED 0xF800
#define DISP_COLOR_GREEN 0x04E0
#define DISP_COLOR_BLUE 0x001F
#define DISP_COLOR_CYAN 0x07FF
#define DISP_COLOR_YELLOW 0xFFE0
#define DISP_COLOR_MAGENTA 0xF81F
#define DISP_COLOR_GRAY 0x6B4D
/* Zeichenmodus */
typedef enum {
DISP_MODE_OVERWRITE,
DISP_MODE_XOR,
} disp_draw_mode_t;
/* Schriftgrößen */
typedef enum {
FONT_6x8 = 0, /* 6x8 Pixel pro Zeichen */
FONT_8x16 = 1, /* 8x16 Pixel pro Zeichen */
} disp_font_t;
/* Initialisierung */
esp_err_t v2x_display_init(void);
/* Display ausschalten (Energiesparen) */
esp_err_t v2x_display_off(void);
/* Screen löschen */
esp_err_t v2x_display_clear(uint16_t color);
/* Rechteck zeichnen */
esp_err_t v2x_display_rect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color, bool filled);
/* Text zeichnen */
esp_err_t v2x_display_text(int16_t x, int16_t y, const char *text,
uint16_t color, disp_font_t font);
/* Linie zeichnen */
esp_err_t v2x_display_line(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
/* Fortschrittsbalken */
esp_err_t v2x_display_progress_bar(int16_t x, int16_t y, int16_t w, int16_t h, float progress,
uint16_t fg_color, uint16_t bg_color);
/* Frame-Counter (großes rotes Nummernfeld) */
esp_err_t v2x_display_frame_count(uint32_t count);
/* RSSI-Grafik (Balken) */
esp_err_t v2x_display_rssi_gauge(int8_t rssi);
/* Frame-Info als Zeile (wird im Scroller verwendet) */
typedef struct {
uint8_t msg_type;
int8_t rssi;
uint8_t channel;
uint8_t bssid_last3[3]; /* nur letztes Drittel der BSSID für Anzeige */
} disp_frame_info_t;
/* Ein Frame als Zeile rendern (wird an Scroller übergeben) */
esp_err_t v2x_display_render_frame_line(int16_t x, int16_t y, const disp_frame_info_t *info,
uint16_t bg_color);
/* === Frame-Scroller === */
void scroller_add_entry(uint8_t msg_type, int8_t rssi, uint8_t ch, const uint8_t *bssid);
void scroller_redraw(void);
void scroller_redraw_line(uint32_t entry_idx);
/* === Display UI Task === */
void v2x_display_ui_task(void *pvParameters);
/* === Globale Display-Variablen (extern für andere Module) === */
extern esp_lcd_panel_handle_t g_disp_panel;
extern bool g_disp_initialized;
#endif /* V2X_DISPLAY_H */