Improved self-test logic

This commit is contained in:
Lorenz Meier
2012-11-15 17:19:21 +01:00
parent 74d543cfc9
commit df5e4d1904
2 changed files with 14 additions and 4 deletions
+3 -1
View File
@@ -634,7 +634,9 @@ HMC5883::ioctl(struct file *filp, int cmd, unsigned long arg)
case MAGIOCSSCALE: case MAGIOCSSCALE:
/* set new scale factors */ /* set new scale factors */
memcpy(&_scale, (mag_scale *)arg, sizeof(_scale)); memcpy(&_scale, (mag_scale *)arg, sizeof(_scale));
return check_calibration(); /* check calibration, but not actually return an error */
(void)check_calibration();
return 0;
case MAGIOCGSCALE: case MAGIOCGSCALE:
/* copy out scale factors */ /* copy out scale factors */
+10 -2
View File
@@ -610,9 +610,17 @@ MPU6000::ioctl(struct file *filp, int cmd, unsigned long arg)
return -EINVAL; return -EINVAL;
case ACCELIOCSSCALE: case ACCELIOCSSCALE:
/* copy scale in */ {
memcpy(&_accel_scale, (struct accel_scale *) arg, sizeof(_accel_scale)); /* copy scale, but only if off by a few percent */
struct accel_scale *s = (struct accel_scale *) arg;
float sum = s->x_scale + s->y_scale + s->z_scale;
if (sum > 2.0f && sum < 4.0f) {
memcpy(&_accel_scale, s, sizeof(_accel_scale));
return OK; return OK;
} else {
return -EINVAL;
}
}
case ACCELIOCGSCALE: case ACCELIOCGSCALE:
/* copy scale out */ /* copy scale out */