Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The List #1

Closed
Sainan opened this issue Oct 6, 2023 · 49 comments
Closed

The List #1

Sainan opened this issue Oct 6, 2023 · 49 comments

Comments

@Sainan
Copy link
Member

Sainan commented Oct 6, 2023

Keyboards with a usable analogue interface

  • Wooting
  • Razer (Synapse must be installed and running)
    • Razer Huntsman V2 Analog
    • Razer Huntsman Mini Analog
    • Razer Huntsman V3 Pro
    • Razer Huntsman V3 Pro Mini
    • Razer Huntsman V3 Pro Tenkeyless
  • NuPhy (Personally only tested Field75 HE, but all should work.)
  • DrunkDeer (Personally only tested A75, but all should work.)
  • Keychron
  • Madlions (Personally only tested MAD60HE, but all should work.)

Keyboards that could possibly have a usable analogue interface

Keyboard without a usable analogue interface


If your keyboard is not mentioned here, feel free to open a new issue or post a comment here.

@Sainan Sainan pinned this issue Oct 6, 2023
@Sainan Sainan closed this as completed Oct 6, 2023
@MF-JEWM
Copy link

MF-JEWM commented Jul 17, 2024

Is there potential of adding support for Keychron Q1 HE?

@Sainan
Copy link
Member Author

Sainan commented Jul 17, 2024

Hmm, does look promising with the "Keychron Launcher", but it only being able to display 1 analogue value may mean they didn't bother implementing a full interface.

@MF-JEWM
Copy link

MF-JEWM commented Jul 17, 2024

hmm well within the Gamepad Analog tab of Keychron Launcher there is a feature called Joystick Effect Demo and it is able to do both left and right joystick smoothly at the same time. does that mean it might be able to display more than 1 value and currently its purely just a visual limitation of the launcher's UI and not the keyboard itself?

@Sainan
Copy link
Member Author

Sainan commented Jul 17, 2024

I don't know. I don't own this keyboard. I guess I'll buy one and try it.

@Sainan
Copy link
Member Author

Sainan commented Jul 29, 2024

@MF-JEWM I've just published universal-analog-plugin version 0.2.2 which features support for the Keychron Q1 HE. I was unfortunately only able to poll analogue values from the keyboard, so compromises had to be made, but I think it's still decently usable. Might be able to do more on this front once they open-source the firmware.

@MF-JEWM
Copy link

MF-JEWM commented Aug 1, 2024

@Sainan I am also really hoping they eventually open-source the firmware for this board. Maybe once things get sorted out with the feature that Razer and Wooting are currently adding to their boards as it appears that feature is currently being pushed to QMK as a whole.

Thanks again for still taking a look at how to integrate the use board 😄

@CaelTheColher
Copy link

Can you look into the Madlions 60HE?

@Sainan
Copy link
Member Author

Sainan commented Nov 29, 2024

@CaelTheColher Do you own this keyboard? If so, could you check if the "web driver" has any visualisation that shows how far you are pressing your keys?

@CaelTheColher
Copy link

There is a calibration setting that does show how far each key is being pressed

@Sainan
Copy link
Member Author

Sainan commented Nov 29, 2024

Hmm, does the calibration mode disable digital input?

@CaelTheColher
Copy link

yes, but after saying that I realised that there is also an option that just shows it as a number and doesnt disable inputs
image

@CaelTheColher
Copy link

I'm pretty sure the small number below each key is how far down it is being pressed in mm (in the image I'm fully pressing H and lightly pressing F and G), but no idea about the number on the top

@Sainan
Copy link
Member Author

Sainan commented Nov 29, 2024

Hmm, okay. Looks like it's the travel distance in mm.

@Nathan22211
Copy link

what about the hunstman V3? I have one but I'm a linux user so I can't use synapse. wether or not the wooting plugin works without synapse on linux, as wooting supports Linux, I'm not sure of

@Sainan
Copy link
Member Author

Sainan commented Nov 30, 2024

@Nathan22211 I did look into Razer on Linux, but I think the blocking factor there is lack of analogue keyboard support by the OpenRazer driver because afaict, these keyboards report input either in a digital or analogue format, so when they're switched into the mode where they do report analogue input, they need a driver to synthesise the digital input.

@Sainan
Copy link
Member Author

Sainan commented Dec 12, 2024

@CaelTheColher Are you sure about that? It looks to me like the travel distance is only being reported during the calibration process, as it justs shows 0.0 otherwise. At least on firmware version 1.03.

@Sainan
Copy link
Member Author

Sainan commented Dec 12, 2024

@CaelTheColher Well, I did end up managing to figure it out. There is indeed a separate report being used to poll the state. So, I ended up managing to support it by using that. Pretty meh tho because it's really not the greatest way to grab the keyboard state.

@CaelTheColher
Copy link

I think they updated the web driver it broke the display because now its only showing 0.0 for me too

@CaelTheColher
Copy link

Since the mad68 isn't supported yet and I don't expect you to buy it just for this, is there anything I can do to help you add support for it?

@Sainan
Copy link
Member Author

Sainan commented Dec 12, 2024

@CaelTheColher Sure, I think the easiest way would be for you to clone/download https://github.com/AnalogSense/JavaScript-SDK and open the demo.html locally, then try to mess around in the AnalogSense.js, currently after line 700:

  • Remove the productId from the filters so your keyboard can be selected
  • Mess around with the layout so every key is correctly detected
    • You will notice it's currently 14 keys wide per line/row.

Once you have the correct layout, send it my way.

@CaelTheColher
Copy link

@Sainan

const layout = [
            /*  0 */ KEY_ESCAPE,    KEY_1,     KEY_2,    KEY_3,    KEY_4,    KEY_5,    KEY_6,     KEY_7,    KEY_8,    KEY_9,     KEY_0,         KEY_MINUS,        KEY_EQUALS,        KEY_BACKSPACE,  KEY_INSERT,
            /* 14 */ KEY_TAB,       KEY_Q,     KEY_W,    KEY_E,    KEY_R,    KEY_T,    KEY_Y,     KEY_U,    KEY_I,    KEY_O,     KEY_P,         KEY_BRACKET_LEFT, KEY_BRACKET_RIGHT, KEY_BACKSLASH,  KEY_DEL,
            /* 28 */ KEY_CAPS_LOCK, KEY_A,     KEY_S,    KEY_D,    KEY_F,    KEY_G,    KEY_H,     KEY_J,    KEY_K,    KEY_L,     KEY_SEMICOLON, KEY_QUOTE,        KEY_NONE,          KEY_ENTER,      KEY_PAGE_UP,
            /* 42 */ KEY_LSHIFT,    KEY_NONE,  KEY_Z,    KEY_X,    KEY_C,    KEY_V,    KEY_B,     KEY_N,    KEY_M,    KEY_COMMA, KEY_PERIOD,    KEY_SLASH,        KEY_RSHIFT,        KEY_ARROW_UP,   KEY_PAGE_DOWN,
            /* 56 */ KEY_LCTRL,     KEY_LMETA, KEY_LALT, KEY_NONE, KEY_NONE, KEY_NONE, KEY_SPACE, KEY_NONE, KEY_NONE, KEY_RALT,  KEY_FN,        KEY_RCTRL,        KEY_ARROW_LEFT,    KEY_ARROW_DOWN, KEY_ARROW_RIGHT
        ];

This seems to be the correct layout

@CaelTheColher
Copy link

CaelTheColher commented Dec 12, 2024

I didn't update the comments because I forgot, but its now 15 keys per row

@Sainan
Copy link
Member Author

Sainan commented Dec 12, 2024

@CaelTheColher Thank you! I've added support for the MAD68HE to everything.

@mksheffey
Copy link

mksheffey commented Dec 22, 2024

Can you look into adding the GMMK PRO 3 HE, if it's even at all possible? If there is anything I can do to help, please let me know. Thanks

@Sainan
Copy link
Member Author

Sainan commented Dec 22, 2024

@mksheffey If you own this keyboard, could you check the companion software if there's anywhere it does show how far you are pressing your keys?

@mksheffey
Copy link

Of course, I have just checked and the software only shows a cursor displaying how far any key is being pressed down. It doesn't list a numerical value. Here is a ss of the terrible software :( Here is the imgur link : https://imgur.com/4zUmxZR

@Sainan
Copy link
Member Author

Sainan commented Dec 22, 2024

@mksheffey Okay, that's interesting. While you're in that view, could you try going to https://analogsense.org/webhid-input-report-logger/ and seeing what gets logged as you press keys? That might indicate if the format supports multiple keys.

@mksheffey
Copy link

@Sainan After doing so alotta random numbers are showing up on the webpage. When pressing one key, almost 6 or 7 numbers show afterwards.

@Sainan
Copy link
Member Author

Sainan commented Dec 22, 2024

Haha, great. Could you press, for example A, then D while still holding down A, and then give me the log?

@mksheffey
Copy link

@Sainan Here goes.
GMMK PRO 3 HE A& D.txt

@Sainan
Copy link
Member Author

Sainan commented Dec 22, 2024

Yeah, that does unfortunately look like it doesn't say which key is being pressed, only how far. The report format seems identical to Keydous.

@mksheffey
Copy link

Aww dang, thats unfortunate. Well thanks for helping out.

@hadono1
Copy link

hadono1 commented Mar 1, 2025

Hello! Is it possible to add support for the Attack Shark x65he?
Seeing what you've asked others above, I'll provide that info for this keeb too.
Firstly, there is an option in the driver to view how far the key is being pressed, but not as a numerical value, only visual. Also, it says that the keyboard may not work until that option is disabled, but that isn't the case at all, digital inputs still work while it is enabled. https://imgur.com/a/nuq7FBR
On the website https://analogsense.org/webhid-input-report-logger/ , here's the input I got when pressing a, s, d, then releasing them in the same order: ASx65he inputs.txt

@Sainan
Copy link
Member Author

Sainan commented Mar 1, 2025

That report format does look familiar. It's the same as what we've observed with Keydous and Glorious, which is unfortunately not conducive to usage for analog input.

@hadono1
Copy link

hadono1 commented Mar 1, 2025

Are you sure? The integers have a different format for different keys ('a' has that 09 meanwhile 's' has that 0f, they also work independently of which one is pressed further(unlike the pro x tkl). There's just a lot more inputs per keypress compared to the GMMK PRO 3 HE (probably because of the higher scanrate? Idk about the GMMK but AS has a 128k scan rate on this keeb)
Edit: added the scanrate info

@Sainan
Copy link
Member Author

Sainan commented Mar 1, 2025

Well, the mapping of the keys is irrelevant. The report has the same 1B prefix and it also only contains a single key. It doesn't matter if that key is the furthest pressed or whatever. The important factor is that you can only have an analogue reading of a singular key.

@hadono1
Copy link

hadono1 commented Mar 1, 2025

How does it look for multiple keys? I am genuinely curious.

@Sainan
Copy link
Member Author

Sainan commented Mar 1, 2025

When you press multiple keys, the analogue report only contains a single key. That's the problem.

@hadono1
Copy link

hadono1 commented Mar 1, 2025

so it's supposed to contain data about both keypresses in the same integer value?

@hadono1
Copy link

hadono1 commented Mar 1, 2025

Nvm, after taking a look at keydous-analogue-reports.cpp, now I get what you're saying. Thanks anyway for confirming that this keeb ain't gon work unfortunately.

@Azarattum
Copy link

@Sainan, would it be difficult to support the new Keychron Lemokey P1 HE? Official firmware support was added here Keychron/qmk_firmware@b21fc4a. The analog_matrix.c looks similar to Keychron Q series.

@Azarattum
Copy link

I've figured out the layout and copied the vendor/product ID from the firmware. Here is my PR for JS SDK AnalogSense/JavaScript-SDK#5

@Azarattum
Copy link

@Sainan sorry to nudge you, but could with release a build (just Linux and Windows for now) with the recent Lemokey changes, so I can test it out?

@Sainan
Copy link
Member Author

Sainan commented Mar 13, 2025

@Azarattum If Windows is okay, then I can offer you this: Windows.zip

@Azarattum
Copy link

Yeah Windows is okay, thank you!

@Azarattum
Copy link

@Sainan, wooting-analog-sdk seem to freeze in an infinite loop when using the universal-analog-plugin with the keyboard connected. I've tested with wooting-analog-midi and Cyberpunk, both freeze even before the window is open. Analyzing USB traffic with wireshark, you can see that the SDK asks for the version, keyboard answers, then nothing...

host -> keyboard:

0000   1b 00 10 30 73 89 8f b5 ff ff 00 00 00 00 09 00   ...0s...........
0010   00 08 00 03 00 02 01 20 00 00 00 a9 01 00 00 00   ....... ........
0020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0030   00 00 00 00 00 00 00 00 00 00 00                  ...........

0000   1b 00 10 30 73 89 8f b5 ff ff 00 00 00 00 09 00   ...0s...........
0010   01 08 00 03 00 02 01 00 00 00 00                  ...........

keyboard -> host:

0000   1b 00 10 d0 3a 8b 8f b5 ff ff 00 00 00 00 09 00   ....:...........
0010   01 08 00 03 00 82 01 20 00 00 00 a9 01 04 00 00   ....... ........
0020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0030   00 00 00 00 00 00 00 00 00 00 45                  ..........E

0000   1b 00 10 d0 3a 8b 8f b5 ff ff 00 00 00 00 09 00   ....:...........
0010   00 08 00 03 00 82 01 00 00 00 00                  ...........

Web demo works fine, here are the same version packets from it:
host -> keyboard:

0000   1b 00 20 ba de 8e 8f b5 ff ff 00 00 00 00 09 00   .. .............
0010   00 08 00 03 00 02 01 20 00 00 00 a9 01 00 00 00   ....... ........
0020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0030   00 00 00 00 00 00 00 00 00 00 00                  ...........

0000   1b 00 20 ba de 8e 8f b5 ff ff 00 00 00 00 09 00   .. .............
0010   01 08 00 03 00 02 01 00 00 00 00                  ...........

keyboard -> host:

0000   1b 00 a0 05 51 88 8f b5 ff ff 00 00 00 00 09 00   ....Q...........
0010   01 08 00 03 00 82 01 20 00 00 00 a9 01 04 00 00   ....... ........
0020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0030   00 00 00 00 00 00 00 00 00 00 45                  ..........E

0000   1b 00 a0 05 51 88 8f b5 ff ff 00 00 00 00 09 00   ....Q...........
0010   00 08 00 03 00 82 01 00 00 00 00                  ...........

And then it goes on polling with a9 31 as expected. Any idea why could that be? Does the wooting-analog-sdk expect something more from the keyboard? (that would explain the freeze).

Here are the traffic dumps for both web and sdk. You can filter both by usb.src == 8.3.2 || usb.dst == 8.3.2 to see relevant packets.

@Azarattum
Copy link

I have also tried with the stock firmware (without the full analog report patch). The result is exactly the same (except the version now doesn't have the 0x45 marker). It freezes after the version packet. Are there any logs or other helpful info I can provide?

@Azarattum
Copy link

I've also tried using .\soup.exe keyboard. It doesn't work as well. Behaves exactly the same: version packet, response then nothing...

Here are the dumps for soup and stock firmware tests.

@kartavkun
Copy link

Hey! What about Aula Win60HE?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants