Sections
You are here: Home Documentation How-tos Read info from an RSS feed Make blog RSS reader

Make blog RSS reader

Firmware to read from the RSS feed on the makezine.com blog. Copy and paste this into your make.c file to run this on your Make Controller.

make.c — C source code, 2Kb

File contents

/*
	blog.makezine.com RSS notifier

  Use the Make Controller as an RSS client and check for new material on the Make blog.
*/

#include "config.h"
#include "stdlib.h"
#include "string.h"
#include <stdio.h>

#include "webclient.h"

void BlinkTask( void* parameters );
void ReaderTask( void* p );
void onNewPost( void );

void Run( ) // this task gets called as soon as we boot up.
{
  TaskCreate( BlinkTask, "Blink", 400, 0, 1 );
  Network_SetActive( true ); // Starts the network up.
  TaskCreate( ReaderTask, "Read", 3500, 0, 1 );
}

#define RSS_FREQUENCY 10 // the number of minutes to wait between each RSS request

void ReaderTask( void* p )
{
  (void)p;
  int addr = IP_ADDRESS( 72, 34, 58, 9 ); // the address we got for blog.makezine.com
  int buffLength = 1000;
  char responseBuffer[buffLength];
  char* begin;
  char* end;
  char lastDate[50];
  while( 1 )
  {
		int getSize = WebClient_Get( addr, 80, "blog.makezine.com", "/index.xml", responseBuffer, buffLength );
    if( getSize > 0 )
    {
      begin = responseBuffer;
      while( getSize-- ) // cruise through all the characters we've received
      {
        if( *begin != '<' ) // look for the beginning of a tag
          begin++;
        else
        {
          end = ++begin;
          while( *end != '>' ) // now find the end of the tag
            end++;
          *end = '\0'; // null-terminate the string so we can compare it
          if( strcmp( begin, "lastBuildDate" ) == 0 ) // we found the tag with our date
          {
            begin = ++end;
            while( *end != '<' )
              end++;
            *end = '\0'; // terminate the date string
            if( strcmp( begin, lastDate ) != 0 )
            {
              snprintf( lastDate, 50, begin );
              onNewPost( ); // do our notification
              break;
            }
          }
          else
            begin = end++;
        }
      }
    }
    Sleep( RSS_FREQUENCY * 60 * 1000 );
  }
}

// replace this with whatever kind of notification you like...
void onNewPost( )
{
  int repeats = 10;
  while (repeats--)
  {
    AppLed_SetState( 0, 1 ); // turn everything on
    AppLed_SetState( 1, 1 );
    AppLed_SetState( 2, 1 );
    AppLed_SetState( 3, 1 );
    DigitalOut_SetValue( 0, 1 );
    Sleep( 500 ); // leave them on for a 1/2 second
    AppLed_SetState( 0, 0 ); // turn everything off
    AppLed_SetState( 1, 0 );
    AppLed_SetState( 2, 0 );
    AppLed_SetState( 3, 0 );
    DigitalOut_SetValue( 0, 0 );
    Sleep( 500 ); // leave them off for a 1/2 second
  }
}

void BlinkTask( void* p )
{
 (void)p;
  Led_SetState( 1 );
  Sleep( 1000 );

  while ( true )
  {
    Led_SetState( 0 );
    Sleep( 900 );
    Led_SetState( 1 );
    Sleep( 10 ); 
  }
}


Document Actions
Log in


Forgot your password?
New user?