Simple code to demonstrate how to map an RPC global function that receives 3 parameters via REST HTTP Get request. Note: Demo program to be used on the GeekSessionLab Talk (November 2011). http://devrendezvous.com/?lang=en

Dependencies:   EthernetNetIf mbed HTTPServer

Files at this revision

API Documentation at this revision

Comitter:
botdream
Date:
Thu Oct 27 23:11:50 2011 +0000
Commit message:

Changed in this revision

Libs/EthernetNetIf.lib Show annotated file Show diff for this revision Revisions of this file
Libs/HTTPServer.lib Show annotated file Show diff for this revision Revisions of this file
Libs/RPCInterface.lib Show annotated file Show diff for this revision Revisions of this file
Libs/mbed.bld 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
diff -r 000000000000 -r 3abfd4f28df8 Libs/EthernetNetIf.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Libs/EthernetNetIf.lib	Thu Oct 27 23:11:50 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/EthernetNetIf/#bc7df6da7589
diff -r 000000000000 -r 3abfd4f28df8 Libs/HTTPServer.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Libs/HTTPServer.lib	Thu Oct 27 23:11:50 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/HTTPServer/#d753966e4d97
diff -r 000000000000 -r 3abfd4f28df8 Libs/RPCInterface.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Libs/RPCInterface.lib	Thu Oct 27 23:11:50 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/MichaelW/code/RPCInterface/#a9e2c45097c8
diff -r 000000000000 -r 3abfd4f28df8 Libs/mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Libs/mbed.bld	Thu Oct 27 23:11:50 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912
diff -r 000000000000 -r 3abfd4f28df8 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Oct 27 23:11:50 2011 +0000
@@ -0,0 +1,153 @@
+/* //---------------------------------------------------------------------------------------------
+// RPC DemoCmd
+http://192.168.1.100/rpc/democmd/run%201000%20100%201
+http://192.168.1.100/rpc/democmd/run 1000 100 1
+
+//---------------------------------------------------------------------------------------------
+// resources
+//---------------------------------------------------------------------------------------------
+http://mbed.org/handbook/C-Data-Types
+http://mbed.org/cookbook/RPC-Interface-Library
+http://mbed.org/cookbook/HTTP-Server
+http://mbed.org/cookbook/Ethernet
+http://mbed.org/handbook/Ticker
+//--------------------------------------------------------------------------------------------- */
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "HTTPServer.h"
+#include "RPCFunction.h"
+//---------------------------------------------------------------------------------------------
+DigitalOut myled(LED1);
+Serial pc(USBTX, USBRX); // tx, rx
+//---------------------------------------------------------------------------------------------
+#define internaldebug // send debug messages to USB Serial port (9600,1,N)
+//#define dhcpenable    // auto-setup IP Address from DHCP router
+//---------------------------------------------------------------------------------------------
+// Timer Interrupt - NetPool
+//---------------------------------------------------------------------------------------------
+Ticker netpool;
+//---------------------------------------------------------------------------------------------
+// Ethernet Object Setup
+//---------------------------------------------------------------------------------------------
+#ifdef dhcpenable
+  EthernetNetIf eth;  
+#else
+  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
+  );
+#endif
+//---------------------------------------------------------------------------------------------
+// HTTP Server
+//---------------------------------------------------------------------------------------------
+HTTPServer httpserver;
+LocalFileSystem fs("webfs");
+
+//---------------------------------------------------------------------------------------------
+
+//---------------------------------------------------------------------------------------------
+// ISR -> Pool Ethernet - will be triggered by netpool ticker
+//---------------------------------------------------------------------------------------------
+void netpoolupdate()
+{
+    Net::poll();
+}
+//---------------------------------------------------------------------------------------------
+
+//---------------------------------------------------------------------------------------------
+// RPC TList Commands (Task/Job List)
+//---------------------------------------------------------------------------------------------
+void rpc_democmd(char *input, char *output)
+{
+  int iarg1 = 0;
+  int iarg2 = 0;
+  int iarg3 = 0;
+  
+  sscanf(input, "%i %i %i", &iarg1, &iarg2, &iarg3);
+    
+  #ifdef internaldebug
+    printf("Calling RCP Function DemoCmd.\r\n");
+    printf("INPUT: %s.\r\n", input);
+    printf("OUTPUT: %s.\r\n", output);
+    printf("ARG1: %d\r\n", iarg1);
+    printf("ARG2: %d\r\n", iarg2);
+    printf("ARG3: %d\r\n", iarg3);
+  #endif 
+  
+  sprintf(output, "<html><body>RCP Demo Cmd Completed!</body></html>");
+}
+//---------------------------------------------------------------------------------------------
+
+
+//---------------------------------------------------------------------------------------------
+// MAIN
+//---------------------------------------------------------------------------------------------
+int main() 
+{
+  // Set Serial Port Transfer Rate
+  pc.baud(115200);  
+
+  //--------------------------------------------------------
+  // Setting Ethernet
+  //--------------------------------------------------------    
+  #ifdef internaldebug
+    printf("\r\nSetting up Ethernet interface!\r\n");
+  #endif
+  // Create return object for error check
+  EthernetErr ethErr = eth.setup(); 
+  if(ethErr)
+  {
+    #ifdef internaldebug
+      printf("\r\nError %d in Ethernet setup.\r\n", ethErr);
+    #endif
+    return -1;
+  }
+  #ifdef internaldebug
+    printf("\r\nEthernet setup completed with success!\r\n");
+  #endif  
+  //--------------------------------------------------------    
+
+  //--------------------------------------------------------
+  // adding RPC functions
+  //--------------------------------------------------------
+  RPCFunction RPCdemocmd(&rpc_democmd, "democmd");  
+  //--------------------------------------------------------
+
+  //--------------------------------------------------------
+  // adding Handlers 
+  //--------------------------------------------------------  
+  FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
+ 
+  httpserver.addHandler<RPCHandler>("/rpc");
+  httpserver.addHandler<FSHandler>("/"); //Default handler  
+  //--------------------------------------------------------
+  
+  //--------------------------------------------------------
+  // bind http server to port 80 (Listen)
+  //--------------------------------------------------------       
+  httpserver.bind(80);  
+  #ifdef internaldebug
+    printf("Listening on port 80!\r\n");
+  #endif
+  //--------------------------------------------------------         
+    
+  //--------------------------------------------------------
+  // ISR -> attach timer interrupt to update Net::Pool();
+  //--------------------------------------------------------
+  netpool.attach(&netpoolupdate, 0.1);
+  //--------------------------------------------------------
+
+  //--------------------------------------------------------    
+  // main loop
+  //--------------------------------------------------------    
+  while(1) 
+  {    
+    myled = 1;
+    wait(0.5);
+    myled = 0;
+    wait(0.5);     
+  }
+}
+//---------------------------------------------------------------------------------------------
\ No newline at end of file