ROVER - RoverDisplay API added

Signed-off-by: Mustafa Ozcelikors <mozcelikors@gmail.com>
diff --git a/rover/include/roverapi/rover_display.hpp b/rover/include/roverapi/rover_display.hpp
new file mode 100644
index 0000000..eaada28
--- /dev/null
+++ b/rover/include/roverapi/rover_display.hpp
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2017 FH Dortmund and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Description:
+ *    Rover Display API - Interfaces for Rover display application development - Header file
+ *
+ * Usage Instructions:
+ *    1) One should set-up I2C on Raspberry Pi to run this script properly (taken from Adafruit):
+ *           1.1) Install necessary modules:
+ *                sudo apt-get install -y python-smbus
+ *                sudo apt-get install -y i2c-tools
+ *           1.2) In /etc/modules, add following lines:
+ *           	  i2c-bcm2708
+ *                i2c-dev
+ *           1.3) In /etc/modprobe.d/raspi-blacklist.conf, uncomment possible following lines:
+ *                blacklist spi-bcm2708
+ *                blacklist i2c-bcm2708
+ *           1.4) In /boot/config.txt, add following lines:
+ *                dtparam=i2c1=on
+ *                dtparam=i2c_arm=on
+ *           1.5) Then reboot
+ *                sudo reboot
+ *           1.6) To test I2C and see the addresses,
+ *                sudo i2cdetect -y 1
+ *    2) For cross-compilation using Eclipse IDE, make sure to follow the instructions located under readme.txt files
+ *       in drivers/oled_drivers:
+ *    	    Please note that in order to use OLED SSD1306 with I2C,
+ *		    one has to download bcm2835.c, bcm2835.h, and has access to current <linux/i2c-dev.h>.
+ *		    In case the compiler complains, please also download the newest i2c-dev.h and put it in drivers/oled_drivers folder.
+ *		    Download i2c-dev.h from: https://www.kernel.org/pub/linux/
+ *		    Download bcm2835.c and bcm2835.h from: https://github.com/hallard/ArduiPi_SSD1306
+ *
+ * Contributors:
+ *    M.Ozcelikors <mozcelikors@gmail.com>, created API 17.11.2017
+ *
+ */
+
+#ifndef API_ROVER_DISPLAY_HPP_
+#define API_ROVER_DISPLAY_HPP_
+
+#include <drivers/oled_drivers/Adafruit_SSD1306.h>
+
+#define NUMFLAKES 10
+#define XPOS 0
+#define YPOS 1
+#define DELTAY 2
+
+namespace rover
+{
+	/**
+	 * @brief Contains the member functions to control OLED display on the Rover. This class is a wrapper API for Adafruit_GFX and Adafruit_SSD1306 libraries.
+	 */
+	class RoverDisplay
+	{
+		private:
+			/**
+			 * @brief Object to handle OLED operations.
+			 */
+			Adafruit_SSD1306 my_display;
+
+		public:
+			/**
+			 * @brief Static definition to indicate BLACK color
+			 */
+			static const int BLACK_COLOR = 0;
+
+			/**
+			 * @brief Static definition to indicate WHITE color
+			 */
+			static const int WHITE_COLOR = 1;
+
+			/**
+			 * @brief Initializes the OLED display of the rover
+			 * @return void
+			 */
+			void initialize (void);
+
+			/**
+			 * @brief Displays the buffer contents on the OLED display
+			 * @return void
+			 */
+			void display (void);
+
+			/**
+			 * @brief Returns the display object
+			 * @return void
+			 */
+			Adafruit_SSD1306& getDisplay (void);
+
+			/**
+			 * @brief Clears the display
+			 * @return void
+			 */
+			void clearDisplay (void) ;
+
+			/**
+			 * @brief Draws a bitmap on the OLED display
+			 * @param x is the horizontal pixel location to start drawing bitmap
+			 * @param y is the vertical pixel location to start drawing bitmap
+			 * @param w is the width of bitmap in pixels
+			 * @param h is the height of bitmap in pixels
+			 * @param color is the color to draw the bitmap. RoverDisplay::BLACK_COLOR or RoverDisplay::WHITE_COLOR
+			 * @param bitmap is the unsigned integer array that contains the bitmap image.
+			 * @return void
+			 */
+			void drawBitmap (int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) ;
+
+			/**
+			 * @brief Sets the cursor to a position in order to start typing text.
+			 * @param x is the horizontal pixel location
+			 * @param y is the vertical pixel location
+			 * @return void
+			 */
+			void setCursor (int16_t x, int16_t y);
+
+			/**
+			 * @brief Sets the text size to one of the predefined sizes.
+			 * @param s is the size in unsigned integer type. Example values involve 1,2,3.
+			 * @return void
+			 */
+			void setTextSize (uint8_t s);
+
+			/**
+			 * @brief Sets the text color to either white or black
+			 * @param c is the textcolor in integer. RoverDisplay::BLACK_COLOR or RoverDisplay::WHITE_COLOR
+			 * @return void
+			 */
+			void setTextColor (uint16_t c);
+
+			/**
+			 * @brief Sets the text and background color color to either white or black
+			 * @param c is the text color in integer. RoverDisplay::BLACK_COLOR or RoverDisplay::WHITE_COLOR
+			 * @param c is the background color in integer. RoverDisplay::BLACK_COLOR or RoverDisplay::WHITE_COLOR
+			 * @return void
+			 */
+			void setTextColor (uint16_t c, uint16_t b);
+
+			/**
+			 * @brief Prints a string to OLED display starting from cursor location
+			 * @param string is the message to print to OLED display.
+			 * @return void
+			 */
+			void print (const char * string);
+
+			/**
+			 * @brief Draws a rectangle to OLED display
+			 * @param x is the horizontal pixel location to start drawing rectangle
+			 * @param y is the vertical pixel location to start drawing rectangle
+			 * @param w is the width of rectangle in pixels
+			 * @param h is the height of rectangle in pixels
+			 * @param color is the color to draw the rectangle. RoverDisplay::BLACK_COLOR or RoverDisplay::WHITE_COLOR
+			 * @return void
+			 */
+			void drawRect (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
+	};
+}
+
+
+
+#endif /* API_ROVER_DISPLAY_HPP_ */
diff --git a/rover/src/roverapi/rover_display.cpp b/rover/src/roverapi/rover_display.cpp
new file mode 100644
index 0000000..dcb67ce
--- /dev/null
+++ b/rover/src/roverapi/rover_display.cpp
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2017 FH Dortmund and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Description:
+ *    Rover Display API - Interfaces for Rover display application development
+ *
+ * Usage Instructions:
+ *    1) One should set-up I2C on Raspberry Pi to run this script properly (taken from Adafruit):
+ *           1.1) Install necessary modules:
+ *                sudo apt-get install -y python-smbus
+ *                sudo apt-get install -y i2c-tools
+ *           1.2) In /etc/modules, add following lines:
+ *           	  i2c-bcm2708
+ *                i2c-dev
+ *           1.3) In /etc/modprobe.d/raspi-blacklist.conf, uncomment possible following lines:
+ *                blacklist spi-bcm2708
+ *                blacklist i2c-bcm2708
+ *           1.4) In /boot/config.txt, add following lines:
+ *                dtparam=i2c1=on
+ *                dtparam=i2c_arm=on
+ *           1.5) Then reboot
+ *                sudo reboot
+ *           1.6) To test I2C and see the addresses,
+ *                sudo i2cdetect -y 1
+ *    2) For cross-compilation using Eclipse IDE, make sure to follow the instructions located under readme.txt files
+ *       in drivers/oled_drivers:
+ *    	    Please note that in order to use OLED SSD1306 with I2C,
+ *		    one has to download bcm2835.c, bcm2835.h, and has access to current <linux/i2c-dev.h>.
+ *		    In case the compiler complains, please also download the newest i2c-dev.h and put it in drivers/oled_drivers folder.
+ *		    Download i2c-dev.h from: https://www.kernel.org/pub/linux/
+ *		    Download bcm2835.c and bcm2835.h from: https://github.com/hallard/ArduiPi_SSD1306
+ *
+ * Contributors:
+ *    M.Ozcelikors <mozcelikors@gmail.com>, created API 17.11.2017
+ *
+ */
+
+#include <roverapi/rover_display.hpp>
+
+#include <drivers/oled_drivers/ArduiPi_SSD1306.h>
+#include <drivers/oled_drivers/Adafruit_GFX.h>
+
+void rover::RoverDisplay::initialize(void)
+{
+	/* Type to describe default options for the OLED initialization */
+	struct s_opts
+	{
+		int oled;
+		int verbose;
+	};
+
+	/* Default options for the OLED initialization. */
+	s_opts local_opts = {
+		OLED_ADAFRUIT_I2C_128x64,		// Default oled
+		false							// Not verbose
+	};
+
+	/* I2C change parameters to fit to your LCD */
+	if ( !this->my_display.init(OLED_I2C_RESET, local_opts.oled) )
+		exit(EXIT_FAILURE);
+
+	this->my_display.begin();
+	this->my_display.clearDisplay();   // clears the screen and buffer
+}
+
+void rover::RoverDisplay::display(void)
+{
+
+	this->my_display.display();
+
+}
+
+void rover::RoverDisplay::clearDisplay(void)
+{
+
+	this->my_display.clearDisplay();
+
+}
+
+void rover::RoverDisplay::drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color)
+{
+
+	this->my_display.drawBitmap(x, y, bitmap, w, h, color);
+
+}
+
+void rover::RoverDisplay::setCursor (int16_t x, int16_t y)
+{
+
+	this->my_display.setCursor (x, y);
+
+}
+
+void rover::RoverDisplay::setTextSize (uint8_t s)
+{
+
+	this->my_display.setTextSize (s);
+
+}
+
+void rover::RoverDisplay::setTextColor (uint16_t c)
+{
+
+	this->my_display.setTextColor (c);
+
+}
+
+void rover::RoverDisplay::setTextColor (uint16_t c, uint16_t b)
+{
+
+	this->my_display.setTextColor (c, b);
+
+}
+
+void rover::RoverDisplay::print (const char * string)
+{
+
+	this->my_display.print (string);
+
+}
+
+void rover::RoverDisplay::drawRect (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
+{
+
+	this->my_display.drawRect (x, y, w, h, color);
+
+}
+
+Adafruit_SSD1306& rover::RoverDisplay::getDisplay (void)
+{
+
+	return this->my_display;
+
+}