Cave Runner Game w/Accelerometer and Nokia LCD

Dependencies:   mbed ADXL345 beep

Committer:
jhaksar
Date:
Tue Oct 11 16:42:41 2011 +0000
Revision:
0:200970a8c0bf

        

Who changed what in which revision?

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