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

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers myrpc.cpp Source File

myrpc.cpp

00001 // myrpc.cpp
00002 //
00003 // Based on:
00004 // http://mbed.org/projects/cookbook/svn/Servo/trunk/Servo.h
00005 // http://mbed.org/projects/cookbook/svn/Servo/trunk/Servo.cpp
00006 // http://mbed.org/forum/topic/234/
00007 
00008 #include "myrpc.h"
00009 #ifdef MBED_RPC
00010 #include "rpc.h"
00011 #endif
00012 
00013 #include "SNTPClient.h"
00014 
00015 extern int gDebug;
00016 
00017 namespace mbed {
00018 
00019 myrpc::myrpc(PinName pin, const char *name) : Base(name), _pin(pin) {}
00020 
00021 void myrpc::debug(int val) {
00022   gDebug=val; 
00023   printf("Debug is %s\r\n", gDebug ? "ON" : "OFF");
00024 }
00025 
00026 void myrpc::blink(int n) {
00027   for (int i=0; i<n; i++) {
00028     _pin = 1;
00029     wait(0.2);
00030     _pin = 0;
00031     wait(0.2);
00032   }
00033 }
00034 
00035 char *myrpc::echo(const char * in) {
00036 printf("DEBUG myrpc::echo() IN=%s\r\n",in);
00037     sprintf(_buffer, "%s", in);
00038     return _buffer;
00039 }
00040 
00041 void myrpc::settime(const char *t) {
00042   time_t seconds = time(NULL);
00043   if (seconds == (unsigned)-1 || seconds == 0) {
00044     seconds = 1256729737;     // Set RTC time to Wed, 28 Oct 2009 11:35:37
00045   }
00046 //  set_time(seconds);
00047   SNTPSetTime(seconds);
00048   strftime(_buffer, sizeof(_buffer), "%A %m/%d/%Y %H:%M:%S", localtime(&seconds));
00049   printf("settime(%s) seconds=%d datetime=%s\r\n", t, seconds, _buffer);
00050 }
00051 char *myrpc::gettime(const char *fmt="%A %m/%d/%Y %H:%M:%S") {
00052 //  time_t seconds = time(NULL);
00053   time_t seconds = SNTPTime();
00054 //printf("Time as seconds since January 1, 1970 = %d\r\n", seconds);
00055 //printf("Time as a basic string = %s\r\n", ctime(&seconds));
00056   if (!fmt || !fmt[0])
00057     fmt = "%A %m/%d/%Y %H:%M:%S";
00058   strftime(_buffer, sizeof(_buffer), fmt, localtime(&seconds));
00059   return _buffer;
00060 }
00061 
00062 #ifdef MBED_RPC
00063 const rpc_method *myrpc::get_rpc_methods() {
00064   static const rpc_method rpc_methods[] = {
00065     { "debug", rpc_method_caller<myrpc, int, &myrpc::debug> },
00066     { "blink", rpc_method_caller<myrpc, int, &myrpc::blink> },
00067     { "echo", rpc_method_caller<char *, myrpc, const char *, &myrpc::echo> },
00068     { "settime", rpc_method_caller<myrpc, const char *, &myrpc::settime> },
00069     { "gettime", rpc_method_caller<char *, myrpc, const char *, &myrpc::gettime> },
00070     RPC_METHOD_SUPER(Base)
00071   };
00072   return rpc_methods;
00073 }       
00074 rpc_class *myrpc::get_rpc_class() {
00075     static const rpc_function funcs[] = {
00076         "new", rpc_function_caller<const char*, PinName, const char*, &Base::construct<myrpc,PinName,const char*> >,
00077         RPC_METHOD_END
00078     };
00079     static rpc_class c = { "myrpc", funcs, NULL };
00080     return &c;
00081 }
00082 #endif
00083 
00084 }    // namespace mbed