stm32-moto/Core/Inc/gc9a01.h

152 lines
4.9 KiB
C

/**
* @file gc9a01.h
* @brief Driver GC9A01 pour STM32 (HAL)
* @date 09 août 2025
* @author Lorent
*/
#ifndef INC_GC9A01_H_
#define INC_GC9A01_H_
#include "main.h"
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
#define PIX_BUF 512
//==============================================================================
// 📌 Configuration matérielle
//==============================================================================
// Chip Select (CS)
#define GC9A01_CS_GPIO_Port GPIOB
#define GC9A01_CS_Pin GPIO_PIN_0
// Data/Command (DC)
#define GC9A01_DC_GPIO_Port GPIOB
#define GC9A01_DC_Pin GPIO_PIN_1
// Reset (RST)
#define GC9A01_RST_GPIO_Port GPIOB
#define GC9A01_RST_Pin GPIO_PIN_2
// Dimensions écran
#define GC9A01_WIDTH 240
#define GC9A01_HEIGHT 240
#define GC9A01_RADIUS (GC9A01_WIDTH / 2)
//==============================================================================
// 🎨 Couleurs (format RGB565)
//==============================================================================
#define GC9A01_BLACK 0x0000
#define GC9A01_WHITE 0xFFFF
#define GC9A01_RED 0xF800
#define GC9A01_GREEN 0x07E0
#define GC9A01_BLUE 0x001F
#define GC9A01_CYAN 0x07FF
#define GC9A01_MAGENTA 0xF81F
#define GC9A01_YELLOW 0xFFE0
#define GC9A01_ORANGE 0xFD20
#define GC9A01_DARKGREEN 0x03E0
#define GC9A01_DARKBLUE 0x0010
#define GC9A01_GRAY 0x8410
#define GC9A01_LIGHTGRAY 0xC618
//==============================================================================
// 📜 Commandes GC9A01
//==============================================================================
#define GC9A01_SWRESET 0x01
#define GC9A01_RDDID 0x04
#define GC9A01_RDDST 0x09
#define GC9A01_SLPIN 0x10
#define GC9A01_SLPOUT 0x11
#define GC9A01_NORON 0x13
#define GC9A01_INVOFF 0x20
#define GC9A01_INVON 0x21
#define GC9A01_DISPOFF 0x28
#define GC9A01_DISPON 0x29
#define GC9A01_CASET 0x2A
#define GC9A01_RASET 0x2B
#define GC9A01_RAMWR 0x2C
#define GC9A01_RAMRD 0x2E
#define GC9A01_COLMOD 0x3A
#define GC9A01_MADCTL 0x36
#define GC9A01_PWCTR1 0xC1
#define GC9A01_PWCTR2 0xC3
#define GC9A01_PWCTR3 0xC4
#define GC9A01_PWCTR4 0xC9
#define GC9A01_FRAMERATE 0xE8
#define GC9A01_GAMMA1 0xF0
#define GC9A01_GAMMA2 0xF1
#define GC9A01_GAMMA3 0xF2
#define GC9A01_GAMMA4 0xF3
//==============================================================================
// 📦 Structures
//==============================================================================
typedef struct {
uint16_t x;
uint16_t y;
} GC9A01_Point_t;
typedef struct {
uint16_t x;
uint16_t y;
uint16_t width;
uint16_t height;
} GC9A01_Rect_t;
typedef struct {
uint16_t x;
uint16_t y;
uint8_t radius;
uint16_t color;
} GC9A01_Circle_t;
//==============================================================================
// 🔹 Fonctions publiques
//==============================================================================
// Initialisation
void GC9A01_Init(SPI_HandleTypeDef *hspi);
void GC9A01_Reset(void);
void GC9A01_DisplayOn(void);
void GC9A01_DisplayOff(void);
void GC9A01_SetRotation(uint8_t rotation);
// Dessin basique
void GC9A01_FillScreen(uint16_t color);
void GC9A01_SetPixel(uint16_t x, uint16_t y, uint16_t color);
void GC9A01_DrawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color);
void GC9A01_DrawRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color);
void GC9A01_FillRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color);
void GC9A01_DrawCircle(uint16_t x, uint16_t y, uint8_t radius, uint16_t color);
void GC9A01_FillCircle(uint16_t x, uint16_t y, uint8_t radius, uint16_t color);
// Texte
void GC9A01_DrawChar(uint16_t x, uint16_t y, char c, uint16_t color, uint16_t bg_color, uint8_t size);
void GC9A01_DrawString(uint16_t x, uint16_t y, const char *str, uint16_t color, uint16_t bg_color, uint8_t size);
// Utilitaires
uint16_t GC9A01_RGB565(uint8_t r, uint8_t g, uint8_t b);
bool GC9A01_IsInCircle(uint16_t x, uint16_t y);
// Fonctions spécifiques moto
void GC9A01_DrawGauge(uint16_t center_x, uint16_t center_y, uint8_t radius,
float value, float min_val, float max_val,
uint16_t color, const char* label);
void GC9A01_DrawAngleIndicator(float roll, float pitch);
void GC9A01_DrawStateIndicator(const char* state, uint16_t color);
#ifdef __cplusplus
}
#endif
#endif // GC9A01_H