|navdata| does not need to be dynamically allocated.

This commit is contained in:
Ben Laurie
2013-09-08 06:31:14 +01:00
parent 0726043ac0
commit 508f5ebb40
5 changed files with 71 additions and 70 deletions
+2 -2
View File
@@ -77,8 +77,8 @@ void process_ardrone_baro(void)
{ {
if(baro.status == BS_RUNNING) { if(baro.status == BS_RUNNING) {
// first read temperature because pressure calibration depends on temperature // first read temperature because pressure calibration depends on temperature
baro.differential = baro_apply_calibration_temp(navdata->temperature_pressure); // We store the temperature in Baro-Diff baro.differential = baro_apply_calibration_temp(navdata.temperature_pressure); // We store the temperature in Baro-Diff
baro.absolute = baro_apply_calibration(navdata->pressure); baro.absolute = baro_apply_calibration(navdata.pressure);
} }
else { else {
if (baro_calibrated == TRUE) { if (baro_calibrated == TRUE) {
+37 -36
View File
@@ -54,6 +54,8 @@ typedef struct {
static navdata_port port; static navdata_port port;
static int nav_fd; static int nav_fd;
measures_t navdata;
static void navdata_write(const uint8_t *buf, size_t count) static void navdata_write(const uint8_t *buf, size_t count)
{ {
size_t written = 0; size_t written = 0;
@@ -112,7 +114,6 @@ int navdata_init()
cmd=0x01; cmd=0x01;
navdata_write(&cmd, 1); navdata_write(&cmd, 1);
navdata = malloc(sizeof(measures_t));
navdata_imu_available = 0; navdata_imu_available = 0;
navdata_baro_available = 0; navdata_baro_available = 0;
@@ -223,7 +224,7 @@ static void baro_update_logic(void)
if (lastpressval != 0) if (lastpressval != 0)
{ {
// If pressure was updated: this is a sync error // If pressure was updated: this is a sync error
if (lastpressval != navdata->pressure) if (lastpressval != navdata.pressure)
{ {
// wait for temp again // wait for temp again
temp_or_press_was_updated_last = 0; temp_or_press_was_updated_last = 0;
@@ -241,7 +242,7 @@ static void baro_update_logic(void)
if (lasttempval != 0) if (lasttempval != 0)
{ {
// If temp was updated: this is a sync error // If temp was updated: this is a sync error
if (lasttempval != navdata->temperature_pressure) if (lasttempval != navdata.temperature_pressure)
{ {
// wait for press again // wait for press again
temp_or_press_was_updated_last = 1; temp_or_press_was_updated_last = 1;
@@ -252,8 +253,8 @@ static void baro_update_logic(void)
navdata_baro_available = 1; navdata_baro_available = 1;
} }
lastpressval = navdata->pressure; lastpressval = navdata.pressure;
lasttempval = navdata->temperature_pressure; lasttempval = navdata.temperature_pressure;
// debug // debug
// navdata->temperature_pressure = sync_errors; // navdata->temperature_pressure = sync_errors;
@@ -273,15 +274,15 @@ void navdata_update()
// if ( navdata_checksum() == 0 ) // if ( navdata_checksum() == 0 )
{ {
assert(sizeof navdata == NAVDATA_PACKET_SIZE); assert(sizeof navdata == NAVDATA_PACKET_SIZE);
memcpy(navdata, port.buffer, NAVDATA_PACKET_SIZE); memcpy(&navdata, port.buffer, NAVDATA_PACKET_SIZE);
// Invert byte order so that TELEMETRY works better // Invert byte order so that TELEMETRY works better
uint8_t tmp; uint8_t tmp;
uint8_t* p = (uint8_t*) &(navdata->pressure); uint8_t* p = (uint8_t*) &(navdata.pressure);
tmp = p[0]; tmp = p[0];
p[0] = p[1]; p[0] = p[1];
p[1] = tmp; p[1] = tmp;
p = (uint8_t*) &(navdata->temperature_pressure); p = (uint8_t*) &(navdata.temperature_pressure);
tmp = p[0]; tmp = p[0];
p[0] = p[1]; p[0] = p[1];
p[1] = tmp; p[1] = tmp;
@@ -326,13 +327,13 @@ void navdata_CropBuffer(int cropsize)
int16_t navdata_getHeight() { int16_t navdata_getHeight() {
if (navdata->ultrasound > 10000) { if (navdata.ultrasound > 10000) {
return previousUltrasoundHeight; return previousUltrasoundHeight;
} }
int16_t ultrasoundHeight = 0; int16_t ultrasoundHeight = 0;
ultrasoundHeight = (navdata->ultrasound - 880) / 26.553; ultrasoundHeight = (navdata.ultrasound - 880) / 26.553;
previousUltrasoundHeight = ultrasoundHeight; previousUltrasoundHeight = ultrasoundHeight;
@@ -342,32 +343,32 @@ int16_t navdata_getHeight() {
// The checksum should be calculated here: we don't know the algorithm // The checksum should be calculated here: we don't know the algorithm
uint16_t navdata_checksum() { uint16_t navdata_checksum() {
navdata_cks = 0; navdata_cks = 0;
navdata_cks += navdata->nu_trame; navdata_cks += navdata.nu_trame;
navdata_cks += navdata->ax; navdata_cks += navdata.ax;
navdata_cks += navdata->ay; navdata_cks += navdata.ay;
navdata_cks += navdata->az; navdata_cks += navdata.az;
navdata_cks += navdata->vx; navdata_cks += navdata.vx;
navdata_cks += navdata->vy; navdata_cks += navdata.vy;
navdata_cks += navdata->vz; navdata_cks += navdata.vz;
navdata_cks += navdata->temperature_acc; navdata_cks += navdata.temperature_acc;
navdata_cks += navdata->temperature_gyro; navdata_cks += navdata.temperature_gyro;
navdata_cks += navdata->ultrasound; navdata_cks += navdata.ultrasound;
navdata_cks += navdata->us_debut_echo; navdata_cks += navdata.us_debut_echo;
navdata_cks += navdata->us_fin_echo; navdata_cks += navdata.us_fin_echo;
navdata_cks += navdata->us_association_echo; navdata_cks += navdata.us_association_echo;
navdata_cks += navdata->us_distance_echo; navdata_cks += navdata.us_distance_echo;
navdata_cks += navdata->us_curve_time; navdata_cks += navdata.us_curve_time;
navdata_cks += navdata->us_curve_value; navdata_cks += navdata.us_curve_value;
navdata_cks += navdata->us_curve_ref; navdata_cks += navdata.us_curve_ref;
navdata_cks += navdata->nb_echo; navdata_cks += navdata.nb_echo;
navdata_cks += navdata->sum_echo; navdata_cks += navdata.sum_echo;
navdata_cks += navdata->gradient; navdata_cks += navdata.gradient;
navdata_cks += navdata->flag_echo_ini; navdata_cks += navdata.flag_echo_ini;
navdata_cks += navdata->pressure; navdata_cks += navdata.pressure;
navdata_cks += navdata->temperature_pressure; navdata_cks += navdata.temperature_pressure;
navdata_cks += navdata->mx; navdata_cks += navdata.mx;
navdata_cks += navdata->my; navdata_cks += navdata.my;
navdata_cks += navdata->mz; navdata_cks += navdata.mz;
// navdata_cks += navdata->chksum; // navdata_cks += navdata->chksum;
return 0; // we dont know how to calculate the checksum return 0; // we dont know how to calculate the checksum
+1 -1
View File
@@ -94,7 +94,7 @@ struct bmp180_baro_calibration
int32_t b5; int32_t b5;
}; };
measures_t* navdata; extern measures_t navdata;
struct bmp180_baro_calibration baro_calibration; struct bmp180_baro_calibration baro_calibration;
uint16_t navdata_cks; uint16_t navdata_cks;
uint8_t navdata_imu_available; uint8_t navdata_imu_available;
+28 -28
View File
@@ -956,34 +956,34 @@
#ifdef ARDRONE2_RAW #ifdef ARDRONE2_RAW
#include "navdata.h" #include "navdata.h"
#define PERIODIC_SEND_ARDRONE_NAVDATA(_trans, _dev) DOWNLINK_SEND_ARDRONE_NAVDATA(_trans, _dev, \ #define PERIODIC_SEND_ARDRONE_NAVDATA(_trans, _dev) DOWNLINK_SEND_ARDRONE_NAVDATA(_trans, _dev, \
&navdata->taille, \ &navdata.taille, \
&navdata->nu_trame, \ &navdata.nu_trame, \
&navdata->ax, \ &navdata.ax, \
&navdata->ay, \ &navdata.ay, \
&navdata->az, \ &navdata.az, \
&navdata->vx, \ &navdata.vx, \
&navdata->vy, \ &navdata.vy, \
&navdata->vz, \ &navdata.vz, \
&navdata->temperature_acc, \ &navdata.temperature_acc, \
&navdata->temperature_gyro, \ &navdata.temperature_gyro, \
&navdata->ultrasound, \ &navdata.ultrasound, \
&navdata->us_debut_echo, \ &navdata.us_debut_echo, \
&navdata->us_fin_echo, \ &navdata.us_fin_echo, \
&navdata->us_association_echo, \ &navdata.us_association_echo, \
&navdata->us_distance_echo, \ &navdata.us_distance_echo, \
&navdata->us_curve_time, \ &navdata.us_curve_time, \
&navdata->us_curve_value, \ &navdata.us_curve_value, \
&navdata->us_curve_ref, \ &navdata.us_curve_ref, \
&navdata->nb_echo, \ &navdata.nb_echo, \
&navdata->sum_echo, \ &navdata.sum_echo, \
&navdata->gradient, \ &navdata.gradient, \
&navdata->flag_echo_ini, \ &navdata.flag_echo_ini, \
&navdata->pressure, \ &navdata.pressure, \
&navdata->temperature_pressure, \ &navdata.temperature_pressure, \
&navdata->mx, \ &navdata.mx, \
&navdata->my, \ &navdata.my, \
&navdata->mz, \ &navdata.mz, \
&navdata->chksum \ &navdata.chksum \
) )
#else #else
#define PERIODIC_SEND_ARDRONE_NAVDATA(_trans, _dev) {} #define PERIODIC_SEND_ARDRONE_NAVDATA(_trans, _dev) {}
@@ -116,9 +116,9 @@ static inline void imu_ardrone2_event ( void (* _gyro_handler)(void), void (* _a
//checks if the navboard has a new dataset ready //checks if the navboard has a new dataset ready
if (navdata_imu_available == TRUE) { if (navdata_imu_available == TRUE) {
navdata_imu_available = FALSE; navdata_imu_available = FALSE;
RATES_ASSIGN(imu.gyro_unscaled, navdata->vx, -navdata->vy, -navdata->vz); RATES_ASSIGN(imu.gyro_unscaled, navdata.vx, -navdata.vy, -navdata.vz);
VECT3_ASSIGN(imu.accel_unscaled, navdata->ax, 4096-navdata->ay, 4096-navdata->az); VECT3_ASSIGN(imu.accel_unscaled, navdata.ax, 4096-navdata.ay, 4096-navdata.az);
VECT3_ASSIGN(imu.mag_unscaled, -navdata->mx, -navdata->my, -navdata->mz); VECT3_ASSIGN(imu.mag_unscaled, -navdata.mx, -navdata.my, -navdata.mz);
_gyro_handler(); _gyro_handler();
_accel_handler(); _accel_handler();