diff --git a/MicroCART b/MicroCART deleted file mode 160000 index d01645c0571a335594396942e6ffa1b53bc710f0..0000000000000000000000000000000000000000 --- a/MicroCART +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d01645c0571a335594396942e6ffa1b53bc710f0 diff --git a/quad/src/quad_app/debug_rt.c b/quad/src/quad_app/debug_rt.c index 8571562272fc81d1e150b17aaf35e95daba0c002..732c428313b38ecbe72fccc1426d5af8d84ced30 100644 --- a/quad/src/quad_app/debug_rt.c +++ b/quad/src/quad_app/debug_rt.c @@ -9,37 +9,32 @@ #include "computation_graph.h" #include "timer.h" - - - -#define ReadBit(data, position) ( (data>>y) & 1) -#define SetBit(data,position) data |= (1 << y) -#define ClearBit(data,y) data &= ~(1 << y) - - - /* Initially sets it so that all debug values are zero */ -SensorRTFlags_t * initializeFlags(void){ - - SensorRTFlags_t * flags = malloc(sizeof(SensorRTFlags_t)); -#if 0 - flags -> imuflags = calloc(sizeof(IMUFlags_t)); - flags -> optflowflags = calloc(sizeof(OptFlowFlags_t)); - flags -> lidarflags = calloc(sizeof(lidarFlags_t)); - flags -> errorFlags = calloc(sizeof(SensorErrorFlags_t)); -#endif +SensorRTFlags_t * initializeFlags(sensorRTF_flags_t * flags) { + + flags = calloc(1, sizeof(SensorRTFlags_t)); + flags -> imuflags = calloc(1, sizeof(IMUFlags_t)); + flags -> optflowflags = calloc(1, sizeof(OptFlowFlags_t)); + flags -> lidarflags = calloc(1, sizeof(lidarFlags_t)); + flags -> errorFlags = calloc(1, sizeof(SensorErrorFlags_t)); } void freeFlags(SensorRTFlags_t * flags){ -#if 0 free(flags -> imuflags); free(flags -> optflowflags); free(flags -> lidarflags); free(flags -> errorFlags); free(flags); -#endif +} + +/* + Helper to return single bit of u32 data. This returns the "position"'th bit of the given u32, + assuming it is Zero indexed. +*/ +u32 read_bit(u32 data, int position){ + return (data >> position) & 1; } /* @@ -51,60 +46,38 @@ See RTSensorPacketDocumentation.md for which flags each bit of the config data c It returns the size of the packet that will be sent, so the payload is correctly determined */ - -int process_configuration_packet(float configData, SensorRTFlags_t * flags) +int process_configuration_packet(u32 configData, SensorRTFlags_t * flags) { - int size = 0; -#if 0 - flags -> lidarflags -> quadHeight = ReadBit(31); size += ReadBit(31); - flags -> optflowflags -> x_flow = ReadBit(30); size += 2 * ReadBit(30); - flags -> optflowflags -> y_flow = ReadBit(29); size += 2 * ReadBit(29); - flags -> optflowflags -> x_filter = ReadBit(28); size += 2 * ReadBit(28); - flags -> optflowflags -> y_filter = ReadBit(27); size += 2 * ReadBit(27); - flags -> optflowflags -> x_velocity = ReadBit(26); size += 2 * ReadBit(26); - flags -> optflowflags -> y_velocity = ReadBit(25); size += 2 * ReadBit(25); - flags -> imuflags -> gyro_x = ReadBit(24); size += ReadBit(24); - flags -> imuflags -> gyro_y = ReadBit(23); size += ReadBit(23); - flags -> imuflags -> gyro_z = ReadBit(22); size += ReadBit(22); - flags -> imuflags -> acc_x = ReadBit(21); size += ReadBit(21); - flags -> imuflags -> acc_y = ReadBit(20); size += ReadBit(20); - flags -> imuflags -> acc_z = ReadBit(19); size += ReadBit(19); - flags -> imuflags -> mag_x = ReadBit(18); size += ReadBit(18); - flags -> imuflags -> mag_y = ReadBit(17); size += ReadBit(17); - flags -> imuflags -> mag_z = ReadBit(16); size += ReadBit(16); - flags -> errorflags -> lidar = ReadBit(15); size += ReadBit(15); - flags -> errorflags -> consec_lidar = ReadBit(14); size += ReadBit(14); - flags -> errorflags -> optFlow = ReadBit(13); size += ReadBit(13); - flags -> errorflags -> consec_optFlow = ReadBit(12); size += ReadBit(12); - flags -> errorflags -> imu = ReadBit(11); size += ReadBit(11); - flags -> errorflags -> consec_imu = ReadBit(10); size += ReadBit(10); -#endif + flags -> lidarflags -> quadHeight = read_bit(configData, 31); size += read_bit(configData, 31); + flags -> optflowflags -> x_flow = read_bit(configData, 30); size += 2 * read_bit(configData, 30); + flags -> optflowflags -> y_flow = read_bit(configData, 29); size += 2 * read_bit(configData, 29); + flags -> optflowflags -> x_filter = read_bit(configData, 28); size += 2 * read_bit(configData, 28); + flags -> optflowflags -> y_filter = read_bit(configData, 27); size += 2 * read_bit(configData, 27); + flags -> optflowflags -> x_velocity = read_bit(configData, 26); size += 2 * read_bit(configData, 26); + flags -> optflowflags -> y_velocity = read_bit(configData, 25); size += 2 * read_bit(configData, 25); + flags -> imuflags -> gyro_x = read_bit(configData, 24); size += read_bit(configData, 24); + flags -> imuflags -> gyro_y = read_bit(configData, 23); size += read_bit(configData, 23); + flags -> imuflags -> gyro_z = read_bit(configData, 22); size += read_bit(configData, 22); + flags -> imuflags -> acc_x = read_bit(configData, 21); size += read_bit(configData, 21); + flags -> imuflags -> acc_y = read_bit(configData, 20); size += read_bit(configData, 20); + flags -> imuflags -> acc_z = read_bit(configData, 19); size += read_bit(configData, 19); + flags -> imuflags -> mag_x = read_bit(configData, 18); size += read_bit(configData, 18); + flags -> imuflags -> mag_y = read_bit(configData, 17); size += read_bit(configData, 17); + flags -> imuflags -> mag_z = read_bit(configData, 16); size += read_bit(configData, 16); + flags -> errorflags -> lidar = read_bit(configData, 15); size += read_bit(configData, 15); + flags -> errorflags -> consec_lidar = read_bit(configData, 14); size += read_bit(configData, 14); + flags -> errorflags -> optFlow = read_bit(configData, 13); size += read_bit(configData, 13); + flags -> errorflags -> consec_optFlow = read_bit(configData, 12); size += read_bit(configData, 12); + flags -> errorflags -> imu = read_bit(configData, 11); size += read_bit(configData, 11); + flags -> errorflags -> consec_imu = read_bit(configData, 10); size += read_bit(configData, 10); return size; } -/* - -typedef struct raw_sensor { - - gam_t gam; - lidar_t lidar; - px4flow_t optical_flow; - - // Structures to hold the current quad position & orientation - // This is mostly unused? - quadPosition_t currentQuadPosition; - -} raw_sensor_t; - - -*/ - int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * flags, int size) { char * payload = malloc(sizeof(char) * size); int currentBytePosition = 0; -#if 0 /* Since it's calloced (all zeros), a simple & operation should set this properly */ @@ -116,90 +89,90 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * if(flags -> optflowflags -> x_flow) { - (*payload) &= ((data -> optical_flow -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> optical_flow -> flow_x_rad) << (currentBytePosition * 8)); currentBytePosition += 2; } if(flags -> optflowflags -> y_flow) { - (*payload) &= ((data -> optical_flow -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> optical_flow -> flow_y_rad) << (currentBytePosition * 8)); currentBytePosition += 2; } if(flags -> optflowflags -> x_filter) { - (*payload) &= ((data -> optical_flow -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> optical_flow -> xVelFilt) << (currentBytePosition * 8)); currentBytePosition += 2; } if(flags -> optflowflags -> y_filter) { - (*payload) &= ((data -> optical_flow -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> optical_flow -> yVelFilt) << (currentBytePosition * 8)); currentBytePosition += 2; } if(flags -> optflowflags -> x_velocity) { - (*payload) &= ((data -> optical_flow -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> optical_flow -> xVel) << (currentBytePosition * 8)); currentBytePosition += 2; } if(flags -> optflowflags -> y_velocity) { - (*payload) &= ((data -> optical_flow -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> optical_flow -> yVel) << (currentBytePosition * 8)); currentBytePosition += 2; } if(flags -> imuflags -> gyro_x) { - (*payload) &= ((data -> gam -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> gam -> gyro_xVel_p) << (currentBytePosition * 8)); currentBytePosition++; } if(flags -> imuflags -> gyro_y) { - (*payload) &= ((data -> gam -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> gam -> gyro_yVel_q) << (currentBytePosition * 8)); currentBytePosition++; } if(flags -> imuflags -> gyro_z) { - (*payload) &= ((data -> gam -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> gam -> gyro_zVel_r) << (currentBytePosition * 8)); currentBytePosition++; } if(flags -> imuflags -> acc_x) { - (*payload) &= ((data -> gam -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> gam -> accel_x) << (currentBytePosition * 8)); currentBytePosition++; } if(flags -> imuflags -> acc_y) { - (*payload) &= ((data -> gam -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> gam -> accel_y) << (currentBytePosition * 8)); currentBytePosition++; } if(flags -> imuflags -> acc_z) { - (*payload) &= ((data -> gam -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> gam -> accel_z) << (currentBytePosition * 8)); currentBytePosition++; } if(flags -> imuflags -> mag_x) { - (*payload) &= ((data -> gam -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> gam -> mag_x) << (currentBytePosition * 8)); currentBytePosition++; } if(flags -> imuflags -> mag_y) { - (*payload) &= ((data -> gam -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> gam -> mag_y) << (currentBytePosition * 8)); currentBytePosition++; } if(flags -> imuflags -> mag_z) { - (*payload) &= ((data -> gam -> ) << (currentBytePosition * 8)); + (*payload) &= ((data -> gam -> mag_z) << (currentBytePosition * 8)); currentBytePosition++; } @@ -239,8 +212,6 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * currentBytePosition++; } - -#endif int bytes_sent = send_data(comm->uart, SEND_RT_ID, 0, (u8*)payload, strlen(payload)); free(payload); return bytes_sent; diff --git a/quad/src/quad_app/debug_rt.h b/quad/src/quad_app/debug_rt.h index 8c685ac24cbb651200d231267f3cd67062b8098c..4552e6eda4782013b946f92e44cd62fb627ea491 100644 --- a/quad/src/quad_app/debug_rt.h +++ b/quad/src/quad_app/debug_rt.h @@ -65,3 +65,5 @@ void freeFlags(SensorRTFlags_t * flags); int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * flags, int size); +u32 shift(u32 data, int position); + diff --git a/quad/src/quad_app/quad_app.c b/quad/src/quad_app/quad_app.c index d4374ddfa7e9b7634bcc99e78171a41a73d341aa..fee17bff79e88df26cf1def41cc701468f82a2bf 100644 --- a/quad/src/quad_app/quad_app.c +++ b/quad/src/quad_app/quad_app.c @@ -26,9 +26,8 @@ int quad_main(int (*setup_hardware)(hardware_t *hardware_struct)) //flags that indicate which rt data to send SensorRTFlags_t flags; - // TEST : only send accelerometer data for now - memset(&flags, 0, sizeof(flags)); - flags.imuflags->acc_x = 1; + // initialize internal flag data; + initializeFlags(&flags); // Wire up hardware setup_hardware(&structs.hardware_struct); @@ -67,7 +66,7 @@ int quad_main(int (*setup_hardware)(hardware_t *hardware_struct)) get_sensors(&(structs.hardware_struct), &(structs.log_struct), &(structs.user_input_struct), &(structs.raw_sensor_struct)); //Send the sensor data in RT (TODO WILL NEED TO BE EDITED FROM CURRENT CONDITION DUE TO TINA) - //send_sensor_data(&flags, &(structs.hardware_struct.comm), &(structs.raw_sensor_struct)); + send_sensor_data(&flags, &(structs.hardware_struct.comm), &(structs.raw_sensor_struct)); // Process the sensor data and put it into sensor_struct sensor_processing(&(structs.log_struct), &(structs.user_input_struct), &(structs.raw_sensor_struct), &(structs.sensor_struct));