Driver to control the EM027BS013 board from Embedded Artists

Dependencies:   EM027BS013

EM027BS013 Simple Driver

This library provides an easy way to write data to the EM027BS013 display, by providing interfaces to common C functions and methods. The library was originally written by Peter Drescher, who created the "EaEpaper" library for the EM027AS012 display (available here, but adapted to use the newer display type and driver (available here), as the existing display is now discontinued.

Big thanks go to the team from Pervasive Displays and Electronic Artists for producing such a nice display, and to Peter for providing the initial interface used in this driver.

Committer:
Leigh_LbR
Date:
Thu May 19 14:08:34 2016 +0000
Revision:
1:46dfef41919b
Parent:
0:e36f1973a674
Added API documentation;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Leigh_LbR 0:e36f1973a674 1 /* mbed GraphicsDisplay Display Library Base Class
Leigh_LbR 0:e36f1973a674 2 * Copyright (c) 2007-2009 sford
Leigh_LbR 0:e36f1973a674 3 * Released under the MIT License: http://mbed.org/license/mit
Leigh_LbR 0:e36f1973a674 4 */
Leigh_LbR 0:e36f1973a674 5
Leigh_LbR 0:e36f1973a674 6 #include "GraphicsDisplay.h"
Leigh_LbR 0:e36f1973a674 7
Leigh_LbR 0:e36f1973a674 8 const unsigned char FONT8x8[97][8] = {
Leigh_LbR 0:e36f1973a674 9 0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00, // columns, rows, num_bytes_per_char
Leigh_LbR 0:e36f1973a674 10 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // space 0x20
Leigh_LbR 0:e36f1973a674 11 0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00, // !
Leigh_LbR 0:e36f1973a674 12 0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00, // "
Leigh_LbR 0:e36f1973a674 13 0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // #
Leigh_LbR 0:e36f1973a674 14 0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00, // $
Leigh_LbR 0:e36f1973a674 15 0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00, // %
Leigh_LbR 0:e36f1973a674 16 0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00, // &
Leigh_LbR 0:e36f1973a674 17 0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00, // '
Leigh_LbR 0:e36f1973a674 18 0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00, // (
Leigh_LbR 0:e36f1973a674 19 0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00, // )
Leigh_LbR 0:e36f1973a674 20 0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, // *
Leigh_LbR 0:e36f1973a674 21 0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00, // +
Leigh_LbR 0:e36f1973a674 22 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30, // ,
Leigh_LbR 0:e36f1973a674 23 0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, // -
Leigh_LbR 0:e36f1973a674 24 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, // .
Leigh_LbR 0:e36f1973a674 25 0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, // / (forward slash)
Leigh_LbR 0:e36f1973a674 26 0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00, // 0 0x30
Leigh_LbR 0:e36f1973a674 27 0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00, // 1
Leigh_LbR 0:e36f1973a674 28 0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00, // 2
Leigh_LbR 0:e36f1973a674 29 0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00, // 3
Leigh_LbR 0:e36f1973a674 30 0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00, // 4
Leigh_LbR 0:e36f1973a674 31 0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00, // 5
Leigh_LbR 0:e36f1973a674 32 0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00, // 6
Leigh_LbR 0:e36f1973a674 33 0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00, // 7
Leigh_LbR 0:e36f1973a674 34 0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00, // 8
Leigh_LbR 0:e36f1973a674 35 0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00, // 9
Leigh_LbR 0:e36f1973a674 36 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00, // :
Leigh_LbR 0:e36f1973a674 37 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30, // ;
Leigh_LbR 0:e36f1973a674 38 0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00, // <
Leigh_LbR 0:e36f1973a674 39 0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, // =
Leigh_LbR 0:e36f1973a674 40 0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00, // >
Leigh_LbR 0:e36f1973a674 41 0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00, // ?
Leigh_LbR 0:e36f1973a674 42 0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00, // @ 0x40
Leigh_LbR 0:e36f1973a674 43 0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00, // A
Leigh_LbR 0:e36f1973a674 44 0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00, // B
Leigh_LbR 0:e36f1973a674 45 0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00, // C
Leigh_LbR 0:e36f1973a674 46 0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00, // D
Leigh_LbR 0:e36f1973a674 47 0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00, // E
Leigh_LbR 0:e36f1973a674 48 0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00, // F
Leigh_LbR 0:e36f1973a674 49 0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00, // G
Leigh_LbR 0:e36f1973a674 50 0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00, // H
Leigh_LbR 0:e36f1973a674 51 0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // I
Leigh_LbR 0:e36f1973a674 52 0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, // J
Leigh_LbR 0:e36f1973a674 53 0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00, // K
Leigh_LbR 0:e36f1973a674 54 0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00, // L
Leigh_LbR 0:e36f1973a674 55 0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00, // M
Leigh_LbR 0:e36f1973a674 56 0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00, // N
Leigh_LbR 0:e36f1973a674 57 0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00, // O
Leigh_LbR 0:e36f1973a674 58 0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00, // P 0x50
Leigh_LbR 0:e36f1973a674 59 0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00, // Q
Leigh_LbR 0:e36f1973a674 60 0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00, // R
Leigh_LbR 0:e36f1973a674 61 0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00, // S
Leigh_LbR 0:e36f1973a674 62 0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00, // T
Leigh_LbR 0:e36f1973a674 63 0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, // U
Leigh_LbR 0:e36f1973a674 64 0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00, // V
Leigh_LbR 0:e36f1973a674 65 0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, // W
Leigh_LbR 0:e36f1973a674 66 0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00, // X
Leigh_LbR 0:e36f1973a674 67 0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00, // Y
Leigh_LbR 0:e36f1973a674 68 0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00, // Z
Leigh_LbR 0:e36f1973a674 69 0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, // [
Leigh_LbR 0:e36f1973a674 70 0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00, // \ (back slash)
Leigh_LbR 0:e36f1973a674 71 0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, // ]
Leigh_LbR 0:e36f1973a674 72 0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, // ^
Leigh_LbR 0:e36f1973a674 73 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // _
Leigh_LbR 0:e36f1973a674 74 0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, // ` 0x60
Leigh_LbR 0:e36f1973a674 75 0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00, // a
Leigh_LbR 0:e36f1973a674 76 0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00, // b
Leigh_LbR 0:e36f1973a674 77 0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00, // c
Leigh_LbR 0:e36f1973a674 78 0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00, // d
Leigh_LbR 0:e36f1973a674 79 0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, // e
Leigh_LbR 0:e36f1973a674 80 0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00, // f
Leigh_LbR 0:e36f1973a674 81 0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C, // g
Leigh_LbR 0:e36f1973a674 82 0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00, // h
Leigh_LbR 0:e36f1973a674 83 0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00, // i
Leigh_LbR 0:e36f1973a674 84 0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C, // j
Leigh_LbR 0:e36f1973a674 85 0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00, // k
Leigh_LbR 0:e36f1973a674 86 0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // l
Leigh_LbR 0:e36f1973a674 87 0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, // m
Leigh_LbR 0:e36f1973a674 88 0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00, // n
Leigh_LbR 0:e36f1973a674 89 0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, // o
Leigh_LbR 0:e36f1973a674 90 0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78, // p
Leigh_LbR 0:e36f1973a674 91 0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F, // q
Leigh_LbR 0:e36f1973a674 92 0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00, // r
Leigh_LbR 0:e36f1973a674 93 0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, // s
Leigh_LbR 0:e36f1973a674 94 0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00, // t
Leigh_LbR 0:e36f1973a674 95 0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00, // u
Leigh_LbR 0:e36f1973a674 96 0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00, // v
Leigh_LbR 0:e36f1973a674 97 0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00, // w
Leigh_LbR 0:e36f1973a674 98 0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00, // x
Leigh_LbR 0:e36f1973a674 99 0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C, // y
Leigh_LbR 0:e36f1973a674 100 0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00, // z
Leigh_LbR 0:e36f1973a674 101 0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00, // {
Leigh_LbR 0:e36f1973a674 102 0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00, // |
Leigh_LbR 0:e36f1973a674 103 0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00, // }
Leigh_LbR 0:e36f1973a674 104 0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00, // ~
Leigh_LbR 0:e36f1973a674 105 0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}; // DEL
Leigh_LbR 0:e36f1973a674 106
Leigh_LbR 0:e36f1973a674 107 GraphicsDisplay::GraphicsDisplay(const char *name):TextDisplay(name) {
Leigh_LbR 0:e36f1973a674 108 foreground(0xFFFF);
Leigh_LbR 0:e36f1973a674 109 background(0x0000);
Leigh_LbR 0:e36f1973a674 110 }
Leigh_LbR 0:e36f1973a674 111
Leigh_LbR 0:e36f1973a674 112 void GraphicsDisplay::character(int column, int row, int value) {
Leigh_LbR 0:e36f1973a674 113 blitbit(column * 8, row * 8, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
Leigh_LbR 0:e36f1973a674 114 }
Leigh_LbR 0:e36f1973a674 115
Leigh_LbR 0:e36f1973a674 116 void GraphicsDisplay::window(int x, int y, int w, int h) {
Leigh_LbR 0:e36f1973a674 117 // current pixel location
Leigh_LbR 0:e36f1973a674 118 _x = x;
Leigh_LbR 0:e36f1973a674 119 _y = y;
Leigh_LbR 0:e36f1973a674 120 // window settings
Leigh_LbR 0:e36f1973a674 121 _x1 = x;
Leigh_LbR 0:e36f1973a674 122 _x2 = x + w - 1;
Leigh_LbR 0:e36f1973a674 123 _y1 = y;
Leigh_LbR 0:e36f1973a674 124 _y2 = y + h - 1;
Leigh_LbR 0:e36f1973a674 125 }
Leigh_LbR 0:e36f1973a674 126
Leigh_LbR 0:e36f1973a674 127 void GraphicsDisplay::putp(int colour) {
Leigh_LbR 0:e36f1973a674 128 // put pixel at current pixel location
Leigh_LbR 0:e36f1973a674 129 pixel(_x, _y, colour);
Leigh_LbR 0:e36f1973a674 130 // update pixel location based on window settings
Leigh_LbR 0:e36f1973a674 131 _x++;
Leigh_LbR 0:e36f1973a674 132 if(_x > _x2) {
Leigh_LbR 0:e36f1973a674 133 _x = _x1;
Leigh_LbR 0:e36f1973a674 134 _y++;
Leigh_LbR 0:e36f1973a674 135 if(_y > _y2) {
Leigh_LbR 0:e36f1973a674 136 _y = _y1;
Leigh_LbR 0:e36f1973a674 137 }
Leigh_LbR 0:e36f1973a674 138 }
Leigh_LbR 0:e36f1973a674 139 }
Leigh_LbR 0:e36f1973a674 140
Leigh_LbR 0:e36f1973a674 141 void GraphicsDisplay::fill(int x, int y, int w, int h, int colour) {
Leigh_LbR 0:e36f1973a674 142 window(x, y, w, h);
Leigh_LbR 0:e36f1973a674 143 for(int i=0; i<w*h; i++) {
Leigh_LbR 0:e36f1973a674 144 putp(colour);
Leigh_LbR 0:e36f1973a674 145 }
Leigh_LbR 0:e36f1973a674 146 }
Leigh_LbR 0:e36f1973a674 147
Leigh_LbR 0:e36f1973a674 148 void GraphicsDisplay::cls() {
Leigh_LbR 0:e36f1973a674 149 fill(0, 0, width(), height(), _background);
Leigh_LbR 0:e36f1973a674 150 }
Leigh_LbR 0:e36f1973a674 151
Leigh_LbR 0:e36f1973a674 152 void GraphicsDisplay::blit(int x, int y, int w, int h, const int *colour) {
Leigh_LbR 0:e36f1973a674 153 window(x, y, w, h);
Leigh_LbR 0:e36f1973a674 154 for(int i=0; i<w*h; i++) {
Leigh_LbR 0:e36f1973a674 155 putp(colour[i]);
Leigh_LbR 0:e36f1973a674 156 }
Leigh_LbR 0:e36f1973a674 157 }
Leigh_LbR 0:e36f1973a674 158
Leigh_LbR 0:e36f1973a674 159 void GraphicsDisplay::blitbit(int x, int y, int w, int h, const char* colour) {
Leigh_LbR 0:e36f1973a674 160 window(x, y, w, h);
Leigh_LbR 0:e36f1973a674 161 for(int i = 0; i < w*h; i++) {
Leigh_LbR 0:e36f1973a674 162 char byte = colour[i >> 3];
Leigh_LbR 0:e36f1973a674 163 int offset = i & 0x7;
Leigh_LbR 0:e36f1973a674 164 int c = ((byte << offset) & 0x80) ? _foreground : _background;
Leigh_LbR 0:e36f1973a674 165 putp(c);
Leigh_LbR 0:e36f1973a674 166 }
Leigh_LbR 0:e36f1973a674 167 }
Leigh_LbR 0:e36f1973a674 168
Leigh_LbR 0:e36f1973a674 169 int GraphicsDisplay::columns() {
Leigh_LbR 0:e36f1973a674 170 return width() / 8;
Leigh_LbR 0:e36f1973a674 171 }
Leigh_LbR 0:e36f1973a674 172
Leigh_LbR 0:e36f1973a674 173 int GraphicsDisplay::rows() {
Leigh_LbR 0:e36f1973a674 174 return height() / 8;
Leigh_LbR 0:e36f1973a674 175 }
Leigh_LbR 0:e36f1973a674 176