Перейти к содержанию

Альтернативные методы управления шлемом


Рекомендуемые сообщения

  • Модераторы

Обсуждение всевозможных способов управления шлемом, не считая контроллеров: мышь, эмуляторы мыши, клавиатура, тачпад, ADB и прочие другие. 

Ссылка на комментарий
Поделиться на другие сайты

Пока коллекционирую банальности и изобретаю велосипеды.
Подумал тут: "Если с контроллерами геморно через АПИ, что можно сделать без них?"
Тапы шлем, действительно не слышит: из инпутов есть только разъем наушников, да кнопки питания с громкостью. Тачскрин (INPUT_PROP_DIRECT) как бы тоже есть, но по ивентам судя, он не координатный - "одна большая кнопка". 

$ ls -l /dev/input
crw-rw---- 1 root input 13,  64 1970-05-04 21:16 event0
crw-rw---- 1 root input 13,  65 1970-05-04 21:16 event1
crw-rw---- 1 root input 13,  66 1970-05-04 21:16 event2
crw-rw---- 1 root input 13,  67 2024-07-07 09:07 event3
crw-rw---- 1 root input 13,  68 2024-07-08 02:00 event4

$ getevent -lp
add device 1: /dev/input/event4
  name:     "Device 0x4CBCE9E9E8D710A4"
  events:
    KEY (0001): KEY_FORWARD
  input props:
    INPUT_PROP_DIRECT
add device 2: /dev/input/event3
  name:     "anorak-max98388-snd-card AK4333 Headphone"
  events:
    SW  (0005): SW_HEADPHONE_INSERT   SW_LINEOUT_INSERT     SW_JACK_PHYSICAL_INS
  input props:
    <none>
add device 3: /dev/input/event2
  name:     "pmic_resin"
  events:
    KEY (0001): KEY_VOLUMEDOWN
  input props:
    <none>
add device 4: /dev/input/event1
  name:     "pmic_pwrkey"
  events:
    KEY (0001): KEY_POWER
  input props:
    <none>
add device 5: /dev/input/event0
  name:     "gpio-keys"
  events:
    KEY (0001): KEY_VOLUMEUP
  input props:
    <none>

И главное, при снятии шлема окна пропадают, точнее сворачиваются в угол, если правильно понял изменения range.


Пока фантазируется, без АПИ придется победить минимум три вещи:
- включить "безконтроллерный" режим (белая точка и громкость, как "клик"),
- развернутые окна (обмануть, что шлем на голове),
- навести точку на нужное место и кликнуть на громкость.

Ссылка на комментарий
Поделиться на другие сайты

  • Модераторы

Мой список Keyevents, работающих на шлеме:

"key_home": "
adb shell input keyevent 3
"key_volume_up": "
adb shell input keyevent 24
"key_volume_down": "
adb shell input keyevent 25
"key_power": "
adb shell input keyevent 26
"key_enter": "
adb shell input keyevent 66
"key_menu": "
adb shell input keyevent 82
key_settings": "
adb shell input keyevent 176
"key_sleep": "
adb shell input keyevent 223
"key_wakeup": "
adb shell input keyevent 224
"key_soft_sleep": "
adb shell input keyevent 276
 

Ссылка на комментарий
Поделиться на другие сайты

  • Модераторы

Перебрал все возможные "устройства" в команде adb shell input:

    dpad
    keyboard
    mouse
    touchpad
    gamepad
    touchnavigation
    joystick
    touchscreen
    stylus
    trackball
 

а также пробовал tap и press, и также пробовал подключать физическую мышь, но увы - никаких нажатий по заданным координатам.

 

Проверялось с включенной опцией "Отображать нажатия" в меню {} Для разработчиков.

Нажатия лучами фиксируются нормально.

Ссылка на комментарий
Поделиться на другие сайты

  • Модераторы

Попробовал использовать для этого дела scrcpy.

Он прекрасно мапит (форвардит) и мышь по UHID:

scrcpy --no-video --no-audio --mouse=uhid --mouse-bind=++++

Вероятнее всего и клавиатуру тоже, но я пока не придумал, как ее использовать.

 

Но вот с нажатиями пока не срастается. Мышь появляется, все хорошо, (то есть та, которая в данный момент подключена к ПК, физическая) работает, нажимает кнопки в шлеме на панели и т.д..

Но по координатам кликать не хочет. Во-1, мышь перестает работать, когда убирается фокус с окна scrcpy на ПК - она переключается обратно на ПК, и во-2, даже после команды форвардинга мыши, на шлеме она появляется только тогда, когда физическую мышь немного подвигаешь. А команда, например, adb shell input source tap 350 550 идет сразу вслед за командой бинда мыши в scrcpy.

 

Правда, я не первый такой умный:

https://github.com/Genymobile/scrcpy/issues/579

 

Йеееееее!!!! С клавиатурой сработало.

Только нужно дваждый нажать кнопку Tab, а затем Enter.

 

p.s. Все оказалось гораздо проще, scrcpy не нужен:

adb shell input keyevent 61
ping localhost -n 2 1>nul

adb shell input keyevent 61
ping localhost -n 2 1>nul

adb shell input keyevent 61
ping localhost -n 2 1>nul

adb shell input keyevent 66

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...

Важная информация

Правила пользования сайтом Условия использования