WiP: support for LSM6DSxx
This commit is contained in:
committed by
Raphael Coeffic
parent
df83a82285
commit
0b8d93ca88
@@ -644,9 +644,9 @@ enum MixSources {
|
||||
MIXSRC_MOUSE2, LUA_EXPORT("jsy", "Joystick Y")
|
||||
#endif
|
||||
|
||||
#if defined(GYRO)
|
||||
MIXSRC_GYRO1, LUA_EXPORT("gyrx", "Gyro X")
|
||||
MIXSRC_GYRO2, LUA_EXPORT("gyry", "Gyro Y")
|
||||
#if defined(IMU)
|
||||
MIXSRC_TILT_X, LUA_EXPORT("tiltx", "Tilt X")
|
||||
MIXSRC_TILT_Y, LUA_EXPORT("tilty", "Tilt Y")
|
||||
#endif
|
||||
|
||||
MIXSRC_MAX, LUA_EXPORT("max", "MAX")
|
||||
|
||||
@@ -136,10 +136,10 @@ static inline void check_struct()
|
||||
CHKSIZE(ModelData, 6605);
|
||||
#elif defined(PCBHORUS)
|
||||
#if defined(PCBX10)
|
||||
CHKSIZE(RadioData, 921);
|
||||
CHKSIZE(RadioData, 923);
|
||||
CHKSIZE(ModelData, 11025);
|
||||
#else
|
||||
CHKSIZE(RadioData, 903);
|
||||
CHKSIZE(RadioData, 905);
|
||||
CHKSIZE(ModelData, 11023);
|
||||
#endif
|
||||
#elif defined(PCBNV14)
|
||||
|
||||
@@ -765,14 +765,6 @@ PACK(struct TrainerData {
|
||||
#define SPLASH_MODE int8_t splashMode:3
|
||||
#endif
|
||||
|
||||
#if defined(PCBXLITES)
|
||||
#define GYRO_FIELDS \
|
||||
int8_t gyroMax; \
|
||||
int8_t gyroOffset;
|
||||
#else
|
||||
#define GYRO_FIELDS
|
||||
#endif
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#define EXTRA_GENERAL_FIELDS \
|
||||
CUST_ARRAY(sticksConfig, struct_sticksConfig, stick_name_valid); \
|
||||
@@ -905,8 +897,6 @@ PACK(struct RadioData {
|
||||
|
||||
char ownerRegistrationID[PXX2_LEN_REGISTRATION_ID];
|
||||
|
||||
GYRO_FIELDS
|
||||
|
||||
NOBACKUP(int8_t uartSampleMode:2); // See UartSampleModes
|
||||
#if defined(STICK_DEAD_ZONE)
|
||||
NOBACKUP(uint8_t stickDeadZone:3);
|
||||
@@ -914,6 +904,11 @@ PACK(struct RadioData {
|
||||
#else
|
||||
NOBACKUP(uint8_t spare2:6 SKIP);
|
||||
#endif
|
||||
|
||||
#if defined(IMU)
|
||||
NOBACKUP(int8_t imuMax);
|
||||
NOBACKUP(int8_t imuOffset);
|
||||
#endif
|
||||
});
|
||||
|
||||
#undef SWITCHES_WARNING_DATA
|
||||
|
||||
@@ -128,9 +128,9 @@ void menuRadioDiagAnalogs(event_t event)
|
||||
entryCount++;
|
||||
}
|
||||
|
||||
#if defined(GYRO)
|
||||
#if defined(IMU)
|
||||
y += FH;
|
||||
lcdDrawTextAlignedLeft(y, STR_GYRO);
|
||||
lcdDrawTextAlignedLeft(y, STR_IMU);
|
||||
y += FH;
|
||||
uint8_t x = INDENT_WIDTH;
|
||||
lcdDrawText(x, y, "X:");
|
||||
|
||||
@@ -69,9 +69,9 @@ enum {
|
||||
CASE_HAPTIC(ITEM_RADIO_SETUP_HAPTIC_MODE)
|
||||
CASE_HAPTIC(ITEM_RADIO_SETUP_HAPTIC_LENGTH)
|
||||
CASE_HAPTIC(ITEM_RADIO_SETUP_HAPTIC_STRENGTH)
|
||||
CASE_GYRO(ITEM_RADIO_SETUP_GYRO_LABEL)
|
||||
CASE_GYRO(ITEM_RADIO_SETUP_GYRO_MAX)
|
||||
CASE_GYRO(ITEM_RADIO_SETUP_GYRO_OFFSET)
|
||||
CASE_IMU(ITEM_RADIO_SETUP_IMU_LABEL)
|
||||
CASE_IMU(ITEM_RADIO_SETUP_IMU_MAX)
|
||||
CASE_IMU(ITEM_RADIO_SETUP_IMU_OFFSET)
|
||||
ITEM_RADIO_SETUP_CONTRAST,
|
||||
ITEM_RADIO_SETUP_ALARMS_LABEL,
|
||||
ITEM_RADIO_SETUP_BATTERY_WARNING,
|
||||
@@ -152,9 +152,9 @@ void menuRadioSetup(event_t event)
|
||||
CASE_HAPTIC(0)
|
||||
CASE_HAPTIC(0)
|
||||
CASE_HAPTIC(0)
|
||||
CASE_GYRO(LABEL(GYRO))
|
||||
CASE_GYRO(0)
|
||||
CASE_GYRO(0)
|
||||
CASE_IMU(LABEL(IMU))
|
||||
CASE_IMU(0)
|
||||
CASE_IMU(0)
|
||||
0, LABEL(ALARMS), 0, CASE_CAPACITY(0)
|
||||
0, 0, 0, 0, /* ITEM_RADIO_SETUP_INACTIVITY_ALARM ITEM_RADIO_SETUP_MEMORY_WARNING ITEM_RADIO_SETUP_ALARM_WARNING ITEM_RADIO_SETUP_RSSI_POWEROFF_ALARM */
|
||||
CASE_BACKLIGHT(LABEL(BACKLIGHT))
|
||||
@@ -387,29 +387,29 @@ void menuRadioSetup(event_t event)
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(GYRO)
|
||||
case ITEM_RADIO_SETUP_GYRO_LABEL:
|
||||
lcdDrawTextAlignedLeft(y, STR_GYRO_LABEL);
|
||||
#if defined(IMU)
|
||||
case ITEM_RADIO_SETUP_IMU_LABEL:
|
||||
lcdDrawTextAlignedLeft(y, STR_IMU_LABEL);
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_SETUP_GYRO_MAX:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_GYRO_MAX);
|
||||
lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, GYRO_MAX_DEFAULT + g_eeGeneral.gyroMax, attr|LEFT);
|
||||
case ITEM_RADIO_SETUP_IMU_MAX:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_IMU_MAX);
|
||||
lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, IMU_MAX_DEFAULT + g_eeGeneral.imuMax, attr|LEFT);
|
||||
lcdDrawChar(lcdLastRightPos, y, '@', attr);
|
||||
if (attr) {
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.gyroMax, GYRO_MAX_DEFAULT - GYRO_MAX_RANGE, GYRO_MAX_DEFAULT + GYRO_MAX_RANGE);
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.imuMax, IMU_MAX_DEFAULT - IMU_MAX_RANGE, IMU_MAX_DEFAULT + IMU_MAX_RANGE);
|
||||
lcdDrawText(LCD_W-4*FW, y, "(");
|
||||
lcdDrawNumber(lcdLastRightPos, y, max(abs(gyro.outputs[0]), abs(gyro.outputs[1])) * 180 / 1024);
|
||||
lcdDrawText(lcdLastRightPos, y, ")");
|
||||
}
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_SETUP_GYRO_OFFSET:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_GYRO_OFFSET);
|
||||
lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.gyroOffset, attr|LEFT);
|
||||
case ITEM_RADIO_SETUP_IMU_OFFSET:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_IMU_OFFSET);
|
||||
lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.imuOffset, attr|LEFT);
|
||||
lcdDrawChar(lcdLastRightPos, y, '@', attr);
|
||||
if (attr) {
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.gyroOffset, GYRO_OFFSET_MIN, GYRO_OFFSET_MAX);
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.imuOffset, IMU_OFFSET_MIN, IMU_OFFSET_MAX);
|
||||
lcdDrawText(LCD_W-4*FW, y, "(");
|
||||
lcdDrawNumber(lcdLastRightPos, y, gyro.outputs[0] * 180 / 1024);
|
||||
lcdDrawText(lcdLastRightPos, y, ")");
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
#include "libopenui.h"
|
||||
#include "../../hal/adc_driver.h"
|
||||
|
||||
#if defined(IMU_LSM6DS33)
|
||||
#include "imu_lsm6ds33.h"
|
||||
#endif
|
||||
// #if defined(IMU_LSM6DS33)
|
||||
// #include "imu_lsm6ds33.h"
|
||||
// #endif
|
||||
|
||||
#if defined(RADIO_FAMILY_T16) || defined(PCBNV14)
|
||||
#include "../../targets/horus/flyskyHallStick_driver.h"
|
||||
@@ -114,19 +114,19 @@ class AnaCalibratedViewWindow: public Window {
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(SIMU) && defined(IMU_LSM6DS33)
|
||||
coord_t yimu = MENU_CONTENT_TOP + 3 * FH;
|
||||
coord_t ximu = MENUS_MARGIN_LEFT;
|
||||
char imudata[80];
|
||||
sprintf(imudata, "IMU temp.: %.2f deg.C, Gyro XYZ [rad/s]: %.2f, %.2f, %.2f",
|
||||
IMUoutput.fTemperatureDegC,
|
||||
IMUoutput.fGyroXradps, IMUoutput.fGyroYradps, IMUoutput.fGyroZradps);
|
||||
dc->drawText(ximu, yimu, imudata);
|
||||
yimu = MENU_CONTENT_TOP + 4 * FH;
|
||||
sprintf(imudata, "Linear acceleration XYZ [m/s^2]: %.2f %.2f %.2f",
|
||||
IMUoutput.fAccX, IMUoutput.fAccY, IMUoutput.fAccZ);
|
||||
dc->drawText(ximu, yimu, imudata);
|
||||
#endif
|
||||
// #if !defined(SIMU) && defined(IMU_LSM6DS33)
|
||||
// coord_t yimu = MENU_CONTENT_TOP + 3 * FH;
|
||||
// coord_t ximu = MENUS_MARGIN_LEFT;
|
||||
// char imudata[80];
|
||||
// sprintf(imudata, "IMU temp.: %.2f deg.C, Gyro XYZ [rad/s]: %.2f, %.2f, %.2f",
|
||||
// IMUoutput.fTemperatureDegC,
|
||||
// IMUoutput.fGyroXradps, IMUoutput.fGyroYradps, IMUoutput.fGyroZradps);
|
||||
// dc->drawText(ximu, yimu, imudata);
|
||||
// yimu = MENU_CONTENT_TOP + 4 * FH;
|
||||
// sprintf(imudata, "Linear acceleration XYZ [m/s^2]: %.2f %.2f %.2f",
|
||||
// IMUoutput.fAccX, IMUoutput.fAccY, IMUoutput.fAccZ);
|
||||
// dc->drawText(ximu, yimu, imudata);
|
||||
// #endif
|
||||
|
||||
#if defined(HARDWARE_TOUCH)
|
||||
TouchState rawTouchState = getInternalTouchState();
|
||||
|
||||
+21
-6
@@ -27,20 +27,20 @@
|
||||
|
||||
Gyro gyro;
|
||||
|
||||
int GyroBuffer::read(int32_t values[GYRO_VALUES_COUNT])
|
||||
int GyroBuffer::read(int32_t values[IMU_VALUES_COUNT])
|
||||
{
|
||||
index = (index + 1) & (GYRO_SAMPLES_COUNT - 1);
|
||||
index = (index + 1) & (IMU_SAMPLES_COUNT - 1);
|
||||
|
||||
for (uint8_t i = 0; i < GYRO_VALUES_COUNT; i++) {
|
||||
for (uint8_t i = 0; i < IMU_VALUES_COUNT; i++) {
|
||||
sums[i] -= samples[index].values[i];
|
||||
}
|
||||
|
||||
if (gyroRead(samples[index].raw) < 0)
|
||||
return -1;
|
||||
|
||||
for (uint8_t i = 0; i < GYRO_VALUES_COUNT; i++) {
|
||||
for (uint8_t i = 0; i < IMU_VALUES_COUNT; i++) {
|
||||
sums[i] += samples[index].values[i];
|
||||
values[i] = sums[i] >> GYRO_SAMPLES_EXPONENT;
|
||||
values[i] = sums[i] >> IMU_SAMPLES_EXPONENT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -61,7 +61,7 @@ void Gyro::wakeup()
|
||||
|
||||
gyroWakeupTime = now + 1; /* 10ms default */
|
||||
|
||||
int32_t values[GYRO_VALUES_COUNT];
|
||||
int32_t values[IMU_VALUES_COUNT];
|
||||
if (gyroBuffer.read(values) < 0)
|
||||
++errors;
|
||||
|
||||
@@ -75,3 +75,18 @@ void Gyro::wakeup()
|
||||
|
||||
// TRACE("%d %d", values[0], values[1]);
|
||||
}
|
||||
|
||||
int16_t Gyro::scaledX()
|
||||
{
|
||||
return limit(-RESX,
|
||||
(int)(outputs[0] - g_eeGeneral.imuOffset * RESX / 180) *
|
||||
(180 / (IMU_MAX_DEFAULT + g_eeGeneral.imuMax)),
|
||||
RESX);
|
||||
}
|
||||
|
||||
int16_t Gyro::scaledY()
|
||||
{
|
||||
return limit(-RESX,
|
||||
outputs[1] * (180 / (IMU_MAX_DEFAULT + g_eeGeneral.imuMax)),
|
||||
RESX);
|
||||
}
|
||||
|
||||
+35
-27
@@ -22,42 +22,50 @@
|
||||
#include <inttypes.h>
|
||||
#include "myeeprom.h"
|
||||
|
||||
#define GYRO_SAMPLES_EXPONENT 3
|
||||
#define GYRO_SAMPLES_COUNT (2 ^ GYRO_SAMPLES_EXPONENT)
|
||||
#define IMU_VALUES_COUNT 6
|
||||
#define IMU_BUFFER_LENGTH (IMU_VALUES_COUNT * sizeof(int16_t))
|
||||
|
||||
class GyroBuffer {
|
||||
protected:
|
||||
union {
|
||||
int16_t values[GYRO_VALUES_COUNT];
|
||||
uint8_t raw[GYRO_BUFFER_LENGTH];
|
||||
} samples[GYRO_SAMPLES_COUNT];
|
||||
#define IMU_MAX_DEFAULT 30
|
||||
#define IMU_MAX_RANGE 60
|
||||
#define IMU_OFFSET_MIN -30
|
||||
#define IMU_OFFSET_MAX 10
|
||||
|
||||
int32_t sums[GYRO_VALUES_COUNT];
|
||||
#define IMU_SAMPLES_EXPONENT 3
|
||||
#define IMU_SAMPLES_COUNT (2 ^ IMU_SAMPLES_EXPONENT)
|
||||
|
||||
uint8_t index;
|
||||
class GyroBuffer
|
||||
{
|
||||
protected:
|
||||
union {
|
||||
int16_t values[IMU_VALUES_COUNT];
|
||||
uint8_t raw[IMU_BUFFER_LENGTH];
|
||||
} samples[IMU_SAMPLES_COUNT];
|
||||
|
||||
public:
|
||||
int read(int32_t values[GYRO_VALUES_COUNT]);
|
||||
int32_t sums[IMU_VALUES_COUNT];
|
||||
|
||||
uint8_t index;
|
||||
|
||||
public:
|
||||
int read(int32_t values[IMU_VALUES_COUNT]);
|
||||
};
|
||||
|
||||
class Gyro {
|
||||
protected:
|
||||
GyroBuffer gyroBuffer;
|
||||
uint8_t errors = 0;
|
||||
class Gyro
|
||||
{
|
||||
protected:
|
||||
GyroBuffer gyroBuffer;
|
||||
uint8_t errors = 0;
|
||||
|
||||
public:
|
||||
int16_t outputs[2];
|
||||
void wakeup();
|
||||
public:
|
||||
int16_t outputs[2];
|
||||
|
||||
int16_t scaledX()
|
||||
{
|
||||
return limit(-RESX, (int)(outputs[0] - g_eeGeneral.gyroOffset * RESX/180) * (180 / (GYRO_MAX_DEFAULT + g_eeGeneral.gyroMax)), RESX);
|
||||
}
|
||||
void wakeup();
|
||||
|
||||
int16_t scaledY()
|
||||
{
|
||||
return limit(-RESX, outputs[1] * (180 / (GYRO_MAX_DEFAULT + g_eeGeneral.gyroMax)), RESX);
|
||||
}
|
||||
int16_t scaledX();
|
||||
int16_t scaledY();
|
||||
};
|
||||
|
||||
extern Gyro gyro;
|
||||
|
||||
// Gyro driver
|
||||
int gyroInit();
|
||||
int gyroRead(uint8_t buffer[IMU_BUFFER_LENGTH]);
|
||||
|
||||
@@ -22,7 +22,7 @@ if(PYTHONINTERP_FOUND)
|
||||
add_lua_export_target(x7 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_X7)
|
||||
add_lua_export_target(x7access ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7ACCESS -DPCBX7 -DRADIO_X7ACCESS)
|
||||
add_lua_export_target(xlite ${LUA_INCLUDES} -DPCBTARANIS -DPCBXLITE)
|
||||
add_lua_export_target(xlites ${LUA_INCLUDES} -DPCBTARANIS -DPCBXLITES -DPCBXLITE -DGYRO)
|
||||
add_lua_export_target(xlites ${LUA_INCLUDES} -DPCBTARANIS -DPCBXLITES -DPCBXLITE -DIMU)
|
||||
add_lua_export_target(x9d ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9D -DPCBX9)
|
||||
add_lua_export_target(x9d+2019 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9D -DPCBX9 -DRADIO_X9DP2019)
|
||||
add_lua_export_target(x9e ${LUA_INCLUDES} -DPCBTARANIS -DPCBX9E -DPCBX9)
|
||||
|
||||
+3
-3
@@ -321,11 +321,11 @@ getvalue_t getValue(mixsrc_t i)
|
||||
return calibratedAnalogs[i - MIXSRC_Rud];
|
||||
}
|
||||
|
||||
#if defined(GYRO)
|
||||
else if (i == MIXSRC_GYRO1) {
|
||||
#if defined(IMU)
|
||||
else if (i == MIXSRC_TILT_X) {
|
||||
return gyro.scaledX();
|
||||
}
|
||||
else if (i == MIXSRC_GYRO2) {
|
||||
else if (i == MIXSRC_TILT_Y) {
|
||||
return gyro.scaledY();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -536,9 +536,9 @@ bool inputsMoved()
|
||||
sum += anaIn(i) >> INAC_STICKS_SHIFT;
|
||||
for (uint8_t i=0; i<NUM_SWITCHES; i++)
|
||||
sum += getValue(MIXSRC_FIRST_SWITCH+i) >> INAC_SWITCHES_SHIFT;
|
||||
#if defined(GYRO)
|
||||
#if defined(IMU)
|
||||
for (uint8_t i=0; i<2; i++)
|
||||
sum += getValue(MIXSRC_GYRO1+i) >> INAC_STICKS_SHIFT;
|
||||
sum += getValue(MIXSRC_TILT_X+i) >> INAC_STICKS_SHIFT;
|
||||
#endif
|
||||
|
||||
if (abs((int8_t)(sum-inactivity.sum)) > 1) {
|
||||
|
||||
+4
-4
@@ -54,10 +54,10 @@
|
||||
#define CASE_VARIO(x)
|
||||
#endif
|
||||
|
||||
#if defined(GYRO)
|
||||
#define CASE_GYRO(x) x,
|
||||
#if defined(IMU)
|
||||
#define CASE_IMU(x) x,
|
||||
#else
|
||||
#define CASE_GYRO(x)
|
||||
#define CASE_IMU(x)
|
||||
#endif
|
||||
|
||||
#if defined(BACKLIGHT_GPIO)
|
||||
@@ -1167,7 +1167,7 @@ enum JackMode {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(GYRO)
|
||||
#if defined(IMU)
|
||||
#include "gyro.h"
|
||||
#endif
|
||||
|
||||
|
||||
@@ -746,7 +746,7 @@ enum MixSources {
|
||||
MIXSRC_MOUSE2, LUA_EXPORT("jsy", "Joystick Y")
|
||||
#endif
|
||||
|
||||
#if defined(GYRO)
|
||||
#if defined(IMU)
|
||||
MIXSRC_GYRO1, LUA_EXPORT("gyrx", "Gyro X")
|
||||
MIXSRC_GYRO2, LUA_EXPORT("gyry", "Gyro Y")
|
||||
#endif
|
||||
|
||||
@@ -127,6 +127,8 @@ const struct YamlIdStr enum_MixSources[] = {
|
||||
{ MIXSRC_RS, "RS" },
|
||||
{ MIXSRC_MOUSE1, "MOUSE1" },
|
||||
{ MIXSRC_MOUSE2, "MOUSE2" },
|
||||
{ MIXSRC_TILT_X, "TILT_X" },
|
||||
{ MIXSRC_TILT_Y, "TILT_Y" },
|
||||
{ MIXSRC_MAX, "MAX" },
|
||||
{ MIXSRC_CYC1, "CYC1" },
|
||||
{ MIXSRC_CYC2, "CYC2" },
|
||||
@@ -460,6 +462,8 @@ static const struct YamlNode struct_RadioData[] = {
|
||||
YAML_STRING("ownerRegistrationID", 8),
|
||||
YAML_SIGNED( "uartSampleMode", 2 ),
|
||||
YAML_PADDING( 6 ),
|
||||
YAML_SIGNED( "imuMax", 8 ),
|
||||
YAML_SIGNED( "imuOffset", 8 ),
|
||||
YAML_END
|
||||
};
|
||||
static const struct YamlNode struct_unsigned_8[] = {
|
||||
|
||||
@@ -125,6 +125,8 @@ const struct YamlIdStr enum_MixSources[] = {
|
||||
{ MIXSRC_RS, "RS" },
|
||||
{ MIXSRC_MOUSE1, "MOUSE1" },
|
||||
{ MIXSRC_MOUSE2, "MOUSE2" },
|
||||
{ MIXSRC_TILT_X, "TILT_X" },
|
||||
{ MIXSRC_TILT_Y, "TILT_Y" },
|
||||
{ MIXSRC_MAX, "MAX" },
|
||||
{ MIXSRC_CYC1, "CYC1" },
|
||||
{ MIXSRC_CYC2, "CYC2" },
|
||||
@@ -458,6 +460,8 @@ static const struct YamlNode struct_RadioData[] = {
|
||||
YAML_STRING("ownerRegistrationID", 8),
|
||||
YAML_SIGNED( "uartSampleMode", 2 ),
|
||||
YAML_PADDING( 6 ),
|
||||
YAML_SIGNED( "imuMax", 8 ),
|
||||
YAML_SIGNED( "imuOffset", 8 ),
|
||||
YAML_END
|
||||
};
|
||||
static const struct YamlNode struct_unsigned_8[] = {
|
||||
|
||||
@@ -108,8 +108,8 @@ const struct YamlIdStr enum_MixSources[] = {
|
||||
{ MIXSRC_Ail, "Ail" },
|
||||
{ MIXSRC_POT1, "POT1" },
|
||||
{ MIXSRC_POT2, "POT2" },
|
||||
{ MIXSRC_GYRO1, "GYRO1" },
|
||||
{ MIXSRC_GYRO2, "GYRO2" },
|
||||
{ MIXSRC_TILT_X, "TILT_X" },
|
||||
{ MIXSRC_TILT_Y, "TILT_Y" },
|
||||
{ MIXSRC_MAX, "MAX" },
|
||||
{ MIXSRC_CYC1, "CYC1" },
|
||||
{ MIXSRC_CYC2, "CYC2" },
|
||||
@@ -400,10 +400,10 @@ static const struct YamlNode struct_RadioData[] = {
|
||||
YAML_PADDING( 8 ),
|
||||
YAML_STRING("bluetoothName", 10),
|
||||
YAML_STRING("ownerRegistrationID", 8),
|
||||
YAML_SIGNED( "gyroMax", 8 ),
|
||||
YAML_SIGNED( "gyroOffset", 8 ),
|
||||
YAML_SIGNED( "uartSampleMode", 2 ),
|
||||
YAML_PADDING( 6 ),
|
||||
YAML_SIGNED( "imuMax", 8 ),
|
||||
YAML_SIGNED( "imuOffset", 8 ),
|
||||
YAML_END
|
||||
};
|
||||
static const struct YamlNode struct_unsigned_8[] = {
|
||||
|
||||
@@ -26,8 +26,7 @@ set(STM32USB_SRC
|
||||
STM32_USB_Device_Library/Core/src/usbd_req.c
|
||||
)
|
||||
|
||||
set(FIRMWARE_TARGET_SRC
|
||||
${FIRMWARE_TARGET_SRC}
|
||||
set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC}
|
||||
../common/arm/stm32/rtc_driver.cpp
|
||||
../common/arm/stm32/delays_driver.cpp
|
||||
../common/arm/stm32/usb_bsp.c
|
||||
@@ -41,6 +40,14 @@ set(FIRMWARE_TARGET_SRC
|
||||
../common/arm/stm32/stm32_i2c_driver.cpp
|
||||
)
|
||||
|
||||
if(IMU)
|
||||
add_definitions(-DIMU)
|
||||
set(FIRMWARE_SRC ${FIRMWARE_SRC}
|
||||
targets/common/arm/stm32/lsm6ds_driver.cpp
|
||||
)
|
||||
set(SRC ${SRC} gyro.cpp)
|
||||
endif()
|
||||
|
||||
if(AUX_SERIAL OR AUX2_SERIAL)
|
||||
set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC}
|
||||
../common/arm/stm32/aux_serial_driver.cpp
|
||||
@@ -54,20 +61,17 @@ if(AUX_SERIAL OR AUX2_SERIAL)
|
||||
endif()
|
||||
|
||||
if(DEBUG OR CLI OR USB_SERIAL)
|
||||
set(STM32USB_SRC
|
||||
${STM32USB_SRC}
|
||||
set(STM32USB_SRC ${STM32USB_SRC}
|
||||
STM32_USB_Device_Library/Class/cdc/src/usbd_cdc_core.c
|
||||
)
|
||||
set(FIRMWARE_TARGET_SRC
|
||||
${FIRMWARE_TARGET_SRC}
|
||||
set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC}
|
||||
../common/arm/stm32/usbd_cdc.cpp
|
||||
)
|
||||
add_definitions(-DUSB_SERIAL)
|
||||
message("-- Adding support for USB serial")
|
||||
endif()
|
||||
|
||||
set(STM32USB_SRC
|
||||
${STM32USB_SRC}
|
||||
set(STM32USB_SRC ${STM32USB_SRC}
|
||||
STM32_USB_Device_Library/Class/msc/src/usbd_msc_data.c
|
||||
STM32_USB_Device_Library/Class/msc/src/usbd_msc_scsi.c
|
||||
STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c
|
||||
@@ -75,37 +79,18 @@ set(STM32USB_SRC
|
||||
)
|
||||
|
||||
if(GVARS)
|
||||
set(GUI_SRC
|
||||
${GUI_SRC}
|
||||
${GVAR_SCREEN}
|
||||
)
|
||||
set(GUI_SRC ${GUI_SRC} ${GVAR_SCREEN})
|
||||
endif()
|
||||
|
||||
set(FIRMWARE_SRC
|
||||
${FIRMWARE_SRC}
|
||||
syscalls.c
|
||||
)
|
||||
set(FIRMWARE_SRC ${FIRMWARE_SRC} syscalls.c)
|
||||
|
||||
foreach(FILE ${STM32LIB_SRC})
|
||||
set(FIRMWARE_SRC
|
||||
${FIRMWARE_SRC}
|
||||
${STM32LIB_DIR}/${FILE}
|
||||
)
|
||||
set(FIRMWARE_SRC ${FIRMWARE_SRC} ${STM32LIB_DIR}/${FILE})
|
||||
endforeach()
|
||||
|
||||
foreach(FILE ${STM32USB_SRC})
|
||||
set(FIRMWARE_SRC
|
||||
${FIRMWARE_SRC}
|
||||
${STM32USB_DIR}/${FILE}
|
||||
)
|
||||
set(FIRMWARE_SRC ${FIRMWARE_SRC} ${STM32USB_DIR}/${FILE})
|
||||
endforeach()
|
||||
|
||||
set(TARGET_SRC
|
||||
${TARGET_SRC}
|
||||
../common/arm/stm32/cpu_id.cpp
|
||||
)
|
||||
|
||||
set(SRC
|
||||
${SRC}
|
||||
io/bootloader_flash.cpp
|
||||
)
|
||||
set(TARGET_SRC ${TARGET_SRC} ../common/arm/stm32/cpu_id.cpp)
|
||||
set(SRC ${SRC} io/bootloader_flash.cpp)
|
||||
|
||||
@@ -19,8 +19,12 @@
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "opentx.h"
|
||||
#include "stm32_i2c_driver.h"
|
||||
#include "delays_driver.h"
|
||||
#include "hal.h"
|
||||
#include "gyro.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/* COMMON VALUES FOR ACCEL-GYRO SENSORS */
|
||||
#define LSM6DS_WHO_AM_I 0x0f
|
||||
@@ -126,6 +130,10 @@
|
||||
#define LSM6DS_GYRO_FS_500_GAIN 17500
|
||||
#define LSM6DS_GYRO_FS_1000_GAIN 35000
|
||||
#define LSM6DS_GYRO_FS_2000_GAIN 70000
|
||||
|
||||
#define LSM6DS_STATUS_REG_ADDR 0x1E
|
||||
#define LSM6DS_OUT_TEMP_L_ADDR 0x20
|
||||
#define LSM6DS_OUT_TEMP_H_ADDR 0x21
|
||||
#define LSM6DS_GYRO_OUT_X_L_ADDR 0x22
|
||||
#define LSM6DS_GYRO_OUT_Y_L_ADDR 0x24
|
||||
#define LSM6DS_GYRO_OUT_Z_L_ADDR 0x26
|
||||
@@ -179,7 +187,6 @@
|
||||
#define LSM6DS_RESET_ADDR 0x12
|
||||
#define LSM6DS_RESET_MASK 0x01
|
||||
|
||||
#define LSM6DS_ADDRESS 0xD6
|
||||
#define LSM6DSLTR_ID 0x6A
|
||||
#define LSM6DS33TR_ID 0x69
|
||||
|
||||
@@ -192,170 +199,70 @@ static const char configure[][2] = {
|
||||
{LSM6DS_INT2_CTRL_ADDR, 0x3},
|
||||
};
|
||||
|
||||
static void i2c2Init()
|
||||
#define I2C_TIMEOUT_MAX 10000
|
||||
#define I2C_LSM6DS_MAX_WRITE 32
|
||||
|
||||
static int I2C_LSM6DS_WriteRegister(uint8_t reg, uint8_t* data, uint8_t len)
|
||||
{
|
||||
I2C_DeInit(I2C_B2);
|
||||
uint8_t buffer[I2C_LSM6DS_MAX_WRITE];
|
||||
|
||||
I2C_InitTypeDef I2C_InitStructure;
|
||||
I2C_InitStructure.I2C_ClockSpeed = I2C_B2_SPEED;
|
||||
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
|
||||
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
|
||||
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
|
||||
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
|
||||
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
|
||||
I2C_Init(I2C_B2, &I2C_InitStructure);
|
||||
I2C_Cmd(I2C_B2, ENABLE);
|
||||
if (len >= I2C_LSM6DS_MAX_WRITE - 1) return -1;
|
||||
|
||||
GPIO_PinAFConfig(I2C_B2_SCL_GPIO, I2C_B2_SCL_GPIO_PinSource, I2C_B2_GPIO_AF);
|
||||
GPIO_PinAFConfig(I2C_B2_SDA_GPIO, I2C_B2_SDA_GPIO_PinSource, I2C_B2_GPIO_AF);
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
GPIO_InitStructure.GPIO_Pin = I2C_B2_SCL_GPIO_PIN;
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
||||
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
|
||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
||||
GPIO_Init(I2C_B2_SCL_GPIO, &GPIO_InitStructure);
|
||||
|
||||
GPIO_InitStructure.GPIO_Pin = I2C_B2_SDA_GPIO_PIN;
|
||||
GPIO_Init(I2C_B2_SDA_GPIO, &GPIO_InitStructure);
|
||||
buffer[0] = reg;
|
||||
memcpy(buffer + 1, data, len);
|
||||
|
||||
return stm32_i2c_master_tx(IMU_I2C_BUS, IMU_I2C_ADDRESS, buffer, len + 1, 100);
|
||||
}
|
||||
|
||||
#define I2C_TIMEOUT_MAX 10000
|
||||
bool I2C2_WaitEvent(uint32_t event)
|
||||
static int I2C_LSM6DS_WriteRegister(uint8_t reg, uint8_t value)
|
||||
{
|
||||
uint32_t timeout = I2C_TIMEOUT_MAX;
|
||||
while (!I2C_CheckEvent(I2C_B2, event)) {
|
||||
if ((timeout--) == 0) return false;
|
||||
}
|
||||
return true;
|
||||
return I2C_LSM6DS_WriteRegister(reg, &value, 1);
|
||||
}
|
||||
|
||||
bool I2C2_WaitEventCleared(uint32_t event)
|
||||
static int I2C_LSM6DS_ReadRegister(uint8_t reg, uint8_t* data, uint8_t len)
|
||||
{
|
||||
uint32_t timeout = I2C_TIMEOUT_MAX;
|
||||
while (I2C_CheckEvent(I2C_B2, event)) {
|
||||
if ((timeout--) == 0) {
|
||||
TRACE("I2C Timeout!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
if (stm32_i2c_master_tx(IMU_I2C_BUS, IMU_I2C_ADDRESS, ®, 1, 10) < 0)
|
||||
return -1;
|
||||
|
||||
uint8_t value = 0;
|
||||
if (stm32_i2c_master_rx(IMU_I2C_BUS, IMU_I2C_ADDRESS, data, len, 100) < 0)
|
||||
return -1;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
int setGyroRegister(uint8_t address, uint8_t value)
|
||||
static int I2C_LSM6DS_ReadRegister(uint8_t reg)
|
||||
{
|
||||
if (!I2C2_WaitEventCleared(I2C_FLAG_BUSY))
|
||||
uint8_t value = 0;
|
||||
if (I2C_LSM6DS_ReadRegister(reg, &value, 1) < 0)
|
||||
return -1;
|
||||
|
||||
I2C_GenerateSTART(I2C_B2, ENABLE);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_MODE_SELECT))
|
||||
return -1;
|
||||
|
||||
I2C_Send7bitAddress(I2C_B2, LSM6DS_ADDRESS, I2C_Direction_Transmitter);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
|
||||
return -1;
|
||||
|
||||
I2C_SendData(I2C_B2, address);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTING))
|
||||
return -1;
|
||||
|
||||
I2C_SendData(I2C_B2, value);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED))
|
||||
return -1;
|
||||
|
||||
I2C_GenerateSTOP(I2C_B2, ENABLE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int readGyroRegister(uint8_t address)
|
||||
{
|
||||
if (!I2C2_WaitEventCleared(I2C_FLAG_BUSY))
|
||||
return -1;
|
||||
|
||||
I2C_GenerateSTART(I2C_B2, ENABLE);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_MODE_SELECT))
|
||||
return -1;
|
||||
|
||||
I2C_Send7bitAddress(I2C_B2, LSM6DS_ADDRESS, I2C_Direction_Transmitter);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
|
||||
return -1;
|
||||
|
||||
I2C_SendData(I2C_B2, address);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED))
|
||||
return -1;
|
||||
|
||||
I2C_GenerateSTART(I2C_B2, ENABLE);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_MODE_SELECT))
|
||||
return -1;
|
||||
|
||||
I2C_Send7bitAddress(I2C_B2, LSM6DS_ADDRESS, I2C_Direction_Receiver);
|
||||
|
||||
I2C_AcknowledgeConfig(I2C_B2, DISABLE);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_BYTE_RECEIVED))
|
||||
return -1;
|
||||
|
||||
uint8_t value = I2C_ReceiveData(I2C_B2);
|
||||
|
||||
I2C_GenerateSTOP(I2C_B2, ENABLE);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
int gyroInit()
|
||||
{
|
||||
i2c2Init();
|
||||
|
||||
uint8_t id = readGyroRegister(LSM6DS_WHO_AM_I);
|
||||
if (id != LSM6DSLTR_ID && id != LSM6DS33TR_ID) { // LSM6DS33TR works with LSM6DSLTR code for our use
|
||||
if (stm32_i2c_init(IMU_I2C_BUS, IMU_I2C_CLK_RATE) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
setGyroRegister(0x12, 0x05);
|
||||
// LSM6DS33TR works with LSM6DSLTR code for our use
|
||||
uint8_t id = I2C_LSM6DS_ReadRegister(LSM6DS_WHO_AM_I);
|
||||
if (id != LSM6DSLTR_ID && id != LSM6DS33TR_ID)
|
||||
return -1;
|
||||
|
||||
I2C_LSM6DS_WriteRegister(0x12, 0x05);
|
||||
delay_ms(1);
|
||||
setGyroRegister(0x12, 0x04);
|
||||
I2C_LSM6DS_WriteRegister(0x12, 0x04);
|
||||
delay_ms(1);
|
||||
|
||||
for (uint8_t i = 0; i < DIM(configure); i++) {
|
||||
setGyroRegister(configure[i][0], configure[i][1]);
|
||||
I2C_LSM6DS_WriteRegister(configure[i][0], configure[i][1]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int gyroRead(uint8_t buffer[GYRO_BUFFER_LENGTH])
|
||||
int gyroRead(uint8_t buffer[IMU_BUFFER_LENGTH])
|
||||
{
|
||||
if (!I2C2_WaitEventCleared(I2C_FLAG_BUSY))
|
||||
return -1;
|
||||
|
||||
I2C_GenerateSTART(I2C_B2, ENABLE);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_MODE_SELECT))
|
||||
return -1;
|
||||
|
||||
I2C_Send7bitAddress(I2C_B2, LSM6DS_ADDRESS, I2C_Direction_Transmitter);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
|
||||
return -1;
|
||||
|
||||
I2C_SendData(I2C_B2, LSM6DS_GYRO_OUT_X_L_ADDR);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED))
|
||||
return -1;
|
||||
|
||||
I2C_GenerateSTART(I2C_B2, ENABLE);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_MODE_SELECT))
|
||||
return -1;
|
||||
|
||||
I2C_Send7bitAddress(I2C_B2, LSM6DS_ADDRESS, I2C_Direction_Receiver);
|
||||
|
||||
I2C_AcknowledgeConfig(I2C_B2, ENABLE);
|
||||
for (uint8_t i=0; i<GYRO_BUFFER_LENGTH; i++) {
|
||||
if (i == GYRO_BUFFER_LENGTH - 1)
|
||||
I2C_AcknowledgeConfig(I2C_B2, DISABLE);
|
||||
if (!I2C2_WaitEvent(I2C_EVENT_MASTER_BYTE_RECEIVED))
|
||||
return -1;
|
||||
buffer[i] = I2C_ReceiveData(I2C_B2);
|
||||
}
|
||||
|
||||
I2C_GenerateSTOP(I2C_B2, ENABLE);
|
||||
return 0;
|
||||
return I2C_LSM6DS_ReadRegister(LSM6DS_GYRO_OUT_X_L_ADDR, buffer, IMU_BUFFER_LENGTH);
|
||||
}
|
||||
|
||||
@@ -56,6 +56,9 @@ set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
|
||||
set(CLI ON CACHE BOOL "Enable CLI")
|
||||
set(AUX_SERIAL ON)
|
||||
|
||||
# IMU support
|
||||
set(IMU ON)
|
||||
|
||||
if (PCB STREQUAL X10)
|
||||
set(PCBREV "STD" CACHE STRING "PCB Revision")
|
||||
add_definitions(-DSOFTWARE_VOLUME)
|
||||
@@ -214,7 +217,6 @@ endif()
|
||||
if(IMU_LSM6DS33)
|
||||
add_definitions(-DIMU_LSM6DS33)
|
||||
set(AUX_SERIAL OFF)
|
||||
set(IMU_LSM6DS33_DRIVER imu_lsm6ds33.cpp)
|
||||
endif()
|
||||
|
||||
if(NOT INTERNAL_MODULE_PXX1)
|
||||
@@ -274,7 +276,6 @@ set(FIRMWARE_TARGET_SRC
|
||||
${FIRMWARE_TARGET_SRC}
|
||||
${LCD_DRIVER}
|
||||
${FLYSKY_HALL_STICKS_DRIVER}
|
||||
${IMU_LSM6DS33_DRIVER}
|
||||
${TOUCH_DRIVER}
|
||||
board.cpp
|
||||
backlight_driver.cpp
|
||||
|
||||
@@ -224,9 +224,6 @@ void boardInit()
|
||||
if (!adcInit(&ADC_DRIVER))
|
||||
TRACE("adcInit failed");
|
||||
|
||||
#if defined(IMU_LSM6DS33)
|
||||
imu_lsm6ds33_init();
|
||||
#endif
|
||||
|
||||
init2MhzTimer();
|
||||
init1msTimer();
|
||||
|
||||
@@ -38,9 +38,6 @@
|
||||
#include "tp_gt911.h"
|
||||
#endif
|
||||
|
||||
#if defined(IMU_LSM6DS33)
|
||||
#include "imu_lsm6ds33.h"
|
||||
#endif
|
||||
|
||||
PACK(typedef struct {
|
||||
uint8_t pcbrev:2;
|
||||
|
||||
@@ -745,11 +745,21 @@
|
||||
#define I2C_B2_SCL_GPIO_PIN LL_GPIO_PIN_10 // PB.10
|
||||
#define I2C_B2_SDA_GPIO_PIN LL_GPIO_PIN_11 // PB.11
|
||||
#define I2C_B2_GPIO_AF LL_GPIO_AF_4 // I2C2
|
||||
#define I2C_B2_CLK_RATE 100000
|
||||
#define AUX_I2C_B2_PWR_GPIO GPIOA
|
||||
#define AUX_I2C_B2_PWR_GPIO_PIN GPIO_Pin_15 // PA.15
|
||||
#endif
|
||||
|
||||
#if defined(IMU)
|
||||
#if defined(PCBX12S)
|
||||
#define IMU_I2C_BUS I2C_Bus_1
|
||||
#define IMU_I2C_ADDRESS 0x6A
|
||||
#elif defined(IMU_LSM6DS33)
|
||||
#define IMU_I2C_BUS I2C_Bus_2
|
||||
#define IMU_I2C_ADDRESS 0x6A
|
||||
#endif
|
||||
#define IMU_I2C_CLK_RATE 400000
|
||||
#endif
|
||||
|
||||
// Haptic
|
||||
#define HAPTIC_PWM
|
||||
#if defined(PCBX12S)
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
#define OUTX_L_G 0x22
|
||||
|
||||
#define ALPHA 0.98
|
||||
#define DT 0.01
|
||||
#define SCALE_FACT_ACC 0.005
|
||||
#define SCALE_FACT_IMU 0.0078 // 250deg/s / 32000
|
||||
|
||||
float roll=0;
|
||||
float pitch=0;
|
||||
|
||||
void imuCompute()
|
||||
{
|
||||
uint8_t gyr_acc_raw[12];
|
||||
|
||||
int8_t err = I2C_readBytes(IMU_I2C_ADDRESS, OUTX_L_G, 12, gyr_acc_raw);
|
||||
|
||||
int16_t gx = (int16_t)(gyr_acc_raw[1] << 8 | gyr_acc_raw[0]);
|
||||
int16_t gy = (int16_t)(gyr_acc_raw[3] << 8 | gyr_acc_raw[2]);
|
||||
int16_t gz = (int16_t)(gyr_acc_raw[5] << 8 | gyr_acc_raw[4]);
|
||||
|
||||
int16_t ax = (int16_t)(gyr_acc_raw[7] << 8 | gyr_acc_raw[6]);
|
||||
int16_t ay = (int16_t)(gyr_acc_raw[9] << 8 | gyr_acc_raw[8]);
|
||||
int16_t az = (int16_t)(gyr_acc_raw[11] << 8 | gyr_acc_raw[10]);
|
||||
|
||||
// integrate gyro
|
||||
roll -= gx * SCALE_FACT_IMU * DT;
|
||||
pitch += gy * SCALE_FACT_IMU * DT;
|
||||
|
||||
int32_t magn = abs(ax) + abs(ay) + abs(az);
|
||||
if (magn > 8192 && magn < 32768) {
|
||||
|
||||
if (az < 0) az = -az;
|
||||
|
||||
float rollAcc = atan2f((float)ay,(float)az) * 57.3 /* 180/PI */;
|
||||
float pitchAcc = atan2f((float)ax,(float)az) * 57.3 /* 180/PI */;
|
||||
|
||||
roll = roll * ALPHA + rollAcc * (1.0-ALPHA);
|
||||
pitch = pitch * ALPHA + pitchAcc * (1.0-ALPHA);
|
||||
}
|
||||
}
|
||||
@@ -387,7 +387,7 @@ elseif(PCB STREQUAL XLITES)
|
||||
set(STATUS_LEDS YES)
|
||||
set(PXX2 ON)
|
||||
set(BLUETOOTH YES)
|
||||
set(GYRO YES)
|
||||
set(IMU YES)
|
||||
add_definitions(-DMANUFACTURER_FRSKY)
|
||||
endif()
|
||||
|
||||
@@ -395,18 +395,6 @@ if(NOT PCB STREQUAL PCBXLITE)
|
||||
add_definitions(-DHARDWARE_TRAINER_JACK)
|
||||
endif()
|
||||
|
||||
if(GYRO)
|
||||
add_definitions(-DGYRO)
|
||||
set(FIRMWARE_SRC
|
||||
${FIRMWARE_SRC}
|
||||
targets/common/arm/stm32/lsm6ds_driver.cpp
|
||||
)
|
||||
set(SRC
|
||||
${SRC}
|
||||
gyro.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
if(INTERNAL_MODULE_SERIAL)
|
||||
|
||||
if("${PCBREV}" STREQUAL 2019 OR "${PCBREV}" STREQUAL ACCESS)
|
||||
|
||||
@@ -115,7 +115,6 @@ void boardInit()
|
||||
TRAINER_RCC_AHB1Periph |
|
||||
TRAINER_MODULE_RCC_AHB1Periph |
|
||||
BT_RCC_AHB1Periph |
|
||||
I2C_B2_RCC_AHB1Periph |
|
||||
USB_CHARGER_RCC_AHB1Periph,
|
||||
ENABLE);
|
||||
|
||||
@@ -134,8 +133,7 @@ void boardInit()
|
||||
INTMODULE_RCC_APB1Periph |
|
||||
TRAINER_MODULE_RCC_APB1Periph |
|
||||
MIXER_SCHEDULER_TIMER_RCC_APB1Periph |
|
||||
BT_RCC_APB1Periph |
|
||||
I2C_B2_RCC_APB1Periph,
|
||||
BT_RCC_APB1Periph,
|
||||
ENABLE);
|
||||
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG |
|
||||
@@ -281,10 +279,6 @@ void boardInit()
|
||||
|
||||
initHeadphoneTrainerSwitch();
|
||||
|
||||
#if defined(GYRO)
|
||||
gyroInit();
|
||||
#endif
|
||||
|
||||
#if defined(RTCLOCK) && !defined(COPROCESSOR)
|
||||
rtcInit(); // RTC must be initialized before rambackupRestore() is called
|
||||
#endif
|
||||
|
||||
@@ -973,16 +973,6 @@ extern Fifo<uint8_t, TELEMETRY_FIFO_SIZE> telemetryFifo;
|
||||
|
||||
#define INTMODULE_FIFO_SIZE 128
|
||||
|
||||
// Gyro driver
|
||||
#define GYRO_VALUES_COUNT 6
|
||||
#define GYRO_BUFFER_LENGTH (GYRO_VALUES_COUNT * sizeof(int16_t))
|
||||
int gyroInit();
|
||||
int gyroRead(uint8_t buffer[GYRO_BUFFER_LENGTH]);
|
||||
#define GYRO_MAX_DEFAULT 30
|
||||
#define GYRO_MAX_RANGE 60
|
||||
#define GYRO_OFFSET_MIN -30
|
||||
#define GYRO_OFFSET_MAX 10
|
||||
|
||||
#if defined (RADIO_TX12)
|
||||
#define BATTERY_DIVIDER 22830
|
||||
#elif defined (RADIO_T8)
|
||||
|
||||
@@ -2154,8 +2154,6 @@
|
||||
|
||||
// Second I2C Bus: IMU
|
||||
#if defined(PCBXLITES)
|
||||
#define I2C_B2_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC)
|
||||
#define I2C_B2_RCC_APB1Periph RCC_APB1Periph_I2C3
|
||||
#define I2C_B2 I2C3
|
||||
#define I2C_B2_SCL_GPIO GPIOA
|
||||
#define I2C_B2_SCL_GPIO_PIN LL_GPIO_PIN_8 // PA.08
|
||||
@@ -2163,9 +2161,10 @@
|
||||
#define I2C_B2_SDA_GPIO_PIN LL_GPIO_PIN_9 // PC.09
|
||||
#define I2C_B2_GPIO_AF LL_GPIO_AF_4
|
||||
#define I2C_B2_SPEED 400000
|
||||
#else
|
||||
#define I2C_B2_RCC_AHB1Periph 0
|
||||
#define I2C_B2_RCC_APB1Periph 0
|
||||
|
||||
#define IMU_I2C_BUS I2C_Bus_2
|
||||
#define IMU_I2C_ADDRESS 0x6B
|
||||
#define IMU_I2C_CLK_RATE I2C_B2_SPEED
|
||||
#endif
|
||||
|
||||
// SD - SPI2
|
||||
|
||||
+5
-1
@@ -93,7 +93,7 @@ void execMixerFrequentActions()
|
||||
processSbusInput();
|
||||
#endif
|
||||
|
||||
#if defined(GYRO)
|
||||
#if defined(IMU)
|
||||
gyro.wakeup();
|
||||
#endif
|
||||
|
||||
@@ -197,6 +197,10 @@ TASK_FUNCTION(menusTask)
|
||||
#if defined(HARDWARE_TOUCH) && !defined(PCBFLYSKY) && !defined(SIMU)
|
||||
touchPanelInit();
|
||||
#endif
|
||||
|
||||
#if defined(IMU)
|
||||
gyroInit();
|
||||
#endif
|
||||
|
||||
opentxInit();
|
||||
|
||||
|
||||
@@ -388,7 +388,7 @@ const char STR_UPDATE_RX_OPTIONS[] = TR_UPDATE_RX_OPTIONS;
|
||||
const char STR_UPDATE_TX_OPTIONS[] = TR_UPDATE_TX_OPTIONS;
|
||||
const char STR_MENU_MODULES_RX_VERSION[] = TR_MENU_MODULES_RX_VERSION;
|
||||
const char STR_MENU_FIRM_OPTIONS[] = TR_MENU_FIRM_OPTIONS;
|
||||
const char STR_GYRO[] = TR_GYRO;
|
||||
const char STR_IMU[] = TR_IMU;
|
||||
const char STR_STICKS_POTS_SLIDERS[] = TR_STICKS_POTS_SLIDERS;
|
||||
const char STR_PWM_STICKS_POTS_SLIDERS[] = TR_PWM_STICKS_POTS_SLIDERS;
|
||||
const char STR_RF_PROTOCOL[] = TR_RF_PROTOCOL;
|
||||
@@ -826,9 +826,9 @@ const char STR_BEEP_PITCH[] = TR_BEEP_PITCH;
|
||||
#if defined(HAPTIC)
|
||||
const char STR_HAPTIC_LABEL[] = TR_HAPTIC_LABEL;
|
||||
const char STR_STRENGTH[] = TR_STRENGTH;
|
||||
const char STR_GYRO_LABEL[] = TR_GYRO_LABEL;
|
||||
const char STR_GYRO_OFFSET[] = TR_GYRO_OFFSET;
|
||||
const char STR_GYRO_MAX[] = TR_GYRO_MAX;
|
||||
const char STR_IMU_LABEL[] = TR_IMU_LABEL;
|
||||
const char STR_IMU_OFFSET[] = TR_IMU_OFFSET;
|
||||
const char STR_IMU_MAX[] = TR_IMU_MAX;
|
||||
#endif
|
||||
|
||||
#if defined(PWM_BACKLIGHT) || defined(COLORLCD)
|
||||
|
||||
@@ -300,9 +300,9 @@ extern const char STR_BEEP_LENGTH[];
|
||||
extern const char STR_BEEP_PITCH[];
|
||||
extern const char STR_HAPTIC_LABEL[];
|
||||
extern const char STR_STRENGTH[];
|
||||
extern const char STR_GYRO_LABEL[];
|
||||
extern const char STR_GYRO_OFFSET[];
|
||||
extern const char STR_GYRO_MAX[];
|
||||
extern const char STR_IMU_LABEL[];
|
||||
extern const char STR_IMU_OFFSET[];
|
||||
extern const char STR_IMU_MAX[];
|
||||
extern const char STR_CONTRAST[];
|
||||
extern const char STR_ALARMS_LABEL[];
|
||||
extern const char STR_BATTERY_RANGE[];
|
||||
@@ -580,7 +580,7 @@ extern const char STR_UPDATE_RX_OPTIONS[];
|
||||
extern const char STR_UPDATE_TX_OPTIONS[];
|
||||
extern const char STR_MENU_MODULES_RX_VERSION[];
|
||||
extern const char STR_MENU_FIRM_OPTIONS[];
|
||||
extern const char STR_GYRO[];
|
||||
extern const char STR_IMU[];
|
||||
extern const char STR_STICKS_POTS_SLIDERS[];
|
||||
extern const char STR_PWM_STICKS_POTS_SLIDERS[];
|
||||
extern const char STR_RF_PROTOCOL[];
|
||||
|
||||
@@ -196,10 +196,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ON","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY",
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -225,7 +225,6 @@
|
||||
#define TR_VFORMULAS "加","平均值","最小值","最大值","乘","总计值","单节电池","消耗量","距离"
|
||||
#define TR_VPREC "0.--","0.0-","0.00"
|
||||
#define TR_VCELLINDEX "最低值","1","2","3","4","5","6","最高值","差值"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_TEXT_SIZE "标准","小","较小","中等","双倍"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA "(中点)", "=(整体)"
|
||||
|
||||
@@ -335,9 +334,9 @@
|
||||
#define TR_BEEP_PITCH "提示音音调"
|
||||
#define TR_HAPTIC_LABEL "振动"
|
||||
#define TR_STRENGTH "强度"
|
||||
#define TR_GYRO_LABEL "陀螺仪"
|
||||
#define TR_GYRO_OFFSET "补偿"
|
||||
#define TR_GYRO_MAX "最大值"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "补偿"
|
||||
#define TR_IMU_MAX "最大值"
|
||||
#define TR_CONTRAST "对比度"
|
||||
#define TR_ALARMS_LABEL "警告"
|
||||
#define TR_BATTERY_RANGE TR("Batt. range", "电压测量范围")
|
||||
@@ -575,7 +574,7 @@
|
||||
#define TR_MODULES_RX_VERSION "模块/接收机版本"
|
||||
#define TR_MENU_MODULES_RX_VERSION "模块/接收机版本"
|
||||
#define TR_MENU_FIRM_OPTIONS "固件选项"
|
||||
#define TR_GYRO "陀螺仪"
|
||||
#define TR_IMU "陀螺仪"
|
||||
#define TR_STICKS_POTS_SLIDERS "摇杆/旋钮/滑块"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM 摇杆/旋钮/滑块"
|
||||
#define TR_RF_PROTOCOL "射频协议"
|
||||
|
||||
@@ -235,10 +235,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ZAP","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY"
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -264,7 +264,6 @@
|
||||
#define TR_VFORMULAS "Součet","Průměr","Min","Max","Násobení","Totalize","Článek","Spotřeba","Vzdálenost"
|
||||
#define TR_VPREC "X","X.X","X.XX"
|
||||
#define TR_VCELLINDEX "Nízký","1","2","3","4","5","6","Nejvíce","Delta"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA"(center only)","= (symetrical)"
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
@@ -395,9 +394,9 @@
|
||||
#define TR_BEEP_PITCH "Tón"
|
||||
#define TR_HAPTIC_LABEL "Vibrace"
|
||||
#define TR_STRENGTH "Síla"
|
||||
#define TR_GYRO_LABEL "Gyro"
|
||||
#define TR_GYRO_OFFSET "Offset"
|
||||
#define TR_GYRO_MAX "Max"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "Offset"
|
||||
#define TR_IMU_MAX "Max"
|
||||
#define TR_CONTRAST "Kontrast LCD"
|
||||
#define TR_ALARMS_LABEL "Alarmy"
|
||||
#define TR_BATTERY_RANGE TR("Ukazatel bat.", "Ukazatel baterie")
|
||||
@@ -640,7 +639,7 @@
|
||||
#define TR_MODULES_RX_VERSION "Verze modulu a RX"
|
||||
#define TR_MENU_MODULES_RX_VERSION "VERZE MODULU A RX"
|
||||
#define TR_MENU_FIRM_OPTIONS "FIRMWARE OPTIONS"
|
||||
#define TR_GYRO "Gyro"
|
||||
#define TR_IMU "IMU"
|
||||
#define TR_STICKS_POTS_SLIDERS "páky/pot./slidery"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM páky/pot./slidery"
|
||||
#define TR_RF_PROTOCOL "RF Protokol"
|
||||
|
||||
@@ -220,10 +220,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ON","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY"
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -249,7 +249,6 @@
|
||||
#define TR_VFORMULAS "Addieren","Mittelwert","Min","Max","Multiplizier","Gesamt","Zelle","Verbrauch","Distanz"
|
||||
#define TR_VPREC "0.--","0.0","0.00"
|
||||
#define TR_VCELLINDEX "Niedrigst","1. Zelle","2. Zelle","3. Zelle","4. Zelle","5. Zelle","6. Zelle","Höchster","Differenz"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
|
||||
|
||||
@@ -381,9 +380,9 @@
|
||||
#define TR_BEEP_PITCH "Beep-Freq +/-"
|
||||
#define TR_HAPTIC_LABEL "Haptik"
|
||||
#define TR_STRENGTH "Stärke"
|
||||
#define TR_GYRO_LABEL "Gyro"
|
||||
#define TR_GYRO_OFFSET "Offset"
|
||||
#define TR_GYRO_MAX "Max"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "Offset"
|
||||
#define TR_IMU_MAX "Max"
|
||||
#define TR_CONTRAST "LCD-Kontrast"
|
||||
#define TR_ALARMS_LABEL "Alarme"
|
||||
#define TR_BATTERY_RANGE TR("Akku Bereich", "Akku Spannungsbereich") // Symbol Akku Ladezustand
|
||||
@@ -622,7 +621,7 @@
|
||||
#define TR_MODULES_RX_VERSION "Module / RX version"
|
||||
#define TR_MENU_MODULES_RX_VERSION "MODULE / RX VERSION"
|
||||
#define TR_MENU_FIRM_OPTIONS "FIRMWARE OPTIONEN"
|
||||
#define TR_GYRO "Gyro"
|
||||
#define TR_IMU "IMU"
|
||||
#define TR_STICKS_POTS_SLIDERS "Sticks/Pots/Sliders"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM Sticks/Pots/Sliders"
|
||||
#define TR_RF_PROTOCOL "RF Protocol"
|
||||
|
||||
@@ -218,10 +218,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ON","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY",
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -247,7 +247,6 @@
|
||||
#define TR_VFORMULAS "Add","Average","Min","Max","Multiply","Totalize","Cell","Consumpt","Distance"
|
||||
#define TR_VPREC "0.--","0.0 ","0.00"
|
||||
#define TR_VCELLINDEX "Lowest","1","2","3","4","5","6","Highest","Delta"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symmetrical)"
|
||||
|
||||
@@ -377,9 +376,9 @@
|
||||
#define TR_BEEP_PITCH "Beep pitch"
|
||||
#define TR_HAPTIC_LABEL "Haptic"
|
||||
#define TR_STRENGTH "Strength"
|
||||
#define TR_GYRO_LABEL "Gyro"
|
||||
#define TR_GYRO_OFFSET "Offset"
|
||||
#define TR_GYRO_MAX "Max"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "Offset"
|
||||
#define TR_IMU_MAX "Max"
|
||||
#define TR_CONTRAST "Contrast"
|
||||
#define TR_ALARMS_LABEL "Alarms"
|
||||
#define TR_BATTERY_RANGE TR("Batt. range", "Battery meter range")
|
||||
@@ -624,7 +623,7 @@
|
||||
#define TR_MODULES_RX_VERSION "Modules / RX version"
|
||||
#define TR_MENU_MODULES_RX_VERSION "MODULES / RX VERSION"
|
||||
#define TR_MENU_FIRM_OPTIONS "FIRMWARE OPTIONS"
|
||||
#define TR_GYRO "Gyro"
|
||||
#define TR_IMU "IMU"
|
||||
#define TR_STICKS_POTS_SLIDERS "Sticks/Pots/Sliders"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM Sticks/Pots/Sliders"
|
||||
#define TR_RF_PROTOCOL "RF Protocol"
|
||||
|
||||
@@ -217,10 +217,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ON","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY",
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -246,7 +246,6 @@
|
||||
#define TR_VFORMULAS "Suma","Media","Min","Máx","Multipl.","Total","Cell","Consumo","Distancia"
|
||||
#define TR_VPREC "0.--","0.0 ","0.00"
|
||||
#define TR_VCELLINDEX "Menor","1","2","3","4","5","6","Mayor","Delta"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_TEXT_SIZE "Normal","Muy pequeño","Pequeño","Medio","Doble"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
|
||||
|
||||
@@ -377,10 +376,10 @@
|
||||
#define TR_BEEP_LENGTH "Duración Beep"
|
||||
#define TR_BEEP_PITCH "Tono"
|
||||
#define TR_HAPTIC_LABEL "Haptic"
|
||||
#define TR_STRENGTH "Intensidad"
|
||||
#define TR_GYRO_LABEL "Gyro"
|
||||
#define TR_GYRO_OFFSET "Offset"
|
||||
#define TR_GYRO_MAX "Máx"
|
||||
#define TR_STRENGTH "Intensidad"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "Offset"
|
||||
#define TR_IMU_MAX "Máx"
|
||||
#define TR_CONTRAST "Contraste"
|
||||
#define TR_ALARMS_LABEL "Alarmas"
|
||||
#define TR_BATTERY_RANGE TR("Rango batería", "Rango medidor batería")
|
||||
@@ -624,7 +623,7 @@
|
||||
#define TR_MODULES_RX_VERSION "Módulos / versión RX"
|
||||
#define TR_MENU_MODULES_RX_VERSION "MÓDULOS / VERSIÓN RX"
|
||||
#define TR_MENU_FIRM_OPTIONS "OPCIONES FIRMWARE"
|
||||
#define TR_GYRO "Gyro"
|
||||
#define TR_IMU "IMU"
|
||||
#define TR_STICKS_POTS_SLIDERS "Sticks/Pots/Sliders"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM Sticks/Pots/Sliders"
|
||||
#define TR_RF_PROTOCOL "Protocolo RF"
|
||||
|
||||
@@ -234,10 +234,10 @@
|
||||
#define TR_ROTENC_SWITCHES
|
||||
#define TR_ON_ONE_SWITCHES "ON","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY"
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -263,7 +263,6 @@
|
||||
#define TR_VFORMULAS "Add","Average","Min","Max","Multiply","Totalize","Cell","Kulutus","Etäisyys"
|
||||
#define TR_VPREC "0.--","0.0","0.00"
|
||||
#define TR_VCELLINDEX "Alin","1","2","3","4","5","6","Korkein","Ero"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
@@ -391,9 +390,9 @@
|
||||
#define TR_BEEP_PITCH "Pitch"
|
||||
#define TR_HAPTIC_LABEL "Haptic"
|
||||
#define TR_STRENGTH "Strength"
|
||||
#define TR_GYRO_LABEL "Gyro"
|
||||
#define TR_GYRO_OFFSET "Offset"
|
||||
#define TR_GYRO_MAX "Max"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "Offset"
|
||||
#define TR_IMU_MAX "Max"
|
||||
#define TR_CONTRAST "Contrast"
|
||||
#define TR_ALARMS_LABEL "Alarms"
|
||||
#define TR_BATTERY_RANGE TR("Battery range","Battery meter range")
|
||||
@@ -636,7 +635,7 @@
|
||||
#define TR_MODULES_RX_VERSION "Modules / RX version"
|
||||
#define TR_MENU_MODULES_RX_VERSION "MODULES / RX VERSION"
|
||||
#define TR_MENU_FIRM_OPTIONS "FIRMWARE OPTIONS"
|
||||
#define TR_GYRO "Gyro"
|
||||
#define TR_IMU "IMU"
|
||||
#define TR_STICKS_POTS_SLIDERS "Sticks/Pots/Sliders"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM Sticks/Pots/Sliders"
|
||||
#define TR_RF_PROTOCOL "RF Protocol"
|
||||
|
||||
@@ -238,10 +238,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ON","Un"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY",
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -267,7 +267,6 @@
|
||||
#define TR_VFORMULAS "Addition","Moyenne","Min","Max","Multipl.","Totalise","Elément","Consomm.","Distance"
|
||||
#define TR_VPREC "0.--","0.0","0.00"
|
||||
#define TR_VCELLINDEX "Mini.","1","2","3","4","5","6","Maxi.","Diff."
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
@@ -398,9 +397,9 @@
|
||||
#define TR_BEEP_PITCH "Tonalité"
|
||||
#define TR_HAPTIC_LABEL "Vibreur"
|
||||
#define TR_STRENGTH "Force"
|
||||
#define TR_GYRO_LABEL "Gyro"
|
||||
#define TR_GYRO_OFFSET "Décalage"
|
||||
#define TR_GYRO_MAX "Max"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "Décalage"
|
||||
#define TR_IMU_MAX "Max"
|
||||
#define TR_CONTRAST "Contraste"
|
||||
#define TR_ALARMS_LABEL "Alarmes"
|
||||
#define TR_BATTERY_RANGE "Plage batterie"
|
||||
@@ -643,7 +642,7 @@
|
||||
#define TR_MODULES_RX_VERSION "Versions modules / RX"
|
||||
#define TR_MENU_MODULES_RX_VERSION "VERSIONS MODULES / RX "
|
||||
#define TR_MENU_FIRM_OPTIONS "OPTIONS FIRMWARE"
|
||||
#define TR_GYRO "Gyro"
|
||||
#define TR_IMU "IMU"
|
||||
#define TR_STICKS_POTS_SLIDERS "Manches/Pots/leviers"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "Manches PWM/Pots/leviers"
|
||||
#define TR_RF_PROTOCOL "Protocole RF"
|
||||
|
||||
+11
-12
@@ -222,10 +222,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ON","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY",
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -251,7 +251,6 @@
|
||||
#define TR_VFORMULAS "Somma","Media","Min","Max","Moltipl","Totalizza","Cella","Consumo","Distanza"
|
||||
#define TR_VPREC "0.--","0.0 ","0.00"
|
||||
#define TR_VCELLINDEX "Minore","1","2","3","4","5","6","Maggiore","Delta"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
|
||||
|
||||
@@ -375,17 +374,17 @@
|
||||
#define TR_BAR "Barra"
|
||||
#define TR_ALARM TR( "Allar.", "Allarme")
|
||||
#define TR_USRDATA "Dati"
|
||||
#define TR_BLADES "Pale"
|
||||
#define TR_BLADES "Pale"
|
||||
#define TR_SCREEN "Schermo\001"
|
||||
#define TR_SOUND_LABEL "Suono"
|
||||
#define TR_LENGTH "Durata"
|
||||
#define TR_LENGTH "Durata"
|
||||
#define TR_BEEP_LENGTH "Lung. Beep"
|
||||
#define TR_BEEP_PITCH "Tono"
|
||||
#define TR_BEEP_PITCH "Tono"
|
||||
#define TR_HAPTIC_LABEL "Vibrazione"
|
||||
#define TR_STRENGTH "Forza"
|
||||
#define TR_GYRO_LABEL "Gyro"
|
||||
#define TR_GYRO_OFFSET "Offset"
|
||||
#define TR_GYRO_MAX "Max"
|
||||
#define TR_STRENGTH "Forza"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "Offset"
|
||||
#define TR_IMU_MAX "Max"
|
||||
#define TR_CONTRAST "Contrasto"
|
||||
#define TR_ALARMS_LABEL "Allarmi"
|
||||
#define TR_BATTERY_RANGE TR("Int. Batt.", "Intervallo batteria")
|
||||
@@ -624,7 +623,7 @@
|
||||
#define TR_MODULES_RX_VERSION "Versioni Moduli / RX"
|
||||
#define TR_MENU_MODULES_RX_VERSION "VERSIONI MODULI / RX"
|
||||
#define TR_MENU_FIRM_OPTIONS "OPZIONI FIRMWARE"
|
||||
#define TR_GYRO "Gyro"
|
||||
#define TR_IMU "IMU"
|
||||
#define TR_STICKS_POTS_SLIDERS "Interruttori/Pots/Sliders"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM Interruttori/Pots/Sliders"
|
||||
#define TR_RF_PROTOCOL "Protocollo RF"
|
||||
|
||||
@@ -221,10 +221,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ON","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY",
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -382,9 +382,9 @@
|
||||
#define TR_BEEP_PITCH "Piep-Freq. +/-"
|
||||
#define TR_HAPTIC_LABEL "Haptic"
|
||||
#define TR_STRENGTH "Sterkte"
|
||||
#define TR_GYRO_LABEL "Gyro"
|
||||
#define TR_GYRO_OFFSET "Offset"
|
||||
#define TR_GYRO_MAX "Max"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "Offset"
|
||||
#define TR_IMU_MAX "Max"
|
||||
#define TR_CONTRAST "LCD-Kontrast"
|
||||
#define TR_ALARMS_LABEL "Alarm"
|
||||
#define TR_BATTERY_RANGE TR("Accu Bereik", "Accu Spngs-Bereik") // Symbol Akku Ladezustand
|
||||
@@ -629,7 +629,7 @@
|
||||
#define TR_MODULES_RX_VERSION "Modules / RX version"
|
||||
#define TR_MENU_MODULES_RX_VERSION "MODULES / RX VERSION"
|
||||
#define TR_MENU_FIRM_OPTIONS "FIRMWARE OPTIONS"
|
||||
#define TR_GYRO "Gyro"
|
||||
#define TR_IMU "IMU"
|
||||
#define TR_STICKS_POTS_SLIDERS "Sticks/Pots/Sliders"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM Sticks/Pots/Sliders"
|
||||
#define TR_RF_PROTOCOL "RF Protocol"
|
||||
|
||||
@@ -217,10 +217,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ON","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY",
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -246,7 +246,6 @@
|
||||
#define TR_VFORMULAS "Dodaj","Średnie","Min","Max","Mnóż","Zliczani","Komórka","Zużycie","Zasięg"
|
||||
#define TR_VPREC "0.--","0.0 ","0.00"
|
||||
#define TR_VCELLINDEX "Niskie","1","2","3","4","5","6","Wysokie","Delta"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
|
||||
|
||||
@@ -375,12 +374,12 @@
|
||||
#define TR_SOUND_LABEL "Dźwięk"
|
||||
#define TR_LENGTH "Długość"
|
||||
#define TR_BEEP_LENGTH "Dług. Beepa"
|
||||
#define TR_BEEP_PITCH "Dźwięk"
|
||||
#define TR_BEEP_PITCH "Dźwięk"
|
||||
#define TR_HAPTIC_LABEL "Wibracja"
|
||||
#define TR_STRENGTH "Siła"
|
||||
#define TR_GYRO_LABEL "Gyro"
|
||||
#define TR_GYRO_OFFSET "Offset"
|
||||
#define TR_GYRO_MAX "Max"
|
||||
#define TR_STRENGTH "Siła"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "Offset"
|
||||
#define TR_IMU_MAX "Max"
|
||||
#define TR_CONTRAST "Kontrast"
|
||||
#define TR_ALARMS_LABEL "Alarmy"
|
||||
#define TR_BATTERY_RANGE TR("PokażPasBat.", "Pokaż pasek bateri")
|
||||
@@ -620,7 +619,7 @@
|
||||
#define TR_MODULES_RX_VERSION "Modules / RX version"
|
||||
#define TR_MENU_MODULES_RX_VERSION "MODULES / RX VERSION"
|
||||
#define TR_MENU_FIRM_OPTIONS "FIRMWARE OPTIONS"
|
||||
#define TR_GYRO "Gyro"
|
||||
#define TR_IMU "IMU"
|
||||
#define TR_STICKS_POTS_SLIDERS "Sticks/Pots/Sliders"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM Sticks/Pots/Sliders"
|
||||
#define TR_RF_PROTOCOL "RF Protocol"
|
||||
|
||||
@@ -214,10 +214,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ON","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW ,"GyrX","GyrY"
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -243,7 +243,6 @@
|
||||
#define TR_VFORMULAS "Add","Average","Min","Max","Multiply","Totalize","Cell","Consumpt","Distance"
|
||||
#define TR_VPREC "0.--","0.0 ","0.00"
|
||||
#define TR_VCELLINDEX "Lowest","1","2","3","4","5","6","Highest","Delta"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
|
||||
|
||||
@@ -376,12 +375,12 @@
|
||||
#define TR_SOUND_LABEL "Som"
|
||||
#define TR_LENGTH "Comprimento"
|
||||
#define TR_BEEP_LENGTH "Beep Length"
|
||||
#define TR_BEEP_PITCH "Pitch"
|
||||
#define TR_BEEP_PITCH "Pitch"
|
||||
#define TR_HAPTIC_LABEL "Vibrar"
|
||||
#define TR_STRENGTH "Forca"
|
||||
#define TR_GYRO_LABEL "Gyro"
|
||||
#define TR_GYRO_OFFSET "Offset"
|
||||
#define TR_GYRO_MAX "Max"
|
||||
#define TR_STRENGTH "Forca"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "Offset"
|
||||
#define TR_IMU_MAX "Max"
|
||||
#define TR_CONTRAST "Contraste"
|
||||
#define TR_ALARMS_LABEL "Alarmes"
|
||||
#define TR_BATTERY_RANGE "Battery Range"
|
||||
@@ -625,7 +624,7 @@
|
||||
#define TR_MODULES_RX_VERSION "Modules / RX version"
|
||||
#define TR_MENU_MODULES_RX_VERSION "MODULES / RX VERSION"
|
||||
#define TR_MENU_FIRM_OPTIONS "FIRMWARE OPTIONS"
|
||||
#define TR_GYRO "Gyro"
|
||||
#define TR_IMU "IMU"
|
||||
#define TR_STICKS_POTS_SLIDERS "Sticks/Pots/Sliders"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM Sticks/Pots/Sliders"
|
||||
#define TR_RF_PROTOCOL "RF Protocol"
|
||||
|
||||
@@ -243,10 +243,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "PÅ","Ett"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY"
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
|
||||
@@ -196,10 +196,10 @@
|
||||
|
||||
#define TR_ON_ONE_SWITCHES "ON","One"
|
||||
|
||||
#if defined(GYRO)
|
||||
#define TR_GYR_VSRCRAW "GyrX","GyrY",
|
||||
#if defined(IMU)
|
||||
#define TR_IMU_VSRCRAW "TltX","TltY",
|
||||
#else
|
||||
#define TR_GYR_VSRCRAW
|
||||
#define TR_IMU_VSRCRAW
|
||||
#endif
|
||||
|
||||
#if defined(HELI)
|
||||
@@ -225,7 +225,6 @@
|
||||
#define TR_VFORMULAS "加","平均值","最小值","最大值","乘","總計值","單節電池","消耗量","距離"
|
||||
#define TR_VPREC "0.--","0.0-","0.00"
|
||||
#define TR_VCELLINDEX "最低值","1","2","3","4","5","6","最高值","差值"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_TEXT_SIZE "標準","小","較小","中等","雙倍"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA "(中点)","=(整體)"
|
||||
|
||||
@@ -335,9 +334,9 @@
|
||||
#define TR_BEEP_PITCH "提示音音調"
|
||||
#define TR_HAPTIC_LABEL "振動"
|
||||
#define TR_STRENGTH "強度"
|
||||
#define TR_GYRO_LABEL "陀螺儀"
|
||||
#define TR_GYRO_OFFSET "補償"
|
||||
#define TR_GYRO_MAX "最大值"
|
||||
#define TR_IMU_LABEL "IMU"
|
||||
#define TR_IMU_OFFSET "補償"
|
||||
#define TR_IMU_MAX "最大值"
|
||||
#define TR_CONTRAST "對比度"
|
||||
#define TR_ALARMS_LABEL "警告"
|
||||
#define TR_BATTERY_RANGE TR("Batt. range", "電壓測量範圍")
|
||||
@@ -575,7 +574,7 @@
|
||||
#define TR_MODULES_RX_VERSION "模塊/接收機版本"
|
||||
#define TR_MENU_MODULES_RX_VERSION "模塊/接收機版本"
|
||||
#define TR_MENU_FIRM_OPTIONS "韌體選項"
|
||||
#define TR_GYRO "陀螺儀"
|
||||
#define TR_IMU "陀螺儀"
|
||||
#define TR_STICKS_POTS_SLIDERS "搖桿/旋鈕/滑塊"
|
||||
#define TR_PWM_STICKS_POTS_SLIDERS "PWM 搖桿/旋鈕/滑塊"
|
||||
#define TR_RF_PROTOCOL "射頻協議"
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
#define TR_VKEYS "Menu","Exit","Down","Up","Right","Left"
|
||||
#endif
|
||||
|
||||
#define TR_VSRCRAW "---", TR_STICKS_VSRCRAW, TR_POTS_VSRCRAW, TR_GYR_VSRCRAW "MAX", TR_CYC_VSRCRAW, TR_TRIMS_VSRCRAW, TR_SW_VSRCRAW, TR_EXTRA_VSRCRAW
|
||||
#define TR_VSRCRAW "---", TR_STICKS_VSRCRAW, TR_POTS_VSRCRAW, TR_IMU_VSRCRAW "MAX", TR_CYC_VSRCRAW, TR_TRIMS_VSRCRAW, TR_SW_VSRCRAW, TR_EXTRA_VSRCRAW
|
||||
|
||||
#define TR_CRSF_BAUDRATE "115k","400k","921k","1.87M","3.75M","5.25M"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user