Einfaches mbed RPC Beispiel

Dependencies:   EthernetInterface HttpServer mbed-rtos mbed

Fork of RPCHTTPServerSimple by th.iotkit2.ch

Remote Procedure Call (RPC - „Aufruf einer fernen Prozedur“) ist eine Technik zur Realisierung von Interprozesskommunikation. Sie ermöglicht den Aufruf von Funktionen in anderen Adressräumen. Im Normalfall werden die aufgerufenen Funktionen auf einem anderen Computer als das aufrufende Programm ausgeführt. Es existieren viele Implementierungen dieser Technik, in der Regel sind sie untereinander nicht kompatibel

Die mbed Plattform beinhaltet eine RPC Library, welche ausgesuchte mbed Objekte (DigitalPin, DigitalOut etc.) mittels Serieller Schnittstelle oder via HTTP Aufrufen, zur Verfügung stellt.

Die mbed RCP Klassen verwenden C++ Templates, siehe Zeilen mit <Argument> und den Namespace RPC, siehe Zeilen mit RPC::.

Client

Committer:
yueee_yt
Date:
Thu Feb 20 13:12:46 2014 +0000
Revision:
3:5758cfefe980
Parent:
0:050a5d4ffd55
Child:
4:155c6ff99458
FileSytem and RPC Success

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yueee_yt 0:050a5d4ffd55 1 //#define DNS_SERVER_ADDRESS(ipaddr) (ip4_addr_set_u32(ipaddr, ipaddr_addr("208.67.222.222"))) /* resolver1.opendns.com */
yueee_yt 0:050a5d4ffd55 2 #define __DEBUG
yueee_yt 0:050a5d4ffd55 3 #include "mbed.h"
yueee_yt 0:050a5d4ffd55 4 #include "rtos.h"
yueee_yt 0:050a5d4ffd55 5 #include "EthernetInterface.h"
yueee_yt 0:050a5d4ffd55 6 #include "HTTPServer.h"
yueee_yt 3:5758cfefe980 7 #include "mbed_rpc.h"
yueee_yt 0:050a5d4ffd55 8
yueee_yt 0:050a5d4ffd55 9 EthernetInterface eth;
yueee_yt 3:5758cfefe980 10
yueee_yt 3:5758cfefe980 11 DigitalOut led4(LED4);
yueee_yt 3:5758cfefe980 12
yueee_yt 3:5758cfefe980 13 LocalFileSystem local("local");
yueee_yt 0:050a5d4ffd55 14
yueee_yt 0:050a5d4ffd55 15 void aliveState(void const *args) {
yueee_yt 0:050a5d4ffd55 16 while (true) {
yueee_yt 3:5758cfefe980 17 led4 = !led4;
yueee_yt 0:050a5d4ffd55 18 Thread::wait(1000);
yueee_yt 0:050a5d4ffd55 19 }
yueee_yt 0:050a5d4ffd55 20 }
yueee_yt 0:050a5d4ffd55 21
yueee_yt 0:050a5d4ffd55 22 int main()
yueee_yt 0:050a5d4ffd55 23 {
yueee_yt 0:050a5d4ffd55 24 printf("********* PROGRAM START ***********\r\n");
yueee_yt 0:050a5d4ffd55 25 Thread thread(aliveState);
yueee_yt 3:5758cfefe980 26 RPC::add_rpc_class<RpcDigitalOut>();
yueee_yt 3:5758cfefe980 27 RPC::construct<RpcDigitalOut, PinName, const char*>(LED1, "led1"); // mbed LED
yueee_yt 3:5758cfefe980 28 RPC::construct<RpcDigitalOut, PinName, const char*>(LED2, "led2");
yueee_yt 3:5758cfefe980 29 RPC::construct<RpcDigitalOut, PinName, const char*>(LED3, "led3");
yueee_yt 3:5758cfefe980 30
yueee_yt 0:050a5d4ffd55 31 printf("EthernetInterface Setting up...\r\n");
yueee_yt 0:050a5d4ffd55 32 if(eth.init()!=0) { //for DHCP Server
yueee_yt 0:050a5d4ffd55 33 //if(eth.init(IPAddress,NetMasks,Gateway)!=0) { //for Static IP Address
yueee_yt 0:050a5d4ffd55 34 printf("EthernetInterface Initialize Error \r\n");
yueee_yt 0:050a5d4ffd55 35 return -1;
yueee_yt 0:050a5d4ffd55 36 }
yueee_yt 0:050a5d4ffd55 37 if(eth.connect()!=0) {
yueee_yt 0:050a5d4ffd55 38 printf("EthernetInterface Connect Error \r\n");
yueee_yt 0:050a5d4ffd55 39 return -1;
yueee_yt 0:050a5d4ffd55 40 }
yueee_yt 0:050a5d4ffd55 41 printf("IP Address is %s\r\n", eth.getIPAddress());
yueee_yt 0:050a5d4ffd55 42 printf("NetMask is %s\r\n", eth.getNetworkMask());
yueee_yt 0:050a5d4ffd55 43 printf("Gateway Address is %s\r\n", eth.getGateway());
yueee_yt 0:050a5d4ffd55 44 printf("Ethernet Setup OK\r\n");
yueee_yt 0:050a5d4ffd55 45
yueee_yt 3:5758cfefe980 46 HTTPServerAddHandler<SimpleHandler>("/hello"); //Default handler
yueee_yt 3:5758cfefe980 47 FSHandler::mount("/local", "/");
yueee_yt 3:5758cfefe980 48 HTTPServerAddHandler<FSHandler>("/");
yueee_yt 3:5758cfefe980 49 HTTPServerAddHandler<RPCHandler>("/rpc");
yueee_yt 3:5758cfefe980 50
yueee_yt 0:050a5d4ffd55 51 HTTPServerStart(80);
yueee_yt 0:050a5d4ffd55 52 }
yueee_yt 0:050a5d4ffd55 53