mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-18 05:45:31 +03:00
Used device pointer in detect functions
This commit is contained in:
parent
4bb6820c42
commit
a47c073874
10 changed files with 39 additions and 36 deletions
|
@ -42,6 +42,9 @@
|
||||||
#include "accgyro_spi_mpu9250.h"
|
#include "accgyro_spi_mpu9250.h"
|
||||||
#include "compass_ak8963.h"
|
#include "compass_ak8963.h"
|
||||||
|
|
||||||
|
void ak8963Init(void);
|
||||||
|
bool ak8963Read(int16_t *magData);
|
||||||
|
|
||||||
// This sensor is available in MPU-9250.
|
// This sensor is available in MPU-9250.
|
||||||
|
|
||||||
// AK8963, mag sensor address
|
// AK8963, mag sensor address
|
||||||
|
|
|
@ -18,5 +18,3 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
bool ak8963Detect(magDev_t *mag);
|
bool ak8963Detect(magDev_t *mag);
|
||||||
void ak8963Init(void);
|
|
||||||
bool ak8963Read(int16_t *magData);
|
|
||||||
|
|
|
@ -37,6 +37,9 @@
|
||||||
|
|
||||||
#include "compass_ak8975.h"
|
#include "compass_ak8975.h"
|
||||||
|
|
||||||
|
void ak8975Init(void);
|
||||||
|
bool ak8975Read(int16_t *magData);
|
||||||
|
|
||||||
// This sensor is available in MPU-9150.
|
// This sensor is available in MPU-9150.
|
||||||
|
|
||||||
// AK8975, mag sensor address
|
// AK8975, mag sensor address
|
||||||
|
|
|
@ -18,5 +18,3 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
bool ak8975Detect(magDev_t *mag);
|
bool ak8975Detect(magDev_t *mag);
|
||||||
void ak8975Init(void);
|
|
||||||
bool ak8975Read(int16_t *magData);
|
|
||||||
|
|
|
@ -32,13 +32,12 @@
|
||||||
|
|
||||||
static int16_t fakeMagData[XYZ_AXIS_COUNT];
|
static int16_t fakeMagData[XYZ_AXIS_COUNT];
|
||||||
|
|
||||||
static bool fakeMagInit(void)
|
static void fakeMagInit(void)
|
||||||
{
|
{
|
||||||
// initially point north
|
// initially point north
|
||||||
fakeMagData[X] = 4096;
|
fakeMagData[X] = 4096;
|
||||||
fakeMagData[Y] = 0;
|
fakeMagData[Y] = 0;
|
||||||
fakeMagData[Z] = 0;
|
fakeMagData[Z] = 0;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void fakeMagSet(int16_t x, int16_t y, int16_t z)
|
void fakeMagSet(int16_t x, int16_t y, int16_t z)
|
||||||
|
|
|
@ -41,6 +41,9 @@
|
||||||
|
|
||||||
#include "compass_hmc5883l.h"
|
#include "compass_hmc5883l.h"
|
||||||
|
|
||||||
|
void hmc5883lInit(void);
|
||||||
|
bool hmc5883lRead(int16_t *magData);
|
||||||
|
|
||||||
//#define DEBUG_MAG_DATA_READY_INTERRUPT
|
//#define DEBUG_MAG_DATA_READY_INTERRUPT
|
||||||
|
|
||||||
// HMC5883L, default address 0x1E
|
// HMC5883L, default address 0x1E
|
||||||
|
|
|
@ -24,5 +24,3 @@ typedef struct hmc5883Config_s {
|
||||||
} hmc5883Config_t;
|
} hmc5883Config_t;
|
||||||
|
|
||||||
bool hmc5883lDetect(magDev_t* mag, const hmc5883Config_t *hmc5883ConfigToUse);
|
bool hmc5883lDetect(magDev_t* mag, const hmc5883Config_t *hmc5883ConfigToUse);
|
||||||
void hmc5883lInit(void);
|
|
||||||
bool hmc5883lRead(int16_t *magData);
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ bool accDetect(accDev_t *dev, accelerationSensor_e accHardwareToUse)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
acc.dev.accAlign = ALIGN_DEFAULT;
|
dev->accAlign = ALIGN_DEFAULT;
|
||||||
|
|
||||||
switch (accHardwareToUse) {
|
switch (accHardwareToUse) {
|
||||||
case ACC_DEFAULT:
|
case ACC_DEFAULT:
|
||||||
|
@ -99,7 +99,7 @@ retry:
|
||||||
if (adxl345Detect(&acc_params, dev)) {
|
if (adxl345Detect(&acc_params, dev)) {
|
||||||
#endif
|
#endif
|
||||||
#ifdef ACC_ADXL345_ALIGN
|
#ifdef ACC_ADXL345_ALIGN
|
||||||
acc.dev.accAlign = ACC_ADXL345_ALIGN;
|
dev->accAlign = ACC_ADXL345_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
accHardware = ACC_ADXL345;
|
accHardware = ACC_ADXL345;
|
||||||
break;
|
break;
|
||||||
|
@ -110,7 +110,7 @@ retry:
|
||||||
#ifdef USE_ACC_LSM303DLHC
|
#ifdef USE_ACC_LSM303DLHC
|
||||||
if (lsm303dlhcAccDetect(dev)) {
|
if (lsm303dlhcAccDetect(dev)) {
|
||||||
#ifdef ACC_LSM303DLHC_ALIGN
|
#ifdef ACC_LSM303DLHC_ALIGN
|
||||||
acc.dev.accAlign = ACC_LSM303DLHC_ALIGN;
|
dev->accAlign = ACC_LSM303DLHC_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
accHardware = ACC_LSM303DLHC;
|
accHardware = ACC_LSM303DLHC;
|
||||||
break;
|
break;
|
||||||
|
@ -121,7 +121,7 @@ retry:
|
||||||
#ifdef USE_ACC_MPU6050
|
#ifdef USE_ACC_MPU6050
|
||||||
if (mpu6050AccDetect(dev)) {
|
if (mpu6050AccDetect(dev)) {
|
||||||
#ifdef ACC_MPU6050_ALIGN
|
#ifdef ACC_MPU6050_ALIGN
|
||||||
acc.dev.accAlign = ACC_MPU6050_ALIGN;
|
dev->accAlign = ACC_MPU6050_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
accHardware = ACC_MPU6050;
|
accHardware = ACC_MPU6050;
|
||||||
break;
|
break;
|
||||||
|
@ -137,7 +137,7 @@ retry:
|
||||||
if (mma8452Detect(dev)) {
|
if (mma8452Detect(dev)) {
|
||||||
#endif
|
#endif
|
||||||
#ifdef ACC_MMA8452_ALIGN
|
#ifdef ACC_MMA8452_ALIGN
|
||||||
acc.dev.accAlign = ACC_MMA8452_ALIGN;
|
dev->accAlign = ACC_MMA8452_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
accHardware = ACC_MMA8452;
|
accHardware = ACC_MMA8452;
|
||||||
break;
|
break;
|
||||||
|
@ -148,7 +148,7 @@ retry:
|
||||||
#ifdef USE_ACC_BMA280
|
#ifdef USE_ACC_BMA280
|
||||||
if (bma280Detect(dev)) {
|
if (bma280Detect(dev)) {
|
||||||
#ifdef ACC_BMA280_ALIGN
|
#ifdef ACC_BMA280_ALIGN
|
||||||
acc.dev.accAlign = ACC_BMA280_ALIGN;
|
dev->accAlign = ACC_BMA280_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
accHardware = ACC_BMA280;
|
accHardware = ACC_BMA280;
|
||||||
break;
|
break;
|
||||||
|
@ -159,7 +159,7 @@ retry:
|
||||||
#ifdef USE_ACC_SPI_MPU6000
|
#ifdef USE_ACC_SPI_MPU6000
|
||||||
if (mpu6000SpiAccDetect(dev)) {
|
if (mpu6000SpiAccDetect(dev)) {
|
||||||
#ifdef ACC_MPU6000_ALIGN
|
#ifdef ACC_MPU6000_ALIGN
|
||||||
acc.dev.accAlign = ACC_MPU6000_ALIGN;
|
dev->accAlign = ACC_MPU6000_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
accHardware = ACC_MPU6000;
|
accHardware = ACC_MPU6000;
|
||||||
break;
|
break;
|
||||||
|
@ -175,7 +175,7 @@ retry:
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef ACC_MPU6500_ALIGN
|
#ifdef ACC_MPU6500_ALIGN
|
||||||
acc.dev.accAlign = ACC_MPU6500_ALIGN;
|
dev->accAlign = ACC_MPU6500_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
accHardware = ACC_MPU6500;
|
accHardware = ACC_MPU6500;
|
||||||
break;
|
break;
|
||||||
|
@ -188,7 +188,7 @@ retry:
|
||||||
if (icm20689SpiAccDetect(dev))
|
if (icm20689SpiAccDetect(dev))
|
||||||
{
|
{
|
||||||
#ifdef ACC_ICM20689_ALIGN
|
#ifdef ACC_ICM20689_ALIGN
|
||||||
acc.dev.accAlign = ACC_ICM20689_ALIGN;
|
dev->accAlign = ACC_ICM20689_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
accHardware = ACC_ICM20689;
|
accHardware = ACC_ICM20689;
|
||||||
break;
|
break;
|
||||||
|
@ -380,7 +380,7 @@ void updateAccelerationReadings(rollAndPitchTrims_t *rollAndPitchTrims)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int axis = 0; axis < XYZ_AXIS_COUNT; axis++) {
|
for (int axis = 0; axis < XYZ_AXIS_COUNT; axis++) {
|
||||||
if (debugMode == DEBUG_ACCELEROMETER) debug[axis] = accADCRaw[axis];
|
DEBUG_SET(DEBUG_ACCELEROMETER, axis, accADCRaw[axis]);
|
||||||
acc.accSmooth[axis] = accADCRaw[axis];
|
acc.accSmooth[axis] = accADCRaw[axis];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ bool compassDetect(magDev_t *dev, magSensor_e magHardwareToUse)
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
|
|
||||||
mag.dev.magAlign = ALIGN_DEFAULT;
|
dev->magAlign = ALIGN_DEFAULT;
|
||||||
|
|
||||||
switch(magHardwareToUse) {
|
switch(magHardwareToUse) {
|
||||||
case MAG_DEFAULT:
|
case MAG_DEFAULT:
|
||||||
|
@ -91,7 +91,7 @@ retry:
|
||||||
#ifdef USE_MAG_HMC5883
|
#ifdef USE_MAG_HMC5883
|
||||||
if (hmc5883lDetect(dev, hmc5883Config)) {
|
if (hmc5883lDetect(dev, hmc5883Config)) {
|
||||||
#ifdef MAG_HMC5883_ALIGN
|
#ifdef MAG_HMC5883_ALIGN
|
||||||
mag.dev.magAlign = MAG_HMC5883_ALIGN;
|
dev->magAlign = MAG_HMC5883_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
magHardware = MAG_HMC5883;
|
magHardware = MAG_HMC5883;
|
||||||
break;
|
break;
|
||||||
|
@ -103,7 +103,7 @@ retry:
|
||||||
#ifdef USE_MAG_AK8975
|
#ifdef USE_MAG_AK8975
|
||||||
if (ak8975Detect(dev)) {
|
if (ak8975Detect(dev)) {
|
||||||
#ifdef MAG_AK8975_ALIGN
|
#ifdef MAG_AK8975_ALIGN
|
||||||
mag.dev.magAlign = MAG_AK8975_ALIGN;
|
dev->magAlign = MAG_AK8975_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
magHardware = MAG_AK8975;
|
magHardware = MAG_AK8975;
|
||||||
break;
|
break;
|
||||||
|
@ -115,7 +115,7 @@ retry:
|
||||||
#ifdef USE_MAG_AK8963
|
#ifdef USE_MAG_AK8963
|
||||||
if (ak8963Detect(dev)) {
|
if (ak8963Detect(dev)) {
|
||||||
#ifdef MAG_AK8963_ALIGN
|
#ifdef MAG_AK8963_ALIGN
|
||||||
mag.dev.magAlign = MAG_AK8963_ALIGN;
|
dev->magAlign = MAG_AK8963_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
magHardware = MAG_AK8963;
|
magHardware = MAG_AK8963;
|
||||||
break;
|
break;
|
||||||
|
@ -161,15 +161,16 @@ void compassUpdate(uint32_t currentTime, flightDynamicsTrims_t *magZero)
|
||||||
static uint32_t tCal = 0;
|
static uint32_t tCal = 0;
|
||||||
static flightDynamicsTrims_t magZeroTempMin;
|
static flightDynamicsTrims_t magZeroTempMin;
|
||||||
static flightDynamicsTrims_t magZeroTempMax;
|
static flightDynamicsTrims_t magZeroTempMax;
|
||||||
uint32_t axis;
|
|
||||||
|
|
||||||
mag.dev.read(magADCRaw);
|
mag.dev.read(magADCRaw);
|
||||||
for (axis = 0; axis < XYZ_AXIS_COUNT; axis++) mag.magADC[axis] = magADCRaw[axis]; // int32_t copy to work with
|
for (int axis = 0; axis < XYZ_AXIS_COUNT; axis++) {
|
||||||
|
mag.magADC[axis] = magADCRaw[axis];
|
||||||
|
}
|
||||||
alignSensors(mag.magADC, mag.dev.magAlign);
|
alignSensors(mag.magADC, mag.dev.magAlign);
|
||||||
|
|
||||||
if (STATE(CALIBRATE_MAG)) {
|
if (STATE(CALIBRATE_MAG)) {
|
||||||
tCal = currentTime;
|
tCal = currentTime;
|
||||||
for (axis = 0; axis < 3; axis++) {
|
for (int axis = 0; axis < 3; axis++) {
|
||||||
magZero->raw[axis] = 0;
|
magZero->raw[axis] = 0;
|
||||||
magZeroTempMin.raw[axis] = mag.magADC[axis];
|
magZeroTempMin.raw[axis] = mag.magADC[axis];
|
||||||
magZeroTempMax.raw[axis] = mag.magADC[axis];
|
magZeroTempMax.raw[axis] = mag.magADC[axis];
|
||||||
|
@ -186,7 +187,7 @@ void compassUpdate(uint32_t currentTime, flightDynamicsTrims_t *magZero)
|
||||||
if (tCal != 0) {
|
if (tCal != 0) {
|
||||||
if ((currentTime - tCal) < 30000000) { // 30s: you have 30s to turn the multi in all directions
|
if ((currentTime - tCal) < 30000000) { // 30s: you have 30s to turn the multi in all directions
|
||||||
LED0_TOGGLE;
|
LED0_TOGGLE;
|
||||||
for (axis = 0; axis < 3; axis++) {
|
for (int axis = 0; axis < 3; axis++) {
|
||||||
if (mag.magADC[axis] < magZeroTempMin.raw[axis])
|
if (mag.magADC[axis] < magZeroTempMin.raw[axis])
|
||||||
magZeroTempMin.raw[axis] = mag.magADC[axis];
|
magZeroTempMin.raw[axis] = mag.magADC[axis];
|
||||||
if (mag.magADC[axis] > magZeroTempMax.raw[axis])
|
if (mag.magADC[axis] > magZeroTempMax.raw[axis])
|
||||||
|
@ -194,7 +195,7 @@ void compassUpdate(uint32_t currentTime, flightDynamicsTrims_t *magZero)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
tCal = 0;
|
tCal = 0;
|
||||||
for (axis = 0; axis < 3; axis++) {
|
for (int axis = 0; axis < 3; axis++) {
|
||||||
magZero->raw[axis] = (magZeroTempMin.raw[axis] + magZeroTempMax.raw[axis]) / 2; // Calculate offsets
|
magZero->raw[axis] = (magZeroTempMin.raw[axis] + magZeroTempMax.raw[axis]) / 2; // Calculate offsets
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ bool gyroDetect(gyroDev_t *dev)
|
||||||
{
|
{
|
||||||
gyroSensor_e gyroHardware = GYRO_DEFAULT;
|
gyroSensor_e gyroHardware = GYRO_DEFAULT;
|
||||||
|
|
||||||
gyro.dev.gyroAlign = ALIGN_DEFAULT;
|
dev->gyroAlign = ALIGN_DEFAULT;
|
||||||
|
|
||||||
switch(gyroHardware) {
|
switch(gyroHardware) {
|
||||||
case GYRO_DEFAULT:
|
case GYRO_DEFAULT:
|
||||||
|
@ -85,7 +85,7 @@ bool gyroDetect(gyroDev_t *dev)
|
||||||
if (mpu6050GyroDetect(dev)) {
|
if (mpu6050GyroDetect(dev)) {
|
||||||
gyroHardware = GYRO_MPU6050;
|
gyroHardware = GYRO_MPU6050;
|
||||||
#ifdef GYRO_MPU6050_ALIGN
|
#ifdef GYRO_MPU6050_ALIGN
|
||||||
gyro.dev.gyroAlign = GYRO_MPU6050_ALIGN;
|
dev->gyroAlign = GYRO_MPU6050_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ bool gyroDetect(gyroDev_t *dev)
|
||||||
if (l3g4200dDetect(dev)) {
|
if (l3g4200dDetect(dev)) {
|
||||||
gyroHardware = GYRO_L3G4200D;
|
gyroHardware = GYRO_L3G4200D;
|
||||||
#ifdef GYRO_L3G4200D_ALIGN
|
#ifdef GYRO_L3G4200D_ALIGN
|
||||||
gyro.dev.gyroAlign = GYRO_L3G4200D_ALIGN;
|
dev->gyroAlign = GYRO_L3G4200D_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -108,7 +108,7 @@ bool gyroDetect(gyroDev_t *dev)
|
||||||
if (mpu3050Detect(dev)) {
|
if (mpu3050Detect(dev)) {
|
||||||
gyroHardware = GYRO_MPU3050;
|
gyroHardware = GYRO_MPU3050;
|
||||||
#ifdef GYRO_MPU3050_ALIGN
|
#ifdef GYRO_MPU3050_ALIGN
|
||||||
gyro.dev.gyroAlign = GYRO_MPU3050_ALIGN;
|
dev->gyroAlign = GYRO_MPU3050_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -120,7 +120,7 @@ bool gyroDetect(gyroDev_t *dev)
|
||||||
if (l3gd20Detect(dev)) {
|
if (l3gd20Detect(dev)) {
|
||||||
gyroHardware = GYRO_L3GD20;
|
gyroHardware = GYRO_L3GD20;
|
||||||
#ifdef GYRO_L3GD20_ALIGN
|
#ifdef GYRO_L3GD20_ALIGN
|
||||||
gyro.dev.gyroAlign = GYRO_L3GD20_ALIGN;
|
dev->gyroAlign = GYRO_L3GD20_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -132,7 +132,7 @@ bool gyroDetect(gyroDev_t *dev)
|
||||||
if (mpu6000SpiGyroDetect(dev)) {
|
if (mpu6000SpiGyroDetect(dev)) {
|
||||||
gyroHardware = GYRO_MPU6000;
|
gyroHardware = GYRO_MPU6000;
|
||||||
#ifdef GYRO_MPU6000_ALIGN
|
#ifdef GYRO_MPU6000_ALIGN
|
||||||
gyro.dev.gyroAlign = GYRO_MPU6000_ALIGN;
|
dev->gyroAlign = GYRO_MPU6000_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -149,7 +149,7 @@ bool gyroDetect(gyroDev_t *dev)
|
||||||
{
|
{
|
||||||
gyroHardware = GYRO_MPU6500;
|
gyroHardware = GYRO_MPU6500;
|
||||||
#ifdef GYRO_MPU6500_ALIGN
|
#ifdef GYRO_MPU6500_ALIGN
|
||||||
gyro.dev.gyroAlign = GYRO_MPU6500_ALIGN;
|
dev->gyroAlign = GYRO_MPU6500_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -164,7 +164,7 @@ case GYRO_MPU9250:
|
||||||
{
|
{
|
||||||
gyroHardware = GYRO_MPU9250;
|
gyroHardware = GYRO_MPU9250;
|
||||||
#ifdef GYRO_MPU9250_ALIGN
|
#ifdef GYRO_MPU9250_ALIGN
|
||||||
gyro.dev.gyroAlign = GYRO_MPU9250_ALIGN;
|
dev->gyroAlign = GYRO_MPU9250_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -178,7 +178,7 @@ case GYRO_MPU9250:
|
||||||
{
|
{
|
||||||
gyroHardware = GYRO_ICM20689;
|
gyroHardware = GYRO_ICM20689;
|
||||||
#ifdef GYRO_ICM20689_ALIGN
|
#ifdef GYRO_ICM20689_ALIGN
|
||||||
gyro.dev.gyroAlign = GYRO_ICM20689_ALIGN;
|
dev->gyroAlign = GYRO_ICM20689_ALIGN;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue