From 1989f492e08b9fcaf3926953377c2827f735e7fe Mon Sep 17 00:00:00 2001 From: Jake Drahos <j@kedrahos.com> Date: Fri, 2 Dec 2016 16:47:54 -0600 Subject: [PATCH] Reworked commands.c to support all PID constants --- groundStation/src/backend/commands.c | 224 ++++++++++++++++++---- groundStation/src/backend/communication.c | 12 +- 2 files changed, 197 insertions(+), 39 deletions(-) diff --git a/groundStation/src/backend/commands.c b/groundStation/src/backend/commands.c index d1efa7e38..a97197b81 100644 --- a/groundStation/src/backend/commands.c +++ b/groundStation/src/backend/commands.c @@ -44,29 +44,29 @@ struct MessageType MessageTypes[MAX_TYPE] = // Message Type ID 0x01, - // Calibration Subtypes + // Calibration Subtypes (PID coefficients) { - // yaw setpoint subtype + // yaw p constant subtype { // ID 0x00, // Command text - "setyaw", + "setyawp", // Type of the command data floatType, // Function pointer - &setyaw + NULL }, - // yaw p constant subtype + // yaw i constant subtype { // ID 0x01, // Command text - "setyawp", + "setyawi", // Type of the command data floatType, // Function pointer - &setyawp + NULL }, // yaw d constant subtype { @@ -77,29 +77,29 @@ struct MessageType MessageTypes[MAX_TYPE] = // Type of the command data floatType, // Function pointer - &setyawd + NULL }, - // roll setpoint subtype + // roll p constant subtype { // ID 0x03, // Command text - "setroll", + "setrollp", // Type of the command data floatType, // Function pointer - &setroll + NULL }, - // roll p constant subtype + // roll i constant subtype { // ID 0x04, // Command text - "setrollp", + "setrolli", // Type of the command data floatType, // Function pointer - &setrollp + NULL }, // roll d constant subtype { @@ -110,29 +110,29 @@ struct MessageType MessageTypes[MAX_TYPE] = // Type of the command data floatType, // Function pointer - &setrolld + NULL }, - // pitch setpoint subtype + // pitch p constant subtype { // ID 0x06, // Command text - "setpitch", + "setpitchp", // Type of the command data floatType, // Function pointer - &setpitch + NULL }, - // pitch p constant subtype + // pitch i constant subtype { // ID 0x07, // Command text - "setpitchp", + "setpitchi", // Type of the command data floatType, // Function pointer - &setpitchp + NULL }, // pitch d constant subtype { @@ -143,51 +143,205 @@ struct MessageType MessageTypes[MAX_TYPE] = // Type of the command data floatType, // Function pointer - &setpitchd + NULL }, - // throttle setpoint subtype + // yawrate p constant subtype { // ID 0x09, // Command text - "setthrottle", + "setyawratep", // Type of the command data floatType, // Function pointer - &setthrottle + NULL }, - // throttle p constant subtype + // yawrate i constant subtype { // ID 0x0A, // Command text - "setthrottlep", + "setyawratei", // Type of the command data floatType, // Function pointer - &setthrottlep + NULL }, - // throttle i constant subtype + // yawrate d constant subtype { // ID 0x0B, // Command text - "setthrottlei", + "setyawrated", // Type of the command data floatType, // Function pointer - &setthrottlei + NULL }, - // throttle d constant subtype + // rollrate p constant subtype { // ID 0x0C, // Command text - "setthrottled", + "setrollratep", // Type of the command data floatType, // Function pointer - &getthrottled + NULL + }, + // rollrate i constant subtype + { + // ID + 0x0D, + // Command text + "setrollratei", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // rollrate d constant subtype + { + // ID + 0x0E, + // Command text + "setrollrated", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // pitchrate p constant subtype + { + // ID + 0x0F, + // Command text + "setpitchratep", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // pitchrate i constant subtype + { + // ID + 0x10, + // Command text + "setpitchratei", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // pitchrate d constant subtype + { + // ID + 0x11, + // Command text + "setpitchrated", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // height p constant subtype + { + // ID + 0x12, + // Command text + "setheightp", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // height i constant subtype + { + // ID + 0x13, + // Command text + "setheighti", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // height d constant subtype + { + // ID + 0x14, + // Command text + "setheightd", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // lat p constant subtype + { + // ID + 0x15, + // Command text + "setlatp", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // lat i constant subtype + { + // ID + 0x16, + // Command text + "setlati", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // lat d constant subtype + { + // ID + 0x17, + // Command text + "setlatd", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // long p constant subtype + { + // ID + 0x18, + // Command text + "setlongp", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // long i constant subtype + { + // ID + 0x19, + // Command text + "setlongi", + // Type of the command data + floatType, + // Function pointer + NULL + }, + // long d constant subtype + { + // ID + 0x1A, + // Command text + "setlongd", + // Type of the command data + floatType, + // Function pointer + NULL } } }, @@ -993,4 +1147,4 @@ int respthrottlei(unsigned char *packet, int dataLen, modular_structs_t *structs } int respthrottled(unsigned char *packet, int dataLen, modular_structs_t *structs){ return 0; -} \ No newline at end of file +} diff --git a/groundStation/src/backend/communication.c b/groundStation/src/backend/communication.c index 86784506d..2dacd03f9 100644 --- a/groundStation/src/backend/communication.c +++ b/groundStation/src/backend/communication.c @@ -256,12 +256,16 @@ int processCommand(unsigned char *packet, modular_structs_t *structs) { } if(metadata.data_len >= 0) { - // Call the appropriate subtype function - (* (MessageTypes[(unsigned char)metadata.msg_type].subtypes[(unsigned char)metadata.msg_subtype].functionPtr))(data, metadata.data_len, structs); - + /* Null check*/ + if (MessageTypes[(unsigned char)metadata.msg_type].subtypes[ + (unsigned char) metadata.msg_subtype].functionPtr) { + // Call the appropriate subtype function + (* (MessageTypes[(unsigned char)metadata.msg_type].subtypes[(unsigned char)metadata.msg_subtype].functionPtr))(data, metadata.data_len, structs); + } + return 0; } // Only gets here if there is an error return -1; -} \ No newline at end of file +} -- GitLab