Committer:
donde
Date:
Tue Jun 05 01:08:29 2012 +0000
Revision:
0:27f6f27aef35

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donde 0:27f6f27aef35 1
donde 0:27f6f27aef35 2 #include "mbed.h"
donde 0:27f6f27aef35 3 #include "EthernetNetIf.h"
donde 0:27f6f27aef35 4 #include "HTTPClient.h"
donde 0:27f6f27aef35 5 #include "NokiaLCD.h"
donde 0:27f6f27aef35 6
donde 0:27f6f27aef35 7 NokiaLCD lcd(p5, p7, p8, p9, NokiaLCD::LCD6610); // mosi, sclk, cs, rst, type
donde 0:27f6f27aef35 8
donde 0:27f6f27aef35 9 EthernetNetIf eth;
donde 0:27f6f27aef35 10 HTTPClient http;
donde 0:27f6f27aef35 11 LocalFileSystem local("local");
donde 0:27f6f27aef35 12 HTTPResult result;
donde 0:27f6f27aef35 13 bool completed = false;
donde 0:27f6f27aef35 14
donde 0:27f6f27aef35 15 void request_callback(HTTPResult r)
donde 0:27f6f27aef35 16 {
donde 0:27f6f27aef35 17 result = r;
donde 0:27f6f27aef35 18 completed = true;
donde 0:27f6f27aef35 19 }
donde 0:27f6f27aef35 20
donde 0:27f6f27aef35 21 int main() {
donde 0:27f6f27aef35 22
donde 0:27f6f27aef35 23 lcd.background(0x0000FF);
donde 0:27f6f27aef35 24 lcd.cls();
donde 0:27f6f27aef35 25
donde 0:27f6f27aef35 26 printf("Start\n");
donde 0:27f6f27aef35 27
donde 0:27f6f27aef35 28 printf("Setting up...\n");
donde 0:27f6f27aef35 29 EthernetErr ethErr = eth.setup();
donde 0:27f6f27aef35 30 if(ethErr)
donde 0:27f6f27aef35 31 {
donde 0:27f6f27aef35 32 printf("Error %d in setup.\n", ethErr);
donde 0:27f6f27aef35 33 return -1;
donde 0:27f6f27aef35 34 }
donde 0:27f6f27aef35 35 printf("Setup OK\n");
donde 0:27f6f27aef35 36
donde 0:27f6f27aef35 37 HTTPStream stream;
donde 0:27f6f27aef35 38
donde 0:27f6f27aef35 39 int flag = 0;
donde 0:27f6f27aef35 40 int count = 0;
donde 0:27f6f27aef35 41 int pixel = 1;
donde 0:27f6f27aef35 42 char c;
donde 0:27f6f27aef35 43 char buffer[100];
donde 0:27f6f27aef35 44 char BigBuf[512 + 1] = {0};
donde 0:27f6f27aef35 45 stream.readNext((byte*)BigBuf, 512); //Point to buffer for the first read
donde 0:27f6f27aef35 46
donde 0:27f6f27aef35 47 HTTPResult r = http.get("http://rss.cnn.com/rss/cnn_topstories.rss", &stream, request_callback); //Load a very large page, such as the hackaday RSS feed
donde 0:27f6f27aef35 48 FILE *fp = fopen("/local/out.txt", "w"); // Open "out.txt" on the local file system for writing
donde 0:27f6f27aef35 49 while(!completed)
donde 0:27f6f27aef35 50 {
donde 0:27f6f27aef35 51 Net::poll(); //Polls the Networking stack
donde 0:27f6f27aef35 52 if(stream.readable())
donde 0:27f6f27aef35 53 {
donde 0:27f6f27aef35 54 BigBuf[stream.readLen()] = 0; //Transform this buffer in a zero-terminated char* string
donde 0:27f6f27aef35 55 fprintf(fp,BigBuf);
donde 0:27f6f27aef35 56 //Note: some servers do not like if you throttle them too much, so printf'ing during a request is generally bad practice
donde 0:27f6f27aef35 57 stream.readNext((byte*)BigBuf, 512); //Buffer has been read, now we can put more data in it
donde 0:27f6f27aef35 58 }
donde 0:27f6f27aef35 59 }
donde 0:27f6f27aef35 60 fclose(fp);
donde 0:27f6f27aef35 61 fp = fopen( "/local/out.txt", "r");
donde 0:27f6f27aef35 62 if (fp==NULL) printf ("Error opening file");
donde 0:27f6f27aef35 63 else
donde 0:27f6f27aef35 64 {
donde 0:27f6f27aef35 65 do
donde 0:27f6f27aef35 66 {
donde 0:27f6f27aef35 67 c = fgetc (fp);
donde 0:27f6f27aef35 68 if (c == '<')
donde 0:27f6f27aef35 69 {
donde 0:27f6f27aef35 70 c = fgetc(fp);
donde 0:27f6f27aef35 71 if(c == 't')
donde 0:27f6f27aef35 72 {
donde 0:27f6f27aef35 73 c = fgetc(fp);
donde 0:27f6f27aef35 74 if(c == 'i')
donde 0:27f6f27aef35 75 {
donde 0:27f6f27aef35 76 c = fgetc(fp);
donde 0:27f6f27aef35 77 if(c == 't')
donde 0:27f6f27aef35 78 {
donde 0:27f6f27aef35 79 c = fgetc(fp);
donde 0:27f6f27aef35 80 if( c == 'l')
donde 0:27f6f27aef35 81 {
donde 0:27f6f27aef35 82 c = fgetc(fp);
donde 0:27f6f27aef35 83 if( c == 'e')
donde 0:27f6f27aef35 84 {
donde 0:27f6f27aef35 85 c = fgetc(fp);
donde 0:27f6f27aef35 86 if(c == '>')
donde 0:27f6f27aef35 87 {
donde 0:27f6f27aef35 88 count++;
donde 0:27f6f27aef35 89 if((count >=3) && (count <=5))
donde 0:27f6f27aef35 90 {
donde 0:27f6f27aef35 91 if(count == 6) break;
donde 0:27f6f27aef35 92 int i = 0;
donde 0:27f6f27aef35 93 c = fgetc(fp);
donde 0:27f6f27aef35 94 while(c != '<')
donde 0:27f6f27aef35 95 {
donde 0:27f6f27aef35 96 buffer[i] = c;
donde 0:27f6f27aef35 97 i++;
donde 0:27f6f27aef35 98 c = fgetc(fp);
donde 0:27f6f27aef35 99 }
donde 0:27f6f27aef35 100 buffer[i] = '\0';
donde 0:27f6f27aef35 101 lcd.locate(0,pixel);
donde 0:27f6f27aef35 102 lcd.printf("%s",buffer);
donde 0:27f6f27aef35 103 pixel += 5;
donde 0:27f6f27aef35 104 }
donde 0:27f6f27aef35 105 }
donde 0:27f6f27aef35 106 }
donde 0:27f6f27aef35 107 }
donde 0:27f6f27aef35 108 }
donde 0:27f6f27aef35 109 }
donde 0:27f6f27aef35 110 }
donde 0:27f6f27aef35 111 }
donde 0:27f6f27aef35 112 }while (count <= 5);
donde 0:27f6f27aef35 113 fclose (fp);
donde 0:27f6f27aef35 114 }
donde 0:27f6f27aef35 115
donde 0:27f6f27aef35 116 if(result == HTTP_OK)
donde 0:27f6f27aef35 117 {
donde 0:27f6f27aef35 118 printf("Read completely\n");
donde 0:27f6f27aef35 119 }
donde 0:27f6f27aef35 120 else
donde 0:27f6f27aef35 121 {
donde 0:27f6f27aef35 122 printf("Error %d\n", result);
donde 0:27f6f27aef35 123 }
donde 0:27f6f27aef35 124
donde 0:27f6f27aef35 125 return 0;
donde 0:27f6f27aef35 126
donde 0:27f6f27aef35 127 }
donde 0:27f6f27aef35 128
donde 0:27f6f27aef35 129