This library contains a simple device driver for the X10 CM17a module. It also contains a simple X10Server, which listens for network commands to be forwarded to the module.

Dependents:   X10Svr

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers X10Server.cpp Source File

X10Server.cpp

00001 #include "X10Server.h"
00002 
00003 
00004 //#define DEBUG "x10d"
00005 #ifdef WIN32
00006 #define LF "\n"
00007 #else // mbed
00008 #define LF "\r\n"
00009 #endif // WIN32
00010 #include <cstdio>
00011 #if (defined(DEBUG) && !defined(TARGET_LPC11U24))
00012 #define DBG(x, ...)  std::printf("[DBG %s %3d] " x LF, DEBUG, __LINE__, ##__VA_ARGS__)
00013 #define WARN(x, ...) std::printf("[WRN %s %3d] " x LF, DEBUG, __LINE__, ##__VA_ARGS__)
00014 #define ERR(x, ...)  std::printf("[ERR %s %3d] " x LF, DEBUG, __LINE__, ##__VA_ARGS__)
00015 #define INFO(x, ...) std::printf("[INF %s %3d] " x LF, DEBUG, __LINE__, ##__VA_ARGS__)
00016 #else
00017 #define DBG(x, ...)
00018 #define WARN(x, ...)
00019 #define ERR(x, ...)
00020 #define INFO(x, ...)
00021 #endif
00022 
00023 
00024 X10Server::X10Server(void(*fptr)(char * buffer, int size), uint16_t port)
00025 {
00026     listenPort = port;
00027     serverIsListening = false;
00028     clientIsConnected = false;
00029     callback = fptr;
00030     INFO("Server binding...");
00031     svr.set_blocking(false, 10);
00032     if (svr.bind(listenPort)< 0) {
00033         WARN("tcp server bind failed.");
00034     } else {
00035         INFO("tcp server bind successed.");
00036     }
00037     
00038     if (svr.listen(1) < 0) {
00039         WARN("tcp server listen failed.");
00040     } else {
00041         INFO("tcp server is listening...");
00042         serverIsListening = true;
00043     }
00044 }
00045 
00046 void X10Server::poll(void)
00047 {
00048     //listening for a request
00049     if (serverIsListening) {
00050         //blocking mode(never timeout)
00051         if (svr.accept(client)<0) {
00052             ;   // WARN("failed to accept connection.");
00053         } else {
00054             INFO("connection success!IP: %s", client.get_address());
00055             clientIsConnected = true;
00056 
00057             while (clientIsConnected) {
00058                 char buffer[1024] = {};
00059                     
00060                 switch (client.receive(buffer, 1023)) {
00061                     case 0:
00062                         INFO("received buffer is empty.");
00063                         clientIsConnected = false;
00064                         break;
00065                     case -1:
00066                         WARN("failed to read data from client.");
00067                         clientIsConnected = false;
00068                         break;
00069                     default:
00070                         INFO("Received Data: %d bytes\r\n%s", strlen(buffer), buffer);
00071                         if (callback)
00072                             (*callback)(buffer, strlen(buffer));
00073                         break;
00074                 }
00075             }
00076             INFO("close connection, tcp server is listening...");
00077             client.close();
00078         }
00079     }
00080 }