cnn_news.cpp@0:27f6f27aef35, 2012-06-05 (annotated)
- Committer:
- donde
- Date:
- Tue Jun 05 01:08:29 2012 +0000
- Revision:
- 0:27f6f27aef35
Who changed what in which revision?
User | Revision | Line number | New 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 |