From 3c11c0d8d86fd4c61faf079a16710222aeed32af Mon Sep 17 00:00:00 2001 From: Miguel Arroyo <mayanez@users.noreply.github.com> Date: Thu, 7 Jul 2016 16:38:17 -0400 Subject: [PATCH] Adds Calibration Support for RPi2 and Navio2 (#4999) --- .../commander/accelerometer_calibration.cpp | 8 ++++---- src/modules/commander/gyro_calibration.cpp | 6 +++--- src/modules/commander/mag_calibration.cpp | 14 +++++++------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/modules/commander/accelerometer_calibration.cpp b/src/modules/commander/accelerometer_calibration.cpp index 6384d415aa..bdb18eaab9 100644 --- a/src/modules/commander/accelerometer_calibration.cpp +++ b/src/modules/commander/accelerometer_calibration.cpp @@ -175,7 +175,7 @@ typedef struct { int do_accel_calibration(orb_advert_t *mavlink_log_pub) { -#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_EAGLE) +#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_EAGLE) && !defined(__PX4_POSIX_RPI2) int fd; #endif @@ -195,7 +195,7 @@ int do_accel_calibration(orb_advert_t *mavlink_log_pub) /* reset all sensors */ for (unsigned s = 0; s < max_accel_sens; s++) { -#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_EAGLE) +#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_EAGLE) && !defined(__PX4_POSIX_RPI2) sprintf(str, "%s%u", ACCEL_BASE_DEVICE_PATH, s); /* reset all offsets to zero and all scales to one */ fd = px4_open(str, 0); @@ -329,7 +329,7 @@ int do_accel_calibration(orb_advert_t *mavlink_log_pub) return ERROR; } -#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_EAGLE) +#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_EAGLE) && !defined(__PX4_POSIX_RPI2) sprintf(str, "%s%u", ACCEL_BASE_DEVICE_PATH, i); fd = px4_open(str, 0); @@ -419,7 +419,7 @@ calibrate_return do_accel_calibration_measurements(orb_advert_t *mavlink_log_pub break; } -#if defined(__PX4_QURT) || defined(__PX4_POSIX_EAGLE) +#if defined(__PX4_QURT) || defined(__PX4_POSIX_EAGLE) || defined(__PX4_POSIX_RPI2) // For QURT respectively the driver framework, we need to get the device ID by copying one report. struct accel_report accel_report; orb_copy(ORB_ID(sensor_accel), worker_data.subs[i], &accel_report); diff --git a/src/modules/commander/gyro_calibration.cpp b/src/modules/commander/gyro_calibration.cpp index a9b005c0f7..3b0e6815df 100644 --- a/src/modules/commander/gyro_calibration.cpp +++ b/src/modules/commander/gyro_calibration.cpp @@ -186,7 +186,7 @@ int do_gyro_calibration(orb_advert_t *mavlink_log_pub) // Reset all offsets to 0 and scales to 1 (void)memcpy(&worker_data.gyro_scale[s], &gyro_scale_zero, sizeof(gyro_scale_zero)); -#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_EAGLE) +#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_EAGLE) && !defined(__PX4_POSIX_RPI2) sprintf(str, "%s%u", GYRO_BASE_DEVICE_PATH, s); int fd = px4_open(str, 0); if (fd >= 0) { @@ -239,7 +239,7 @@ int do_gyro_calibration(orb_advert_t *mavlink_log_pub) for (unsigned s = 0; s < gyro_count; s++) { worker_data.gyro_sensor_sub[s] = orb_subscribe_multi(ORB_ID(sensor_gyro), s); -#if defined(__PX4_QURT) || defined(__PX4_POSIX_EAGLE) +#if defined(__PX4_QURT) || defined(__PX4_POSIX_EAGLE) || defined(__PX4_POSIX_RPI2) // For QURT respectively the driver framework, we need to get the device ID by copying one report. struct gyro_report gyro_report; orb_copy(ORB_ID(sensor_gyro), worker_data.gyro_sensor_sub[s], &gyro_report); @@ -337,7 +337,7 @@ int do_gyro_calibration(orb_advert_t *mavlink_log_pub) (void)sprintf(str, "CAL_GYRO%u_ID", s); failed |= (OK != param_set_no_notification(param_find(str), &(worker_data.device_id[s]))); -#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_EAGLE) +#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_EAGLE) && !defined(__PX4_POSIX_RPI2) /* apply new scaling and offsets */ (void)sprintf(str, "%s%u", GYRO_BASE_DEVICE_PATH, s); int fd = px4_open(str, 0); diff --git a/src/modules/commander/mag_calibration.cpp b/src/modules/commander/mag_calibration.cpp index 8f589fb2c7..4d02260b40 100644 --- a/src/modules/commander/mag_calibration.cpp +++ b/src/modules/commander/mag_calibration.cpp @@ -124,7 +124,7 @@ int do_mag_calibration(orb_advert_t *mavlink_log_pub) _last_mag_progress = 0; for (unsigned cur_mag = 0; cur_mag < max_mags; cur_mag++) { -#ifndef __PX4_QURT +#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_RPI2) // Reset mag id to mag not available (void)sprintf(str, "CAL_MAG%u_ID", cur_mag); result = param_set_no_notification(param_find(str), &(device_ids[cur_mag])); @@ -166,7 +166,7 @@ int do_mag_calibration(orb_advert_t *mavlink_log_pub) #endif /* for calibration, commander will run on apps, so orb messages are used to get info from dsp */ -#ifndef __PX4_QURT +#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_RPI2) // Attempt to open mag (void)sprintf(str, "%s%u", MAG_BASE_DEVICE_PATH, cur_mag); int fd = px4_open(str, O_RDONLY); @@ -508,7 +508,7 @@ calibrate_return mag_calibrate_all(orb_advert_t *mavlink_log_pub) // Mag in this slot is available worker_data.sub_mag[cur_mag] = orb_subscribe_multi(ORB_ID(sensor_mag), cur_mag); -#ifdef __PX4_QURT +#if defined(__PX4_QURT) || defined(__PX4_POSIX_RPI2) // For QURT respectively the driver framework, we need to get the device ID by copying one report. struct mag_report mag_report; orb_copy(ORB_ID(sensor_mag), worker_data.sub_mag[cur_mag], &mag_report); @@ -664,7 +664,7 @@ calibrate_return mag_calibrate_all(orb_advert_t *mavlink_log_pub) for (unsigned cur_mag=0; cur_mag<max_mags; cur_mag++) { if (device_ids[cur_mag] != 0) { struct mag_calibration_s mscale; -#ifndef __PX4_QURT +#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_RPI2) int fd_mag = -1; // Set new scale @@ -688,7 +688,7 @@ calibrate_return mag_calibrate_all(orb_advert_t *mavlink_log_pub) mscale.y_offset = sphere_y[cur_mag]; mscale.z_offset = sphere_z[cur_mag]; -#ifndef __PX4_QURT +#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_RPI2) if (px4_ioctl(fd_mag, MAGIOCSSCALE, (long unsigned int)&mscale) != OK) { calibration_log_critical(mavlink_log_pub, CAL_ERROR_APPLY_CAL_MSG, cur_mag); result = calibrate_return_error; @@ -696,7 +696,7 @@ calibrate_return mag_calibrate_all(orb_advert_t *mavlink_log_pub) #endif } -#ifndef __PX4_QURT +#if !defined(__PX4_QURT) && !defined(__PX4_POSIX_RPI2) // Mag device no longer needed if (fd_mag >= 0) { px4_close(fd_mag); @@ -716,10 +716,10 @@ calibrate_return mag_calibrate_all(orb_advert_t *mavlink_log_pub) failed |= (OK != param_set_no_notification(param_find(str), &(mscale.y_offset))); (void)sprintf(str, "CAL_MAG%u_ZOFF", cur_mag); failed |= (OK != param_set_no_notification(param_find(str), &(mscale.z_offset))); - (void)sprintf(str, "CAL_MAG%u_XSCALE", cur_mag); // FIXME: scaling is not used right now on QURT #ifndef __PX4_QURT + (void)sprintf(str, "CAL_MAG%u_XSCALE", cur_mag); failed |= (OK != param_set_no_notification(param_find(str), &(mscale.x_scale))); (void)sprintf(str, "CAL_MAG%u_YSCALE", cur_mag); failed |= (OK != param_set_no_notification(param_find(str), &(mscale.y_scale))); -- GitLab