diff --git a/groundStation/src/backend/backend.c b/groundStation/src/backend/backend.c index f4fcee7b039c73670146b11e78e427049010257b..1088a84cb0b96da0c343b742026c63223c3ec47d 100644 --- a/groundStation/src/backend/backend.c +++ b/groundStation/src/backend/backend.c @@ -152,6 +152,8 @@ int main(int argc, char **argv) err(-1, "socket"); } + printf("backendSocket = %d\n", backendSocket); + /* Create sockaddr and bind */ struct sockaddr_un sa; sa.sun_family = AF_UNIX; @@ -190,6 +192,8 @@ int main(int argc, char **argv) exit(1); } + printf("zyboSocket = %d\n", zyboSocket); + if (pthread_mutex_unlock(&quadSocketMutex)) { err(-2, "pthrtead_mutex_unlock (%s:%d):", __FILE__, __LINE__); } @@ -218,10 +222,13 @@ int main(int argc, char **argv) sendStartPacket(); if(!getenv(NOVRPN_ENV)){ + printf("Creating VRPN tracker...\n"); // create vrpnTracker instance tracker = ucart_vrpn_tracker_createInstance(TRACKER_IP); // this function will be called whenever tracker receives data ucart_vrpn_tracker_addCallback(tracker, cb); + } else { + printf("Ignoring VRPN information...\n"); } struct timeval timeout = { @@ -556,6 +563,7 @@ static int clientAddPendResponses(int fd, uint16_t packet_id) { static int clientRemovePendResponses(int fd, uint16_t packet_id) { int *pendingResponses = get_client_pend_responses(fd); for(int i = 0; i < CLIENT_MAX_PENDING_RESPONSES; i++) { + printf("might remove pendingResponses[%d], if it equals %d\n", i, packet_id); if(pendingResponses[i] == packet_id) { pendingResponses[i] = -1; return i; @@ -729,12 +737,13 @@ static void client_recv(int fd) { } /* Only add the client to the pending responses if it was a getparam command */ - if (m.msg_type == GETPARAM_ID || m.msg_type == GETOUTPUT_ID || - m.msg_type == GETSOURCE_ID || m.msg_type == GETNODES_ID || m.msg_type == ADDNODE_ID) { - if (clientAddPendResponses(fd, BytesTo16(packet[ID_L], packet[ID_H])) == -1) { - warnx("Ran out of room! Consider increasing CLIENT_MAX_PENDING_RESPONSES!\n"); - } - } + // if (m.msg_type == GETPARAM_ID || m.msg_type == GETOUTPUT_ID || + // m.msg_type == GETSOURCE_ID || m.msg_type == GETNODES_ID || m.msg_type == ADDNODE_ID) { + // printf("adding fd %d with id %d\n", fd, BytesTo16(packet[ID_L], packet[ID_H])); + // if (clientAddPendResponses(fd, BytesTo16(packet[ID_L], packet[ID_H])) == -1) { + // warnx("Ran out of room! Consider increasing CLIENT_MAX_PENDING_RESPONSES!\n"); + // } + // } printf("packetToQuad = '"); for(int i = 0; i < (int)psize; ++i) { @@ -742,7 +751,8 @@ static void client_recv(int fd) { } printf("'\n"); - writeQuad(packet, psize); + int retval = writeQuad(packet, psize); + printf("sent %d bytes\n", retval); free(data); } @@ -771,13 +781,13 @@ static void quad_recv() { return; } respBufLen += respLen; -/* + printf("packetFromQuad = '"); for(int i = 0; i < (int)respBufLen; ++i) { printf(" %.2x ", respBuf[i]); } printf("'\n"); -*/ + while(respBufLen){ datalen = DecodePacket(&m, data, CMD_MAX_LENGTH, respBuf, respBufLen); if (datalen == -1) { @@ -880,12 +890,12 @@ static void handleResponse(struct metadata *m, uint8_t * data) return; } - for(int fd = 0; fd <= max_fd; ++fd) { - if (get_client_index(fd) < 0) { - clientRemovePendResponses(fd, m->msg_id); - write(fd, buffer, result); - } - } + // for(int fd = 0; fd <= max_fd; ++fd) { + // if (get_client_index(fd) < 0) { + // clientRemovePendResponses(fd, m->msg_id); + // write(fd, buffer, result); + // } + // } free(buffer); } diff --git a/quad/src/virt_quad/hw_impl_unix_uart.c b/quad/src/virt_quad/hw_impl_unix_uart.c index 9d2d4df15633e01fda1484e184bd2fa99145db21..c4f024ff282e6038f4ef63bd88a615fc14e9673f 100644 --- a/quad/src/virt_quad/hw_impl_unix_uart.c +++ b/quad/src/virt_quad/hw_impl_unix_uart.c @@ -3,6 +3,7 @@ #include <sys/socket.h> #include <stdio.h> #include <sys/un.h> +#include <sys/ioctl.h> #include <err.h> #include <netinet/in.h> @@ -10,18 +11,17 @@ #define SOCKET_ENV "VIRT_QUAD_SOCKET" static int backendSocket; -static int sendSocket; +static int client; int unix_uart_reset(struct UARTDriver *self) { - - char * backend_socket_path = DEFAULT_SOCKET; if (getenv(SOCKET_ENV)) { - backend_socket_path = getenv(SOCKET_ENV); + backend_socket_path = getenv(SOCKET_ENV); } + /* Unlink if it exists */ unlink(backend_socket_path); - printf("using socket at '%s'\n", backend_socket_path); + printf("using socket '%s'\n", backend_socket_path); /* Create socket */ backendSocket = socket(AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, 0); @@ -30,8 +30,8 @@ int unix_uart_reset(struct UARTDriver *self) { /* Create sockaddr and bind */ struct sockaddr_un sa; sa.sun_family = AF_UNIX; - strncpy(sa.sun_path, backend_socket_path, 107); - sa.sun_path[107] = '\0'; + strncpy(sa.sun_path, backend_socket_path, strlen(backend_socket_path)); + sa.sun_path[strlen(backend_socket_path)+1] = '\0'; if (bind(backendSocket, (struct sockaddr *) &sa, sizeof(sa))) { err(-1, "bind"); } @@ -42,22 +42,29 @@ int unix_uart_reset(struct UARTDriver *self) { } while (1) { - sendSocket = accept(backendSocket, NULL, NULL); - if (sendSocket > 0) + client = accept(backendSocket, NULL, NULL); + if (client > 0) break; } - - printf(" accpet() returned with %d\n", sendSocket); + printf(" accpet() returned with %d\n", client); return 0; } int unix_uart_write(struct UARTDriver *self, unsigned char c) { - printf("sending %c\n", c); - return send(sendSocket, &c, 1, 0); + return send(client, &c, 1, MSG_DONTWAIT); + // return write(client, &c, 1); } int unix_uart_read(struct UARTDriver *self, unsigned char *c) { - int bytes = read(sendSocket, c, 1); - // printf("read in %d byte [%x], msg=%d\n", bytes, *c, self->msg); - return bytes; -} + int bytes_available; + ioctl(client,FIONREAD,&bytes_available); + + if (bytes_available > 0) { + int bytes = recv(client, c, 1, 0); + printf("read in %d byte [%x]\n", bytes, *c); + return bytes; + } else { + return 0; + } + +} \ No newline at end of file