Skip to content
Snippets Groups Projects

input-monitor: Show more information

Merged Simon McVittie requested to merge wip/show-more-input-data into main
All threads resolved!

The high-level goal of this branch is to make it unnecessary to run evemu-describe and od -t x1 .../report_descriptor separately, as I had to ask @jpwhiting to do on steamrt/tasks#287.

Sample output:

{
  "added" : {
    "interface_flags" : [
      "event",
      "readable",
      "read-write"
    ],
    "type_flags" : [
      "joystick"
    ],
    "dev_node" : "/dev/input/event19",
    "subsystem" : "input",
    "sys_path" : "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:054C:0268.0009/input/input32/event19",
    "bus_type" : "0x0005",
    "vendor_id" : "0x054c",
    "product_id" : "0x0268",
    "version" : "0x8000",
    "evdev" : {
      "types" : [
        "SYN",
        "KEY",
        "ABS",
        "MSC",
        "FF"
      ],
      "raw_types" : "0x1b, 0x00, 0x20, 0x00,",
      "absolute_axes" : [
        "X",
        "Y",
        "Z",
        "RX",
        "RY",
        "RZ"
      ],
      "raw_abs" : "0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
      "relative_axes" : [],
      "raw_rel" : "0x00, 0x00, 0x00, 0x00,",
      "keys" : [
        "BTN_A",
        "BTN_B",
        "BTN_X",
        "BTN_Y",
        "BTN_TL",
        "BTN_TR",
        "BTN_TL2",
        "BTN_TR2",
        "BTN_SELECT",
        "BTN_START",
        "BTN_MODE",
        "BTN_THUMBL",
        "BTN_THUMBR",
        "BTN_DPAD_UP",
        "BTN_DPAD_DOWN",
        "BTN_DPAD_LEFT",
        "BTN_DPAD_RIGHT"
      ],
      "raw_keys" : [
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x7f,",
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
        "0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,",
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
        "0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,"
      ],
      "input_properties" : [],
      "raw_input_properties" : "0x00, 0x00, 0x00, 0x00,"
    },
    "hid_ancestor" : {
      "sys_path" : "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:054C:0268.0009",
      "name" : "PLAYSTATION(R)3 Controller",
      "bus_type" : "0x0005",
      "vendor_id" : "0x054c",
      "product_id" : "0x0268",
      "uniq" : [REDACTED],
      "report_descriptor_length" : 149,
      "report_descriptor" : [
        "05 01 09 04 a1 01 a1 02",
        "85 01 75 08 95 01 15 00",
        "26 ff 00 81 03 75 01 95",
        "13 15 00 25 01 35 00 45",
        "01 05 09 19 01 29 13 81",
        "02 75 01 95 0d 06 00 ff",
        "81 03 15 00 26 ff 00 05",
        "01 09 01 a1 00 75 08 95",
        "04 35 00 46 ff 00 09 30",
        "09 31 09 32 09 35 81 02",
        "c0 05 01 75 08 95 27 09",
        "01 81 02 75 08 95 30 09",
        "01 91 02 75 08 95 30 09",
        "01 b1 02 c0 a1 02 85 02",
        "75 08 95 30 09 01 b1 02",
        "c0 a1 02 85 ee 75 08 95",
        "30 09 01 b1 02 c0 a1 02",
        "85 ef 75 08 95 30 09 01",
        "b1 02 c0 c0 00"
      ]
    },
    "input_ancestor" : {
      "sys_path" : "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:054C:0268.0009/input/input32",
      "name" : "PLAYSTATION(R)3 Controller",
      "bus_type" : "0x0005",
      "vendor_id" : "0x054c",
      "product_id" : "0x0268",
      "version" : "0x8000"
    }
  }
}

  • input-monitor: Always format evdev data in groups of 8 bytes

    Previously, we used 4-byte groups on i386, but this was inconsistent and (in my opinion) harder to read.

  • input-monitor: Don't add trailing spaces to the raw evdev bytes

  • glib-backports: Define autoptr free-function for GByteArray if needed

  • json-report: Allow evdev capabilities to be an array of lines

    This will let us output them in a more readable format.

  • input-monitor: Print raw_keys as multiple lines

    Reporting the keyboard capabilities like this:

        "raw_keys" : [
          "00 00 00 00 00 00 00 00",
          "00 00 00 00 00 00 00 00",
          "00 00 00 00 00 00 00 00",
          "00 00 00 00 00 00 00 00",
          "00 00 07 00 00 00 00 00",
          "00 00 00 00 00 00 00 00",
          "00 00 00 00 00 00 00 00",
          "00 00 00 00 00 00 00 00",
          "00 00 00 00 00 00 00 00",
          "00 00 00 00 00 00 00 00",
          "00 00 00 00 00 00 00 00",
          "00 00 00 00 00 00 00 00"
        ],

    is a lot more readable than one long string.

  • json-report: Allow commas and 0x prefixes in hex-dumps

    This will allow input-monitor to print hex-dumps in a format that can be pasted into SDL and steam-runtime-tools test data without significant editing.

  • input-monitor: Print hex-dumps in a format suitable for our evdev tests

  • input-monitor: Hex-dump raw evdev capabilities by default

    Now that we're using a more readable output format for these, we don't need to limit them to verbose mode. This gives us essentially the same information as evemu-describe(1), but without requiring Steam users to install additional tools.

    Because the pretty-printed version only shows known joystick/gamepad buttons and a few of the most common non-joystick keys, it can be misleading. For example, we wouldn't show the unassigned button code used by the 8BitDo SNES30 v0100 via Bluetooth as described in https://github.com/libsdl-org/SDL/pull/7791, or the multimedia control keyboard keys found on the Google Stadia Controller rev.A on the same pull request.

  • input-device, input-monitor: Add the raw HID report descriptor

    This is useful information for any heuristic for identifying different types of input device, because it is less ambiguous than the evdev interface. For example, the evdev interface cannot reliably tell the difference between a 3-axis accelerometer and a set of 3 driving-simulation pedals, because both are often reported as a device with the same three axes (X, Y, Z) and no buttons.

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • Simon McVittie marked this merge request as draft

    marked this merge request as draft

  • All changes seem reasonable to me.

  • Simon McVittie added 1 commit

    added 1 commit

    • 08d6281c - input-device, input-monitor: Add the raw HID report descriptor

    Compare with previous version

  • Simon McVittie marked this merge request as ready

    marked this merge request as ready

  • Simon McVittie resolved all threads

    resolved all threads

  • Simon McVittie enabled an automatic merge when the pipeline for 08d6281c succeeds

    enabled an automatic merge when the pipeline for 08d6281c succeeds

  • Simon McVittie mentioned in commit 8526ba65

    mentioned in commit 8526ba65

  • merged

  • Please register or sign in to reply
    Loading