Live RSS feeds from ethernet on a 16X2 LCD

Dependencies:   EthernetNetIf mbed

Files at this revision

API Documentation at this revision

Comitter:
amli1016
Date:
Tue Oct 12 14:19:29 2010 +0000
Commit message:

Changed in this revision

EthernetNetIf.lib Show annotated file Show diff for this revision Revisions of this file
HTTPClient.lib Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EthernetNetIf.lib	Tue Oct 12 14:19:29 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/EthernetNetIf/#bc7df6da7589
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HTTPClient.lib	Tue Oct 12 14:19:29 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/HTTPClient/#d97a4fc01c86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TextLCD.lib	Tue Oct 12 14:19:29 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/simon/code/TextLCD/#a53b3e2d6f1e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Oct 12 14:19:29 2010 +0000
@@ -0,0 +1,215 @@
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "HTTPClient.h"
+#include "TextLCD.h"
+//#include "TextLCD_SlideMessage.cpp"
+TextLCD lcd(p10, p12, p15, p16, p29, p30);
+EthernetNetIf eth; 
+HTTPClient http;
+int p=0;
+int c=0;
+int gl=0;
+HTTPResult result;
+bool completed = false;
+
+void request_callback(HTTPResult r)
+{
+  result = r;
+  completed = true;
+}
+
+int checks(char *a)    // parsing function returns the startin poshition of the RSS feed in the current buffer 
+{
+ 
+  int i=gl;
+ // printf("%d\n\r",i);
+  if(p==1)
+  {
+        p=0;
+        if(a[0]=='t')
+        {
+          //c=1;
+          gl=i+8;
+          return i+7;
+        }      
+    }  
+  for(;i<512;i++)
+  {
+  // printf("%d",i);
+    if(i==511)
+    {
+        if(a[i]=='<')
+        {
+            p=1;
+            gl=0;
+            return -1;
+        } 
+    else
+    {
+        gl=0;
+        return -1;
+    }  
+   }
+    if (a[i]=='<')              //  check if "<t" appears 
+    {
+       if(a[i+1]=='t')
+        {
+        //if(a[i+2]=='i')
+        {
+          //c=1;
+          
+         // printf("%c",a[i+2]);
+          if(i+7>511)
+          {
+             c=(i+7-511);
+             gl=0;
+             return -1;
+            } 
+            else
+            {
+            gl=i+8;
+             return i+7;         // return the starting position of the feed
+             }
+          }
+       }
+    }
+  }
+  }
+int main() {
+
+  int i=0;
+  printf("Start\n");
+
+  printf("Setting up...\n");
+  EthernetErr ethErr = eth.setup();
+  if(ethErr)
+  {
+    printf("Error %d in setup.\n", ethErr);
+    return -1;
+  }
+  printf("Setup OK\n");
+  
+  HTTPStream stream;
+ while(1)
+ {
+  completed=false;
+  char BigBuf[512 + 1] = {0};
+  stream.readNext((byte*)BigBuf, 512); //Point to buffer for the first read
+  
+  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
+  
+  while(!completed)
+  {
+    Net::poll(); //Polls the Networking stack
+    //printf("a");
+    if(stream.readable())
+    {
+      
+    
+     int cnt=0;
+     while(cnt!=-1)   // cnt = -1 if the current buffer is fully read
+   {
+     if (c!=0)
+     {
+        i=c-1;
+        c=0;
+        goto abcd;
+      }   
+       
+       cnt=checks(BigBuf);
+       if(cnt==-1)
+       {
+         break;
+         }
+         printf("\n\r");
+     // printf("%d",cnt ); 
+     i =cnt;
+abcd:  
+     {
+     
+                                                 // Print on LCD in rolling fashion    
+      {        
+         for (j = 15  ; j>=0 ; j-- ){
+      
+             for (int k = j ; k <= 15 ; k++ ){
+               if((i+k-j)==512)
+                {
+                i=-10; 
+                goto efgh;
+                
+                }
+                 lcd.locate(k,0);
+                 if ( BigBuf[i+k-j]!='<' )             // Checks for the end of RSS feed
+                   lcd.printf("%c",BigBuf[i+k-j]) ;
+                 else
+                 {
+                     lcd.cls();
+                     goto efgh;
+                  }   
+             }          
+             wait(0.18) ;
+         }
+         
+         for ( int j = 1 ; BigBuf[i+j] != '<'  ; j++ ){
+             for ( int k = 0; k < 16 ; k++ ){
+                 if((i+k+j)==512)
+                { 
+                i=-10;
+                goto efgh;
+                
+                }
+                  lcd.locate(k,0) ;
+                  
+                 if( BigBuf[i+k + j]!='<' )
+                 {                     
+                     lcd.printf("%c",BigBuf[i+k+j]) ;
+                     }
+                 else
+                 {
+                     lcd.printf(" ") ;
+                     lcd.cls();
+                     goto efgh;
+             }
+             }
+             wait(0.18) ;
+         }    
+   }
+      
+      
+      
+efgh:  if(i==-10)   //  If the buffer is full and the entire feed is not gisplayed
+     {
+       
+       c=1;
+      goto xyz;
+      }                                   
+      }
+     
+    }
+    
+           
+                                      
+xyz:    stream.readNext((byte*)BigBuf, 512); //Buffer has been read, now we can put more data in it
+    }
+  }
+  
+  
+  printf("\n--------------\n");
+  if(result == HTTP_OK)
+  {
+    printf("Read completely\n"); 
+  }
+  else
+  {
+    printf("Error %d\n", result);
+  }
+  wait(5);           // Continuously receive feeds
+  }
+  while(1)
+  {
+  
+  }
+  
+  return 0;
+  
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Oct 12 14:19:29 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e