WiP: support for LSM6DSxx

This commit is contained in:
Raphael Coeffic
2022-06-25 16:09:04 +02:00
committed by Raphael Coeffic
parent df83a82285
commit 0b8d93ca88
44 changed files with 356 additions and 429 deletions
+3 -3
View File
@@ -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")
+2 -2
View File
@@ -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)
+5 -10
View File
@@ -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
+2 -2
View File
@@ -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:");
+17 -17
View File
@@ -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, ")");
+16 -16
View File
@@ -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
View File
@@ -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
View File
@@ -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]);
+1 -1
View File
@@ -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
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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, &reg, 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);
}
+3 -2
View File
@@ -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
-3
View File
@@ -224,9 +224,6 @@ void boardInit()
if (!adcInit(&ADC_DRIVER))
TRACE("adcInit failed");
#if defined(IMU_LSM6DS33)
imu_lsm6ds33_init();
#endif
init2MhzTimer();
init1msTimer();
-3
View File
@@ -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;
+11 -1
View File
@@ -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);
}
}
+1 -13
View File
@@ -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)
+1 -7
View File
@@ -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
-10
View File
@@ -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)
+4 -5
View File
@@ -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
View File
@@ -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();
+4 -4
View File
@@ -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)
+4 -4
View File
@@ -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[];
+7 -8
View File
@@ -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 "射频协议"
+7 -8
View File
@@ -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"
+7 -8
View File
@@ -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"
+7 -8
View File
@@ -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"
+8 -9
View File
@@ -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"
+7 -8
View File
@@ -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"
+7 -8
View File
@@ -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
View File
@@ -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"
+7 -7
View File
@@ -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"
+9 -10
View File
@@ -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"
+9 -10
View File
@@ -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"
+3 -3
View File
@@ -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)
+7 -8
View File
@@ -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 "射頻協議"
+1 -1
View File
@@ -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"