Vinod Modhe / Mbed 2 deprecated IR_Remote

Dependencies:   mbed

Committer:
vin_jm
Date:
Sat Mar 09 00:51:21 2013 +0000
Revision:
0:dc689f01feb2
Rev.1

Who changed what in which revision?

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