mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-04 05:42:49 +08:00
|navdata| does not need to be dynamically allocated.
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user