Paul Staron / Mbed 2 deprecated KL25Z_DCF77_OLED160

Dependencies:   mbed

OLED160G1/OLED160G1.h

Committer:
star297
Date:
2013-03-06
Revision:
0:e3f7b0fd072e

File content as of revision 0:e3f7b0fd072e:

/**
 * mbed library for 4D Systems uOLED-160-G1
 *
 */

#ifndef _OLED160G1_H_
#define _OLED160G1_H_


#define OLED_BAUDRATE                       256000  // 300 baud to 256kbaud supported (256k not always stable?)
#define OLED_INIT_DELAY                     1100    // milliseconds

// Initialisation routine
#define OLED_DETECT_BAUDRATE                0x55

// Drawing routines
#define OLED_CLEAR                          0x45
#define OLED_BKGCOLOR                       0x42
#define OLED_COPYPASTE                      0x63
#define OLED_PEN_SIZE                       0x70

// Graphics
#define OLED_LINE                           0x4C
#define OLED_CIRCLE                         0x43
#define OLED_CIRCLEFILL                     0x69
#define OLED_PUTPIXEL                       0x50
#define OLED_READPIXEL                      0x52
#define OLED_RECTANGLE                      0x72

// Text properties
#define OLED_TEXT                           0x73
#define OLED_SETFONTSIZE                    0x46
#define OLED_FONT5X7                        0x00
#define OLED_FONT8X8                        0x01
#define OLED_FONT8X12                       0x02
#define OLED_TEXTFORMATED                   0x54
#define OLED_SET_TEXT_BACKGROUND_TYPE       0x4F
#define OLED_SET_BACKGROUND_COLOR           0x42
#define OLED_SET_TEXT_TRANSPARENT           0x00
#define OLED_SET_TEXT_OPAQUE                0x01

// OLED Control
#define OLED_COMMAND_CONTROL                0x59
#define OLED_COMMAND_DISPLAY                0x01
#define OLED_COMMAND_CONTRAST               0x02
#define OLED_COMMAND_POWER                  0x03

// Responses
#define OLED_ACK                            0x06  // Ok
#define OLED_NAK                            0x15  // Error

// Colours
#define OLED_WHITE                          0xFFFF
#define OLED_BLACK                          0x0000
#define OLED_BLUE                           0xA6BF
#define OLED_RED                            0xF800
#define OLED_GREEN                          0x2500

#define red_min 0//150
#define red_max 255
#define blue_min 0//185
#define blue_max 255
#define green_min 0//195
#define green_max 255


class OLED160G1 : public Stream {
public:

    /**
     * Default constructor.
     */
    OLED160G1(PinName serialTx, PinName serialRx, PinName resetPin);
    
    /**
     * Reset the display using the reset pin (the reset pin is active-low).
     */
    void resetDisplay();

    /**
     * Initialise OLED display.
     */
    void init();

    /**
     * Processes responses (ACK or NAK) from the OLED. A new command cannot be sent to the OLED until a NAK is received, so
     * this function waits for the minimum time needed.
     */
    void getResponse();

    /**
     * Clear the OLED screen.
     */
    void eraseScreen();
    
    /**
     * Calculate 16-bit value from RGB (0 to 63, 565 format)
     */
    int toRGB(int red, int green, int blue);
    
    /**
     * 
     */
    void drawPixel(char x, char y, int color);
    
    /**
     * 
     */
    void drawLine(char x1, char y1, char x2, char y2, int color);
    
    /**
     * 
     */
    void drawRectangle(char x, char y, char width, char height, int color);
    
    /**
     * 
     */
    void drawCircle(char x, char y, char radius, int color);
    
    /**
     * Set font size, for use with printf() or OLED_DrawSingleChar(); all other functions override this setting.
     *
     * @param : fontSize can be: OLED_FONT5X7, OLED_FONT8X8, or OLED_FONT8X12
     */
    void setFontSize(char fontSize);
    
    /**
     * Set font color, for use with printf(); all other functions override this setting.
     */
    void setFontColor(int fontColor);
    
    /**
     * Set the "pen size".
     *
     * @param penSize : 0 to draw solid objects; 1 to draw wireframe objects.
     */
    void setPenSize(char penSize);
    
    /**
     * Set whether or not text is drawn with an opaque or transparent background.
     *
     * @param : textBackgroundType can be OLED_SET_TEXT_TRANSPARENT or OLED_SET_TEXT_OPAQUE
     */
    void setTextBackgroundType(char textBackgroundType);
    
    /**
     * 
     */
    void setBackgroundColor(int color);
    
    /**
     * 
     */
    void drawText(char column, char row, char font_size, char *mytext, int color);
    
    /**
     * Draw a single ASCII character at the specified location.
     */
    void drawSingleChar(char column, char row, char theChar, int color);
    
    /**
     * Display control functions, such as display ON/OFF, contrast and power-up/power-down.
     *
     * @param value : can be 0x00 to 0x0F is mode is OLED_COMMAND_CONTRAST. Default contrast value is 0x08.
     */
    void displayControl(char mode, char value);
    
    /**
     * 
     */
    char getPenSize();
    
    /**
     * Get number of text rows
     */
    int rows(); //TODO: must depend on font size
    
    /**
     * Get number of text columns
     */
    int columns();
    
    /**
     * Set text cursor location
     */
    virtual void locate(int column, int row);
    
    /**
     * 
     */
    int lastCount;
    
    /**
     * 
     */
    int NAKCount;
    
protected:
    virtual int _putc(int value);
    virtual int _getc();
    
    /**
     * Text cursor column number
     */
    short _column;
    
    /**
     * Text cursor row number
     */
    short _row;
    
    char _fontSize;
    char _penSize;
    int _fontColor;
    
private:
    Serial s;
    DigitalOut  reset;
};

#endif