1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-15 12:25:20 +03:00
This commit is contained in:
treymarc 2014-01-01 10:18:18 +01:00
parent 239120ba4e
commit 01f079c254
2 changed files with 574 additions and 569 deletions

View file

@ -40,42 +40,42 @@
#define U_ID_2 (*(uint32_t*)0x1FFFF7F0) #define U_ID_2 (*(uint32_t*)0x1FFFF7F0)
typedef enum { typedef enum {
SENSOR_GYRO = 1 << 0, // always present SENSOR_GYRO = 1 << 0, // always present
SENSOR_ACC = 1 << 1, SENSOR_ACC = 1 << 1,
SENSOR_BARO = 1 << 2, SENSOR_BARO = 1 << 2,
SENSOR_MAG = 1 << 3, SENSOR_MAG = 1 << 3,
SENSOR_SONAR = 1 << 4, SENSOR_SONAR = 1 << 4,
SENSOR_GPS = 1 << 5, SENSOR_GPS = 1 << 5,
SENSOR_GPSMAG = 1 << 6, SENSOR_GPSMAG = 1 << 6,
} AvailableSensors; } AvailableSensors;
// Type of accelerometer used/detected // Type of accelerometer used/detected
typedef enum AccelSensors { typedef enum AccelSensors {
ACC_DEFAULT = 0, ACC_DEFAULT = 0,
ACC_ADXL345 = 1, ACC_ADXL345 = 1,
ACC_MPU6050 = 2, ACC_MPU6050 = 2,
ACC_MMA8452 = 3, ACC_MMA8452 = 3,
ACC_BMA280 = 4, ACC_BMA280 = 4,
ACC_NONE = 5 ACC_NONE = 5
} AccelSensors; } AccelSensors;
typedef enum { typedef enum {
FEATURE_PPM = 1 << 0, FEATURE_PPM = 1 << 0,
FEATURE_VBAT = 1 << 1, FEATURE_VBAT = 1 << 1,
FEATURE_INFLIGHT_ACC_CAL = 1 << 2, FEATURE_INFLIGHT_ACC_CAL = 1 << 2,
FEATURE_SERIALRX = 1 << 3, FEATURE_SERIALRX = 1 << 3,
FEATURE_MOTOR_STOP = 1 << 4, FEATURE_MOTOR_STOP = 1 << 4,
FEATURE_SERVO_TILT = 1 << 5, FEATURE_SERVO_TILT = 1 << 5,
FEATURE_GYRO_SMOOTHING = 1 << 6, FEATURE_GYRO_SMOOTHING = 1 << 6,
FEATURE_LED_RING = 1 << 7, FEATURE_LED_RING = 1 << 7,
FEATURE_GPS = 1 << 8, FEATURE_GPS = 1 << 8,
FEATURE_FAILSAFE = 1 << 9, FEATURE_FAILSAFE = 1 << 9,
FEATURE_SONAR = 1 << 10, FEATURE_SONAR = 1 << 10,
FEATURE_TELEMETRY = 1 << 11, FEATURE_TELEMETRY = 1 << 11,
FEATURE_POWERMETER = 1 << 12, FEATURE_POWERMETER = 1 << 12,
FEATURE_VARIO = 1 << 13, FEATURE_VARIO = 1 << 13,
FEATURE_3D = 1 << 14, FEATURE_3D = 1 << 14,
FEATURE_SOFTSERIAL = 1 << 15, FEATURE_SOFTSERIAL = 1 << 15,
} AvailableFeatures; } AvailableFeatures;
typedef enum { typedef enum {
@ -104,60 +104,63 @@ typedef enum {
} sensor_axis_e; } sensor_axis_e;
typedef enum { typedef enum {
ALIGN_DEFAULT = 0, // driver-provided alignment ALIGN_DEFAULT = 0, // driver-provided alignment
CW0_DEG = 1, CW0_DEG = 1,
CW90_DEG = 2, CW90_DEG = 2,
CW180_DEG = 3, CW180_DEG = 3,
CW270_DEG = 4, CW270_DEG = 4,
CW0_DEG_FLIP = 5, CW0_DEG_FLIP = 5,
CW90_DEG_FLIP = 6, CW90_DEG_FLIP = 6,
CW180_DEG_FLIP = 7, CW180_DEG_FLIP = 7,
CW270_DEG_FLIP = 8 CW270_DEG_FLIP = 8
} sensor_align_e; } sensor_align_e;
enum { enum {
GYRO_UPDATED = 1 << 0, GYRO_UPDATED = 1 << 0,
ACC_UPDATED = 1 << 1, ACC_UPDATED = 1 << 1,
MAG_UPDATED = 1 << 2, MAG_UPDATED = 1 << 2,
TEMP_UPDATED = 1 << 3 TEMP_UPDATED = 1 << 3
}; };
typedef struct sensor_data_t { typedef struct sensor_data_t
int16_t gyro[3]; {
int16_t acc[3]; int16_t gyro[3];
int16_t mag[3]; int16_t acc[3];
float temperature; int16_t mag[3];
int updated; float temperature;
int updated;
} sensor_data_t; } sensor_data_t;
typedef void (*sensorInitFuncPtr)(sensor_align_e align); // sensor init prototype typedef void (* sensorInitFuncPtr)(sensor_align_e align); // sensor init prototype
typedef void (*sensorReadFuncPtr)(int16_t *data); // sensor read and align prototype typedef void (* sensorReadFuncPtr)(int16_t *data); // sensor read and align prototype
typedef void (*baroOpFuncPtr)(void); // baro start operation typedef void (* baroOpFuncPtr)(void); // baro start operation
typedef void (*baroCalculateFuncPtr)(int32_t *pressure, int32_t *temperature); // baro calculation (filled params are pressure and temperature) typedef void (* baroCalculateFuncPtr)(int32_t *pressure, int32_t *temperature); // baro calculation (filled params are pressure and temperature)
typedef void (*serialReceiveCallbackPtr)(uint16_t data); // used by serial drivers to return frames to app typedef void (* serialReceiveCallbackPtr)(uint16_t data); // used by serial drivers to return frames to app
typedef uint16_t (*rcReadRawDataPtr)(uint8_t chan); // used by receiver driver to return channel data typedef uint16_t (* rcReadRawDataPtr)(uint8_t chan); // used by receiver driver to return channel data
typedef void (*pidControllerFuncPtr)(void); // pid controller function prototype typedef void (* pidControllerFuncPtr)(void); // pid controller function prototype
typedef struct sensor_t { typedef struct sensor_t
sensorInitFuncPtr init; // initialize function {
sensorReadFuncPtr read; // read 3 axis data function sensorInitFuncPtr init; // initialize function
sensorReadFuncPtr temperature; // read temperature if available sensorReadFuncPtr read; // read 3 axis data function
float scale; // scalefactor (currently used for gyro only, todo for accel) sensorReadFuncPtr temperature; // read temperature if available
float scale; // scalefactor (currently used for gyro only, todo for accel)
} sensor_t; } sensor_t;
typedef struct baro_t { typedef struct baro_t
uint16_t ut_delay; {
uint16_t up_delay; uint16_t ut_delay;
baroOpFuncPtr start_ut; uint16_t up_delay;
baroOpFuncPtr get_ut; baroOpFuncPtr start_ut;
baroOpFuncPtr start_up; baroOpFuncPtr get_ut;
baroOpFuncPtr get_up; baroOpFuncPtr start_up;
baroCalculateFuncPtr calculate; baroOpFuncPtr get_up;
baroCalculateFuncPtr calculate;
} baro_t; } baro_t;
// Hardware definitions and GPIO // Hardware definitions and GPIO
#ifdef FY90Q #ifdef FY90Q
// FY90Q // FY90Q
#define LED0_GPIO GPIOC #define LED0_GPIO GPIOC
#define LED0_PIN Pin_12 #define LED0_PIN Pin_12
#define LED1_GPIO GPIOA #define LED1_GPIO GPIOA
@ -178,6 +181,7 @@ typedef struct baro_t {
#define LED0_PIN Pin_1 // D3, PA1/USART2_RTS/ADC1/TIM2_CH3 - "LED2" on silkscreen, Yellow #define LED0_PIN Pin_1 // D3, PA1/USART2_RTS/ADC1/TIM2_CH3 - "LED2" on silkscreen, Yellow
#define LED1_GPIO GPIOA #define LED1_GPIO GPIOA
#define LED1_PIN Pin_5 // D13, PA5/SPI1_SCK/ADC5 - "LED1" on silkscreen, Green #define LED1_PIN Pin_5 // D13, PA5/SPI1_SCK/ADC5 - "LED1" on silkscreen, Green
#define GYRO #define GYRO
#define ACC #define ACC
@ -227,10 +231,11 @@ typedef struct baro_t {
#endif #endif
#undef SOFT_I2C // enable to test software i2c #undef SOFT_I2C // enable to test software i2c
#include "utils.h" #include "utils.h"
#ifdef FY90Q #ifdef FY90Q
// FY90Q // FY90Q
#include "drv_adc.h" #include "drv_adc.h"
#include "drv_i2c.h" #include "drv_i2c.h"
#include "drv_pwm.h" #include "drv_pwm.h"
@ -253,7 +258,7 @@ typedef struct baro_t {
#include "drv_softserial.h" #include "drv_softserial.h"
#else #else
// AfroFlight32 // AfroFlight32
#include "drv_adc.h" #include "drv_adc.h"
#include "drv_adxl345.h" #include "drv_adxl345.h"
#include "drv_bma280.h" #include "drv_bma280.h"

View file

@ -43,12 +43,12 @@ static const motorMixer_t mixerY6[] = {
}; };
static const motorMixer_t mixerHex6P[] = { static const motorMixer_t mixerHex6P[] = {
{ 1.0f, -0.866025f, 0.5f, 1.0f }, // REAR_R { 1.0f, -1.0f, 0.866025f, 1.0f }, // REAR_R
{ 1.0f, -0.866025f, -0.5f, -1.0f }, // FRONT_R { 1.0f, -1.0f, -0.866025f, -1.0f }, // FRONT_R
{ 1.0f, 0.866025f, 0.5f, 1.0f }, // REAR_L { 1.0f, 1.0f, 0.866025f, 1.0f }, // REAR_L
{ 1.0f, 0.866025f, -0.5f, -1.0f }, // FRONT_L { 1.0f, 1.0f, -0.866025f, -1.0f }, // FRONT_L
{ 1.0f, 0.0f, -1.0f, 1.0f }, // FRONT { 1.0f, 0.0f, -0.866025f, 1.0f }, // FRONT
{ 1.0f, 0.0f, 1.0f, -1.0f }, // REAR { 1.0f, 0.0f, 0.866025f, -1.0f }, // REAR
}; };
static const motorMixer_t mixerY4[] = { static const motorMixer_t mixerY4[] = {
@ -59,12 +59,12 @@ static const motorMixer_t mixerY4[] = {
}; };
static const motorMixer_t mixerHex6X[] = { static const motorMixer_t mixerHex6X[] = {
{ 1.0f, -0.5f, 0.866025f, 1.0f }, // REAR_R { 1.0f, -0.866025f, 1.0f, 1.0f }, // REAR_R
{ 1.0f, -0.5f, -0.866025f, 1.0f }, // FRONT_R { 1.0f, -0.866025f, -1.0f, 1.0f }, // FRONT_R
{ 1.0f, 0.5f, 0.866025f, -1.0f }, // REAR_L { 1.0f, 0.866025f, 1.0f, -1.0f }, // REAR_L
{ 1.0f, 0.5f, -0.866025f, -1.0f }, // FRONT_L { 1.0f, 0.866025f, -1.0f, -1.0f }, // FRONT_L
{ 1.0f, -1.0f, 0.0f, -1.0f }, // RIGHT { 1.0f, -0.866025f, 0.0f, -1.0f }, // RIGHT
{ 1.0f, 1.0f, 0.0f, 1.0f }, // LEFT { 1.0f, 0.866025f, 0.0f, 1.0f }, // LEFT
}; };
static const motorMixer_t mixerOctoX8[] = { static const motorMixer_t mixerOctoX8[] = {