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.
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 }
Generated on Mon Jul 25 2022 09:04:25 by 1.7.2