X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb/blobdiff_plain/03ca736e9401a06e131df45c763715fbe8f9c2df..b55c340d3dbf7b6071d64260a3dc5287c940b984:/hmland.c diff --git a/hmland.c b/hmland.c index eaf8521..aa5f277 100644 --- a/hmland.c +++ b/hmland.c @@ -324,9 +324,10 @@ static int hmlan_parse_in(int fd, void *data) return 1; } -static int comm(int fd_in, int fd_out, int master_socket) +static int comm(int fd_in, int fd_out, int master_socket, int flags) { struct hmcfgusb_dev *dev; + uint8_t out[0x40]; //FIXME!!! int quit = 0; hmcfgusb_set_debug(debug); @@ -351,12 +352,15 @@ static int comm(int fd_in, int fd_out, int master_socket) } } - hmcfgusb_send(dev, (unsigned char*)"K", 1, 1); + memset(out, 0, sizeof(out)); + out[0] = 'K'; + hmcfgusb_send_null_frame(dev); + hmcfgusb_send(dev, out, sizeof(out), 1); while(!quit) { int fd; - fd = hmcfgusb_poll(dev, 3600); + fd = hmcfgusb_poll(dev, 1); /* Wakeup device/bus at least once a second */ if (fd >= 0) { if (fd == master_socket) { int client; @@ -375,6 +379,9 @@ static int comm(int fd_in, int fd_out, int master_socket) if (errno) { perror("hmcfgusb_poll"); quit = 1; + } else { + /* periodically wakeup the device */ + hmcfgusb_send_null_frame(dev); } } } @@ -535,7 +542,7 @@ static int socket_server(char *iface, int port, int flags) (client_addr & 0x000000ff)); } - comm(client, client, sock); + comm(client, client, sock, flags); shutdown(client, SHUT_RDWR); close(client); @@ -547,15 +554,15 @@ static int socket_server(char *iface, int port, int flags) (client_addr & 0x0000ff00) >> 8, (client_addr & 0x000000ff)); } - + sleep(1); } return EXIT_SUCCESS; } -static int interactive_server(void) +static int interactive_server(int flags) { - if (!comm(STDIN_FILENO, STDOUT_FILENO, -1)) + if (!comm(STDIN_FILENO, STDOUT_FILENO, -1, flags)) return EXIT_FAILURE; return EXIT_SUCCESS; @@ -585,7 +592,7 @@ int main(int argc, char **argv) char *ep; int opt; - while((opt = getopt(argc, argv, "DdhiPp:l:v")) != -1) { + while((opt = getopt(argc, argv, "DdhiPp:Rl:v")) != -1) { switch (opt) { case 'D': debug = 1; @@ -607,6 +614,9 @@ int main(int argc, char **argv) exit(EXIT_FAILURE); } break; + case 'R': + fprintf(stderr, "-R is no longer needed (1s wakeup is default)\n"); + break; case 'l': iface = optarg; break; @@ -624,7 +634,7 @@ int main(int argc, char **argv) } if (interactive) { - return interactive_server(); + return interactive_server(flags); } else { return socket_server(iface, port, flags); }