From 9e8db90b08ae3f004b14dbfc3ed3fb83ff462ee4 Mon Sep 17 00:00:00 2001 From: bertucci <bertucci@iastate.edu> Date: Sun, 7 Apr 2019 18:29:11 -0500 Subject: [PATCH] The work continues --- quad/src/quad_app/debug_rt.c | 122 ++++++++++++++++++----------------- quad/src/quad_app/debug_rt.h | 3 +- quad/src/quad_app/quad_app.c | 6 +- 3 files changed, 69 insertions(+), 62 deletions(-) diff --git a/quad/src/quad_app/debug_rt.c b/quad/src/quad_app/debug_rt.c index 8df1844b8..f4bd83f24 100644 --- a/quad/src/quad_app/debug_rt.c +++ b/quad/src/quad_app/debug_rt.c @@ -19,7 +19,7 @@ void initializeFlags(SensorRTFlags_t * flags) { flags -> optflowflags = calloc(1, sizeof(OptFlowFlags_t)); flags -> lidarflags = calloc(1, sizeof(lidarFlags_t)); flags -> errorflags = calloc(1, sizeof(SensorErrorFlags_t)); - + flags -> flag_count = 0; } void freeFlags(SensorRTFlags_t * flags){ @@ -27,6 +27,7 @@ void freeFlags(SensorRTFlags_t * flags){ free(flags -> optflowflags); free(flags -> lidarflags); free(flags -> errorflags); + free(flags -> flag_count); free(flags); } @@ -71,13 +72,14 @@ int process_configuration_packet(u32 configData, SensorRTFlags_t * flags) 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); + flags -> errorflags -> consec_imu = read_bit(configData, 10); size += read_bit(configData, 10); + flags -> flag_count = size; return size; } -int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * flags, int size) +int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * flags) { - char * payload = malloc(sizeof(u32) * size); + char * payload = malloc(sizeof(u32) * (flags -> flag_count)); int currentPosition = 0; /* Since it's calloced (all zeros), a simple & operation should set this properly @@ -86,8 +88,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> lidar.distance_m) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> lidar.distance_m) / 8; - payload[currentPosition] = (u32)(data -> lidar.distance_m); - currentPosition++; + payload[currentPosition] = (u32)(data -> lidar.distance_m); + currentPosition++; } if(flags -> optflowflags -> x_flow) @@ -95,10 +97,10 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u64)(data -> optical_flow.flow_x_rad) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> optical_flow.flow_x_rad) / 8; - payload[currentPosition] = ((u64)(data -> optical_flow.flow_x_rad)) >> 32; //MSB - currentPosition++; - payload[currentPosition] = ((u64)(data -> optical_flow.flow_x_rad)) & 0x00000000FFFFFFFF; //LSB - currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.flow_x_rad)) >> 32; //MSB + currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.flow_x_rad)) & 0x00000000FFFFFFFF; //LSB + currentPosition++; } if(flags -> optflowflags -> y_flow) @@ -106,10 +108,10 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u64)(data -> optical_flow.flow_y_rad) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> optical_flow.flow_y_rad) / 8; - payload[currentPosition] = ((u64)(data -> optical_flow.flow_y_rad)) >> 32; //MSB - currentPosition++; - payload[currentPosition] = ((u64)(data -> optical_flow.flow_y_rad)) & 0x00000000FFFFFFFF; //LSB - currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.flow_y_rad)) >> 32; //MSB + currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.flow_y_rad)) & 0x00000000FFFFFFFF; //LSB + currentPosition++; } if(flags -> optflowflags -> x_filter) @@ -117,10 +119,10 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u64)(data -> optical_flow.xVelFilt) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> optical_flow.xVelFilt) / 8; - payload[currentPosition] = ((u64)(data -> optical_flow.xVelFilt)) >> 32; //MSB - currentPosition++; - payload[currentPosition] = ((u64)(data -> optical_flow.xVelFilt)) & 0x00000000FFFFFFFF; //LSB - currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.xVelFilt)) >> 32; //MSB + currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.xVelFilt)) & 0x00000000FFFFFFFF; //LSB + currentPosition++; } if(flags -> optflowflags -> y_filter) @@ -128,20 +130,20 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u64)(data -> optical_flow.yVelFilt) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> optical_flow.yVelFilt) / 8; - payload[currentPosition] = ((u64)(data -> optical_flow.yVelFilt)) >> 32; //MSB - currentPosition++; - payload[currentPosition] = ((u64)(data -> optical_flow.yVelFilt)) & 0x00000000FFFFFFFF; //LSB - currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.yVelFilt)) >> 32; //MSB + currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.yVelFilt)) & 0x00000000FFFFFFFF; //LSB + currentPosition++; } if(flags -> optflowflags -> x_velocity) { //(*payload) |= ((u64)(data -> optical_flow.xVel) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> optical_flow.xVel) / 8; - payload[currentPosition] = ((u64)(data -> optical_flow.xVel)) >> 32; //MSB - currentPosition++; - payload[currentPosition] = ((u64)(data -> optical_flow.xVel)) & 0x00000000FFFFFFFF; //LSB - currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.xVel)) >> 32; //MSB + currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.xVel)) & 0x00000000FFFFFFFF; //LSB + currentPosition++; } if(flags -> optflowflags -> y_velocity) @@ -149,10 +151,10 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u64)(data -> optical_flow.yVel) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> optical_flow.xVel) / 8; - payload[currentPosition] = ((u64)(data -> optical_flow.yVel)) >> 32; //MSB - currentPosition++; - payload[currentPosition] = ((u64)(data -> optical_flow.yVel)) & 0x00000000FFFFFFFF; //LSB - currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.yVel)) >> 32; //MSB + currentPosition++; + payload[currentPosition] = ((u64)(data -> optical_flow.yVel)) & 0x00000000FFFFFFFF; //LSB + currentPosition++; } if(flags -> imuflags -> gyro_x) @@ -160,8 +162,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.gyro_xVel_p) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> gam.gyro_xVel_p) / 8; - payload[currentPosition] = (u32)(data -> gam.gyro_xVel_p); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.gyro_xVel_p); + currentPosition++; } if(flags -> imuflags -> gyro_y) @@ -169,8 +171,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.gyro_yVel_q) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> gam.gyro_yVel_q) / 8; - payload[currentPosition] = (u32)(data -> gam.gyro_yVel_q); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.gyro_yVel_q); + currentPosition++; } if(flags -> imuflags -> gyro_z) @@ -178,8 +180,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.gyro_zVel_r) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> gam.gyro_zVel_r) / 8; - payload[currentPosition] = (u32)(data -> gam.gyro_zVel_r); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.gyro_zVel_r); + currentPosition++; } if(flags -> imuflags -> acc_x) @@ -187,8 +189,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.accel_x) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data->gam.accel_x) / 8; - payload[currentPosition] = (u32)(data -> gam.accel_x); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.accel_x); + currentPosition++; } if(flags -> imuflags -> acc_y) @@ -196,8 +198,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.accel_y) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> gam.accel_y) / 8; - payload[currentPosition] = (u32)(data -> gam.accel_y); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.accel_y); + currentPosition++; } if(flags -> imuflags -> acc_z) @@ -205,8 +207,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.accel_z) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> gam.accel_z) / 8; - payload[currentPosition] = (u32)(data -> gam.accel_z); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.accel_z); + currentPosition++; } if(flags -> imuflags -> mag_x) @@ -214,8 +216,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.mag_x) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> gam.mag_x) / 8; - payload[currentPosition] = (u32)(data -> gam.mag_x); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.mag_x); + currentPosition++; } if(flags -> imuflags -> mag_y) @@ -223,8 +225,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.mag_y) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data->gam.mag_y) / 8; - payload[currentPosition] = (u32)(data -> gam.mag_y); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.mag_y); + currentPosition++; } if(flags -> imuflags -> mag_z) @@ -232,8 +234,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.mag_z) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> gam.mag_z) / 8; - payload[currentPosition] = (u32)(data -> gam.mag_z); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.mag_z); + currentPosition++; } if(flags -> errorflags -> lidar) @@ -241,8 +243,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> lidar.error.errorCount) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> lidar.error.errorCount) / 8; - payload[currentPosition] = (u32)(data -> lidar.error.errorCount); - currentPosition++; + payload[currentPosition] = (u32)(data -> lidar.error.errorCount); + currentPosition++; } if(flags -> errorflags -> consec_lidar) @@ -250,8 +252,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> lidar.error.consErrorCount) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> lidar.error.consErrorCount) / 8; - payload[currentPosition] = (u32)(data -> lidar.error.consErrorCount); - currentPosition++; + payload[currentPosition] = (u32)(data -> lidar.error.consErrorCount); + currentPosition++; } if(flags -> errorflags -> optFlow) @@ -259,8 +261,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> optical_flow.error.errorCount) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> optical_flow.error.errorCount) / 8; - payload[currentPosition] = (u32)(data -> optical_flow.error.errorCount); - currentPosition++; + payload[currentPosition] = (u32)(data -> optical_flow.error.errorCount); + currentPosition++; } if(flags -> errorflags -> consec_optFlow) @@ -268,8 +270,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> optical_flow.error.consErrorCount) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> optical_flow.error.consErrorCount) / 8; - payload[currentPosition] = (u32)(data -> optical_flow.error.consErrorCount); - currentPosition++; + payload[currentPosition] = (u32)(data -> optical_flow.error.consErrorCount); + currentPosition++; } if(flags -> errorflags -> imu) @@ -277,8 +279,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.error.errorCount) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> gam.error.errorCount) / 8; - payload[currentPosition] = (u32)(data -> gam.error.errorCount); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.error.errorCount); + currentPosition++; } if(flags -> errorflags -> consec_imu) @@ -286,8 +288,8 @@ int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * //(*payload) |= ((u32)(data -> gam.error.consErrorCount) << (currentBytePosition * 8)); //currentBytePosition += sizeof(data -> gam.error.consErrorCount) / 8; - payload[currentPosition] = (u32)(data -> gam.error.consErrorCount); - currentPosition++; + payload[currentPosition] = (u32)(data -> gam.error.consErrorCount); + currentPosition++; } int bytes_sent = send_data(comm->uart, SEND_RT_ID, 0, (u8*)payload, strlen(payload)); diff --git a/quad/src/quad_app/debug_rt.h b/quad/src/quad_app/debug_rt.h index 516f9d0ab..2393c9f50 100644 --- a/quad/src/quad_app/debug_rt.h +++ b/quad/src/quad_app/debug_rt.h @@ -54,6 +54,7 @@ typedef struct SensorRTFlags OptFlowFlags_t * optflowflags; lidarFlags_t * lidarflags; SensorErrorFlags_t * errorflags; + int flag_count; }SensorRTFlags_t; @@ -63,7 +64,7 @@ void initializeFlags( SensorRTFlags_t * flag_pointer); void freeFlags(SensorRTFlags_t * flags); -int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * flags, int size); +int send_RT_data(struct CommDriver *comm, raw_sensor_t * data, SensorRTFlags_t * flags); 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 fee17bff7..b30736f3a 100644 --- a/quad/src/quad_app/quad_app.c +++ b/quad/src/quad_app/quad_app.c @@ -37,6 +37,8 @@ int quad_main(int (*setup_hardware)(hardware_t *hardware_struct)) // Xilinx Platform, Loop Timer, Control Algorithm int init_error = init_structs(&(structs)); + int rt_configured_size = 0; + if (init_error != 0) { return -1; } @@ -66,7 +68,9 @@ 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)); + if (rt_configured_size != 0) + send_RT_data(&(structs.hardware_struct.comm), &(structs.raw_sensor_struct), &flags, rt_configured_size); // 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)); -- GitLab