У меня есть джойстик USB (3D Киборг Saitek), который обнаруживается на моем недавно установленном поле Ubuntu 9.04 как /dev/input/js0
, и jstest
показывает значения в диапазоне +-32767, как я ожидал бы. Я просто вскопал копию Открытого FreeSpace, игра, которая использует SDL и работала без проблем над предыдущей Ubuntu, устанавливает приблизительно год назад, и джойстик кажется очень неправильным калиброванным. Все оси (X, Y, скручивание, дроссель) кажутся по крайней мере 20%, с отклонением от центра. Оси X и Y по крайней мере определенно не достигают своих конечных точек.
Соответствующее сообщение в списке рассылки SDL в январе 2009 не получило конкретных ответов.
Вот радость-unix.cpp из источника проекта. Я - не совсем рабочая соединительная линия, но как Вы видите от журнала пересмотра там, никаких фактических изменений кода не происходило с тем файлом больше 3 лет.
Я заметил проблему в 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
это отвечает на второй джойстик также по умолчанию, посещает экран опций и удаляет ту дополнительную привязку.--disable-input-events
.rmmod evdev
(довольно вероятно, для потери любых необычных устройств ввода данных Вы имеете).Кажется, что игре нужно предоставить значения оси минуты/макс./центра от джойстика. Значения по умолчанию могли бы быть 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
просто в придачу?