HTTP (RPC) Server mit UI
Dependencies: EthernetInterface mbed-rpc mbed-rtos mbed
Fork of IoTKit_RPC-Server by
HTTP (RPC) Server mit eigener UI Oberfläche.
Board mit dem Ethernet verbinden. Console starten und angezeigte IP-Adresse notieren und in Browser öffnen.
Create Object
Type: DigitalOut Name: led1 arg(optional): PTB22
und Create Button drücken.
Call a function
Command: /led1/write 1
eingeben und Send drücken. Das rote LED auf dem Board geht aus. Mittels /led1/write 0 wird es wieder eingeschaltet.
Für die komplette Dokumentation siehe /users/feb11/code/HTTP-Server/
RPCCommand.cpp
- Committer:
- feb11
- Date:
- 2013-07-17
- Revision:
- 0:9e4bcb10b3e3
File content as of revision 0:9e4bcb10b3e3:
#include "RPCCommand.h" #include "mbed.h" #include "RPCType.h" RPCCommand::RPCCommand(): cmd(), obj_name(NULL), func_name(NULL) { } bool RPCCommand::decode(char *buffer) { if(buffer == NULL) return false; if(buffer[0] != '/') return false; ++buffer; char *tmp = strchr(buffer ,'/'); if(tmp == NULL) return false; if(tmp == buffer) return false; tmp[0] = '\0'; obj_name = buffer; buffer = tmp+1; if(buffer[0] == '\0' || buffer[0] == '?') return false; func_name = buffer; tmp = strchr(buffer, '?'); if(tmp != NULL) { if(tmp[1] == '\0') return false; tmp[0] = '\0'; } cmd[0] = '\0'; strcat(cmd, "/"); strcat(cmd, obj_name); strcat(cmd, "/"); strcat(cmd, func_name); if(tmp == NULL) return true; buffer = tmp+1; do { tmp = strchr(buffer, '&'); if(tmp != NULL) { if(tmp[1] == '\0' || buffer == tmp) return false; tmp[0] = '\0'; } char *sep = strchr(buffer, '='); if(sep == NULL) return false; if(sep == buffer) return false; if(sep[1] == '\0' || sep[1] == '&') return false; strcat(cmd, " "); strcat(cmd, sep+1); if(tmp != NULL) buffer = tmp+1; else buffer = NULL; }while(buffer); return true; } char* RPCCommand::get_cmd() const { return (char*)cmd; } RPC_COMMAND_TYPE RPCCommand::get_type() const { if(!strcmp(func_name, "new") && RPCType::instance().is_supported_type(obj_name)) return CREATE; RPC* r = RPC::lookup(obj_name); if(r == NULL) return INVALID; if(!strcmp(func_name, "delete")) return DELETE; const struct rpc_method *methods = r->get_rpc_methods(); int i = 0; while(methods[i].name != NULL) { if(!strcmp(func_name, methods[i].name)) { return FUNCTION_CALL; } ++i; } return INVALID; } char* RPCCommand::get_obj_name() const { return obj_name; } char* RPCCommand::get_func_name() const { return func_name; }