brewpanel/sockio.c

changeset 422
13502d0dda65
parent 420
644a6106d712
child 425
c51265b518ce
--- a/brewpanel/sockio.c	Sat Nov 14 17:00:37 2015 +0100
+++ b/brewpanel/sockio.c	Sat Nov 14 23:40:51 2015 +0100
@@ -43,9 +43,9 @@
 #define SLCD_MDEV       0xe000
 
 
-int			sock = -1;	/* Unix datagram socket		*/
-struct sockaddr_in	servaddr;	/* Server socket address	*/
-
+int			sock = -1;		/* Unix datagram socket		*/
+struct sockaddr_in	servaddr;		/* Server socket address	*/
+uint16_t		keys = SLCD_KEYS;	/* Pressed keys bits		*/
 
 
 void socket_recv(void)
@@ -54,14 +54,14 @@
     struct sockaddr_in	clntaddr;
     socklen_t		clntlen = sizeof(clntaddr);
     ssize_t		recv_len;
-    int			fd, my_error;
+    int			fd = 0, my_error;
 
     recv_len = recvfrom(sock, &data, sizeof(uint16_t), MSG_DONTWAIT, (struct sockaddr *)&clntaddr, &clntlen);
     if (recv_len == sizeof(uint16_t)) {
 	/*
 	 * Get device from data
 	 */
-	fd = data & SLCD_MDEV >> 13;
+	fd = (data & SLCD_MDEV) >> 13;
 	if (fd)
 	    fprintf(stdout, "Device %d ", fd);
 	if ((data & SLCD_MCLEAR) == SLCD_CLEAR) {
@@ -73,9 +73,16 @@
 	    slcdPosition(fd, data & 0x001f, (data & 0x0060) >> 5);
 	} else if ((data & 0xfe00) == SLCD_DATA) {
 	    slcdPutchar(fd, data & 0x00ff);
-	} else {
+	} else if (data != 0x0000) {
 	    fprintf(stdout, "socket_recv got %04x\n", data);
 	}
+
+	/*
+	 * Reply with the current keys state
+	 */
+	if (sendto(sock, &keys, sizeof(uint16_t), MSG_DONTWAIT, (struct sockaddr *) &clntaddr, clntlen) == -1) {
+	    fprintf(stdout, "sendto error: %s\n", strerror(errno));
+	}
     } else if (recv_len < 0) {
 	my_error = errno;
 	if (my_error != EAGAIN) {

mercurial