/*
  Seeed_OLEDDisplay.h - SSD1327 Gray OLED Driver Library
  2011 Copyright (c) Seeed Technology Inc.  All right reserved.
 
  Author: Visweswara R
  
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

#ifndef _Seeed_OLED_Display_H_
#define _Seeed_OLED_Display_H_

// SeeedGrayOLED Instruction set addresses

#include "Arduino.h"

#define VERTICAL_MODE			01
#define HORIZONTAL_MODE			02

#define SeeedGrayOLED_Address		0x3c
#define SeeedGrayOLED_Command_Mode	0x80
#define SeeedGrayOLED_Data_Mode		0x40

#define SeeedGrayOLED_Display_Off_Cmd	0xAE
#define SeeedGrayOLED_Display_On_Cmd	0xAF

#define SeeedGrayOLED_Normal_Display_Cmd	0xA4
#define SeeedGrayOLED_Inverse_Display_Cmd	0xA7
#define SeeedGrayOLED_Activate_Scroll_Cmd	0x2F
#define SeeedGrayOLED_Dectivate_Scroll_Cmd	0x2E
#define SeeedGrayOLED_Set_ContrastLevel_Cmd	0x81

#define Scroll_Left			0x00
#define Scroll_Right			0x01

#define Scroll_2Frames			0x7
#define Scroll_3Frames			0x4
#define Scroll_4Frames			0x5
#define Scroll_5Frames			0x0
#define Scroll_25Frames			0x6
#define Scroll_64Frames			0x1
#define Scroll_128Frames		0x2
#define Scroll_256Frames		0x3


class OLEDDisplay
{
public:
	OLEDDisplay(){};

	void Init(void);
	
	void setGrayLevel(int level);
	void setTextXY(int x, int y, const char *text)
	{
		setTextXY(x,y);
		putString(text);
	}

	void setNormalDisplay();
	void setInverseDisplay();

	void sendCommand(unsigned char command);
	void sendData(unsigned char Data);

	void setVerticalMode();
	void setHorizontalMode();

	void setTextXY(unsigned char Row, unsigned char Column);
	void clearDisplay();
	void setContrastLevel(unsigned char ContrastLevel);
	void putChar(unsigned char c);
	void putString(const char *String);
	unsigned char putNumber(long n);
	unsigned char putFloat(float floatNumber,unsigned char decimal);
	unsigned char putFloat(float floatNumber);

	void drawBitmap(unsigned char *bitmaparray,int bytes);

	void setHorizontalScrollProperties(bool direction,unsigned char startRow, unsigned char endRow,unsigned char startColumn, unsigned char endColumn, unsigned char scrollSpeed);
	void activateScroll();
	void deactivateScroll();
	
	char addressingMode;

private:

	unsigned char grayH;
	unsigned char grayL;
};


#endif

