Example of HTTPServer with additional features: * SNTPClient, DST rules * Link status indication * Local or SDCard-based WebServer * RPC-able class * Static and Dynamic HTML page
myrpc.cpp
- Committer:
- iva2k
- Date:
- 2010-01-12
- Revision:
- 2:360fda42fefd
- Parent:
- 0:886e4b3119ad
File content as of revision 2:360fda42fefd:
// myrpc.cpp
//
// Based on:
// http://mbed.org/projects/cookbook/svn/Servo/trunk/Servo.h
// http://mbed.org/projects/cookbook/svn/Servo/trunk/Servo.cpp
// http://mbed.org/forum/topic/234/
#include "myrpc.h"
#ifdef MBED_RPC
#include "rpc.h"
#endif
#include "SNTPClient.h"
extern int gDebug;
namespace mbed {
myrpc::myrpc(PinName pin, const char *name) : Base(name), _pin(pin) {}
void myrpc::debug(int val) {
gDebug=val;
printf("Debug is %s\r\n", gDebug ? "ON" : "OFF");
}
void myrpc::blink(int n) {
for (int i=0; i<n; i++) {
_pin = 1;
wait(0.2);
_pin = 0;
wait(0.2);
}
}
char *myrpc::echo(const char * in) {
printf("DEBUG myrpc::echo() IN=%s\r\n",in);
sprintf(_buffer, "%s", in);
return _buffer;
}
void myrpc::settime(const char *t) {
time_t seconds = time(NULL);
if (seconds == (unsigned)-1 || seconds == 0) {
seconds = 1256729737; // Set RTC time to Wed, 28 Oct 2009 11:35:37
}
// set_time(seconds);
SNTPSetTime(seconds);
strftime(_buffer, sizeof(_buffer), "%A %m/%d/%Y %H:%M:%S", localtime(&seconds));
printf("settime(%s) seconds=%d datetime=%s\r\n", t, seconds, _buffer);
}
char *myrpc::gettime(const char *fmt="%A %m/%d/%Y %H:%M:%S") {
// time_t seconds = time(NULL);
time_t seconds = SNTPTime();
//printf("Time as seconds since January 1, 1970 = %d\r\n", seconds);
//printf("Time as a basic string = %s\r\n", ctime(&seconds));
if (!fmt || !fmt[0])
fmt = "%A %m/%d/%Y %H:%M:%S";
strftime(_buffer, sizeof(_buffer), fmt, localtime(&seconds));
return _buffer;
}
#ifdef MBED_RPC
const rpc_method *myrpc::get_rpc_methods() {
static const rpc_method rpc_methods[] = {
{ "debug", rpc_method_caller<myrpc, int, &myrpc::debug> },
{ "blink", rpc_method_caller<myrpc, int, &myrpc::blink> },
{ "echo", rpc_method_caller<char *, myrpc, const char *, &myrpc::echo> },
{ "settime", rpc_method_caller<myrpc, const char *, &myrpc::settime> },
{ "gettime", rpc_method_caller<char *, myrpc, const char *, &myrpc::gettime> },
RPC_METHOD_SUPER(Base)
};
return rpc_methods;
}
rpc_class *myrpc::get_rpc_class() {
static const rpc_function funcs[] = {
"new", rpc_function_caller<const char*, PinName, const char*, &Base::construct<myrpc,PinName,const char*> >,
RPC_METHOD_END
};
static rpc_class c = { "myrpc", funcs, NULL };
return &c;
}
#endif
} // namespace mbed