1
0
Fork 0
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:
Scavanger 2023-03-06 09:02:31 -03:00
parent 1307549e41
commit e1cbf965e4
4 changed files with 39 additions and 43 deletions

View file

@ -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.

View file

@ -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;

View file

@ -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)

View file

@ -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);
} }