diff -r 0258107a9e72 -r 13502d0dda65 brewpanel/sockio.c --- 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) {