Fork of SSD1289 lib for Landtiger board

ssd1289.h

Committer:
ttodorov
Date:
2012-11-21
Revision:
1:f4f77e6729cd
Parent:
0:d7202c9fc5db
Child:
2:799c4fb113c5

File content as of revision 1:f4f77e6729cd:

#ifndef SSD1289_H
#define SSD1289_H

#include "mbed.h"
#include "fonts.h"

#define RGB( r, g, b )          ( ( ( ( r ) & 248 ) | ( ( g ) >> 5 ) ) << 8 ) | ( ( ( ( g ) & 28 ) << 3 ) | ( ( b ) >> 3 ) )
#define COLOR_BLACK             RGB( 0x00, 0x00, 0x00 )
#define COLOR_WHITE             RGB( 0xFF, 0xFF, 0xFF )
#define COLOR_RED               RGB( 0xFF, 0x00, 0x00 )
#define COLOR_GREEN             RGB( 0x00, 0xFF, 0x00 )
#define COLOR_BLIUE             RGB( 0x00, 0x00, 0xFF )

typedef enum Orientation_enum
{
    PORTRAIT = 0,
    LANDSCAPE = 1,
} orientation_t;

typedef enum Alignment_enum
{
    LEFT = 0,
    CENTER = 9998,
    RIGHT = 9999,
} align_t;

typedef struct Font_struct
{
    const    char* font;
    unsigned char  width;
    unsigned char  height;
    unsigned char  offset;
    unsigned char  numchars;
} font_metrics_t;

typedef unsigned short* bitmap_t;

class SSD1289 : public Stream
{
public:
    SSD1289( PinName CS_PIN, PinName RESET_PIN, PinName RS_PIN, PinName WR_PIN, PinName RD_PIN, BusOut* DATA_PORT );
    void Initialize( orientation_t orientation = LANDSCAPE );
    
    void SetForeground( unsigned short color = COLOR_WHITE );
    void SetBackground( unsigned short color = COLOR_BLACK );
    void SetFont( const char* font );
    
    void FillScreen( int color = -1 );
    void ClearScreen( void );
    void DrawPixel( unsigned short x, unsigned short y, int color = -2 );
    void DrawLine( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
    void DrawRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
    void DrawRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
    void FillRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
    void FillRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
    void DrawCircle( unsigned short x, unsigned short y, unsigned short radius, int color = -2 );
    void FillCircle( unsigned short x, unsigned short y, unsigned short radius, int color = -2 );
    void Print( const char *str, unsigned short x, unsigned short y, int fgColor = -2, int bgColor = -1, unsigned short deg = 0 );
    void DrawBitmap( unsigned short x, unsigned short y, unsigned short sx, unsigned short sy, bitmap_t data, unsigned char scale = 1 );
    void DrawBitmap( unsigned short x, unsigned short y, unsigned short sx, unsigned short sy, bitmap_t data, unsigned short deg, unsigned short rox, unsigned short roy );
    
    /*
    void PrintNumI( long num, int x, int y );
    void PrintNumF( double num, uint8_t dec, int x, int y, char divider = '.' );
    */
    
private:
    DigitalOut _lcd_pin_cs, _lcd_pin_reset, _lcd_pin_rs, _lcd_pin_wr, _lcd_pin_rd;
    BusOut* _lcd_port;
    orientation_t _orientation;
    static const long _disp_width = 239;
    static const long _disp_height = 319;
    unsigned short _foreground, _background;
    font_metrics_t _font;

private:
    virtual void writeCmd( unsigned short cmd );
    virtual void writeData( unsigned short data );
    virtual void writeCmdData( unsigned short cmd, unsigned short data );
    
    void setXY( uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2 );
    void clearXY( void );
    void drawHLine( unsigned short x, unsigned short y, unsigned short len, int color = -2 );
    void drawVLine( unsigned short x, unsigned short y, unsigned short len, int color = -2 );

    void printChar( char c, unsigned short x, unsigned short y, int fgColor = -2, int bgColor = -1 );
    void rotateChar( char c, unsigned short x, unsigned short y, int pos, int fgColor = -2, int bgColor = -1, unsigned short deg = 0 );
    
    // from Stream
    virtual int _putc( int value );
    virtual int _getc();
};

#endif /* SSD1289_H */