Dependencies:   mbed MSCFileSystem_Lib SDFileSystem

main.cpp

Committer:
nxpfan
Date:
2010-07-07
Revision:
0:90dae25ad520

File content as of revision 0:90dae25ad520:

//  This is a sample/lib collection for the starboard
//  Those libs are from...
//      http://mbed.org/cookbook/Text-LCD                       (New TextLCD lib/sample)
//      http://mbed.org/cookbook/SD-Card-File-System            (latest as of 2010-07-07)
//      http://mbed.org/users/chris/programs/MSCFileSystem_Lib  (USB-strage)
//      http://mbed.org/cookbook/HTTP-Server                    (Ethernet check with HTTP server)
//
//  For the battery supply check, another program 
//  (http://mbed.org/users/nxpfan/programs/RTC_LCD__starboard_orange) can be used
//
//  @nxpfan, 2010-07-07 (Wish upon a Star)

#include "mbed.h"

////////////////////////////////////////
////////    general setting     ////////
////////////////////////////////////////
#define     USE_TextLCD_20x4
#define     USE_FIXED_IP

////////////////////////////////////////
////////    For TextLCD         ////////
////////////////////////////////////////
#include "TextLCD.h"
#ifdef  USE_TextLCD_20x4
TextLCD     lcd( p24, p26, p27, p28, p29, p30, TextLCD::LCD20x4 ); // rs, e, d0-d3
#else
TextLCD     lcd( p24, p26, p27, p28, p29, p30 ); // rs, e, d0-d3
#endif

////////////////////////////////////////
////////    For SD_card         ////////
////////////////////////////////////////
#include "SDFileSystem.h"
SDFileSystem    sd(p5, p6, p7, p13, "sd");  //  mosi, miso, sclk, cs, name
//SDFileSystem  sd(p5, p6, p7, p8,  "sd");  //  (HW modification candidate)

////////////////////////////////////////
////////    For USB storage     ////////
////////////////////////////////////////
#include "MSCFileSystem.h"
MSCFileSystem   usb("usb");

////////////////////////////////////////
////////    For Ethernet test   ////////
////////////////////////////////////////
#include "EthernetNetIf.h"
#include "HTTPServer.h"
#ifdef      USE_FIXED_IP
EthernetNetIf   eth(
    IpAddr(192,168,0,7), //IP Address
    IpAddr(255,255,255,0), //Network Mask
    IpAddr(192,168,0,1), //Gateway
    IpAddr(192,168,0,1)  //DNS
);
#else
EthernetNetIf   eth;
#endif
HTTPServer svr;
LocalFileSystem web("webfs");


void test_TextLCD( void );
void test_file_write( char *title, char *path );
void test_httpserver( void );
int  position( void );

int main() {
    test_TextLCD();
    wait( 1 );
    test_file_write( "SD card", "/sd/testfile.txt" );
    wait( 1 );
    //test_file_write( "USB storage", "/usb/testfile.txt" );
    //wait( 1 );
    test_httpserver();
}


void test_TextLCD( void ) {
    //  TextLCD test

#ifdef  USE_TextLCD_20x4
    lcd.locate( 0, 0 );
    for ( int i = 0, c = '0'; i < 20; i++, c++ )
        lcd.putc( c );

    for ( int i = 0, c = 'A'; i < 20; i++, c++ )
        lcd.putc( c );
            
    for ( int i = 0, c = 'a'; i < 20; i++, c++ )
        lcd.putc( c );
    for ( int i = 0, c = '0' - 10; i < 20; i++, c++ )
        lcd.putc( c );

    wait( 2 );
    lcd.cls();
#endif  //  USE_TextLCD_20x4

    lcd.locate( 0, 0 );
    lcd.printf( "TextLCD: OK?" );
    lcd.locate( 0, 1 );
    lcd.printf( "" );

}

void test_file_write( char *title, char *path ) {
    //  SD card test
    lcd.locate( 0, position() );
    lcd.printf( "%s: ", title );

    FILE *fp = fopen( path, "w" );
    if ( fp == NULL ) {
        lcd.printf( "error" );
        error( "Could not open file for write\n" );
    }
    fprintf( fp, "Hello world, %s!", title );
    fclose( fp );

    lcd.printf( "OK." );
}


void test_httpserver( void ) {
    DigitalOut  led1( LED1 );

    lcd.locate( 0, position() );
    lcd.printf( "HTTP srv: " );

    Base::add_rpc_class<DigitalOut>();

    printf("Setting up...n");
    EthernetErr ethErr = eth.setup();
    if ( ethErr ) {
        lcd.printf( "error" );
        error( "error @ eth.setup()\n" );
    }
    lcd.printf("OK ");

    FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path

    svr.addHandler<FSHandler>("/"); //Default handler

    svr.bind(80);

    lcd.locate( 5, position() -1 );
    lcd.printf("Listening");

    Timer tm;
    tm.start();
    //Listen indefinitely
    while (true) {
        Net::poll();
        if (tm.read()>.5) {
            led1=!led1; //Show that we are alive
            tm.start();
        }
    }
}


int position( void ) {
    static int  p   = 0;

#ifdef  USE_TextLCD_20x4
    return( ++p % 4 );
#else
    return( ++p % 2 );
#endif
}