General graphics tool

Dependents:   EPD_GDE021A1_demo

Committer:
steeven
Date:
Wed Apr 15 11:29:50 2015 +0000
Revision:
0:404c38e71c68
General graphic lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
steeven 0:404c38e71c68 1 /* mbed library for 264*176 pixel 2.7 INCH E-PAPER DISPLAY from Pervasive Displays
steeven 0:404c38e71c68 2 * Copyright (c) 2013 Peter Drescher - DC2PD
steeven 0:404c38e71c68 3 *
steeven 0:404c38e71c68 4 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
steeven 0:404c38e71c68 5 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
steeven 0:404c38e71c68 6 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
steeven 0:404c38e71c68 7 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
steeven 0:404c38e71c68 8 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
steeven 0:404c38e71c68 9 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
steeven 0:404c38e71c68 10 * THE SOFTWARE.
steeven 0:404c38e71c68 11 */
steeven 0:404c38e71c68 12
steeven 0:404c38e71c68 13
steeven 0:404c38e71c68 14 // 09.11.2013 initial Version
steeven 0:404c38e71c68 15
steeven 0:404c38e71c68 16 #ifndef Graphic_H
steeven 0:404c38e71c68 17 #define Graphic_H
steeven 0:404c38e71c68 18
steeven 0:404c38e71c68 19 /**
steeven 0:404c38e71c68 20 * Includes
steeven 0:404c38e71c68 21 */
steeven 0:404c38e71c68 22 #include "mbed.h"
steeven 0:404c38e71c68 23
steeven 0:404c38e71c68 24 /** Bitmap
steeven 0:404c38e71c68 25 */
steeven 0:404c38e71c68 26 struct Bitmap{
steeven 0:404c38e71c68 27 int xSize;
steeven 0:404c38e71c68 28 int ySize;
steeven 0:404c38e71c68 29 int Byte_in_Line;
steeven 0:404c38e71c68 30 char* data;
steeven 0:404c38e71c68 31 };
steeven 0:404c38e71c68 32
steeven 0:404c38e71c68 33 /* color definitions */
steeven 0:404c38e71c68 34 #define Black 0x0
steeven 0:404c38e71c68 35 #define White 0x3
steeven 0:404c38e71c68 36
steeven 0:404c38e71c68 37 /** Display control class, based on sDisplay and TextDisplay
steeven 0:404c38e71c68 38 *
steeven 0:404c38e71c68 39 * Example with pinning for KL25Z:
steeven 0:404c38e71c68 40 * @code
steeven 0:404c38e71c68 41 * #include "mbed.h"
steeven 0:404c38e71c68 42 * #include "Graphic.h"
steeven 0:404c38e71c68 43 * #include "Arial28x28.h"
steeven 0:404c38e71c68 44 * #include "Arial12x12.h"
steeven 0:404c38e71c68 45 * #include "font_big.h"
steeven 0:404c38e71c68 46 * #include "s.h"
steeven 0:404c38e71c68 47
steeven 0:404c38e71c68 48 * // the E-Paper board from embedded artists has a LM75 temp sensor to compensate the temperature effect. If it is cold the display reacts slower.
steeven 0:404c38e71c68 49 * // The LM75 need a I2C -> 2 pins : sda and scl
steeven 0:404c38e71c68 50 * // The display data is written via SPI -> 3 pins : mosi,miso,sck
steeven 0:404c38e71c68 51 * // There are also some control signals
steeven 0:404c38e71c68 52 * // The pwm pin has to be connected to a PWM enabled pin : pwm
steeven 0:404c38e71c68 53 * // The other signals are connected to normal IO`s
steeven 0:404c38e71c68 54 * //
steeven 0:404c38e71c68 55 * Graphic epaper(PTD7, // PWR_CTRL
steeven 0:404c38e71c68 56 * PTD6, // BORDER
steeven 0:404c38e71c68 57 * PTE31, // DISCHARGE
steeven 0:404c38e71c68 58 * PTA17, // RESET_DISP
steeven 0:404c38e71c68 59 * PTA16, // BUSY
steeven 0:404c38e71c68 60 * PTC17, // SSEL
steeven 0:404c38e71c68 61 * PTD4, // PWM
steeven 0:404c38e71c68 62 * PTD2,PTD3,PTD1, // MOSI,MISO,SCLK
steeven 0:404c38e71c68 63 * PTE0,PTE1); // SDA,SCL
steeven 0:404c38e71c68 64 *
steeven 0:404c38e71c68 65 * int main() {
steeven 0:404c38e71c68 66 *
steeven 0:404c38e71c68 67 * epaper.cls(); // clear screen
steeven 0:404c38e71c68 68 * epaper.set_font((unsigned char*) Arial28x28); // select the font
steeven 0:404c38e71c68 69 * epaper.locate(5,20); // set cursor
steeven 0:404c38e71c68 70 * epaper.printf("Hello Mbed"); // print text
steeven 0:404c38e71c68 71 * epaper.rect(3,15,150,50,1); // draw frame
steeven 0:404c38e71c68 72 * epaper.write_disp(); // update screen
steeven 0:404c38e71c68 73 *
steeven 0:404c38e71c68 74 * @endcode
steeven 0:404c38e71c68 75 */
steeven 0:404c38e71c68 76
steeven 0:404c38e71c68 77
steeven 0:404c38e71c68 78 class Graphic {
steeven 0:404c38e71c68 79
steeven 0:404c38e71c68 80 public:
steeven 0:404c38e71c68 81
steeven 0:404c38e71c68 82 /**
steeven 0:404c38e71c68 83 * Constructor.
steeven 0:404c38e71c68 84 */
steeven 0:404c38e71c68 85 Graphic(uint8_t *buf, int w, int h, int bits = 1);
steeven 0:404c38e71c68 86
steeven 0:404c38e71c68 87 /**
steeven 0:404c38e71c68 88 * Set color
steeven 0:404c38e71c68 89 */
steeven 0:404c38e71c68 90 void color(int foreground, int background);
steeven 0:404c38e71c68 91
steeven 0:404c38e71c68 92 /**
steeven 0:404c38e71c68 93 * Clear the display
steeven 0:404c38e71c68 94 */
steeven 0:404c38e71c68 95 void clear();
steeven 0:404c38e71c68 96
steeven 0:404c38e71c68 97 /**
steeven 0:404c38e71c68 98 * set or reset a single pixel
steeven 0:404c38e71c68 99 *
steeven 0:404c38e71c68 100 * @param x horizontal position
steeven 0:404c38e71c68 101 * @param y vertical position
steeven 0:404c38e71c68 102 */
steeven 0:404c38e71c68 103 void pixel(int x, int y, unsigned int color);
steeven 0:404c38e71c68 104
steeven 0:404c38e71c68 105
steeven 0:404c38e71c68 106 /** draw a 1 pixel line
steeven 0:404c38e71c68 107 *
steeven 0:404c38e71c68 108 * @param x0,y0 start point
steeven 0:404c38e71c68 109 * @param x1,y1 stop point
steeven 0:404c38e71c68 110 */
steeven 0:404c38e71c68 111 void line(int x0, int y0, int x1, int y1);
steeven 0:404c38e71c68 112
steeven 0:404c38e71c68 113 /** draw a rect
steeven 0:404c38e71c68 114 *
steeven 0:404c38e71c68 115 * @param x0,y0 top left corner
steeven 0:404c38e71c68 116 * @param x1,y1 down right corner
steeven 0:404c38e71c68 117 */
steeven 0:404c38e71c68 118 void rect(int x0, int y0, int x1, int y1);
steeven 0:404c38e71c68 119
steeven 0:404c38e71c68 120 /** draw a filled rect
steeven 0:404c38e71c68 121 *
steeven 0:404c38e71c68 122 * @param x0,y0 top left corner
steeven 0:404c38e71c68 123 * @param x1,y1 down right corner
steeven 0:404c38e71c68 124 */
steeven 0:404c38e71c68 125 void fillrect(int x0, int y0, int x1, int y1);
steeven 0:404c38e71c68 126
steeven 0:404c38e71c68 127 /** draw a circle
steeven 0:404c38e71c68 128 *
steeven 0:404c38e71c68 129 * @param x0,y0 center
steeven 0:404c38e71c68 130 * @param r radius
steeven 0:404c38e71c68 131 */
steeven 0:404c38e71c68 132 void circle(int x0, int y0, int r);
steeven 0:404c38e71c68 133
steeven 0:404c38e71c68 134 /** draw a filled circle
steeven 0:404c38e71c68 135 *
steeven 0:404c38e71c68 136 * @param x0,y0 center
steeven 0:404c38e71c68 137 * @param r radius
steeven 0:404c38e71c68 138 */
steeven 0:404c38e71c68 139 void fillcircle(int x0, int y0, int r);
steeven 0:404c38e71c68 140
steeven 0:404c38e71c68 141 /** setup cursor position
steeven 0:404c38e71c68 142 *
steeven 0:404c38e71c68 143 * @param x x-position (top left)
steeven 0:404c38e71c68 144 * @param y y-position
steeven 0:404c38e71c68 145 */
steeven 0:404c38e71c68 146 void locate(int x, int y);
steeven 0:404c38e71c68 147
steeven 0:404c38e71c68 148 /** calculate the max number of char in a line
steeven 0:404c38e71c68 149 *
steeven 0:404c38e71c68 150 * @returns max columns
steeven 0:404c38e71c68 151 * depends on actual font size
steeven 0:404c38e71c68 152 */
steeven 0:404c38e71c68 153 int columns();
steeven 0:404c38e71c68 154
steeven 0:404c38e71c68 155 /** calculate the max number of columns
steeven 0:404c38e71c68 156 *
steeven 0:404c38e71c68 157 * @returns max column
steeven 0:404c38e71c68 158 * depends on actual font size
steeven 0:404c38e71c68 159 */
steeven 0:404c38e71c68 160 int rows();
steeven 0:404c38e71c68 161
steeven 0:404c38e71c68 162 /** put a char on the screen
steeven 0:404c38e71c68 163 *
steeven 0:404c38e71c68 164 * @param value char to print
steeven 0:404c38e71c68 165 * @returns printed char
steeven 0:404c38e71c68 166 */
steeven 0:404c38e71c68 167 void putc(int value);
steeven 0:404c38e71c68 168
steeven 0:404c38e71c68 169 /** print a string on the screen
steeven 0:404c38e71c68 170 *
steeven 0:404c38e71c68 171 * @param str string to print
steeven 0:404c38e71c68 172 */
steeven 0:404c38e71c68 173 void print(const char *str);
steeven 0:404c38e71c68 174
steeven 0:404c38e71c68 175 /** select the font to use
steeven 0:404c38e71c68 176 *
steeven 0:404c38e71c68 177 * @param f pointer to font array
steeven 0:404c38e71c68 178 *
steeven 0:404c38e71c68 179 * font array can created with GLCD Font Creator from http://www.mikroe.com
steeven 0:404c38e71c68 180 * you have to add 4 parameter at the beginning of the font array to use:
steeven 0:404c38e71c68 181 * - the number of byte / char
steeven 0:404c38e71c68 182 * - the vertial size in pixel
steeven 0:404c38e71c68 183 * - the horizontal size in pixel
steeven 0:404c38e71c68 184 * - the number of byte per vertical line
steeven 0:404c38e71c68 185 * you also have to change the array to char[]
steeven 0:404c38e71c68 186 */
steeven 0:404c38e71c68 187 void font(const unsigned char* f);
steeven 0:404c38e71c68 188
steeven 0:404c38e71c68 189 /** print bitmap to buffer
steeven 0:404c38e71c68 190 *
steeven 0:404c38e71c68 191 * @param bm struct Bitmap in flash
steeven 0:404c38e71c68 192 * @param x x start
steeven 0:404c38e71c68 193 * @param y y start
steeven 0:404c38e71c68 194 *
steeven 0:404c38e71c68 195 */
steeven 0:404c38e71c68 196 void print_bm(Bitmap bm, int x, int y);
steeven 0:404c38e71c68 197
steeven 0:404c38e71c68 198
steeven 0:404c38e71c68 199
steeven 0:404c38e71c68 200 protected:
steeven 0:404c38e71c68 201
steeven 0:404c38e71c68 202
steeven 0:404c38e71c68 203 uint8_t *_buf; //drawing buffer
steeven 0:404c38e71c68 204
steeven 0:404c38e71c68 205 int _w; //screen width
steeven 0:404c38e71c68 206 int _h; //screeen height
steeven 0:404c38e71c68 207 char _bits; //per pix
steeven 0:404c38e71c68 208
steeven 0:404c38e71c68 209 int _foreColor;
steeven 0:404c38e71c68 210 int _backgroundColor;
steeven 0:404c38e71c68 211
steeven 0:404c38e71c68 212 unsigned char* _font;
steeven 0:404c38e71c68 213 int _charX;
steeven 0:404c38e71c68 214 int _charY;
steeven 0:404c38e71c68 215
steeven 0:404c38e71c68 216 };
steeven 0:404c38e71c68 217
steeven 0:404c38e71c68 218 #endif /* Graphic_H */