thermferm/slcd.c

changeset 422
13502d0dda65
parent 420
644a6106d712
child 423
02653162b03b
--- a/thermferm/slcd.c	Sat Nov 14 17:00:37 2015 +0100
+++ b/thermferm/slcd.c	Sat Nov 14 23:40:51 2015 +0100
@@ -46,12 +46,16 @@
 
 struct sockaddr_in	sendaddr;	/* Server send socket		*/
 int			sock = -1;
+uint16_t		keys = 0x0000;
 
 extern int		debug;
 
 
 void putLCDsocket(int fd, uint16_t data)
 {
+    socklen_t	slen;
+    uint16_t	rdat;
+
     if (sock == -1)
 	return;
 
@@ -61,12 +65,31 @@
 	    syslog(LOG_NOTICE, "Can't shutdown socket: %s", strerror(errno));
 	}
 	sock = -1;
-//    } else {
+    } else {
+	if (recvfrom(sock, &rdat, sizeof(uint16_t), 0, (struct sockaddr *) &sendaddr, &slen) != sizeof(uint16_t)) {
+	    syslog(LOG_NOTICE, "Socket recvfrom failed, closing socket: %s", strerror(errno));
+	} else {
+	    if ((rdat & SLCD_MKEYS) == SLCD_KEYS) {
+		if (((rdat & 0x00ff) != keys) && debug)
+		    fprintf(stdout, "received keys %04x was %04x\n", rdat & 0x00ff, keys);
+		keys = rdat & 0x00ff;
+	    } else {
+	        if (debug)
+		    fprintf(stdout, "received %04x\n", rdat);
+	    }
+
+	}
     }
 }
 
 
 
+void slcdDummy(int fd)
+{
+    putLCDsocket(fd, SLCD_NULL);
+}
+
+
 //void slcdHome(int fd)
 //{
 //}

mercurial