125 lines
2.9 KiB
C++
125 lines
2.9 KiB
C++
|
|
#ifndef Display_h
|
|
#define Display_h
|
|
|
|
#define FONT_LARGE 1
|
|
#define FONT_SMALL 0
|
|
|
|
#include <SPI.h>
|
|
#include <TFT22_ILI9225.h>
|
|
#include <U8x8lib.h>
|
|
|
|
|
|
struct DispEntry {
|
|
int8_t y;
|
|
int8_t x;
|
|
int16_t fmt;
|
|
void (*func)(DispEntry *de);
|
|
const char *extra;
|
|
};
|
|
|
|
struct DispInfo {
|
|
DispEntry *de;
|
|
uint8_t *actions;
|
|
int16_t *timeouts;
|
|
};
|
|
|
|
// Now starting towards supporting different Display types / libraries
|
|
class RawDisplay {
|
|
public:
|
|
virtual void begin() = 0;
|
|
virtual void clear() = 0;
|
|
virtual void setFont(int nr) = 0;
|
|
virtual void drawString(uint8_t x, uint8_t y, const char *s) = 0;
|
|
virtual void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) = 0;
|
|
virtual void welcome() = 0;
|
|
};
|
|
|
|
class U8x8Display : public RawDisplay {
|
|
private:
|
|
U8X8 *u8x8 = NULL; // initialize later after reading config file
|
|
int _type;
|
|
|
|
public:
|
|
U8x8Display(int type = 0) { _type = type; }
|
|
void begin();
|
|
void clear();
|
|
void setFont(int nr);
|
|
void drawString(uint8_t x, uint8_t y, const char *s);
|
|
void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr);
|
|
void welcome();
|
|
};
|
|
|
|
class MY_ILI9225 : public TFT22_ILI9225 {
|
|
using TFT22_ILI9225::TFT22_ILI9225;
|
|
public:
|
|
uint16_t drawGFXChar(int16_t x, int16_t y, unsigned char c, uint16_t color);
|
|
void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr);
|
|
};
|
|
|
|
class ILI9225Display : public RawDisplay {
|
|
private:
|
|
MY_ILI9225 *tft = NULL; // initialize later after reading config file
|
|
uint8_t yofs=0;
|
|
uint8_t fsize=0;
|
|
|
|
|
|
public:
|
|
void begin();
|
|
void clear();
|
|
void setFont(int nr);
|
|
void drawString(uint8_t x, uint8_t y, const char *s);
|
|
void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr);
|
|
void welcome();
|
|
};
|
|
|
|
class Display {
|
|
private:
|
|
void freeLayouts();
|
|
int allocDispInfo(int entries, DispInfo *d);
|
|
void parseDispElement(char *text, DispEntry *de);
|
|
|
|
public:
|
|
void initFromFile();
|
|
|
|
void setLayout(DispInfo *layout);
|
|
DispInfo *layout;
|
|
static RawDisplay *rdis;
|
|
|
|
Display();
|
|
void init();
|
|
static char buf[17];
|
|
static void drawLat(DispEntry *de);
|
|
static void drawLon(DispEntry *de);
|
|
static void drawAlt(DispEntry *de);
|
|
static void drawHS(DispEntry *de);
|
|
static void drawVS(DispEntry *de);
|
|
static void drawID(DispEntry *de);
|
|
static void drawRSSI(DispEntry *de);
|
|
static void drawQS(DispEntry *de);
|
|
static void drawType(DispEntry *de);
|
|
static void drawFreq(DispEntry *de);
|
|
static void drawAFC(DispEntry *de);
|
|
static void drawIP(DispEntry *de);
|
|
static void drawSite(DispEntry *de);
|
|
static void drawTelemetry(DispEntry *de);
|
|
static void drawGPS(DispEntry *de);
|
|
static void drawText(DispEntry *de);
|
|
void clearIP();
|
|
void setIP(const char *ip, bool AP);
|
|
void updateDisplayPos();
|
|
void updateDisplayPos2();
|
|
void updateDisplayID();
|
|
void updateDisplayRSSI();
|
|
void updateStat();
|
|
void updateDisplayRXConfig();
|
|
void updateDisplayIP();
|
|
void updateDisplay();
|
|
|
|
void setLayout(int layout);
|
|
};
|
|
|
|
extern Display disp;
|
|
|
|
#endif
|