kriomant/ch57x-keyboard-tool

v1.4.2 broken for 3x1-1 keyboard

Closed this issue · 10 comments

Hi,

I tried to upload a keys.yaml with v1.4.2. There was no output when running ch57x-keyboard-tool.
But also the keyboard mapping was not updated.

Tested with v1.2.0 which worked.

Currently running on Ubuntu 22.04.3 LTS

Same problem, same solution, but on Windows 10 Pro 22H2.

Had a quick look with Wireshark:

Running these commands:

./ch57x-keyboard-tool led 1
./ch57x-keyboard-tool led 0

I found that for the working v1.2.0 sends HID-Data as the following:
0000 03 a1 01 00 00 00 00 00 00 00 00 00 00 00 00 00

The broken v1.4.2 sends the following:
0000 aa a1 00 00 00 00 00 00 00 00 00 00 00 00 00 00

-> The broken does not send the starting 0x03.

Hacking the 0x03 in the HID-Data fixes LED for me.

diff --git a/src/keyboard/k8890.rs b/src/keyboard/k8890.rs
index 4c05b77..e6beef8 100644
--- a/src/keyboard/k8890.rs
+++ b/src/keyboard/k8890.rs
@@ -60,9 +60,9 @@ impl Keyboard for Keyboard8890 {
     }
 
     fn set_led(&mut self, n: u8) -> Result<()> {
-        self.send(&[0xa1, 0x01, 0, 0, 0, 0, 0, 0])?;
-        self.send(&[0xb0, 0x18, n, 0, 0, 0, 0, 0])?;
-        self.send(&[0xaa, 0xa1, 0, 0, 0, 0, 0, 0])?;
+        self.send(&[0x03, 0xa1, 0x01, 0, 0, 0, 0, 0, 0])?;
+        self.send(&[0x03, 0xb0, 0x18, n, 0, 0, 0, 0, 0])?;
+        self.send(&[0x03, 0xaa, 0xa1, 0, 0, 0, 0, 0, 0])?;
         Ok(())
     }
 

I had the same problem. I used 1.24, but it has another issue.

I have the knob set to volumeup on cw, volumedown on ccw.

The macro pad works fine initially, but any time I unplug it and plug it back in cw and ccw both trigger volumedown.

cw and ccw both trigger volumedown.

Works for me. I'm not sure if you also have a broken knob...

I was using a Windows box with 1.2.4 yesterday. I kept getting strange results with the knob.

I installed v1.2.0 on my Arch machine. I uploaded the config and it worked fine.

The latest version does not work on my 3x1+K macro pad.

I am experiencing the same issue with v1.4.2 on Windows 11. v1.2.0 works just fine but the latest version does not actually upload the config to the keyboard

Just to add, I have a 4x1 version (i.e. 4 keys, no knobs, such as this). v1.4.2 does not work, but v1.2.4 works just fine. I can map all 4 keys with this:

orientation: normal

rows: 1
columns: 4
knobs: 0

layers:
  - buttons:
      - ["volumedown", "volumeup", "mute", "play"]
    knobs:

Another happy customer, thanks @kriomant!

Same with 1 column, 3 rows, 1 knob device on Windows.

1.42 seemingly uploads but nothing is changed, 1.24 works fine.

DeviceID: USB\VID_1189&PID_8890\9&2798F80&0&2
ClassGuid: {36fc9e60-c465-11cf-8056-444553540000}
HardwareID: {USB\VID_1189&PID_8890&REV_0000, USB\VID_1189&PID_8890}

Attaching mapping yml and Wireshark captures as result of 'Get-Content mapping.yaml | .\ch57x-keyboard-tool.exe upload' for both versions.

captures.zip

mapping.zip

Please try 1.4.4

1.4.4 works for me, thanks!

Please try 1.4.4