8

uinput/を使用して複数のボタンを備えたジョイスティックを作成する方法に関する情報が見つかりませんsuinputpython使用例python-uinput

import uinput

def main():
    events = (
        uinput.BTN_JOYSTICK,
        uinput.ABS_X + (0, 255, 0, 0),
        uinput.ABS_Y + (0, 255, 0, 0),
        )

    with uinput.Device(events) as device:
        for i in range(20):
            # syn=False to emit an "atomic" (5, 5) event.
            device.emit(uinput.ABS_X, 5, syn=False)
            device.emit(uinput.ABS_Y, 5)
        device.emit_click(uinput.BTN_JOYSTICK)

if __name__ == "__main__":
    main()

ご覧のとおり、この例ではBTN_JOYSTICKas ボタンを使用しています。そして、2番目のボタン/追加の2つのABS_X/を作成するにはどうすればよいABS_Yですか?

注:python例として使用しています。アプリケーション言語はCwith libsuinput.

4

1 に答える 1

4

より多くのボタン — より多くのボタン コード。元々、ボタン コードは、ユーザー空間の観点から、またはカーネルの観点から、linux/input.hヘッダーで定義されています。uapi/linux/input-event-codes.hPython の場合、それらはev.py. ご覧のとおり、それらはたくさんあり、主に と の間のものに関心がありますBTN_JOYSTICK(BTN_THUMBRただし、BTN_TRIGGER_HAPPY値は一部で使用されます)。最も興味深いものはBTN_THUMB、、、、およびです。BTN_PINKIEBTN_[ABC]BTN_SELECTBTN_START

ABS_X付加軸は ~ のいずれかをお選びABS_MISCください。最も興味深い追加のものはABS_R[XYZ]ABS_HAT0[XYZ]です。

したがって、その追加のボタン/軸を使用するには、および で使用するのとBTN_JOYSTICK同じ方法でこれらの識別子を使用するだけです。ABS_XABS_Y

もう 1 つの興味深い質問は、このリストのどの値が、エミュレートしようとしている実際のジョイスティックで使用されているかということです。この値は、evtestまたはevemuプログラムを使用して取得できます (もちろん、実際のジョイスティックを使用します)。いくつかの広く利用されているジョイスティック (Xbox および PS3) についてもここで説明しました(ご覧のとおり、ジョイスティックは生成するボタン コードが大きく異なります)。そして、本当に確実にするために (または evtest でチェックできないデバイスをエミュレートするために)、実際のジョイスティック ドライバー(それらが使用するもの)BTN_を調べることもできますABS_

于 2016-09-21T21:22:20.393 に答える