#⌨️ 🎮🕹️🖱️USB Host HID test devices

1 messages · Page 2 of 1

deft iris
#

Rotation!

copper kraken
#

Checking 8bitdo buttons are detected correctly (not tried installing their software and messing yet, this is default)
and the button mapping is incorrect

you have uint8_t buttons2 = data[4]; which I don't have.

this puts the remaining bytes off by one
IE

- uint8_t lt = data[5];
+ uint8_t lt = data[4];
- uint8_t rt = data[6];
+ uint8_t rt = data[5];

and so on

Also found https://www.partsnotincluded.com/understanding-the-xbox-360-wired-controllers-usb-data/
"I’m using a genuine Microsoft Xbox 360 wired controller" which also lacks buttons2
(scroll down to the colored diagrams)
so not sure what's going on.

For me and partsnotincluded, the byte 2 contains both dpad and buttons2 data (whereas you are only getting dpad data from it)

deft iris
#

What is buttons2 data?

copper kraken
#

in xbox360_driver.h

   if (buttons2 != last_buttons2_) {
      if ((buttons2 & 0x10) && !(last_buttons2_ & 0x10))
        ESP_LOGI("usb_hidx.xbox360", "Button Start pressed");
      if ((buttons2 & 0x20) && !(last_buttons2_ & 0x20))
        ESP_LOGI("usb_hidx.xbox360", "Button Back pressed");
      if ((buttons2 & 0x40) && !(last_buttons2_ & 0x40))
        ESP_LOGI("usb_hidx.xbox360", "Button L-Stick pressed");
      if ((buttons2 & 0x80) && !(last_buttons2_ & 0x80))
        ESP_LOGI("usb_hidx.xbox360", "Button R-Stick pressed");
      last_buttons2_ = buttons2;
    }
#

the left half of byte 2 in partsnotincluded diagram

deft iris
#

So the top row keys don't work for you?

copper kraken
#

if you mean the top row in the diagram, the D pad buttons work for me. R3 L3 ◀ ▶ do not

#

plus lt, rt, lx, ly, rx, ry are wrong

deft iris
#

I wonder if it got messed up when I was configuring the drumset

copper kraken
#

So I managed to activate D-input mode plugging in the dongle to PC, setting the switch to 2.4G, then powering it on pressing Home+B

Not able to get D-input mode when plugging in directly (no dongle) tho.

#

same VID but PID is 0x6012 in D-input
Dongle with no controller connected is 0x6013
And X-input is 0x310B (same as plugging in directly)

deft iris
#

If you set esphome to generic gamepad does it see it?

copper kraken
#

I'll give it a test

#

even with

usb_hidx:
  hub: true
  id: usb_hidx_component
  gamepad:
    device_id: gamepad_main
    type: xbox360

it's spamming USB logs. And doesn't stop like it did in X-input

#

A is permanently pressed and B isn't detected tho

#

button sensors also don't work when type: generic
Here's some logs if you want 'em

#

Pressing and holding Home + Y from powered-off puts it in Nintendo Switch mode
Dongle connected to ESPHome

[I][usb_hidx:323]: USB device disconnected
[I][usb_hidx:343]: Device removed, 0 devices remaining
[D][usb_host:026]: Event flags 2X
[I][usb_hidx:096]: New USB device detected at address 6
[I][usb_hidx:131]: Device VID:PID = 057E:2009, Class=0x00
[I][usb_hidx:154]: Config: wTotalLength=41, bNumInterfaces=1
[I][usb_hidx:192]: Found HID interface, protocol 0, class 0x03
[I][usb_hidx:221]: Found interrupt IN endpoint: 0x84
[I][usb_hidx:224]: Found interrupt OUT endpoint: 0x05
[I][usb_hidx:269]: Attempting to match device (protocol=0, VID=057E, PID=2009) to 12 drivers
[D][usb_hidx:272]: Checking driver: Xbox360
[D][usb_hidx:272]: Checking driver: XboxOne
[D][usb_hidx:272]: Checking driver: PS4
[D][usb_hidx:272]: Checking driver: Steam
[D][usb_hidx:272]: Checking driver: Stadia
[D][usb_hidx:272]: Checking driver: Switch
[I][usb_hidx:275]: Matched device to Switch driver
[W][usb_hidx.switch:024]: Official Switch Pro controller detected
[W][usb_hidx.switch:025]: NOTE: Not supported on ESP32-S3 due to USB Host stack limitations
[W][usb_hidx.switch:026]: Use ESP32-P4 or third-party Switch controllers instead
[I][usb_hidx:312]: Device monitoring started (protocol 0)
#

nothing when I mash buttons

#

I have a P4

deft iris
#

You are running it on the P4?

copper kraken
#

no. ESP32-S3

deft iris
#

What does it do in playstation mode?

copper kraken
#

is that D-input mode?

deft iris
copper kraken
#

Booting with holding down A & X seem to be the standard X-input mode

deft iris
#

I thought PSC was playstation

copper kraken
#

Those combos don't work for me

deft iris
#

what version of the firmware did it update to ?

copper kraken
#

I haven't yet

deft iris
#

Let me know

copper kraken
#

Spent a while trying to get their app working on Wine based on posts linked in Reddit AI you linked.
Will try again when I have some more time.

It launches, but doesn't detect the controller regardless of mode I put it in, udev rules applied, registary setting, Wine Bottles via FlatPak, add permissions to the flatpak, Wine Bottles via NixPkgs.
Doesn't even start with plain Wine via NixPkgs, but I could try installing the dependencies it needs.

But next gonna try installing Steam to see what config options that has

deft iris
#

tell gemini to troubleshoot you through figuring out why your wine / udev rules aren't working

copper kraken
#

So I installed Steam & logged in 🚂
Steam input shows it plugged in X-Input mode as a generic controller
SteamSettings…ControllerTest layout
but the specific 8bitdo layout when connected in D-input mode over the dongle,
and shows the gyro too on another page 🙂🙃 🎉

#

Also added 8BitDo software via Games -> Add a Non-Steam Game to My Library…
Didn't launch
Then Manage -> Properties… -> Compatibility -> ✅ Force the use of a specific Steam Play compatibility tool Proton 10.0-4 (the biggest version)
And it launched and detected my controller when I plugged it in directly 🎉

Gamepad Present FW V1.06 (undated) V1.09 (2026-01-20) available
Dongle present FW V1.04 (2025-06-06) V1.06 (2025-09-22) available

#

RGB control works ❤️ 💚 💙
12 LEDs per joystick ring
No openRGB support so could try reverse engineering that

deft iris
deft iris
#

Does your P4 have a display?

#

were you just switching the mode in the steam software? Never found out if there was a button combo for that fw version?

deft iris
#

It's kind of strange I had all these hid devices working perfectly fine and now have basically had to get them all working from scratch again.

copper kraken
deft iris
#

I attempted to get IMU data with little success you have to enable it but I'm not sure if it sends it over USB

#

it shows the byte values for it but they are all zeros over usb

deft iris
copper kraken
deft iris
#

all this time I thought it was a speaker...
The Switch Pro Controller can produce audible, musical sounds similar to the Joy-Cons, though neither has actual speakers. Both controllers use precise "HD Rumble" motors to create vibrations that resonate as audible notes, most notably in games like Super Mario Bros. Wonder.

copper kraken
#

It's kinda a speaker I guess

deft iris
copper kraken
#

Sure. I've got a microphone and speaker I can hook up to it but no time immediately

deft iris
#

there is a weird glitch where it gets feedback on the mic when you have wifi enabled that is all comes across in the recording

deft iris
#

USB MCE IR Receiver + Remote 🙁

[16:28:04.829][W][component:505]: usb_host took a long time for an operation (310 ms), max is 30 ms
[16:28:04.832]E (18755965) USBH: Dev 0 EP 0 Error
[16:28:04.840][D][esp-idf:000]: E (18755965) ENUM: Bad transfer status 1: CHECK_SHORT_DEV_DESC
[16:28:04.846][D][esp-idf:000]: E (18755965) ENUM: [0:0] CHECK_SHORT_DEV_DESC FAILED
copper kraken
deft iris
#

You just turn the debug pipe feature on in HA

#
assist_pipeline:
  debug_recording_dir: /share/assist_pipeline
#

this dumps all your voice commands to whatever folder you want

#

If you turn off wifi and use ethernet the stream is clear as bell.

copper kraken
#

What about the ESPHome YAML?

deft iris
#

Woah it works! Almost tossed in the towel on that one...

[18:35:39.379][I][usb_hidx:116]: New USB device detected at address 1
[18:35:39.461][I][usb_hidx:154]: Device VID:PID = 1784:0006, Class=0x00
[18:35:39.467][I][usb_hidx:190]: Config: wTotalLength=32, bNumInterfaces=1
[18:35:39.472][I][usb_hidx:229]: Found HID interface, protocol 255, class 0xFF
[18:35:39.480][W][usb_hidx:272]: Fixing invalid bInterval=0 on OUT endpoint 0x01
[18:35:39.486][I][usb_hidx:276]: Found interrupt OUT endpoint: 0x01
[18:35:39.492][W][usb_hidx:265]: Fixing invalid bInterval=0 on IN endpoint 0x81
[18:35:39.500][I][usb_hidx:269]: Found interrupt IN endpoint: 0x81 (interval=1)
[18:35:39.508][I][usb_hidx:321]: Attempting to match device (protocol=255, VID=1784, PID=0006) to 15 drivers
[18:35:39.514][D][usb_hidx:324]: Checking driver: Keyboard
[18:35:39.517][D][usb_hidx:324]: Checking driver: Mouse
[18:35:39.522][D][usb_hidx:324]: Checking driver: Xbox360
[18:35:39.528][D][usb_hidx:324]: Checking driver: XboxOne
[18:35:39.530][D][usb_hidx:324]: Checking driver: PS4
[18:35:39.536][D][usb_hidx:324]: Checking driver: Steam
[18:35:39.542][D][usb_hidx:324]: Checking driver: Stadia
[18:35:39.544][D][usb_hE (4446) USBH: Dev 1 EP 0 STALL
[18:35:39.547]idx:324]: Checking driver: Switch
[18:35:39.553][D][usb_hidx:324]: Checking driver: Interact
[18:35:39.558][D][usb_hidx:324]: Checking driver: MCERemote
[18:35:39.564][I][usb_hidx:327]: Matched device to MCERemote driver
[18:35:39.569][I][usb_hidx.mce:054]: MCE IR Receiver detected, sending gen2 init
[18:35:39.578][I][usb_hidx:372]: Device monitoring started (protocol 255)
[18:35:39.585][W][component:505]: usb_hidx took a long time for an operation (211 ms), max is 30 ms
[18:35:39.627][W][usb_hidx:615]: LED command failed: 4
#

Sending IR command from green button remote:

[18:35:50.000][D][usb_hidx:521]: RAW: [81 B8]
[18:35:50.006][D][usb_hidx.mce:065]: MCE[2]: 81 B8 00 00 00 00 00 00
[18:35:50.008][D][usb_hidx:521]: RAW: [81 0F]
[18:35:50.014][D][usb_hidx.mce:065]: MCE[2]: 81 0F 00 00 00 00 00 00
[18:35:50.019][D][usb_hidx:521]: RAW: [8A 8B 07 8A 07 8B 10 8A 11 9C 10]
[18:35:50.028][D][usb_hidx.mce:065]: MCE[11]: 8A 8B 07 8A 07 8B 10 8A
[18:35:50.036][D][usb_hidx:521]: RAW: [92 8A 08 8A 07 8B 07 8A 08 8A 07 8B 07 8A 08 8A 07 8A 08]
[18:35:50.042][D][usb_hidx.mce:065]: MCE[19]: 92 8A 08 8A 07 8B 07 8A
[18:35:50.047][D][usb_hidx:521]: RAW: [90 8A 08 93 07 8A 08 8A 08 8A 08 89 11 8A 08 8A 07]
[18:35:50.053][D][usb_hidx.mce:065]: MCE[17]: 90 8A 08 93 07 8A 08 8A
[18:35:50.061][D][usb_hidx:521]: RAW: [8F 8A 08 93 11 89 08 8A 08 8A 08 89 08 8A 08 93]
[18:35:50.067][D][usb_hidx.mce:065]: MCE[16]: 8F 8A 08 93 11 89 08 8A
[18:35:50.072][D][usb_hidx:521]: RAW: [86 08 89 11 8A 08 8A]
[18:35:50.078][D][usb_hidx.mce:065]: MCE[7]: 86 08 89 11 8A 08 8A 00
[18:35:50.083][D][usb_hidx:521]: RAW: [82 7F 7F]
[18:35:50.089][D][usb_hidx.mce:065]: MCE[3]: 82 7F 7F 00 00 00 00 00
[18:35:50.092][D][usb_hidx:521]: RAW: [81 7F]
[18:35:50.097][D][usb_hidx.mce:065]: MCE[2]: 81 7F 00 00 00 00 00 00
[18:35:50.100][D][usb_hidx:521]: RAW: [82 7F 7F]
[18:35:50.105][D][usb_hidx.mce:065]: MCE[3]: 82 7F 7F 00 00 00 00 00
[18:35:50.111][D][usb_hidx:521]: RAW: [81 7F]
[18:35:50.117][D][usb_hidx.mce:065]: MCE[2]: 81 7F 00 00 00 00 00 00
[18:35:50.119][D][usb_hidx:521]: RAW: [82 7F 7F]
[18:35:50.125][D][usb_hidx.mce:065]: MCE[3]: 82 7F 7F 00 00 00 00 00
[18:35:50.130][D][usb_hidx:521]: RAW: [81 7F]
[18:35:50.136][D][usb_hidx.mce:065]: MCE[2]: 81 7F 00 00 00 00 00 00
[18:35:50.139][D][usb_hidx:521]: RAW: [82 7F 7F]
[18:35:50.144][D][usb_hidx.mce:065]: MCE[3]: 82 7F 7F 00 00 00 00 00
[18:35:50.150][D][usb_hidx:521]: RAW: [82 7F 7F]
[18:35:50.155][D][usb_hidx.mce:065]: MCE[3]: 82 7F 7F 00 00 00 00 00
#
[18:35:50.158][D][usb_hidx:521]: RAW: [81 7F]
[18:35:50.164][D][usb_hidx.mce:065]: MCE[2]: 81 7F 00 00 00 00 00 00
[18:35:50.169][D][usb_hidx:521]: RAW: [82 7F 5F 80]
[18:35:50.175][D][usb_hidx.mce:065]: MCE[4]: 82 7F 5F 80 00 00 00 00
[18:35:50.181][I][usb_hidx.mce:197]: RC6 key: 7 (addr=0x40 cmd=0x07)
#

(USB IR Receiver)

had some weird start up method to get the interface recognised 😐

deft iris
deft iris
#

Let me know how it explodes git should be updated now for the xbox360 for your 8bitdo

#

It should auto swap if you unplug the remote then plug in a keyboard or mouse etc

#

or switch controller mode

#

Failed getting the PS3 sixaxis remote working again

#

The generic remote I have is mega old logitech dual action and just endlessly spams no idea what it is doing.

#

Give adding devices a break for now and see if I can use the component for the gameboy emulator

#

Or try to detect a usb sound card which maybe more in your realm with your rad device

copper kraken
#

with

usb_hidx:
  hub: true
  id: usb_hidx_component
  gamepad:
    device_id: gamepad_main
    type: generic
#

is

binary_sensor:
  - platform: usb_hidx
    id: gamepad_a_button
    name: "Gamepad A"
    usb_hidx_id: usb_hidx_component
    type: gamepad
    button_a: true
  - platform: usb_hidx
    id: gamepad_b_button
    name: "Gamepad B"
    usb_hidx_id: usb_hidx_component
    type: gamepad
    button_b: true

still how it's done?
Edit: fix tru typo

deft iris
#

I should learn by now to test git after upload one moment

deft iris
#
external_components:
  source: github://NonaSuomy/esphome@hidx-testing-002
  components:
    - usb_hidx
  refresh: always

usb_host:
  enable_hubs: true

usb_hidx:
  hub: true
  id: usb_hidx_component
  gamepad:
    device_id: gamepad_main
    type: xbox360

binary_sensor:
  - platform: usb_hidx
    id: gamepad_a_button
    name: "Gamepad A"
    usb_hidx_id: usb_hidx_component
    type: gamepad
    button_a: true
    on_press:
      - lambda: 'id(usb_hidx_component).send_xbox360_rumble(255, 0);'
    on_release:
      - lambda: 'id(usb_hidx_component).send_xbox360_rumble(0, 0);'
  - platform: usb_hidx
    id: gamepad_b_button
    name: "Gamepad B"
    usb_hidx_id: usb_hidx_component
    type: gamepad
    button_b: true
    on_press:
      - lambda: 'id(usb_hidx_component).send_xbox360_rumble(0, 255);'
    on_release:
      - lambda: 'id(usb_hidx_component).send_xbox360_rumble(0, 0);'

button:
  - platform: template
    name: "Rumble"
    on_press:
      lambda: 'id(usb_hidx_component).send_xbox360_rumble(0, 255);'

deft iris
copper kraken
#

copy-paste error. original is fine (sorry!)

#

Confirmed validation catches that typo

deft iris
#

so it works or it still explodes?

#

I think you said the other buttons were not working they should all register now

copper kraken
#

Was doing something else. Retrying now

deft iris
#
binary_sensor:
  - platform: usb_hidx
    type: gamepad
    name: "GP A"
    id: gp_btn_a
    internal: true
    button_a: true
    on_press:
      - lvgl.label.update: {id: gp_a, text_color: 0x00FF00}
    on_release:
      - lvgl.label.update: {id: gp_a, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP B"
    id: gp_btn_b
    internal: true
    button_b: true
    on_press:
      - lvgl.label.update: {id: gp_b, text_color: 0xFF2200}
    on_release:
      - lvgl.label.update: {id: gp_b, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP X"
    id: gp_btn_x
    internal: true
    button_x: true
    on_press:
      - lvgl.label.update: {id: gp_y, text_color: 0x0088FF}
    on_release:
      - lvgl.label.update: {id: gp_y, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP Y"
    id: gp_btn_y
    internal: true
    button_y: true
    on_press:
      - lvgl.label.update: {id: gp_x, text_color: 0xFFFF00}
    on_release:
      - lvgl.label.update: {id: gp_x, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP LB"
    id: gp_btn_l
    internal: true
    button_l: true
    on_press:
      - lvgl.label.update: {id: gp_l, text_color: 0x00D4FF}
      - lambda: lv_obj_set_style_bg_color(id(gp_lb_fill), lv_color_hex(0x00D4FF), LV_PART_MAIN);
    on_release:
      - lvgl.label.update: {id: gp_l, text_color: 0x444444}
      - lambda: lv_obj_set_style_bg_color(id(gp_lb_fill), lv_color_hex(0x222222), LV_PART_MAIN);

  - platform: usb_hidx
    type: gamepad
    name: "GP RB"
    id: gp_btn_r
    internal: true
    button_r: true
    on_press:
      - lvgl.label.update: {id: gp_r, text_color: 0x00D4FF}
      - lambda: lv_obj_set_style_bg_color(id(gp_rb_fill), lv_color_hex(0x00D4FF), LV_PART_MAIN);
    on_release:
      - lvgl.label.update: {id: gp_r, text_color: 0x444444}
      - lambda: lv_obj_set_style_bg_color(id(gp_rb_fill), lv_color_hex(0x222222), LV_PART_MAIN);
#
  - platform: usb_hidx
    type: gamepad
    name: "GP LT"
    id: gp_btn_zl
    internal: true
    button_zl: true
    on_press:
      - lvgl.label.update: {id: gp_zl, text_color: 0x00D4FF}
      - lambda: lv_bar_set_value(id(gp_lt_bar), 100, LV_ANIM_OFF);
    on_release:
      - lvgl.label.update: {id: gp_zl, text_color: 0x444444}
      - lambda: lv_bar_set_value(id(gp_lt_bar), 0, LV_ANIM_OFF);

  - platform: usb_hidx
    type: gamepad
    name: "GP RT"
    id: gp_btn_zr
    internal: true
    button_zr: true
    on_press:
      - lvgl.label.update: {id: gp_zr, text_color: 0x00D4FF}
      - lambda: lv_bar_set_value(id(gp_rt_bar), 100, LV_ANIM_OFF);
    on_release:
      - lvgl.label.update: {id: gp_zr, text_color: 0x444444}
      - lambda: lv_bar_set_value(id(gp_rt_bar), 0, LV_ANIM_OFF);

  - platform: usb_hidx
    type: gamepad
    name: "GP Minus"
    id: gp_btn_minus
    internal: true
    button_minus: true
    on_press:
      - lvgl.label.update: {id: gp_minus, text_color: 0x00D4FF}
    on_release:
      - lvgl.label.update: {id: gp_minus, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP Plus"
    id: gp_btn_plus
    internal: true
    button_plus: true
    on_press:
      - lvgl.label.update: {id: gp_plus, text_color: 0x00D4FF}
    on_release:
      - lvgl.label.update: {id: gp_plus, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP Home"
    id: gp_btn_home
    internal: true
    button_home: true
    on_press:
      - lvgl.label.update: {id: gp_home, text_color: 0x00D4FF}
    on_release:
      - lvgl.label.update: {id: gp_home, text_color: 0x444444}
#
  - platform: usb_hidx
    type: gamepad
    name: "GP L3"
    id: gp_btn_l3
    internal: true
    button_l3: true
    on_press:
      - lvgl.label.update: {id: gp_l3, text_color: 0x00D4FF}
    on_release:
      - lvgl.label.update: {id: gp_l3, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP R3"
    id: gp_btn_r3
    internal: true
    button_r3: true
    on_press:
      - lvgl.label.update: {id: gp_r3, text_color: 0x00D4FF}
    on_release:
      - lvgl.label.update: {id: gp_r3, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP D-Up"
    id: gp_dpad_up
    internal: true
    dpad_up: true
    on_press:
      - lvgl.label.update: {id: gp_dup, text_color: 0x00D4FF}
    on_release:
      - lvgl.label.update: {id: gp_dup, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP D-Down"
    id: gp_dpad_down
    internal: true
    dpad_down: true
    on_press:
      - lvgl.label.update: {id: gp_ddown, text_color: 0x00D4FF}
    on_release:
      - lvgl.label.update: {id: gp_ddown, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP D-Left"
    id: gp_dpad_left
    internal: true
    dpad_left: true
    on_press:
      - lvgl.label.update: {id: gp_dleft, text_color: 0x00D4FF}
    on_release:
      - lvgl.label.update: {id: gp_dleft, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP D-Right"
    id: gp_dpad_right
    internal: true
    dpad_right: true
    on_press:
      - lvgl.label.update: {id: gp_dright, text_color: 0x00D4FF}
    on_release:
      - lvgl.label.update: {id: gp_dright, text_color: 0x444444}

  - platform: usb_hidx
    type: gamepad
    name: "GP Capture"
    id: gp_btn_capture
    internal: true
    button_capture: true
    on_press:
      - lvgl.label.update: {id: gp_capture, text_color: 0x00D4FF}
    on_release:
      - lvgl.label.update: {id: gp_capture, text_color: 0x444444}
#
sensor:
  - platform: usb_hidx
    type: gamepad
    axis: lx
    id: gp_axis_lx
    name: "Gamepad Left X"
    internal: true
    on_value:
      - lambda: |-
          id(l_stick_x) = x;
          lv_obj_set_pos(id(gp_l_dot), 249 + (int)(id(l_stick_x) * 0.41f), 211 - (int)(id(l_stick_y) * 0.41f));

  - platform: usb_hidx
    type: gamepad
    axis: ly
    id: gp_axis_ly
    name: "Gamepad Left Y"
    internal: true
    on_value:
      - lambda: |-
          id(l_stick_y) = x;
          lv_obj_set_pos(id(gp_l_dot), 249 + (int)(id(l_stick_x) * 0.41f), 211 - (int)(id(l_stick_y) * 0.41f));

  - platform: usb_hidx
    type: gamepad
    axis: rx
    id: gp_axis_rx
    name: "Gamepad Right X"
    internal: true
    on_value:
      - lambda: |-
          id(r_stick_x) = x;
          lv_obj_set_pos(id(gp_r_dot), 647 + (int)(id(r_stick_x) * 0.41f), 331 - (int)(id(r_stick_y) * 0.41f));

  - platform: usb_hidx
    type: gamepad
    axis: ry
    id: gp_axis_ry
    name: "Gamepad Right Y"
    internal: true
    on_value:
      - lambda: |-
          id(r_stick_y) = x;
          lv_obj_set_pos(id(gp_r_dot), 647 + (int)(id(r_stick_x) * 0.41f), 331 - (int)(id(r_stick_y) * 0.41f));
copper kraken
deft iris
#

failed with what?

#

duplicate keys?

copper kraken
#

same as before

/data/external_components/e4e2b203/esphome/components/usb_hidx/devices/generic_gamepad/generic_gamepad_driver.h:456:18: error: 'class esphome::usb_hidx::USBHIDXComponent' has no member named 'get_gamepad_left_stick_x_sensor'
  456 |     if (parent_->get_gamepad_left_stick_x_sensor())  parent_->get_gamepad_left_stick_x_sensor()->publish_state(scale(data[2]));
      |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

and so on

deft iris
#

working on it

#

Were you running from local before?

copper kraken
#

Haven't switched away from hidx-testing-002 branch since originally switching to it

#

You want me to try a clean build files?

deft iris
#

Change refresh: always

#

be a few mins to fix

copper kraken
#

Just tried again and same error #1430809698407284840 message
(diff of that and the full log this time)

0a1,18
+ INFO ESPHome 2026.3.3
+ INFO Reading configuration /config/esphome/s3-usb.yaml...
+ INFO Updating https://github.com/NonaSuomy/esphome.git@hidx-testing-002
+ INFO Generating C++ source...
+ INFO Compiling app... Build path: /data/build/s3-usb
+ Processing s3-usb (board: lolin_s3; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32/releases/download/55.03.37/platform-espressif32.zip)
+ --------------------------------------------------------------------------------
+ HARDWARE: ESP32S3 240MHz, 320KB RAM, 4MB Flash
+  - contrib-piohome @ 3.4.4 
+  - framework-espidf @ 3.50503.0 (5.5.3) 
+  - tool-cmake @ 4.0.3 
+  - tool-esp-rom-elfs @ 2024.10.11 
+  - tool-esptoolpy @ 5.1.2 
+  - tool-ninja @ 1.13.1 
+  - tool-scons @ 4.40801.0 (4.8.1) 
+  - toolchain-xtensa-esp-elf @ 14.2.0+20251107
+ Reading CMake configuration...
+ No dependencies
2,4c20,22
- Compiling .pioenvs/s3-usb/src/esphome/components/usb_host/usb_host_client.cpp.o
- Compiling .pioenvs/s3-usb/src/esphome/components/usb_host/usb_host_component.cpp.o
- Compiling .pioenvs/s3-usb/src/esphome/components/web_server/list_entities.cpp.o
---
+ Compiling .pioenvs/s3-usb/src/esphome/components/wifi/wifi_component_esp_idf.cpp.o
+ Compiling .pioenvs/s3-usb/src/esphome/core/application.cpp.o
+ Compiling .pioenvs/s3-usb/src/esphome/core/color.cpp.o
141c159
- ========================= [FAILED] Took 232.80 seconds =========================
---
+ ========================= [FAILED] Took 43.47 seconds =========================
deft iris
#

Next up 27 years of history

unkempt gust
#

that fluke is pricy 🫣

deft iris
#

Fluke 196C Scopemeter Color 100MHz 1GS/s I got it for free with a dead battery

#

I was going to build an optical cable for it for fun

#

Lucky they don't turn on when the battery is toast so they thought it was only good for parts. Just pulled the battery out and it worked fine 😄

topaz haven
unkempt gust
#

yea, on ebay are some "not working / for parts" for an insane price

deft iris
#

I think it has some weird protection relay in it as it clicked multiple times. When it had the battery in it. Then I pulled it out it still didn't power up, but then I forgot about it left it plugged in and on. Came back a few moments later and the screen was up and running fine. So from that point of view it probably seemed toast. If someone just did a quick on check.

#

Maybe once the battery is dead and you remove it. The protection circuit or ptc needs some time to sit there for a while to re-engage

#

Or that clicking sound relay was ceased then randomly open again

deft iris
#

The force is strong in this one! 🤩 you can see the amp gauge go up when you fight the wheel!

torn hare
deft iris
#

Can you move your post to the right thread?

deft iris
#

Found out why the buttons were not working! Huge stress fracture right across the board!

deft iris
#

Not sure if the one pad will work very well but I’ll guess we will see

topaz haven
#

if u have, put some soldrmask over the respective repaired traces - helps a lot to not get undesired "sudden" triggering on these - been dealing with lots of ps4 controllers lately, had also some with tracerepair required ..

copper kraken
deft iris
#

Buttons that were working before are not now so probably the code. Timing of pusles is probably off

copper kraken
#

Tried to use consumer_codes.h as a reference to send zoom in and out codes (with the ESPHome PR I found the other day), but they didn't work.

Checking the latest USB spec you're missing a byte.
IE you match 2D to "Zoom In" when the spec says 22D.
22D is the only non-reserved code ending 2D, so should be fine for reading, but seems like good practice to match exactly.
Same for "Zoom out".

#

Looking through other codes now and it does make a difference with many

copper kraken
#

So

case|return          |close enough|spec name|spec usage type|
----|----------------|------------|---------|---------------|
Media control
0xE9|Volume Up       |✅|Volume Increment   |RTC|
  EA|Volume Down     |✅|Volume Decrement   |RTC|
  E2|Mute            |🟰|                   |OOC|
  CD|Play/Pause      |🟰|                   |OSC|
  B5|Next Track      |✅|Scan Next Track    |OSC|
  B6|Previous Track  |✅|Scan Previous Track|OSC|
  B7|Stop            |🟰|                   |OSC|
Browser control
  83|Media           |❓|Recall Last        |OSC|
  B3|Fast Forward    |🟰|                   |OOC|
  B4|Rewind          |🟰|                   |OOC|
Zoom
  95|Help            |🟰|                   |OOC|

are correct.
❓ = "Returns to the last selected channel or mode" which could be media

#
case|return          |spec name      |usage type|correction prepend|
----|----------------|---------------|----------|------------------|
Application launch
0x8A|Mail            |Media Select WWW      |Sel|1|
  92|Calculator      |Media Select VCR      |Sel|1|
  94|My Computer     |Quit                  |OSC|1|
Browser control
  23|WWW Home        |*Reserved*            |   |2|
  21|WWW Search      |+100                  |OSC|2|
  24|WWW Back        |*Reserved*            |   |2|
  25|WWW Forward     |*Reserved*            |   |2|
  82|Favourites      |Mode Step             |OSC|(182 is AL Programmable Button Configuration)|
  86|Internet Browser|Channel               | LC|(196 is internet browser, 186 would be spreadsheet)|
Zoom
  2D|Zoom In         |*Reserved*            |   |2|
  2E|Zoom Out        |*Reserved*            |   |2|
Microsoft keyboard F-Lock keys
  1A|Undo            |*Reserved*            |   |2|
  79|Redo            |Keyboard Brightness Increment|OSC|2|
  89|Reply           |Media Select TV       |sel|2|
  8B|Forward Mail    |Media Select DVD      |sel|2|
  8C|Send Mail       |Media Select Telephone|sel|2|

are not

#

There's a lot of specific consumer codes

#

0x223,221,224,225 aren't designed to be specific to a web browser

15.16 Generic GUI Application Controls
With the exception of controls specifically assigned with a configuration tool, these controls apply their functions to
the application that has the user focus. Operation when no application has the user focus, when user focus cannot be
determined, or when the user focus is not unique, is undefined.
The spec calls them AC (Application control) instead of WWW
I'd be inclined to not prepend them, or prepend them with App instead

deft iris
#

These are the two keyboards I used to decipher the consumer keys

Logitech K400r

#

Microsoft Natural Ergonomic Keyboard 4000

#

There is some report layer that I had to read to make most of the keys work forget what it was called

copper kraken
#

Logitech has what you call Mute Volume Up Volume Down WWW Home
Assume what looks like a 1D joystick in the middle of the MS keyboard is Zoom In Zoom Out?
And the < > below it are WWW Back & WWW Forward?

But I don't see Next Track Previous Track Stop Media Fast Forward Rewind?

#

The MS keyboard looks like it has several that aren't listed (F4–F6 F10–F12 1–5)?

deft iris
#

Seems I had the wrong picture that is the K400 above the K400r has those keys

#

top row you can see them in white then f-keys in blue

#

Yeah in the middle of the ms 4000 there is a zoom slider and yes it zooms in/out

#

Those 5 buttons at the top I think were hard to figure out

#

some are also macro keys that send two presses of two different buttons, I forget what I called the 1-5 buttons

#

Think they were called my favourites

copper kraken
#

Based on superuser, 1–5 are Favourites buttons, and possibly ⭐ is related to assigning them, based on 0x182 being called “AL Programmable Button Configuration”

#

Ohhh, I see, keyboard_driver.h has some more consumer codes