diff --git a/groundStation/src/backend/backend.c b/groundStation/src/backend/backend.c index a3dbaacc095f7fec80d9f5c7beb006848567ee34..572f8f3ab8aadf8f1f38059b76c8e4a7edd9981a 100644 --- a/groundStation/src/backend/backend.c +++ b/groundStation/src/backend/backend.c @@ -75,6 +75,9 @@ static void client_recv(int fd); static void quad_recv(); /* Checks to see if socket has disconnected. Returns 1 on disconnect, else returns 0 */ static int wasDisconnected(int fd); +/* handle controller responses from quad to frontend */ +static void handleRespcontrol(struct metadata *m, uint8_t * data); + /* Thread-safe wrappers */ pthread_mutex_t quadSocketMutex; @@ -94,7 +97,6 @@ const char *TRACKER_IP = "UAV@192.168.0.120:3883"; static int zyboSocket; static int backendSocket; struct ucart_vrpn_tracker * tracker = NULL; -const char *logHeader = "";//"#\n#\tDefault log header\n#\tEverything after '#'`s will be printed as is in the processed logs.\n#\n\0"; #define MAX_CLIENTS 32 #define CLIENT_BUFFER_SIZE 1024 @@ -105,6 +107,8 @@ static int client_pending_responses[MAX_CLIENTS][CLIENT_MAX_PENDING_RESPONSES]; fd_set rfds_master; int max_fd = 0; +static FILE * quadlog_file; + pthread_mutex_t quadResponseMutex, cliInputMutex ; unsigned char *commandBuf; int newQuadResponse = 0, newCliInput = 0; @@ -128,6 +132,7 @@ int main(int argc, char **argv) { int activity; FD_ZERO(&rfds_master); + char log_file[256] = "logs/"; /* * Create backend listening socket @@ -195,8 +200,36 @@ int main(int argc, char **argv) if (!getenv(NOQUAD_ENV)) { // watch for input from the zybo socket safe_fd_set(zyboSocket, &rfds_master, &max_fd); + } + if(argc >= 2) + { + strncat(log_file, argv[1], strlen(argv[1])); + } else { + time_t rawtime; + char timestr [30]; + time(&rawtime); + sprintf(timestr,"%s",ctime(&rawtime)); + // Lets convert space to _ in + char *p = timestr; + size_t i = 0; + while(i < strlen(timestr)) + { + if (*p == ' ') + *p = '_'; + i++; + p++; + } + // timestr has a weird char at the end of it. + // we will not include it in our file name + strncat(log_file, timestr, strlen(timestr) -1 ); + strcat(log_file, ".txt"); } + + printf("Creating log file '%s'...\n",log_file); + quadlog_file = fopen(log_file, "a"); + + // Tell the quad we are ready to send it vrpn data sendStartPacket(); @@ -258,6 +291,7 @@ int main(int argc, char **argv) ucart_vrpn_tracker_freeInstance(tracker); safe_close_fd(zyboSocket, &quadSocketMutex); + fclose(quadlog_file); return 0; } @@ -633,7 +667,7 @@ static void quad_recv() { struct metadata m; uint8_t data[1024]; size_t respLen; - size_t datalen; + ssize_t datalen; size_t packetlen; respLen = readQuad((char *) respBuf + respBufLen, @@ -654,19 +688,6 @@ static void quad_recv() { memmove(respBuf, respBuf + packetlen, respBufLen - packetlen); respBufLen -= packetlen; -/* - DEBUG_ID, // 00 - PACKETLOG_ID, // 01 - GETPACKETLOGS_ID, // 02 - UPDATE_ID, // 03 - BEGINUPDATE_ID, // 04 - LOG_ID, // 05 - RESPONSE_ID, // 06 - SETCONTROL_ID, // 07 - Setting controller values. Example: PID constants - GETCONTROL_ID, // 08 - Getting controller values. Example: PID constants - RESPCONTROL_ID, // 09 - Responding with controller values. Example: PID constants - MAX_TYPE_ID -*/ switch (m.msg_type) { case DEBUG_ID : case PACKETLOG_ID : @@ -677,7 +698,7 @@ static void quad_recv() { break; case LOG_ID: /* something like this */ - log_write((char *) data, m.data_len); + fwrite((char *) data, sizeof(char), m.data_len, quadlog_file); break; case RESPONSE_ID: case SETCONTROL_ID: @@ -696,13 +717,13 @@ static void handleRespcontrol(struct metadata *m, uint8_t * data) { struct controller_message cm; if (DecodeRespcontrol(&cm, m, data) < 0) { - warnx("DecodeRespcontrol error") + warnx("DecodeRespcontrol error"); return; } char buffer[128]; - char * message = cmToString(RESPCONTROL_ID, &cm); + const char * message = cmToString(RESPCONTROL_ID, &cm); size_t len = snprintf(buffer, 128, "%s %f\n", message, cm.value); diff --git a/groundStation/src/backend/cmHandler.c b/groundStation/src/backend/cmHandler.c index b69f2f8769c0dd2f9aa90193dbf3ea0e1a381dce..2b486a6a82323ba47f9584bb8423e40a57c6638f 100644 --- a/groundStation/src/backend/cmHandler.c +++ b/groundStation/src/backend/cmHandler.c @@ -70,7 +70,7 @@ const char * respContStrings[MAX_COMMANDS] { "getheightp", "getheighti", "getheightd", - "getheight", + "getheight" } const char * cmToString(int msgType, const struct controller_message *cm) diff --git a/groundStation/src/backend/packet.h b/groundStation/src/backend/packet.h index 83bc5936b98f17085f1483c993b79b3e5399b911..54532e4786d3aee157e92eba56a23d3067de32ac 100644 --- a/groundStation/src/backend/packet.h +++ b/groundStation/src/backend/packet.h @@ -33,4 +33,7 @@ ssize_t DecodePacket( /* Compute a checksum. Requires a packet and the entire packet length */ uint8_t PacketChecksum(const uint8_t * packet, size_t); +/* Compute the size of the entire packet */ +size_t PacketSize(const struct metadata *m); + #endif