General graphics tool
Graphic.h@0:404c38e71c68, 2015-04-15 (annotated)
- Committer:
- steeven
- Date:
- Wed Apr 15 11:29:50 2015 +0000
- Revision:
- 0:404c38e71c68
General graphic lib
Who changed what in which revision?
User | Revision | Line number | New 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 */ |