blob: eaada28d8b6bbc24296f8980cb05c4126385331d [file] [log] [blame]
/*
* 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_ */