The program uses RPC over http to open a garage door over the internet. On a htm page is a link that calls a RPC function

Dependencies:   EthernetNetIf NTPClient_NetServices mbed HTTPServer

Revision:
0:8c69f4c2bb0e
Child:
1:71c0a02e6587
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/myGarageDoorOpenerHTTPServerExample.cpp	Fri Jun 10 21:20:19 2011 +0000
@@ -0,0 +1,121 @@
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "HTTPServer.h"
+#include "RPCFunction.h"
+
+DigitalOut led1(LED1, "led1");
+DigitalOut led2(LED2, "led2");
+DigitalOut led3(LED3, "led3");
+DigitalOut led4(LED4, "led4");
+DigitalOut rfout(p22,"rfout");
+
+LocalFileSystem fs("webfs");// Create the local filesystem under the name "local"
+
+EthernetNetIf eth(
+    IpAddr(192,168,1,100), //IP Address
+    IpAddr(255,255,255,0), //Network Mask
+    IpAddr(192,168,1,254), //Gateway
+    IpAddr(192,168,1,254)  //DNS
+);
+HTTPServer svr;
+
+void sendbit(char a);
+void open(char * input, char * output);//Open garage door
+RPCFunction rpc_open(&open, "open");
+
+int main() {
+    Base::add_rpc_class<AnalogIn>();
+    Base::add_rpc_class<AnalogOut>();
+    Base::add_rpc_class<DigitalIn>();
+    Base::add_rpc_class<DigitalOut>();
+    Base::add_rpc_class<DigitalInOut>();
+    Base::add_rpc_class<PwmOut>();
+    Base::add_rpc_class<Timer>();
+    Base::add_rpc_class<BusOut>();
+    Base::add_rpc_class<BusIn>();
+    Base::add_rpc_class<BusInOut>();
+    Base::add_rpc_class<Serial>();
+
+    printf("Setting up...\n");
+    EthernetErr ethErr = eth.setup();
+    if (ethErr) {
+        printf("Error %d in setup.\n", ethErr);
+        return -1;
+    }
+    printf("Setup OK\n");
+
+    FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path
+    FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
+
+    svr.addHandler<SimpleHandler>("/hello");
+    svr.addHandler<RPCHandler>("/rpc");
+    svr.addHandler<FSHandler>("/files");
+    svr.addHandler<FSHandler>("/"); //Default handler
+    //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm
+    svr.bind(80);
+    printf("Listening...\n");
+
+    Timer tm;
+    tm.start();
+    while (true) {
+        Net::poll();
+        if (tm.read()>0.5) {
+            led1=!led1; //Show that we are alive
+            tm.start();
+        }
+    }//end of while loop
+}//end of main
+
+void sendbit(char a) {
+    if (a==0) {       //pin low
+        rfout=1;
+        wait_us(2010);
+        rfout=0;
+        wait_us(270);
+        rfout=1;
+        wait_us(2010);
+        rfout=0;
+        wait_us(270);
+    }
+    if (a==1) { //pin high
+        rfout=1;
+        wait_us(270);
+        rfout=0;
+        wait_us(2010);
+        rfout=1;
+        wait_us(270);
+        rfout=0;
+        wait_us(2010);
+    }
+}
+
+    void open(char * input, char * output) {
+        led4=1;
+        for (char i = 0; i<20; i++) {
+            sendbit(1);//address A1
+            sendbit(0);//address A2
+            sendbit(0);//address A3
+            sendbit(0);//address A4
+            sendbit(1);//address A5
+            sendbit(0);//address A6 /data D6
+            sendbit(1);//address A7 /data D7
+            sendbit(0);//address A8 /data D8
+            sendbit(1);//address A9 /data D9
+            wait_ms(14);
+        }
+        led4=0;
+        sprintf(output, "<html><head><meta http-equiv=refresh content='5; url=../../index.htm'></head><body BGCOLOR=#A1F9FF>Opening,wait...</body></html>");
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+