Fork of SSD1289 lib for Landtiger board

Committer:
ttodorov
Date:
Thu Nov 22 08:42:01 2012 +0000
Revision:
2:799c4fb113c5
Parent:
1:f4f77e6729cd
- fixed constructor for redundant pin; - added doxygen comments, ready for publishing

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