MCUME/MCUME_teensy41/teensy800/t4_dsp.h

103 wiersze
2.7 KiB
C++

/*
TFT/VGA driver
DMA TFT driver based on C64 ILI9341 dma driver from Frank Bösing, 2017
*/
#ifndef _T4_DSPH_
#define _T4_DSPH_
#ifdef __cplusplus
#include <Arduino.h>
#include <DMAChannel.h>
#endif
#include "platform_config.h"
#include "iopins.h"
#ifndef TFT_WIDTH
#define TFT_WIDTH 320
#endif
#define TFT_REALWIDTH 320
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 240
#endif
#define TFT_REALHEIGHT 240
typedef enum gfx_mode_t
{
MODE_UNDEFINED = 0,
MODE_TFTILI_320x240 = 1,
MODE_TFTST_320x240 = 2,
MODE_VGA_320x240 = 3,
MODE_VGA_320x480 = 4,
MODE_VGA_352x240 = 5,
MODE_VGA_352x480 = 6,
MODE_VGA_512x240 = 7,
MODE_VGA_512x480 = 8,
MODE_VGA_640x240 = 9,
MODE_VGA_640x480 = 10
} gfx_mode_t;
typedef enum gfx_error_t
{
GFX_OK = 0,
GFX_ERROR = -1
} gfx_error_t;
#ifdef __cplusplus
class T4_DSP
{
public:
T4_DSP();
gfx_error_t begin(gfx_mode_t mode);
gfx_mode_t getMode(void);
void startRefresh(void);
void stopRefresh();
int get_frame_buffer_size(int *width, int *height);
void setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2);
// wait next Vsync
void waitSync();
void waitLine(int line);
// NoDMA functions
void fillScreenNoDma(uint16_t color);
void drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize);
void drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
void drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap);
void drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, uint16_t croparx, uint16_t cropary, uint16_t croparw, uint16_t croparh);
// DMA functions
void fillScreen(uint16_t color);
void drawText(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize);
void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
void drawSprite(int16_t x, int16_t y, const uint16_t *bitmap);
void drawSprite(int16_t x, int16_t y, const uint16_t *bitmap, uint16_t croparx, uint16_t cropary, uint16_t croparw, uint16_t croparh);
void writeLine(int width, int height, int y, uint16_t *buf);
void writeLinePal(int width, int height, int y, uint8_t *buf, uint16_t *palette16);
void writeScreenPal(int width, int height, int stride, uint8_t *buf, uint16_t *palette16);
void writeLine8(int width, int height, int y, uint8_t *buf, uint16_t *palette16);
protected:
static uint8_t _rst, _cs, _dc;
static uint8_t _mosi, _sclk;
static uint8_t _vsync_pin;
static DMAChannel flexio1DMA;
static DMAChannel flexio2DMA;
void tft_setup(bool isST);
static void TFT_isr(void);
static void QT3_isr(void);
};
#endif
#endif