diff --git a/quad/sw/modular_quad_pid/src/callbacks.c b/quad/sw/modular_quad_pid/src/callbacks.c new file mode 100644 index 0000000000000000000000000000000000000000..19cbc568ce37c4a663dfd667d8aaec7db3f55e02 --- /dev/null +++ b/quad/sw/modular_quad_pid/src/callbacks.c @@ -0,0 +1,341 @@ +#include "communication.h" +#include "commands.h" +#include "type_def.h" +#include "uart.h" + +int debug(modular_structs_t *structs) +{ + printf("function for debug\n"); + return 0; +} + +static int n_msg_received = 0; +static size_t total_payload_received = 0; + +int cb_packetlog(modular_structs_t* structs) { + n_msg_received += 1; + total_payload_received += uart_buff_data_length(); + return 0; +} + +int cb_getpacketlogs(modular_structs_t* structs) { + char buf[255]; + + // Message logging number of messages received and size of payload received + int length = snprintf(buf, sizeof buf, "%d,%d", n_msg_received, total_payload_received); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +/* Handles receiving new location updates */ +int cb_update(modular_structs_t *structs) +{ + //processUpdate(packet, &(structs->raw_sensor_struct.currentQuadPosition)); + + quadPosition_t* currentQuadPosition = &(structs->raw_sensor_struct.currentQuadPosition); + // Packet must come as [NEARPY], 4 bytes each + int packetId = uart_buff_data_get_u32(0); +// printf("Packet ID: %d\n", packetId); + float y_pos = uart_buff_data_get_float(4); +// printf("y_pos: %f\n", y_pos); + float x_pos = uart_buff_data_get_float(8); +// printf("x_pos: %f\n", x_pos); + float alt_pos = uart_buff_data_get_float(12); +// printf("alt_pos: %f\n", alt_pos); + float roll = uart_buff_data_get_float(16); +// printf("roll: %f\n", roll); + float pitch = uart_buff_data_get_float(20); +// printf("pitch: %f\n", pitch); + float yaw = uart_buff_data_get_float(24); +// printf("yaw: %f\n", yaw); + + currentQuadPosition->packetId = packetId; + currentQuadPosition->y_pos = y_pos; + currentQuadPosition->x_pos = x_pos; + currentQuadPosition->alt_pos = alt_pos; + currentQuadPosition->roll = roll; + currentQuadPosition->pitch = pitch; + currentQuadPosition->yaw = yaw; + + // Make location as fresh + structs->user_input_struct.locationFresh = 1; + + return 0; +} + +// This is called on the ground station to begin sending VRPN to the quad +int beginupdate(modular_structs_t *structs) { + structs->user_input_struct.receivedBeginUpdate = 1; + return 0; +} + +int logdata(modular_structs_t *structs) +{ + size_t length; + unsigned char *packet = uart_buff_get_raw(&length); + printf("Logging: %s\n", packet); + return 0; +} + +int response(modular_structs_t *structs) +{ + size_t length; + char *packet = uart_buff_get_raw(&length); + printf("This is the response: %s\n", packet); + return 0; +} + +// ------------------------------------------------------------------ +// Quad side implementation + +// TODO: Erase memory leaks + +int yawset(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->setpoint_struct.desiredQuadPosition.yaw = uart_buff_data_get_float(0); + + // Debug print statement + //printf("function for yawset: %f\n", structs->setpoint_struct.desiredQuadPosition.yaw); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set desired yaw to %.2f radians\r\n", structs->setpoint_struct.desiredQuadPosition.yaw); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +int yawp(modular_structs_t *structs) +{ + char buf[255] = {0}; + + structs->parameter_struct.yaw_angle_pid.Kp = uart_buff_data_get_float(0); + + printf("function for yawp: %f\n", structs->parameter_struct.yaw_angle_pid.Kp); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set yaw Kp to %.2f\r\n", structs->parameter_struct.yaw_angle_pid.Kp); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +int yawd(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->parameter_struct.yaw_angle_pid.Kd = uart_buff_data_get_float(0); + + printf("function for yawd: %f\n", structs->parameter_struct.yaw_angle_pid.Kd); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set yaw Kd to %.2f\r\n", structs->parameter_struct.yaw_angle_pid.Kd); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +int rollset(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->setpoint_struct.desiredQuadPosition.roll = uart_buff_data_get_float(0); + + printf("function for rollset: %f\n", structs->setpoint_struct.desiredQuadPosition.roll); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set desired roll to %.2f radians\r\n", structs->setpoint_struct.desiredQuadPosition.roll); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +int rollp(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->parameter_struct.roll_angle_pid.Kp = uart_buff_data_get_float(0); + + printf("function for rollp: %f\n", structs->parameter_struct.roll_angle_pid.Kp); + + // Send a reply to the ground station + size_t length = snprintf(buf, sizeof(buf), "Successfully set roll Kp to %.2f\r\n", structs->parameter_struct.roll_angle_pid.Kp); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + + return 0; +} + +int rolld(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->parameter_struct.roll_angle_pid.Kd = uart_buff_data_get_float(0); + + printf("function for rolld: %f\n", structs->parameter_struct.roll_angle_pid.Kd); + + // Send a reply to the ground station + size_t length = snprintf(buf, sizeof(buf), "Successfully set roll Kd to %.2f\r\n", structs->parameter_struct.roll_angle_pid.Kd); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +int pitchset(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->setpoint_struct.desiredQuadPosition.pitch = uart_buff_data_get_float(0); + + printf("function for pitchset: %f\n", structs->setpoint_struct.desiredQuadPosition.pitch); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set desired pitch to %.2f radians\r\n", structs->setpoint_struct.desiredQuadPosition.pitch); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +int pitchp(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->parameter_struct.pitch_angle_pid.Kp = uart_buff_data_get_float(0); + + printf("function for pitchp: %f\n", structs->parameter_struct.pitch_angle_pid.Kp); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set pitch Kp to %.2f\r\n", structs->parameter_struct.pitch_angle_pid.Kp); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +int pitchd(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->parameter_struct.pitch_angle_pid.Kd = uart_buff_data_get_float(0); + + printf("function for pitchd: %f\n", structs->parameter_struct.pitch_angle_pid.Kd); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set desired yaw to %.2f\r\n", structs->parameter_struct.pitch_angle_pid.Kd); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +// ------------------------------------------------------------ +// These should be renamed to altitude! +int throttleset(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->setpoint_struct.desiredQuadPosition.alt_pos = uart_buff_data_get_float(0); + + printf("function for throttleset: %f\n", structs->setpoint_struct.desiredQuadPosition.alt_pos); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set desired altitude to %.2f meters\r\n", structs->setpoint_struct.desiredQuadPosition.alt_pos); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +int throttlep(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->parameter_struct.alt_pid.Kp = uart_buff_data_get_float(0); + + printf("function for throttlep: %f\n", structs->parameter_struct.alt_pid.Kp); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set alt Kp to %.2f\r\n", structs->parameter_struct.alt_pid.Kp); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +int throttlei(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->parameter_struct.alt_pid.Ki = uart_buff_data_get_float(0); + + printf("function for throttlei: %f\n", structs->parameter_struct.alt_pid.Ki); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set alt Ki to %.2f\r\n", structs->parameter_struct.alt_pid.Ki); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} + +int throttled(modular_structs_t *structs) +{ + char buf[255] = {}; + + structs->parameter_struct.alt_pid.Kd = uart_buff_data_get_float(0); + + printf("function for throttled: %f\n", structs->parameter_struct.alt_pid.Kd); + + // Send a reply to the ground station + int length = snprintf(buf, sizeof(buf), "Successfully set alt Kd to %.2f\r\n", structs->parameter_struct.alt_pid.Kd); + + send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); + return 0; +} +// These should be renamed to altitude! +// ------------------------------------------------------------ + +int accelreq(modular_structs_t *structs) +{ + printf("function for accelreq\n"); + return 0; +} + +int gyroresp(modular_structs_t *structs) +{ + printf("function for accelreq\n"); + return 0; +} + +int pitchangleresp(modular_structs_t *structs) +{ + printf("function for accelreq\n"); + return 0; +} + +int rollangleresp(modular_structs_t *structs) +{ + printf("function for accelreq\n"); + return 0; +} + +int gyroreq(modular_structs_t *structs) +{ + printf("function for accelreq\n"); + return 0; +} + +int pitchanglereq(modular_structs_t *structs) +{ + printf("function for accelreq\n"); + return 0; +} + +int rollanglereq(modular_structs_t *structs) +{ + printf("function for accelreq\n"); + return 0; +} + +int accelresp(modular_structs_t *structs) +{ + printf("function for accelreq\n"); + return 0; +} diff --git a/quad/sw/modular_quad_pid/src/callbacks.h b/quad/sw/modular_quad_pid/src/callbacks.h new file mode 100644 index 0000000000000000000000000000000000000000..1afa1b659aded1a54827554c02f22fa8d52cddc6 --- /dev/null +++ b/quad/sw/modular_quad_pid/src/callbacks.h @@ -0,0 +1,10 @@ +#ifndef __callbacks_ +#define __callbacks_h + +/* Grab some stupid stuff from legacy code */ +#include "type_def.h" + +/* Make commands.c happy */ +typedef void (command_cb)(modular_structs_t *structs); + +#endif diff --git a/quad/sw/modular_quad_pid/src/cb_default.h b/quad/sw/modular_quad_pid/src/cb_default.h new file mode 100644 index 0000000000000000000000000000000000000000..99982e63f73c37f9fdd1175bdf94c1f4b268a6c9 --- /dev/null +++ b/quad/sw/modular_quad_pid/src/cb_default.h @@ -0,0 +1,10 @@ +#include "commands.h" + +/* The cb_default used on the groundStation. This file MUST NOT BE INCLUDED + * by anything except for commands.c */ + +/* cb_default used by portable commands.c */ +int cb_default(modular_structs_t *structs) +{ + return 0; +} diff --git a/quad/sw/modular_quad_pid/src/commands.c b/quad/sw/modular_quad_pid/src/commands.c deleted file mode 100644 index a57f6fefae851f371378355fcfec04e289fad3b2..0000000000000000000000000000000000000000 --- a/quad/sw/modular_quad_pid/src/commands.c +++ /dev/null @@ -1,725 +0,0 @@ -#include "communication.h" -#include "commands.h" -#include "type_def.h" -#include "uart.h" - -struct MessageType MessageTypes[MAX_TYPE] = -{ - // DEBUG - { - // Message Type ID - 0x00, - - // Debug Subtypes - { - // NONE subtype - { - // ID - 0x00, - // Command text - "debug", - // Type of the command data - stringType, - // Function pointer - &debug - }, - - // Echo subtype - { - // ID - 0x01, - // Command text - "ack", - // Type of the command data - intType, - // Function pointer - &debug - }, - // Log packet receiving - { - // ID - 0x02, - // Command text - "packetlog", - // Type of the command data - stringType, - // Function pointer - &packetlog - }, - // Get packet receiving logs - { - // ID - 0x03, - // Command text - "getpacketlogs", - // Type of the command data - stringType, - // Function pointer - &getpacketlogs - } - } - }, - - // CALIBRATION - { - // Message Type ID - 0x01, - - // Calibration Subtypes - { - // yaw setpoint subtype - { - // ID - 0x00, - // Command text - "setyaw", - // Type of the command data - floatType, - // Function pointer - &yawset - }, - // yaw p constant subtype - { - // ID - 0x01, - // Command text - "setyawp", - // Type of the command data - floatType, - // Function pointer - &yawp - }, - // yaw d constant subtype - { - // ID - 0x02, - // Command text - "setyawd", - // Type of the command data - floatType, - // Function pointer - &yawd - }, - // roll setpoint subtype - { - // ID - 0x03, - // Command text - "setroll", - // Type of the command data - floatType, - // Function pointer - &rollset - }, - // roll p constant subtype - { - // ID - 0x04, - // Command text - "setrollp", - // Type of the command data - floatType, - // Function pointer - &rollp - }, - // roll d constant subtype - { - // ID - 0x05, - // Command text - "setrolld", - // Type of the command data - floatType, - // Function pointer - &rolld - }, - // pitch setpoint subtype - { - // ID - 0x06, - // Command text - "setpitch", - // Type of the command data - floatType, - // Function pointer - &pitchset - }, - // pitch p constant subtype - { - // ID - 0x07, - // Command text - "setpitchp", - // Type of the command data - floatType, - // Function pointer - &pitchp - }, - // pitch d constant subtype - { - // ID - 0x08, - // Command text - "setpitchd", - // Type of the command data - floatType, - // Function pointer - &pitchd - }, - // throttle setpoint subtype - { - // ID - 0x09, - // Command text - "setthrottle", - // Type of the command data - floatType, - // Function pointer - &throttleset - }, - // throttle p constant subtype - { - // ID - 0x0A, - // Command text - "setthrottlep", - // Type of the command data - floatType, - // Function pointer - &throttlep - }, - // throttle i constant subtype - { - // ID - 0x0B, - // Command text - "setthrottlei", - // Type of the command data - floatType, - // Function pointer - &throttlei - }, - // throttle d constant subtype - { - // ID - 0x0C, - // Command text - "setthrottled", - // Type of the command data - floatType, - // Function pointer - &throttled - } - } - }, - - // REQUEST - { - // Message Type ID - 0x02, - - // Request Subtypes - { - // accelerometer subtype - { - // ID - 0x00, - // Command text - "accelreq", - // Type of the command data - floatType, - // Function pointer - &accelreq - }, - // gyroscope subtype - { - // ID - 0x01, - // Command text - "gyroreq", - // Type of the command data - floatType, - // Function pointer - &gyroreq - }, - // pitch angle subtype - { - // ID - 0x02, - // Command text - "reqpitchangle", - // Type of the command data - floatType, - // Function pointer - &pitchanglereq - }, - // roll angle subtype - { - // ID - 0x03, - // Command text - "reqrollangle", - // Type of the command data - floatType, - // Function pointer - &rollanglereq - } - } - }, - - // RESPONSE - { - // Message Type ID - 0x03, - - // Response Subtypes - { - // accelerometer subtype - { - // ID - 0x00, - // Command text - "respaccel", - // Type of the command data - floatType, - // Function pointer - &accelresp - }, - // gyroscope subtype - { - // ID - 0x01, - // Command text - "respgyro", - // Type of the command data - floatType, - // Function pointer - &gyroresp - }, - // pitch angle subtype - { - // ID - 0x02, - // Command text - "resppitchangle", - // Type of the command data - floatType, - // Function pointer - &pitchangleresp - }, - // roll angle subtype - { - // ID - 0x03, - // Command text - "resprollangle", - // Type of the command data - floatType, - // Function pointer - &rollangleresp - } - } - }, - - // UPDATE - { - // Message Type ID - 0x04, - - // Update Subtypes - { - // NONE subtype - { - // ID - 0x00, - // Command text - "update", - // Type of the command data - stringType, - // Function pointer - &update - }, - // BEGIN UPDATE subtype - { - // ID - 0x01, - // Command text - "beginupdate", - // Type of the command data - stringType, - // Function pointer - &beginupdate - } - } - }, - - // LOG - { - // Message Type ID - 0x05, - - // Log Subtypes - { - // NONE subtype - { - // ID - 0x00, - // Command text - "log", - // Type of the command data - stringType, - // Function pointer - &logdata - }, - // Response subtype - { - // ID - 0x01, - // Command text - "response", - // Type of the command data - stringType, - // Function pointer - &response - } - } - }, - -}; - -int debug(modular_structs_t *structs) -{ - printf("function for debug\n"); - return 0; -} - -static int n_msg_received = 0; -static size_t total_payload_received = 0; - -int packetlog(modular_structs_t* structs) { - n_msg_received += 1; - total_payload_received += uart_buff_data_length(); - return 0; -} - -int getpacketlogs(modular_structs_t* structs) { - char buf[255]; - - // Message logging number of messages received and size of payload received - int length = snprintf(buf, sizeof buf, "%d,%d", n_msg_received, total_payload_received); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -/* Handles receiving new location updates */ -int update(modular_structs_t *structs) -{ - //processUpdate(packet, &(structs->raw_sensor_struct.currentQuadPosition)); - - quadPosition_t* currentQuadPosition = &(structs->raw_sensor_struct.currentQuadPosition); - // Packet must come as [NEARPY], 4 bytes each - int packetId = uart_buff_data_get_u32(0); -// printf("Packet ID: %d\n", packetId); - float y_pos = uart_buff_data_get_float(4); -// printf("y_pos: %f\n", y_pos); - float x_pos = uart_buff_data_get_float(8); -// printf("x_pos: %f\n", x_pos); - float alt_pos = uart_buff_data_get_float(12); -// printf("alt_pos: %f\n", alt_pos); - float roll = uart_buff_data_get_float(16); -// printf("roll: %f\n", roll); - float pitch = uart_buff_data_get_float(20); -// printf("pitch: %f\n", pitch); - float yaw = uart_buff_data_get_float(24); -// printf("yaw: %f\n", yaw); - - currentQuadPosition->packetId = packetId; - currentQuadPosition->y_pos = y_pos; - currentQuadPosition->x_pos = x_pos; - currentQuadPosition->alt_pos = alt_pos; - currentQuadPosition->roll = roll; - currentQuadPosition->pitch = pitch; - currentQuadPosition->yaw = yaw; - - // Make location as fresh - structs->user_input_struct.locationFresh = 1; - - return 0; -} - -// This is called on the ground station to begin sending VRPN to the quad -int beginupdate(modular_structs_t *structs) { - structs->user_input_struct.receivedBeginUpdate = 1; - return 0; -} - -int logdata(modular_structs_t *structs) -{ - size_t length; - unsigned char *packet = uart_buff_get_raw(&length); - printf("Logging: %s\n", packet); - return 0; -} - -int response(modular_structs_t *structs) -{ - size_t length; - char *packet = uart_buff_get_raw(&length); - printf("This is the response: %s\n", packet); - return 0; -} - -// ------------------------------------------------------------------ -// Quad side implementation - -// TODO: Erase memory leaks - -int yawset(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->setpoint_struct.desiredQuadPosition.yaw = uart_buff_data_get_float(0); - - // Debug print statement - //printf("function for yawset: %f\n", structs->setpoint_struct.desiredQuadPosition.yaw); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set desired yaw to %.2f radians\r\n", structs->setpoint_struct.desiredQuadPosition.yaw); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -int yawp(modular_structs_t *structs) -{ - char buf[255] = {0}; - - structs->parameter_struct.yaw_angle_pid.Kp = uart_buff_data_get_float(0); - - printf("function for yawp: %f\n", structs->parameter_struct.yaw_angle_pid.Kp); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set yaw Kp to %.2f\r\n", structs->parameter_struct.yaw_angle_pid.Kp); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -int yawd(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->parameter_struct.yaw_angle_pid.Kd = uart_buff_data_get_float(0); - - printf("function for yawd: %f\n", structs->parameter_struct.yaw_angle_pid.Kd); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set yaw Kd to %.2f\r\n", structs->parameter_struct.yaw_angle_pid.Kd); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -int rollset(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->setpoint_struct.desiredQuadPosition.roll = uart_buff_data_get_float(0); - - printf("function for rollset: %f\n", structs->setpoint_struct.desiredQuadPosition.roll); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set desired roll to %.2f radians\r\n", structs->setpoint_struct.desiredQuadPosition.roll); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -int rollp(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->parameter_struct.roll_angle_pid.Kp = uart_buff_data_get_float(0); - - printf("function for rollp: %f\n", structs->parameter_struct.roll_angle_pid.Kp); - - // Send a reply to the ground station - size_t length = snprintf(buf, sizeof(buf), "Successfully set roll Kp to %.2f\r\n", structs->parameter_struct.roll_angle_pid.Kp); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - - return 0; -} - -int rolld(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->parameter_struct.roll_angle_pid.Kd = uart_buff_data_get_float(0); - - printf("function for rolld: %f\n", structs->parameter_struct.roll_angle_pid.Kd); - - // Send a reply to the ground station - size_t length = snprintf(buf, sizeof(buf), "Successfully set roll Kd to %.2f\r\n", structs->parameter_struct.roll_angle_pid.Kd); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -int pitchset(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->setpoint_struct.desiredQuadPosition.pitch = uart_buff_data_get_float(0); - - printf("function for pitchset: %f\n", structs->setpoint_struct.desiredQuadPosition.pitch); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set desired pitch to %.2f radians\r\n", structs->setpoint_struct.desiredQuadPosition.pitch); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -int pitchp(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->parameter_struct.pitch_angle_pid.Kp = uart_buff_data_get_float(0); - - printf("function for pitchp: %f\n", structs->parameter_struct.pitch_angle_pid.Kp); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set pitch Kp to %.2f\r\n", structs->parameter_struct.pitch_angle_pid.Kp); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -int pitchd(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->parameter_struct.pitch_angle_pid.Kd = uart_buff_data_get_float(0); - - printf("function for pitchd: %f\n", structs->parameter_struct.pitch_angle_pid.Kd); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set desired yaw to %.2f\r\n", structs->parameter_struct.pitch_angle_pid.Kd); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -// ------------------------------------------------------------ -// These should be renamed to altitude! -int throttleset(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->setpoint_struct.desiredQuadPosition.alt_pos = uart_buff_data_get_float(0); - - printf("function for throttleset: %f\n", structs->setpoint_struct.desiredQuadPosition.alt_pos); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set desired altitude to %.2f meters\r\n", structs->setpoint_struct.desiredQuadPosition.alt_pos); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -int throttlep(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->parameter_struct.alt_pid.Kp = uart_buff_data_get_float(0); - - printf("function for throttlep: %f\n", structs->parameter_struct.alt_pid.Kp); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set alt Kp to %.2f\r\n", structs->parameter_struct.alt_pid.Kp); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -int throttlei(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->parameter_struct.alt_pid.Ki = uart_buff_data_get_float(0); - - printf("function for throttlei: %f\n", structs->parameter_struct.alt_pid.Ki); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set alt Ki to %.2f\r\n", structs->parameter_struct.alt_pid.Ki); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} - -int throttled(modular_structs_t *structs) -{ - char buf[255] = {}; - - structs->parameter_struct.alt_pid.Kd = uart_buff_data_get_float(0); - - printf("function for throttled: %f\n", structs->parameter_struct.alt_pid.Kd); - - // Send a reply to the ground station - int length = snprintf(buf, sizeof(buf), "Successfully set alt Kd to %.2f\r\n", structs->parameter_struct.alt_pid.Kd); - - send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1); - return 0; -} -// These should be renamed to altitude! -// ------------------------------------------------------------ - -int accelreq(modular_structs_t *structs) -{ - printf("function for accelreq\n"); - return 0; -} - -int gyroresp(modular_structs_t *structs) -{ - printf("function for accelreq\n"); - return 0; -} - -int pitchangleresp(modular_structs_t *structs) -{ - printf("function for accelreq\n"); - return 0; -} - -int rollangleresp(modular_structs_t *structs) -{ - printf("function for accelreq\n"); - return 0; -} - -int gyroreq(modular_structs_t *structs) -{ - printf("function for accelreq\n"); - return 0; -} - -int pitchanglereq(modular_structs_t *structs) -{ - printf("function for accelreq\n"); - return 0; -} - -int rollanglereq(modular_structs_t *structs) -{ - printf("function for accelreq\n"); - return 0; -} - -int accelresp(modular_structs_t *structs) -{ - printf("function for accelreq\n"); - return 0; -} diff --git a/quad/sw/modular_quad_pid/src/commands.c b/quad/sw/modular_quad_pid/src/commands.c new file mode 120000 index 0000000000000000000000000000000000000000..e03a0ea45faafddf983aed9e6bb2eae3b2902ac3 --- /dev/null +++ b/quad/sw/modular_quad_pid/src/commands.c @@ -0,0 +1 @@ +../../../../groundStation/src/backend/commands.c \ No newline at end of file diff --git a/quad/sw/modular_quad_pid/src/commands.h b/quad/sw/modular_quad_pid/src/commands.h deleted file mode 100644 index d93478dbff738aa497881a24e773e27ad5f01432..0000000000000000000000000000000000000000 --- a/quad/sw/modular_quad_pid/src/commands.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef _COMMANDS_H -#define _COMMANDS_H - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include "type_def.h" -#include "packet_processing.h" - -// ---------------------- -// Helper stuff - -#define MAX_TYPE 6 -#define MAX_SUBTYPE 100 - -enum Message{ - BEGIN_CHAR = 0xBE, - END_CHAR = 0xED -}; - -// This should also have double to avoid confusion with float values. -enum DataType -{ - floatType, - intType, - stringType -}; - -// MESSAGE SUBTYPES -struct MessageSubtype{ - char ID; - char cmdText[100]; - char cmdDataType; - int (*functionPtr)(modular_structs_t *structs); -}; - -// MESSAGE TYPES -struct MessageType{ - char ID; - struct MessageSubtype subtypes[MAX_SUBTYPE]; -}; - -int debug(modular_structs_t *structs); -int packetlog(modular_structs_t* structs); -int getpacketlogs(modular_structs_t* structs); -int update(modular_structs_t *structs); -int beginupdate(modular_structs_t *structs); -int logdata(modular_structs_t *structs); -int response(modular_structs_t *structs); -int yawset(modular_structs_t *structs); -int yawp(modular_structs_t *structs); -int yawd(modular_structs_t *structs); -int rollset(modular_structs_t *structs); -int rollp(modular_structs_t *structs); -int rolld(modular_structs_t *structs); -int pitchset(modular_structs_t *structs); -int pitchp(modular_structs_t *structs); -int pitchd(modular_structs_t *structs); -int throttleset(modular_structs_t *structs); -int throttlep(modular_structs_t *structs); -int throttlei(modular_structs_t *structs); -int throttled(modular_structs_t *structs); -int accelreq(modular_structs_t *structs); -int gyroresp(modular_structs_t *structs); -int pitchangleresp(modular_structs_t *structs); -int rollangleresp(modular_structs_t *structs); -int gyroreq(modular_structs_t *structs); -int pitchanglereq(modular_structs_t *structs); -int rollanglereq(modular_structs_t *structs); -int accelresp(modular_structs_t *structs); - -// TODO add in string to be read from the command line when sending a subtype of message -extern struct MessageType MessageTypes[MAX_TYPE]; - -#endif diff --git a/quad/sw/modular_quad_pid/src/commands.h b/quad/sw/modular_quad_pid/src/commands.h new file mode 120000 index 0000000000000000000000000000000000000000..b0ff517e5fdb2363f2afda70b29e57aee9fdc663 --- /dev/null +++ b/quad/sw/modular_quad_pid/src/commands.h @@ -0,0 +1 @@ +../../../../groundStation/src/backend/commands.h \ No newline at end of file