Dependencies:   NetServices mbed

main.cpp

Committer:
segundo
Date:
2010-12-15
Revision:
5:1e77bdd1a639
Parent:
4:26f346102b1a

File content as of revision 5:1e77bdd1a639:

#include "mbed.h"
#include "EthernetNetIf.h"
#include "HTTPClient.h"
#include "NTPClient.h"
#include "HTTPServer.h"
#include "RPCFunction.h"

#define HOSTNAME "mbedSE"

EthernetNetIf eth(HOSTNAME);
HTTPClient http;
NTPClient ntp;
HTTPServer svr;

DigitalOut led1(LED1, "led1");
DigitalOut led2(LED2, "led2");
DigitalOut led3(LED3, "led3");
DigitalOut led4(LED4, "led4");

void DoEcho(char* input, char* output);
RPCFunction Echo(&DoEcho, "echo");

void DoEcho(char* input, char* output) {
    printf("%s\n", input);
    strcpy(output, input);
}

int main() {

    printf("\n\n/* Segundo Equipo NetServices library demonstration */\n");
    printf("Try starting the program with the network disconnected and then connect after a few timeouts reported\n\n");
    EthernetErr ethErr;
    int count = 0;
    do {
        printf("Setting up %d...\n", ++count);
        ethErr = eth.setup();
        if (ethErr) printf("Timeout\n", ethErr);
    } while (ethErr != ETH_OK);

    printf("Connected OK\n");
    const char* hwAddr = eth.getHwAddr();
    printf("HW address : %02x:%02x:%02x:%02x:%02x:%02x\n",
           hwAddr[0], hwAddr[1], hwAddr[2],
           hwAddr[3], hwAddr[4], hwAddr[5]);

    IpAddr ethIp = eth.getIp();
    printf("IP address : %d.%d.%d.%d\n", ethIp[0], ethIp[1], ethIp[2], ethIp[3]);
    printf("Check router DHCP table for name : %s\n", eth.getHostname());

    printf("\nHTTPClient get...\n");
    HTTPText txt;
    HTTPResult r = http.get("http://mbed.org/media/uploads/donatien/hello.txt", &txt);
    if (r==HTTP_OK) {
        printf("Result ok : %s\n", txt.gets());
    } else {
        printf("Error %d\n", r);
    }

    time_t ctTime;
    ctTime = time(NULL);
    printf("\nCurrent time is (UTC): %d %s\n", ctTime, ctime(&ctTime));
    printf("NTP setTime...\n");
    Host server(IpAddr(), 123, "pool.ntp.org");
    printf("Result : %d\n", ntp.setTime(server));

    ctTime = time(NULL);
    printf("\nTime is now (UTC): %d %s\n", ctTime, ctime(&ctTime));

    printf("NTP setTime to a deliberately incorrect server...\n");
    server.setName("www.google.com");
    printf("Result : %d\n", ntp.setTime(server));

    ctTime = time(NULL);
    printf("\nTime should still be correct (UTC): %d %s\n", ctTime, ctime(&ctTime));
    
    char ip[16];
    sprintf(ip, "%d.%d.%d.%d", ethIp[0], ethIp[1], ethIp[2], ethIp[3]);
    
#define PORT 80
    svr.addHandler<RPCHandler>("/rpc");
    svr.bind(PORT);
    printf("Server listening (port %d)\n", PORT);
    printf("- LED1 should flash\n");
    printf("- type into browser to test url decode : %s/rpc/echo/run \"quoted string with <>\" or http://192.168.1.103/rpc/echo/run%%20%%22quoted%%20string%%20with%%20%%3C%%3E%%22\n", ip);

    Timer tm;
    tm.start();

    while (true) {
        Net::poll();
        if (tm.read() > 0.5) {
            led1 = !led1;
            tm.start();
        }
    }
}