Louis Mayencourt
/
NRFBOY
MBED NRF51 Arduboy port
abstractarduboy.h
- Committer:
- lmayencou
- Date:
- 2017-01-07
- Revision:
- 7:fb7e549d1cf6
- Parent:
- 3:df305b314063
File content as of revision 7:fb7e549d1cf6:
#ifndef ABSTRACTARDUBOY_H #define ABSTRACTARDUBOY_H #include <stdint.h> #include "glcdfont.h" #define WIDTH 128 #define HEIGHT 64 #define WHITE 1 #define BLACK 0 #define COLUMN_ADDRESS_END (WIDTH - 1) & 0x7F #define PAGE_ADDRESS_END ((HEIGHT/8)-1) & 0x07 #define _BV(b) (1UL << (b)) #define min(a,b) (((a)<(b))?(a):(b)) #define max(a,b) (((a)>(b))?(a):(b)) #define abs(a) (((a) < 0) ? -(a) : (a)) //#define pgm_read_byte(a) 1 #define LEFT_BUTTON _BV(0) #define RIGHT_BUTTON _BV(1) #define UP_BUTTON _BV(2) #define DOWN_BUTTON _BV(3) #define A_BUTTON _BV(4) #define B_BUTTON _BV(5) typedef bool boolean; typedef uint8_t byte; class AbstractArduboy { public: AbstractArduboy(); // pure virtual function virtual void start() = 0; virtual long getTime() = 0; virtual void LCDDataMode() = 0; virtual void LCDCommandMode() = 0; virtual void drawScreen(const unsigned char *image) = 0; virtual uint8_t getInput() = 0; // virtual virtual void idle(); virtual void saveMuchPower(); // init void begin(){start();}; // frame management void setFrameRate(uint8_t rate); bool nextFrame(); bool everyXFrames(uint8_t frames); // info int cpuLoad(); // buttons void poll(); bool pressed(uint8_t buttons); bool notPressed(uint8_t buttons); bool justPressed(uint8_t buttons); // graphics void blank(); void clear(); void clearDisplay(); void display(); void drawPixel(int x, int y, uint8_t color); uint8_t getPixel(uint8_t x, uint8_t y); void drawCircle(int16_t x0, int16_t y0, int16_t r, uint8_t color); void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint8_t color); void fillCircle(int16_t x0, int16_t y0, int16_t r, uint8_t color); void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint8_t color); void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint8_t color); void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color); void drawFastVLine(int16_t x, int16_t y, int16_t h, uint8_t color); void drawFastHLine(int16_t x, int16_t y, int16_t w, uint8_t color); void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color); void fillScreen(uint8_t color); void drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint8_t color); void fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint8_t color); void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint8_t color); void drawCompressed(int16_t sx, int16_t sy, const uint8_t *bitmap, uint8_t color); void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size); uint8_t writeChar(uint8_t); inline void setCursor(int16_t x, int16_t y) { cursor_x = x; cursor_y = y; }; void setTextSize(uint8_t s) {textsize = max(1,s); }; static inline void swap(int16_t &a, int16_t &b); // Audio class ArduboyAudio { public: ArduboyAudio(){audio_enabled = false;}; void setup(); void on(); void off(); void saveOnOff(); bool enabled(); void tone(unsigned int frequency, unsigned long duration); protected: bool audio_enabled; }audio; protected: uint8_t frameRate; uint16_t frameCount; uint8_t eachFrameMillis; long lastFrameStart; long nextFrameStart ; bool post_render; uint8_t lastFrameDurationMs; uint8_t currentButtonState; uint8_t previousButtonState; uint8_t sBuffer[(HEIGHT * WIDTH) / 8]; int16_t cursor_x, cursor_y; uint16_t textcolor, textbgcolor; uint8_t textsize; uint8_t rotation; bool wrap; // If set, 'wrap' text at right edge of display }; #endif // ABSTRACTARDUBOY_H