Poker code for Secondary Mbed

Dependencies:   NokiaLCD mbed

Committer:
wjenkins7
Date:
Wed Dec 11 07:07:19 2013 +0000
Revision:
0:1324145f6904
Mbed Poker Secondary

Who changed what in which revision?

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