Dependencies:   mbed

Committer:
EricWieser
Date:
Tue Sep 01 16:44:44 2009 +0000
Revision:
0:05ffcf87fc7f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EricWieser 0:05ffcf87fc7f 1 /* mbed Library - MobileLCD
EricWieser 0:05ffcf87fc7f 2 * Copyright (c) 2007, sford
EricWieser 0:05ffcf87fc7f 3 */
EricWieser 0:05ffcf87fc7f 4
EricWieser 0:05ffcf87fc7f 5 #include "MobileLCD.h"
EricWieser 0:05ffcf87fc7f 6
EricWieser 0:05ffcf87fc7f 7 #include "mbed.h"
EricWieser 0:05ffcf87fc7f 8
EricWieser 0:05ffcf87fc7f 9 using namespace mbed;
EricWieser 0:05ffcf87fc7f 10
EricWieser 0:05ffcf87fc7f 11 MobileLCD::MobileLCD(int mosi, int miso, int clk, int cs, int rst)
EricWieser 0:05ffcf87fc7f 12 : _spi(mosi, miso, clk)
EricWieser 0:05ffcf87fc7f 13 , _rst(rst)
EricWieser 0:05ffcf87fc7f 14 , _cs(cs) {
EricWieser 0:05ffcf87fc7f 15
EricWieser 0:05ffcf87fc7f 16 _row = 0;
EricWieser 0:05ffcf87fc7f 17 _column = 0;
EricWieser 0:05ffcf87fc7f 18 _rows = 16;
EricWieser 0:05ffcf87fc7f 19 _columns = 16;
EricWieser 0:05ffcf87fc7f 20 _width = 130;
EricWieser 0:05ffcf87fc7f 21 _height = 130;
EricWieser 0:05ffcf87fc7f 22 foreground(0x00FFFFFF);
EricWieser 0:05ffcf87fc7f 23 background(0x00000000);
EricWieser 0:05ffcf87fc7f 24 reset();
EricWieser 0:05ffcf87fc7f 25 }
EricWieser 0:05ffcf87fc7f 26
EricWieser 0:05ffcf87fc7f 27 void MobileLCD::reset() {
EricWieser 0:05ffcf87fc7f 28 _cs = 1;
EricWieser 0:05ffcf87fc7f 29 _rst = 0;
EricWieser 0:05ffcf87fc7f 30 _spi.format(9);
EricWieser 0:05ffcf87fc7f 31 _spi.frequency(5000000);
EricWieser 0:05ffcf87fc7f 32 wait(0.001);
EricWieser 0:05ffcf87fc7f 33 _rst = 1;
EricWieser 0:05ffcf87fc7f 34 wait(0.001);
EricWieser 0:05ffcf87fc7f 35 _select();
EricWieser 0:05ffcf87fc7f 36 command(0xCA); // display control
EricWieser 0:05ffcf87fc7f 37 data(0);
EricWieser 0:05ffcf87fc7f 38 data(32);
EricWieser 0:05ffcf87fc7f 39 data(0);
EricWieser 0:05ffcf87fc7f 40 command(0xBB);
EricWieser 0:05ffcf87fc7f 41 data(1);
EricWieser 0:05ffcf87fc7f 42
EricWieser 0:05ffcf87fc7f 43 command(0xD1); // oscillator on
EricWieser 0:05ffcf87fc7f 44 command(0x94); // sleep out
EricWieser 0:05ffcf87fc7f 45 command(0x20); // power control
EricWieser 0:05ffcf87fc7f 46 data(0x0F);
EricWieser 0:05ffcf87fc7f 47
EricWieser 0:05ffcf87fc7f 48 command(0xA7); // invert display
EricWieser 0:05ffcf87fc7f 49
EricWieser 0:05ffcf87fc7f 50 command(0x81); // Voltage control
EricWieser 0:05ffcf87fc7f 51 data(39); // contrast setting: 0..63
EricWieser 0:05ffcf87fc7f 52 data(3); // resistance ratio
EricWieser 0:05ffcf87fc7f 53 wait(0.001);
EricWieser 0:05ffcf87fc7f 54
EricWieser 0:05ffcf87fc7f 55 orientation();
EricWieser 0:05ffcf87fc7f 56
EricWieser 0:05ffcf87fc7f 57 // clear screen, including surrounding border
EricWieser 0:05ffcf87fc7f 58 _window(0, 0, 130, 130);
EricWieser 0:05ffcf87fc7f 59 for(int i=0; i<130*130; i++) {
EricWieser 0:05ffcf87fc7f 60 _putp(0x000000);
EricWieser 0:05ffcf87fc7f 61 }
EricWieser 0:05ffcf87fc7f 62 command(0xAF); // turn on the display
EricWieser 0:05ffcf87fc7f 63
EricWieser 0:05ffcf87fc7f 64 _deselect();
EricWieser 0:05ffcf87fc7f 65
EricWieser 0:05ffcf87fc7f 66 }
EricWieser 0:05ffcf87fc7f 67
EricWieser 0:05ffcf87fc7f 68 void MobileLCD::command(int value) {
EricWieser 0:05ffcf87fc7f 69 _spi.write(value & 0xFF);
EricWieser 0:05ffcf87fc7f 70 }
EricWieser 0:05ffcf87fc7f 71
EricWieser 0:05ffcf87fc7f 72 void MobileLCD::data(int value) {
EricWieser 0:05ffcf87fc7f 73 _spi.write(value | 0x100);
EricWieser 0:05ffcf87fc7f 74 }
EricWieser 0:05ffcf87fc7f 75
EricWieser 0:05ffcf87fc7f 76 void MobileLCD::_select() {
EricWieser 0:05ffcf87fc7f 77 _cs = 0;
EricWieser 0:05ffcf87fc7f 78 }
EricWieser 0:05ffcf87fc7f 79
EricWieser 0:05ffcf87fc7f 80 void MobileLCD::_deselect() {
EricWieser 0:05ffcf87fc7f 81 _cs = 1;
EricWieser 0:05ffcf87fc7f 82 }
EricWieser 0:05ffcf87fc7f 83
EricWieser 0:05ffcf87fc7f 84 void MobileLCD::_window(int x, int y, int width, int height) {
EricWieser 0:05ffcf87fc7f 85 int x1, x2, y1, y2;
EricWieser 0:05ffcf87fc7f 86 switch(0) { //_rotation) {
EricWieser 0:05ffcf87fc7f 87 default:
EricWieser 0:05ffcf87fc7f 88 case 0:
EricWieser 0:05ffcf87fc7f 89 x1 = x + 2;
EricWieser 0:05ffcf87fc7f 90 y1 = y + 0;
EricWieser 0:05ffcf87fc7f 91 x2 = x1 + width - 1;
EricWieser 0:05ffcf87fc7f 92 y2 = y1 + height - 1;
EricWieser 0:05ffcf87fc7f 93 break;
EricWieser 0:05ffcf87fc7f 94 case 1:
EricWieser 0:05ffcf87fc7f 95 x1 = y + 1;
EricWieser 0:05ffcf87fc7f 96 y1 = x + 1;
EricWieser 0:05ffcf87fc7f 97 x2 = x1 + height - 1;
EricWieser 0:05ffcf87fc7f 98 y2 = y1 + width - 1;
EricWieser 0:05ffcf87fc7f 99 break;
EricWieser 0:05ffcf87fc7f 100 case 2:
EricWieser 0:05ffcf87fc7f 101 x1 = x + 1;
EricWieser 0:05ffcf87fc7f 102 y1 = y + 3;
EricWieser 0:05ffcf87fc7f 103 x2 = x1 + width - 1;
EricWieser 0:05ffcf87fc7f 104 y2 = y1 + height - 1;
EricWieser 0:05ffcf87fc7f 105 break;
EricWieser 0:05ffcf87fc7f 106 case 3:
EricWieser 0:05ffcf87fc7f 107 x1 = y + 3;
EricWieser 0:05ffcf87fc7f 108 y1 = x + 3;
EricWieser 0:05ffcf87fc7f 109 x2 = x1 + height - 1;
EricWieser 0:05ffcf87fc7f 110 y2 = y1 + width - 1;
EricWieser 0:05ffcf87fc7f 111 break;
EricWieser 0:05ffcf87fc7f 112 }
EricWieser 0:05ffcf87fc7f 113 command(0x15); // column
EricWieser 0:05ffcf87fc7f 114 data(x1);
EricWieser 0:05ffcf87fc7f 115 data(x2);
EricWieser 0:05ffcf87fc7f 116 command(0x75); // page
EricWieser 0:05ffcf87fc7f 117 data(y1);
EricWieser 0:05ffcf87fc7f 118 data(y2);
EricWieser 0:05ffcf87fc7f 119 command(0x5C); // start write to ram
EricWieser 0:05ffcf87fc7f 120 }
EricWieser 0:05ffcf87fc7f 121
EricWieser 0:05ffcf87fc7f 122 void MobileLCD::_putp(int colour) {
EricWieser 0:05ffcf87fc7f 123 int gr = ((colour >> 20) & 0x0F)
EricWieser 0:05ffcf87fc7f 124 | ((colour >> 8 ) & 0xF0);
EricWieser 0:05ffcf87fc7f 125 int nb = ((colour >> 4 ) & 0x0F);
EricWieser 0:05ffcf87fc7f 126 data(nb);
EricWieser 0:05ffcf87fc7f 127 data(gr);
EricWieser 0:05ffcf87fc7f 128 }
EricWieser 0:05ffcf87fc7f 129
EricWieser 0:05ffcf87fc7f 130 void MobileLCD::orientation() {
EricWieser 0:05ffcf87fc7f 131 int m;
EricWieser 0:05ffcf87fc7f 132 switch(0) { //_rotation) {
EricWieser 0:05ffcf87fc7f 133 case 0:
EricWieser 0:05ffcf87fc7f 134 default:
EricWieser 0:05ffcf87fc7f 135 m = 3;
EricWieser 0:05ffcf87fc7f 136 break;
EricWieser 0:05ffcf87fc7f 137 case 2:
EricWieser 0:05ffcf87fc7f 138 m = 0;
EricWieser 0:05ffcf87fc7f 139 break;
EricWieser 0:05ffcf87fc7f 140 case 1:
EricWieser 0:05ffcf87fc7f 141 m = 5;
EricWieser 0:05ffcf87fc7f 142 break;
EricWieser 0:05ffcf87fc7f 143 case 3:
EricWieser 0:05ffcf87fc7f 144 m = 6;
EricWieser 0:05ffcf87fc7f 145 break;
EricWieser 0:05ffcf87fc7f 146 }
EricWieser 0:05ffcf87fc7f 147
EricWieser 0:05ffcf87fc7f 148 command(0xBC); // data control
EricWieser 0:05ffcf87fc7f 149 data(m); // scan dirs
EricWieser 0:05ffcf87fc7f 150 data(1); // RGB
EricWieser 0:05ffcf87fc7f 151 data(4); // grayscale
EricWieser 0:05ffcf87fc7f 152 }
EricWieser 0:05ffcf87fc7f 153
EricWieser 0:05ffcf87fc7f 154
EricWieser 0:05ffcf87fc7f 155 const unsigned char FONT8x8[97][8] = {
EricWieser 0:05ffcf87fc7f 156 0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00, // columns, rows, num_bytes_per_char
EricWieser 0:05ffcf87fc7f 157 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // space 0x20
EricWieser 0:05ffcf87fc7f 158 0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00, // !
EricWieser 0:05ffcf87fc7f 159 0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00, // "
EricWieser 0:05ffcf87fc7f 160 0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // #
EricWieser 0:05ffcf87fc7f 161 0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00, // $
EricWieser 0:05ffcf87fc7f 162 0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00, // %
EricWieser 0:05ffcf87fc7f 163 0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00, // &
EricWieser 0:05ffcf87fc7f 164 0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00, // '
EricWieser 0:05ffcf87fc7f 165 0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00, // (
EricWieser 0:05ffcf87fc7f 166 0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00, // )
EricWieser 0:05ffcf87fc7f 167 0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, // *
EricWieser 0:05ffcf87fc7f 168 0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00, // +
EricWieser 0:05ffcf87fc7f 169 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30, // ,
EricWieser 0:05ffcf87fc7f 170 0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, // -
EricWieser 0:05ffcf87fc7f 171 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, // .
EricWieser 0:05ffcf87fc7f 172 0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, // / (forward slash)
EricWieser 0:05ffcf87fc7f 173 0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00, // 0 0x30
EricWieser 0:05ffcf87fc7f 174 0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00, // 1
EricWieser 0:05ffcf87fc7f 175 0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00, // 2
EricWieser 0:05ffcf87fc7f 176 0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00, // 3
EricWieser 0:05ffcf87fc7f 177 0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00, // 4
EricWieser 0:05ffcf87fc7f 178 0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00, // 5
EricWieser 0:05ffcf87fc7f 179 0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00, // 6
EricWieser 0:05ffcf87fc7f 180 0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00, // 7
EricWieser 0:05ffcf87fc7f 181 0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00, // 8
EricWieser 0:05ffcf87fc7f 182 0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00, // 9
EricWieser 0:05ffcf87fc7f 183 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00, // :
EricWieser 0:05ffcf87fc7f 184 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30, // ;
EricWieser 0:05ffcf87fc7f 185 0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00, // <
EricWieser 0:05ffcf87fc7f 186 0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, // =
EricWieser 0:05ffcf87fc7f 187 0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00, // >
EricWieser 0:05ffcf87fc7f 188 0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00, // ?
EricWieser 0:05ffcf87fc7f 189 0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00, // @ 0x40
EricWieser 0:05ffcf87fc7f 190 0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00, // A
EricWieser 0:05ffcf87fc7f 191 0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00, // B
EricWieser 0:05ffcf87fc7f 192 0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00, // C
EricWieser 0:05ffcf87fc7f 193 0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00, // D
EricWieser 0:05ffcf87fc7f 194 0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00, // E
EricWieser 0:05ffcf87fc7f 195 0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00, // F
EricWieser 0:05ffcf87fc7f 196 0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00, // G
EricWieser 0:05ffcf87fc7f 197 0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00, // H
EricWieser 0:05ffcf87fc7f 198 0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // I
EricWieser 0:05ffcf87fc7f 199 0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, // J
EricWieser 0:05ffcf87fc7f 200 0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00, // K
EricWieser 0:05ffcf87fc7f 201 0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00, // L
EricWieser 0:05ffcf87fc7f 202 0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00, // M
EricWieser 0:05ffcf87fc7f 203 0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00, // N
EricWieser 0:05ffcf87fc7f 204 0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00, // O
EricWieser 0:05ffcf87fc7f 205 0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00, // P 0x50
EricWieser 0:05ffcf87fc7f 206 0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00, // Q
EricWieser 0:05ffcf87fc7f 207 0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00, // R
EricWieser 0:05ffcf87fc7f 208 0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00, // S
EricWieser 0:05ffcf87fc7f 209 0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00, // T
EricWieser 0:05ffcf87fc7f 210 0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, // U
EricWieser 0:05ffcf87fc7f 211 0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00, // V
EricWieser 0:05ffcf87fc7f 212 0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, // W
EricWieser 0:05ffcf87fc7f 213 0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00, // X
EricWieser 0:05ffcf87fc7f 214 0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00, // Y
EricWieser 0:05ffcf87fc7f 215 0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00, // Z
EricWieser 0:05ffcf87fc7f 216 0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, // [
EricWieser 0:05ffcf87fc7f 217 0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00, // \ (back slash)
EricWieser 0:05ffcf87fc7f 218 0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, // ]
EricWieser 0:05ffcf87fc7f 219 0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, // ^
EricWieser 0:05ffcf87fc7f 220 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // _
EricWieser 0:05ffcf87fc7f 221 0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, // ` 0x60
EricWieser 0:05ffcf87fc7f 222 0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00, // a
EricWieser 0:05ffcf87fc7f 223 0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00, // b
EricWieser 0:05ffcf87fc7f 224 0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00, // c
EricWieser 0:05ffcf87fc7f 225 0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00, // d
EricWieser 0:05ffcf87fc7f 226 0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, // e
EricWieser 0:05ffcf87fc7f 227 0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00, // f
EricWieser 0:05ffcf87fc7f 228 0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C, // g
EricWieser 0:05ffcf87fc7f 229 0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00, // h
EricWieser 0:05ffcf87fc7f 230 0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00, // i
EricWieser 0:05ffcf87fc7f 231 0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C, // j
EricWieser 0:05ffcf87fc7f 232 0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00, // k
EricWieser 0:05ffcf87fc7f 233 0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // l
EricWieser 0:05ffcf87fc7f 234 0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, // m
EricWieser 0:05ffcf87fc7f 235 0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00, // n
EricWieser 0:05ffcf87fc7f 236 0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, // o
EricWieser 0:05ffcf87fc7f 237 0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78, // p
EricWieser 0:05ffcf87fc7f 238 0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F, // q
EricWieser 0:05ffcf87fc7f 239 0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00, // r
EricWieser 0:05ffcf87fc7f 240 0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, // s
EricWieser 0:05ffcf87fc7f 241 0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00, // t
EricWieser 0:05ffcf87fc7f 242 0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00, // u
EricWieser 0:05ffcf87fc7f 243 0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00, // v
EricWieser 0:05ffcf87fc7f 244 0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00, // w
EricWieser 0:05ffcf87fc7f 245 0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00, // x
EricWieser 0:05ffcf87fc7f 246 0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C, // y
EricWieser 0:05ffcf87fc7f 247 0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00, // z
EricWieser 0:05ffcf87fc7f 248 0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00, // {
EricWieser 0:05ffcf87fc7f 249 0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00, // |
EricWieser 0:05ffcf87fc7f 250 0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00, // }
EricWieser 0:05ffcf87fc7f 251 0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00, // ~
EricWieser 0:05ffcf87fc7f 252 0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}; // DEL
EricWieser 0:05ffcf87fc7f 253
EricWieser 0:05ffcf87fc7f 254 void MobileLCD::locate(int column, int row) {
EricWieser 0:05ffcf87fc7f 255 _row = row;
EricWieser 0:05ffcf87fc7f 256 _column = column;
EricWieser 0:05ffcf87fc7f 257 }
EricWieser 0:05ffcf87fc7f 258
EricWieser 0:05ffcf87fc7f 259 void MobileLCD::newline() {
EricWieser 0:05ffcf87fc7f 260 _column = 0;
EricWieser 0:05ffcf87fc7f 261 _row++;
EricWieser 0:05ffcf87fc7f 262 if(_row >= _rows) {
EricWieser 0:05ffcf87fc7f 263 _row = 0;
EricWieser 0:05ffcf87fc7f 264 }
EricWieser 0:05ffcf87fc7f 265 }
EricWieser 0:05ffcf87fc7f 266
EricWieser 0:05ffcf87fc7f 267 int MobileLCD::_putc(int value) {
EricWieser 0:05ffcf87fc7f 268 int x = _column * 8; // FIXME: Char sizes
EricWieser 0:05ffcf87fc7f 269 int y = _row * 8;
EricWieser 0:05ffcf87fc7f 270 bitblit(x + 1, y + 1, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
EricWieser 0:05ffcf87fc7f 271
EricWieser 0:05ffcf87fc7f 272 _column++;
EricWieser 0:05ffcf87fc7f 273
EricWieser 0:05ffcf87fc7f 274 if(_column >= _columns) {
EricWieser 0:05ffcf87fc7f 275 _row++;
EricWieser 0:05ffcf87fc7f 276 _column = 0;
EricWieser 0:05ffcf87fc7f 277 }
EricWieser 0:05ffcf87fc7f 278
EricWieser 0:05ffcf87fc7f 279 if(_row >= _rows) {
EricWieser 0:05ffcf87fc7f 280 _row = 0;
EricWieser 0:05ffcf87fc7f 281 }
EricWieser 0:05ffcf87fc7f 282
EricWieser 0:05ffcf87fc7f 283 return value;
EricWieser 0:05ffcf87fc7f 284 }
EricWieser 0:05ffcf87fc7f 285
EricWieser 0:05ffcf87fc7f 286 void MobileLCD::cls() {
EricWieser 0:05ffcf87fc7f 287 fill(0, 0, _width, _height, _background);
EricWieser 0:05ffcf87fc7f 288 _row = 0;
EricWieser 0:05ffcf87fc7f 289 _column = 0;
EricWieser 0:05ffcf87fc7f 290 }
EricWieser 0:05ffcf87fc7f 291
EricWieser 0:05ffcf87fc7f 292 int MobileLCD::width() {
EricWieser 0:05ffcf87fc7f 293 return _width;
EricWieser 0:05ffcf87fc7f 294 }
EricWieser 0:05ffcf87fc7f 295
EricWieser 0:05ffcf87fc7f 296 int MobileLCD::height() {
EricWieser 0:05ffcf87fc7f 297 return _height;
EricWieser 0:05ffcf87fc7f 298 }
EricWieser 0:05ffcf87fc7f 299
EricWieser 0:05ffcf87fc7f 300 int MobileLCD::columns() {
EricWieser 0:05ffcf87fc7f 301 return _columns;
EricWieser 0:05ffcf87fc7f 302 }
EricWieser 0:05ffcf87fc7f 303
EricWieser 0:05ffcf87fc7f 304 int MobileLCD::rows() {
EricWieser 0:05ffcf87fc7f 305 return _rows;
EricWieser 0:05ffcf87fc7f 306 }
EricWieser 0:05ffcf87fc7f 307
EricWieser 0:05ffcf87fc7f 308 void MobileLCD::window(int x, int y, int width, int height) {
EricWieser 0:05ffcf87fc7f 309 _select();
EricWieser 0:05ffcf87fc7f 310 _window(x, y, width, height);
EricWieser 0:05ffcf87fc7f 311 _deselect();
EricWieser 0:05ffcf87fc7f 312 }
EricWieser 0:05ffcf87fc7f 313
EricWieser 0:05ffcf87fc7f 314 void MobileLCD::putp(int colour) {
EricWieser 0:05ffcf87fc7f 315 _select();
EricWieser 0:05ffcf87fc7f 316 _putp(colour);
EricWieser 0:05ffcf87fc7f 317 _deselect();
EricWieser 0:05ffcf87fc7f 318 }
EricWieser 0:05ffcf87fc7f 319
EricWieser 0:05ffcf87fc7f 320 void MobileLCD::pixel(int x, int y, int colour) {
EricWieser 0:05ffcf87fc7f 321 _select();
EricWieser 0:05ffcf87fc7f 322 _window(x, y, 1, 1);
EricWieser 0:05ffcf87fc7f 323 _putp(colour);
EricWieser 0:05ffcf87fc7f 324 _deselect();
EricWieser 0:05ffcf87fc7f 325 }
EricWieser 0:05ffcf87fc7f 326
EricWieser 0:05ffcf87fc7f 327 void MobileLCD::fill(int x, int y, int width, int height, int colour) {
EricWieser 0:05ffcf87fc7f 328 _select();
EricWieser 0:05ffcf87fc7f 329 _window(x, y, width, height);
EricWieser 0:05ffcf87fc7f 330 for(int i=0; i<width*height; i++) {
EricWieser 0:05ffcf87fc7f 331 _putp(colour);
EricWieser 0:05ffcf87fc7f 332 }
EricWieser 0:05ffcf87fc7f 333 _window(0, 0, _width, _height);
EricWieser 0:05ffcf87fc7f 334 _deselect();
EricWieser 0:05ffcf87fc7f 335 }
EricWieser 0:05ffcf87fc7f 336
EricWieser 0:05ffcf87fc7f 337
EricWieser 0:05ffcf87fc7f 338 void MobileLCD::blit(int x, int y, int width, int height, const int* colour) {
EricWieser 0:05ffcf87fc7f 339 _select();
EricWieser 0:05ffcf87fc7f 340 _window(x, y, width, height);
EricWieser 0:05ffcf87fc7f 341 for(int i=0; i<width*height; i++) {
EricWieser 0:05ffcf87fc7f 342 _putp(colour[i]);
EricWieser 0:05ffcf87fc7f 343 }
EricWieser 0:05ffcf87fc7f 344 _window(0, 0, _width, _height);
EricWieser 0:05ffcf87fc7f 345 _deselect();
EricWieser 0:05ffcf87fc7f 346 }
EricWieser 0:05ffcf87fc7f 347
EricWieser 0:05ffcf87fc7f 348 void MobileLCD::foreground(int v) {
EricWieser 0:05ffcf87fc7f 349 _foreground = v;
EricWieser 0:05ffcf87fc7f 350 }
EricWieser 0:05ffcf87fc7f 351
EricWieser 0:05ffcf87fc7f 352 void MobileLCD::background(int v) {
EricWieser 0:05ffcf87fc7f 353 _background = v;
EricWieser 0:05ffcf87fc7f 354 }
EricWieser 0:05ffcf87fc7f 355
EricWieser 0:05ffcf87fc7f 356 void MobileLCD::bitblit(int x, int y, int width, int height, const char* bitstream) {
EricWieser 0:05ffcf87fc7f 357 _select();
EricWieser 0:05ffcf87fc7f 358 _window(x, y, width, height);
EricWieser 0:05ffcf87fc7f 359 for(int i=0; i<height*width; i++) {
EricWieser 0:05ffcf87fc7f 360 int byte = i / 8;
EricWieser 0:05ffcf87fc7f 361 int bit = i % 8;
EricWieser 0:05ffcf87fc7f 362 int colour = ((bitstream[byte] << bit) & 0x80) ? _foreground : _background;
EricWieser 0:05ffcf87fc7f 363 _putp(colour);
EricWieser 0:05ffcf87fc7f 364 }
EricWieser 0:05ffcf87fc7f 365 _window(0, 0, _width, _height);
EricWieser 0:05ffcf87fc7f 366 _deselect();
EricWieser 0:05ffcf87fc7f 367 }
EricWieser 0:05ffcf87fc7f 368
EricWieser 0:05ffcf87fc7f 369 #define SWAP(x, y) (x ^= y ^= x ^= y)
EricWieser 0:05ffcf87fc7f 370
EricWieser 0:05ffcf87fc7f 371 void MobileLCD::line(int x1, int y1, int x2, int y2, int colour)
EricWieser 0:05ffcf87fc7f 372 {
EricWieser 0:05ffcf87fc7f 373 int Dx = x2 - x1;
EricWieser 0:05ffcf87fc7f 374 int Dy = y2 - y1;
EricWieser 0:05ffcf87fc7f 375 int steep = (abs(Dy) >= abs(Dx));
EricWieser 0:05ffcf87fc7f 376 if (steep)
EricWieser 0:05ffcf87fc7f 377 {
EricWieser 0:05ffcf87fc7f 378 SWAP(x1, y1);
EricWieser 0:05ffcf87fc7f 379 SWAP(x2, y2);
EricWieser 0:05ffcf87fc7f 380 // recompute Dx, Dy after swap
EricWieser 0:05ffcf87fc7f 381 Dx = x2 - x1;
EricWieser 0:05ffcf87fc7f 382 Dy = y2 - y1;
EricWieser 0:05ffcf87fc7f 383 }
EricWieser 0:05ffcf87fc7f 384 int xstep = 1;
EricWieser 0:05ffcf87fc7f 385 if (Dx < 0)
EricWieser 0:05ffcf87fc7f 386 {
EricWieser 0:05ffcf87fc7f 387 xstep = -1;
EricWieser 0:05ffcf87fc7f 388 Dx = -Dx;
EricWieser 0:05ffcf87fc7f 389 }
EricWieser 0:05ffcf87fc7f 390 int ystep = 1;
EricWieser 0:05ffcf87fc7f 391 if (Dy < 0)
EricWieser 0:05ffcf87fc7f 392 {
EricWieser 0:05ffcf87fc7f 393 ystep = -1;
EricWieser 0:05ffcf87fc7f 394 Dy = -Dy;
EricWieser 0:05ffcf87fc7f 395 }
EricWieser 0:05ffcf87fc7f 396 int TwoDy = 2*Dy;
EricWieser 0:05ffcf87fc7f 397 int TwoDyTwoDx = TwoDy - 2*Dx; // 2*Dy - 2*Dx
EricWieser 0:05ffcf87fc7f 398 int E = TwoDy - Dx; //2*Dy - Dx
EricWieser 0:05ffcf87fc7f 399 int y = y1;
EricWieser 0:05ffcf87fc7f 400 int xDraw, yDraw;
EricWieser 0:05ffcf87fc7f 401 for (int x = x1; x != x2; x += xstep)
EricWieser 0:05ffcf87fc7f 402 {
EricWieser 0:05ffcf87fc7f 403 if (steep)
EricWieser 0:05ffcf87fc7f 404 {
EricWieser 0:05ffcf87fc7f 405 xDraw = y;
EricWieser 0:05ffcf87fc7f 406 yDraw = x;
EricWieser 0:05ffcf87fc7f 407 }
EricWieser 0:05ffcf87fc7f 408 else
EricWieser 0:05ffcf87fc7f 409 {
EricWieser 0:05ffcf87fc7f 410 xDraw = x;
EricWieser 0:05ffcf87fc7f 411 yDraw = y;
EricWieser 0:05ffcf87fc7f 412 }
EricWieser 0:05ffcf87fc7f 413 // plot
EricWieser 0:05ffcf87fc7f 414 pixel(xDraw, yDraw, colour);
EricWieser 0:05ffcf87fc7f 415 // next
EricWieser 0:05ffcf87fc7f 416 if (E > 0)
EricWieser 0:05ffcf87fc7f 417 {
EricWieser 0:05ffcf87fc7f 418 E += TwoDyTwoDx; //E += 2*Dy - 2*Dx;
EricWieser 0:05ffcf87fc7f 419 y = y + ystep;
EricWieser 0:05ffcf87fc7f 420 }
EricWieser 0:05ffcf87fc7f 421 else
EricWieser 0:05ffcf87fc7f 422 {
EricWieser 0:05ffcf87fc7f 423 E += TwoDy; //E += 2*Dy;
EricWieser 0:05ffcf87fc7f 424 }
EricWieser 0:05ffcf87fc7f 425 }
EricWieser 0:05ffcf87fc7f 426 }