Nelson Neves / GSL_07-HttpServer-RPC-Vars

Dependencies:   EthernetNetIf mbed HTTPServer

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /* //---------------------------------------------------------------------------------------------
00002 // Request to set internal Global var "flag_blink"
00003 http://192.168.1.100/rpc/blink/write%200
00004 http://192.168.1.100/rpc/blink/write%201
00005 
00006 http://192.168.1.100/rpc/blink/write 0
00007 http://192.168.1.100/rpc/blink/write 1
00008 
00009 //---------------------------------------------------------------------------------------------
00010 // resources
00011 //---------------------------------------------------------------------------------------------
00012 http://mbed.org/handbook/C-Data-Types
00013 http://mbed.org/cookbook/RPC-Interface-Library
00014 http://mbed.org/cookbook/HTTP-Server
00015 http://mbed.org/cookbook/Ethernet
00016 http://mbed.org/handbook/Ticker
00017 //--------------------------------------------------------------------------------------------- */
00018 #include "mbed.h"
00019 #include "EthernetNetIf.h"
00020 #include "HTTPServer.h"
00021 #include "RPCVariable.h"
00022 //---------------------------------------------------------------------------------------------
00023 DigitalOut myled(LED1);
00024 Serial pc(USBTX, USBRX); // tx, rx
00025 //---------------------------------------------------------------------------------------------
00026 #define internaldebug // send debug messages to USB Serial port (9600,1,N)
00027 //#define dhcpenable    // auto-setup IP Address from DHCP router
00028 //---------------------------------------------------------------------------------------------
00029 // Timer Interrupt - NetPool
00030 //---------------------------------------------------------------------------------------------
00031 Ticker netpool;
00032 //---------------------------------------------------------------------------------------------
00033 // Ethernet Object Setup
00034 //---------------------------------------------------------------------------------------------
00035 #ifdef dhcpenable
00036   EthernetNetIf eth;  
00037 #else
00038   EthernetNetIf eth(
00039     IpAddr(192,168,1,100), //IP Address
00040     IpAddr(255,255,255,0), //Network Mask
00041     IpAddr(192,168,1,254), //Gateway
00042     IpAddr(192,168,1,254)  //DNS
00043   );
00044 #endif
00045 //---------------------------------------------------------------------------------------------
00046 // HTTP Server
00047 //---------------------------------------------------------------------------------------------
00048 HTTPServer httpserver;
00049 LocalFileSystem fs("webfs");
00050 
00051 uint8_t flag_blink;
00052 //---------------------------------------------------------------------------------------------
00053 
00054 //---------------------------------------------------------------------------------------------
00055 // ISR -> Pool Ethernet - will be triggered by netpool ticker
00056 //---------------------------------------------------------------------------------------------
00057 void netpoolupdate()
00058 {
00059     Net::poll();
00060 }
00061 //---------------------------------------------------------------------------------------------
00062 
00063 //---------------------------------------------------------------------------------------------
00064 // MAIN
00065 //---------------------------------------------------------------------------------------------
00066 int main() 
00067 {
00068   // Set Serial Port Transfer Rate
00069   pc.baud(115200);  
00070 
00071   //--------------------------------------------------------
00072   // Setting Ethernet
00073   //--------------------------------------------------------    
00074   #ifdef internaldebug
00075     printf("\r\nSetting up Ethernet interface!\r\n");
00076   #endif
00077   // Create return object for error check
00078   EthernetErr ethErr = eth.setup(); 
00079   if(ethErr)
00080   {
00081     #ifdef internaldebug
00082       printf("\r\nError %d in Ethernet setup.\r\n", ethErr);
00083     #endif
00084     return -1;
00085   }
00086   #ifdef internaldebug
00087     printf("\r\nEthernet setup completed with success!\r\n");
00088   #endif  
00089   //--------------------------------------------------------    
00090 
00091   //--------------------------------------------------------
00092   // adding RPC variables 
00093   //--------------------------------------------------------
00094   flag_blink = false;
00095   RPCVariable<uint8_t> RPCblink(&flag_blink, "blink");
00096   //--------------------------------------------------------
00097 
00098   //--------------------------------------------------------
00099   // adding Handlers 
00100   //--------------------------------------------------------  
00101   FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
00102  
00103   httpserver.addHandler<RPCHandler>("/rpc");
00104   httpserver.addHandler<FSHandler>("/"); //Default handler  
00105   //--------------------------------------------------------
00106   
00107   //--------------------------------------------------------
00108   // bind http server to port 80 (Listen)
00109   //--------------------------------------------------------       
00110   httpserver.bind(80);  
00111   #ifdef internaldebug
00112     printf("Listening on port 80!\r\n");
00113   #endif
00114   //--------------------------------------------------------         
00115     
00116   //--------------------------------------------------------
00117   // ISR -> attach timer interrupt to update Net::Pool();
00118   //--------------------------------------------------------
00119   netpool.attach(&netpoolupdate, 0.1);
00120   //--------------------------------------------------------
00121 
00122   //--------------------------------------------------------    
00123   // main loop
00124   //--------------------------------------------------------    
00125   // main loop
00126   while(1) 
00127   {
00128     if(flag_blink)
00129     {
00130       myled = 1;
00131       wait(0.5);
00132       myled = 0;
00133      }
00134      wait(0.5);     
00135   }
00136 }
00137 //---------------------------------------------------------------------------------------------