|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) {
// 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.absolute = baro_apply_calibration(navdata->pressure);
baro.differential = baro_apply_calibration_temp(navdata.temperature_pressure); // We store the temperature in Baro-Diff
baro.absolute = baro_apply_calibration(navdata.pressure);
}
else {
if (baro_calibrated == TRUE) {
+37 -36
View File
@@ -54,6 +54,8 @@ typedef struct {
static navdata_port port;
static int nav_fd;
measures_t navdata;
static void navdata_write(const uint8_t *buf, size_t count)
{
size_t written = 0;
@@ -112,7 +114,6 @@ int navdata_init()
cmd=0x01;
navdata_write(&cmd, 1);
navdata = malloc(sizeof(measures_t));
navdata_imu_available = 0;
navdata_baro_available = 0;
@@ -223,7 +224,7 @@ static void baro_update_logic(void)
if (lastpressval != 0)
{
// If pressure was updated: this is a sync error
if (lastpressval != navdata->pressure)
if (lastpressval != navdata.pressure)
{
// wait for temp again
temp_or_press_was_updated_last = 0;
@@ -241,7 +242,7 @@ static void baro_update_logic(void)
if (lasttempval != 0)
{
// If temp was updated: this is a sync error
if (lasttempval != navdata->temperature_pressure)
if (lasttempval != navdata.temperature_pressure)
{
// wait for press again
temp_or_press_was_updated_last = 1;
@@ -252,8 +253,8 @@ static void baro_update_logic(void)
navdata_baro_available = 1;
}
lastpressval = navdata->pressure;
lasttempval = navdata->temperature_pressure;
lastpressval = navdata.pressure;
lasttempval = navdata.temperature_pressure;
// debug
// navdata->temperature_pressure = sync_errors;
@@ -273,15 +274,15 @@ void navdata_update()
// if ( navdata_checksum() == 0 )
{
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
uint8_t tmp;
uint8_t* p = (uint8_t*) &(navdata->pressure);
uint8_t* p = (uint8_t*) &(navdata.pressure);
tmp = p[0];
p[0] = p[1];
p[1] = tmp;
p = (uint8_t*) &(navdata->temperature_pressure);
p = (uint8_t*) &(navdata.temperature_pressure);
tmp = p[0];
p[0] = p[1];
p[1] = tmp;
@@ -326,13 +327,13 @@ void navdata_CropBuffer(int cropsize)
int16_t navdata_getHeight() {
if (navdata->ultrasound > 10000) {
if (navdata.ultrasound > 10000) {
return previousUltrasoundHeight;
}
int16_t ultrasoundHeight = 0;
ultrasoundHeight = (navdata->ultrasound - 880) / 26.553;
ultrasoundHeight = (navdata.ultrasound - 880) / 26.553;
previousUltrasoundHeight = ultrasoundHeight;
@@ -342,32 +343,32 @@ int16_t navdata_getHeight() {
// The checksum should be calculated here: we don't know the algorithm
uint16_t navdata_checksum() {
navdata_cks = 0;
navdata_cks += navdata->nu_trame;
navdata_cks += navdata->ax;
navdata_cks += navdata->ay;
navdata_cks += navdata->az;
navdata_cks += navdata->vx;
navdata_cks += navdata->vy;
navdata_cks += navdata->vz;
navdata_cks += navdata->temperature_acc;
navdata_cks += navdata->temperature_gyro;
navdata_cks += navdata->ultrasound;
navdata_cks += navdata->us_debut_echo;
navdata_cks += navdata->us_fin_echo;
navdata_cks += navdata->us_association_echo;
navdata_cks += navdata->us_distance_echo;
navdata_cks += navdata->us_curve_time;
navdata_cks += navdata->us_curve_value;
navdata_cks += navdata->us_curve_ref;
navdata_cks += navdata->nb_echo;
navdata_cks += navdata->sum_echo;
navdata_cks += navdata->gradient;
navdata_cks += navdata->flag_echo_ini;
navdata_cks += navdata->pressure;
navdata_cks += navdata->temperature_pressure;
navdata_cks += navdata->mx;
navdata_cks += navdata->my;
navdata_cks += navdata->mz;
navdata_cks += navdata.nu_trame;
navdata_cks += navdata.ax;
navdata_cks += navdata.ay;
navdata_cks += navdata.az;
navdata_cks += navdata.vx;
navdata_cks += navdata.vy;
navdata_cks += navdata.vz;
navdata_cks += navdata.temperature_acc;
navdata_cks += navdata.temperature_gyro;
navdata_cks += navdata.ultrasound;
navdata_cks += navdata.us_debut_echo;
navdata_cks += navdata.us_fin_echo;
navdata_cks += navdata.us_association_echo;
navdata_cks += navdata.us_distance_echo;
navdata_cks += navdata.us_curve_time;
navdata_cks += navdata.us_curve_value;
navdata_cks += navdata.us_curve_ref;
navdata_cks += navdata.nb_echo;
navdata_cks += navdata.sum_echo;
navdata_cks += navdata.gradient;
navdata_cks += navdata.flag_echo_ini;
navdata_cks += navdata.pressure;
navdata_cks += navdata.temperature_pressure;
navdata_cks += navdata.mx;
navdata_cks += navdata.my;
navdata_cks += navdata.mz;
// navdata_cks += navdata->chksum;
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;
};
measures_t* navdata;
extern measures_t navdata;
struct bmp180_baro_calibration baro_calibration;
uint16_t navdata_cks;
uint8_t navdata_imu_available;
+28 -28
View File
@@ -956,34 +956,34 @@
#ifdef ARDRONE2_RAW
#include "navdata.h"
#define PERIODIC_SEND_ARDRONE_NAVDATA(_trans, _dev) DOWNLINK_SEND_ARDRONE_NAVDATA(_trans, _dev, \
&navdata->taille, \
&navdata->nu_trame, \
&navdata->ax, \
&navdata->ay, \
&navdata->az, \
&navdata->vx, \
&navdata->vy, \
&navdata->vz, \
&navdata->temperature_acc, \
&navdata->temperature_gyro, \
&navdata->ultrasound, \
&navdata->us_debut_echo, \
&navdata->us_fin_echo, \
&navdata->us_association_echo, \
&navdata->us_distance_echo, \
&navdata->us_curve_time, \
&navdata->us_curve_value, \
&navdata->us_curve_ref, \
&navdata->nb_echo, \
&navdata->sum_echo, \
&navdata->gradient, \
&navdata->flag_echo_ini, \
&navdata->pressure, \
&navdata->temperature_pressure, \
&navdata->mx, \
&navdata->my, \
&navdata->mz, \
&navdata->chksum \
&navdata.taille, \
&navdata.nu_trame, \
&navdata.ax, \
&navdata.ay, \
&navdata.az, \
&navdata.vx, \
&navdata.vy, \
&navdata.vz, \
&navdata.temperature_acc, \
&navdata.temperature_gyro, \
&navdata.ultrasound, \
&navdata.us_debut_echo, \
&navdata.us_fin_echo, \
&navdata.us_association_echo, \
&navdata.us_distance_echo, \
&navdata.us_curve_time, \
&navdata.us_curve_value, \
&navdata.us_curve_ref, \
&navdata.nb_echo, \
&navdata.sum_echo, \
&navdata.gradient, \
&navdata.flag_echo_ini, \
&navdata.pressure, \
&navdata.temperature_pressure, \
&navdata.mx, \
&navdata.my, \
&navdata.mz, \
&navdata.chksum \
)
#else
#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
if (navdata_imu_available == TRUE) {
navdata_imu_available = FALSE;
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.mag_unscaled, -navdata->mx, -navdata->my, -navdata->mz);
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.mag_unscaled, -navdata.mx, -navdata.my, -navdata.mz);
_gyro_handler();
_accel_handler();