diff --git a/src/main/blackbox/blackbox.c b/src/main/blackbox/blackbox.c
index d6ac70dc9..dcae20923 100644
--- a/src/main/blackbox/blackbox.c
+++ b/src/main/blackbox/blackbox.c
@@ -1271,9 +1271,9 @@ static bool blackboxWriteSysinfo()
BLACKBOX_PRINT_HEADER_LINE("gyro_notch_cutoff:%d,%d", gyroConfig()->gyro_soft_notch_cutoff_1,
gyroConfig()->gyro_soft_notch_cutoff_2);
BLACKBOX_PRINT_HEADER_LINE("acc_lpf_hz:%d", (int)(accelerometerConfig()->acc_lpf_hz * 100.0f));
- BLACKBOX_PRINT_HEADER_LINE("acc_hardware:%d", sensorSelectionConfig()->acc_hardware);
- BLACKBOX_PRINT_HEADER_LINE("baro_hardware:%d", sensorSelectionConfig()->baro_hardware);
- BLACKBOX_PRINT_HEADER_LINE("mag_hardware:%d", sensorSelectionConfig()->mag_hardware);
+ BLACKBOX_PRINT_HEADER_LINE("acc_hardware:%d", accelerometerConfig()->acc_hardware);
+ BLACKBOX_PRINT_HEADER_LINE("baro_hardware:%d", barometerConfig()->baro_hardware);
+ BLACKBOX_PRINT_HEADER_LINE("mag_hardware:%d", compassConfig()->mag_hardware);
BLACKBOX_PRINT_HEADER_LINE("gyro_cal_on_first_arm:%d", armingConfig()->gyro_cal_on_first_arm);
BLACKBOX_PRINT_HEADER_LINE("rc_interpolation:%d", rxConfig()->rcInterpolation);
BLACKBOX_PRINT_HEADER_LINE("rc_interpolation_interval:%d", rxConfig()->rcInterpolationInterval);
diff --git a/src/main/blackbox/blackbox_io.h b/src/main/blackbox/blackbox_io.h
index 5cb654808..8a8087f18 100644
--- a/src/main/blackbox/blackbox_io.h
+++ b/src/main/blackbox/blackbox_io.h
@@ -27,7 +27,6 @@ typedef enum BlackboxDevice {
BLACKBOX_DEVICE_SDCARD = 2,
#endif
- BLACKBOX_DEVICE_END
} BlackboxDevice;
typedef enum {
diff --git a/src/main/common/axis.h b/src/main/common/axis.h
index c7f1a96a8..387d96c26 100644
--- a/src/main/common/axis.h
+++ b/src/main/common/axis.h
@@ -36,7 +36,7 @@ typedef enum {
typedef enum {
AI_ROLL = 0,
- AI_PITCH,
+ AI_PITCH
} angle_index_t;
#define ANGLE_INDEX_COUNT 2
diff --git a/src/main/config/config_master.h b/src/main/config/config_master.h
index 8ed4779a2..addefdef1 100644
--- a/src/main/config/config_master.h
+++ b/src/main/config/config_master.h
@@ -66,9 +66,6 @@
#define servoConfig(x) (&masterConfig.servoConfig)
#define servoMixerConfig(x) (&masterConfig.servoMixerConfig)
#define gimbalConfig(x) (&masterConfig.gimbalConfig)
-#define sensorSelectionConfig(x) (&masterConfig.sensorSelectionConfig)
-#define sensorAlignmentConfig(x) (&masterConfig.sensorAlignmentConfig)
-#define sensorTrims(x) (&masterConfig.sensorTrims)
#define boardAlignment(x) (&masterConfig.boardAlignment)
#define imuConfig(x) (&masterConfig.imuConfig)
#define gyroConfig(x) (&masterConfig.gyroConfig)
@@ -122,10 +119,6 @@ typedef struct master_s {
gimbalConfig_t gimbalConfig;
#endif
- // global sensor-related stuff
- sensorSelectionConfig_t sensorSelectionConfig;
- sensorAlignmentConfig_t sensorAlignmentConfig;
- sensorTrims_t sensorTrims;
boardAlignment_t boardAlignment;
imuConfig_t imuConfig;
diff --git a/src/main/config/parameter_group.h b/src/main/config/parameter_group.h
index c5133a224..e7059aaf9 100644
--- a/src/main/config/parameter_group.h
+++ b/src/main/config/parameter_group.h
@@ -22,7 +22,7 @@ typedef uint16_t pgn_t;
// parameter group registry flags
typedef enum {
PGRF_NONE = 0,
- PGRF_CLASSIFICATON_BIT = (1 << 0),
+ PGRF_CLASSIFICATON_BIT = (1 << 0)
} pgRegistryFlags_e;
typedef enum {
@@ -30,7 +30,7 @@ typedef enum {
PGR_PGN_VERSION_MASK = 0xf000,
PGR_SIZE_MASK = 0x0fff,
PGR_SIZE_SYSTEM_FLAG = 0x0000, // documentary
- PGR_SIZE_PROFILE_FLAG = 0x8000, // start using flags from the top bit down
+ PGR_SIZE_PROFILE_FLAG = 0x8000 // start using flags from the top bit down
} pgRegistryInternal_e;
// function that resets a single parameter group instance
diff --git a/src/main/drivers/accgyro.h b/src/main/drivers/accgyro.h
index 372273ef5..9dbd6f6dd 100644
--- a/src/main/drivers/accgyro.h
+++ b/src/main/drivers/accgyro.h
@@ -42,6 +42,7 @@ typedef struct gyroDev_s {
volatile bool dataReady;
uint16_t lpf;
int16_t gyroADCRaw[XYZ_AXIS_COUNT];
+ sensor_align_e gyroAlign;
} gyroDev_t;
typedef struct accDev_s {
@@ -49,4 +50,5 @@ typedef struct accDev_s {
sensorReadFuncPtr read; // read 3 axis data function
uint16_t acc_1G;
char revisionCode; // a revision code for the sensor, if known
+ sensor_align_e accAlign;
} accDev_t;
diff --git a/src/main/drivers/accgyro_fake.c b/src/main/drivers/accgyro_fake.c
new file mode 100644
index 000000000..c592f0184
--- /dev/null
+++ b/src/main/drivers/accgyro_fake.c
@@ -0,0 +1,110 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#include
+#include
+
+#include "platform.h"
+
+#include "common/axis.h"
+#include "common/utils.h"
+
+#include "accgyro.h"
+#include "accgyro_fake.h"
+
+
+#ifdef USE_FAKE_GYRO
+
+static int16_t fakeGyroADC[XYZ_AXIS_COUNT];
+
+static void fakeGyroInit(gyroDev_t *gyro)
+{
+ UNUSED(gyro);
+}
+
+void fakeGyroSet(int16_t x, int16_t y, int16_t z)
+{
+ fakeGyroADC[X] = x;
+ fakeGyroADC[Y] = y;
+ fakeGyroADC[Z] = z;
+}
+
+static bool fakeGyroRead(gyroDev_t *gyro)
+{
+ gyro->gyroADCRaw[X] = fakeGyroADC[X];
+ gyro->gyroADCRaw[Y] = fakeGyroADC[Y];
+ gyro->gyroADCRaw[Z] = fakeGyroADC[Z];
+ return true;
+}
+
+static bool fakeGyroReadTemperature(int16_t *tempData)
+{
+ UNUSED(tempData);
+ return true;
+}
+
+static bool fakeGyroInitStatus(gyroDev_t *gyro)
+{
+ UNUSED(gyro);
+ return true;
+}
+
+bool fakeGyroDetect(gyroDev_t *gyro)
+{
+ gyro->init = fakeGyroInit;
+ gyro->intStatus = fakeGyroInitStatus;
+ gyro->read = fakeGyroRead;
+ gyro->temperature = fakeGyroReadTemperature;
+ gyro->scale = 1.0f;
+ return true;
+}
+#endif // USE_FAKE_GYRO
+
+
+#ifdef USE_FAKE_ACC
+
+static int16_t fakeAccData[XYZ_AXIS_COUNT];
+
+static void fakeAccInit(accDev_t *acc)
+{
+ UNUSED(acc);
+}
+
+void fakeAccSet(int16_t x, int16_t y, int16_t z)
+{
+ fakeAccData[X] = x;
+ fakeAccData[Y] = y;
+ fakeAccData[Z] = z;
+}
+
+static bool fakeAccRead(int16_t *accData)
+{
+ accData[X] = fakeAccData[X];
+ accData[Y] = fakeAccData[Y];
+ accData[Z] = fakeAccData[Z];
+ return true;
+}
+
+bool fakeAccDetect(accDev_t *acc)
+{
+ acc->init = fakeAccInit;
+ acc->read = fakeAccRead;
+ acc->revisionCode = 0;
+ return true;
+}
+#endif // USE_FAKE_ACC
+
diff --git a/src/main/drivers/accgyro_fake.h b/src/main/drivers/accgyro_fake.h
new file mode 100644
index 000000000..d8452916b
--- /dev/null
+++ b/src/main/drivers/accgyro_fake.h
@@ -0,0 +1,26 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#pragma once
+
+struct accDev_s;
+bool fakeAccDetect(struct accDev_s *acc);
+void fakeAccSet(int16_t x, int16_t y, int16_t z);
+
+struct gyroDev_s;
+bool fakeGyroDetect(struct gyroDev_s *gyro);
+void fakeGyroSet(int16_t x, int16_t y, int16_t z);
diff --git a/src/main/drivers/adc.h b/src/main/drivers/adc.h
index 5ac3f02e0..50c6f925a 100644
--- a/src/main/drivers/adc.h
+++ b/src/main/drivers/adc.h
@@ -24,11 +24,9 @@ typedef enum {
ADC_CURRENT = 1,
ADC_EXTERNAL1 = 2,
ADC_RSSI = 3,
- ADC_CHANNEL_MAX = ADC_RSSI
+ ADC_CHANNEL_COUNT
} AdcChannel;
-#define ADC_CHANNEL_COUNT (ADC_CHANNEL_MAX + 1)
-
typedef struct adc_config_s {
ioTag_t tag;
uint8_t adcChannel; // ADC1_INxx channel number
diff --git a/src/main/drivers/adc_impl.h b/src/main/drivers/adc_impl.h
index 3c29f70da..51f562e94 100644
--- a/src/main/drivers/adc_impl.h
+++ b/src/main/drivers/adc_impl.h
@@ -31,16 +31,9 @@
typedef enum ADCDevice {
ADCINVALID = -1,
ADCDEV_1 = 0,
-#if defined(STM32F3)
+#if defined(STM32F3) || defined(STM32F4) || defined(STM32F7)
ADCDEV_2,
- ADCDEV_3,
- ADCDEV_MAX = ADCDEV_3,
-#elif defined(STM32F4) || defined(STM32F7)
- ADCDEV_2,
- ADCDEV_3,
- ADCDEV_MAX = ADCDEV_3,
-#else
- ADCDEV_MAX = ADCDEV_1,
+ ADCDEV_3
#endif
} ADCDevice;
diff --git a/src/main/drivers/barometer_fake.c b/src/main/drivers/barometer_fake.c
new file mode 100644
index 000000000..b56750360
--- /dev/null
+++ b/src/main/drivers/barometer_fake.c
@@ -0,0 +1,70 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#include
+#include
+
+#include
+
+#ifdef USE_FAKE_BARO
+
+#include "barometer.h"
+#include "barometer_fake.h"
+
+
+static int32_t fakePressure;
+static int32_t fakeTemperature;
+
+
+static void fakeBaroStartGet(void)
+{
+}
+
+static void fakeBaroCalculate(int32_t *pressure, int32_t *temperature)
+{
+ if (pressure)
+ *pressure = fakePressure;
+ if (temperature)
+ *temperature = fakeTemperature;
+}
+
+void fakeBaroSet(int32_t pressure, int32_t temperature)
+{
+ fakePressure = pressure;
+ fakeTemperature = temperature;
+}
+
+bool fakeBaroDetect(baroDev_t *baro)
+{
+ fakePressure = 101325; // pressure in Pa (0m MSL)
+ fakeTemperature = 2500; // temperature in 0.01 C = 25 deg
+
+ // these are dummy as temperature is measured as part of pressure
+ baro->ut_delay = 10000;
+ baro->get_ut = fakeBaroStartGet;
+ baro->start_ut = fakeBaroStartGet;
+
+ // only _up part is executed, and gets both temperature and pressure
+ baro->up_delay = 10000;
+ baro->start_up = fakeBaroStartGet;
+ baro->get_up = fakeBaroStartGet;
+ baro->calculate = fakeBaroCalculate;
+
+ return true;
+}
+#endif // USE_FAKE_BARO
+
diff --git a/src/main/drivers/barometer_fake.h b/src/main/drivers/barometer_fake.h
new file mode 100644
index 000000000..bdf67ed24
--- /dev/null
+++ b/src/main/drivers/barometer_fake.h
@@ -0,0 +1,23 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#pragma once
+
+struct baroDev_s;
+bool fakeBaroDetect(struct baroDev_s *baro);
+void fakeBaroSet(int32_t pressure, int32_t temperature);
+
diff --git a/src/main/drivers/bus_i2c.h b/src/main/drivers/bus_i2c.h
index da2da2ff7..746933bd8 100644
--- a/src/main/drivers/bus_i2c.h
+++ b/src/main/drivers/bus_i2c.h
@@ -34,7 +34,7 @@ typedef enum I2CDevice {
I2CDEV_2,
I2CDEV_3,
I2CDEV_4,
- I2CDEV_MAX = I2CDEV_4,
+ I2CDEV_COUNT
} I2CDevice;
typedef struct i2cDevice_s {
diff --git a/src/main/drivers/bus_i2c_hal.c b/src/main/drivers/bus_i2c_hal.c
index 8d8f98408..040e8a603 100644
--- a/src/main/drivers/bus_i2c_hal.c
+++ b/src/main/drivers/bus_i2c_hal.c
@@ -80,7 +80,7 @@ static i2cDevice_t i2cHardwareMap[] = {
typedef struct{
I2C_HandleTypeDef Handle;
}i2cHandle_t;
-static i2cHandle_t i2cHandle[I2CDEV_MAX+1];
+static i2cHandle_t i2cHandle[I2CDEV_COUNT];
void I2C1_ER_IRQHandler(void)
{
diff --git a/src/main/drivers/bus_spi.h b/src/main/drivers/bus_spi.h
index 9692fb92a..2b93923d2 100644
--- a/src/main/drivers/bus_spi.h
+++ b/src/main/drivers/bus_spi.h
@@ -46,17 +46,17 @@ typedef enum {
SPI_CLOCK_SLOW = 128, //00.65625 MHz
SPI_CLOCK_STANDARD = 8, //10.50000 MHz
SPI_CLOCK_FAST = 4, //21.00000 MHz
- SPI_CLOCK_ULTRAFAST = 2, //42.00000 MHz
+ SPI_CLOCK_ULTRAFAST = 2 //42.00000 MHz
#elif defined(STM32F7)
SPI_CLOCK_SLOW = 256, //00.42188 MHz
SPI_CLOCK_STANDARD = 16, //06.57500 MHz
SPI_CLOCK_FAST = 4, //27.00000 MHz
- SPI_CLOCK_ULTRAFAST = 2, //54.00000 MHz
+ SPI_CLOCK_ULTRAFAST = 2 //54.00000 MHz
#else
SPI_CLOCK_SLOW = 128, //00.56250 MHz
SPI_CLOCK_STANDARD = 4, //09.00000 MHz
SPI_CLOCK_FAST = 2, //18.00000 MHz
- SPI_CLOCK_ULTRAFAST = 2, //18.00000 MHz
+ SPI_CLOCK_ULTRAFAST = 2 //18.00000 MHz
#endif
} SPIClockDivider_e;
@@ -65,8 +65,7 @@ typedef enum SPIDevice {
SPIDEV_1 = 0,
SPIDEV_2,
SPIDEV_3,
- SPIDEV_4,
- SPIDEV_MAX = SPIDEV_4,
+ SPIDEV_4
} SPIDevice;
typedef struct SPIDevice_s {
diff --git a/src/main/drivers/bus_spi_soft.h b/src/main/drivers/bus_spi_soft.h
index 88b106e3f..facb0be93 100644
--- a/src/main/drivers/bus_spi_soft.h
+++ b/src/main/drivers/bus_spi_soft.h
@@ -20,8 +20,7 @@
#include "io_types.h"
typedef enum softSPIDevice {
- SOFT_SPIDEV_1 = 0,
- SOFT_SPIDEV_MAX = SOFT_SPIDEV_1,
+ SOFT_SPIDEV_1 = 0
} softSPIDevice_e;
typedef struct softSPIDevice_s {
diff --git a/src/main/drivers/compass.h b/src/main/drivers/compass.h
index 019e65417..f1bfbd9d3 100644
--- a/src/main/drivers/compass.h
+++ b/src/main/drivers/compass.h
@@ -22,6 +22,7 @@
typedef struct magDev_s {
sensorInitFuncPtr init; // initialize function
sensorReadFuncPtr read; // read 3 axis data function
+ sensor_align_e magAlign;
} magDev_t;
#ifndef MAG_I2C_INSTANCE
diff --git a/src/main/drivers/compass_fake.c b/src/main/drivers/compass_fake.c
new file mode 100644
index 000000000..cb8098c77
--- /dev/null
+++ b/src/main/drivers/compass_fake.c
@@ -0,0 +1,66 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#include
+#include
+
+#include "platform.h"
+
+#ifdef USE_FAKE_MAG
+
+#include "build/build_config.h"
+
+#include "common/axis.h"
+
+#include "compass.h"
+#include "compass_fake.h"
+
+
+static int16_t fakeMagData[XYZ_AXIS_COUNT];
+
+static bool fakeMagInit(void)
+{
+ // initially point north
+ fakeMagData[X] = 4096;
+ fakeMagData[Y] = 0;
+ fakeMagData[Z] = 0;
+ return true;
+}
+
+void fakeMagSet(int16_t x, int16_t y, int16_t z)
+{
+ fakeMagData[X] = x;
+ fakeMagData[Y] = y;
+ fakeMagData[Z] = z;
+}
+
+static bool fakeMagRead(int16_t *magData)
+{
+ magData[X] = fakeMagData[X];
+ magData[Y] = fakeMagData[Y];
+ magData[Z] = fakeMagData[Z];
+ return true;
+}
+
+bool fakeMagDetect(magDev_t *mag)
+{
+ mag->init = fakeMagInit;
+ mag->read = fakeMagRead;
+ return true;
+}
+#endif // USE_FAKE_MAG
+
diff --git a/src/main/drivers/compass_fake.h b/src/main/drivers/compass_fake.h
new file mode 100644
index 000000000..81957c356
--- /dev/null
+++ b/src/main/drivers/compass_fake.h
@@ -0,0 +1,22 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#pragma once
+
+struct magDev_s;
+bool fakeMagDetect(struct magDev_s *mag);
+void fakeMagSet(int16_t x, int16_t y, int16_t z);
diff --git a/src/main/drivers/pwm_rx.c b/src/main/drivers/pwm_rx.c
index cc8aad33f..2adaa8af6 100644
--- a/src/main/drivers/pwm_rx.c
+++ b/src/main/drivers/pwm_rx.c
@@ -55,7 +55,7 @@ void pwmICConfig(TIM_TypeDef *tim, uint8_t channel, uint16_t polarity);
typedef enum {
INPUT_MODE_PPM,
- INPUT_MODE_PWM,
+ INPUT_MODE_PWM
} pwmInputMode_t;
typedef struct {
diff --git a/src/main/drivers/rcc.h b/src/main/drivers/rcc.h
index 4dee74ee7..6c1384ff3 100644
--- a/src/main/drivers/rcc.h
+++ b/src/main/drivers/rcc.h
@@ -7,7 +7,7 @@ enum rcc_reg {
RCC_AHB,
RCC_APB2,
RCC_APB1,
- RCC_AHB1,
+ RCC_AHB1
};
#define RCC_ENCODE(reg, mask) (((reg) << 5) | LOG2_32BIT(mask))
diff --git a/src/main/drivers/rx_nrf24l01.h b/src/main/drivers/rx_nrf24l01.h
index 08d2c8afa..27d3c65cb 100644
--- a/src/main/drivers/rx_nrf24l01.h
+++ b/src/main/drivers/rx_nrf24l01.h
@@ -106,7 +106,7 @@ enum {
NRF24L01_1D_FEATURE_EN_DPL = 2,
NRF24L01_1D_FEATURE_EN_ACK_PAY = 1,
- NRF24L01_1D_FEATURE_EN_DYN_ACK = 0,
+ NRF24L01_1D_FEATURE_EN_DYN_ACK = 0
};
// Pre-shifted and combined bits
@@ -162,7 +162,7 @@ enum {
NRF24L01_06_RF_SETUP_RF_PWR_n6dbm = 0x04,
NRF24L01_06_RF_SETUP_RF_PWR_0dbm = 0x06,
- NRF24L01_1C_DYNPD_ALL_PIPES = 0x3F,
+ NRF24L01_1C_DYNPD_ALL_PIPES = 0x3F
};
// Pipes
diff --git a/src/main/drivers/rx_spi.h b/src/main/drivers/rx_spi.h
index f083ca505..0afd720fc 100644
--- a/src/main/drivers/rx_spi.h
+++ b/src/main/drivers/rx_spi.h
@@ -20,7 +20,7 @@
typedef enum {
RX_SPI_SOFTSPI,
- RX_SPI_HARDSPI,
+ RX_SPI_HARDSPI
} rx_spi_type_e;
#define RX_SPI_MAX_PAYLOAD_SIZE 32
diff --git a/src/main/drivers/sdcard.c b/src/main/drivers/sdcard.c
index e74303f17..66aafc25b 100644
--- a/src/main/drivers/sdcard.c
+++ b/src/main/drivers/sdcard.c
@@ -67,7 +67,7 @@ typedef enum {
SDCARD_STATE_SENDING_WRITE,
SDCARD_STATE_WAITING_FOR_WRITE,
SDCARD_STATE_WRITING_MULTIPLE_BLOCKS,
- SDCARD_STATE_STOPPING_MULTIPLE_BLOCK_WRITE,
+ SDCARD_STATE_STOPPING_MULTIPLE_BLOCK_WRITE
} sdcardState_e;
typedef struct sdcard_t {
@@ -352,7 +352,7 @@ static bool sdcard_readOCRRegister(uint32_t *result)
typedef enum {
SDCARD_RECEIVE_SUCCESS,
SDCARD_RECEIVE_BLOCK_IN_PROGRESS,
- SDCARD_RECEIVE_ERROR,
+ SDCARD_RECEIVE_ERROR
} sdcardReceiveBlockStatus_e;
/**
diff --git a/src/main/drivers/sdcard.h b/src/main/drivers/sdcard.h
index b6b7ae0b2..aad46a0dc 100644
--- a/src/main/drivers/sdcard.h
+++ b/src/main/drivers/sdcard.h
@@ -43,7 +43,7 @@ typedef struct sdcardMetadata_s {
typedef enum {
SDCARD_BLOCK_OPERATION_READ,
SDCARD_BLOCK_OPERATION_WRITE,
- SDCARD_BLOCK_OPERATION_ERASE,
+ SDCARD_BLOCK_OPERATION_ERASE
} sdcardBlockOperation_e;
typedef enum {
diff --git a/src/main/drivers/sensor.h b/src/main/drivers/sensor.h
index 3e897f8c1..480aca7dc 100644
--- a/src/main/drivers/sensor.h
+++ b/src/main/drivers/sensor.h
@@ -17,6 +17,18 @@
#pragma once
+typedef enum {
+ ALIGN_DEFAULT = 0, // driver-provided alignment
+ CW0_DEG = 1,
+ CW90_DEG = 2,
+ CW180_DEG = 3,
+ CW270_DEG = 4,
+ CW0_DEG_FLIP = 5,
+ CW90_DEG_FLIP = 6,
+ CW180_DEG_FLIP = 7,
+ CW270_DEG_FLIP = 8
+} sensor_align_e;
+
struct accDev_s;
typedef void (*sensorInitFuncPtr)(void); // sensor init prototype
typedef bool (*sensorReadFuncPtr)(int16_t *data); // sensor read and align prototype
diff --git a/src/main/drivers/serial_escserial.c b/src/main/drivers/serial_escserial.c
index 6b91bae06..351b2c98c 100644
--- a/src/main/drivers/serial_escserial.c
+++ b/src/main/drivers/serial_escserial.c
@@ -24,7 +24,7 @@
typedef enum {
BAUDRATE_NORMAL = 19200,
BAUDRATE_KISS = 38400,
- BAUDRATE_CASTLE = 18880,
+ BAUDRATE_CASTLE = 18880
} escBaudRate_e;
typedef enum {
@@ -32,7 +32,7 @@ typedef enum {
PROTOCOL_BLHELI = 1,
PROTOCOL_KISS = 2,
PROTOCOL_KISSALL = 3,
- PROTOCOL_CASTLE = 4,
+ PROTOCOL_CASTLE = 4
} escProtocol_e;
#if defined(USE_ESCSERIAL)
diff --git a/src/main/drivers/vcd.h b/src/main/drivers/vcd.h
index 98aad231f..1d279a84f 100644
--- a/src/main/drivers/vcd.h
+++ b/src/main/drivers/vcd.h
@@ -25,4 +25,8 @@ typedef struct vcdProfile_s {
int8_t v_offset;
} vcdProfile_t;
-enum VIDEO_SYSTEMS { VIDEO_SYSTEM_AUTO = 0, VIDEO_SYSTEM_PAL, VIDEO_SYSTEM_NTSC };
+enum VIDEO_SYSTEMS {
+ VIDEO_SYSTEM_AUTO = 0,
+ VIDEO_SYSTEM_PAL,
+ VIDEO_SYSTEM_NTSC
+};
diff --git a/src/main/fc/config.c b/src/main/fc/config.c
index 06102c360..fa1cc67cd 100755
--- a/src/main/fc/config.c
+++ b/src/main/fc/config.c
@@ -230,13 +230,6 @@ void resetBarometerConfig(barometerConfig_t *barometerConfig)
}
#endif
-void resetSensorAlignment(sensorAlignmentConfig_t *sensorAlignmentConfig)
-{
- sensorAlignmentConfig->gyro_align = ALIGN_DEFAULT;
- sensorAlignmentConfig->acc_align = ALIGN_DEFAULT;
- sensorAlignmentConfig->mag_align = ALIGN_DEFAULT;
-}
-
#ifdef LED_STRIP
void resetLedStripConfig(ledStripConfig_t *ledStripConfig)
{
@@ -587,22 +580,24 @@ void createDefaultConfig(master_t *config)
config->debug_mode = DEBUG_MODE;
- resetAccelerometerTrims(&config->sensorTrims.accZero);
+ resetAccelerometerTrims(&config->accelerometerConfig.accZero);
- resetSensorAlignment(&config->sensorAlignmentConfig);
+ config->gyroConfig.gyro_align = ALIGN_DEFAULT;
+ config->accelerometerConfig.acc_align = ALIGN_DEFAULT;
+ config->compassConfig.mag_align = ALIGN_DEFAULT;
config->boardAlignment.rollDegrees = 0;
config->boardAlignment.pitchDegrees = 0;
config->boardAlignment.yawDegrees = 0;
- config->sensorSelectionConfig.acc_hardware = ACC_DEFAULT; // default/autodetect
+ config->accelerometerConfig.acc_hardware = ACC_DEFAULT; // default/autodetect
config->max_angle_inclination = 700; // 70 degrees
config->rcControlsConfig.yaw_control_direction = 1;
config->gyroConfig.gyroMovementCalibrationThreshold = 32;
// xxx_hardware: 0:default/autodetect, 1: disable
- config->sensorSelectionConfig.mag_hardware = 1;
+ config->compassConfig.mag_hardware = 1;
- config->sensorSelectionConfig.baro_hardware = 1;
+ config->barometerConfig.baro_hardware = 1;
resetBatteryConfig(&config->batteryConfig);
@@ -842,7 +837,7 @@ void activateConfig(void)
#endif
useFailsafeConfig(&masterConfig.failsafeConfig);
- setAccelerationTrims(&sensorTrims()->accZero);
+ setAccelerationTrims(&accelerometerConfig()->accZero);
setAccelerationFilter(accelerometerConfig()->acc_lpf_hz);
mixerUseConfigs(
@@ -1004,13 +999,6 @@ void validateAndFixGyroConfig(void)
}
}
-void readEEPROMAndNotify(void)
-{
- // re-read written data
- readEEPROM();
- beeperConfirmationBeeps(1);
-}
-
void ensureEEPROMContainsValidData(void)
{
if (isEEPROMContentValid()) {
@@ -1029,7 +1017,8 @@ void resetEEPROM(void)
void saveConfigAndNotify(void)
{
writeEEPROM();
- readEEPROMAndNotify();
+ readEEPROM();
+ beeperConfirmationBeeps(1);
}
void changeProfile(uint8_t profileIndex)
diff --git a/src/main/fc/config.h b/src/main/fc/config.h
index 3a3c4334a..c5fe4ecf6 100644
--- a/src/main/fc/config.h
+++ b/src/main/fc/config.h
@@ -55,7 +55,7 @@ typedef enum {
FEATURE_VTX = 1 << 24,
FEATURE_RX_SPI = 1 << 25,
FEATURE_SOFTSPI = 1 << 26,
- FEATURE_ESC_TELEMETRY = 1 << 27,
+ FEATURE_ESC_TELEMETRY = 1 << 27
} features_e;
void beeperOffSet(uint32_t mask);
@@ -70,7 +70,6 @@ void setPreferredBeeperOffMask(uint32_t mask);
void copyCurrentProfileToProfileSlot(uint8_t profileSlotIndex);
void resetEEPROM(void);
-void readEEPROMAndNotify(void);
void ensureEEPROMContainsValidData(void);
void saveConfigAndNotify(void);
diff --git a/src/main/fc/fc_msp.c b/src/main/fc/fc_msp.c
index 6e2fa44ea..62d75cddb 100755
--- a/src/main/fc/fc_msp.c
+++ b/src/main/fc/fc_msp.c
@@ -176,7 +176,7 @@ typedef enum {
} mspSDCardState_e;
typedef enum {
- MSP_SDCARD_FLAG_SUPPORTTED = 1,
+ MSP_SDCARD_FLAG_SUPPORTTED = 1
} mspSDCardFlags_e;
#define RATEPROFILE_MASK (1 << 7)
@@ -606,6 +606,8 @@ static bool mspFcProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostProcessFn
sbufWriteU16(dst, sensors(SENSOR_ACC) | sensors(SENSOR_BARO) << 1 | sensors(SENSOR_MAG) << 2 | sensors(SENSOR_GPS) << 3 | sensors(SENSOR_SONAR) << 4);
sbufWriteU32(dst, packFlightModeFlags());
sbufWriteU8(dst, masterConfig.current_profile_index);
+ sbufWriteU16(dst, constrain(averageSystemLoadPercent, 0, 100));
+ sbufWriteU16(dst, 0); // gyro cycle time
break;
case MSP_RAW_IMU:
@@ -1079,9 +1081,9 @@ static bool mspFcProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostProcessFn
break;
case MSP_SENSOR_ALIGNMENT:
- sbufWriteU8(dst, sensorAlignmentConfig()->gyro_align);
- sbufWriteU8(dst, sensorAlignmentConfig()->acc_align);
- sbufWriteU8(dst, sensorAlignmentConfig()->mag_align);
+ sbufWriteU8(dst, gyroConfig()->gyro_align);
+ sbufWriteU8(dst, accelerometerConfig()->acc_align);
+ sbufWriteU8(dst, compassConfig()->mag_align);
break;
case MSP_ADVANCED_CONFIG:
@@ -1125,9 +1127,9 @@ static bool mspFcProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostProcessFn
break;
case MSP_SENSOR_CONFIG:
- sbufWriteU8(dst, sensorSelectionConfig()->acc_hardware);
- sbufWriteU8(dst, sensorSelectionConfig()->baro_hardware);
- sbufWriteU8(dst, sensorSelectionConfig()->mag_hardware);
+ sbufWriteU8(dst, accelerometerConfig()->acc_hardware);
+ sbufWriteU8(dst, barometerConfig()->baro_hardware);
+ sbufWriteU8(dst, compassConfig()->mag_hardware);
break;
case MSP_REBOOT:
@@ -1432,9 +1434,9 @@ static mspResult_e mspFcProcessInCommand(uint8_t cmdMSP, sbuf_t *src)
break;
case MSP_SET_SENSOR_ALIGNMENT:
- sensorAlignmentConfig()->gyro_align = sbufReadU8(src);
- sensorAlignmentConfig()->acc_align = sbufReadU8(src);
- sensorAlignmentConfig()->mag_align = sbufReadU8(src);
+ gyroConfig()->gyro_align = sbufReadU8(src);
+ accelerometerConfig()->acc_align = sbufReadU8(src);
+ compassConfig()->mag_align = sbufReadU8(src);
break;
case MSP_SET_ADVANCED_CONFIG:
@@ -1487,9 +1489,9 @@ static mspResult_e mspFcProcessInCommand(uint8_t cmdMSP, sbuf_t *src)
break;
case MSP_SET_SENSOR_CONFIG:
- sensorSelectionConfig()->acc_hardware = sbufReadU8(src);
- sensorSelectionConfig()->baro_hardware = sbufReadU8(src);
- sensorSelectionConfig()->mag_hardware = sbufReadU8(src);
+ accelerometerConfig()->acc_hardware = sbufReadU8(src);
+ barometerConfig()->baro_hardware = sbufReadU8(src);
+ compassConfig()->mag_hardware = sbufReadU8(src);
break;
case MSP_RESET_CONF:
@@ -1559,7 +1561,10 @@ static mspResult_e mspFcProcessInCommand(uint8_t cmdMSP, sbuf_t *src)
osdProfile()->alt_alarm = sbufReadU16(src);
} else {
// set a position setting
- osdProfile()->item_pos[addr] = sbufReadU16(src);
+ const uint16_t pos = sbufReadU16(src);
+ if (addr < OSD_ITEM_COUNT) {
+ osdProfile()->item_pos[addr] = pos;
+ }
}
}
break;
diff --git a/src/main/fc/fc_tasks.c b/src/main/fc/fc_tasks.c
index 32158a5a2..0ecdd239d 100644
--- a/src/main/fc/fc_tasks.c
+++ b/src/main/fc/fc_tasks.c
@@ -160,7 +160,7 @@ static void taskUpdateRxMain(timeUs_t currentTimeUs)
static void taskUpdateCompass(timeUs_t currentTimeUs)
{
if (sensors(SENSOR_MAG)) {
- compassUpdate(currentTimeUs, &sensorTrims()->magZero);
+ compassUpdate(currentTimeUs, &compassConfig()->magZero);
}
}
#endif
diff --git a/src/main/fc/mw.c b/src/main/fc/mw.c
index f6eaa56b9..0743b6cff 100644
--- a/src/main/fc/mw.c
+++ b/src/main/fc/mw.c
@@ -373,18 +373,6 @@ void mwDisarm(void)
}
}
-#define TELEMETRY_FUNCTION_MASK (FUNCTION_TELEMETRY_FRSKY | FUNCTION_TELEMETRY_HOTT | FUNCTION_TELEMETRY_LTM | FUNCTION_TELEMETRY_SMARTPORT)
-
-#ifdef TELEMETRY
-static void releaseSharedTelemetryPorts(void) {
- serialPort_t *sharedPort = findSharedSerialPort(TELEMETRY_FUNCTION_MASK, FUNCTION_MSP);
- while (sharedPort) {
- mspSerialReleasePortIfAllocated(sharedPort);
- sharedPort = findNextSharedSerialPort(TELEMETRY_FUNCTION_MASK, FUNCTION_MSP);
- }
-}
-#endif
-
void mwArm(void)
{
static bool firstArmingCalibrationWasCompleted;
diff --git a/src/main/fc/rc_controls.h b/src/main/fc/rc_controls.h
index 7d50636d3..13c5dc6cb 100644
--- a/src/main/fc/rc_controls.h
+++ b/src/main/fc/rc_controls.h
@@ -207,8 +207,7 @@ typedef enum {
ADJUSTMENT_RC_RATE_YAW,
ADJUSTMENT_D_SETPOINT,
ADJUSTMENT_D_SETPOINT_TRANSITION,
- ADJUSTMENT_FUNCTION_COUNT,
-
+ ADJUSTMENT_FUNCTION_COUNT
} adjustmentFunction_e;
diff --git a/src/main/fc/runtime_config.h b/src/main/fc/runtime_config.h
index 8366f9606..04441c565 100644
--- a/src/main/fc/runtime_config.h
+++ b/src/main/fc/runtime_config.h
@@ -43,7 +43,7 @@ typedef enum {
PASSTHRU_MODE = (1 << 8),
SONAR_MODE = (1 << 9),
FAILSAFE_MODE = (1 << 10),
- GTUNE_MODE = (1 << 11),
+ GTUNE_MODE = (1 << 11)
} flightModeFlags_e;
extern uint16_t flightModeFlags;
@@ -57,7 +57,7 @@ typedef enum {
GPS_FIX = (1 << 1),
CALIBRATE_MAG = (1 << 2),
SMALL_ANGLE = (1 << 3),
- FIXED_WING = (1 << 4), // set when in flying_wing or airplane mode. currently used by althold selection code
+ FIXED_WING = (1 << 4) // set when in flying_wing or airplane mode. currently used by althold selection code
} stateFlags_t;
#define DISABLE_STATE(mask) (stateFlags &= ~(mask))
diff --git a/src/main/flight/servos.c b/src/main/flight/servos.c
index 0469238cb..707957aa5 100755
--- a/src/main/flight/servos.c
+++ b/src/main/flight/servos.c
@@ -177,7 +177,7 @@ void servoMixerInit(servoMixer_t *initialCustomServoMixers)
// enable servos for mixes that require them. note, this shifts motor counts.
useServo = mixers[currentMixerMode].useServo;
// if we want camstab/trig, that also enables servos, even if mixer doesn't
- if (feature(FEATURE_SERVO_TILT))
+ if (feature(FEATURE_SERVO_TILT) || feature(FEATURE_CHANNEL_FORWARDING))
useServo = 1;
// give all servos a default command
diff --git a/src/main/flight/servos.h b/src/main/flight/servos.h
index 66f86955b..756a0667e 100644
--- a/src/main/flight/servos.h
+++ b/src/main/flight/servos.h
@@ -35,7 +35,6 @@ enum {
INPUT_RC_AUX4,
INPUT_GIMBAL_PITCH,
INPUT_GIMBAL_ROLL,
-
INPUT_SOURCE_COUNT
} inputSource_e;
@@ -59,8 +58,7 @@ typedef enum {
SERVO_SINGLECOPTER_1 = 3,
SERVO_SINGLECOPTER_2 = 4,
SERVO_SINGLECOPTER_3 = 5,
- SERVO_SINGLECOPTER_4 = 6,
-
+ SERVO_SINGLECOPTER_4 = 6
} servoIndex_e; // FIXME rename to servoChannel_e
#define SERVO_PLANE_INDEX_MIN SERVO_FLAPS
diff --git a/src/main/io/asyncfatfs/asyncfatfs.c b/src/main/io/asyncfatfs/asyncfatfs.c
index 57b8f0c86..040a2e584 100644
--- a/src/main/io/asyncfatfs/asyncfatfs.c
+++ b/src/main/io/asyncfatfs/asyncfatfs.c
@@ -98,7 +98,7 @@
typedef enum {
AFATFS_SAVE_DIRECTORY_NORMAL,
AFATFS_SAVE_DIRECTORY_FOR_CLOSE,
- AFATFS_SAVE_DIRECTORY_DELETED,
+ AFATFS_SAVE_DIRECTORY_DELETED
} afatfsSaveDirectoryEntryMode_e;
typedef enum {
@@ -119,7 +119,7 @@ typedef enum {
typedef enum {
CLUSTER_SEARCH_FREE_AT_BEGINNING_OF_FAT_SECTOR,
CLUSTER_SEARCH_FREE,
- CLUSTER_SEARCH_OCCUPIED,
+ CLUSTER_SEARCH_OCCUPIED
} afatfsClusterSearchCondition_e;
enum {
@@ -127,14 +127,14 @@ enum {
AFATFS_CREATEFILE_PHASE_FIND_FILE,
AFATFS_CREATEFILE_PHASE_CREATE_NEW_FILE,
AFATFS_CREATEFILE_PHASE_SUCCESS,
- AFATFS_CREATEFILE_PHASE_FAILURE,
+ AFATFS_CREATEFILE_PHASE_FAILURE
};
typedef enum {
AFATFS_FIND_CLUSTER_IN_PROGRESS,
AFATFS_FIND_CLUSTER_FOUND,
AFATFS_FIND_CLUSTER_FATAL,
- AFATFS_FIND_CLUSTER_NOT_FOUND,
+ AFATFS_FIND_CLUSTER_NOT_FOUND
} afatfsFindClusterStatus_e;
struct afatfsFileOperation_t;
@@ -234,7 +234,7 @@ typedef enum {
AFATFS_APPEND_SUPERCLUSTER_PHASE_INIT = 0,
AFATFS_APPEND_SUPERCLUSTER_PHASE_UPDATE_FREEFILE_DIRECTORY,
AFATFS_APPEND_SUPERCLUSTER_PHASE_UPDATE_FAT,
- AFATFS_APPEND_SUPERCLUSTER_PHASE_UPDATE_FILE_DIRECTORY,
+ AFATFS_APPEND_SUPERCLUSTER_PHASE_UPDATE_FILE_DIRECTORY
} afatfsAppendSuperclusterPhase_e;
typedef struct afatfsAppendSupercluster_t {
@@ -251,7 +251,7 @@ typedef enum {
AFATFS_APPEND_FREE_CLUSTER_PHASE_UPDATE_FAT2,
AFATFS_APPEND_FREE_CLUSTER_PHASE_UPDATE_FILE_DIRECTORY,
AFATFS_APPEND_FREE_CLUSTER_PHASE_COMPLETE,
- AFATFS_APPEND_FREE_CLUSTER_PHASE_FAILURE,
+ AFATFS_APPEND_FREE_CLUSTER_PHASE_FAILURE
} afatfsAppendFreeClusterPhase_e;
typedef struct afatfsAppendFreeCluster_t {
@@ -286,7 +286,7 @@ typedef enum {
AFATFS_TRUNCATE_FILE_ERASE_FAT_CHAIN_CONTIGUOUS,
AFATFS_TRUNCATE_FILE_PREPEND_TO_FREEFILE,
#endif
- AFATFS_TRUNCATE_FILE_SUCCESS,
+ AFATFS_TRUNCATE_FILE_SUCCESS
} afatfsTruncateFilePhase_e;
typedef struct afatfsTruncateFile_t {
@@ -299,7 +299,7 @@ typedef struct afatfsTruncateFile_t {
typedef enum {
AFATFS_DELETE_FILE_DELETE_DIRECTORY_ENTRY,
- AFATFS_DELETE_FILE_DEALLOCATE_CLUSTERS,
+ AFATFS_DELETE_FILE_DEALLOCATE_CLUSTERS
} afatfsDeleteFilePhase_e;
typedef struct afatfsDeleteFile_t {
@@ -323,7 +323,7 @@ typedef enum {
AFATFS_FILE_OPERATION_LOCKED,
#endif
AFATFS_FILE_OPERATION_APPEND_FREE_CLUSTER,
- AFATFS_FILE_OPERATION_EXTEND_SUBDIRECTORY,
+ AFATFS_FILE_OPERATION_EXTEND_SUBDIRECTORY
} afatfsFileOperation_e;
typedef struct afatfsFileOperation_t {
diff --git a/src/main/io/asyncfatfs/asyncfatfs.h b/src/main/io/asyncfatfs/asyncfatfs.h
index fd515694b..faeb7ea51 100644
--- a/src/main/io/asyncfatfs/asyncfatfs.h
+++ b/src/main/io/asyncfatfs/asyncfatfs.h
@@ -28,13 +28,13 @@ typedef enum {
AFATFS_FILESYSTEM_STATE_UNKNOWN,
AFATFS_FILESYSTEM_STATE_FATAL,
AFATFS_FILESYSTEM_STATE_INITIALIZATION,
- AFATFS_FILESYSTEM_STATE_READY,
+ AFATFS_FILESYSTEM_STATE_READY
} afatfsFilesystemState_e;
typedef enum {
AFATFS_OPERATION_IN_PROGRESS,
AFATFS_OPERATION_SUCCESS,
- AFATFS_OPERATION_FAILURE,
+ AFATFS_OPERATION_FAILURE
} afatfsOperationStatus_e;
typedef enum {
@@ -54,7 +54,7 @@ typedef afatfsDirEntryPointer_t afatfsFinder_t;
typedef enum {
AFATFS_SEEK_SET,
AFATFS_SEEK_CUR,
- AFATFS_SEEK_END,
+ AFATFS_SEEK_END
} afatfsSeek_e;
typedef void (*afatfsFileCallback_t)(afatfsFilePtr_t file);
diff --git a/src/main/io/asyncfatfs/fat_standard.h b/src/main/io/asyncfatfs/fat_standard.h
index 590bc43a5..4d63b2c65 100644
--- a/src/main/io/asyncfatfs/fat_standard.h
+++ b/src/main/io/asyncfatfs/fat_standard.h
@@ -54,7 +54,7 @@ typedef enum {
FAT_FILESYSTEM_TYPE_INVALID,
FAT_FILESYSTEM_TYPE_FAT12,
FAT_FILESYSTEM_TYPE_FAT16,
- FAT_FILESYSTEM_TYPE_FAT32,
+ FAT_FILESYSTEM_TYPE_FAT32
} fatFilesystemType_e;
typedef struct mbrPartitionEntry_t {
diff --git a/src/main/io/beeper.h b/src/main/io/beeper.h
index 0822b285b..15a40eef5 100644
--- a/src/main/io/beeper.h
+++ b/src/main/io/beeper.h
@@ -43,7 +43,7 @@ typedef enum {
BEEPER_USB, // Some boards have beeper powered USB connected
BEEPER_ALL, // Turn ON or OFF all beeper conditions
- BEEPER_PREFERENCE, // Save preferred beeper configuration
+ BEEPER_PREFERENCE // Save preferred beeper configuration
// BEEPER_ALL and BEEPER_PREFERENCE must remain at the bottom of this enum
} beeperMode_e;
diff --git a/src/main/io/flashfs.c b/src/main/io/flashfs.c
index de897b7c6..5e346d1b8 100644
--- a/src/main/io/flashfs.c
+++ b/src/main/io/flashfs.c
@@ -503,7 +503,7 @@ int flashfsIdentifyStartOfFreeSpace()
/* We don't expect valid data to ever contain this many consecutive uint32_t's of all 1 bits: */
FREE_BLOCK_TEST_SIZE_INTS = 4, // i.e. 16 bytes
- FREE_BLOCK_TEST_SIZE_BYTES = FREE_BLOCK_TEST_SIZE_INTS * sizeof(uint32_t),
+ FREE_BLOCK_TEST_SIZE_BYTES = FREE_BLOCK_TEST_SIZE_INTS * sizeof(uint32_t)
};
union {
diff --git a/src/main/io/gps.c b/src/main/io/gps.c
index 15a6767be..c4925d8f4 100755
--- a/src/main/io/gps.c
+++ b/src/main/io/gps.c
@@ -175,7 +175,7 @@ typedef enum {
GPS_CHANGE_BAUD,
GPS_CONFIGURE,
GPS_RECEIVING_DATA,
- GPS_LOST_COMMUNICATION,
+ GPS_LOST_COMMUNICATION
} gpsState_e;
gpsData_t gpsData;
diff --git a/src/main/io/gps.h b/src/main/io/gps.h
index 5e258f3a0..6cbced3e8 100644
--- a/src/main/io/gps.h
+++ b/src/main/io/gps.h
@@ -51,7 +51,7 @@ typedef enum {
typedef enum {
GPS_AUTOCONFIG_OFF = 0,
- GPS_AUTOCONFIG_ON,
+ GPS_AUTOCONFIG_ON
} gpsAutoConfig_e;
typedef enum {
@@ -78,11 +78,9 @@ typedef enum {
GPS_MESSAGE_STATE_IDLE = 0,
GPS_MESSAGE_STATE_INIT,
GPS_MESSAGE_STATE_SBAS,
- GPS_MESSAGE_STATE_MAX = GPS_MESSAGE_STATE_SBAS
+ GPS_MESSAGE_STATE_ENTRY_COUNT
} gpsMessageState_e;
-#define GPS_MESSAGE_STATE_ENTRY_COUNT (GPS_MESSAGE_STATE_MAX + 1)
-
typedef struct gpsData_s {
uint8_t state; // GPS thread state. Used for detecting cable disconnects and configuring attached devices
uint8_t baudrateIndex; // index into auto-detecting or current baudrate
diff --git a/src/main/io/ledstrip.c b/src/main/io/ledstrip.c
index 310986ae2..7fa0ce919 100644
--- a/src/main/io/ledstrip.c
+++ b/src/main/io/ledstrip.c
@@ -114,7 +114,7 @@ typedef enum {
COLOR_BLUE,
COLOR_DARK_VIOLET,
COLOR_MAGENTA,
- COLOR_DEEP_PINK,
+ COLOR_DEEP_PINK
} colorId_e;
const hsvColor_t hsv[] = {
diff --git a/src/main/io/ledstrip.h b/src/main/io/ledstrip.h
index b545a3a4e..246cb9925 100644
--- a/src/main/io/ledstrip.h
+++ b/src/main/io/ledstrip.h
@@ -108,7 +108,7 @@ typedef enum {
LED_FUNCTION_BATTERY,
LED_FUNCTION_RSSI,
LED_FUNCTION_GPS,
- LED_FUNCTION_THRUST_RING,
+ LED_FUNCTION_THRUST_RING
} ledBaseFunctionId_e;
typedef enum {
@@ -117,7 +117,7 @@ typedef enum {
LED_OVERLAY_BLINK,
LED_OVERLAY_LANDING_FLASH,
LED_OVERLAY_INDICATOR,
- LED_OVERLAY_WARNING,
+ LED_OVERLAY_WARNING
} ledOverlayId_e;
typedef struct modeColorIndexes_s {
diff --git a/src/main/io/osd.c b/src/main/io/osd.c
index 92d071de1..ca21509f2 100755
--- a/src/main/io/osd.c
+++ b/src/main/io/osd.c
@@ -333,6 +333,27 @@ static void osdDrawSingleElement(uint8_t item)
return;
}
+ case OSD_ROLL_PIDS:
+ {
+ const pidProfile_t *pidProfile = ¤tProfile->pidProfile;
+ sprintf(buff, "ROL %3d %3d %3d", pidProfile->P8[PIDROLL], pidProfile->I8[PIDROLL], pidProfile->D8[PIDROLL]);
+ break;
+ }
+
+ case OSD_PITCH_PIDS:
+ {
+ const pidProfile_t *pidProfile = ¤tProfile->pidProfile;
+ sprintf(buff, "PIT %3d %3d %3d", pidProfile->P8[PIDPITCH], pidProfile->I8[PIDPITCH], pidProfile->D8[PIDPITCH]);
+ break;
+ }
+
+ case OSD_YAW_PIDS:
+ {
+ const pidProfile_t *pidProfile = ¤tProfile->pidProfile;
+ sprintf(buff, "YAW %3d %3d %3d", pidProfile->P8[PIDYAW], pidProfile->I8[PIDYAW], pidProfile->D8[PIDYAW]);
+ break;
+ }
+
default:
return;
}
@@ -372,6 +393,9 @@ void osdDrawElements(void)
osdDrawSingleElement(OSD_MAH_DRAWN);
osdDrawSingleElement(OSD_CRAFT_NAME);
osdDrawSingleElement(OSD_ALTITUDE);
+ osdDrawSingleElement(OSD_ROLL_PIDS);
+ osdDrawSingleElement(OSD_PITCH_PIDS);
+ osdDrawSingleElement(OSD_YAW_PIDS);
#ifdef GPS
#ifdef CMS
@@ -403,6 +427,9 @@ void osdResetConfig(osd_profile_t *osdProfile)
osdProfile->item_pos[OSD_GPS_SPEED] = OSD_POS(2, 2);
osdProfile->item_pos[OSD_GPS_SATS] = OSD_POS(2, 12);
osdProfile->item_pos[OSD_ALTITUDE] = OSD_POS(1, 5);
+ osdProfile->item_pos[OSD_ROLL_PIDS] = OSD_POS(2, 10) | VISIBLE_FLAG;
+ osdProfile->item_pos[OSD_PITCH_PIDS] = OSD_POS(2, 11) | VISIBLE_FLAG;
+ osdProfile->item_pos[OSD_YAW_PIDS] = OSD_POS(2, 12) | VISIBLE_FLAG;
osdProfile->rssi_alarm = 20;
osdProfile->cap_alarm = 2200;
diff --git a/src/main/io/osd.h b/src/main/io/osd.h
index 5a6a28ed1..c3642218a 100755
--- a/src/main/io/osd.h
+++ b/src/main/io/osd.h
@@ -40,6 +40,9 @@ typedef enum {
OSD_GPS_SPEED,
OSD_GPS_SATS,
OSD_ALTITUDE,
+ OSD_ROLL_PIDS,
+ OSD_PITCH_PIDS,
+ OSD_YAW_PIDS,
OSD_ITEM_COUNT // MUST BE LAST
} osd_items_e;
diff --git a/src/main/io/serial.h b/src/main/io/serial.h
index d3dbe37f0..6c702f488 100644
--- a/src/main/io/serial.h
+++ b/src/main/io/serial.h
@@ -75,8 +75,7 @@ typedef enum {
SERIAL_PORT_USART8,
SERIAL_PORT_USB_VCP = 20,
SERIAL_PORT_SOFTSERIAL1 = 30,
- SERIAL_PORT_SOFTSERIAL2,
- SERIAL_PORT_IDENTIFIER_MAX = SERIAL_PORT_SOFTSERIAL2
+ SERIAL_PORT_SOFTSERIAL2
} serialPortIdentifier_e;
extern const serialPortIdentifier_e serialPortIdentifiers[SERIAL_PORT_COUNT];
diff --git a/src/main/io/serial.h.orig b/src/main/io/serial.h.orig
new file mode 100644
index 000000000..cc23aa7c9
--- /dev/null
+++ b/src/main/io/serial.h.orig
@@ -0,0 +1,158 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#pragma once
+
+#include "drivers/serial.h"
+
+typedef enum {
+ PORTSHARING_UNUSED = 0,
+ PORTSHARING_NOT_SHARED,
+ PORTSHARING_SHARED
+} portSharing_e;
+
+typedef enum {
+ FUNCTION_NONE = 0,
+ FUNCTION_MSP = (1 << 0), // 1
+ FUNCTION_GPS = (1 << 1), // 2
+ FUNCTION_TELEMETRY_FRSKY = (1 << 2), // 4
+ FUNCTION_TELEMETRY_HOTT = (1 << 3), // 8
+ FUNCTION_TELEMETRY_LTM = (1 << 4), // 16
+ FUNCTION_TELEMETRY_SMARTPORT = (1 << 5), // 32
+ FUNCTION_RX_SERIAL = (1 << 6), // 64
+ FUNCTION_BLACKBOX = (1 << 7), // 128
+
+ FUNCTION_TELEMETRY_MAVLINK = (1 << 9), // 512
+<<<<<<< HEAD
+ FUNCTION_TELEMETRY_ESC = (1 << 10), // 1024
+ FUNCTION_VTX_CONTROL = (1 << 11),// 2048
+=======
+ FUNCTION_TELEMETRY_ESC = (1 << 10) // 1024
+>>>>>>> betaflight/master
+} serialPortFunction_e;
+
+typedef enum {
+ BAUD_AUTO = 0,
+ BAUD_9600,
+ BAUD_19200,
+ BAUD_38400,
+ BAUD_57600,
+ BAUD_115200,
+ BAUD_230400,
+ BAUD_250000,
+ BAUD_400000,
+ BAUD_460800,
+ BAUD_500000,
+ BAUD_921600,
+ BAUD_1000000,
+ BAUD_1500000,
+ BAUD_2000000,
+ BAUD_2470000
+} baudRate_e;
+
+extern const uint32_t baudRates[];
+
+// serial port identifiers are now fixed, these values are used by MSP commands.
+typedef enum {
+ SERIAL_PORT_NONE = -1,
+ SERIAL_PORT_USART1 = 0,
+ SERIAL_PORT_USART2,
+ SERIAL_PORT_USART3,
+ SERIAL_PORT_USART4,
+ SERIAL_PORT_USART5,
+ SERIAL_PORT_USART6,
+ SERIAL_PORT_USART7,
+ SERIAL_PORT_USART8,
+ SERIAL_PORT_USB_VCP = 20,
+ SERIAL_PORT_SOFTSERIAL1 = 30,
+ SERIAL_PORT_SOFTSERIAL2
+} serialPortIdentifier_e;
+
+extern const serialPortIdentifier_e serialPortIdentifiers[SERIAL_PORT_COUNT];
+
+//
+// runtime
+//
+typedef struct serialPortUsage_s {
+ serialPortIdentifier_e identifier;
+ serialPort_t *serialPort;
+ serialPortFunction_e function;
+} serialPortUsage_t;
+
+serialPort_t *findSharedSerialPort(uint16_t functionMask, serialPortFunction_e sharedWithFunction);
+serialPort_t *findNextSharedSerialPort(uint16_t functionMask, serialPortFunction_e sharedWithFunction);
+
+//
+// configuration
+//
+typedef struct serialPortConfig_s {
+ serialPortIdentifier_e identifier;
+ uint16_t functionMask;
+ uint8_t msp_baudrateIndex;
+ uint8_t gps_baudrateIndex;
+ uint8_t blackbox_baudrateIndex;
+ uint8_t telemetry_baudrateIndex; // not used for all telemetry systems, e.g. HoTT only works at 19200.
+} serialPortConfig_t;
+
+typedef struct serialConfig_s {
+ uint8_t reboot_character; // which byte is used to reboot. Default 'R', could be changed carefully to something else.
+ serialPortConfig_t portConfigs[SERIAL_PORT_COUNT];
+} serialConfig_t;
+
+typedef void serialConsumer(uint8_t);
+
+//
+// configuration
+//
+void serialInit(serialConfig_t *initialSerialConfig, bool softserialEnabled, serialPortIdentifier_e serialPortToDisable);
+void serialRemovePort(serialPortIdentifier_e identifier);
+uint8_t serialGetAvailablePortCount(void);
+bool serialIsPortAvailable(serialPortIdentifier_e identifier);
+bool isSerialConfigValid(serialConfig_t *serialConfig);
+serialPortConfig_t *serialFindPortConfiguration(serialPortIdentifier_e identifier);
+bool doesConfigurationUsePort(serialPortIdentifier_e portIdentifier);
+serialPortConfig_t *findSerialPortConfig(serialPortFunction_e function);
+serialPortConfig_t *findNextSerialPortConfig(serialPortFunction_e function);
+
+portSharing_e determinePortSharing(serialPortConfig_t *portConfig, serialPortFunction_e function);
+bool isSerialPortShared(serialPortConfig_t *portConfig, uint16_t functionMask, serialPortFunction_e sharedWithFunction);
+
+serialPortUsage_t *findSerialPortUsageByIdentifier(serialPortIdentifier_e identifier);
+int findSerialPortIndexByIdentifier(serialPortIdentifier_e identifier);
+//
+// runtime
+//
+serialPort_t *openSerialPort(
+ serialPortIdentifier_e identifier,
+ serialPortFunction_e function,
+ serialReceiveCallbackPtr rxCallback,
+ uint32_t baudrate,
+ portMode_t mode,
+ portOptions_t options
+);
+void closeSerialPort(serialPort_t *serialPort);
+
+void waitForSerialPortToFinishTransmitting(serialPort_t *serialPort);
+
+baudRate_e lookupBaudRateIndex(uint32_t baudRate);
+
+
+//
+// msp/cli/bootloader
+//
+void serialEvaluateNonMspData(serialPort_t *serialPort, uint8_t receivedChar);
+void serialPassthrough(serialPort_t *left, serialPort_t *right, serialConsumer *leftC, serialConsumer *rightC);
diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c
index 16e0b8331..2c0b29275 100755
--- a/src/main/io/serial_cli.c
+++ b/src/main/io/serial_cli.c
@@ -210,7 +210,7 @@ typedef enum {
DUMP_ALL = (1 << 3),
DO_DIFF = (1 << 4),
SHOW_DEFAULTS = (1 << 5),
- HIDE_UNUSED = (1 << 6),
+ HIDE_UNUSED = (1 << 6)
} dumpFlags_e;
static const char* const emptyName = "-";
@@ -803,9 +803,9 @@ const clivalue_t valueTable[] = {
{ "use_vbat_alerts", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &batteryConfig()->useVBatAlerts, .config.lookup = { TABLE_OFF_ON } },
{ "use_consumption_alerts", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &batteryConfig()->useConsumptionAlerts, .config.lookup = { TABLE_OFF_ON } },
{ "consumption_warning_percentage", VAR_UINT8 | MASTER_VALUE, &batteryConfig()->consumptionWarningPercentage, .config.minmax = { 0, 100 } },
- { "align_gyro", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &sensorAlignmentConfig()->gyro_align, .config.lookup = { TABLE_ALIGNMENT } },
- { "align_acc", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &sensorAlignmentConfig()->acc_align, .config.lookup = { TABLE_ALIGNMENT } },
- { "align_mag", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &sensorAlignmentConfig()->mag_align, .config.lookup = { TABLE_ALIGNMENT } },
+ { "align_gyro", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &gyroConfig()->gyro_align, .config.lookup = { TABLE_ALIGNMENT } },
+ { "align_acc", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &accelerometerConfig()->acc_align, .config.lookup = { TABLE_ALIGNMENT } },
+ { "align_mag", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &compassConfig()->mag_align, .config.lookup = { TABLE_ALIGNMENT } },
{ "align_board_roll", VAR_INT16 | MASTER_VALUE, &boardAlignment()->rollDegrees, .config.minmax = { -180, 360 } },
{ "align_board_pitch", VAR_INT16 | MASTER_VALUE, &boardAlignment()->pitchDegrees, .config.minmax = { -180, 360 } },
@@ -869,7 +869,7 @@ const clivalue_t valueTable[] = {
{ "rx_min_usec", VAR_UINT16 | MASTER_VALUE, &rxConfig()->rx_min_usec, .config.minmax = { PWM_PULSE_MIN, PWM_PULSE_MAX } },
{ "rx_max_usec", VAR_UINT16 | MASTER_VALUE, &rxConfig()->rx_max_usec, .config.minmax = { PWM_PULSE_MIN, PWM_PULSE_MAX } },
- { "acc_hardware", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &sensorSelectionConfig()->acc_hardware, .config.lookup = { TABLE_ACC_HARDWARE } },
+ { "acc_hardware", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &accelerometerConfig()->acc_hardware, .config.lookup = { TABLE_ACC_HARDWARE } },
{ "acc_lpf_hz", VAR_UINT16 | MASTER_VALUE, &accelerometerConfig()->acc_lpf_hz, .config.minmax = { 0, 400 } },
{ "accxy_deadband", VAR_UINT8 | MASTER_VALUE, &imuConfig()->accDeadband.xy, .config.minmax = { 0, 100 } },
{ "accz_deadband", VAR_UINT8 | MASTER_VALUE, &imuConfig()->accDeadband.z, .config.minmax = { 0, 100 } },
@@ -882,11 +882,11 @@ const clivalue_t valueTable[] = {
{ "baro_noise_lpf", VAR_FLOAT | MASTER_VALUE, &barometerConfig()->baro_noise_lpf, .config.minmax = { 0 , 1 } },
{ "baro_cf_vel", VAR_FLOAT | MASTER_VALUE, &barometerConfig()->baro_cf_vel, .config.minmax = { 0 , 1 } },
{ "baro_cf_alt", VAR_FLOAT | MASTER_VALUE, &barometerConfig()->baro_cf_alt, .config.minmax = { 0 , 1 } },
- { "baro_hardware", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &sensorSelectionConfig()->baro_hardware, .config.lookup = { TABLE_BARO_HARDWARE } },
+ { "baro_hardware", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &barometerConfig()->baro_hardware, .config.lookup = { TABLE_BARO_HARDWARE } },
#endif
#ifdef MAG
- { "mag_hardware", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &sensorSelectionConfig()->mag_hardware, .config.lookup = { TABLE_MAG_HARDWARE } },
+ { "mag_hardware", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &compassConfig()->mag_hardware, .config.lookup = { TABLE_MAG_HARDWARE } },
{ "mag_declination", VAR_INT16 | MASTER_VALUE, &compassConfig()->mag_declination, .config.minmax = { -18000, 18000 } },
#endif
{ "dterm_lowpass_type", VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, &masterConfig.profile[0].pidProfile.dterm_filter_type, .config.lookup = { TABLE_LOWPASS_TYPE } },
@@ -945,9 +945,9 @@ const clivalue_t valueTable[] = {
#endif
#ifdef MAG
- { "magzero_x", VAR_INT16 | MASTER_VALUE, &sensorTrims()->magZero.raw[X], .config.minmax = { -32768, 32767 } },
- { "magzero_y", VAR_INT16 | MASTER_VALUE, &sensorTrims()->magZero.raw[Y], .config.minmax = { -32768, 32767 } },
- { "magzero_z", VAR_INT16 | MASTER_VALUE, &sensorTrims()->magZero.raw[Z], .config.minmax = { -32768, 32767 } },
+ { "magzero_x", VAR_INT16 | MASTER_VALUE, &compassConfig()->magZero.raw[X], .config.minmax = { -32768, 32767 } },
+ { "magzero_y", VAR_INT16 | MASTER_VALUE, &compassConfig()->magZero.raw[Y], .config.minmax = { -32768, 32767 } },
+ { "magzero_z", VAR_INT16 | MASTER_VALUE, &compassConfig()->magZero.raw[Z], .config.minmax = { -32768, 32767 } },
#endif
#ifdef LED_STRIP
{ "ledstrip_visual_beeper", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &ledStripConfig()->ledstrip_visual_beeper, .config.lookup = { TABLE_OFF_ON } },
@@ -967,21 +967,24 @@ const clivalue_t valueTable[] = {
{ "osd_time_alarm", VAR_UINT16 | MASTER_VALUE, &osdProfile()->time_alarm, .config.minmax = { 0, 60 } },
{ "osd_alt_alarm", VAR_UINT16 | MASTER_VALUE, &osdProfile()->alt_alarm, .config.minmax = { 0, 10000 } },
- { "osd_main_voltage_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_MAIN_BATT_VOLTAGE], .config.minmax = { 0, 65536 } },
- { "osd_rssi_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_RSSI_VALUE], .config.minmax = { 0, 65536 } },
- { "osd_flytimer_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_FLYTIME], .config.minmax = { 0, 65536 } },
- { "osd_ontime_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_ONTIME], .config.minmax = { 0, 65536 } },
- { "osd_flymode_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_FLYMODE], .config.minmax = { 0, 65536 } },
- { "osd_throttle_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_THROTTLE_POS], .config.minmax = { 0, 65536 } },
- { "osd_vtx_channel_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_VTX_CHANNEL], .config.minmax = { 0, 65536 } },
- { "osd_crosshairs", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_CROSSHAIRS], .config.minmax = { 0, 65536 } },
- { "osd_artificial_horizon", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_ARTIFICIAL_HORIZON], .config.minmax = { 0, 65536 } },
- { "osd_current_draw_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_CURRENT_DRAW], .config.minmax = { 0, 65536 } },
- { "osd_mah_drawn_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_MAH_DRAWN], .config.minmax = { 0, 65536 } },
- { "osd_craft_name_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_CRAFT_NAME], .config.minmax = { 0, 65536 } },
- { "osd_gps_speed_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_GPS_SPEED], .config.minmax = { 0, 65536 } },
- { "osd_gps_sats_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_GPS_SATS], .config.minmax = { 0, 65536 } },
- { "osd_altitude_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_ALTITUDE], .config.minmax = { 0, 65536 } },
+ { "osd_main_voltage_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_MAIN_BATT_VOLTAGE], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_rssi_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_RSSI_VALUE], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_flytimer_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_FLYTIME], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_ontime_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_ONTIME], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_flymode_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_FLYMODE], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_throttle_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_THROTTLE_POS], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_vtx_channel_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_VTX_CHANNEL], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_crosshairs", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_CROSSHAIRS], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_artificial_horizon", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_ARTIFICIAL_HORIZON], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_current_draw_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_CURRENT_DRAW], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_mah_drawn_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_MAH_DRAWN], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_craft_name_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_CRAFT_NAME], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_gps_speed_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_GPS_SPEED], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_gps_sats_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_GPS_SATS], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_altitude_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_ALTITUDE], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_pid_roll_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_ROLL_PIDS], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_pid_pitch_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_PITCH_PIDS], .config.minmax = { 0, UINT16_MAX } },
+ { "osd_pid_yaw_pos", VAR_UINT16 | MASTER_VALUE, &osdProfile()->item_pos[OSD_YAW_PIDS], .config.minmax = { 0, UINT16_MAX } },
#endif
#ifdef USE_MAX7456
{ "vcd_video_system", VAR_UINT8 | MASTER_VALUE, &vcdProfile()->video_system, .config.minmax = { 0, 2 } },
diff --git a/src/main/main.c b/src/main/main.c
index e8ff4fb98..70f32d258 100644
--- a/src/main/main.c
+++ b/src/main/main.c
@@ -424,11 +424,7 @@ void init(void)
#else
const void *sonarConfig = NULL;
#endif
- if (!sensorsAutodetect(&masterConfig.sensorAlignmentConfig,
- &masterConfig.sensorSelectionConfig,
- compassConfig()->mag_declination,
- &masterConfig.gyroConfig,
- sonarConfig)) {
+ if (!sensorsAutodetect(gyroConfig(), accelerometerConfig(), compassConfig(), barometerConfig(), sonarConfig)) {
// if gyro was not detected due to whatever reason, we give up now.
failureMode(FAILURE_MISSING_ACC);
}
diff --git a/src/main/rx/nrf24_cx10.c b/src/main/rx/nrf24_cx10.c
index 026eeba0c..d7521e568 100644
--- a/src/main/rx/nrf24_cx10.c
+++ b/src/main/rx/nrf24_cx10.c
@@ -61,7 +61,7 @@
enum {
RATE_LOW = 0,
RATE_MID = 1,
- RATE_HIGH= 2,
+ RATE_HIGH= 2
};
#define FLAG_FLIP 0x10 // goes to rudder channel
diff --git a/src/main/rx/nrf24_inav.c b/src/main/rx/nrf24_inav.c
index 1e8edd981..115fc10d1 100644
--- a/src/main/rx/nrf24_inav.c
+++ b/src/main/rx/nrf24_inav.c
@@ -89,7 +89,7 @@
enum {
RATE_LOW = 0,
RATE_MID = 1,
- RATE_HIGH = 2,
+ RATE_HIGH = 2
};
enum {
@@ -97,7 +97,7 @@ enum {
FLAG_PICTURE = 0x02,
FLAG_VIDEO = 0x04,
FLAG_RTH = 0x08,
- FLAG_HEADLESS = 0x10,
+ FLAG_HEADLESS = 0x10
};
typedef enum {
diff --git a/src/main/rx/nrf24_syma.c b/src/main/rx/nrf24_syma.c
index afc238072..61a51199b 100644
--- a/src/main/rx/nrf24_syma.c
+++ b/src/main/rx/nrf24_syma.c
@@ -73,7 +73,7 @@
enum {
RATE_LOW = 0,
RATE_MID = 1,
- RATE_HIGH= 2,
+ RATE_HIGH= 2
};
#define FLAG_PICTURE 0x40
diff --git a/src/main/rx/rx.h b/src/main/rx/rx.h
index 7b881fd14..1a5108638 100644
--- a/src/main/rx/rx.h
+++ b/src/main/rx/rx.h
@@ -55,9 +55,7 @@ typedef enum {
SERIALRX_XBUS_MODE_B_RJ01 = 6,
SERIALRX_IBUS = 7,
SERIALRX_JETIEXBUS = 8,
- SERIALRX_CRSF = 9,
- SERIALRX_PROVIDER_COUNT,
- SERIALRX_PROVIDER_MAX = SERIALRX_PROVIDER_COUNT - 1
+ SERIALRX_CRSF = 9
} SerialRXType;
#define MAX_SUPPORTED_RC_PPM_CHANNEL_COUNT 12
@@ -89,14 +87,14 @@ typedef enum {
RX_FAILSAFE_MODE_AUTO = 0,
RX_FAILSAFE_MODE_HOLD,
RX_FAILSAFE_MODE_SET,
- RX_FAILSAFE_MODE_INVALID,
+ RX_FAILSAFE_MODE_INVALID
} rxFailsafeChannelMode_e;
#define RX_FAILSAFE_MODE_COUNT 3
typedef enum {
RX_FAILSAFE_TYPE_FLIGHT = 0,
- RX_FAILSAFE_TYPE_AUX,
+ RX_FAILSAFE_TYPE_AUX
} rxFailsafeChannelType_e;
#define RX_FAILSAFE_TYPE_COUNT 2
diff --git a/src/main/sensors/acceleration.c b/src/main/sensors/acceleration.c
index 11ba145e8..13484e40c 100644
--- a/src/main/sensors/acceleration.c
+++ b/src/main/sensors/acceleration.c
@@ -215,7 +215,7 @@ void updateAccelerationReadings(rollAndPitchTrims_t *rollAndPitchTrims)
}
}
- alignSensors(acc.accSmooth, acc.accAlign);
+ alignSensors(acc.accSmooth, acc.dev.accAlign);
if (!isAccelerationCalibrationComplete()) {
performAcclerationCalibration(rollAndPitchTrims);
diff --git a/src/main/sensors/acceleration.h b/src/main/sensors/acceleration.h
index 07be4da77..88f391a5c 100644
--- a/src/main/sensors/acceleration.h
+++ b/src/main/sensors/acceleration.h
@@ -32,13 +32,11 @@ typedef enum {
ACC_MPU6000 = 7,
ACC_MPU6500 = 8,
ACC_ICM20689 = 9,
- ACC_FAKE = 10,
- ACC_MAX = ACC_FAKE
+ ACC_FAKE = 10
} accelerationSensor_e;
typedef struct acc_s {
accDev_t dev;
- sensor_align_e accAlign;
uint32_t accSamplingInterval;
int32_t accSmooth[XYZ_AXIS_COUNT];
} acc_t;
@@ -58,6 +56,9 @@ typedef union rollAndPitchTrims_u {
typedef struct accelerometerConfig_s {
uint16_t acc_lpf_hz; // cutoff frequency for the low pass filter used on the acc z-axis for althold in Hz
+ sensor_align_e acc_align; // acc alignment
+ uint8_t acc_hardware; // Which acc hardware to use on boards with more than one device
+ flightDynamicsTrims_t accZero;
} accelerometerConfig_t;
void accInit(uint32_t gyroTargetLooptime);
diff --git a/src/main/sensors/barometer.h b/src/main/sensors/barometer.h
index f68465251..53025fc4c 100644
--- a/src/main/sensors/barometer.h
+++ b/src/main/sensors/barometer.h
@@ -24,13 +24,13 @@ typedef enum {
BARO_NONE = 1,
BARO_BMP085 = 2,
BARO_MS5611 = 3,
- BARO_BMP280 = 4,
- BARO_MAX = BARO_BMP280
+ BARO_BMP280 = 4
} baroSensor_e;
#define BARO_SAMPLE_COUNT_MAX 48
typedef struct barometerConfig_s {
+ uint8_t baro_hardware; // Barometer hardware to use
uint8_t baro_sample_count; // size of baro filter array
float baro_noise_lpf; // additional LPF to reduce baro noise
float baro_cf_vel; // apply Complimentary Filter to keep the calculated velocity based on baro velocity (i.e. near real velocity)
diff --git a/src/main/sensors/battery.h b/src/main/sensors/battery.h
index e7821a475..01309a8c8 100644
--- a/src/main/sensors/battery.h
+++ b/src/main/sensors/battery.h
@@ -31,15 +31,13 @@ typedef enum {
CURRENT_SENSOR_NONE = 0,
CURRENT_SENSOR_ADC,
CURRENT_SENSOR_VIRTUAL,
- CURRENT_SENSOR_ESC,
- CURRENT_SENSOR_MAX = CURRENT_SENSOR_ESC
+ CURRENT_SENSOR_ESC
} currentSensor_e;
typedef enum {
BATTERY_SENSOR_NONE = 0,
BATTERY_SENSOR_ADC,
- BATTERY_SENSOR_ESC,
- BATTERY_SENSOR_MAX = BATTERY_SENSOR_ESC
+ BATTERY_SENSOR_ESC
} batterySensor_e;
typedef struct batteryConfig_s {
diff --git a/src/main/sensors/boardalignment.c b/src/main/sensors/boardalignment.c
index 4221d3b48..c4f198827 100644
--- a/src/main/sensors/boardalignment.c
+++ b/src/main/sensors/boardalignment.c
@@ -23,7 +23,7 @@
#include "common/maths.h"
#include "common/axis.h"
-#include "sensors.h"
+#include "drivers/sensor.h"
#include "boardalignment.h"
diff --git a/src/main/sensors/compass.c b/src/main/sensors/compass.c
index e7e500c49..050baf7b0 100644
--- a/src/main/sensors/compass.c
+++ b/src/main/sensors/compass.c
@@ -60,7 +60,7 @@ void compassUpdate(uint32_t currentTime, flightDynamicsTrims_t *magZero)
mag.dev.read(magADCRaw);
for (axis = 0; axis < XYZ_AXIS_COUNT; axis++) mag.magADC[axis] = magADCRaw[axis]; // int32_t copy to work with
- alignSensors(mag.magADC, mag.magAlign);
+ alignSensors(mag.magADC, mag.dev.magAlign);
if (STATE(CALIBRATE_MAG)) {
tCal = currentTime;
diff --git a/src/main/sensors/compass.h b/src/main/sensors/compass.h
index f64c517c2..08ce80b30 100644
--- a/src/main/sensors/compass.h
+++ b/src/main/sensors/compass.h
@@ -28,13 +28,11 @@ typedef enum {
MAG_NONE = 1,
MAG_HMC5883 = 2,
MAG_AK8975 = 3,
- MAG_AK8963 = 4,
- MAG_MAX = MAG_AK8963
+ MAG_AK8963 = 4
} magSensor_e;
typedef struct mag_s {
magDev_t dev;
- sensor_align_e magAlign;
int32_t magADC[XYZ_AXIS_COUNT];
float magneticDeclination;
} mag_t;
@@ -44,6 +42,9 @@ extern mag_t mag;
typedef struct compassConfig_s {
int16_t mag_declination; // Get your magnetic decliniation from here : http://magnetic-declination.com/
// For example, -6deg 37min, = -637 Japan, format is [sign]dddmm (degreesminutes) default is zero.
+ sensor_align_e mag_align; // mag alignment
+ uint8_t mag_hardware; // Which mag hardware to use on boards with more than one device
+ flightDynamicsTrims_t magZero;
} compassConfig_t;
void compassInit(void);
diff --git a/src/main/sensors/gyro.c b/src/main/sensors/gyro.c
index f7fd9db01..e6a0a4d7d 100644
--- a/src/main/sensors/gyro.c
+++ b/src/main/sensors/gyro.c
@@ -181,7 +181,7 @@ void gyroUpdate(void)
gyroADC[Y] = gyro.dev.gyroADCRaw[Y];
gyroADC[Z] = gyro.dev.gyroADCRaw[Z];
- alignSensors(gyroADC, gyro.gyroAlign);
+ alignSensors(gyroADC, gyro.dev.gyroAlign);
const bool calibrationComplete = isGyroCalibrationComplete();
if (!calibrationComplete) {
diff --git a/src/main/sensors/gyro.h b/src/main/sensors/gyro.h
index 3034dd5a0..a532a016a 100644
--- a/src/main/sensors/gyro.h
+++ b/src/main/sensors/gyro.h
@@ -31,20 +31,19 @@ typedef enum {
GYRO_MPU6500,
GYRO_MPU9250,
GYRO_ICM20689,
- GYRO_FAKE,
- GYRO_MAX = GYRO_FAKE
+ GYRO_FAKE
} gyroSensor_e;
typedef struct gyro_s {
gyroDev_t dev;
uint32_t targetLooptime;
- sensor_align_e gyroAlign;
float gyroADCf[XYZ_AXIS_COUNT];
} gyro_t;
extern gyro_t gyro;
typedef struct gyroConfig_s {
+ sensor_align_e gyro_align; // gyro alignment
uint8_t gyroMovementCalibrationThreshold; // people keep forgetting that moving model while init results in wrong gyro offsets. and then they never reset gyro. so this is now on by default.
uint8_t gyro_sync_denom; // Gyro sample divider
uint8_t gyro_soft_lpf_type;
diff --git a/src/main/sensors/initialisation.c b/src/main/sensors/initialisation.c
index 97fd00754..9116c1837 100755
--- a/src/main/sensors/initialisation.c
+++ b/src/main/sensors/initialisation.c
@@ -35,6 +35,7 @@
#include "drivers/accgyro.h"
#include "drivers/accgyro_adxl345.h"
#include "drivers/accgyro_bma280.h"
+#include "drivers/accgyro_fake.h"
#include "drivers/accgyro_l3g4200d.h"
#include "drivers/accgyro_mma845x.h"
#include "drivers/accgyro_mpu.h"
@@ -54,12 +55,14 @@
#include "drivers/barometer.h"
#include "drivers/barometer_bmp085.h"
#include "drivers/barometer_bmp280.h"
+#include "drivers/barometer_fake.h"
#include "drivers/barometer_ms5611.h"
#include "drivers/compass.h"
-#include "drivers/compass_hmc5883l.h"
#include "drivers/compass_ak8975.h"
#include "drivers/compass_ak8963.h"
+#include "drivers/compass_fake.h"
+#include "drivers/compass_hmc5883l.h"
#include "drivers/sonar_hcsr04.h"
@@ -94,84 +97,21 @@ const extiConfig_t *selectMPUIntExtiConfig(void)
#endif
}
-#ifdef USE_FAKE_GYRO
-int16_t fake_gyro_values[XYZ_AXIS_COUNT] = { 0,0,0 };
-static void fakeGyroInit(gyroDev_t *gyro)
-{
- UNUSED(gyro);
-}
-
-static bool fakeGyroRead(gyroDev_t *gyro)
-{
- for (int i = 0; i < XYZ_AXIS_COUNT; ++i) {
- gyro->gyroADCRaw[X] = fake_gyro_values[i];
- }
-
- return true;
-}
-
-static bool fakeGyroReadTemp(int16_t *tempData)
-{
- UNUSED(tempData);
- return true;
-}
-
-
-static bool fakeGyroInitStatus(gyroDev_t *gyro)
-{
- UNUSED(gyro);
- return true;
-}
-
-bool fakeGyroDetect(gyroDev_t *gyro)
-{
- gyro->init = fakeGyroInit;
- gyro->intStatus = fakeGyroInitStatus;
- gyro->read = fakeGyroRead;
- gyro->temperature = fakeGyroReadTemp;
- gyro->scale = 1.0f / 16.4f;
- return true;
-}
-#endif
-
-#ifdef USE_FAKE_ACC
-int16_t fake_acc_values[XYZ_AXIS_COUNT] = {0,0,0};
-
-static void fakeAccInit(accDev_t *acc) {UNUSED(acc);}
-
-static bool fakeAccRead(int16_t *accData) {
- for(int i=0;iinit = fakeAccInit;
- acc->read = fakeAccRead;
- acc->acc_1G = 512*8;
- acc->revisionCode = 0;
- return true;
-}
-#endif
-
-bool detectGyro(void)
+bool gyroDetect(gyroDev_t *dev)
{
gyroSensor_e gyroHardware = GYRO_DEFAULT;
- gyro.gyroAlign = ALIGN_DEFAULT;
+ gyro.dev.gyroAlign = ALIGN_DEFAULT;
switch(gyroHardware) {
case GYRO_DEFAULT:
; // fallthrough
case GYRO_MPU6050:
#ifdef USE_GYRO_MPU6050
- if (mpu6050GyroDetect(&gyro.dev)) {
+ if (mpu6050GyroDetect(dev)) {
gyroHardware = GYRO_MPU6050;
#ifdef GYRO_MPU6050_ALIGN
- gyro.gyroAlign = GYRO_MPU6050_ALIGN;
+ gyro.dev.gyroAlign = GYRO_MPU6050_ALIGN;
#endif
break;
}
@@ -179,10 +119,10 @@ bool detectGyro(void)
; // fallthrough
case GYRO_L3G4200D:
#ifdef USE_GYRO_L3G4200D
- if (l3g4200dDetect(&gyro.dev)) {
+ if (l3g4200dDetect(dev)) {
gyroHardware = GYRO_L3G4200D;
#ifdef GYRO_L3G4200D_ALIGN
- gyro.gyroAlign = GYRO_L3G4200D_ALIGN;
+ gyro.dev.gyroAlign = GYRO_L3G4200D_ALIGN;
#endif
break;
}
@@ -191,10 +131,10 @@ bool detectGyro(void)
case GYRO_MPU3050:
#ifdef USE_GYRO_MPU3050
- if (mpu3050Detect(&gyro.dev)) {
+ if (mpu3050Detect(dev)) {
gyroHardware = GYRO_MPU3050;
#ifdef GYRO_MPU3050_ALIGN
- gyro.gyroAlign = GYRO_MPU3050_ALIGN;
+ gyro.dev.gyroAlign = GYRO_MPU3050_ALIGN;
#endif
break;
}
@@ -203,10 +143,10 @@ bool detectGyro(void)
case GYRO_L3GD20:
#ifdef USE_GYRO_L3GD20
- if (l3gd20Detect(&gyro.dev)) {
+ if (l3gd20Detect(dev)) {
gyroHardware = GYRO_L3GD20;
#ifdef GYRO_L3GD20_ALIGN
- gyro.gyroAlign = GYRO_L3GD20_ALIGN;
+ gyro.dev.gyroAlign = GYRO_L3GD20_ALIGN;
#endif
break;
}
@@ -215,10 +155,10 @@ bool detectGyro(void)
case GYRO_MPU6000:
#ifdef USE_GYRO_SPI_MPU6000
- if (mpu6000SpiGyroDetect(&gyro.dev)) {
+ if (mpu6000SpiGyroDetect(dev)) {
gyroHardware = GYRO_MPU6000;
#ifdef GYRO_MPU6000_ALIGN
- gyro.gyroAlign = GYRO_MPU6000_ALIGN;
+ gyro.dev.gyroAlign = GYRO_MPU6000_ALIGN;
#endif
break;
}
@@ -228,14 +168,14 @@ bool detectGyro(void)
case GYRO_MPU6500:
#if defined(USE_GYRO_MPU6500) || defined(USE_GYRO_SPI_MPU6500)
#ifdef USE_GYRO_SPI_MPU6500
- if (mpu6500GyroDetect(&gyro.dev) || mpu6500SpiGyroDetect(&gyro.dev))
+ if (mpu6500GyroDetect(dev) || mpu6500SpiGyroDetect(dev))
#else
- if (mpu6500GyroDetect(&gyro.dev))
+ if (mpu6500GyroDetect(dev))
#endif
{
gyroHardware = GYRO_MPU6500;
#ifdef GYRO_MPU6500_ALIGN
- gyro.gyroAlign = GYRO_MPU6500_ALIGN;
+ gyro.dev.gyroAlign = GYRO_MPU6500_ALIGN;
#endif
break;
@@ -246,11 +186,11 @@ bool detectGyro(void)
case GYRO_MPU9250:
#ifdef USE_GYRO_SPI_MPU9250
- if (mpu9250SpiGyroDetect(&gyro.dev))
+ if (mpu9250SpiGyroDetect(dev))
{
gyroHardware = GYRO_MPU9250;
#ifdef GYRO_MPU9250_ALIGN
- gyro.gyroAlign = GYRO_MPU9250_ALIGN;
+ gyro.dev.gyroAlign = GYRO_MPU9250_ALIGN;
#endif
break;
@@ -260,11 +200,11 @@ bool detectGyro(void)
case GYRO_ICM20689:
#ifdef USE_GYRO_SPI_ICM20689
- if (icm20689SpiGyroDetect(&gyro.dev))
+ if (icm20689SpiGyroDetect(dev))
{
gyroHardware = GYRO_ICM20689;
#ifdef GYRO_ICM20689_ALIGN
- gyro.gyroAlign = GYRO_ICM20689_ALIGN;
+ gyro.dev.gyroAlign = GYRO_ICM20689_ALIGN;
#endif
break;
@@ -274,7 +214,7 @@ bool detectGyro(void)
case GYRO_FAKE:
#ifdef USE_FAKE_GYRO
- if (fakeGyroDetect(&gyro.dev)) {
+ if (fakeGyroDetect(dev)) {
gyroHardware = GYRO_FAKE;
break;
}
@@ -294,7 +234,7 @@ bool detectGyro(void)
return true;
}
-static bool detectAcc(accelerationSensor_e accHardwareToUse)
+static bool accDetect(accDev_t *dev, accelerationSensor_e accHardwareToUse)
{
accelerationSensor_e accHardware;
@@ -303,7 +243,7 @@ static bool detectAcc(accelerationSensor_e accHardwareToUse)
#endif
retry:
- acc.accAlign = ALIGN_DEFAULT;
+ acc.dev.accAlign = ALIGN_DEFAULT;
switch (accHardwareToUse) {
case ACC_DEFAULT:
@@ -313,12 +253,12 @@ retry:
acc_params.useFifo = false;
acc_params.dataRate = 800; // unused currently
#ifdef NAZE
- if (hardwareRevision < NAZE32_REV5 && adxl345Detect(&acc_params, &acc.dev)) {
+ if (hardwareRevision < NAZE32_REV5 && adxl345Detect(&acc_params, dev)) {
#else
- if (adxl345Detect(&acc_params, &acc.dev)) {
+ if (adxl345Detect(&acc_params, dev)) {
#endif
#ifdef ACC_ADXL345_ALIGN
- acc.accAlign = ACC_ADXL345_ALIGN;
+ acc.dev.accAlign = ACC_ADXL345_ALIGN;
#endif
accHardware = ACC_ADXL345;
break;
@@ -327,9 +267,9 @@ retry:
; // fallthrough
case ACC_LSM303DLHC:
#ifdef USE_ACC_LSM303DLHC
- if (lsm303dlhcAccDetect(&acc.dev)) {
+ if (lsm303dlhcAccDetect(dev)) {
#ifdef ACC_LSM303DLHC_ALIGN
- acc.accAlign = ACC_LSM303DLHC_ALIGN;
+ acc.dev.accAlign = ACC_LSM303DLHC_ALIGN;
#endif
accHardware = ACC_LSM303DLHC;
break;
@@ -338,9 +278,9 @@ retry:
; // fallthrough
case ACC_MPU6050: // MPU6050
#ifdef USE_ACC_MPU6050
- if (mpu6050AccDetect(&acc.dev)) {
+ if (mpu6050AccDetect(dev)) {
#ifdef ACC_MPU6050_ALIGN
- acc.accAlign = ACC_MPU6050_ALIGN;
+ acc.dev.accAlign = ACC_MPU6050_ALIGN;
#endif
accHardware = ACC_MPU6050;
break;
@@ -351,12 +291,12 @@ retry:
#ifdef USE_ACC_MMA8452
#ifdef NAZE
// Not supported with this frequency
- if (hardwareRevision < NAZE32_REV5 && mma8452Detect(&acc.dev)) {
+ if (hardwareRevision < NAZE32_REV5 && mma8452Detect(dev)) {
#else
- if (mma8452Detect(&acc.dev)) {
+ if (mma8452Detect(dev)) {
#endif
#ifdef ACC_MMA8452_ALIGN
- acc.accAlign = ACC_MMA8452_ALIGN;
+ acc.dev.accAlign = ACC_MMA8452_ALIGN;
#endif
accHardware = ACC_MMA8452;
break;
@@ -365,9 +305,9 @@ retry:
; // fallthrough
case ACC_BMA280: // BMA280
#ifdef USE_ACC_BMA280
- if (bma280Detect(&acc.dev)) {
+ if (bma280Detect(dev)) {
#ifdef ACC_BMA280_ALIGN
- acc.accAlign = ACC_BMA280_ALIGN;
+ acc.dev.accAlign = ACC_BMA280_ALIGN;
#endif
accHardware = ACC_BMA280;
break;
@@ -376,9 +316,9 @@ retry:
; // fallthrough
case ACC_MPU6000:
#ifdef USE_ACC_SPI_MPU6000
- if (mpu6000SpiAccDetect(&acc.dev)) {
+ if (mpu6000SpiAccDetect(dev)) {
#ifdef ACC_MPU6000_ALIGN
- acc.accAlign = ACC_MPU6000_ALIGN;
+ acc.dev.accAlign = ACC_MPU6000_ALIGN;
#endif
accHardware = ACC_MPU6000;
break;
@@ -388,13 +328,13 @@ retry:
case ACC_MPU6500:
#if defined(USE_ACC_MPU6500) || defined(USE_ACC_SPI_MPU6500)
#ifdef USE_ACC_SPI_MPU6500
- if (mpu6500AccDetect(&acc.dev) || mpu6500SpiAccDetect(&acc.dev))
+ if (mpu6500AccDetect(dev) || mpu6500SpiAccDetect(dev))
#else
- if (mpu6500AccDetect(&acc.dev))
+ if (mpu6500AccDetect(dev))
#endif
{
#ifdef ACC_MPU6500_ALIGN
- acc.accAlign = ACC_MPU6500_ALIGN;
+ acc.dev.accAlign = ACC_MPU6500_ALIGN;
#endif
accHardware = ACC_MPU6500;
break;
@@ -404,10 +344,10 @@ retry:
case ACC_ICM20689:
#ifdef USE_ACC_SPI_ICM20689
- if (icm20689SpiAccDetect(&acc.dev))
+ if (icm20689SpiAccDetect(dev))
{
#ifdef ACC_ICM20689_ALIGN
- acc.accAlign = ACC_ICM20689_ALIGN;
+ acc.dev.accAlign = ACC_ICM20689_ALIGN;
#endif
accHardware = ACC_ICM20689;
break;
@@ -416,7 +356,7 @@ retry:
; // fallthrough
case ACC_FAKE:
#ifdef USE_FAKE_ACC
- if (fakeAccDetect(&acc.dev)) {
+ if (fakeAccDetect(dev)) {
accHardware = ACC_FAKE;
break;
}
@@ -446,7 +386,7 @@ retry:
}
#ifdef BARO
-static bool detectBaro(baroSensor_e baroHardwareToUse)
+static bool baroDetect(baroDev_t *dev, baroSensor_e baroHardwareToUse)
{
// Detect what pressure sensors are available. baro->update() is set to sensor-specific update function
@@ -476,7 +416,7 @@ static bool detectBaro(baroSensor_e baroHardwareToUse)
; // fallthough
case BARO_BMP085:
#ifdef USE_BARO_BMP085
- if (bmp085Detect(bmp085Config, &baro.dev)) {
+ if (bmp085Detect(bmp085Config, dev)) {
baroHardware = BARO_BMP085;
break;
}
@@ -484,7 +424,7 @@ static bool detectBaro(baroSensor_e baroHardwareToUse)
; // fallthough
case BARO_MS5611:
#ifdef USE_BARO_MS5611
- if (ms5611Detect(&baro.dev)) {
+ if (ms5611Detect(dev)) {
baroHardware = BARO_MS5611;
break;
}
@@ -492,7 +432,7 @@ static bool detectBaro(baroSensor_e baroHardwareToUse)
; // fallthough
case BARO_BMP280:
#if defined(USE_BARO_BMP280) || defined(USE_BARO_SPI_BMP280)
- if (bmp280Detect(&baro.dev)) {
+ if (bmp280Detect(dev)) {
baroHardware = BARO_BMP280;
break;
}
@@ -514,7 +454,7 @@ static bool detectBaro(baroSensor_e baroHardwareToUse)
#endif
#ifdef MAG
-static bool detectMag(magSensor_e magHardwareToUse)
+static bool compassDetect(magDev_t *dev, magSensor_e magHardwareToUse)
{
magSensor_e magHardware;
@@ -547,7 +487,7 @@ static bool detectMag(magSensor_e magHardwareToUse)
retry:
- mag.magAlign = ALIGN_DEFAULT;
+ mag.dev.magAlign = ALIGN_DEFAULT;
switch(magHardwareToUse) {
case MAG_DEFAULT:
@@ -555,9 +495,9 @@ retry:
case MAG_HMC5883:
#ifdef USE_MAG_HMC5883
- if (hmc5883lDetect(&mag.dev, hmc5883Config)) {
+ if (hmc5883lDetect(dev, hmc5883Config)) {
#ifdef MAG_HMC5883_ALIGN
- mag.magAlign = MAG_HMC5883_ALIGN;
+ mag.dev.magAlign = MAG_HMC5883_ALIGN;
#endif
magHardware = MAG_HMC5883;
break;
@@ -567,9 +507,9 @@ retry:
case MAG_AK8975:
#ifdef USE_MAG_AK8975
- if (ak8975Detect(&mag.dev)) {
+ if (ak8975Detect(dev)) {
#ifdef MAG_AK8975_ALIGN
- mag.magAlign = MAG_AK8975_ALIGN;
+ mag.dev.magAlign = MAG_AK8975_ALIGN;
#endif
magHardware = MAG_AK8975;
break;
@@ -579,9 +519,9 @@ retry:
case MAG_AK8963:
#ifdef USE_MAG_AK8963
- if (ak8963Detect(&mag.dev)) {
+ if (ak8963Detect(dev)) {
#ifdef MAG_AK8963_ALIGN
- mag.magAlign = MAG_AK8963_ALIGN;
+ mag.dev.magAlign = MAG_AK8963_ALIGN;
#endif
magHardware = MAG_AK8963;
break;
@@ -611,7 +551,7 @@ retry:
#endif
#ifdef SONAR
-static bool detectSonar(void)
+static bool sonarDetect(void)
{
if (feature(FEATURE_SONAR)) {
// the user has set the sonar feature, so assume they have an HC-SR04 plugged in,
@@ -623,23 +563,10 @@ static bool detectSonar(void)
}
#endif
-static void reconfigureAlignment(const sensorAlignmentConfig_t *sensorAlignmentConfig)
-{
- if (sensorAlignmentConfig->gyro_align != ALIGN_DEFAULT) {
- gyro.gyroAlign = sensorAlignmentConfig->gyro_align;
- }
- if (sensorAlignmentConfig->acc_align != ALIGN_DEFAULT) {
- acc.accAlign = sensorAlignmentConfig->acc_align;
- }
- if (sensorAlignmentConfig->mag_align != ALIGN_DEFAULT) {
- mag.magAlign = sensorAlignmentConfig->mag_align;
- }
-}
-
-bool sensorsAutodetect(const sensorAlignmentConfig_t *sensorAlignmentConfig,
- const sensorSelectionConfig_t *sensorSelectionConfig,
- int16_t magDeclinationFromConfig,
- const gyroConfig_t *gyroConfig,
+bool sensorsAutodetect(const gyroConfig_t *gyroConfig,
+ const accelerometerConfig_t *accelerometerConfig,
+ const compassConfig_t *compassConfig,
+ const barometerConfig_t *barometerConfig,
const sonarConfig_t *sonarConfig)
{
memset(&acc, 0, sizeof(acc));
@@ -653,7 +580,7 @@ bool sensorsAutodetect(const sensorAlignmentConfig_t *sensorAlignmentConfig,
UNUSED(mpuDetectionResult);
#endif
- if (!detectGyro()) {
+ if (!gyroDetect(&gyro.dev)) {
return false;
}
@@ -664,7 +591,7 @@ bool sensorsAutodetect(const sensorAlignmentConfig_t *sensorAlignmentConfig,
gyro.dev.init(&gyro.dev); // driver initialisation
gyroInit(gyroConfig); // sensor initialisation
- if (detectAcc(sensorSelectionConfig->acc_hardware)) {
+ if (accDetect(&acc.dev, accelerometerConfig->acc_hardware)) {
acc.dev.acc_1G = 256; // set default
acc.dev.init(&acc.dev); // driver initialisation
accInit(gyro.targetLooptime); // sensor initialisation
@@ -674,30 +601,40 @@ bool sensorsAutodetect(const sensorAlignmentConfig_t *sensorAlignmentConfig,
mag.magneticDeclination = 0.0f; // TODO investigate if this is actually needed if there is no mag sensor or if the value stored in the config should be used.
#ifdef MAG
// FIXME extract to a method to reduce dependencies, maybe move to sensors_compass.c
- if (detectMag(sensorSelectionConfig->mag_hardware)) {
+ if (compassDetect(&mag.dev, compassConfig->mag_hardware)) {
// calculate magnetic declination
- const int16_t deg = magDeclinationFromConfig / 100;
- const int16_t min = magDeclinationFromConfig % 100;
+ const int16_t deg = compassConfig->mag_declination / 100;
+ const int16_t min = compassConfig->mag_declination % 100;
mag.magneticDeclination = (deg + ((float)min * (1.0f / 60.0f))) * 10; // heading is in 0.1deg units
compassInit();
}
#else
- UNUSED(magDeclinationFromConfig);
+ UNUSED(compassConfig);
#endif
#ifdef BARO
- detectBaro(sensorSelectionConfig->baro_hardware);
+ baroDetect(&baro.dev, barometerConfig->baro_hardware);
+#else
+ UNUSED(barometerConfig);
#endif
#ifdef SONAR
- if (detectSonar()) {
+ if (sonarDetect()) {
sonarInit(sonarConfig);
}
#else
UNUSED(sonarConfig);
#endif
- reconfigureAlignment(sensorAlignmentConfig);
+ if (gyroConfig->gyro_align != ALIGN_DEFAULT) {
+ gyro.dev.gyroAlign = gyroConfig->gyro_align;
+ }
+ if (accelerometerConfig->acc_align != ALIGN_DEFAULT) {
+ acc.dev.accAlign = accelerometerConfig->acc_align;
+ }
+ if (compassConfig->mag_align != ALIGN_DEFAULT) {
+ mag.dev.magAlign = compassConfig->mag_align;
+ }
return true;
}
diff --git a/src/main/sensors/initialisation.h b/src/main/sensors/initialisation.h
index c1b3204f9..e656294c6 100644
--- a/src/main/sensors/initialisation.h
+++ b/src/main/sensors/initialisation.h
@@ -17,12 +17,8 @@
#pragma once
-struct sensorAlignmentConfig_s;
-struct sensorSelectionConfig_s;
-struct gyroConfig_s;
-struct sonarConfig_s;
-bool sensorsAutodetect(const struct sensorAlignmentConfig_s *sensorAlignmentConfig,
- const struct sensorSelectionConfig_s *sensorSelectionConfig,
- int16_t magDeclinationFromConfig,
- const struct gyroConfig_s *gyroConfig,
- const struct sonarConfig_s *sonarConfig);
+bool sensorsAutodetect(const gyroConfig_t *gyroConfig,
+ const accelerometerConfig_t *accConfig,
+ const compassConfig_t *compassConfig,
+ const barometerConfig_t *baroConfig,
+ const sonarConfig_t *sonarConfig);
diff --git a/src/main/sensors/sensors.h b/src/main/sensors/sensors.h
index 3507a2965..a93446511 100644
--- a/src/main/sensors/sensors.h
+++ b/src/main/sensors/sensors.h
@@ -49,34 +49,5 @@ typedef enum {
SENSOR_MAG = 1 << 3,
SENSOR_SONAR = 1 << 4,
SENSOR_GPS = 1 << 5,
- SENSOR_GPSMAG = 1 << 6,
+ SENSOR_GPSMAG = 1 << 6
} sensors_e;
-
-typedef enum {
- ALIGN_DEFAULT = 0, // driver-provided alignment
- CW0_DEG = 1,
- CW90_DEG = 2,
- CW180_DEG = 3,
- CW270_DEG = 4,
- CW0_DEG_FLIP = 5,
- CW90_DEG_FLIP = 6,
- CW180_DEG_FLIP = 7,
- CW270_DEG_FLIP = 8
-} sensor_align_e;
-
-typedef struct sensorAlignmentConfig_s {
- sensor_align_e gyro_align; // gyro alignment
- sensor_align_e acc_align; // acc alignment
- sensor_align_e mag_align; // mag alignment
-} sensorAlignmentConfig_t;
-
-typedef struct sensorSelectionConfig_s {
- uint8_t acc_hardware; // Which acc hardware to use on boards with more than one device
- uint8_t baro_hardware; // Barometer hardware to use
- uint8_t mag_hardware; // Which mag hardware to use on boards with more than one device
-} sensorSelectionConfig_t;
-
-typedef struct sensorTrims_s {
- flightDynamicsTrims_t accZero;
- flightDynamicsTrims_t magZero;
-} sensorTrims_t;
diff --git a/src/main/target/ALIENFLIGHTF3/config.c b/src/main/target/ALIENFLIGHTF3/config.c
index a7cfc3a91..516b64a78 100644
--- a/src/main/target/ALIENFLIGHTF3/config.c
+++ b/src/main/target/ALIENFLIGHTF3/config.c
@@ -47,7 +47,7 @@ void targetConfiguration(master_t *config)
{
config->rxConfig.spektrum_sat_bind = 5;
config->rxConfig.spektrum_sat_bind_autoreset = 1;
- config->sensorSelectionConfig.mag_hardware = MAG_NONE; // disabled by default
+ config->compassConfig.mag_hardware = MAG_NONE; // disabled by default
if (hardwareMotorType == MOTOR_BRUSHED) {
config->motorConfig.minthrottle = 1000;
diff --git a/src/main/target/ALIENFLIGHTF4/config.c b/src/main/target/ALIENFLIGHTF4/config.c
index e4089f74a..363a9704d 100644
--- a/src/main/target/ALIENFLIGHTF4/config.c
+++ b/src/main/target/ALIENFLIGHTF4/config.c
@@ -58,7 +58,7 @@ void targetConfiguration(master_t *config)
{
config->batteryConfig.currentMeterOffset = CURRENTOFFSET;
config->batteryConfig.currentMeterScale = CURRENTSCALE;
- config->sensorSelectionConfig.mag_hardware = MAG_NONE; // disabled by default
+ config->compassConfig.mag_hardware = MAG_NONE; // disabled by default
if (hardwareMotorType == MOTOR_BRUSHED) {
config->motorConfig.minthrottle = 1000;
diff --git a/src/main/target/BETAFLIGHTF3/target.h b/src/main/target/BETAFLIGHTF3/target.h
index cb581a2f7..f22a23573 100755
--- a/src/main/target/BETAFLIGHTF3/target.h
+++ b/src/main/target/BETAFLIGHTF3/target.h
@@ -44,7 +44,6 @@
#define MPU_INT_EXTI PC13
#define USE_EXTI
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define REMAP_TIM16_DMA
#define REMAP_TIM17_DMA
diff --git a/src/main/target/BLUEJAYF4/config.c b/src/main/target/BLUEJAYF4/config.c
index 00c3fc351..fc2fcaaf6 100644
--- a/src/main/target/BLUEJAYF4/config.c
+++ b/src/main/target/BLUEJAYF4/config.c
@@ -31,8 +31,8 @@
void targetConfiguration(master_t *config)
{
if (hardwareRevision == BJF4_REV1 || hardwareRevision == BJF4_REV2) {
- config->sensorAlignmentConfig.gyro_align = CW180_DEG;
- config->sensorAlignmentConfig.acc_align = CW180_DEG;
+ config->gyroConfig.gyro_align = CW180_DEG;
+ config->accelerometerConfig.acc_align = CW180_DEG;
config->beeperConfig.ioTag = IO_TAG(BEEPER_OPT);
}
diff --git a/src/main/target/BLUEJAYF4/target.h b/src/main/target/BLUEJAYF4/target.h
index 921861a11..ad588a23a 100644
--- a/src/main/target/BLUEJAYF4/target.h
+++ b/src/main/target/BLUEJAYF4/target.h
@@ -144,7 +144,6 @@
#define USE_ADC
#define VBAT_ADC_PIN PC3
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define LED_STRIP
diff --git a/src/main/target/COLIBRI/config.c b/src/main/target/COLIBRI/config.c
index e01ae9d85..5ae9168cf 100644
--- a/src/main/target/COLIBRI/config.c
+++ b/src/main/target/COLIBRI/config.c
@@ -48,7 +48,7 @@ void targetConfiguration(master_t *config)
config->boardAlignment.pitchDegrees = 10;
//config->rcControlsConfig.deadband = 10;
//config->rcControlsConfig.yaw_deadband = 10;
- config->sensorSelectionConfig.mag_hardware = 1;
+ config->compassConfig.mag_hardware = 1;
config->profile[0].controlRateProfile[0].dynThrPID = 45;
config->profile[0].controlRateProfile[0].tpa_breakpoint = 1700;
diff --git a/src/main/target/COLIBRI/target.h b/src/main/target/COLIBRI/target.h
index 702f04c74..b48f412fd 100644
--- a/src/main/target/COLIBRI/target.h
+++ b/src/main/target/COLIBRI/target.h
@@ -26,8 +26,7 @@
#define USBD_SERIALNUMBER_STRING "0x8020000"
#endif
-#define PLL_M 16
-#define PLL_N 336
+#define TARGET_XTAL_MHZ 16
#define LED0 PC14
#define LED1 PC13
diff --git a/src/main/target/COLIBRI_RACE/bus_bst.h b/src/main/target/COLIBRI_RACE/bus_bst.h
index 26eeb967d..a61078412 100644
--- a/src/main/target/COLIBRI_RACE/bus_bst.h
+++ b/src/main/target/COLIBRI_RACE/bus_bst.h
@@ -36,8 +36,7 @@
typedef enum BSTDevice {
BSTDEV_1,
- BSTDEV_2,
- BSTDEV_MAX = BSTDEV_2,
+ BSTDEV_2
} BSTDevice;
void bstInit(BSTDevice index);
diff --git a/src/main/target/DOGE/target.h b/src/main/target/DOGE/target.h
index ed75d987e..5b360ed8d 100644
--- a/src/main/target/DOGE/target.h
+++ b/src/main/target/DOGE/target.h
@@ -125,7 +125,6 @@
#define ENSURE_MPU_DATA_READY_IS_LOW
#define LED_STRIP
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define DEFAULT_RX_FEATURE FEATURE_RX_PPM
diff --git a/src/main/target/FURYF3/target.h b/src/main/target/FURYF3/target.h
index 81012826b..a858e9732 100644
--- a/src/main/target/FURYF3/target.h
+++ b/src/main/target/FURYF3/target.h
@@ -161,7 +161,6 @@
#define USE_SERIAL_4WAY_BLHELI_INTERFACE
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define REMAP_TIM17_DMA
diff --git a/src/main/target/FURYF4/target.h b/src/main/target/FURYF4/target.h
index 1317168a7..790d3096d 100644
--- a/src/main/target/FURYF4/target.h
+++ b/src/main/target/FURYF4/target.h
@@ -175,7 +175,6 @@
#define USE_SERIAL_4WAY_BLHELI_INTERFACE
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define TARGET_IO_PORTA 0xffff
diff --git a/src/main/target/IMPULSERCF3/target.h b/src/main/target/IMPULSERCF3/target.h
index ed5475b30..9689883a5 100644
--- a/src/main/target/IMPULSERCF3/target.h
+++ b/src/main/target/IMPULSERCF3/target.h
@@ -46,7 +46,6 @@
#define USE_FLASHFS
#define USE_FLASH_M25P16
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define REMAP_TIM17_DMA
diff --git a/src/main/target/KISSFC/target.h b/src/main/target/KISSFC/target.h
index 07dbd7b6e..2551072af 100644
--- a/src/main/target/KISSFC/target.h
+++ b/src/main/target/KISSFC/target.h
@@ -23,7 +23,6 @@
#define SBUS_PORT_OPTIONS (SERIAL_STOPBITS_2 | SERIAL_PARITY_EVEN | SERIAL_INVERTED | SERIAL_BIDIR)
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define USE_ESCSERIAL
diff --git a/src/main/target/LUX_RACE/target.h b/src/main/target/LUX_RACE/target.h
index 2fe4428e8..fa6eb8a9f 100644
--- a/src/main/target/LUX_RACE/target.h
+++ b/src/main/target/LUX_RACE/target.h
@@ -46,7 +46,6 @@
#define USE_MPU_DATA_READY_SIGNAL
#define ENSURE_MPU_DATA_READY_IS_LOW
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define USE_SPI
diff --git a/src/main/target/MOTOLAB/target.c b/src/main/target/MOTOLAB/target.c
index c9adecf16..414404fbb 100644
--- a/src/main/target/MOTOLAB/target.c
+++ b/src/main/target/MOTOLAB/target.c
@@ -34,6 +34,6 @@ const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = {
DEF_TIM(TIM15, CH2, PA3, TIM_USE_MOTOR, 1 ), // PWM7 - PA3 - *TIM15_CH2, TIM2_CH4
DEF_TIM(TIM1, CH1, PA8, TIM_USE_MOTOR, 1 ), // PWM8 - PA8 - *TIM1_CH1, TIM4_ETR
DEF_TIM(TIM17, CH1, PA7, TIM_USE_PPM, 0 ), // PPM - PA7 - *TIM17_CH1, TIM1_CH1N, TIM8_CH1
- DEF_TIM(TIM16, CH1, PB8, TIM_USE_LED, 0 ), // PPM - PA7 - *TIM17_CH1, TIM1_CH1N, TIM8_CH1
+ DEF_TIM(TIM16, CH1, PB8, TIM_USE_LED, 0 ), // LED - PB8 - *TIM16_CH1, TIM4_CH3, TIM8_CH2
};
diff --git a/src/main/target/MOTOLAB/target.h b/src/main/target/MOTOLAB/target.h
index 295bab37d..ef18dbd7c 100644
--- a/src/main/target/MOTOLAB/target.h
+++ b/src/main/target/MOTOLAB/target.h
@@ -34,7 +34,7 @@
#define MPU_INT_EXTI PA15
#define EXTI15_10_CALLBACK_HANDLER_COUNT 1 // MPU data ready
#define USE_MPU_DATA_READY_SIGNAL
-//#define ENSURE_MPU_DATA_READY_IS_LOW
+#define ENSURE_MPU_DATA_READY_IS_LOW
#define GYRO
#define ACC
@@ -55,12 +55,6 @@
#define MPU6000_CS_PIN PB12
#define MPU6000_SPI_INSTANCE SPI2
-//#define BARO
-//#define USE_BARO_MS5611
-
-//#define MAG
-//#define USE_MAG_HMC5883
-
#define USE_VCP
#define USE_UART1
#define USE_UART2
@@ -87,7 +81,6 @@
#define M25P16_CS_PIN PB12
#define M25P16_SPI_INSTANCE SPI2
-//#define SENSORS_SET (SENSOR_ACC | SENSOR_BARO | SENSOR_GPS | SENSOR_MAG)
#define SENSORS_SET (SENSOR_ACC)
#undef GPS
@@ -102,7 +95,6 @@
#define RSSI_ADC_PIN PB2
#define LED_STRIP
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define SPEKTRUM_BIND
@@ -115,9 +107,6 @@
#define TARGET_IO_PORTA 0xffff
#define TARGET_IO_PORTB 0xffff
#define TARGET_IO_PORTC (BIT(13)|BIT(14)|BIT(15))
-// #define TARGET_IO_PORTF (BIT(0)|BIT(1))
-// !!TODO - check the following line is correct
-#define TARGET_IO_PORTF (BIT(0)|BIT(1)|BIT(3)|BIT(4))
#define USABLE_TIMER_CHANNEL_COUNT 10
#define USED_TIMERS (TIM_N(1) | TIM_N(2) | TIM_N(3) | TIM_N(15) | TIM_N(17))
diff --git a/src/main/target/MOTOLAB/target.mk b/src/main/target/MOTOLAB/target.mk
index 35a228d5b..a464efbde 100644
--- a/src/main/target/MOTOLAB/target.mk
+++ b/src/main/target/MOTOLAB/target.mk
@@ -4,7 +4,5 @@ FEATURES = VCP ONBOARDFLASH
TARGET_SRC = \
drivers/accgyro_mpu.c \
drivers/accgyro_mpu6050.c \
- drivers/accgyro_spi_mpu6000.c \
- drivers/barometer_ms5611.c \
- drivers/compass_hmc5883l.c
+ drivers/accgyro_spi_mpu6000.c
diff --git a/src/main/target/MULTIFLITEPICO/config.c b/src/main/target/MULTIFLITEPICO/config.c
index ddc186ccc..dfbe0a8fe 100755
--- a/src/main/target/MULTIFLITEPICO/config.c
+++ b/src/main/target/MULTIFLITEPICO/config.c
@@ -40,8 +40,9 @@
#include "config/config_master.h"
// alternative defaults settings for MULTIFLITEPICO targets
-void targetConfiguration(master_t *config) {
- config->sensorSelectionConfig.mag_hardware = MAG_NONE; // disabled by default
+void targetConfiguration(master_t *config)
+{
+ config->compassConfig.mag_hardware = MAG_NONE; // disabled by default
config->batteryConfig.vbatscale = 100;
config->batteryConfig.vbatresdivval = 15;
diff --git a/src/main/target/MULTIFLITEPICO/target.h b/src/main/target/MULTIFLITEPICO/target.h
index be8f5b285..e56633eaf 100755
--- a/src/main/target/MULTIFLITEPICO/target.h
+++ b/src/main/target/MULTIFLITEPICO/target.h
@@ -105,7 +105,6 @@
#define CURRENT_METER_ADC_PIN PA5
#define RSSI_ADC_PIN PB2
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define REMAP_TIM17_DMA
diff --git a/src/main/target/OMNIBUS/target.h b/src/main/target/OMNIBUS/target.h
index e9c1f8359..7eb4b8e0b 100644
--- a/src/main/target/OMNIBUS/target.h
+++ b/src/main/target/OMNIBUS/target.h
@@ -133,7 +133,6 @@
// Divide to under 25MHz for normal operation:
#define SDCARD_SPI_FULL_SPEED_CLOCK_DIVIDER 2
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
// DSHOT output 4 uses DMA1_Channel5, so don't use it for the SDCARD until we find an alternative
diff --git a/src/main/target/OMNIBUSF4/target.h b/src/main/target/OMNIBUSF4/target.h
index d69709ae8..48b6f5e5f 100644
--- a/src/main/target/OMNIBUSF4/target.h
+++ b/src/main/target/OMNIBUSF4/target.h
@@ -160,7 +160,6 @@
#define VBAT_ADC_PIN PC2
//#define RSSI_ADC_PIN PA0
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define LED_STRIP
diff --git a/src/main/target/RACEBASE/target.h b/src/main/target/RACEBASE/target.h
index 8e24a1455..8c78e237d 100755
--- a/src/main/target/RACEBASE/target.h
+++ b/src/main/target/RACEBASE/target.h
@@ -116,8 +116,6 @@
#define TARGET_IO_PORTC (BIT(5))
#define TARGET_IO_PORTF (BIT(0)|BIT(1)|BIT(3)|BIT(4))
-#define USE_DSHOT
-
#if defined(USE_UART3_RX_DMA) && defined(USE_DSHOT)
#undef USE_UART3_RX_DMA
#endif
diff --git a/src/main/target/REVO/target.h b/src/main/target/REVO/target.h
index 23d2f5aa9..710590d1d 100644
--- a/src/main/target/REVO/target.h
+++ b/src/main/target/REVO/target.h
@@ -41,7 +41,6 @@
#endif
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define LED0 PB5
diff --git a/src/main/target/SPARKY2/target.h b/src/main/target/SPARKY2/target.h
index 8ca1f6b3b..5a33df421 100644
--- a/src/main/target/SPARKY2/target.h
+++ b/src/main/target/SPARKY2/target.h
@@ -35,7 +35,6 @@
#define INVERTER PC6
#define INVERTER_USART USART6
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
// MPU9250 interrupt
diff --git a/src/main/target/SPRACINGF3/target.h b/src/main/target/SPRACINGF3/target.h
index 5c2ea8342..3d906295e 100644
--- a/src/main/target/SPRACINGF3/target.h
+++ b/src/main/target/SPRACINGF3/target.h
@@ -115,7 +115,6 @@
#define CURRENT_METER_ADC_PIN PA5
#define RSSI_ADC_PIN PB2
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define REMAP_TIM17_DMA
diff --git a/src/main/target/STM32F3DISCOVERY/target.h b/src/main/target/STM32F3DISCOVERY/target.h
index a5ddc38d0..a43b50faf 100644
--- a/src/main/target/STM32F3DISCOVERY/target.h
+++ b/src/main/target/STM32F3DISCOVERY/target.h
@@ -169,7 +169,6 @@
#define RSSI_ADC_PIN PC2
#define EXTERNAL1_ADC_PIN PC3
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define LED_STRIP
diff --git a/src/main/target/STM32F3DISCOVERY/target.mk b/src/main/target/STM32F3DISCOVERY/target.mk
index cef064b7e..6f1f506bf 100644
--- a/src/main/target/STM32F3DISCOVERY/target.mk
+++ b/src/main/target/STM32F3DISCOVERY/target.mk
@@ -7,8 +7,8 @@ TARGET_SRC = \
drivers/accgyro_l3gd20.c \
drivers/accgyro_l3g4200d.c \
drivers/accgyro_lsm303dlhc.c \
- drivers/compass_hmc5883l.c \
drivers/accgyro_adxl345.c \
+ drivers/accgyro_fake.c \
drivers/accgyro_bma280.c \
drivers/accgyro_mma845x.c \
drivers/accgyro_mpu.c \
@@ -20,9 +20,11 @@ TARGET_SRC = \
drivers/accgyro_spi_mpu9250.c \
drivers/barometer_bmp085.c \
drivers/barometer_bmp280.c \
+ drivers/barometer_fake.c \
drivers/barometer_ms5611.c \
drivers/compass_ak8963.c \
drivers/compass_ak8975.c \
+ drivers/compass_fake.c \
drivers/compass_hmc5883l.c \
drivers/flash_m25p16.c \
drivers/max7456.c
diff --git a/src/main/target/TINYFISH/config.c b/src/main/target/TINYFISH/config.c
new file mode 100644
index 000000000..2812a1d7a
--- /dev/null
+++ b/src/main/target/TINYFISH/config.c
@@ -0,0 +1,56 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#include
+
+#include
+#include "drivers/io.h"
+
+#include "drivers/timer.h"
+#include "drivers/dma.h"
+
+#include "config/config_profile.h"
+#include "config/config_master.h"
+#include "config/feature.h"
+
+#include "io/serial.h"
+
+#include "target.h"
+
+#define TARGET_CPU_VOLTAGE 3.0
+
+// set default settings to match our target
+void targetConfiguration(master_t *config)
+{
+ config->batteryConfig.currentMeterOffset = 0;
+ // we use an ina139, RL=0.005, Rs=30000
+ // V/A = (0.005 * 0.001 * 30000) * I
+ // rescale to 1/10th mV / A -> * 1000 * 10
+ // we use 3.0V as cpu and adc voltage -> rescale by 3.0/3.3
+ config->batteryConfig.currentMeterScale = (0.005 * 0.001 * 30000) * 1000 * 10 * (TARGET_CPU_VOLTAGE / 3.3);
+
+ // we use the same uart for frsky telemetry and SBUS, both non inverted
+ int index = findSerialPortIndexByIdentifier(SBUS_TELEMETRY_UART);
+ config->serialConfig.portConfigs[index].functionMask = FUNCTION_TELEMETRY_FRSKY | FUNCTION_RX_SERIAL;
+
+ config->rxConfig.serialrx_provider = SERIALRX_SBUS;
+ config->telemetryConfig.telemetry_inversion = 0;
+ config->rxConfig.sbus_inversion = 0;
+
+ intFeatureSet(FEATURE_CURRENT_METER | FEATURE_VBAT, &config->enabledFeatures);
+}
+
diff --git a/src/main/target/TINYFISH/target.c b/src/main/target/TINYFISH/target.c
new file mode 100644
index 000000000..8f16d1053
--- /dev/null
+++ b/src/main/target/TINYFISH/target.c
@@ -0,0 +1,35 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#include
+
+#include
+#include "drivers/io.h"
+
+#include "drivers/dma.h"
+#include "drivers/timer.h"
+#include "drivers/timer_def.h"
+
+const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = {
+ DEF_TIM(TIM4, CH3, PB8, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED), //DMA1_CH5
+ DEF_TIM(TIM8, CH3, PB9, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED), //DMA2_CH1
+ DEF_TIM(TIM2, CH4, PA3, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED), //DMA1_CH7
+ DEF_TIM(TIM2, CH3, PA2, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED), //DMA1_CH1
+
+ DEF_TIM(TIM4, CH3, PB8, TIM_USE_LED, TIMER_OUTPUT_ENABLED) //DMA1_CH2 - LED
+};
+
diff --git a/src/main/target/TINYFISH/target.h b/src/main/target/TINYFISH/target.h
new file mode 100644
index 000000000..e47e42b23
--- /dev/null
+++ b/src/main/target/TINYFISH/target.h
@@ -0,0 +1,121 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#pragma once
+
+#define USB_VCP_ENABLED 1
+
+#define TARGET_BOARD_IDENTIFIER "TFSH" // http://fishpepper.de/projects/tinyFISH
+
+
+#define LED0 PC14
+#define LED1 PC15
+
+#define BEEPER PB2
+
+#define USE_EXTI
+#define MPU_INT_EXTI PC13
+#define USE_MPU_DATA_READY_SIGNAL
+#define EXTI15_10_CALLBACK_HANDLER_COUNT 1 // MPU_INT
+
+#define MPU6000_SPI_INSTANCE SPI1
+#define MPU6000_CS_PIN PA4
+
+#define GYRO
+#define USE_GYRO_SPI_MPU6000
+#define GYRO_MPU6000_ALIGN CW180_DEG_FLIP
+
+#define ACC
+#define USE_ACC_SPI_MPU6000
+#define ACC_MPU6000_ALIGN CW180_DEG_FLIP
+
+
+#if USB_VCP_ENABLED
+ #define USE_VCP
+ #define USB_IO
+ #define USBD_PRODUCT_STRING "tinyFISH"
+ #define SERIAL_PORT_COUNT 4
+#else
+ #define SERIAL_PORT_COUNT 3
+#endif
+
+#define USE_UART1
+#define USE_UART2
+#define USE_UART3
+
+#define UART1_TX_PIN PB6
+#define UART1_RX_PIN PB7
+
+#define UART2_TX_PIN PA14
+#define UART2_RX_PIN PA15
+
+#define UART3_TX_PIN PB10
+#define UART3_RX_PIN PB11
+
+#define SBUS_TELEMETRY_UART SERIAL_PORT_USART2
+
+#define USE_SPI
+#define USE_SPI_DEVICE_1
+
+#define SPI1_NSS_PIN PA4
+#define SPI1_SCK_PIN PA5
+#define SPI1_MISO_PIN PA6
+#define SPI1_MOSI_PIN PA7
+
+#define USE_SPI
+#define USE_SPI_DEVICE_2
+
+#define SPI2_NSS_PIN PB12
+#define SPI2_SCK_PIN PB13
+#define SPI2_MISO_PIN PB14
+#define SPI2_MOSI_PIN PB15
+
+#define M25P16_CS_PIN SPI2_NSS_PIN
+#define M25P16_SPI_INSTANCE SPI2
+
+#define USE_FLASHFS
+#define USE_FLASH_M25P16
+#define ENABLE_BLACKBOX_LOGGING_ON_SPIFLASH_BY_DEFAULT
+
+#define USE_ADC
+#define BOARD_HAS_VOLTAGE_DIVIDER
+#define VBAT_ADC_PIN PB1
+#define CURRENT_METER_ADC_PIN PB0
+#define ADC_INSTANCE ADC3
+#define VBAT_SCALE_DEFAULT 100
+
+#define LED_STRIP
+#define WS2811_PIN PA8
+#define WS2811_TIMER TIM1
+#define WS2811_DMA_CHANNEL DMA1_Channel2
+#define WS2811_IRQ DMA1_Channel2_IRQn
+#define WS2811_DMA_TC_FLAG DMA1_FLAG_TC2
+#define WS2811_DMA_HANDLER_IDENTIFER DMA1_CH2_HANDLER
+
+#define DEFAULT_RX_FEATURE FEATURE_RX_SERIAL
+#define DEFAULT_FEATURES (FEATURE_VBAT | FEATURE_CURRENT_METER | FEATURE_BLACKBOX | FEATURE_TELEMETRY)
+#define TARGET_CONFIG
+
+#define USE_SERIAL_4WAY_BLHELI_INTERFACE
+
+#define TARGET_IO_PORTA 0xffff
+#define TARGET_IO_PORTB 0xffff
+#define TARGET_IO_PORTC (BIT(13)|BIT(14)|BIT(15))
+#define TARGET_IO_PORTF (BIT(0)|BIT(1)|BIT(4))
+
+#define USABLE_TIMER_CHANNEL_COUNT 5
+#define USED_TIMERS (TIM_N(1) | TIM_N(2) | TIM_N(4) | TIM_N(8))
diff --git a/src/main/target/TINYFISH/target.mk b/src/main/target/TINYFISH/target.mk
new file mode 100644
index 000000000..ee1225563
--- /dev/null
+++ b/src/main/target/TINYFISH/target.mk
@@ -0,0 +1,7 @@
+F3_TARGETS += $(TARGET)
+FEATURES = VCP ONBOARDFLASH
+
+TARGET_SRC = \
+ drivers/accgyro_mpu.c \
+ drivers/flash_m25p16.c \
+ drivers/accgyro_spi_mpu6000.c
diff --git a/src/main/target/X_RACERSPI/target.h b/src/main/target/X_RACERSPI/target.h
index 72406077d..8ade29012 100644
--- a/src/main/target/X_RACERSPI/target.h
+++ b/src/main/target/X_RACERSPI/target.h
@@ -101,7 +101,6 @@
#define CURRENT_METER_ADC_PIN PA5
#define RSSI_ADC_PIN PB2
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define REMAP_TIM17_DMA
diff --git a/src/main/target/YUPIF4/target.h b/src/main/target/YUPIF4/target.h
index 2387d3544..40387f877 100644
--- a/src/main/target/YUPIF4/target.h
+++ b/src/main/target/YUPIF4/target.h
@@ -138,7 +138,6 @@
#define VBAT_ADC_PIN PC1
#define RSSI_ADC_GPIO_PIN PC0
-#define USE_DSHOT
#define USE_ESC_TELEMETRY
#define LED_STRIP
diff --git a/src/main/target/system_stm32f4xx.c b/src/main/target/system_stm32f4xx.c
index 422db514c..e7e6d0406 100644
--- a/src/main/target/system_stm32f4xx.c
+++ b/src/main/target/system_stm32f4xx.c
@@ -316,6 +316,7 @@
#include "stm32f4xx.h"
#include "system_stm32f4xx.h"
+#include "platform.h"
uint32_t hse_value = HSE_VALUE;
@@ -354,19 +355,18 @@ uint32_t hse_value = HSE_VALUE;
/******************************************************************************/
/************************* PLL Parameters *************************************/
-#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F469_479xx)
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
-#if defined(COLIBRI)
- #define PLL_M 16
+#if defined(TARGET_XTAL_MHZ)
+ #define PLL_M TARGET_XTAL_MHZ
#else
+#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F469_479xx)
#define PLL_M 8
-#endif
#elif defined (STM32F446xx)
#define PLL_M 8
#elif defined (STM32F410xx) || defined (STM32F411xE)
#define PLL_M 8
#else
#endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx || STM32F469_479xx */
+#endif
#if defined(STM32F446xx)
/* PLL division factor for I2S, SAI, SYSTEM and SPDIF: Clock = PLL_VCO / PLLR */
@@ -422,22 +422,8 @@ uint32_t hse_value = HSE_VALUE;
/** @addtogroup STM32F4xx_System_Private_Variables
* @{
*/
-
-#if defined(STM32F40_41xxx)
- uint32_t SystemCoreClock = 168000000;
-#endif /* STM32F40_41xxx */
-
-#if defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
- uint32_t SystemCoreClock = 180000000;
-#endif /* STM32F427_437x || STM32F429_439xx || STM32F446xx || STM32F469_479xx */
-
-#if defined(STM32F401xx)
- uint32_t SystemCoreClock = 84000000;
-#endif /* STM32F401xx */
-
-#if defined(STM32F410xx) || defined(STM32F411xE)
- uint32_t SystemCoreClock = 96000000;
-#endif /* STM32F410xx || STM32F401xE */
+/* core clock is simply a mhz of PLL_N / PLL_P */
+uint32_t SystemCoreClock = (PLL_N / PLL_P) * 1000000;
__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
diff --git a/src/main/telemetry/crsf.c b/src/main/telemetry/crsf.c
index 2361e05fd..138487d14 100644
--- a/src/main/telemetry/crsf.c
+++ b/src/main/telemetry/crsf.c
@@ -196,13 +196,13 @@ void crsfFrameBatterySensor(sbuf_t *dst)
typedef enum {
CRSF_ACTIVE_ANTENNA1 = 0,
- CRSF_ACTIVE_ANTENNA2 = 1,
+ CRSF_ACTIVE_ANTENNA2 = 1
} crsfActiveAntenna_e;
typedef enum {
CRSF_RF_MODE_4_HZ = 0,
CRSF_RF_MODE_50_HZ = 1,
- CRSF_RF_MODE_150_HZ = 2,
+ CRSF_RF_MODE_150_HZ = 2
} crsrRfMode_e;
typedef enum {
@@ -212,7 +212,7 @@ typedef enum {
CRSF_RF_POWER_100_mW = 3,
CRSF_RF_POWER_500_mW = 4,
CRSF_RF_POWER_1000_mW = 5,
- CRSF_RF_POWER_2000_mW = 6,
+ CRSF_RF_POWER_2000_mW = 6
} crsrRfPower_e;
/*
diff --git a/src/main/telemetry/crsf.h b/src/main/telemetry/crsf.h
index 3685f512c..cbdb437f8 100644
--- a/src/main/telemetry/crsf.h
+++ b/src/main/telemetry/crsf.h
@@ -26,8 +26,7 @@ typedef enum {
CRSF_FRAME_ATTITUDE = CRSF_FRAME_START,
CRSF_FRAME_BATTERY_SENSOR,
CRSF_FRAME_FLIGHT_MODE,
- CRSF_FRAME_GPS,
- CRSF_FRAME_COUNT
+ CRSF_FRAME_GPS
} crsfFrameType_e;
void initCrsfTelemetry(void);
diff --git a/src/main/telemetry/esc_telemetry.c b/src/main/telemetry/esc_telemetry.c
index 7404254ed..0bde741ab 100644
--- a/src/main/telemetry/esc_telemetry.c
+++ b/src/main/telemetry/esc_telemetry.c
@@ -75,7 +75,7 @@ typedef enum {
typedef enum {
ESC_TLM_TRIGGER_WAIT = 0,
ESC_TLM_TRIGGER_READY = 1 << 0, // 1
- ESC_TLM_TRIGGER_PENDING = 1 << 1, // 2
+ ESC_TLM_TRIGGER_PENDING = 1 << 1 // 2
} escTlmTriggerState_t;
#define ESC_TLM_BAUDRATE 115200
diff --git a/src/main/telemetry/hott.c b/src/main/telemetry/hott.c
index 588b35dc4..c918edae6 100644
--- a/src/main/telemetry/hott.c
+++ b/src/main/telemetry/hott.c
@@ -127,7 +127,7 @@ typedef enum {
GPS_FIX_CHAR_NONE = '-',
GPS_FIX_CHAR_2D = '2',
GPS_FIX_CHAR_3D = '3',
- GPS_FIX_CHAR_DGPS = 'D',
+ GPS_FIX_CHAR_DGPS = 'D'
} gpsFixChar_e;
static void initialiseGPSMessage(HOTT_GPS_MSG_t *msg, size_t size)
diff --git a/src/main/telemetry/hott.h b/src/main/telemetry/hott.h
index d01b45b34..5370dc24f 100644
--- a/src/main/telemetry/hott.h
+++ b/src/main/telemetry/hott.h
@@ -55,7 +55,7 @@ typedef enum {
HOTT_EAM_ALARM1_FLAG_TEMPERATURE_2 = (1 << 4),
HOTT_EAM_ALARM1_FLAG_ALTITUDE = (1 << 5),
HOTT_EAM_ALARM1_FLAG_CURRENT = (1 << 6),
- HOTT_EAM_ALARM1_FLAG_MAIN_VOLTAGE = (1 << 7),
+ HOTT_EAM_ALARM1_FLAG_MAIN_VOLTAGE = (1 << 7)
} hottEamAlarm1Flag_e;
typedef enum {
@@ -67,7 +67,7 @@ typedef enum {
HOTT_EAM_ALARM2_FLAG_M3S_DUPLICATE = (1 << 4),
HOTT_EAM_ALARM2_FLAG_UNKNOWN_1 = (1 << 5),
HOTT_EAM_ALARM2_FLAG_UNKNOWN_2 = (1 << 6),
- HOTT_EAM_ALARM2_FLAG_ON_SIGN_OR_TEXT_ACTIVE = (1 << 7),
+ HOTT_EAM_ALARM2_FLAG_ON_SIGN_OR_TEXT_ACTIVE = (1 << 7)
} hottEamAlarm2Flag_e;
diff --git a/src/main/telemetry/smartport.c b/src/main/telemetry/smartport.c
index 93f7ef458..496013f14 100644
--- a/src/main/telemetry/smartport.c
+++ b/src/main/telemetry/smartport.c
@@ -65,7 +65,7 @@ enum
SPSTATE_UNINITIALIZED,
SPSTATE_INITIALIZED,
SPSTATE_WORKING,
- SPSTATE_TIMEDOUT,
+ SPSTATE_TIMEDOUT
};
enum
@@ -83,7 +83,7 @@ enum
FSSP_SENSOR_ID1 = 0x1B,
FSSP_SENSOR_ID2 = 0x0D,
FSSP_SENSOR_ID3 = 0x34,
- FSSP_SENSOR_ID4 = 0x67,
+ FSSP_SENSOR_ID4 = 0x67
// there are 32 ID's polled by smartport master
// remaining 3 bits are crc (according to comments in openTx code)
};
@@ -112,7 +112,7 @@ enum
FSSP_DATAID_T2 = 0x0410 ,
FSSP_DATAID_GPS_ALT = 0x0820 ,
FSSP_DATAID_A3 = 0x0900 ,
- FSSP_DATAID_A4 = 0x0910 ,
+ FSSP_DATAID_A4 = 0x0910
};
const uint16_t frSkyDataIdTable[] = {
diff --git a/src/main/telemetry/telemetry.c b/src/main/telemetry/telemetry.c
index 6b59e72d1..2579187fc 100644
--- a/src/main/telemetry/telemetry.c
+++ b/src/main/telemetry/telemetry.c
@@ -35,6 +35,8 @@
#include "fc/rc_controls.h"
#include "fc/runtime_config.h"
+#include "msp/msp_serial.h"
+
#include "rx/rx.h"
#include "telemetry/telemetry.h"
@@ -156,4 +158,13 @@ void telemetryProcess(uint32_t currentTime, rxConfig_t *rxConfig, uint16_t deadb
#endif
}
+#define TELEMETRY_FUNCTION_MASK (FUNCTION_TELEMETRY_FRSKY | FUNCTION_TELEMETRY_HOTT | FUNCTION_TELEMETRY_LTM | FUNCTION_TELEMETRY_SMARTPORT)
+
+void releaseSharedTelemetryPorts(void) {
+ serialPort_t *sharedPort = findSharedSerialPort(TELEMETRY_FUNCTION_MASK, FUNCTION_MSP);
+ while (sharedPort) {
+ mspSerialReleasePortIfAllocated(sharedPort);
+ sharedPort = findNextSharedSerialPort(TELEMETRY_FUNCTION_MASK, FUNCTION_MSP);
+ }
+}
#endif
diff --git a/src/main/telemetry/telemetry.h b/src/main/telemetry/telemetry.h
index 9355c703d..f656578b9 100644
--- a/src/main/telemetry/telemetry.h
+++ b/src/main/telemetry/telemetry.h
@@ -60,3 +60,5 @@ bool telemetryDetermineEnabledState(portSharing_e portSharing);
void telemetryUseConfig(telemetryConfig_t *telemetryConfig);
#define TELEMETRY_SHAREABLE_PORT_FUNCTIONS_MASK (FUNCTION_TELEMETRY_FRSKY | FUNCTION_TELEMETRY_LTM | FUNCTION_TELEMETRY_MAVLINK)
+
+void releaseSharedTelemetryPorts(void);
diff --git a/src/test/unit/alignsensor_unittest.cc b/src/test/unit/alignsensor_unittest.cc
index f618f24fc..4fcaaecef 100644
--- a/src/test/unit/alignsensor_unittest.cc
+++ b/src/test/unit/alignsensor_unittest.cc
@@ -21,6 +21,7 @@
extern "C" {
#include "common/axis.h"
+#include "drivers/sensor.h"
#include "sensors/boardalignment.h"
#include "sensors/sensors.h"
}
diff --git a/src/test/unit/platform.h b/src/test/unit/platform.h
index 4cec0f990..c5c400aa8 100644
--- a/src/test/unit/platform.h
+++ b/src/test/unit/platform.h
@@ -35,7 +35,7 @@
typedef enum
{
Mode_TEST = 0x0,
- Mode_Out_PP = 0x10,
+ Mode_Out_PP = 0x10
} GPIO_Mode;
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;