Джойстик Linux кажется неправильным калиброванным в игре SDL (Свободное пространство 2 Открытых) [закрытый]

У меня есть джойстик USB (3D Киборг Saitek), который обнаруживается на моем недавно установленном поле Ubuntu 9.04 как /dev/input/js0, и jstest показывает значения в диапазоне +-32767, как я ожидал бы. Я просто вскопал копию Открытого FreeSpace, игра, которая использует SDL и работала без проблем над предыдущей Ubuntu, устанавливает приблизительно год назад, и джойстик кажется очень неправильным калиброванным. Все оси (X, Y, скручивание, дроссель) кажутся по крайней мере 20%, с отклонением от центра. Оси X и Y по крайней мере определенно не достигают своих конечных точек.

Соответствующее сообщение в списке рассылки SDL в январе 2009 не получило конкретных ответов.

Вот радость-unix.cpp из источника проекта. Я - не совсем рабочая соединительная линия, но как Вы видите от журнала пересмотра там, никаких фактических изменений кода не происходило с тем файлом больше 3 лет.

4
задан 16.07.2012, 04:34

2 ответа

Я заметил проблему в d2x (порт Descent), который также использует SDL, таким образом, я пошел, закопав SDL. testjoystick из источника SDL показал проблему также. Смотря на драйвер джойстика Linux SDL, проблема упоминается. Поиск joydev_pattern в том файле и Вы будете видеть то, что они делают; поиск calibrate и они действительно упоминают эту проблему. В основном они используют /dev/input/event6 (или какой бы ни) в предпочтении к /dev/input/js0, если не скомпилировано с --disable-input-events, даже знание устройства события не может быть калибровано (т.е. набор для калибровки на js0 будет проигнорирован).

Найдя все это, поиски Google, включающие это configure опция показывает что скрытый в комментариях к практическому руководству Linux для fs2_open, у кого-то уже на самом деле была эта проблема.

Я сообщил об этой ошибке к Ubuntu. Для работы вокруг выберите любой из:

  • Набор SDL_JOYSTICK_DEVICE=/dev/input/js0 (Вы могли вставить это /etc/environment и перезагрузка для применения его везде).Править: SDL будет все еще иметь evdev устройство как второй джойстик, таким образом, в играх как d2x это отвечает на второй джойстик также по умолчанию, посещает экран опций и удаляет ту дополнительную привязку.
  • Перекомпилируйте libSDL с --disable-input-events.
  • rmmod evdev (довольно вероятно, для потери любых необычных устройств ввода данных Вы имеете).
5
ответ дан 07.12.2019, 20:12

Кажется, что игре нужно предоставить значения оси минуты/макс./центра от джойстика. Значения по умолчанию могли бы быть 0/32768/65536, а не-32676/0/32760, который Вы видите? Это - более очевидно, много больше чем 20% прочь, поэтому возможно, это пытается автокалибровать в какой-то момент. Это также похоже joytest2 консольная команда может показать значения в игре, которые могли бы обеспечить некоторое добавленное понимание.

От joy_init():

// Fake a calibration
if (joy_num_sticks > 0) {
    for (i=0; i<JOY_NUM_AXES; i++) {
        joystick.axis_center[i] = 32768;
        joystick.axis_min[i] = 0;
        joystick.axis_max[i] = 65536;
    }
}

Я вижу, что калибровка функционирует (joy_cheap_cal() в joy.cpp:454) но не сразу очевидно, где от этого называют, или если существуют другие методы в игре для того, чтобы перекалибровать значения оси. Я люблю Свободное пространство, поэтому когда я возвращусь домой, я загружу код и введу по абсолютному адресу вокруг немного. Вы могли бы также попытаться работать jscal просто в придачу?

1
ответ дан 07.12.2019, 20:12

Теги

Похожие вопросы