Fork of SSD1289 lib for Landtiger board

Committer:
ttodorov
Date:
Wed Nov 21 23:11:20 2012 +0000
Revision:
1:f4f77e6729cd
Parent:
0:d7202c9fc5db
Child:
2:799c4fb113c5
- finished porting of the UTFT library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ttodorov 0:d7202c9fc5db 1 #include "ssd1289.h"
ttodorov 0:d7202c9fc5db 2
ttodorov 1:f4f77e6729cd 3 #define LOW 0
ttodorov 1:f4f77e6729cd 4 #define HIGH 1
ttodorov 1:f4f77e6729cd 5 #define pulseLow( pin ) pin = LOW; pin = HIGH
ttodorov 1:f4f77e6729cd 6 #define pulseHigh( pin ) pin = HIGH; pin = LOW
ttodorov 1:f4f77e6729cd 7 #define swap( type, a, b ) { type tmp = ( a ); ( a ) = ( b ); ( b ) = tmp; }
ttodorov 0:d7202c9fc5db 8
ttodorov 1:f4f77e6729cd 9 #ifndef ushort
ttodorov 1:f4f77e6729cd 10 typedef unsigned short ushort;
ttodorov 1:f4f77e6729cd 11 #endif
ttodorov 0:d7202c9fc5db 12
ttodorov 0:d7202c9fc5db 13 SSD1289::SSD1289( PinName CS_PIN, PinName RESET_PIN, PinName RS_PIN, PinName WR_PIN, PinName RD_PIN, BusOut* DATA_PORT )
ttodorov 0:d7202c9fc5db 14 : _lcd_pin_cs( CS_PIN ), _lcd_pin_reset( RESET_PIN ), _lcd_pin_rs( RS_PIN ), _lcd_pin_wr( WR_PIN ), _lcd_pin_rd( RD_PIN )
ttodorov 0:d7202c9fc5db 15 {
ttodorov 0:d7202c9fc5db 16 _lcd_port = DATA_PORT;
ttodorov 0:d7202c9fc5db 17 }
ttodorov 0:d7202c9fc5db 18
ttodorov 1:f4f77e6729cd 19 /*
ttodorov 1:f4f77e6729cd 20
ttodorov 1:f4f77e6729cd 21 void SSD1289::PrintNumI( long num, int x, int y )
ttodorov 1:f4f77e6729cd 22 {
ttodorov 1:f4f77e6729cd 23 char buf[ 25 ];
ttodorov 1:f4f77e6729cd 24 char st[ 27 ];
ttodorov 1:f4f77e6729cd 25 bool neg = false;
ttodorov 1:f4f77e6729cd 26 int c = 0;
ttodorov 1:f4f77e6729cd 27
ttodorov 1:f4f77e6729cd 28 if ( num == 0 )
ttodorov 1:f4f77e6729cd 29 {
ttodorov 1:f4f77e6729cd 30 st[ 0 ] = 48;
ttodorov 1:f4f77e6729cd 31 st[ 1 ] = 0;
ttodorov 1:f4f77e6729cd 32 }
ttodorov 1:f4f77e6729cd 33 else
ttodorov 1:f4f77e6729cd 34 {
ttodorov 1:f4f77e6729cd 35 if ( num < 0 )
ttodorov 1:f4f77e6729cd 36 {
ttodorov 1:f4f77e6729cd 37 neg = true;
ttodorov 1:f4f77e6729cd 38 num = -num;
ttodorov 1:f4f77e6729cd 39 }
ttodorov 1:f4f77e6729cd 40
ttodorov 1:f4f77e6729cd 41 while ( num > 0 )
ttodorov 1:f4f77e6729cd 42 {
ttodorov 1:f4f77e6729cd 43 buf[ c ] = 48 + ( num % 10 );
ttodorov 1:f4f77e6729cd 44 c++;
ttodorov 1:f4f77e6729cd 45 num = ( num - ( num % 10 ) ) / 10;
ttodorov 1:f4f77e6729cd 46 }
ttodorov 1:f4f77e6729cd 47 buf[ c ] = 0;
ttodorov 1:f4f77e6729cd 48
ttodorov 1:f4f77e6729cd 49 if ( neg )
ttodorov 1:f4f77e6729cd 50 {
ttodorov 1:f4f77e6729cd 51 st[ 0 ] = 45;
ttodorov 1:f4f77e6729cd 52 }
ttodorov 1:f4f77e6729cd 53
ttodorov 1:f4f77e6729cd 54 for ( int i = 0; i < c; i++ )
ttodorov 1:f4f77e6729cd 55 {
ttodorov 1:f4f77e6729cd 56 st[ i + neg ] = buf[ c - i - 1 ];
ttodorov 1:f4f77e6729cd 57 }
ttodorov 1:f4f77e6729cd 58 st[ c + neg ] = 0;
ttodorov 1:f4f77e6729cd 59 }
ttodorov 1:f4f77e6729cd 60
ttodorov 1:f4f77e6729cd 61 Print( st, x, y );
ttodorov 1:f4f77e6729cd 62 }
ttodorov 1:f4f77e6729cd 63
ttodorov 1:f4f77e6729cd 64 void SSD1289::PrintNumF( double num, uint8_t dec, int x, int y, char divider )
ttodorov 1:f4f77e6729cd 65 {
ttodorov 1:f4f77e6729cd 66 char buf[ 25 ];
ttodorov 1:f4f77e6729cd 67 char st[ 27 ];
ttodorov 1:f4f77e6729cd 68 bool neg = false;
ttodorov 1:f4f77e6729cd 69 int c = 0;
ttodorov 1:f4f77e6729cd 70 int c2, mult;
ttodorov 1:f4f77e6729cd 71 unsigned long inum;
ttodorov 1:f4f77e6729cd 72
ttodorov 1:f4f77e6729cd 73 if ( num == 0 )
ttodorov 1:f4f77e6729cd 74 {
ttodorov 1:f4f77e6729cd 75 st[ 0 ] = 48;
ttodorov 1:f4f77e6729cd 76 st[ 1 ] = divider;
ttodorov 1:f4f77e6729cd 77 for ( int i = 0; i < dec; i++ )
ttodorov 1:f4f77e6729cd 78 st[ 2 + i ] = 48;
ttodorov 1:f4f77e6729cd 79 st[ 2 + dec ] = 0;
ttodorov 1:f4f77e6729cd 80 }
ttodorov 1:f4f77e6729cd 81 else
ttodorov 1:f4f77e6729cd 82 {
ttodorov 1:f4f77e6729cd 83 if ( num < 0 )
ttodorov 1:f4f77e6729cd 84 {
ttodorov 1:f4f77e6729cd 85 neg = true;
ttodorov 1:f4f77e6729cd 86 num = -num;
ttodorov 1:f4f77e6729cd 87 }
ttodorov 1:f4f77e6729cd 88
ttodorov 1:f4f77e6729cd 89 if ( dec < 1 )
ttodorov 1:f4f77e6729cd 90 dec = 1;
ttodorov 1:f4f77e6729cd 91 if ( dec > 5 )
ttodorov 1:f4f77e6729cd 92 dec = 5;
ttodorov 1:f4f77e6729cd 93
ttodorov 1:f4f77e6729cd 94 mult = 1;
ttodorov 1:f4f77e6729cd 95 for ( int j = 0; j < dec; j++ )
ttodorov 1:f4f77e6729cd 96 mult = mult * 10;
ttodorov 1:f4f77e6729cd 97 inum = long( num * mult + 0.5 );
ttodorov 1:f4f77e6729cd 98
ttodorov 1:f4f77e6729cd 99 while ( inum > 0 )
ttodorov 1:f4f77e6729cd 100 {
ttodorov 1:f4f77e6729cd 101 buf[ c ] = 48 + ( inum % 10 );
ttodorov 1:f4f77e6729cd 102 c++;
ttodorov 1:f4f77e6729cd 103 inum = ( inum - ( inum % 10 ) ) / 10;
ttodorov 1:f4f77e6729cd 104 }
ttodorov 1:f4f77e6729cd 105 if ( ( num < 1 ) and ( num > 0 ) )
ttodorov 1:f4f77e6729cd 106 {
ttodorov 1:f4f77e6729cd 107 buf[ c ] = 48;
ttodorov 1:f4f77e6729cd 108 c++;
ttodorov 1:f4f77e6729cd 109 }
ttodorov 1:f4f77e6729cd 110 buf[ c ] = 0;
ttodorov 1:f4f77e6729cd 111
ttodorov 1:f4f77e6729cd 112 if ( neg )
ttodorov 1:f4f77e6729cd 113 {
ttodorov 1:f4f77e6729cd 114 st[ 0 ] = 45;
ttodorov 1:f4f77e6729cd 115 }
ttodorov 1:f4f77e6729cd 116
ttodorov 1:f4f77e6729cd 117 c2 = neg;
ttodorov 1:f4f77e6729cd 118 for ( int i = 0; i < c; i++ )
ttodorov 1:f4f77e6729cd 119 {
ttodorov 1:f4f77e6729cd 120 st[ c2 ] = buf[ c - i - 1 ];
ttodorov 1:f4f77e6729cd 121 c2++;
ttodorov 1:f4f77e6729cd 122 if ( ( c - ( c2 - neg ) ) == dec )
ttodorov 1:f4f77e6729cd 123 {
ttodorov 1:f4f77e6729cd 124 st[ c2 ] = divider;
ttodorov 1:f4f77e6729cd 125 c2++;
ttodorov 1:f4f77e6729cd 126 }
ttodorov 1:f4f77e6729cd 127 }
ttodorov 1:f4f77e6729cd 128 st[ c2 ] = 0;
ttodorov 1:f4f77e6729cd 129 }
ttodorov 1:f4f77e6729cd 130
ttodorov 1:f4f77e6729cd 131 Print( st, x, y );
ttodorov 1:f4f77e6729cd 132 }
ttodorov 1:f4f77e6729cd 133
ttodorov 1:f4f77e6729cd 134 */
ttodorov 1:f4f77e6729cd 135
ttodorov 0:d7202c9fc5db 136 void SSD1289::Initialize( orientation_t orientation )
ttodorov 0:d7202c9fc5db 137 {
ttodorov 0:d7202c9fc5db 138 _orientation = orientation;
ttodorov 1:f4f77e6729cd 139 SetForeground();
ttodorov 1:f4f77e6729cd 140 SetBackground();
ttodorov 1:f4f77e6729cd 141 _font.font = 0;
ttodorov 1:f4f77e6729cd 142
ttodorov 1:f4f77e6729cd 143 _lcd_pin_reset = HIGH;
ttodorov 1:f4f77e6729cd 144 wait_ms( 5 );
ttodorov 1:f4f77e6729cd 145 _lcd_pin_reset = LOW;
ttodorov 1:f4f77e6729cd 146 wait_ms( 15 );
ttodorov 1:f4f77e6729cd 147 _lcd_pin_reset = HIGH;
ttodorov 1:f4f77e6729cd 148 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 149 _lcd_pin_rd = HIGH;
ttodorov 1:f4f77e6729cd 150 _lcd_pin_wr = HIGH;
ttodorov 1:f4f77e6729cd 151 wait_ms( 15 );
ttodorov 1:f4f77e6729cd 152
ttodorov 1:f4f77e6729cd 153
ttodorov 1:f4f77e6729cd 154 writeCmdData( 0x00, 0x0001 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 155 writeCmdData( 0x03, 0xA8A4 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 156 writeCmdData( 0x0C, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 157 writeCmdData( 0x0D, 0x080C ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 158 writeCmdData( 0x0E, 0x2B00 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 159 writeCmdData( 0x1E, 0x00B7 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 160 writeCmdData( 0x01, 0x2B3F ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 161 writeCmdData( 0x02, 0x0600 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 162 writeCmdData( 0x10, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 163 writeCmdData( 0x11, 0x6070 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 164 writeCmdData( 0x05, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 165 writeCmdData( 0x06, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 166 writeCmdData( 0x16, 0xEF1C ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 167 writeCmdData( 0x17, 0x0003 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 168 writeCmdData( 0x07, 0x0233 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 169 writeCmdData( 0x0B, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 170 writeCmdData( 0x0F, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 171 writeCmdData( 0x41, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 172 writeCmdData( 0x42, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 173 writeCmdData( 0x48, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 174 writeCmdData( 0x49, 0x013F ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 175 writeCmdData( 0x4A, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 176 writeCmdData( 0x4B, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 177 writeCmdData( 0x44, 0xEF00 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 178 writeCmdData( 0x45, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 179 writeCmdData( 0x46, 0x013F ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 180 writeCmdData( 0x30, 0x0707 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 181 writeCmdData( 0x31, 0x0204 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 182 writeCmdData( 0x32, 0x0204 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 183 writeCmdData( 0x33, 0x0502 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 184 writeCmdData( 0x34, 0x0507 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 185 writeCmdData( 0x35, 0x0204 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 186 writeCmdData( 0x36, 0x0204 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 187 writeCmdData( 0x37, 0x0502 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 188 writeCmdData( 0x3A, 0x0302 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 189 writeCmdData( 0x3B, 0x0302 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 190 writeCmdData( 0x23, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 191 writeCmdData( 0x24, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 192 writeCmdData( 0x25, 0x8000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 193 writeCmdData( 0x4f, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 194 writeCmdData( 0x4e, 0x0000 ); wait_ms( 1 );
ttodorov 1:f4f77e6729cd 195 writeCmd( 0x22 );
ttodorov 1:f4f77e6729cd 196 }
ttodorov 1:f4f77e6729cd 197
ttodorov 1:f4f77e6729cd 198 void SSD1289::SetForeground( unsigned short color )
ttodorov 1:f4f77e6729cd 199 {
ttodorov 1:f4f77e6729cd 200 _foreground = color;
ttodorov 1:f4f77e6729cd 201 }
ttodorov 1:f4f77e6729cd 202
ttodorov 1:f4f77e6729cd 203 void SSD1289::SetBackground( unsigned short color )
ttodorov 1:f4f77e6729cd 204 {
ttodorov 1:f4f77e6729cd 205 _background = color;
ttodorov 1:f4f77e6729cd 206 }
ttodorov 1:f4f77e6729cd 207
ttodorov 1:f4f77e6729cd 208 void SSD1289::SetFont( const char *font )
ttodorov 1:f4f77e6729cd 209 {
ttodorov 1:f4f77e6729cd 210 _font.font = font;
ttodorov 1:f4f77e6729cd 211 _font.width = font[ 0 ];
ttodorov 1:f4f77e6729cd 212 _font.height = font[ 1 ];
ttodorov 1:f4f77e6729cd 213 _font.offset = font[ 2 ];
ttodorov 1:f4f77e6729cd 214 _font.numchars = font[ 3 ];
ttodorov 1:f4f77e6729cd 215 }
ttodorov 1:f4f77e6729cd 216
ttodorov 1:f4f77e6729cd 217 void SSD1289::FillScreen( int color )
ttodorov 1:f4f77e6729cd 218 {
ttodorov 1:f4f77e6729cd 219 unsigned short rgb = color == -1 ? _background : color == -2 ? _foreground : ( unsigned short ) color;
ttodorov 1:f4f77e6729cd 220 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 221 clearXY();
ttodorov 1:f4f77e6729cd 222 _lcd_pin_rs = HIGH;
ttodorov 1:f4f77e6729cd 223 for ( int i = 0; i < ( ( _disp_width + 1 ) * ( _disp_height + 1 ) ); i++ )
ttodorov 1:f4f77e6729cd 224 writeData( rgb );
ttodorov 1:f4f77e6729cd 225 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 226 }
ttodorov 1:f4f77e6729cd 227
ttodorov 1:f4f77e6729cd 228 void SSD1289::ClearScreen( void )
ttodorov 1:f4f77e6729cd 229 {
ttodorov 1:f4f77e6729cd 230 FillScreen( -1 );
ttodorov 1:f4f77e6729cd 231 }
ttodorov 1:f4f77e6729cd 232
ttodorov 1:f4f77e6729cd 233 void SSD1289::DrawPixel( unsigned short x, unsigned short y, int color )
ttodorov 1:f4f77e6729cd 234 {
ttodorov 1:f4f77e6729cd 235 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 236 setXY( x, y, x, y );
ttodorov 1:f4f77e6729cd 237 writeData( color == -1 ? _background :
ttodorov 1:f4f77e6729cd 238 color == -2 ? _foreground : color );
ttodorov 1:f4f77e6729cd 239 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 240 clearXY();
ttodorov 1:f4f77e6729cd 241 }
ttodorov 1:f4f77e6729cd 242
ttodorov 1:f4f77e6729cd 243 void SSD1289::DrawLine( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color )
ttodorov 1:f4f77e6729cd 244 {
ttodorov 1:f4f77e6729cd 245
ttodorov 1:f4f77e6729cd 246 double delta, tx, ty;
ttodorov 1:f4f77e6729cd 247
ttodorov 1:f4f77e6729cd 248 if ( ( ( x2 - x1 ) < 0 ) )
ttodorov 1:f4f77e6729cd 249 {
ttodorov 1:f4f77e6729cd 250 swap( ushort, x1, x2 )
ttodorov 1:f4f77e6729cd 251 swap( ushort, y1, y2 )
ttodorov 1:f4f77e6729cd 252 }
ttodorov 1:f4f77e6729cd 253 if ( ( ( y2 - y1 ) < 0 ) )
ttodorov 1:f4f77e6729cd 254 {
ttodorov 1:f4f77e6729cd 255 swap( ushort, x1, x2 )
ttodorov 1:f4f77e6729cd 256 swap( ushort, y1, y2 )
ttodorov 1:f4f77e6729cd 257 }
ttodorov 1:f4f77e6729cd 258
ttodorov 1:f4f77e6729cd 259 if ( y1 == y2 )
ttodorov 1:f4f77e6729cd 260 {
ttodorov 1:f4f77e6729cd 261 if ( x1 > x2 )
ttodorov 1:f4f77e6729cd 262 swap( ushort, x1, x2 )
ttodorov 1:f4f77e6729cd 263 drawHLine( x1, y1, x2 - x1, color );
ttodorov 1:f4f77e6729cd 264 }
ttodorov 1:f4f77e6729cd 265 else if ( x1 == x2 )
ttodorov 1:f4f77e6729cd 266 {
ttodorov 1:f4f77e6729cd 267 if ( y1 > y2 )
ttodorov 1:f4f77e6729cd 268 swap( ushort, y1, y2 )
ttodorov 1:f4f77e6729cd 269 drawVLine( x1, y1, y2 - y1, color );
ttodorov 1:f4f77e6729cd 270 }
ttodorov 1:f4f77e6729cd 271 else if ( abs( x2 - x1 ) > abs( y2 - y1 ) )
ttodorov 1:f4f77e6729cd 272 {
ttodorov 1:f4f77e6729cd 273 unsigned short usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned short ) color;
ttodorov 1:f4f77e6729cd 274 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 275 delta = ( double( y2 - y1 ) / double( x2 - x1 ) );
ttodorov 1:f4f77e6729cd 276 ty = double( y1 );
ttodorov 1:f4f77e6729cd 277 if ( x1 > x2 )
ttodorov 1:f4f77e6729cd 278 {
ttodorov 1:f4f77e6729cd 279 for ( int i = x1; i >= x2; i-- )
ttodorov 1:f4f77e6729cd 280 {
ttodorov 1:f4f77e6729cd 281 setXY( i, int( ty + 0.5 ), i, int( ty + 0.5 ) );
ttodorov 1:f4f77e6729cd 282 writeData( usedColor );
ttodorov 1:f4f77e6729cd 283 ty = ty - delta;
ttodorov 1:f4f77e6729cd 284 }
ttodorov 1:f4f77e6729cd 285 }
ttodorov 1:f4f77e6729cd 286 else
ttodorov 1:f4f77e6729cd 287 {
ttodorov 1:f4f77e6729cd 288 for ( int i = x1; i <= x2; i++ )
ttodorov 1:f4f77e6729cd 289 {
ttodorov 1:f4f77e6729cd 290 setXY( i, int( ty + 0.5 ), i, int( ty + 0.5 ) );
ttodorov 1:f4f77e6729cd 291 writeData( usedColor );
ttodorov 1:f4f77e6729cd 292 ty = ty + delta;
ttodorov 1:f4f77e6729cd 293 }
ttodorov 1:f4f77e6729cd 294 }
ttodorov 1:f4f77e6729cd 295 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 296 }
ttodorov 1:f4f77e6729cd 297 else
ttodorov 1:f4f77e6729cd 298 {
ttodorov 1:f4f77e6729cd 299 unsigned short usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned short ) color;
ttodorov 1:f4f77e6729cd 300 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 301 delta = ( float( x2 - x1 ) / float( y2 - y1 ) );
ttodorov 1:f4f77e6729cd 302 tx = float( x1 );
ttodorov 1:f4f77e6729cd 303 if ( y1 > y2 )
ttodorov 1:f4f77e6729cd 304 {
ttodorov 1:f4f77e6729cd 305 for ( int i = y2 + 1; i > y1; i-- )
ttodorov 1:f4f77e6729cd 306 {
ttodorov 1:f4f77e6729cd 307 setXY( int( tx + 0.5 ), i, int( tx + 0.5 ), i );
ttodorov 1:f4f77e6729cd 308 writeData( usedColor );
ttodorov 1:f4f77e6729cd 309 tx = tx + delta;
ttodorov 1:f4f77e6729cd 310 }
ttodorov 1:f4f77e6729cd 311 }
ttodorov 1:f4f77e6729cd 312 else
ttodorov 1:f4f77e6729cd 313 {
ttodorov 1:f4f77e6729cd 314 for ( int i = y1; i < y2 + 1; i++ )
ttodorov 1:f4f77e6729cd 315 {
ttodorov 1:f4f77e6729cd 316 setXY( int( tx + 0.5 ), i, int( tx + 0.5 ), i );
ttodorov 1:f4f77e6729cd 317 writeData( usedColor );
ttodorov 1:f4f77e6729cd 318 tx = tx + delta;
ttodorov 1:f4f77e6729cd 319 }
ttodorov 1:f4f77e6729cd 320 }
ttodorov 1:f4f77e6729cd 321 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 322 }
ttodorov 1:f4f77e6729cd 323
ttodorov 1:f4f77e6729cd 324 clearXY();
ttodorov 1:f4f77e6729cd 325 }
ttodorov 1:f4f77e6729cd 326
ttodorov 1:f4f77e6729cd 327 void SSD1289::DrawRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color )
ttodorov 1:f4f77e6729cd 328 {
ttodorov 1:f4f77e6729cd 329 if ( x1 > x2 ) swap( ushort, x1, x2 )
ttodorov 1:f4f77e6729cd 330 if ( y1 > y2 ) swap( ushort, y1, y2 )
ttodorov 1:f4f77e6729cd 331
ttodorov 1:f4f77e6729cd 332 drawHLine( x1, y1, x2 - x1, color );
ttodorov 1:f4f77e6729cd 333 drawHLine( x1, y2, x2 - x1, color );
ttodorov 1:f4f77e6729cd 334 drawVLine( x1, y1, y2 - y1, color );
ttodorov 1:f4f77e6729cd 335 drawVLine( x2, y1, y2 - y1, color );
ttodorov 1:f4f77e6729cd 336 }
ttodorov 1:f4f77e6729cd 337
ttodorov 1:f4f77e6729cd 338 void SSD1289::DrawRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color )
ttodorov 1:f4f77e6729cd 339 {
ttodorov 1:f4f77e6729cd 340 if ( x1 > x2 ) swap( ushort, x1, x2 )
ttodorov 1:f4f77e6729cd 341 if ( y1 > y2 ) swap( ushort, y1, y2 )
ttodorov 1:f4f77e6729cd 342
ttodorov 1:f4f77e6729cd 343 if ( ( x2 - x1 ) > 4 && ( y2 - y1 ) > 4 )
ttodorov 1:f4f77e6729cd 344 {
ttodorov 1:f4f77e6729cd 345 DrawPixel( x1 + 1, y1 + 1, color );
ttodorov 1:f4f77e6729cd 346 DrawPixel( x2 - 1, y1 + 1, color );
ttodorov 1:f4f77e6729cd 347 DrawPixel( x1 + 1, y2 - 1, color );
ttodorov 1:f4f77e6729cd 348 DrawPixel( x2 - 1, y2 - 1, color );
ttodorov 1:f4f77e6729cd 349 drawHLine( x1 + 2, y1, x2 - x1 - 4, color );
ttodorov 1:f4f77e6729cd 350 drawHLine( x1 + 2, y2, x2 - x1 - 4, color );
ttodorov 1:f4f77e6729cd 351 drawVLine( x1, y1 + 2, y2 - y1 - 4, color );
ttodorov 1:f4f77e6729cd 352 drawVLine( x2, y1 + 2, y2 - y1 - 4, color );
ttodorov 1:f4f77e6729cd 353 }
ttodorov 1:f4f77e6729cd 354 }
ttodorov 1:f4f77e6729cd 355
ttodorov 1:f4f77e6729cd 356 void SSD1289::FillRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color )
ttodorov 1:f4f77e6729cd 357 {
ttodorov 1:f4f77e6729cd 358 if ( x1 > x2 ) swap( ushort, x1, x2 );
ttodorov 1:f4f77e6729cd 359 if ( y1 > y2 ) swap( ushort, y1, y2 );
ttodorov 1:f4f77e6729cd 360
ttodorov 1:f4f77e6729cd 361 if ( _orientation == PORTRAIT )
ttodorov 1:f4f77e6729cd 362 {
ttodorov 1:f4f77e6729cd 363 for ( int i = 0; i < ( ( y2 - y1 ) / 2 ) + 1; i++ )
ttodorov 1:f4f77e6729cd 364 {
ttodorov 1:f4f77e6729cd 365 drawHLine( x1, y1 + i, x2 - x1, color );
ttodorov 1:f4f77e6729cd 366 drawHLine( x1, y2 - i, x2 - x1, color );
ttodorov 1:f4f77e6729cd 367 }
ttodorov 1:f4f77e6729cd 368 }
ttodorov 1:f4f77e6729cd 369 else
ttodorov 1:f4f77e6729cd 370 {
ttodorov 1:f4f77e6729cd 371 for ( int i = 0; i < ( ( x2 - x1 ) / 2 ) + 1; i++ )
ttodorov 1:f4f77e6729cd 372 {
ttodorov 1:f4f77e6729cd 373 drawVLine( x1 + i, y1, y2 - y1, color );
ttodorov 1:f4f77e6729cd 374 drawVLine( x2 - i, y1, y2 - y1, color );
ttodorov 1:f4f77e6729cd 375 }
ttodorov 1:f4f77e6729cd 376 }
ttodorov 1:f4f77e6729cd 377 }
ttodorov 1:f4f77e6729cd 378
ttodorov 1:f4f77e6729cd 379 void SSD1289::FillRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color )
ttodorov 1:f4f77e6729cd 380 {
ttodorov 1:f4f77e6729cd 381 if ( x1 > x2 ) swap( ushort, x1, x2 )
ttodorov 1:f4f77e6729cd 382 if ( y1 > y2 ) swap( ushort, y1, y2 )
ttodorov 1:f4f77e6729cd 383
ttodorov 1:f4f77e6729cd 384 if ( ( x2 - x1 ) > 4 && ( y2 - y1 ) > 4 )
ttodorov 1:f4f77e6729cd 385 {
ttodorov 1:f4f77e6729cd 386 for ( int i = 0; i < ( ( y2 - y1 ) / 2 ) + 1; i++ )
ttodorov 1:f4f77e6729cd 387 {
ttodorov 1:f4f77e6729cd 388 switch ( i )
ttodorov 1:f4f77e6729cd 389 {
ttodorov 1:f4f77e6729cd 390 case 0:
ttodorov 1:f4f77e6729cd 391 drawHLine( x1 + 2, y1 + i, x2 - x1 - 4, color );
ttodorov 1:f4f77e6729cd 392 drawHLine( x1 + 2, y2 - i, x2 - x1 - 4, color );
ttodorov 1:f4f77e6729cd 393 break;
ttodorov 1:f4f77e6729cd 394
ttodorov 1:f4f77e6729cd 395 case 1:
ttodorov 1:f4f77e6729cd 396 drawHLine( x1 + 1, y1 + i, x2 - x1 - 2, color );
ttodorov 1:f4f77e6729cd 397 drawHLine( x1 + 1, y2 - i, x2 - x1 - 2, color );
ttodorov 1:f4f77e6729cd 398 break;
ttodorov 1:f4f77e6729cd 399
ttodorov 1:f4f77e6729cd 400 default:
ttodorov 1:f4f77e6729cd 401 drawHLine( x1, y1 + i, x2 - x1, color );
ttodorov 1:f4f77e6729cd 402 drawHLine( x1, y2 - i, x2 - x1, color );
ttodorov 1:f4f77e6729cd 403 break;
ttodorov 1:f4f77e6729cd 404 }
ttodorov 1:f4f77e6729cd 405 }
ttodorov 1:f4f77e6729cd 406 }
ttodorov 1:f4f77e6729cd 407 }
ttodorov 1:f4f77e6729cd 408
ttodorov 1:f4f77e6729cd 409 void SSD1289::DrawCircle( unsigned short x, unsigned short y, unsigned short radius, int color )
ttodorov 1:f4f77e6729cd 410 {
ttodorov 1:f4f77e6729cd 411 int f = 1 - radius;
ttodorov 1:f4f77e6729cd 412 int ddF_x = 1;
ttodorov 1:f4f77e6729cd 413 int ddF_y = -2 * radius;
ttodorov 1:f4f77e6729cd 414 int x1 = 0;
ttodorov 1:f4f77e6729cd 415 int y1 = radius;
ttodorov 1:f4f77e6729cd 416 unsigned short usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned short ) color;
ttodorov 1:f4f77e6729cd 417
ttodorov 1:f4f77e6729cd 418 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 419 setXY( x, y + radius, x, y + radius );
ttodorov 1:f4f77e6729cd 420 writeData( usedColor );
ttodorov 1:f4f77e6729cd 421 setXY( x, y - radius, x, y - radius );
ttodorov 1:f4f77e6729cd 422 writeData( usedColor );
ttodorov 1:f4f77e6729cd 423 setXY( x + radius, y, x + radius, y );
ttodorov 1:f4f77e6729cd 424 writeData( usedColor );
ttodorov 1:f4f77e6729cd 425 setXY( x - radius, y, x - radius, y );
ttodorov 1:f4f77e6729cd 426 writeData( usedColor );
ttodorov 1:f4f77e6729cd 427
ttodorov 1:f4f77e6729cd 428 while ( x1 < y1 )
ttodorov 1:f4f77e6729cd 429 {
ttodorov 1:f4f77e6729cd 430 if ( f >= 0 )
ttodorov 1:f4f77e6729cd 431 {
ttodorov 1:f4f77e6729cd 432 y1--;
ttodorov 1:f4f77e6729cd 433 ddF_y += 2;
ttodorov 1:f4f77e6729cd 434 f += ddF_y;
ttodorov 1:f4f77e6729cd 435 }
ttodorov 1:f4f77e6729cd 436 x1++;
ttodorov 1:f4f77e6729cd 437 ddF_x += 2;
ttodorov 1:f4f77e6729cd 438 f += ddF_x;
ttodorov 1:f4f77e6729cd 439 setXY( x + x1, y + y1, x + x1, y + y1 );
ttodorov 1:f4f77e6729cd 440 writeData( usedColor );
ttodorov 1:f4f77e6729cd 441 setXY( x - x1, y + y1, x - x1, y + y1 );
ttodorov 1:f4f77e6729cd 442 writeData( usedColor );
ttodorov 1:f4f77e6729cd 443 setXY( x + x1, y - y1, x + x1, y - y1 );
ttodorov 1:f4f77e6729cd 444 writeData( usedColor );
ttodorov 1:f4f77e6729cd 445 setXY( x - x1, y - y1, x - x1, y - y1 );
ttodorov 1:f4f77e6729cd 446 writeData( usedColor );
ttodorov 1:f4f77e6729cd 447 setXY( x + y1, y + x1, x + y1, y + x1 );
ttodorov 1:f4f77e6729cd 448 writeData( usedColor );
ttodorov 1:f4f77e6729cd 449 setXY( x - y1, y + x1, x - y1, y + x1 );
ttodorov 1:f4f77e6729cd 450 writeData( usedColor );
ttodorov 1:f4f77e6729cd 451 setXY( x + y1, y - x1, x + y1, y - x1 );
ttodorov 1:f4f77e6729cd 452 writeData( usedColor );
ttodorov 1:f4f77e6729cd 453 setXY( x - y1, y - x1, x - y1, y - x1 );
ttodorov 1:f4f77e6729cd 454 writeData( usedColor );
ttodorov 1:f4f77e6729cd 455 }
ttodorov 1:f4f77e6729cd 456 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 457 clearXY();
ttodorov 1:f4f77e6729cd 458 }
ttodorov 1:f4f77e6729cd 459
ttodorov 1:f4f77e6729cd 460 void SSD1289::FillCircle( unsigned short x, unsigned short y, unsigned short radius, int color )
ttodorov 1:f4f77e6729cd 461 {
ttodorov 1:f4f77e6729cd 462 unsigned short usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned short ) color;
ttodorov 1:f4f77e6729cd 463 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 464 for ( int y1 = -radius; y1 <= radius; y1++ )
ttodorov 1:f4f77e6729cd 465 for ( int x1 = -radius; x1 <= radius; x1++ )
ttodorov 1:f4f77e6729cd 466 if ( x1 * x1 + y1 * y1 <= radius * radius )
ttodorov 1:f4f77e6729cd 467 {
ttodorov 1:f4f77e6729cd 468 setXY( x + x1, y + y1, x + x1, y + y1 );
ttodorov 1:f4f77e6729cd 469 writeData( usedColor );
ttodorov 1:f4f77e6729cd 470 }
ttodorov 1:f4f77e6729cd 471 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 472 clearXY();
ttodorov 1:f4f77e6729cd 473 }
ttodorov 1:f4f77e6729cd 474
ttodorov 1:f4f77e6729cd 475 void SSD1289::Print( const char *str, unsigned short x, unsigned short y, int fgColor, int bgColor, unsigned short deg )
ttodorov 1:f4f77e6729cd 476 {
ttodorov 1:f4f77e6729cd 477 int stl, i;
ttodorov 1:f4f77e6729cd 478
ttodorov 1:f4f77e6729cd 479 stl = strlen( str );
ttodorov 1:f4f77e6729cd 480
ttodorov 1:f4f77e6729cd 481 if ( _orientation == PORTRAIT )
ttodorov 1:f4f77e6729cd 482 {
ttodorov 1:f4f77e6729cd 483 if ( x == RIGHT )
ttodorov 1:f4f77e6729cd 484 x = ( _disp_width + 1 ) - ( stl * _font.width );
ttodorov 1:f4f77e6729cd 485 if ( x == CENTER )
ttodorov 1:f4f77e6729cd 486 x = ( ( _disp_width + 1 ) - ( stl * _font.width ) ) / 2;
ttodorov 1:f4f77e6729cd 487 }
ttodorov 1:f4f77e6729cd 488 else
ttodorov 1:f4f77e6729cd 489 {
ttodorov 1:f4f77e6729cd 490 if ( x == RIGHT )
ttodorov 1:f4f77e6729cd 491 x = ( _disp_height + 1 ) - ( stl * _font.width );
ttodorov 1:f4f77e6729cd 492 if ( x == CENTER )
ttodorov 1:f4f77e6729cd 493 x = ( ( _disp_height + 1 ) - ( stl * _font.width ) ) / 2;
ttodorov 1:f4f77e6729cd 494 }
ttodorov 1:f4f77e6729cd 495
ttodorov 1:f4f77e6729cd 496 for ( i = 0; i < stl; i++ )
ttodorov 1:f4f77e6729cd 497 if ( deg == 0 )
ttodorov 1:f4f77e6729cd 498 printChar( *str++, x + ( i * ( _font.width ) ), y, fgColor, bgColor );
ttodorov 1:f4f77e6729cd 499 else
ttodorov 1:f4f77e6729cd 500 rotateChar( *str++, x, y, i, fgColor, bgColor, deg );
ttodorov 1:f4f77e6729cd 501 }
ttodorov 1:f4f77e6729cd 502
ttodorov 1:f4f77e6729cd 503 void SSD1289::DrawBitmap( unsigned short x, unsigned short y, unsigned short sx, unsigned short sy, bitmap_t data, unsigned char scale )
ttodorov 1:f4f77e6729cd 504 {
ttodorov 1:f4f77e6729cd 505 int tx, ty, tc, tsx, tsy;
ttodorov 1:f4f77e6729cd 506
ttodorov 1:f4f77e6729cd 507 if ( scale == 1 )
ttodorov 1:f4f77e6729cd 508 {
ttodorov 1:f4f77e6729cd 509 if ( _orientation == PORTRAIT )
ttodorov 1:f4f77e6729cd 510 {
ttodorov 1:f4f77e6729cd 511 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 512 setXY( x, y, x + sx - 1, y + sy - 1 );
ttodorov 1:f4f77e6729cd 513 for ( tc = 0; tc < ( sx * sy ); tc++ )
ttodorov 1:f4f77e6729cd 514 writeData( data[ tc ] );
ttodorov 1:f4f77e6729cd 515 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 516 }
ttodorov 1:f4f77e6729cd 517 else
ttodorov 1:f4f77e6729cd 518 {
ttodorov 1:f4f77e6729cd 519 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 520 for ( ty = 0; ty < sy; ty++ )
ttodorov 1:f4f77e6729cd 521 {
ttodorov 1:f4f77e6729cd 522 setXY( x, y + ty, x + sx - 1, y + ty );
ttodorov 1:f4f77e6729cd 523 for ( tx = sx; tx >= 0; tx-- )
ttodorov 1:f4f77e6729cd 524 writeData( data[ ( ty * sx ) + tx ] );
ttodorov 1:f4f77e6729cd 525 }
ttodorov 1:f4f77e6729cd 526 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 527 }
ttodorov 1:f4f77e6729cd 528 }
ttodorov 1:f4f77e6729cd 529 else
ttodorov 1:f4f77e6729cd 530 {
ttodorov 1:f4f77e6729cd 531 if ( _orientation == PORTRAIT )
ttodorov 1:f4f77e6729cd 532 {
ttodorov 1:f4f77e6729cd 533 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 534 for ( ty = 0; ty < sy; ty++ )
ttodorov 1:f4f77e6729cd 535 {
ttodorov 1:f4f77e6729cd 536 setXY( x, y + ( ty * scale ), x + ( ( sx * scale ) - 1 ), y + ( ty * scale ) + scale );
ttodorov 1:f4f77e6729cd 537 for ( tsy = 0; tsy < scale; tsy++ )
ttodorov 1:f4f77e6729cd 538 for ( tx = 0; tx < sx; tx++ )
ttodorov 1:f4f77e6729cd 539 for ( tsx = 0; tsx < scale; tsx++ )
ttodorov 1:f4f77e6729cd 540 writeData( data[ ( ty * sx ) + tx ] );
ttodorov 1:f4f77e6729cd 541 }
ttodorov 1:f4f77e6729cd 542 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 543 }
ttodorov 1:f4f77e6729cd 544 else
ttodorov 1:f4f77e6729cd 545 {
ttodorov 1:f4f77e6729cd 546 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 547 for ( ty = 0; ty < sy; ty++ )
ttodorov 1:f4f77e6729cd 548 {
ttodorov 1:f4f77e6729cd 549 for ( tsy = 0; tsy < scale; tsy++ )
ttodorov 1:f4f77e6729cd 550 {
ttodorov 1:f4f77e6729cd 551 setXY( x, y + ( ty * scale ) + tsy, x + ( ( sx * scale ) - 1 ), y + ( ty * scale ) + tsy );
ttodorov 1:f4f77e6729cd 552 for ( tx = sx; tx >= 0; tx-- )
ttodorov 1:f4f77e6729cd 553 for ( tsx = 0; tsx < scale; tsx++ )
ttodorov 1:f4f77e6729cd 554 writeData( data[ ( ty * sx ) + tx ] );
ttodorov 1:f4f77e6729cd 555 }
ttodorov 1:f4f77e6729cd 556 }
ttodorov 1:f4f77e6729cd 557 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 558 }
ttodorov 1:f4f77e6729cd 559 }
ttodorov 1:f4f77e6729cd 560 clearXY();
ttodorov 1:f4f77e6729cd 561 }
ttodorov 1:f4f77e6729cd 562
ttodorov 1:f4f77e6729cd 563 void SSD1289::DrawBitmap( unsigned short x, unsigned short y, unsigned short sx, unsigned short sy, bitmap_t data, unsigned short deg, unsigned short rox, unsigned short roy )
ttodorov 1:f4f77e6729cd 564 {
ttodorov 1:f4f77e6729cd 565 int tx, ty, newx, newy;
ttodorov 1:f4f77e6729cd 566 double radian;
ttodorov 1:f4f77e6729cd 567 radian = deg * 0.0175;
ttodorov 1:f4f77e6729cd 568
ttodorov 1:f4f77e6729cd 569 if ( deg == 0 )
ttodorov 1:f4f77e6729cd 570 DrawBitmap( x, y, sx, sy, data );
ttodorov 1:f4f77e6729cd 571 else
ttodorov 1:f4f77e6729cd 572 {
ttodorov 1:f4f77e6729cd 573 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 574 for ( ty = 0; ty < sy; ty++ )
ttodorov 1:f4f77e6729cd 575 for ( tx = 0; tx < sx; tx++ )
ttodorov 1:f4f77e6729cd 576 {
ttodorov 1:f4f77e6729cd 577 newx = x + rox + ( ( ( tx - rox ) * cos( radian ) ) - ( ( ty - roy ) * sin( radian ) ) );
ttodorov 1:f4f77e6729cd 578 newy = y + roy + ( ( ( ty - roy ) * cos( radian ) ) + ( ( tx - rox ) * sin( radian ) ) );
ttodorov 1:f4f77e6729cd 579
ttodorov 1:f4f77e6729cd 580 setXY( newx, newy, newx, newy );
ttodorov 1:f4f77e6729cd 581 writeData( data[ ( ty * sx ) + tx ] );
ttodorov 1:f4f77e6729cd 582 }
ttodorov 1:f4f77e6729cd 583 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 584 }
ttodorov 1:f4f77e6729cd 585 clearXY();
ttodorov 0:d7202c9fc5db 586 }
ttodorov 0:d7202c9fc5db 587
ttodorov 0:d7202c9fc5db 588 void SSD1289::writeCmd( unsigned short cmd )
ttodorov 0:d7202c9fc5db 589 {
ttodorov 1:f4f77e6729cd 590 _lcd_pin_rs = LOW;
ttodorov 1:f4f77e6729cd 591 _lcd_pin_cs = LOW;
ttodorov 0:d7202c9fc5db 592 _lcd_port->write( cmd );
ttodorov 0:d7202c9fc5db 593 pulseLow( _lcd_pin_wr );
ttodorov 1:f4f77e6729cd 594 _lcd_pin_cs = HIGH;
ttodorov 0:d7202c9fc5db 595 }
ttodorov 0:d7202c9fc5db 596
ttodorov 0:d7202c9fc5db 597 void SSD1289::writeData( unsigned short data )
ttodorov 0:d7202c9fc5db 598 {
ttodorov 1:f4f77e6729cd 599 _lcd_pin_rs = HIGH;
ttodorov 1:f4f77e6729cd 600 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 601 _lcd_port->write( data );
ttodorov 0:d7202c9fc5db 602 pulseLow( _lcd_pin_wr );
ttodorov 1:f4f77e6729cd 603 _lcd_pin_cs = HIGH;
ttodorov 0:d7202c9fc5db 604 }
ttodorov 0:d7202c9fc5db 605
ttodorov 0:d7202c9fc5db 606 void SSD1289::writeCmdData( unsigned short cmd, unsigned short data )
ttodorov 0:d7202c9fc5db 607 {
ttodorov 0:d7202c9fc5db 608 writeCmd( cmd );
ttodorov 0:d7202c9fc5db 609 writeData( data );
ttodorov 0:d7202c9fc5db 610 }
ttodorov 1:f4f77e6729cd 611
ttodorov 1:f4f77e6729cd 612 void SSD1289::setXY( uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2 )
ttodorov 1:f4f77e6729cd 613 {
ttodorov 1:f4f77e6729cd 614 if ( _orientation == LANDSCAPE )
ttodorov 1:f4f77e6729cd 615 {
ttodorov 1:f4f77e6729cd 616 swap( uint16_t, x1, y1 )
ttodorov 1:f4f77e6729cd 617 swap( uint16_t, x2, y2 )
ttodorov 1:f4f77e6729cd 618 y1 = _disp_height - y1;
ttodorov 1:f4f77e6729cd 619 y2 = _disp_height - y2;
ttodorov 1:f4f77e6729cd 620 swap( uint16_t, y1, y2 )
ttodorov 1:f4f77e6729cd 621 }
ttodorov 1:f4f77e6729cd 622
ttodorov 1:f4f77e6729cd 623 writeCmdData( 0x44, ( x2 << 8 ) + x1 );
ttodorov 1:f4f77e6729cd 624 writeCmdData( 0x45, y1 );
ttodorov 1:f4f77e6729cd 625 writeCmdData( 0x46, y2 );
ttodorov 1:f4f77e6729cd 626 writeCmdData( 0x4e, x1 );
ttodorov 1:f4f77e6729cd 627 writeCmdData( 0x4f, y1 );
ttodorov 1:f4f77e6729cd 628 writeCmd( 0x22 );
ttodorov 1:f4f77e6729cd 629 }
ttodorov 1:f4f77e6729cd 630
ttodorov 1:f4f77e6729cd 631 void SSD1289::clearXY()
ttodorov 1:f4f77e6729cd 632 {
ttodorov 1:f4f77e6729cd 633 if ( _orientation == PORTRAIT )
ttodorov 1:f4f77e6729cd 634 setXY( 0, 0, _disp_width, _disp_height );
ttodorov 1:f4f77e6729cd 635 else
ttodorov 1:f4f77e6729cd 636 setXY( 0, 0, _disp_height, _disp_width );
ttodorov 1:f4f77e6729cd 637 }
ttodorov 1:f4f77e6729cd 638
ttodorov 1:f4f77e6729cd 639 void SSD1289::drawHLine( unsigned short x, unsigned short y, unsigned short len, int color )
ttodorov 1:f4f77e6729cd 640 {
ttodorov 1:f4f77e6729cd 641 unsigned short usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned short ) color;
ttodorov 1:f4f77e6729cd 642
ttodorov 1:f4f77e6729cd 643 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 644 setXY( x, y, x + len, y );
ttodorov 1:f4f77e6729cd 645 for ( int i = 0; i < len + 1; i++ )
ttodorov 1:f4f77e6729cd 646 writeData( usedColor );
ttodorov 1:f4f77e6729cd 647 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 648 clearXY();
ttodorov 1:f4f77e6729cd 649 }
ttodorov 1:f4f77e6729cd 650
ttodorov 1:f4f77e6729cd 651 void SSD1289::drawVLine( unsigned short x, unsigned short y, unsigned short len, int color )
ttodorov 1:f4f77e6729cd 652 {
ttodorov 1:f4f77e6729cd 653 unsigned short usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned short ) color;
ttodorov 1:f4f77e6729cd 654
ttodorov 1:f4f77e6729cd 655 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 656 setXY( x, y, x, y + len );
ttodorov 1:f4f77e6729cd 657 for ( int i = 0; i < len; i++ )
ttodorov 1:f4f77e6729cd 658 writeData( usedColor );
ttodorov 1:f4f77e6729cd 659 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 660 clearXY();
ttodorov 1:f4f77e6729cd 661 }
ttodorov 1:f4f77e6729cd 662
ttodorov 1:f4f77e6729cd 663 void SSD1289::printChar( char c, unsigned short x, unsigned short y, int fgColor, int bgColor )
ttodorov 1:f4f77e6729cd 664 {
ttodorov 1:f4f77e6729cd 665 uint8_t i, ch;
ttodorov 1:f4f77e6729cd 666 uint16_t j;
ttodorov 1:f4f77e6729cd 667 uint16_t temp;
ttodorov 1:f4f77e6729cd 668 unsigned short usedColorFG = fgColor == -1 ? _background : fgColor == -2 ? _foreground : ( unsigned short ) fgColor;
ttodorov 1:f4f77e6729cd 669 unsigned short usedColorBG = bgColor == -1 ? _background : bgColor == -2 ? _foreground : ( unsigned short ) bgColor;
ttodorov 1:f4f77e6729cd 670
ttodorov 1:f4f77e6729cd 671 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 672
ttodorov 1:f4f77e6729cd 673 if ( _orientation == PORTRAIT )
ttodorov 1:f4f77e6729cd 674 {
ttodorov 1:f4f77e6729cd 675 setXY( x, y, x + _font.width - 1, y + _font.height - 1 );
ttodorov 1:f4f77e6729cd 676
ttodorov 1:f4f77e6729cd 677 temp = ( ( c - _font.offset ) * ( ( _font.width / 8 ) * _font.height ) ) + 4;
ttodorov 1:f4f77e6729cd 678 for ( j = 0; j < ( ( _font.width / 8 ) * _font.height ); j++ )
ttodorov 1:f4f77e6729cd 679 {
ttodorov 1:f4f77e6729cd 680 ch = _font.font[ temp ];
ttodorov 1:f4f77e6729cd 681 for ( i = 0; i < 8; i++ )
ttodorov 1:f4f77e6729cd 682 {
ttodorov 1:f4f77e6729cd 683 if ( ( ch & ( 1 << ( 7 - i ) ) ) != 0 )
ttodorov 1:f4f77e6729cd 684 writeData( usedColorFG );
ttodorov 1:f4f77e6729cd 685 else
ttodorov 1:f4f77e6729cd 686 writeData( usedColorBG );
ttodorov 1:f4f77e6729cd 687 }
ttodorov 1:f4f77e6729cd 688 temp++;
ttodorov 1:f4f77e6729cd 689 }
ttodorov 1:f4f77e6729cd 690 }
ttodorov 1:f4f77e6729cd 691 else
ttodorov 1:f4f77e6729cd 692 {
ttodorov 1:f4f77e6729cd 693 temp = ( ( c - _font.offset ) * ( ( _font.width / 8 ) * _font.height ) ) + 4;
ttodorov 1:f4f77e6729cd 694
ttodorov 1:f4f77e6729cd 695 for ( j = 0; j < ( ( _font.width / 8 ) * _font.height ); j += ( _font.width / 8 ) )
ttodorov 1:f4f77e6729cd 696 {
ttodorov 1:f4f77e6729cd 697 setXY( x, y + ( j / ( _font.width / 8 ) ), x + _font.width - 1, y + ( j / ( _font.width / 8 ) ) );
ttodorov 1:f4f77e6729cd 698 for ( int zz = ( _font.width / 8 ) - 1; zz >= 0; zz-- )
ttodorov 1:f4f77e6729cd 699 {
ttodorov 1:f4f77e6729cd 700 ch = _font.font[ temp + zz ];
ttodorov 1:f4f77e6729cd 701 for ( i = 0; i < 8; i++ )
ttodorov 1:f4f77e6729cd 702 {
ttodorov 1:f4f77e6729cd 703 if ( ( ch & ( 1 << i ) ) != 0 )
ttodorov 1:f4f77e6729cd 704 writeData( usedColorFG );
ttodorov 1:f4f77e6729cd 705 else
ttodorov 1:f4f77e6729cd 706 writeData( usedColorBG );
ttodorov 1:f4f77e6729cd 707 }
ttodorov 1:f4f77e6729cd 708 }
ttodorov 1:f4f77e6729cd 709 temp += ( _font.width / 8 );
ttodorov 1:f4f77e6729cd 710 }
ttodorov 1:f4f77e6729cd 711 }
ttodorov 1:f4f77e6729cd 712 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 713 clearXY();
ttodorov 1:f4f77e6729cd 714 }
ttodorov 1:f4f77e6729cd 715
ttodorov 1:f4f77e6729cd 716 void SSD1289::rotateChar( char c, unsigned short x, unsigned short y, int pos, int fgColor, int bgColor, unsigned short deg )
ttodorov 1:f4f77e6729cd 717 {
ttodorov 1:f4f77e6729cd 718 uint8_t i, j, ch;
ttodorov 1:f4f77e6729cd 719 uint16_t temp;
ttodorov 1:f4f77e6729cd 720 int newx, newy;
ttodorov 1:f4f77e6729cd 721 double radian;
ttodorov 1:f4f77e6729cd 722 radian = deg * 0.0175;
ttodorov 1:f4f77e6729cd 723
ttodorov 1:f4f77e6729cd 724 unsigned short usedColorFG = fgColor == -1 ? _background : fgColor == -2 ? _foreground : ( unsigned short ) fgColor;
ttodorov 1:f4f77e6729cd 725 unsigned short usedColorBG = bgColor == -1 ? _background : bgColor == -2 ? _foreground : ( unsigned short ) bgColor;
ttodorov 1:f4f77e6729cd 726
ttodorov 1:f4f77e6729cd 727 _lcd_pin_cs = LOW;
ttodorov 1:f4f77e6729cd 728
ttodorov 1:f4f77e6729cd 729 temp = ( ( c - _font.offset ) * ( ( _font.width / 8 ) * _font.height ) ) + 4;
ttodorov 1:f4f77e6729cd 730 for ( j = 0; j < _font.height; j++ )
ttodorov 1:f4f77e6729cd 731 {
ttodorov 1:f4f77e6729cd 732 for ( int zz = 0; zz < ( _font.width / 8 ); zz++ )
ttodorov 1:f4f77e6729cd 733 {
ttodorov 1:f4f77e6729cd 734 ch = _font.font[ temp + zz ];
ttodorov 1:f4f77e6729cd 735 for ( i = 0; i < 8; i++ )
ttodorov 1:f4f77e6729cd 736 {
ttodorov 1:f4f77e6729cd 737 newx = x + ( ( ( i + ( zz * 8 ) + ( pos * _font.width ) ) * cos( radian ) ) - ( ( j ) * sin( radian ) ) );
ttodorov 1:f4f77e6729cd 738 newy = y + ( ( ( j ) * cos( radian ) ) + ( ( i + ( zz * 8 ) + ( pos * _font.width ) ) * sin( radian ) ) );
ttodorov 1:f4f77e6729cd 739
ttodorov 1:f4f77e6729cd 740 setXY( newx, newy, newx + 1, newy + 1 );
ttodorov 1:f4f77e6729cd 741
ttodorov 1:f4f77e6729cd 742 if ( ( ch & ( 1 << ( 7 - i ) ) ) != 0 )
ttodorov 1:f4f77e6729cd 743 writeData( usedColorFG );
ttodorov 1:f4f77e6729cd 744 else
ttodorov 1:f4f77e6729cd 745 writeData( usedColorBG );
ttodorov 1:f4f77e6729cd 746 }
ttodorov 1:f4f77e6729cd 747 }
ttodorov 1:f4f77e6729cd 748 temp += ( _font.width / 8 );
ttodorov 1:f4f77e6729cd 749 }
ttodorov 1:f4f77e6729cd 750 _lcd_pin_cs = HIGH;
ttodorov 1:f4f77e6729cd 751 clearXY();
ttodorov 1:f4f77e6729cd 752 }
ttodorov 1:f4f77e6729cd 753
ttodorov 1:f4f77e6729cd 754 int SSD1289::_getc()
ttodorov 1:f4f77e6729cd 755 {
ttodorov 1:f4f77e6729cd 756 return ( -1 );
ttodorov 1:f4f77e6729cd 757 }
ttodorov 1:f4f77e6729cd 758
ttodorov 1:f4f77e6729cd 759 int SSD1289::_putc( int value )
ttodorov 1:f4f77e6729cd 760 {
ttodorov 1:f4f77e6729cd 761 return ( value );
ttodorov 1:f4f77e6729cd 762 }