Live RSS feeds from ethernet on a 16X2 LCD

Dependencies:   EthernetNetIf mbed

Committer:
amli1016
Date:
Tue Oct 12 14:19:29 2010 +0000
Revision:
0:92d9235b910a

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
amli1016 0:92d9235b910a 1 #include "mbed.h"
amli1016 0:92d9235b910a 2 #include "EthernetNetIf.h"
amli1016 0:92d9235b910a 3 #include "HTTPClient.h"
amli1016 0:92d9235b910a 4 #include "TextLCD.h"
amli1016 0:92d9235b910a 5 //#include "TextLCD_SlideMessage.cpp"
amli1016 0:92d9235b910a 6 TextLCD lcd(p10, p12, p15, p16, p29, p30);
amli1016 0:92d9235b910a 7 EthernetNetIf eth;
amli1016 0:92d9235b910a 8 HTTPClient http;
amli1016 0:92d9235b910a 9 int p=0;
amli1016 0:92d9235b910a 10 int c=0;
amli1016 0:92d9235b910a 11 int gl=0;
amli1016 0:92d9235b910a 12 HTTPResult result;
amli1016 0:92d9235b910a 13 bool completed = false;
amli1016 0:92d9235b910a 14
amli1016 0:92d9235b910a 15 void request_callback(HTTPResult r)
amli1016 0:92d9235b910a 16 {
amli1016 0:92d9235b910a 17 result = r;
amli1016 0:92d9235b910a 18 completed = true;
amli1016 0:92d9235b910a 19 }
amli1016 0:92d9235b910a 20
amli1016 0:92d9235b910a 21 int checks(char *a) // parsing function returns the startin poshition of the RSS feed in the current buffer
amli1016 0:92d9235b910a 22 {
amli1016 0:92d9235b910a 23
amli1016 0:92d9235b910a 24 int i=gl;
amli1016 0:92d9235b910a 25 // printf("%d\n\r",i);
amli1016 0:92d9235b910a 26 if(p==1)
amli1016 0:92d9235b910a 27 {
amli1016 0:92d9235b910a 28 p=0;
amli1016 0:92d9235b910a 29 if(a[0]=='t')
amli1016 0:92d9235b910a 30 {
amli1016 0:92d9235b910a 31 //c=1;
amli1016 0:92d9235b910a 32 gl=i+8;
amli1016 0:92d9235b910a 33 return i+7;
amli1016 0:92d9235b910a 34 }
amli1016 0:92d9235b910a 35 }
amli1016 0:92d9235b910a 36 for(;i<512;i++)
amli1016 0:92d9235b910a 37 {
amli1016 0:92d9235b910a 38 // printf("%d",i);
amli1016 0:92d9235b910a 39 if(i==511)
amli1016 0:92d9235b910a 40 {
amli1016 0:92d9235b910a 41 if(a[i]=='<')
amli1016 0:92d9235b910a 42 {
amli1016 0:92d9235b910a 43 p=1;
amli1016 0:92d9235b910a 44 gl=0;
amli1016 0:92d9235b910a 45 return -1;
amli1016 0:92d9235b910a 46 }
amli1016 0:92d9235b910a 47 else
amli1016 0:92d9235b910a 48 {
amli1016 0:92d9235b910a 49 gl=0;
amli1016 0:92d9235b910a 50 return -1;
amli1016 0:92d9235b910a 51 }
amli1016 0:92d9235b910a 52 }
amli1016 0:92d9235b910a 53 if (a[i]=='<') // check if "<t" appears
amli1016 0:92d9235b910a 54 {
amli1016 0:92d9235b910a 55 if(a[i+1]=='t')
amli1016 0:92d9235b910a 56 {
amli1016 0:92d9235b910a 57 //if(a[i+2]=='i')
amli1016 0:92d9235b910a 58 {
amli1016 0:92d9235b910a 59 //c=1;
amli1016 0:92d9235b910a 60
amli1016 0:92d9235b910a 61 // printf("%c",a[i+2]);
amli1016 0:92d9235b910a 62 if(i+7>511)
amli1016 0:92d9235b910a 63 {
amli1016 0:92d9235b910a 64 c=(i+7-511);
amli1016 0:92d9235b910a 65 gl=0;
amli1016 0:92d9235b910a 66 return -1;
amli1016 0:92d9235b910a 67 }
amli1016 0:92d9235b910a 68 else
amli1016 0:92d9235b910a 69 {
amli1016 0:92d9235b910a 70 gl=i+8;
amli1016 0:92d9235b910a 71 return i+7; // return the starting position of the feed
amli1016 0:92d9235b910a 72 }
amli1016 0:92d9235b910a 73 }
amli1016 0:92d9235b910a 74 }
amli1016 0:92d9235b910a 75 }
amli1016 0:92d9235b910a 76 }
amli1016 0:92d9235b910a 77 }
amli1016 0:92d9235b910a 78 int main() {
amli1016 0:92d9235b910a 79
amli1016 0:92d9235b910a 80 int i=0;
amli1016 0:92d9235b910a 81 printf("Start\n");
amli1016 0:92d9235b910a 82
amli1016 0:92d9235b910a 83 printf("Setting up...\n");
amli1016 0:92d9235b910a 84 EthernetErr ethErr = eth.setup();
amli1016 0:92d9235b910a 85 if(ethErr)
amli1016 0:92d9235b910a 86 {
amli1016 0:92d9235b910a 87 printf("Error %d in setup.\n", ethErr);
amli1016 0:92d9235b910a 88 return -1;
amli1016 0:92d9235b910a 89 }
amli1016 0:92d9235b910a 90 printf("Setup OK\n");
amli1016 0:92d9235b910a 91
amli1016 0:92d9235b910a 92 HTTPStream stream;
amli1016 0:92d9235b910a 93 while(1)
amli1016 0:92d9235b910a 94 {
amli1016 0:92d9235b910a 95 completed=false;
amli1016 0:92d9235b910a 96 char BigBuf[512 + 1] = {0};
amli1016 0:92d9235b910a 97 stream.readNext((byte*)BigBuf, 512); //Point to buffer for the first read
amli1016 0:92d9235b910a 98
amli1016 0:92d9235b910a 99 HTTPResult r = http.get("HTTP://rss.cnn.com/rss/cnn_tech.rss", &stream, request_callback); //Load a very large page, such as the hackaday RSS feed
amli1016 0:92d9235b910a 100
amli1016 0:92d9235b910a 101 while(!completed)
amli1016 0:92d9235b910a 102 {
amli1016 0:92d9235b910a 103 Net::poll(); //Polls the Networking stack
amli1016 0:92d9235b910a 104 //printf("a");
amli1016 0:92d9235b910a 105 if(stream.readable())
amli1016 0:92d9235b910a 106 {
amli1016 0:92d9235b910a 107
amli1016 0:92d9235b910a 108
amli1016 0:92d9235b910a 109 int cnt=0;
amli1016 0:92d9235b910a 110 while(cnt!=-1) // cnt = -1 if the current buffer is fully read
amli1016 0:92d9235b910a 111 {
amli1016 0:92d9235b910a 112 if (c!=0)
amli1016 0:92d9235b910a 113 {
amli1016 0:92d9235b910a 114 i=c-1;
amli1016 0:92d9235b910a 115 c=0;
amli1016 0:92d9235b910a 116 goto abcd;
amli1016 0:92d9235b910a 117 }
amli1016 0:92d9235b910a 118
amli1016 0:92d9235b910a 119 cnt=checks(BigBuf);
amli1016 0:92d9235b910a 120 if(cnt==-1)
amli1016 0:92d9235b910a 121 {
amli1016 0:92d9235b910a 122 break;
amli1016 0:92d9235b910a 123 }
amli1016 0:92d9235b910a 124 printf("\n\r");
amli1016 0:92d9235b910a 125 // printf("%d",cnt );
amli1016 0:92d9235b910a 126 i =cnt;
amli1016 0:92d9235b910a 127 abcd:
amli1016 0:92d9235b910a 128 {
amli1016 0:92d9235b910a 129
amli1016 0:92d9235b910a 130 // Print on LCD in rolling fashion
amli1016 0:92d9235b910a 131 {
amli1016 0:92d9235b910a 132 for (j = 15 ; j>=0 ; j-- ){
amli1016 0:92d9235b910a 133
amli1016 0:92d9235b910a 134 for (int k = j ; k <= 15 ; k++ ){
amli1016 0:92d9235b910a 135 if((i+k-j)==512)
amli1016 0:92d9235b910a 136 {
amli1016 0:92d9235b910a 137 i=-10;
amli1016 0:92d9235b910a 138 goto efgh;
amli1016 0:92d9235b910a 139
amli1016 0:92d9235b910a 140 }
amli1016 0:92d9235b910a 141 lcd.locate(k,0);
amli1016 0:92d9235b910a 142 if ( BigBuf[i+k-j]!='<' ) // Checks for the end of RSS feed
amli1016 0:92d9235b910a 143 lcd.printf("%c",BigBuf[i+k-j]) ;
amli1016 0:92d9235b910a 144 else
amli1016 0:92d9235b910a 145 {
amli1016 0:92d9235b910a 146 lcd.cls();
amli1016 0:92d9235b910a 147 goto efgh;
amli1016 0:92d9235b910a 148 }
amli1016 0:92d9235b910a 149 }
amli1016 0:92d9235b910a 150 wait(0.18) ;
amli1016 0:92d9235b910a 151 }
amli1016 0:92d9235b910a 152
amli1016 0:92d9235b910a 153 for ( int j = 1 ; BigBuf[i+j] != '<' ; j++ ){
amli1016 0:92d9235b910a 154 for ( int k = 0; k < 16 ; k++ ){
amli1016 0:92d9235b910a 155 if((i+k+j)==512)
amli1016 0:92d9235b910a 156 {
amli1016 0:92d9235b910a 157 i=-10;
amli1016 0:92d9235b910a 158 goto efgh;
amli1016 0:92d9235b910a 159
amli1016 0:92d9235b910a 160 }
amli1016 0:92d9235b910a 161 lcd.locate(k,0) ;
amli1016 0:92d9235b910a 162
amli1016 0:92d9235b910a 163 if( BigBuf[i+k + j]!='<' )
amli1016 0:92d9235b910a 164 {
amli1016 0:92d9235b910a 165 lcd.printf("%c",BigBuf[i+k+j]) ;
amli1016 0:92d9235b910a 166 }
amli1016 0:92d9235b910a 167 else
amli1016 0:92d9235b910a 168 {
amli1016 0:92d9235b910a 169 lcd.printf(" ") ;
amli1016 0:92d9235b910a 170 lcd.cls();
amli1016 0:92d9235b910a 171 goto efgh;
amli1016 0:92d9235b910a 172 }
amli1016 0:92d9235b910a 173 }
amli1016 0:92d9235b910a 174 wait(0.18) ;
amli1016 0:92d9235b910a 175 }
amli1016 0:92d9235b910a 176 }
amli1016 0:92d9235b910a 177
amli1016 0:92d9235b910a 178
amli1016 0:92d9235b910a 179
amli1016 0:92d9235b910a 180 efgh: if(i==-10) // If the buffer is full and the entire feed is not gisplayed
amli1016 0:92d9235b910a 181 {
amli1016 0:92d9235b910a 182
amli1016 0:92d9235b910a 183 c=1;
amli1016 0:92d9235b910a 184 goto xyz;
amli1016 0:92d9235b910a 185 }
amli1016 0:92d9235b910a 186 }
amli1016 0:92d9235b910a 187
amli1016 0:92d9235b910a 188 }
amli1016 0:92d9235b910a 189
amli1016 0:92d9235b910a 190
amli1016 0:92d9235b910a 191
amli1016 0:92d9235b910a 192 xyz: stream.readNext((byte*)BigBuf, 512); //Buffer has been read, now we can put more data in it
amli1016 0:92d9235b910a 193 }
amli1016 0:92d9235b910a 194 }
amli1016 0:92d9235b910a 195
amli1016 0:92d9235b910a 196
amli1016 0:92d9235b910a 197 printf("\n--------------\n");
amli1016 0:92d9235b910a 198 if(result == HTTP_OK)
amli1016 0:92d9235b910a 199 {
amli1016 0:92d9235b910a 200 printf("Read completely\n");
amli1016 0:92d9235b910a 201 }
amli1016 0:92d9235b910a 202 else
amli1016 0:92d9235b910a 203 {
amli1016 0:92d9235b910a 204 printf("Error %d\n", result);
amli1016 0:92d9235b910a 205 }
amli1016 0:92d9235b910a 206 wait(5); // Continuously receive feeds
amli1016 0:92d9235b910a 207 }
amli1016 0:92d9235b910a 208 while(1)
amli1016 0:92d9235b910a 209 {
amli1016 0:92d9235b910a 210
amli1016 0:92d9235b910a 211 }
amli1016 0:92d9235b910a 212
amli1016 0:92d9235b910a 213 return 0;
amli1016 0:92d9235b910a 214
amli1016 0:92d9235b910a 215 }