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

Revision:
0:12ed8bd4909a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/X10Server.cpp	Sat Jun 28 19:45:20 2014 +0000
@@ -0,0 +1,80 @@
+#include "X10Server.h"
+
+
+//#define DEBUG "x10d"
+#ifdef WIN32
+#define LF "\n"
+#else // mbed
+#define LF "\r\n"
+#endif // WIN32
+#include <cstdio>
+#if (defined(DEBUG) && !defined(TARGET_LPC11U24))
+#define DBG(x, ...)  std::printf("[DBG %s %3d] " x LF, DEBUG, __LINE__, ##__VA_ARGS__)
+#define WARN(x, ...) std::printf("[WRN %s %3d] " x LF, DEBUG, __LINE__, ##__VA_ARGS__)
+#define ERR(x, ...)  std::printf("[ERR %s %3d] " x LF, DEBUG, __LINE__, ##__VA_ARGS__)
+#define INFO(x, ...) std::printf("[INF %s %3d] " x LF, DEBUG, __LINE__, ##__VA_ARGS__)
+#else
+#define DBG(x, ...)
+#define WARN(x, ...)
+#define ERR(x, ...)
+#define INFO(x, ...)
+#endif
+
+
+X10Server::X10Server(void(*fptr)(char * buffer, int size), uint16_t port)
+{
+    listenPort = port;
+    serverIsListening = false;
+    clientIsConnected = false;
+    callback = fptr;
+    INFO("Server binding...");
+    svr.set_blocking(false, 10);
+    if (svr.bind(listenPort)< 0) {
+        WARN("tcp server bind failed.");
+    } else {
+        INFO("tcp server bind successed.");
+    }
+    
+    if (svr.listen(1) < 0) {
+        WARN("tcp server listen failed.");
+    } else {
+        INFO("tcp server is listening...");
+        serverIsListening = true;
+    }
+}
+
+void X10Server::poll(void)
+{
+    //listening for a request
+    if (serverIsListening) {
+        //blocking mode(never timeout)
+        if (svr.accept(client)<0) {
+            ;   // WARN("failed to accept connection.");
+        } else {
+            INFO("connection success!IP: %s", client.get_address());
+            clientIsConnected = true;
+
+            while (clientIsConnected) {
+                char buffer[1024] = {};
+                    
+                switch (client.receive(buffer, 1023)) {
+                    case 0:
+                        INFO("received buffer is empty.");
+                        clientIsConnected = false;
+                        break;
+                    case -1:
+                        WARN("failed to read data from client.");
+                        clientIsConnected = false;
+                        break;
+                    default:
+                        INFO("Received Data: %d bytes\r\n%s", strlen(buffer), buffer);
+                        if (callback)
+                            (*callback)(buffer, strlen(buffer));
+                        break;
+                }
+            }
+            INFO("close connection, tcp server is listening...");
+            client.close();
+        }
+    }
+}