Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions src/main/drivers/accgyro/accgyro.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
#include "drivers/bus.h"
#include "drivers/sensor.h"
#include "drivers/accgyro/accgyro_mpu.h"
#include "sensors/gyro.h"

#pragma GCC diagnostic push
#if defined(SIMULATOR_BUILD) && defined(SIMULATOR_MULTITHREAD)
#include <pthread.h>
Expand All @@ -39,6 +39,25 @@
#define MPU_I2C_INSTANCE I2C_DEVICE
#endif

typedef enum {
GYRO_NONE = 0,
GYRO_DEFAULT,
GYRO_MPU6050,
GYRO_L3G4200D,
GYRO_MPU3050,
GYRO_L3GD20,
GYRO_MPU6000,
GYRO_MPU6500,
GYRO_MPU9250,
GYRO_ICM20601,
GYRO_ICM20602,
GYRO_ICM20608G,
GYRO_ICM20649,
GYRO_ICM20689,
GYRO_BMI160,
GYRO_FAKE
} gyroHardware_e;

typedef enum {
GYRO_HARDWARE_LPF_NORMAL,
GYRO_HARDWARE_LPF_1KHZ_SAMPLE,
Expand Down Expand Up @@ -77,7 +96,6 @@ typedef struct gyroDev_s {
int32_t gyroADCRawPrevious[XYZ_AXIS_COUNT];
int16_t gyroADCRaw[XYZ_AXIS_COUNT];
int16_t temperature;
mpuConfiguration_t mpuConfiguration;
mpuDetectionResult_t mpuDetectionResult;
sensor_align_e gyroAlign;
gyroRateKHz_e gyroRateKHz;
Expand All @@ -88,7 +106,7 @@ typedef struct gyroDev_s {
uint8_t mpuDividerDrops;
ioTag_t mpuIntExtiTag;
uint8_t gyroHasOverflowProtection;
gyroSensor_e gyroHardware;
gyroHardware_e gyroHardware;
} gyroDev_t;

typedef struct accDev_s {
Expand Down
3 changes: 0 additions & 3 deletions src/main/drivers/accgyro/accgyro_mpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,6 @@
#include "drivers/accgyro/accgyro_spi_mpu9250.h"
#include "drivers/accgyro/accgyro_mpu.h"

mpuResetFnPtr mpuResetFn;

#ifndef MPU_I2C_INSTANCE
#define MPU_I2C_INSTANCE I2C_DEVICE
#endif
Expand Down Expand Up @@ -250,7 +248,6 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
sensor = mpu9250SpiDetect(&gyro->bus);
if (sensor != MPU_NONE) {
gyro->mpuDetectionResult.sensor = sensor;
gyro->mpuConfiguration.resetFn = mpu9250SpiResetGyro;
return true;
}
#endif
Expand Down
8 changes: 0 additions & 8 deletions src/main/drivers/accgyro/accgyro_mpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,14 +140,6 @@
// RF = Register Flag
#define MPU_RF_DATA_RDY_EN (1 << 0)

typedef void (*mpuResetFnPtr)(void);

extern mpuResetFnPtr mpuResetFn;

typedef struct mpuConfiguration_s {
mpuResetFnPtr resetFn;
} mpuConfiguration_t;

enum gyro_fsr_e {
INV_FSR_250DPS = 0,
INV_FSR_500DPS,
Expand Down
13 changes: 0 additions & 13 deletions src/main/drivers/accgyro/accgyro_spi_mpu9250.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,19 +75,6 @@ static bool mpu9250SpiSlowReadRegisterBuffer(const busDevice_t *bus, uint8_t reg
return true;
}

void mpu9250SpiResetGyro(void)
{
#if 0
// XXX This doesn't work. Need a proper busDevice_t.
// Device Reset
#ifdef MPU9250_CS_PIN
busDevice_t bus = { .spi = { .csnPin = IOGetByTag(IO_TAG(MPU9250_CS_PIN)) } };
mpu9250SpiWriteRegister(&bus, MPU_RA_PWR_MGMT_1, MPU9250_BIT_RESET);
delay(150);
#endif
#endif
}

void mpu9250SpiGyroInit(gyroDev_t *gyro)
{
mpuGyroInit(gyro);
Expand Down
8 changes: 0 additions & 8 deletions src/main/drivers/system_stm32f4xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,6 @@ void SetSysClock(void);

void systemReset(void)
{
if (mpuResetFn) {
mpuResetFn();
}

__disable_irq();
NVIC_SystemReset();
}
Expand All @@ -47,10 +43,6 @@ PERSISTENT uint32_t bootloaderRequest = 0;

void systemResetToBootloader(void)
{
if (mpuResetFn) {
mpuResetFn();
}

bootloaderRequest = BOOTLOADER_REQUEST_COOKIE;

__disable_irq();
Expand Down
8 changes: 0 additions & 8 deletions src/main/drivers/system_stm32f7xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,12 @@ void SystemClock_Config(void);

void systemReset(void)
{
if (mpuResetFn) {
mpuResetFn();
}

__disable_irq();
NVIC_SystemReset();
}

void systemResetToBootloader(void)
{
if (mpuResetFn) {
mpuResetFn();
}

(*(__IO uint32_t *) (BKPSRAM_BASE + 4)) = 0xDEADBEEF; // flag that will be readable after reboot

__disable_irq();
Expand Down
4 changes: 0 additions & 4 deletions src/main/drivers/usb_msc_f4xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,6 @@ void mscWaitForButton(void)

void systemResetToMsc(void)
{
if (mpuResetFn) {
mpuResetFn();
}

*((uint32_t *)0x2001FFF0) = MSC_MAGIC;

__disable_irq();
Expand Down
4 changes: 0 additions & 4 deletions src/main/drivers/usb_msc_f7xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,6 @@ void mscWaitForButton(void)

void systemResetToMsc(void)
{
if (mpuResetFn) {
mpuResetFn();
}

*((__IO uint32_t*) BKPSRAM_BASE + 16) = MSC_MAGIC;

__disable_irq();
Expand Down
20 changes: 3 additions & 17 deletions src/main/sensors/gyro.c
Original file line number Diff line number Diff line change
Expand Up @@ -241,19 +241,6 @@ const busDevice_t *gyroSensorBusByDevice(uint8_t whichSensor)
}
#endif // USE_GYRO_REGISTER_DUMP

const mpuConfiguration_t *gyroMpuConfiguration(void)
{
#ifdef USE_DUAL_GYRO
if (gyroToUse == GYRO_CONFIG_USE_GYRO_2) {
return &gyroSensor2.gyroDev.mpuConfiguration;
} else {
return &gyroSensor1.gyroDev.mpuConfiguration;
}
#else
return &gyroSensor1.gyroDev.mpuConfiguration;
#endif
}

const mpuDetectionResult_t *gyroMpuDetectionResult(void)
{
#ifdef USE_DUAL_GYRO
Expand All @@ -267,9 +254,9 @@ const mpuDetectionResult_t *gyroMpuDetectionResult(void)
#endif
}

STATIC_UNIT_TESTED gyroSensor_e gyroDetect(gyroDev_t *dev)
STATIC_UNIT_TESTED gyroHardware_e gyroDetect(gyroDev_t *dev)
{
gyroSensor_e gyroHardware = GYRO_DEFAULT;
gyroHardware_e gyroHardware = GYRO_DEFAULT;

switch (gyroHardware) {
case GYRO_DEFAULT:
Expand Down Expand Up @@ -447,10 +434,9 @@ static bool gyroInitSensor(gyroSensor_t *gyroSensor)
|| defined(USE_ACC_MPU6050) || defined(USE_GYRO_SPI_MPU9250) || defined(USE_GYRO_SPI_ICM20601) || defined(USE_GYRO_SPI_ICM20649) || defined(USE_GYRO_SPI_ICM20689)

mpuDetect(&gyroSensor->gyroDev);
mpuResetFn = gyroSensor->gyroDev.mpuConfiguration.resetFn; // must be set after mpuDetect
#endif

const gyroSensor_e gyroHardware = gyroDetect(&gyroSensor->gyroDev);
const gyroHardware_e gyroHardware = gyroDetect(&gyroSensor->gyroDev);
gyroSensor->gyroDev.gyroHardware = gyroHardware;
if (gyroHardware == GYRO_NONE) {
return false;
Expand Down
21 changes: 0 additions & 21 deletions src/main/sensors/gyro.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,25 +29,6 @@

#include "pg/pg.h"

typedef enum {
GYRO_NONE = 0,
GYRO_DEFAULT,
GYRO_MPU6050,
GYRO_L3G4200D,
GYRO_MPU3050,
GYRO_L3GD20,
GYRO_MPU6000,
GYRO_MPU6500,
GYRO_MPU9250,
GYRO_ICM20601,
GYRO_ICM20602,
GYRO_ICM20608G,
GYRO_ICM20649,
GYRO_ICM20689,
GYRO_BMI160,
GYRO_FAKE
} gyroSensor_e;

typedef struct gyro_s {
uint32_t targetLooptime;
float gyroADCf[XYZ_AXIS_COUNT];
Expand Down Expand Up @@ -124,8 +105,6 @@ void gyroInitFilters(void);
void gyroUpdate(timeUs_t currentTimeUs);
bool gyroGetAccumulationAverage(float *accumulation);
const busDevice_t *gyroSensorBus(void);
struct mpuConfiguration_s;
const struct mpuConfiguration_s *gyroMpuConfiguration(void);
struct mpuDetectionResult_s;
const struct mpuDetectionResult_s *gyroMpuDetectionResult(void);
void gyroStartCalibration(bool isFirstArmingCalibration);
Expand Down
4 changes: 2 additions & 2 deletions src/test/unit/sensor_gyro_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ extern "C" {
#include "sensors/acceleration.h"
#include "sensors/sensors.h"

STATIC_UNIT_TESTED gyroSensor_e gyroDetect(gyroDev_t *dev);
STATIC_UNIT_TESTED gyroHardware_e gyroDetect(gyroDev_t *dev);
struct gyroSensor_s;
STATIC_UNIT_TESTED void performGyroCalibration(struct gyroSensor_s *gyroSensor, uint8_t gyroMovementCalibrationThreshold);
STATIC_UNIT_TESTED bool fakeGyroRead(gyroDev_t *gyro);
Expand All @@ -57,7 +57,7 @@ extern gyroDev_t * const gyroDevPtr;

TEST(SensorGyro, Detect)
{
const gyroSensor_e detected = gyroDetect(gyroDevPtr);
const gyroHardware_e detected = gyroDetect(gyroDevPtr);
EXPECT_EQ(GYRO_FAKE, detected);
EXPECT_EQ(GYRO_FAKE, detectedSensors[SENSOR_INDEX_GYRO]);
}
Expand Down