Imrich Konkol / Mbed 2 deprecated lcd_tft_ssd2119

Dependencies:   EthernetNetIf mbed

Committer:
ikon
Date:
Sun Feb 27 23:39:10 2011 +0000
Revision:
2:456410210d03
Parent:
1:c9dad7bc0795
1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ikon 0:d6b0747774da 1 // *********************************************************************
ikon 0:d6b0747774da 2 //
ikon 0:d6b0747774da 3 // Display driver for Solomon SSD2119 controller connected to mbed board
ikon 0:d6b0747774da 4 // with simple terminal program
ikon 0:d6b0747774da 5 //
ikon 0:d6b0747774da 6 // ** szdiditalsquare (eBay) display connected on SPI + control pins **
ikon 0:d6b0747774da 7 // mbed SSD2219 (on szdigitalsquare board)
ikon 0:d6b0747774da 8 // p5 -mosi (28) SDA
ikon 0:d6b0747774da 9 // p6 -miso NC
ikon 0:d6b0747774da 10 // p7 -sck (26) SCL
ikon 0:d6b0747774da 11 // p8 -cs (19) CS
ikon 0:d6b0747774da 12 // p15-res (23) RESET
ikon 0:d6b0747774da 13 // p16-c/d (20) RS
ikon 0:d6b0747774da 14 // p17-rd (22) RD
ikon 0:d6b0747774da 15 // p18-wr (21) WR
ikon 0:d6b0747774da 16 //
ikon 0:d6b0747774da 17 // Pins PS0 - PS3 should be open on system board = 4bit SPI mode
ikon 0:d6b0747774da 18 //
ikon 0:d6b0747774da 19 // After sucessful init you'll see color bars on whole display and
ikon 0:d6b0747774da 20 // welcome message. Then you can start typing in your serial terminal
ikon 0:d6b0747774da 21 // and information will appear on the display
ikon 0:d6b0747774da 22 //
ikon 0:d6b0747774da 23 // 28.11.2010 port from CrystalFonts & Nokia LCD lib by Imrich Konkol
ikon 0:d6b0747774da 24 // 29.11.2010 ZX Spectrum SCR viewer added
ikon 0:d6b0747774da 25 // - to show test.scr from internal mbed drive type \\ at
ikon 0:d6b0747774da 26 // PC terminal prompt
ikon 1:c9dad7bc0795 27 // 01.12.2010 bright fixed, slideshow added, terminal session start
ikon 1:c9dad7bc0795 28 // after slideshow finish
ikon 2:456410210d03 29 // 04.12.2010 fixed non bright values (3/4 of intensity instead of 1/2)
ikon 2:456410210d03 30 // 08.12.2010 added ULA+ format for slideshow (6912 + 64 bytes palette)
ikon 0:d6b0747774da 31 // *********************************************************************
ikon 0:d6b0747774da 32 #include "mbed.h"
ikon 2:456410210d03 33 #include "EthernetNetIf.h"
ikon 2:456410210d03 34 #include "HTTPClient.h"
ikon 2:456410210d03 35 #include "Display.h"
ikon 0:d6b0747774da 36
ikon 0:d6b0747774da 37 LocalFileSystem local("local");
ikon 0:d6b0747774da 38
ikon 2:456410210d03 39 /* SPI definitions moved to Display.c module
ikon 0:d6b0747774da 40 SPI spi(p5, p6, p7); // mosi, miso, sclk
ikon 0:d6b0747774da 41 DigitalOut DCS(p8); // Display chip select
ikon 0:d6b0747774da 42 DigitalOut DRS(p15); // Display reset
ikon 0:d6b0747774da 43 DigitalOut DCD(p16); // Display command/data
ikon 0:d6b0747774da 44 DigitalOut DRD(p17); // Display read
ikon 0:d6b0747774da 45 DigitalOut DWR(p18); // Display write
ikon 2:456410210d03 46 */
ikon 0:d6b0747774da 47 DigitalOut myled(LED1);
ikon 0:d6b0747774da 48
ikon 0:d6b0747774da 49 Serial pc(USBTX, USBRX); //debug info - see raw data being transferred back and forth as GBA is booting
ikon 0:d6b0747774da 50
ikon 2:456410210d03 51 EthernetNetIf eth;
ikon 2:456410210d03 52 HTTPClient http;
ikon 2:456410210d03 53
ikon 0:d6b0747774da 54 /*-----------------------------------------------------------------------------
ikon 0:d6b0747774da 55 Global Variables
ikon 0:d6b0747774da 56 -----------------------------------------------------------------------------*/
ikon 2:456410210d03 57 extern uint16_t FOREGROUND, BACKGROUND; // Display back and foreground - defined in Display.h
ikon 2:456410210d03 58 int ShowType = 0; // What images to display: 0 - local, 1 - internet
ikon 0:d6b0747774da 59
ikon 0:d6b0747774da 60 unsigned char cat(char *filename) {
ikon 2:456410210d03 61 int c;
ikon 0:d6b0747774da 62 unsigned int x,y;
ikon 0:d6b0747774da 63
ikon 0:d6b0747774da 64 printf("Opening File...\n"); // Drive should be marked as removed
ikon 0:d6b0747774da 65 FILE *fp = fopen(filename, "r");
ikon 0:d6b0747774da 66 if (!fp) {
ikon 0:d6b0747774da 67 printf("File %s could not be opened!\n",filename);
ikon 0:d6b0747774da 68 return(1);
ikon 0:d6b0747774da 69 }
ikon 0:d6b0747774da 70 cls();
ikon 0:d6b0747774da 71 Display_Home();
ikon 0:d6b0747774da 72 x = 0;
ikon 0:d6b0747774da 73 y = 0;
ikon 0:d6b0747774da 74
ikon 0:d6b0747774da 75 while ( ( c=fgetc(fp) ) != EOF ) {
ikon 0:d6b0747774da 76
ikon 0:d6b0747774da 77 LcdGotoXY(x,y);
ikon 0:d6b0747774da 78
ikon 0:d6b0747774da 79 if (c == 13) {
ikon 0:d6b0747774da 80 y++;
ikon 0:d6b0747774da 81 x=0;
ikon 0:d6b0747774da 82 };
ikon 0:d6b0747774da 83 if (c == 8) {
ikon 0:d6b0747774da 84 x--;
ikon 0:d6b0747774da 85 };
ikon 0:d6b0747774da 86
ikon 0:d6b0747774da 87 if (c > 31) LcdChr(c);
ikon 0:d6b0747774da 88 x++;
ikon 0:d6b0747774da 89 if (x>39) {
ikon 0:d6b0747774da 90 y++;
ikon 0:d6b0747774da 91 x=0;
ikon 0:d6b0747774da 92 if (y>39) y=0;
ikon 0:d6b0747774da 93 }
ikon 0:d6b0747774da 94 }
ikon 0:d6b0747774da 95 fclose(fp);
ikon 0:d6b0747774da 96 return(0);
ikon 0:d6b0747774da 97 }
ikon 0:d6b0747774da 98
ikon 0:d6b0747774da 99
ikon 0:d6b0747774da 100
ikon 2:456410210d03 101 void terminal()
ikon 1:c9dad7bc0795 102 {
ikon 2:456410210d03 103 int x, y, r=1;
ikon 2:456410210d03 104 char c, xc=' ';
ikon 1:c9dad7bc0795 105
ikon 1:c9dad7bc0795 106 FOREGROUND = GREEN;
ikon 1:c9dad7bc0795 107 BACKGROUND = BLACK;
ikon 1:c9dad7bc0795 108 display_rgb(BACKGROUND);
ikon 2:456410210d03 109
ikon 1:c9dad7bc0795 110 LcdGotoXY(4,1);
ikon 0:d6b0747774da 111 LcdStr("Below you can see what you write");
ikon 1:c9dad7bc0795 112 LcdGotoXY(12,2);
ikon 0:d6b0747774da 113 LcdStr("in your PC terminal");
ikon 2:456410210d03 114
ikon 0:d6b0747774da 115 x = 0;
ikon 1:c9dad7bc0795 116 y = 3;
ikon 2:456410210d03 117 while (r == 1)
ikon 2:456410210d03 118 {
ikon 0:d6b0747774da 119 LcdGotoXY(x,y);
ikon 0:d6b0747774da 120 c = pc.getc();
ikon 0:d6b0747774da 121 if (c == 13) {
ikon 0:d6b0747774da 122 y++;
ikon 0:d6b0747774da 123 x=0;
ikon 2:456410210d03 124 }; // endif c==13
ikon 2:456410210d03 125
ikon 0:d6b0747774da 126 if (c == 8) {
ikon 0:d6b0747774da 127 x--;
ikon 2:456410210d03 128 }; // endif c==8
ikon 0:d6b0747774da 129
ikon 0:d6b0747774da 130 if (c > 31) {
ikon 0:d6b0747774da 131 LcdChr(c);
ikon 0:d6b0747774da 132 if ( (xc == '\\' ) && ( c == '\\' ) ) {
ikon 1:c9dad7bc0795 133 //scr2lcd("test.scr");
ikon 2:456410210d03 134 //LCD_test();
ikon 2:456410210d03 135 //SldShw();
ikon 2:456410210d03 136 r=0;
ikon 0:d6b0747774da 137 }
ikon 0:d6b0747774da 138
ikon 0:d6b0747774da 139 xc = c;
ikon 2:456410210d03 140 } // endif c>31
ikon 0:d6b0747774da 141 x++;
ikon 0:d6b0747774da 142 if (x>39) {
ikon 0:d6b0747774da 143 y++;
ikon 0:d6b0747774da 144 x=0;
ikon 0:d6b0747774da 145 if (y>39) y=0;
ikon 2:456410210d03 146 } // endif x>39
ikon 2:456410210d03 147 } // endwhile
ikon 2:456410210d03 148
ikon 2:456410210d03 149 }
ikon 2:456410210d03 150
ikon 2:456410210d03 151 // Always print system messages on certain line of display
ikon 2:456410210d03 152 void SysMsg(char *dataPtr) {
ikon 2:456410210d03 153
ikon 2:456410210d03 154 LcdGotoXY8(0,29);
ikon 2:456410210d03 155 LcdStr8x8( dataPtr );
ikon 2:456410210d03 156 }
ikon 2:456410210d03 157
ikon 2:456410210d03 158
ikon 2:456410210d03 159 // Main loop starts here
ikon 2:456410210d03 160 int main() {
ikon 2:456410210d03 161
ikon 2:456410210d03 162 // Variable definitions
ikon 2:456410210d03 163 uint8_t y;
ikon 2:456410210d03 164 //unsigned int i;
ikon 2:456410210d03 165 char str[40];
ikon 2:456410210d03 166 char err[40]; // Error message string
ikon 2:456410210d03 167 char url[256]; // Remote URL
ikon 2:456410210d03 168 char fname[80]; // Local filename
ikon 2:456410210d03 169 int c,w;
ikon 2:456410210d03 170 FILE *fl;
ikon 2:456410210d03 171 unsigned int i, j, a, rnd, last, blast;
ikon 2:456410210d03 172 const int num_files=300;
ikon 2:456410210d03 173 int names[num_files];
ikon 2:456410210d03 174 int lenghts[num_files];
ikon 2:456410210d03 175
ikon 2:456410210d03 176 // Variable initialization
ikon 2:456410210d03 177 a = 0;
ikon 2:456410210d03 178 i = 0;
ikon 2:456410210d03 179 last = 0;
ikon 2:456410210d03 180 blast = 0;
ikon 2:456410210d03 181
ikon 2:456410210d03 182 //Configure the Fastest Baud Rate
ikon 2:456410210d03 183 pc.baud(115200);
ikon 2:456410210d03 184 printf("Program start.\n");
ikon 2:456410210d03 185
ikon 2:456410210d03 186 myled = 0;
ikon 2:456410210d03 187 initialization(); // Initialize LCD
ikon 2:456410210d03 188
ikon 2:456410210d03 189 printf("SPI and display initialized.\n");
ikon 2:456410210d03 190
ikon 2:456410210d03 191 LCD_test(); // Draw border
ikon 2:456410210d03 192 printf("Display test.\n");
ikon 2:456410210d03 193
ikon 2:456410210d03 194 wait(1.0);
ikon 2:456410210d03 195 if (myled == 0) {
ikon 2:456410210d03 196 myled = 1;
ikon 2:456410210d03 197 } else {
ikon 2:456410210d03 198 myled = 0;
ikon 2:456410210d03 199 }
ikon 2:456410210d03 200
ikon 2:456410210d03 201 // Show welcome message
ikon 2:456410210d03 202 Display_Home();
ikon 2:456410210d03 203 LcdGotoXY8(12,10);
ikon 2:456410210d03 204 LcdStr8x8("Welcome to mBed");
ikon 2:456410210d03 205 LcdGotoXY8(5,11);
ikon 2:456410210d03 206 LcdStr8x8("Retro Computing Picture Frame");
ikon 2:456410210d03 207 LcdGotoXY8(0,13);
ikon 2:456410210d03 208 LcdStr8x8("Based on SSD2119 controller& TFT 320x240");
ikon 2:456410210d03 209
ikon 2:456410210d03 210 SysMsg("Configuring Ethernet...");
ikon 2:456410210d03 211
ikon 2:456410210d03 212 // Configure ethernet interface
ikon 2:456410210d03 213 EthernetErr ethErr = eth.setup();
ikon 2:456410210d03 214 if(ethErr) {
ikon 2:456410210d03 215 sprintf(err,"Error %d in ETH setup.", ethErr);
ikon 2:456410210d03 216 SysMsg(err);
ikon 2:456410210d03 217 ShowType = 0; // Local slideshow only
ikon 2:456410210d03 218 } else {
ikon 2:456410210d03 219 IpAddr ip = eth.getIp();
ikon 2:456410210d03 220 sprintf(err, "Setup OK, local IP: %d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
ikon 2:456410210d03 221 SysMsg(err);
ikon 2:456410210d03 222 ShowType = 1; // Ethernet available - we can download pictures
ikon 0:d6b0747774da 223 }
ikon 0:d6b0747774da 224
ikon 2:456410210d03 225 // Do some common stuff for both ShowType modes
ikon 2:456410210d03 226 LCD_test(); // Show colorfull border again
ikon 2:456410210d03 227 wait(2.0);
ikon 2:456410210d03 228 myled = 0;
ikon 2:456410210d03 229 Display_Home();
ikon 2:456410210d03 230 LcdGotoXY(13,0);
ikon 2:456410210d03 231 LcdChr('H');
ikon 2:456410210d03 232 LcdGotoXY(14,0);
ikon 2:456410210d03 233 LcdChr('e');
ikon 2:456410210d03 234 LcdGotoXY(15,0);
ikon 2:456410210d03 235 LcdChr('l');
ikon 2:456410210d03 236 LcdGotoXY(16,0);
ikon 2:456410210d03 237 LcdChr('l');
ikon 2:456410210d03 238 LcdGotoXY(17,0);
ikon 2:456410210d03 239 LcdChr('o');
ikon 2:456410210d03 240
ikon 2:456410210d03 241 LcdStr(" mBed World!");
ikon 2:456410210d03 242
ikon 2:456410210d03 243 y = 1;
ikon 2:456410210d03 244 LcdGotoXY(0,y);
ikon 2:456410210d03 245 LcdStr("Local filesystem contains these files:");
ikon 2:456410210d03 246 y++;
ikon 2:456410210d03 247 LcdGotoXY(0,y);
ikon 2:456410210d03 248 Dir(); // Show directory listing
ikon 2:456410210d03 249
ikon 2:456410210d03 250 wait(1.0);
ikon 2:456410210d03 251
ikon 2:456410210d03 252 ShowPalette256(); // Show actual 256 colors palette
ikon 2:456410210d03 253
ikon 2:456410210d03 254 for (i=3;i>0;i--)
ikon 2:456410210d03 255 {
ikon 2:456410210d03 256 LcdGotoXY(0,38);
ikon 2:456410210d03 257 sprintf(str, "Displaying images in %d seconds...", i);
ikon 2:456410210d03 258 switch (i) {
ikon 2:456410210d03 259 case 1:
ikon 2:456410210d03 260 strcat(str,"/");
ikon 2:456410210d03 261 break;
ikon 2:456410210d03 262 case 2:
ikon 2:456410210d03 263 strcat(str,"|");
ikon 2:456410210d03 264 break;
ikon 2:456410210d03 265 case 3:
ikon 2:456410210d03 266 strcat(str,"\\");
ikon 2:456410210d03 267 break;
ikon 2:456410210d03 268 case 4:
ikon 2:456410210d03 269 strcat(str,"-");
ikon 2:456410210d03 270 break;
ikon 2:456410210d03 271 default:
ikon 2:456410210d03 272 break;
ikon 2:456410210d03 273 }
ikon 2:456410210d03 274
ikon 2:456410210d03 275 LcdStr(str);
ikon 2:456410210d03 276 wait(1.0);
ikon 2:456410210d03 277 }
ikon 2:456410210d03 278
ikon 2:456410210d03 279
ikon 2:456410210d03 280 // Check if we have the list of files
ikon 2:456410210d03 281 if ( (fl = fopen("/local/scrnpath.txt","r") ) == NULL ) { // Fl = FileList
ikon 2:456410210d03 282 printf("Unable to open file list! Fallback to local.\n");
ikon 2:456410210d03 283 ShowType = 0; // Local
ikon 2:456410210d03 284 } else {
ikon 2:456410210d03 285 while ( ( ( c = fgetc(fl) ) != EOF ) && ( a < num_files) ) {
ikon 2:456410210d03 286 i++;
ikon 2:456410210d03 287 if ( c == '\n') {
ikon 2:456410210d03 288 last = i;
ikon 2:456410210d03 289 if ( a == 0 ) {
ikon 2:456410210d03 290 names[a] = 0;
ikon 2:456410210d03 291 lenghts[a] = last;
ikon 2:456410210d03 292 } else {
ikon 2:456410210d03 293 names[a] = blast;
ikon 2:456410210d03 294 lenghts[a] = last - blast;
ikon 2:456410210d03 295 } // If2
ikon 2:456410210d03 296 blast = last;
ikon 2:456410210d03 297 a++;
ikon 2:456410210d03 298 } // If2
ikon 2:456410210d03 299
ikon 2:456410210d03 300 } // while
ikon 2:456410210d03 301
ikon 2:456410210d03 302 } // Else
ikon 2:456410210d03 303 // Variable 'a' now holds number of pictures available
ikon 2:456410210d03 304
ikon 2:456410210d03 305 srand ( 99 );
ikon 2:456410210d03 306 LCD_test(); // Restore rainbow background
ikon 2:456410210d03 307
ikon 2:456410210d03 308 // Now distinguish between both modes and do different things
ikon 2:456410210d03 309 if ( ShowType == 0 ) {
ikon 2:456410210d03 310 while (1) {
ikon 2:456410210d03 311 SldShw(); // Slide show from ZX screens
ikon 2:456410210d03 312
ikon 2:456410210d03 313 if ( pc.readable() ) terminal(); // If key pressed start terminal
ikon 2:456410210d03 314
ikon 2:456410210d03 315 wait(3.0);
ikon 2:456410210d03 316 } // loop forever
ikon 2:456410210d03 317
ikon 2:456410210d03 318 } else {
ikon 2:456410210d03 319
ikon 2:456410210d03 320 while (1) {
ikon 2:456410210d03 321 // We do picture show from the net
ikon 2:456410210d03 322 for (j=0; j < 48; j++ ) {
ikon 2:456410210d03 323 // Pseudo Random Picture file selection
ikon 2:456410210d03 324 rnd = rand() % a;
ikon 2:456410210d03 325
ikon 2:456410210d03 326 printf("Picture[%d] Names[%d] Lenghts[%d]\n", rnd, names[rnd], lenghts[rnd]);
ikon 2:456410210d03 327 printf("Random file: %d\n", rnd);
ikon 2:456410210d03 328 fseek(fl, names[rnd], SEEK_SET);
ikon 2:456410210d03 329
ikon 2:456410210d03 330 w = fgetc(fl);
ikon 2:456410210d03 331
ikon 2:456410210d03 332 sprintf(url, "http://wos.meulie.net/pub/spectrum/screens/load/%c/scr/%c", w+32, w);
ikon 2:456410210d03 333
ikon 2:456410210d03 334 for (i=2; i<lenghts[rnd]; i++) {
ikon 2:456410210d03 335 c = fgetc(fl);
ikon 2:456410210d03 336 sprintf(url, "%s%c", url, c);
ikon 2:456410210d03 337 }
ikon 2:456410210d03 338 printf("URL: %s\n",url);
ikon 2:456410210d03 339
ikon 2:456410210d03 340 // Open a file to write.
ikon 2:456410210d03 341 sprintf(fname,"/local/%d.scr",j);
ikon 2:456410210d03 342 printf("Local file name: %s\n", fname);
ikon 2:456410210d03 343 HTTPFile file(fname);
ikon 2:456410210d03 344
ikon 2:456410210d03 345
ikon 2:456410210d03 346 // Insert the search term into the URL
ikon 2:456410210d03 347 //sprintf(url, "http://wos.meulie.net/pub/spectrum/screens/load/a/scr/ACZGeneralLedger2000.scr");
ikon 2:456410210d03 348
ikon 2:456410210d03 349 // Request a page and store it into a file.
ikon 2:456410210d03 350 HTTPResult r = http.get(url, &file);
ikon 2:456410210d03 351
ikon 2:456410210d03 352 if(r==HTTP_OK)
ikon 2:456410210d03 353 {
ikon 2:456410210d03 354 pc.printf("File fetched OK.\n"); //:\"%s\"\n", file.gets());
ikon 2:456410210d03 355 } else {
ikon 2:456410210d03 356 pc.printf("Error fetching file %d\n", r);
ikon 2:456410210d03 357 }
ikon 2:456410210d03 358
ikon 2:456410210d03 359 sprintf(fname,"%d.scr",j);
ikon 2:456410210d03 360 scr2lcd(fname);
ikon 2:456410210d03 361 wait(2.0);
ikon 2:456410210d03 362
ikon 2:456410210d03 363 } // For (j)
ikon 2:456410210d03 364
ikon 2:456410210d03 365 } // Loop Forever
ikon 2:456410210d03 366
ikon 2:456410210d03 367 fclose(fl); // Close index file
ikon 2:456410210d03 368
ikon 2:456410210d03 369 } // Else (ShowType)
ikon 2:456410210d03 370
ikon 2:456410210d03 371 } // End main()
ikon 2:456410210d03 372