УкраїнськаEnglishmRussian
Вхід/Новий
У темі немає нових постів

[UpstreamRequest][CodeReview][NewFeature] Поддержка USB-HID совместимых устройств ввода через libsdl


Автор Повідомлення
Повідомлення створено: 07. 08. 2013 [09:59]
aleax
Alexey Bondarchuk
Автор теми
Зареєстрован(а) с: 27.01.2010
Повідомлення: 73
Для решения одной задачи, нам понадобилось управление некими механизмами из среды OpenSCADA. Заказчик захотел попробовать в качестве устройства ввода геймпад/джойстик.

Для реализации данной фичи решено было использовать библиотеку libsdl, и добавить с помощью нее в модуль Vision обработку ивентов от USB-HID совместиміх джойстиков.

Ивенты формируются и пересылаются в VCAEngine аналогично уже существующим ивентам мыши/клавиатуры.
Добавленны следующие ивенты:
joy_axisN_valueK, где N номер оси джойстика (0..количество осей джойстика) K — значение положения оси (-32768..32767), например:
joy_axis0_value0
joy_axis1_value-16042
joy_axis3_value32767
и
joy_button[Down/Up]N, где [Down/Up] действие нажатия и отпускания кнопок джойстика, а N номер кнопки (0..количество кнопок джойстика), например:
joy_buttonDown0
joy_buttonUp4


Исходники доступны в отдельной ветке на гитхаб: https://github.com/aleax/openscada/tree/openscada_0.8.0_sdl
diff относительно svn ветки 0.8: https://github.com/aleax/openscada/compare/openscada_0.8.0...openscada_0.8.0_sdl
Повідомлення створено: 07. 08. 2013 [13:22]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"aleax" wrote:

Для решения одной задачи, нам понадобилось управление некими механизмами из среды OpenSCADA. Заказчик захотел попробовать в качестве устройства ввода геймпад/джойстик.

Для реализации данной фичи решено было использовать библиотеку libsdl, и добавить с помощью нее в модуль Vision обработку ивентов от USB-HID совместиміх джойстиков.

Не пробовали прямо в QT эти события получить?
Не хотелось-бы ради джойстика тащить зависимость на целый SDL.
Поглядите здесь, пожалуйста: http://f1-delphi.ru/books/qt_4_programmirovanie_gui_na_s/primenenie_rodnyx_programmnyx_/3.html

Learn, learn and learn better than work, work and work.
Повідомлення створено: 07. 08. 2013 [15:20]
aleax
Alexey Bondarchuk
Автор теми
Зареєстрован(а) с: 27.01.2010
Повідомлення: 73
"roman" wrote:

Не пробовали прямо в QT эти события получить?
Не хотелось-бы ради джойстика тащить зависимость на целый SDL.
Поглядите здесь, пожалуйста: http://f1-delphi.ru/books/qt_4_programmirovanie_gui_na_s/primenenie_rodnyx_programmnyx_/3.html


В X11 нет никаких событий от джойстиков, а реализовывать на Qt (+ libusb(?)) то что уже реализовано в SDL мне показалось не целесообразно. Опять же зависимость опциональная, для ембедед решения соберется без него, а для воркстейшин, то вероятность наличия в системе уже установленной libsdl весьма немаленькая. Да и например в дебиане, установка libsdl (220кб) с её зависимостями не потянуло более 0.5 Мб.
Повідомлення створено: 08. 08. 2013 [07:23]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"aleax" wrote:

"roman" wrote:

Не пробовали прямо в QT эти события получить?
Не хотелось-бы ради джойстика тащить зависимость на целый SDL.
Поглядите здесь, пожалуйста: http://f1-delphi.ru/books/qt_4_programmirovanie_gui_na_s/primenenie_rodnyx_programmnyx_/3.html

В X11 нет никаких событий от джойстиков, а реализовывать на Qt (+ libusb(?)) то что уже реализовано в SDL мне показалось не целесообразно.

Но могут быть и вообще он может быть вместе/вместо мыши. Например, здесь: http://www.ljpoisk.ru/archive/4093472.html

Вообще похоже на вопрос с сенсорными экранами, но их ведь не тянут отдельными библиотеками, а просто к XOrg подключают.

Мне правда тяжело себе представить джойстик без интеграции в XOrg, а также использование его, особенно если учесть, что события по сути глобальные и к отдельному виджету не привязаны.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 09. 08. 2013 [14:38]
aleax
Alexey Bondarchuk
Автор теми
Зареєстрован(а) с: 27.01.2010
Повідомлення: 73
Поизучаю вопрос...



6677