diff --git a/groundStation/src/backend/commands.c b/groundStation/src/backend/commands.c index d1efa7e38e551784baca1124158b768b06b2ec90..a97197b8106334e13b2e652ab93c1228f868ce0b 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 86784506d05122229d04cad6cb5ed78eb9fcbb4c..2dacd03f90afb8ed35b99a56f34ca785225e3350 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 +} diff --git a/groundStation/src/cli/cli_setpid.c b/groundStation/src/cli/cli_setpid.c index b0ed03cf1b31b0652c5b617a342cebb422250274..2fdc16fdb43e6e42ea5eea16153d98eeb5978302 100644 --- a/groundStation/src/cli/cli_setpid.c +++ b/groundStation/src/cli/cli_setpid.c @@ -63,19 +63,19 @@ int cli_setpid(struct backend_conn * conn, int argc, char **argv) { } else if (setPitch) { pid_data.controller = PID_PITCH; } else if (setRollV) { - pid_data.controller = PID_ROLL_VELOCITY; + pid_data.controller = PID_ROLL_RATE; } else if (setPitchV) { - pid_data.controller = PID_PITCH_VELOCITY; + pid_data.controller = PID_PITCH_RATE; } else if (setYawV) { - pid_data.controller = PID_YAW_VELOCITY; + pid_data.controller = PID_YAW_RATE; } else if (setHeight) { pid_data.controller = PID_HEIGHT; } else if (setLong) { - pid_data.controller = PID_LONG; - } else if (setLat) { pid_data.controller = PID_LAT; + } else if (setLat) { + pid_data.controller = PID_LONG; } frontend_setpid(conn, &pid_data, mask); return 0; -} \ No newline at end of file +} diff --git a/groundStation/src/frontend/frontend_setpid.c b/groundStation/src/frontend/frontend_setpid.c index 0a25d8e3c068ebcd8d121dac7469f86cc6d8a8c6..58bf4109cd1c50d22486e464c101c9f8dd3c367e 100644 --- a/groundStation/src/frontend/frontend_setpid.c +++ b/groundStation/src/frontend/frontend_setpid.c @@ -25,7 +25,24 @@ int frontend_setpid( case PID_YAW: controller = "yaw"; break; - /* What is the "throttle" pid constant? */ + case PID_PITCH_RATE: + controller = "pitchrate"; + break; + case PID_ROLL_RATE: + controller = "rollrate"; + break; + case PID_YAW_RATE: + controller = "yawrate"; + break; + case PID_HEIGHT: + controller = "height"; + break; + case PID_LAT: + controller = "lat"; + break; + case PID_LONG: + controller = "long"; + break; default: warnx("Unsupported PID constant"); return -1; diff --git a/groundStation/src/frontend/pid_common.h b/groundStation/src/frontend/pid_common.h index efa24df4a2b018b1a3b353a109cd29a044647a13..c40c4fb42fb19bf7caf22a03effe091fb7621ece 100644 --- a/groundStation/src/frontend/pid_common.h +++ b/groundStation/src/frontend/pid_common.h @@ -5,9 +5,9 @@ enum pid_controller { PID_PITCH, PID_ROLL, PID_YAW, - PID_PITCH_VELOCITY, - PID_ROLL_VELOCITY, - PID_YAW_VELOCITY, + PID_PITCH_RATE, + PID_ROLL_RATE, + PID_YAW_RATE, PID_HEIGHT, /* Z */ PID_LAT, /* X */ PID_LONG, /* Y */