mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-13 19:40:27 +03:00
X-Plane bugfix
This commit is contained in:
parent
1307549e41
commit
e1cbf965e4
4 changed files with 39 additions and 43 deletions
|
@ -19,12 +19,12 @@ In the settings, calibrate the joystick, set it up and assign the axes as follow
|
||||||
|------|---------|
|
|------|---------|
|
||||||
| Roll | Roll |
|
| Roll | Roll |
|
||||||
| Pitch | Pitch |
|
| Pitch | Pitch |
|
||||||
| Throttle | Throttle |
|
| Throttle | Cowl Flap 1 |
|
||||||
| Yaw | Yaw |
|
| Yaw | Yaw |
|
||||||
| Channel 5 | Prop |
|
| Channel 5 | Cowl Flap 2 |
|
||||||
| Channel 6 | Mixture |
|
| Channel 6 | Cowl Flap 3 |
|
||||||
| Channel 7 | Collective |
|
| Channel 7 | Cowl Flap 4 |
|
||||||
| Channel 8 | Thrust vector |
|
| Channel 8 | Cowl Flap 5 |
|
||||||
|
|
||||||
Reverse axis in X-Plane if necessary.
|
Reverse axis in X-Plane if necessary.
|
||||||
|
|
||||||
|
|
|
@ -367,6 +367,9 @@ void compassUpdate(timeUs_t currentTimeUs)
|
||||||
static int16_t magPrev[XYZ_AXIS_COUNT];
|
static int16_t magPrev[XYZ_AXIS_COUNT];
|
||||||
static int magAxisDeviation[XYZ_AXIS_COUNT];
|
static int magAxisDeviation[XYZ_AXIS_COUNT];
|
||||||
|
|
||||||
|
#if defined(SITL_BUILD)
|
||||||
|
ENABLE_STATE(COMPASS_CALIBRATED);
|
||||||
|
#else
|
||||||
// Check magZero
|
// Check magZero
|
||||||
if (
|
if (
|
||||||
compassConfig()->magZero.raw[X] == 0 && compassConfig()->magZero.raw[Y] == 0 && compassConfig()->magZero.raw[Z] == 0 &&
|
compassConfig()->magZero.raw[X] == 0 && compassConfig()->magZero.raw[Y] == 0 && compassConfig()->magZero.raw[Z] == 0 &&
|
||||||
|
@ -377,6 +380,7 @@ void compassUpdate(timeUs_t currentTimeUs)
|
||||||
else {
|
else {
|
||||||
ENABLE_STATE(COMPASS_CALIBRATED);
|
ENABLE_STATE(COMPASS_CALIBRATED);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!mag.dev.read(&mag.dev)) {
|
if (!mag.dev.read(&mag.dev)) {
|
||||||
mag.magADC[X] = 0;
|
mag.magADC[X] = 0;
|
||||||
|
|
|
@ -399,7 +399,6 @@ static void exchangeData(void)
|
||||||
constrainToInt16(north.y * 16000.0f),
|
constrainToInt16(north.y * 16000.0f),
|
||||||
constrainToInt16(north.z * 16000.0f)
|
constrainToInt16(north.z * 16000.0f)
|
||||||
);
|
);
|
||||||
ENABLE_STATE(COMPASS_CALIBRATED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void* soapWorker(void* arg)
|
static void* soapWorker(void* arg)
|
||||||
|
|
|
@ -92,18 +92,6 @@ static float barometer = 0;
|
||||||
static bool hasJoystick = false;
|
static bool hasJoystick = false;
|
||||||
static float joystickRaw[XPLANE_JOYSTICK_AXIS_COUNT];
|
static float joystickRaw[XPLANE_JOYSTICK_AXIS_COUNT];
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
RF_ASSIGNMENT_PITCH,
|
|
||||||
RF_ASSIGNMENT_ROLL,
|
|
||||||
RF_ASSIGNMENT_YAW,
|
|
||||||
RF_ASSIGNMENT_THROTLE,
|
|
||||||
RF_ASSIGNMENT_PROP,
|
|
||||||
RF_ASSIGNMENT_MIXTURE,
|
|
||||||
RF_ASSIGNMENT_COLLECTIVE,
|
|
||||||
RF_ASSIGNMENT_THRUST_VECTOR
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
DREF_LATITUDE,
|
DREF_LATITUDE,
|
||||||
|
@ -132,10 +120,10 @@ typedef enum
|
||||||
DREF_JOYSTICK_VALUES_PITCH,
|
DREF_JOYSTICK_VALUES_PITCH,
|
||||||
DREF_JOYSTICK_VALUES_THROTTLE,
|
DREF_JOYSTICK_VALUES_THROTTLE,
|
||||||
DREF_JOYSTICK_VALUES_YAW,
|
DREF_JOYSTICK_VALUES_YAW,
|
||||||
DREF_JOYSTICK_VALUES_PROP,
|
DREF_JOYSTICK_VALUES_CH5,
|
||||||
DREF_JOYSTICK_VALUES_MIXTURE,
|
DREF_JOYSTICK_VALUES_CH6,
|
||||||
DREF_JOYSTICK_VALUES_COLLECTIVE,
|
DREF_JOYSTICK_VALUES_CH7,
|
||||||
DREF_JOYSTICK_VALUES_THRUST_VECTOR,
|
DREF_JOYSTICK_VALUES_CH8,
|
||||||
} dref_t;
|
} dref_t;
|
||||||
|
|
||||||
uint32_t xint2uint32 (uint8_t * buf)
|
uint32_t xint2uint32 (uint8_t * buf)
|
||||||
|
@ -210,6 +198,11 @@ static void* listenWorker(void* arg)
|
||||||
sendDref("sim/joystick/yoke_roll_ratio", yokeValues[0]);
|
sendDref("sim/joystick/yoke_roll_ratio", yokeValues[0]);
|
||||||
sendDref("sim/joystick/yoke_pitch_ratio", yokeValues[1]);
|
sendDref("sim/joystick/yoke_pitch_ratio", yokeValues[1]);
|
||||||
sendDref("sim/joystick/yoke_heading_ratio", yokeValues[2]);
|
sendDref("sim/joystick/yoke_heading_ratio", yokeValues[2]);
|
||||||
|
sendDref("sim/cockpit2/engine/actuators/cowl_flap_ratio[0]", 0);
|
||||||
|
sendDref("sim/cockpit2/engine/actuators/cowl_flap_ratio[1]", 0);
|
||||||
|
sendDref("sim/cockpit2/engine/actuators/cowl_flap_ratio[2]", 0);
|
||||||
|
sendDref("sim/cockpit2/engine/actuators/cowl_flap_ratio[3]", 0);
|
||||||
|
sendDref("sim/cockpit2/engine/actuators/cowl_flap_ratio[4]", 0);
|
||||||
|
|
||||||
recvLen = recvfrom(sockFd, buf, sizeof(buf), 0, (struct sockaddr*)&remoteAddr, &slen);
|
recvLen = recvfrom(sockFd, buf, sizeof(buf), 0, (struct sockaddr*)&remoteAddr, &slen);
|
||||||
if (recvLen < 0 && errno != EWOULDBLOCK) {
|
if (recvLen < 0 && errno != EWOULDBLOCK) {
|
||||||
|
@ -326,19 +319,19 @@ static void* listenWorker(void* arg)
|
||||||
joystickRaw[3] = value;
|
joystickRaw[3] = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DREF_JOYSTICK_VALUES_PROP:
|
case DREF_JOYSTICK_VALUES_CH5:
|
||||||
joystickRaw[4] = value;
|
joystickRaw[4] = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DREF_JOYSTICK_VALUES_MIXTURE:
|
case DREF_JOYSTICK_VALUES_CH6:
|
||||||
joystickRaw[5] = value;
|
joystickRaw[5] = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DREF_JOYSTICK_VALUES_COLLECTIVE:
|
case DREF_JOYSTICK_VALUES_CH7:
|
||||||
joystickRaw[6] = value;
|
joystickRaw[6] = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DREF_JOYSTICK_VALUES_THRUST_VECTOR:
|
case DREF_JOYSTICK_VALUES_CH8:
|
||||||
joystickRaw[7] = value;
|
joystickRaw[7] = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -357,14 +350,14 @@ static void* listenWorker(void* arg)
|
||||||
|
|
||||||
if (hasJoystick) {
|
if (hasJoystick) {
|
||||||
uint16_t channelValues[XPLANE_JOYSTICK_AXIS_COUNT];
|
uint16_t channelValues[XPLANE_JOYSTICK_AXIS_COUNT];
|
||||||
channelValues[0] = FLOAT_MINUS_1_1_TO_PWM(joystickRaw[RF_ASSIGNMENT_ROLL]);
|
channelValues[0] = FLOAT_MINUS_1_1_TO_PWM(joystickRaw[0]);
|
||||||
channelValues[1] = FLOAT_MINUS_1_1_TO_PWM(joystickRaw[RF_ASSIGNMENT_PITCH]);
|
channelValues[1] = FLOAT_MINUS_1_1_TO_PWM(joystickRaw[1]);
|
||||||
channelValues[2] = FLOAT_0_1_TO_PWM(joystickRaw[RF_ASSIGNMENT_THROTLE]);
|
channelValues[2] = FLOAT_0_1_TO_PWM(joystickRaw[2]);
|
||||||
channelValues[3] = FLOAT_MINUS_1_1_TO_PWM(joystickRaw[RF_ASSIGNMENT_YAW]);
|
channelValues[3] = FLOAT_MINUS_1_1_TO_PWM(joystickRaw[3]);
|
||||||
channelValues[4] = FLOAT_0_1_TO_PWM(joystickRaw[RF_ASSIGNMENT_PROP]);
|
channelValues[4] = FLOAT_0_1_TO_PWM(joystickRaw[4]);
|
||||||
channelValues[5] = FLOAT_0_1_TO_PWM(joystickRaw[RF_ASSIGNMENT_MIXTURE]);
|
channelValues[5] = FLOAT_0_1_TO_PWM(joystickRaw[5]);
|
||||||
channelValues[6] = FLOAT_0_1_TO_PWM(joystickRaw[RF_ASSIGNMENT_COLLECTIVE]);
|
channelValues[6] = FLOAT_0_1_TO_PWM(joystickRaw[6]);
|
||||||
channelValues[7] = FLOAT_0_1_TO_PWM(joystickRaw[RF_ASSIGNMENT_THRUST_VECTOR]);
|
channelValues[7] = FLOAT_0_1_TO_PWM(joystickRaw[7]);
|
||||||
|
|
||||||
rxSimSetChannelValue(channelValues, XPLANE_JOYSTICK_AXIS_COUNT);
|
rxSimSetChannelValue(channelValues, XPLANE_JOYSTICK_AXIS_COUNT);
|
||||||
}
|
}
|
||||||
|
@ -428,7 +421,6 @@ static void* listenWorker(void* arg)
|
||||||
constrainToInt16(north.y * 16000.0f),
|
constrainToInt16(north.y * 16000.0f),
|
||||||
constrainToInt16(north.z * 16000.0f)
|
constrainToInt16(north.z * 16000.0f)
|
||||||
);
|
);
|
||||||
ENABLE_STATE(COMPASS_CALIBRATED);
|
|
||||||
|
|
||||||
if (!initalized) {
|
if (!initalized) {
|
||||||
ENABLE_ARMING_FLAG(SIMULATOR_MODE_SITL);
|
ENABLE_ARMING_FLAG(SIMULATOR_MODE_SITL);
|
||||||
|
@ -503,14 +495,15 @@ bool simXPlaneInit(char* ip, int port, uint8_t* mapping, uint8_t mapCount, bool
|
||||||
registerDref(DREF_POS_R, "sim/flightmodel/position/R", 100);
|
registerDref(DREF_POS_R, "sim/flightmodel/position/R", 100);
|
||||||
registerDref(DREF_POS_BARO_CURRENT_INHG, "sim/weather/barometer_current_inhg", 100);
|
registerDref(DREF_POS_BARO_CURRENT_INHG, "sim/weather/barometer_current_inhg", 100);
|
||||||
registerDref(DREF_HAS_JOYSTICK, "sim/joystick/has_joystick", 100);
|
registerDref(DREF_HAS_JOYSTICK, "sim/joystick/has_joystick", 100);
|
||||||
registerDref(DREF_JOYSTICK_VALUES_ROll, "sim/joystick/joy_mapped_axis_value[1]", 100);
|
registerDref(DREF_JOYSTICK_VALUES_PITCH, "sim/joystick/joy_mapped_axis_value[1]", 100);
|
||||||
registerDref(DREF_JOYSTICK_VALUES_PITCH, "sim/joystick/joy_mapped_axis_value[2]", 100);
|
registerDref(DREF_JOYSTICK_VALUES_ROll, "sim/joystick/joy_mapped_axis_value[2]", 100);
|
||||||
registerDref(DREF_JOYSTICK_VALUES_THROTTLE, "sim/joystick/joy_mapped_axis_value[3]", 100);
|
registerDref(DREF_JOYSTICK_VALUES_YAW, "sim/joystick/joy_mapped_axis_value[3]", 100);
|
||||||
registerDref(DREF_JOYSTICK_VALUES_YAW, "sim/joystick/joy_mapped_axis_value[4]", 100);
|
// Abusing cowl flaps for other channels
|
||||||
registerDref(DREF_JOYSTICK_VALUES_PROP, "sim/joystick/joy_mapped_axis_value[8]", 100);
|
registerDref(DREF_JOYSTICK_VALUES_THROTTLE, "sim/joystick/joy_mapped_axis_value[57]", 100);
|
||||||
registerDref(DREF_JOYSTICK_VALUES_MIXTURE, "sim/joystick/joy_mapped_axis_value[9]", 100);
|
registerDref(DREF_JOYSTICK_VALUES_CH5, "sim/joystick/joy_mapped_axis_value[58]", 100);
|
||||||
registerDref(DREF_JOYSTICK_VALUES_COLLECTIVE, "sim/joystick/joy_mapped_axis_value[5]", 100);
|
registerDref(DREF_JOYSTICK_VALUES_CH6, "sim/joystick/joy_mapped_axis_value[59]", 100);
|
||||||
registerDref(DREF_JOYSTICK_VALUES_THRUST_VECTOR, "sim/joystick/joy_mapped_axis_value[12]", 100);
|
registerDref(DREF_JOYSTICK_VALUES_CH7, "sim/joystick/joy_mapped_axis_value[60]", 100);
|
||||||
|
registerDref(DREF_JOYSTICK_VALUES_CH8, "sim/joystick/joy_mapped_axis_value[61]", 100);
|
||||||
delay(250);
|
delay(250);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue