#🤖│community_dev
1 messages · Page 7 of 1
I learned to type in uwu code within a few hours
and can now type at 14 WPM
I still barely remember morse code after multiple days of obsession with it (in the past)
Called it tho 
I think someone needs a stenographer keyboard
Wooting Steno™ when? 
I mean if I wanted to type fast, the UwU would definitely not be it
Dvorak seems interesting for typing faster, too, but I cba to learn a new keyboard layout
I just barely adjusted to the switch from QWERTZ to QWERTY
I tried dvorak but the shortcuts being different stopped that
Wdym?
xcv are in different locations, I need copy/paste/cut to be in the same locations
ctrl s, ctrl z, y, etc
typing is one thing but shortcuts are another to re-learn
dvorak has been proven to not be all too much better
Could make ctrl key into a new FN layer in the wootility and bind the keys as you would have them on qwerty?
💀
I love novel input methods like that 😄
is there a keylogger that lets u record keys for a unique rgb output
Sorry what would u want it to do?
whatever sequence u press the rgb also lights up in that sequence
idk if that even makes sense
there's an effect like that
How to develope wooting
theres a link in the channel description
ah thanks
hey does anyone know why wootverlay shows the wrong keys for me?
like
i set it up to be W and E and the overlay still shows WASD, Caps, Ctrl and the Spacebar
Is this for twitch? @spark canyon
OBS uses it's own browser, so the config doesn't sync between if you were testing it on your browser before using there, so after adding it on OBS you'll have to repeat your customisation by right clicking on the widget and hitting inspect
.
.
It's now included inside of the game, so I don't think you would be ban for using it ? 😅
Is there a way to do more detailed customization than wootility, e.g. by writing code directly?
wootility exposes all the configuration the firmware allows
if you need more you will need to write custom wrappers/tooling translating analog to keystrokes or sending rgb by using our SDKs
I see. thank you!
can anyone tell me why when i go to view my order i get an error
first wrong channel. this channel is for (as the channel description says) people programming things around the keybaords SDKs. #1019755933959733258 if where you wanna ask @stark vault
ohh my bad i'm sorry, thanks for the info
Random questions what is the wooting v2 interface and how could I ask the device for its firmware version my best guess is the wooting_usb_send_feature_with_response function, but im not sure what arguments to give it
Check pinned messages
i see that now thank you
For an updated commands list https://gist.github.com/BigBrainAFK/0ba454a1efb43f7cb6301cda8838f432
also v1/v2 has to do with how rgb data was sent to the keyboard and you should be able to safely assume all keyboards use a v2 interface now
the only keyboards that would ever not do this are severely out of date wooting ones and twos close to when they were initially shipped
I see ok so it should really effect anything
outside of rgb no. although the usb commands may not be available in older firmware versions
Rockys list would be wooting firmware v1.x while the list i gave you is for 2.x (there is a revision list with dates on github)
not documented no
most of the commands are about wootility configuring
but its a lot of trial and error from what i see
and theres no real need to document these as wootility doesnt hide anything that would be exposed here
yeah
you could of course unasar the installed wootility's code and unminify it by hand to see how we handle certain commands
then youd basically know whats returned and how to interpret the data
well im not needing many of these commands most what I need is provided with the rgb stuff
in terms of rgb if i recall right most is just arrays of colors basically
if you check our rgb sdk you can see its quite simplistic
yeah its not that complicated
If anyone would like to try out an audio vis, here it is :)
https://github.com/DjCrqss/Woot-vis > Click on released on the right hand side and Woot-Vis 1.0
Oh if we can post our projects here then here is mine https://github.com/MrEnder0/wootili-view
Stars on the Github repository would be appreciated.
thats the whole point of the channel yes. posting cool third party apps made by the community
This is cool!
sadly this doesnt run on my windows machine. how is the performance? looks cool!
@strong siren You wanna take this for a quick spin? https://github.com/WootingKb/wooting-rgb-sdk/pull/67
I was about to release this as 'stable' https://github.com/WootingKb/wooting-rgb-sdk/releases/tag/v1.6.2
but then I noticed the issue you made and that is defo a blocker for a 'stable' build
ah nice! ye wil ltest
i dont remember the context for that issue, im pretty sure artemis works around it
You can workaround it by selecting all the devices and resetting them first before closing, but that shouldn't be necessary
It's what my test code for the Wooting.NET library was doing, which is why I never noticed it myself
yeah, artemis will probably do that anyway since we dispose devices individually but that new behavior definitely makes more sense
@placid ledge seems good
Awesome, tyty
thanks 🙂
It won't let me confirm my address for it to order to ship
Wrong channel, ask either in #💬│general or in #1019755933959733258
thank you
@placid ledge I made some changes to the pr and clairified somethings that you said were unclear, let me know if any other changes are needed! 🙂
Also what specifically are you working on using egui with the wooting sdk that you mentioned.
what pr
I've been building a little tool using the plotting from egui to visualise the analog signal history and key press/releases to help debug analog signal issues, mainly for the beta firmware
Oh yeah I remember seeing this in #📰│wootility_updates, yes it looks pretty cool. 👍
Hey does anyone know how to read the analog buffer in a way that each key pressed is not the symbol but the row/col? :)
Is that not the way the analog buffer is reported by default?
Been a hot minute since I looked at it, gotta reacquaint myself
Oh right, yeah, it reports only a scancode that may be converted to a keycode
They would have to add something to the firmware to report it in a different way
Related issue: https://github.com/WootingKb/wooting-analog-sdk/issues/12
That would be great as it will pave the way for creating pressure sensitive rgb effects
you can sort of do it already but it's very annoying
Ooh what way do you do it currently?
the long way. grab inputs separately and map them to the analog scancodes
artemis has this
Does that not get affected by remapping or other layouts?
Yes, artemis lets you edit the layout to make it match up. Of course having the analog sdk actually give you coords would be nice :p
Ahh right makes sense thanks
wait so if someone has a custom layout there wouldent be a way to detect what row and collum is being pressed?
on the artemis side, if you change the mapping on the keyboard, artemis would require a remapping of that key<->led pair. I'm not 100% because I don't remap anything on my keyboards :p
Yeah, I've also done something like this already: https://github.com/Sainan/keyboard-jelly-effect
No user remapping, because it works on my machine 
correct. as far as im aware you wouldnt be able to distinguish which is sort of the goal as it means games etc wouldnt know you modified the keymap on the keyboard
I finally got my 60HE yesterday. and I am wondering about some features that would be nice to have if possible. Would there be a possibility for macros and double tap in the future ?
double tap would work almost like mod tap but instead of holding down the button you do a quick double for the secondary input
Macros would be pretty much the same as how macros has always worked
I always used macros on my old Logitech keyboard and would like to use that on my wooting
a simple google search
yea found it, playing around with it right now
Hello im trying to have github actions build and release binaries for my rust app and I get the following error in the actions outpit
error: failed to run custom build command for `wooting-rgb-sys v0.3.0`
Caused by:
process didn't exit successfully: `/home/runner/work/wootili-view/wootili-view/target/release/build/wooting-rgb-sys-514f195cb47379e0/build-script-build` (exit status: 101)
--- stderr
fatal: not a git repository (or any of the parent directories): .git
/usr/include/stdint.h:26:10: fatal error: 'bits/libc-header-start.h' file not found
thread 'main' panicked at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/wooting-rgb-sys-0.3.0/build.rs:32:10:
Unable to generate bindings for the Wooting RGB SDK: ClangDiagnostic("/usr/include/stdint.h:26:10: fatal error: 'bits/libc-header-start.h' file not found\n")
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
Error: Process completed with exit code 101.
Do I need the wooting sdk installed on the github actions machine to build binaries that use the wooting sdk? Or is this just some other issue when compiling the wooting sdk on Ubuntu
I thought Cargo solved all the dependency management stuff? 🤣
but looks like it's trying to compile the C library there and failing due to some libc issues
in my experience, Rust building C stuff is pretty fickle... it tried using a Linux-only compiler on my Windows machine once because I apparently "installed it wrong" 😄
would help to see the actions setup yaml
I figured it out its some weird issue where I the c dependency wouldn’t compile for windows from Ubuntu so I just changed the runner host to windows
lmfao, yeah, you can't cross-compile like that
Hey was wondering if the pcb files are opensource for any of the wooting keyboards
I'm looking to make like a generalized nxn keyboard using hall effect keyswitches, but I want to see how you guys deal with n-key rollover with these type of switches
So far I've found this article: https://telcontar.net/KBK/tech/Hall_effect#scanning
I believe they are running through multiplexers
correct
So it uses matrix scanning by iteration each time and for each hall sensor it is either 0 (not pressed) or there is some voltage (pressed, actuated at a certain percentage) from the sensor, which is then passed to the chip? Does someone have a clean pic of the PCB?
Not really a point in doing so
well it verifies you get an unmodified dll from us
Maybe it's useful for like anti-virus heuristics
imo signing windows stuff is always helpful if you already have the certs for it
Pay to win smh
No harm in it, but it's a PITA atm because our new signing key is EV and can only be used with the hardware usb 😭
That's all the software certs now afaik
Yeah, june last year that changed it
Here I go setting up a custom CI runner 😢
You'd need access to the physical machine to plug in the USB for that, right?
Sounds like a huge PITA lmfao
Not sure if it's worth the effort
Like no offense but the software has bigger problems than code tampering
Yeah, it's annoying, although it's not my machine and I'm connecting to it via parsec, so it's not too bad
ahaha, yeah, rgb sdk has plenty of issues, but I did it on the request of Codemasters 👀
I can't wait to have completely replaced the RGB SDK
then I don't have to feel the pain of entering that code base
🦀
For the next rewrite, use a mature language like C++ 😛
itll be rust
Yeah, I fear as much
It's much better for us to stick with a language we're already using than one that we aren't
i personally dont even think c++ is better than rust necessarily
Even though we're using C for the firmware, it's a different beast than using C in the RGB SDK context
Not too late to rewrite the analogue sdk in C++
Time to start the inverted "rewrite it in Rust" trend 😛
but I guess now I already did a lot of effort to fix the Rust codebase
Just eventually you'll need to drop the Rust ABI anyway because it's not stable
Yeah, Rust ABI should be dropped, as it's a bit of a pain atm having to rely on fixed versioning. Either it needs to use the stable abi stuff like this: https://docs.rs/abi_stable/latest/abi_stable/ or just drop it in favour of more monolithic strat
For Rust-to-Rust ffi, with a focus on creating libraries loaded at program startup, and with load-time type-checking.
Given that it's open source anyway, the need for plugins is less, and providing we keep the C plugin interface, I imagine most 3rd parties that want to have integration but not open source, would likely be using that anyway
If the damn thing didn't crash trying to read device info from a C plugin :^)
The SDK is so coupled with our 'analog-plugin' anyway, that it doesn't really add much value to have them split. I mainly did it originally so that I had more passive testing of the interface as it would be constantly used
I just gotta get around to wrapping up that general cleanup of the c plugin interface
soonTM
It's fine, I'm running custom compiled versions of the analogue sdk and plugin lol
Don't even need my C++ plugin anymore 
welp, seems my custom compiled SDK doesn't have the C ABI fix, so MIDI still crashes on startup, oh well
😁 I've been using custom compiled versions so much that I hadn't noticed that the release version is near unusable on apple silicon macs 😢
rip
Mac doesn't recognise Wooting keyboards, it asks me every time to set it up
Although it's pretty genious how they ask you to press the key to the right of lshift so they can tell you have an ANSI or ISO without asking you directly
Like the ANSI/ISO setup?
Yeah
Oh, I haven't had that issue really
Although the odd time I have had it ask me again for one I did before
Actually might have been due to KVM switch, not sure
I don't boot up a Mac device that often
Can't get used to the fact that the ctrl key doesn't do what it's supposed to
gotta press meta key instead
You mean Option/Cmd (Meta/Alt)? It is pretty annoying, but I use Mac most of the time, so I just swapped them in remap and have it normal in profile 1
I would imagine they'd use the device serial to track the setup, so maybe if you've changed gamepad modes or there's one firmware update where the formatting of the serial changed slightly
I wouldn't think serial is that reliable since many (most?) HID devices don't report it (at least not in-spec)
The serial is what is used by WebHID to track if permission has been given or not
If it isn't present, it doesn't preserve the permissions
That makes sense, but I mean Wooting devices are like a few of the HIDs I know that actually properly provide a serial over the proper HID interface for it
The serial isn't really related to HID, it's just one of the USB string descriptors
i havent had this issue except for when macos upgrades it asks once
but switching with kvm or disconnecting otherwise my mac knows what i set
Well, there's not too much interesting stuff plugged into my PC right now, but for example, my mouse is not reporting a serial
i wouldnt be surprised if razer devices dont have a serial burned into their rom in general
hmm
it basically just adds an extra step to the process where they need to match the serial in rom to the sticker
I mean, if an indie company like Wooting can do it... 
I think RGB SDK should be dropped entirely in favor of supporting HID LampArray
Is there already good existing libraries for HID LampArray tho?
We are planning on supporting the HID LampArray, but haven't had the time for it yet
I am most curious what you do all day. Like, this is a 9-5 kinda job for you, right?
I don't think just yet, but I think it's worth supporting since that means in the future it'll "just work" in modern operating systems, without needing any special support in softwares
Yeah, it is 9-5 for me
I do everything lol
but less than everything now that we have more software devs
So I don't have to spend as much time on website/backend stuff these days
I just mean because it seems like several months go by without any updates on the SDKs
I guess there's more closed-source stuff going on tho
i think simon sinks most of his time into wootility/firmware
That's fair
It is most unfortunate that analogue keyboards are not being supported natively in games, and I don't know what the limiting factor is
the limiting factor is standardization and native OS interfaces
theres no real analog keyboard HID standard as far as i understand
Wooting Analog SDK could be the standard with its plugins :^)
well its sort of missing the 1 thing that all standards have... a good whitepaper/documentation
well... rust basically documents itself with rustdoc 
not the kind of documentation i mean. something like ana analog interface needs defined behaviours for scenarios. what data to return. in what format. and a lot more questions need to be answered. just read the USB documentation and you know what i mean. or any RFC really
I guess one problem is that it's a bit of a PITA to use the Analog SDK in a standalone kind of environment.
Like, I know there's the wrapper that you're supposed to ship and then dynamically link against, but sometimes you just want a static link lib at most.
I managed to get analogue input support into Teardown, and I didn't even have to write a single line of assembly :^)
Put it on Github, if there is any interest: https://github.com/Sainan/AnalogSense/tree/senpai/steaminput
The code is very beautiful 
You can static link the wrapper lib as well, I bundle in those artifacts as well IIRC
This is still a bit confusing. On Windows, .lib is used for both static & dynamic link libraries. If the .lib is for static link, how is one to link against the DLL?
That lib is a staticlib artifact
I mean this one. This is useless without a respective .lib file.
no?

im confused how a dll is useless without a lib file
and dll literally means dynamic link library
If I wanted the dynamic linker to link against this, I'd need to tell my linker to put it into the import table.
That's what the .lib is for.
Or in the case of a static library, the .lib is just a collection of compilation units that can be added to my DATA section and linked against statically.
How is the wrapper.dll useless then? The .lib file just makes using it simpler, but it doesn't stop you from using it
Manually linking to .dll's is not that weird
If I wanted to manually link to a DLL, I'd just do this.
But then I also don't need the wrapper.dll
The rust artifacts give a .dll.lib file, should that be included in the tar then?
Yes
Huh, this is probably related to the analog plugin
Pretty consistent repro by just closing the game prematurely
Aww man, 32-bit apps can't load 64-bit DLLs
No Wooting analog support for Portal 2 I guess
build it as 32bit
Build the Wooting Analog SDK and Wooting Analog Plugin as 32-bit?
yeah should be able to do that
i wouldnt see what would stop it tbh
dont recall anything that absolutely needs to be 64bit in there
And then I tell the users just to install the Rust toolchain for 32-bit Windows, compile the whole ecosystem from scratch, add it to their path (with conflicting names to the 64-bit binaries?), then finally they can have a benefit they won't even notice? 😄
provide the dlls
That goes against the point of the Wooting Analog SDK in my opinion
it does yes but theres no other solution for windows
the same would go if it was a 64bit game trying to load a 32bit dll
Yeah, I can understand it, it's a shitty problem, especially with plugins
Easy fix, just move the plugin ecosystem to something more portable like Lua then you can easily load the same plugins on both 32-bit and 64-bit builds 
Beautiful
FWIW, it seems to be this wlock call
Possibly not your fault, probably just a certified Rust ecosystem moment
tried it in a few games
works:
rainworld
cyberpunk
does not work:
counter strike 2
lethal company
Uhh, you tried my SteamInput approach?
I would reckon it would get you VAC banned in CS lol
now that I think of it competitve games are prob the not of best ideas
i mean it crashes before the game window even opens
It is somewhat unfortunate I own cyberpunk on GOG and not Steam
:/
Might just be me using the uwu as a media macropad but here's a volume vis that only appears when u change your volume!
Also, what do you mean by 'works'? Like, it 'works' with Cyberpunk, but it doesn't even seem to use SteamInput at all.
Would certainly be nice to have analogue input in this game because of driving vehicles, but seems like very few games implement support Steam Input natively
My approach for GTA V was quite elegant, since their input system is analogue to begin with, I just had to write some assembly on the part where they read keyboard keys and give it a value between 0.0 and 1.0 instead of 0.0 or 1.0.
For other games, I think it can work, if you can tell apart "on foot" and "in vehicle" — which is where Steam Input is really useful because the game will inform Steam Input which "context" is active.
but the problem with mapping controller stuff is that if you want 'W' to be "move forward on foot" and "throttle in vehicle" you have a problem because one is LSTICK UP, and the other is RT. 😄
It's a nice idea, but for me, it's no good unless games natively support it (or I can hack that support into the games)
I guess I could try the most basic approach: Prodding around with cheat engine, until I find some magic number that indicates which input context is active, then somehow inform the keyboard that it should format inputs in a specific way... but that would be very hardware-specific.
Is that so, sorry I might not have known exactly what the purpose of this was then. I thought this was supposed to allow you to use analog keyboards in hames that did not support them.
What i mean by it works is I put the dll in the respective place and renamed the old one and launched the game. I was able to walk at different speeds depending on how much I press the key.
Yeah, I tried that, and that did not happen
and also don't see how that would happen because the game doesn't use Steam Input
you kept your keyboard in the digital configuration, yeah?
I used the analog profile for the game
I think I understand now so basically it’s supposed to work as analog movement when your interacting with the hame but then type as normal when your not playing
Sorry for misunderstanding the use of it
It does a couple of hooks, so it reads your analogue inputs correctly via Steam Input, and doesn't interpret the digital keyboard inputs anymore.
Only for the relevant keys and only for the game tho
Unfortunately not that many games use Steam Input, and some of those (e.g. Portal 2) are 32-bit
so clearly this approach is already DOA it seems
but at least it works okayish for Teardown
On that note, is there a proper "protocol documentation" for the Wootility—Firmware traffic? Obviously, the there's the WootDev stuff, and I've already somewhat RE'd the keyboard mappings, but would be cool to have information regarding the gamepad mappings and settings (mainly to disable keyboard inputs on buttons with gamepad keys mapped on them.)
I know, but I would like everything to "just work", so ideally I talk to the firmware directly and manage this myself.
I guess for a most basic proof-of-concept, I can just tell the firmware to switch to a different profile depending on game state
well we have no intention to document it tbh. wootility doesnt hide anything and exposes all possible things. if someone still feels the need to make a custom configurator or such then right now you will have to reverse engineer this from how the current profiles work
Yeah, but then I run the risk of writing data that causes glitches in the Wootility
highly doubt it
Well, ideally Wootility would show those layers still?
why would you try to interpret malformed data
You don't, but you can give the user the option to reflash a disk with corrupt data, no?
In this case, FN 2 & FN 3 layers still exist in the keyboard flash memory somewhere, and I might still want to use them
If the data on them is garbage, just discard that data, and let me overwrite it
but, yes, none of this is an issue if the user doesn't write garbage data there to begin with, which is an unfortunate side-effect of me messing with stuff I only partially understand
and not being helped by usbpcap not working for me lol
the only reason itll ever be corrupted is because the entire profile got corrupted due to whatever
which has happened in the past but also means most of the profile is unusable
How is the test-plugin meant to be used?
The virtual-control thing crashes when I try to start it
If I compile the test-plugin myself, initing the SDK crashes my program
Fully recompiled everything and still crashes on init, so at least I know it's probably not an ABI issue
but also like I thought Rust wasn't supposed to do that
Seems to just be this problem again... wtf.
Managed to narrow it down, seems to be a bug with the shared_memory crate
Well, that crate looks very different now on the latest versions, it seems the author realised it was trash and removed like 99% of the functionality lmfao
Managed to get something working for Cyberpunk 2077, now I guess just to make an automatic profile switcher based on this lol
Do I understand correctly that by default Profile 3 (Analog Profile 2) has this mapping?
and default Profile 4 (Analog Profile 3) has this mapping?
I kina moved stuff around in my configuration so I'm not sure what the "factory state" is
Does seem so, if this is to be trusted
And there we have it: https://github.com/Sainan/AnalogSense/tree/senpai/autoswitch
Now just to add like 10 billion game executables to the list lol
The translation I sent you is reflected! Thank you always!
this is for community projects not official wooting dev stuff
https://github.com/ShayBox/Wooting-Profile-Switcher
There's also the old C version
https://github.com/ShayBox/Wooting-Profile-Switcher/tree/original
Hmm, yeah, that is close to what I'm trying to do there, although just "active window" is really not enough for games. You have to consider "in vehicle" and, honestly, even that isn't enough. Games have text input sometimes, too, etc. It's hard to make it work right externally.
I've thought about maybe adding Lua to it and allowing the state detection to be scripted, but the core problem would still be that without making it "just work" for a good sampling of games, no one would be interested in it. And even then, I'm not so sure.
I've ran into a bug where Warframe would get confused with the digital and analogue input mixing which just adds further woes to my plans.
But I guess really the biggest benefit is when it comes to handling vehicles, so games like Warframe can safely be ignored (except they do have Railjack, even if no one plays it.)
i agree but adding that functionality to every game is not feasible
active window gets you most of the way there and at least it works the same for all the games :p
isnt the main issue that our keyboard is somewhat special in how software can interact with it? xbxo elite series 2 has multiple controller profile but switching is done on the controller not doable via software. same for most keyboards with profiles
My goal is to "inject" native analogue support into games. If I am suddenly faced with a text input and now have to manually switch profiles, I consider that a failure. It could be feasable to add manual patches like that for games where it's needed.
Esp. in open-world games the failing of just a single profile is apparent by how [W] would have to be both LSTICK UP and RT for on-foot and in-vehicle contexts. I've seen some people do double-bind the W key to that, but you end up having unwanted inputs in the different contexts.
I just press A1-A3,D1 on my keyboard to switch profiles, I don't know about ARM boards but mine only has the 3 analog profiles and 1 digital, the rest aren't stored on the keyboard and very difficult to swap since they're stored in wootility local storage not on the device, so I'm limited to a typing, driving, binding of isaac, and misc profiles.
same for arm
Does anyone have any minimal working c/c++ code that can literally just read the keypresses + depression?
#include <iostream>
#include <Windows.h>
using WootingAnalogResult = int;
using wooting_analog_initialise_t = WootingAnalogResult(*)();
using wooting_analog_uninitialise_t = WootingAnalogResult(*)();
using wooting_analog_read_full_buffer_t = int(*)(unsigned short* code_buffer, float* analog_buffer, unsigned int len);
int main()
{
SetEnvironmentVariableA("RUST_LOG", "off");
auto sdk = LoadLibraryA("wooting_analog_sdk");
((wooting_analog_initialise_t)GetProcAddress(sdk, "wooting_analog_initialise"))();
auto read_full_buffer = (wooting_analog_read_full_buffer_t)GetProcAddress(sdk, "wooting_analog_read_full_buffer");
while (true)
{
unsigned short code_buffer[16];
float analog_buffer[16];
const int num = read_full_buffer(code_buffer, analog_buffer, 16);
if (num >= 0 && num < 16)
{
std::cout << "\x1B[2J";
for (int i = 0; i != num; ++i)
{
std::cout << code_buffer[i] << ": " << analog_buffer << "\n";
}
}
}
}
Sweet, I guess this uses the wooting sdk? I'm also on linux, what parts are windows only here?
This assumes the SDK is installed, otherwise LoadLibraryA/dlopen would return nullptr.
For UNIX:
#include <Windows.h>->#include <dlfcn.h>LoadLibraryA(x)->dlopen(x, RTLD_LAZY)GetProcAddress(mod, sym)->dlsym(mod, sym)
Unsure about SetEnvironmentVariableA, but don't need that if you don't mind the SDK writing to your console.
setenv
hi guys, im not knowledgeable on stuff like this but I want to ask if there is a way to, like the image, instead of disabling gamepad mode, disabling keyboard mode and make the keyboard work only as a controller
You can just remove all the keyboard mappings?
Or use these options under Gamepad Mapping
Thank you so much, going to try this later today
I just realised I could prob make wallpaper engine wallpapers that run apps that change rgb lighting
So I managed to get this working but read_full_buffer is always return -2000, any hint?
I think this has to do with this plugin system that I have no understanding of
Alright I figured it out after messing around with it for a while
I made a PR to the readme for the analog sdk to make the linux instructions easier to read, hopefully that gets merged in
Didn't the wooting analog plugin get installed with your installation of the SDK? That's at least how it is on Windows.
No on Linux you need to manualy install it
isnt there a channel for wootomation anymore? was wonderign why the button" set to default (duration) is not in the keystroke edit menu and only in the delay element field.
tnx, bit weird how discord hides these.. or, in other words.. i have been looking for it but "show all channels" is also a kind of hidden option.. not the ux award. :/
smh, how dare they add backend validation
yeah we did quite a lot of internal testing including botting it
I'm just happy my little WebSocket client works, it almost fits in a screenshot. 
It's interesting, it seems people basically stopped using the emoji feature now, so I can have full reign over it. 😈
gl
No luck needed, it's just pretty unexciting unfortunately. 
Also unsure about the anti-botting measures tbh
Casually holding 100 connections
but ¯_(ツ)_/¯
it's a nice gimmick 😄
Maybe you need a bot to periodically put an emoji to keep people engaged 😉
what is backend validation?
well, it involves a peg or—
I mean just validation on the backend server
so you can't do shit like send an arbitrary emoji
when there's a limited selection of emoji on the frontend UI
Ah ok gotcha
what are you building anways
Nothing in particular, just saw that funny feature and span up the script to connect to the WS server in like 5 minutes.
what anti botting measure

but idk what your botting tests were
ah, makes sense
and then spam the server with commands
just wanted to make sure any amount is sort of handled ok
Could it handle up to 65,535 connections? 😛
Actually might be running out of ports a bit sooner than that
Psk just use multiple ips
That would be overengineering it
Any one knows how to log input from a mouse?
( I have a mic that need some logtiech input for soundboard but i rather keep my wooting gear )
What are you trying to achieve exactly?
Anyone knows why when I open the software / web , its like crashing few times until it detects the keyboard ?
U don't have wootverlay running right?
How do I check for it ?
If its a software so no I dont have it
Oh then nope haha dw
Running RGB softwares? SignalRGB is particularly notorious for causing problems
I do not understand the wooting_analog_plugin.dll
Here is what I want to do: I want to use autohotkey to DllCall the wooting_analog_plugin.dll to get analog values from keys. But I don’t know how to ask the dll. And I honestly don't understand the SDK documentation one bit.
You don't use the analog plugin directly. You use the SDK.
Same difference?
On the AutoHotKey side looks kinda like this:
Result := DllCall("[wooting_analog_plugin.dll\]Function" [, Type1, Arg1, Type2, Arg2, "Cdecl ReturnType"])
Very much not same difference, because there's no way in hell you'll get that working 😄
Here's a very low-level approach to using the SDK
Why? Should work with any other DLL. https://www.autohotkey.com/docs/v1/lib/DllCall.htm
The DllCall function calls a function inside a DLL, such as a standard Windows API function.
the idea is that you dont bundle the dll but the user installs it at whatever version is newest
The reason is that the wooting analog plugin is written in Rust, which has an unstable ABI, far away from what you would normally get with the C ABI of Win32 DLLs.
Who said something about bundling?
Even if it were written in C++, which does have a stable ABI, you still have the issue of complex data structures like hashmaps, which you can't possibly hope to interact with.
Hence, the wooting analog SDK (as well as other SDKs) use the stable C ABI with stable APIs and trivial types, so you can easily interop with them.
You just gotta go through the front entrance. 🙂
Oooook? (I'm so out of loop that I had to ask Bing copilot what an ABI is.) A system search revealed to me that I do, in fact, also have a wooting_analog_sdk.dll .
If you excuse the sidequestion to the developers: Why does the wooting_analog_plugin.dll exists in a form that sucks donkeyballs?
Back to topic: Sooo .. I change my example to Result := DllCall("[wooting_analog_sdk.dll\]Function" [, Type1, Arg1, Type2, Arg2, "Cdecl ReturnType"]) And now?
The wooting_analog_plugin is an SDK plugin that makes the SDK able to read from Wooting keyboards.
This should help you. Just use the appropriate functions, e.g. DllCall instead of GetProcAddress.
It's not a 1:1 translation from C/C++ to AHK, but yeah
Also idk if you can pass pointers for the arrays. If not, use a more trivial SDK function to query key by key. See the documentation for that. 🙂
Yeah … You might as well have posted that in Swahili written in Chinese characters. I don't do C. Or C++. Or C#. Sometimes I can kinda read it and guess what's going on. Here I can't.
スキルイッス
Just ask your AI 😉
That I did first. It was a knowable about that topic as I was. And your intro text did indeed was to me the same as your C code. Which confirms: I don't do C. Me stupid, me stopped at C-64 basic. Was computer we had in cave.
No guarantees, but looks alright to me at first glance 😄
Here's a link to the docs, btw: https://github.com/WootingKb/wooting-analog-sdk/blob/develop/SDK_USAGE.md
Ah! Thanks! I used bing as it's free. And most often the same or better. Not in this case. And the right question would have helped, too.
And I read through all SDK documentation. I only know it was in Swahili written in Chinese characters
What is the update rate of "wooting_analog_read_full_buffer" ? I'm writing a c++ program which samples the key's depression but my programs is cycling faster than said function, causing many repeated data points:
I don't think you will get much better by using the Analog SDK. If you really want, you can poll the keyboard yourself (HID usage page 0xFF54). The input report format has a u16 scancode, which is as per USB HID specification plus some OEM values, then a u8 analogue value.
in general reading the analog values wont get much faster
mainly due to it taking time for the MCU to interrupt normal event loop stuff to prepare the reports when requested
same for the RGB interface. it also has a speed limit so to say
Yeah, I don't mean for it to be faster, but for it to only register on updates.
I see, so does anyone know like what the hardware's update rate is for analog output? I'm going to see if I get duplicate values when I use the same update rate specified by wooting.
@placid ledge would know best what the approx rate for the analog interface is
polling rate matches keyboard polling. So 1kHz for all boards, 8kHz for 80HE
Update rate is roughly specified in the tachyon mode description, as that is an estimate of the scan rate
updates are deduplicated if they are the same
So for 60HE tachyon mode, theoretical max update rate is 1kHz
wait so you can get a full analog buffer every 1ms?
ye, up to 16 keys
Given that the keyboard itself shouldn't be reporting duplicates, maybe you can just deduplicate yourself to discard instances of the SDK giving you old data.
Also, do we know the PID for the 80HE yet? 0x1600?
0x1400
Hmm, was it in dev before UwU 👀
I'm guessing it will be ARM-based (protocol v2), and have 18 rows for RGB? Based on the squished top row anyway.
yes
afaik they worked on it, or at least started planning it, years ago
the only thing I'd really like a Wooting employee to tell me is why they don't make a "Wooting One HE" or similar
instead we get the goofy-ass 80HE
but I guess I don't have to agree with the decisions either 😄
wdym by "Wooting one he"
There is a wooting one, it's just an old version of the wooting keebs
I mean them just selling a normal TKL
as the Wooting One is discontinued afaik
Like, it's not something I'm personally affected by because I like my numpad but it just seems so weird to me to ignore such a big market/demand?
but you know what, I am buying the silly 80HE because it has a Japanese layout, and to support this poor company 😛
is the new rappy snappy coming to 60 too?
Wait and see™
Yes
What does it do
for movement keys it activates the one thats pressed the most(i assume mainly for counter strafing)
"Rappy Snappy monitors at least 2 selected keys and activates the key pressed the furthest. When combined with Rapid Trigger, it'll compare the keys only when in an active state. Allowing pre-pressing and faster activation on opposite key release. When both are active at the same depth, it'll resort to your selected SOCD resolution. This enhances your (counter) strafing, bunny hopping, and block/parry/combo timing in various games."
their def on the website
visual^
I would call that "radio buttons" haha
i like rappy snappy lmao
I fail to see how those words relate to its functionality, but ¯_(ツ)_/¯
it rapidly snaps to the other key = rappy snappy
I have a question. Is the feature Rapid Snappy or Rapid Trigger or the Adjustable Actuation Point built with the analog SDK by wooting that is open-sourced? So can I also build like a plugin that has different features
its a firmware feature
Then my question becomes what are the limitations and what I can do with the analog sdk also thank you for the help 😁
limitations of what. the analog sdk can read analog values from all keys and you can then implement whatever you want in software
Ahh ok like the wootingpiano project and I thought there could be some limitations of the sdk but when there is none is even better
we give full access same for the rgb sdk. we dont want unnecessary limitations
Really cool that’s why I love wooting
Is there a new keyboard I don't know about.
80he
Has the RGB sdk and Linux udev rules been updated for it, I guess it's time to update wps and aur packages.
We use generic udev rules now for our vendor id, so they don't need updated
Analog/RGB SDK will need updated, but that's a different beast
Crab gang 🦀.
It's C ABI, just link against the DLL/SO?
I already updated the rust rgb sdk bindings, could also do that but it requires the dll be with the binary
or statically link. there's one benefit of C over C++, no need to link in the "C++ runtime environment"
which is quite a PITA with Rust
disappointed about that because without any sort of C++ compat, it's literally useless for real-world projects
there's bindgen for c and autocxx for c++
there's always the native unsafe way but it's not as good as the community built tool bindgen and autocxx which provide a safe interface with macros
well, I'm talking about static linking, not dynamic linking
I've tried pretty hard to get Rust and C++ code to link into the same object and it would just keep having errors due to the runtime stuff
if you make a bindgen crate it'll statically link, that's why I use the rgb sdk bindings, but you can staticaly link with the unsafe way it's just not easy
but I reckon the "best" way to ship RGB SDK with your app is to bundle the DLL/SO
so newer keyboards can be supported by the user replacing the DLL/SO if they so desire
alternatively, if hard-coding the devices (aka statically linking the SDK) is the game, then "direct comms via HID" is the name 😉
it would be nice to have a native rust hid rgb library, but that's up to someone else to make, It's easier to use the rgb sdk and not have to maintain another library
I've reinvented the entire RGB SDK wheel in C++
if I understood how it all worked like simon I probably would have made one by now, but it would take learning the hid interface for me
It would be nice to dynamically link so you can change the dll 🤔 but it's too late now, I can't compile my project because of people not pinning their dependencies and now old pinned versions have updated dependencies with breaking changes
I either have to wait for tauri-egui to update to the latest tauri v2 beta and egui 0.26 or switch to a webkit ui and write css
🤢
Why does any of that matter for an RGB SDK?
I'm talking about my program not the rgb sdk
I still don't understand how your program could suddenly break
Did you commit your old lockfile?
yeah but I'm using tauri-egui which hasn't updated in 8-12 months and uses an early version of tauri v2 alpha and lots of the dependencies of both projects had lose dependency versions and have sub-dependencies that have updated and broke things
yeah, but, a lockfile still contains all your package versions, including how to install them
so if you just roll back to your old lockfile
then you should be able to install and build from that
doesn't work, still errors in dependencies
I never thought I'd say it, but somehow nodejs seems better than Rust
and that's javascript... 
Yeah, I guess it's also possible that someone was not being very disciplined
maybe I can use the wootomation stylesheet and switch to native tauri instead of egui
We have our own little package management and I've had to remove some packages because some maintainers could not manage the simple task of "1 steady url per version"
Then again, a lot of devs just never bother getting any sort of git discipline
it seems they struggle with even just using git commit
I'm not great with git, I force push more than I should but it's my repo and the only person contributing
Oh hey there's a new template for tauri and egui 🤔 maybe this will work instead of tauri-egui https://github.com/noxware/egui-tauri-template
Force push is fine, as long as you don't force-push any tags 😛
well It's usually I make a release and realize there's a bug I didn't find or won't compile and force push and delete/re-release the version
yeah, that's bad
lol
a version number should uniquely identify, including all bugs and quirks
even devs at big tech companies like facebook don't seem to understand that a bugfix can be a compatibility break
linus torvalds is based for understanding how people actually use software
you just don't fix a bug when people are relying on it
I'm kinda guilty of that myself, sometimes I think a bugfix is so trivial it's not even worth mentioning
then it ends up breaking something 2 months down the line
I made a small script, which automates Wootility installation on Steam Deck and most Linux distros 
https://github.com/Calslock/wootinstaller
You had to put the new optional part in the middle instead of the end 🥲
If it wasn't already impossible to parse a serial number it is now, good thing I only need to convert to it not from it
Anyone with a serial number containing letters T and/or S willing to run a debug build of my program so I can figure out the order of bytes in the new serial number? I don't have a 60HE+/80HE to test it
I need the Serial Number Buffer line from the logs, you have to run it in a terminal https://gofile.io/d/j2vA8K
What are you parsing the serial number for?
also not sure why the profile switcher needs this
I don't parse the serial number I construct the serial number from the GetSerial command because Wootility uses the serial number as the profile key iirc
you mean for inactive profiles?
Active profiles
I get a list of devices from Wootility so you can configure unplugged devices and I have active profile names
new keyboards have new serial number parts, but I don't know what order the 3 new bytes are in, just that they're probably index 16 17 and 18
I don't understand why the serial plays into this code
We only really use the device IDs that we generate
I also have a format for device id, I probably needed that for the Wootility config, but I use serial number in my config as a device key and in the UI if you have two identical model name keyboards, device ID doesn't have the production stage so it's more likely to not be unique
The DeviceID we use is intended to be unique, otherwise Wootility would break pretty aggressively in the case of a conflict
i mean it would prob still be useful to display the serial like wootility does for disconnected devices cause otherwise the switcher is filled with 5 uwus if you have 5
unless the device id is also somehow easily related to the serial for an end user
I haven't looked to see if device id has changed to include the 3 new bytes but it appeared you could get conflicts with device id without the stage number, every other bit I could imagine would be the same on a large run the same device
Ye, but you don't need to parse the serial number to display it. We provide the formatted serial on USB
oh well
USB devices provide strings. Commonly manufacturer, product and serial number
Hidapi has a function for reading the serial number
And that will be the formatted serial number
The RGB SDK doesn't directly expose this, but going via that strategy is going to be a lot simpler than dealing with parsing and formatting yourself
On the side of the DeviceID Vs serial, even if you think that the id could get conflicts. It doesn't really matter to build another layer on it, cus if it conflicts you'd be screwed anyway
I don't think I can do that, because the rgb sdk only lets me select a device using device index I have to loop through every device and access its serial number to make it unique, but if I use hidapi I'll be able to get every connected keyboards serial number but I won't know which device index it is to the rgb sdk at that time
In what world are you using hidapi separately? It prob wouldn't work consistently anyway due to exclusive locks. If you were to make a patch to the RGB SDK which exposes a function to grab the serial via hidapi on the selected device. Or even add it to the device meta struct and init it on device connection
I thought that's what you were saying to do, use hidapi to get the serial numbers of connected keyboards
Use hidapi inside the RGB SDK, it's using hidapi already for the device connection
But then you're using the serial to generate the device id currently? So you'd still end up needing the parsed version in some form?
I don't know if I can use the hidapi from rgb sdk, unless you mean wooting_usb_send_feature_with_response
I would still need to parse it for device id, I already wrote the code to convert from my Device struct to the updated serial number, I just need to parse the 3 new bytes and update the device id format if it's changed
I was saying that you would need to edit the RGB SDK itself to expose it
But ye, you need it parsed for the ID, which is tricky
But it's also a lot simpler if you don't have to deal with the formatting of the serial and only do the fixed id generation. Then just use the formatted serial from usb for display purposes
Also, assuming you're gonna be keeping the parsed serial, I'd recommend splitting it into its own struct. That Device struct of yours is quite beefy
I could do that but it would be more work than updating the existing code, and I don't use C, a change to the rgb sdk like that would have have to be backwards compatible
?
Fair, it's defo not the most straightforward path
Maybe for you, but I don't know C, I can't really patch the rgb sdk, it's more straight forward for me to parse 3 extra bytes from an rgb sdk response
If the rgb sdk had a wooting_usb_get_serial_number or the usb meta had it I would use it instead of this
it's defo not
was device id changed? I don't have a new board with the extra bytes but it doesn't look like it increased in length
Aside, we are working on our own app profile switching in case you weren't aware.
I do remember changing it at some point, but I'd need to check on my pc
is that built into wootomation or a new app
and will it let you switch to inactive profiles?
Not Wootomation but also not really a new app either
That is the main focus
ore_pog lets goo
thats the one thing I can't really do in my program
the command to swap an active profile would have been insane to construct
Good night
i guess this is a good moment to say i have absolutely no clue whats going on here but this conversation has been very interesting to spectate.
code
i got that much, but me trying to understand it is like trying to understand german as an american. i can notice most of the characters but the words they make mean absolutely nothing to me. but its interesting nonetheless. maybe someday ill learn.
ChatGPT explains aliens
now I know why, GetSerial doesn't return the 3 new bytes 🥲 the only option is to modify the rgb sdk to get the serial number with hidapi and parse it into the device id
Nevermind I figured it out, I needed the first param to be 2 instead of 0 for the new bytes, but the params are in reverse order in the rgb sdk so it's last.
<@&490097707487330305>
Mansen was notifying us of a bot/spam.
It has been removed.
<@&490097707487330305>
..,JKMM64Y122334567890----][['
yes
?
The deleting of the spam bots
It's pretty obvious: They try pinging @everyone, usually have some discord.gg link, and send their message in multiple channels.
Oh, when we ban them, we get an option to remove their messages for (hours/days/week/forever), so we can just select that.
Though sometimes the auto cleanup takes a while.
Yeah, but you still need to manually click on "Ban"
I can't seem to get the RGB SDK to detect my keyboard on Linux, even with the input group or sudo. The only thing I can think of is that HIDAPI needs to be updated because it's a shared library on Linux and is 2 years old.
The HIDAPI version used by RGB SDK is 0.12 and 0.14 is out now
They also switched from make to cmake in 0.13
That's not it, I tried an Ubuntu 22.04 KVM but still didn't detect my keyboard
EDIT: Seems to be an issue with my bindgen, using it directly with C works
wasn't this issue already reported to you before?
yes but I didn't have linux to debug it
smh windows users
I can finally run wayland and use linux again
with VR! I get better frames on linux in everything I test too which is crazy.
It was a simple fix, the old rgb bindgen had a 4 way switch for hidapi-libusb, hidapi-hidraw, libusb, and libudev. only hidapi-hidraw works because the rgb sdk switched to hidapi-hidraw instead of libusb awhile back.
Just set up a Linux VM? I personally have Ubuntu and EndeavourOS VMs.
WSL (when it does work) is also a decent environment to test if your software works on Linux.
I say that because for ARM computers it's a bit hard to come by a VM, so WSL is a good option there.
I was wondering if someone knows a workaround for this, lets say in my layer two I want " on a key but the only option atm is the ' same for brackets [ vs {. is there a shift modifier setting i'm not aware of to trigger it and get it to work?
This is an operating system thing that your keyboard (any keyboard) can't change. However, you can use DKS as a hacky-workaround to make it possible
That's typical American layout
Maybe switch to a European layout in your operating system if that's more comfortable for you
Thanks for letting me know about the workaround. came from a QMK split keyboard background but got a wooting for gaming and love it. was trying to make a profile for quick coding when needed instead of swapping keyboards out
That's a good idea, I'll give it a try
Another idea that might work (but haven't tried) is setting the layer 2 key to unused fn keys (fn13 to fn22) and then using autohotkey or similar to make that output your character
today my wooting 60he+ arrived and i wondered how i make screesnhots and stuff, on my old keyboard i pressed fn+ the key but now its not working
i have screenshot on alt + pressure
Not exactly the channel for this, but check the fn layer in wootility
sorry
if printscreen is not bound, add it manually
ohh thanks
Is it possible to change the key assignments on the WOOTING keyboard through software control, hardware control, or both?
Yes using wootility
hello my wooting doesn't stop working when i keep my keycaps pressed
where is the insert key?
You have to bind it by yourself in Wootility
Next time, please ask such questions in #💬│general 
there's an insert key on my Wooting Two 
ty kochanie
Hello!! I am very interested in making keyboards with rapid trigger and i wanted any information anyone would be willing to give me on developing the pcb, software, etc. Anything is appreciated, thank you!
I would not really say this is the place for that, but all of wooting's features derive from hall effect sensors which essentially detect magnetic forces present in the switches.
Try looking at a different discord community for things relating to maybe something like KiCad which is a popular pcb design software.
I don't know who it was but someone reported to me that the Cyberpunk 2077 "in vehicle" detection in my auto-switcher had some bugs like ages ago. I finally got around to properly implementing this. And look at how simple it is!
Actually, this I'm much more happy with now: https://github.com/Sainan/AnalogSense
It hooks into the game's input stuffs to feed it actual analogue information
No jank, just the way I like it
And the sad reality is: I still drive a lot better with a controller, haha.
does anyone know how to set the color brightness with the wooting rgb sdk?
Is there a non-s3 link for Wootility? it always takes 30 minutes to download from s3.
no
and we did have a few reports of download speed issues but i mean literally only a few
half the internet is S3, you cant access half the internet?
No idea what channel is appropriate for this, but I made a custom midi keyboard with wooting switches :) it's got plenty of buttons to let me play microtonal scales
I was bored and wrote code to render to a texture using arbitrary shaders and then projecting that onto the keyboard
23x6 is not exactly a great resolution though, I render to a bigger texture then scale that down somewhat smoothly
anyway custom rainbowy effects and stuff should be nice, i just need to write some shaders now
im not sure where to post abt this but all of the rust libs for the rgb control seem to break in the 2.8.x update bc without changing any code in my project revering my kb back to 2.7.2 seemed to fix my projects
There's no official Rust RGB lib?
the rgb sdk is c code and has a rust FFI at best
yes but the libs that have bindings to the offical sdk dont seem to work when updating so I was wondering if anyone has experienced any issues with the standard c sdk
or if it may be with the rust bindings
With a protocol this simple, I'd not even bother with an SDK, tbh
yeah I guess it is pretty simple if I were just to reimpliment the rgb changing in rust
For the analogue SDK, I do use their SDK, but it's also relatively easy for the user to figure that out. Just tell them to install it, and then the DLL can be loaded with manual dynamic linking.
I don't think they ship the RGB SDK to consumers, so it's up to you to keep it up-to-date anyway
Might as well just keep your HID list and protocol implementation up-to-date instead 😄
And not like they release a new piece of hardware every other week or so
So, you'd think the devs would have a ton of time to work on the SDKs, and yet... haha
Actually I'm more concerned about this issue: https://github.com/WootingKb/wooting-analog-sdk/issues/12
It's more difficult to fix something missing in the firmware then rolling your own SDK
Polling this over the configuration interface is laggy
how can i get the distance of how far a key is pressed down?
The analog SDK would be the thing to use
https://github.com/WootingKb/wooting-analog-wrappers <<--- should this still be used?
Don't see why not, given that the analog SDK doesn't need to be updated on the developer's end
Although the question is, of course, if you want to use an unmaintained package for such a simple task rather than do it yourself
Unmaintained because, well... who knows what Wooting's developers are working on
I don't use the package
Too much bloat 😄
However... does it really use the current analog SDK?
The dll in the respository is quite large for just doing some simple IPC
I'm not familiar with the project, but it seems you answered your own question
It's just a guess
You clearly have an opinion about bloat and hence decided not to use this package
Even if this package were the best thing ever, would it change your mind?
lol
the source for the wrapper dll is available here https://github.com/WootingKb/wooting-analog-sdk/tree/develop/wooting-analog-wrapper/src
the reason for having wrapper DLLs is that not everyone dabbles in FFI and how to use FFI in whatever language they program in
So basically it just does some IPC
ffi isnt ipc
It directly loads the dlls needed?
it allows to directly call dll functions in another language yes
ipc is more for well processes talking to each other not language binding
Yeah, I expected that ^^
we will most likely move to IPC/RPC for the background service we plan so that multiple processes can execute RGB commands and read analog data without interfering with each other
not entirely sure whats planned for that though
So if I use this dll it also will resolve and load the installed device plugins?
it should
Okay
honestly not sure if anyone ever wrote any device plugins for it
Wooting (BigBrainAFK | Tony) says this:
the author should use the nuget package of the sdk and not hard copy the code. they should also not ship a dll in their code but rely on the installed analog sdk
yes
So should I ship the wrapper dll or not?
How do I resolve the dll?
or the raw USB packets to get stuff
im almost sure we had some example repo somewhere
To me it looks like you should take the C# code and use it with the library
ill try to find the example repo but it showed pretty clear on how to use the dlls
The is one for C
hmm i was pretty sure we had examples for the .net one as well... guess i was wrong.
but yeah general gist is dont ship analog sdk dll
to be honest the whole wrapper code around the dll is doing lots of unnecessary things
i might rewrite it
i use it for artemis and it allocates a ton of completely unnecessary ram every time you do anything
IPC/RPC for the background service
You have become the very thing you swore to destroy
optional^
Why would analog need that anyway, it's read only how can multiple processes clash 
usb communication in general coming from multiple programs at once is problematic
the main one i see in support threads is people having rgb-sdk apps and trying to use wootility at the same time
Yes RGB is understandable since that's read-write (and plz just do HID LampArray for that so Windows dynamic lighting & whatever else other OSes come up with can handle that)
IPC in some way is actually a clean solution. You should just stay away from the network stack.
for example running artemis (has an analog brush for rgb) and playing a game that also needs analog. in general doing a lot of read/write at the same time can lead it to break
hello! I am trying to create an app that helps user determine their optimal actuation point/rapid trigger sensitivity for counterstrafing. Has anything like this been tried before? Are there functions in the SDK to set different actuation points/rapid trigger sensitivity?
Nope, I'm afraid you'll have to RE the protocol
Maybe this is somewhat useful: https://gist.github.com/Sainan/0d285907961a22c8cafc106aa36513e5
Oh alright, thanks for the input will check this out
Oh boy
why isnt this on crates.io D: https://github.com/WootingKb/wooting-analog-sdk/tree/develop/wooting-analog-wrapper
See SDK_USAGE:
I'm not sure why, but for right now, the Git way seems preferred.
i see
It's not on crates.io because I haven't gotten around to getting it into a state I've been happy with. e.g. the device connect/disconnect callbacks are not really working IIRC
no its ok i was just wondering why that is and it would be really nice if there where some simple examples of using it at some point after its at the state your happy with :D
That's gonna take 365 business days
Although I did think there was an example somewhere
This is what I was thinking of: https://github.com/WootingKb/wooting-analog-sdk/blob/develop/wooting-analog-wrapper/src/bin/main.rs
More of a stress-test tho
The first part is the init, then I either use wooting_analog_read_full_buffer to populate an array or wooting_analog_read_analog to put the value in the right place (the std::copysign is just to transform the 0.0-1.0 into -0.0 to -1.0 where needed.)
how would i go about changing the key colours from the wrapper 👀
Is it possible for wooting to accomplish something like this with their software?
https://fxtwitter.com/jimmymalavong/status/1810692866064187762?s=46&t=FkQuvM6PBhk0xgvSCZiE_w
We fixed CS2 movements. No more gliding feeling. Gain precious time on your counter-strafes and dominate your opponents. Now available on our Huntsman V3 Pro line !
Quoting R Λ Z Ξ R (@Razer)
Secure the victory with Snap Tap - #Razer Synapse’s latest update for the Razer Huntsman V3 Pro Line prioritizes your last keystroke for split-second co...
Yes, Rappy Snappy is coming soon(tm)..
🙏
Hope the beta for it comes out asap🙏🏻
Ah, huntsman. The only other analogue keyboard line on the market with an HID interface. Just a shame Razer has no analogue SDK.
Well, that kinda reinvigorated my interest in analogue input. Finally got around to making my C shit properly compatible with ABI version 0, given that ABI version 1 is still not released. 😄
🙂
hmm my razer huntsman v3 pro arrived. I think I still haven't gotten my Wooting 60-whatever-abomination 
well, they luckily still have an HID interface for getting analogue values, but it seems severely different now 
looks like they just added a new field to the report, which tripped me up
it seems to be like a "priority" as it's a high value when the key is far down or recently activated
also seems mine came with a defective lshift key, that is ever-so-slightly down even when I am not pressing it 😄
One could argue, better no SDK then a crappy one
I would rather say it's hard to make it not crappy
If it comes from a manufacturer, then most likely it will be overspecialized
Welp, Wooting's wouldn't be too crap if they updated it more than every new keyboard model release
and even in its present state, it gets the job done
just not enticing enough maybe for games to really integrate it
That's sort of the point
The SDK can't cover only keyboards
I want potentially analogue movement out of the box in every game, where I have 360° movement control
Think of Steam Input... which only covers Gamepads
Would be a huge improvement if it could do... Keyboards too
well, it's arguably more complex than that
because gamepads can be mapped easily to context->buttonmap
of course this model also works for keyboards, but not all contexts can be anticipated by the input API
one example would be teardown. they have scripting support via Lua and some scripts just read the keys raw
so it's a fundamental API change from is_key_down to get_key_value
(kinda off-topic, but I have like 5 hall effect keyboards in my fucking house now, and that's not even counting the ones by wooting)
@placid ledge It seems wooting-analog-midi fails to start if my plugin returns 0 to device_info. What am I supposed to do if there's 0 devices (that my plugin supports)? 
In what way does it fail? The app itself defo can handle the case where there are no devices, I've seen it be in that state
It should error log to the terminal if you open it via that
IIRC RUST_LOG env should work to control the level
unfortunately it doesn't attach to the console window when I open it via cmd
rip
I barely have the time to do anything Analog SDK, let alone midi app 
My own usage of the SDK seems fine, so it's probably an issue on MIDI rather than the SDK
Was gonna try "properly" implementing device_info + dispatching events when appropriate
but I guess that wouldn't be a good idea then 
Hmmm, does it only crash when you have a Wooting device + return 0 on your plugin?
Or is it when you have only 0
Uhh, I didn't try without the Wooting plugin
Doesn't seem to load when I remove the Wooting plugin too
Seems to just be me returning 0 to the device_info that causes it to fail to start
What if you just use Wooting plugin with no device connected?
it boots and says no compatible devices found
hmm yummy

Ah, so the error comes from the fact that it got inconsistent number of devices from the SDK init to getting the device info
That was probably something I had in there for testing, as I think this was the first project where I was trying to use the analog SDK from rust
The initialise function returns the number of devices, not plugins
The code in reference
ohhhh
so it might be that my initialise routine also needs to return 0
yeah and now it works lol
Yeah. In this case, it's expecting a consistency between the number of devices at init vs requesting them right after
Which is a bit unncessary, as that would kinda force you to ensure your init of devices happens during plugin init, rather than being more dynamic
Like I said, probably a left over from me validating the rust interface for the Analog SDK
yeah, this might cause issues as I'm spinning up a thread in the init
so I would have to wait for the thread to be scheduled in first?
Yes, or do it after
but I don't think this check is really necessary, so I'd rather remove it than force specific behaviour on your threading
That being said, I feel like I remember the midi app not having the best behaviour when it came to connecting/disconnecting devices. So having the device list ready on init would be helpful
Yeah, I'll just busyspin
although I still have the same issue now in reverse
init returns 1 device, but get devices returns 2
might still be my problem, although removing the wooting analog plugin side-stepped it
Does seem to be working fine now, although it is funny that the device list in the analog midi window never updates
this is me pressing keys on both the razer and wooting keyboard while "no compatible devices found" 😄
Yeah..., I think that's prob a symptom of the bad behaviour with connecting/disconnecting devices that I alluded to earlier
I mean, it seems to be working fine, at least in regards to it recognising keypresses from keyboards that were plugged in after the app was started
it just doesn't seem to handle the events to update the GUI
Well yeah, you need compatibility shims as well for legacy stuff. Filtering input, device emulation, etc. But ideally you have one SDK which encompasses all device groups and offers default mappings for typical genres. (First Person Driving, Overhead driving, 360° movement, etc.)
is it possible to chance key colours wiht the wrapper? 👀
Wait, wtf, you now don't do this on ARM devices anymore?
Did you mess up that bad in the firmware? 
Ah yeah the firmware still has the issue where randomly it just stops acccepting WootDev RGB commands...
Gotta unplug it and replug it to fix it
anyone know how the profile code is generated?
i made a script convert an image into the LEDs and i have to use another program that moves my mouse to the color text and the keys to apply the colors
wondering if i can just generate a profile code instead
example
@quiet root is this something we can provide?
youd have to generate a complete valid profile and use the profile api
We updated the firmware so that it can accept full 256 byte reports without splitting
Does the keyboard crash entirely, or is it just the RGB bits?
well, except it's kind of a breaking change
input still works, only RGB stops responding to commands
I did some RE before on the keyboard mapping packets, tho not the RGB, since there is an official RGB SDK, albeit those RGB changes are only temporary.
Okay? Do I need to alert you anytime I make changes 😛
It stays static on the last RGB data that was sent?
Yes, I'm like basically your unpaid coworker? 😛
Yeah, or on my profile colour sometimes iirc
but one thing I used to do was play Warframe with the thingy that translates the Chroma stuff to Wooting (not the official integration, one with full key coverage)
and sometimes it'd just get stuck on the last effect and I'd have to unplug and replug the keyboard
either a way to paste all colors at the same time or the code to generate profile codes
theres a profile api?
not meant to be use publicly but there technically is one
thats how wootility retrieves profiles and stores them
Then I can toggle the lighting without the ugly left/right split?
Hahaha, I fell for Wootility web
oh man the RGB on my Wooting is doing funny things since I plugged it into a KVM switch
these keyboards are power-hungry if nothing else
My USB controller could not handle 2 of them in the same row lol
btw is it possible to know what the arm soc on the 60+he is (other than its some 32-bit cortex m apparently)? (also idk if it is maybe printed on the board itself but can't really check rn because it would be painful to get it off from the case)
they aren't made to be run through USB Hubs either
that is so sad
I will probably plug it back into my PC proper, but I do have a mac device here, and it also needs keyboard, mouse, and HDMI when I wanna use that piece of shit 😄
does anyone know what usb HID codes the uwu uses? i don't own one so i cant check myself
You mean the product ids?
i mean the ones used by the analog sdk
All keys can be remapped in the Wootility, I think by default the mappings for the UwU analogue buttons are zxc
thanks
wtf, do these people not know what they're asking for?
they're gonna hate it so fucking much 😄
I hope, not in firmware
i think theyre gonna add separate option for it.
one would hope so
actually would be interesting if they were to add like usage statistics, would be real curious to know which option people will go with in the long run
my guess: disabled > rappy snappy > snap tap
Wooting mark guy leaked it
I feel like the Wooting guys don't know what SOCD means 😄
Both Rappy Snappy and Snap Tap are supposed to be algorithms to resolve SOCD

How about "SOCD Resolution: Further Down (Rappy Snappy)" and "SOCD Resolution: Input Priority"
Further down isn’t really SOCD how the definition used to be use though while input priority is yeah basically just socd but intertvined with rt
From what I understand, SOCD describes the event when two opposing keys are in the "pressed" state simultaneously (e.g. A and D). Rappy Snappy is, what I would describe as, a "SOCD Resolution Algorithm", which aims to resolve the SOCD event based on how far down both keys are pressed and "swallowing" one of the keypresses.
My poor USB controller 😄
btw., not that it's super important, but I would appreciate if the MIDI app responded to events by updating the "connected devices" on the GUI
Maybe I'll see if I can patch this in, might be a cool learning experience (for a language and framework I hope I will never have to use in my professional career.)
oh fuck me dead, this uses react
also, may I just say that automatic case conversions are horrible for outside collaborators (like myself)? I legit thought the "NO_DEVICES" event was never sent because I couldn't find other instances of this string. Then I saw that BS in the Rust file.
oh, i didn't see there is discussion here about this, but yes, fully agree, i made a thread in #1265136747470131263 about this, mostly just so that "Cancel Both Inputs" as a SOCD resolution outcome is hopefully not forgotten, as that one is also particularly useful in some scenarios. But yes, I'd love arbitrary SOCD configs, as Rappy Snappy -is- just a form of SOCD resolution, with the added variable of it being defined by pressure, not just on/off input state.
It's interesting that you'd want the firmware to explicitly cancel the inputs. I assume the software you're using it with does not handle SOCD itself (because that's typically the resolution I see in games)?
Yes, some (particularly older) fighting games don't have (good or sometimes any) SOCD handling, as there was always an assumption that they were being played using joysticks, which physically do not allow you to perform SOCD -- so when digital controllers were eventually created for them, it was a ruleset requirement that SOCD resolved to no input, as this was not possible otherwise
I wonder how much of "useful SOCD resolution options" will come out of this, because I fear this "Rappy Snappy" stuff is mostly just a marketing stunt (with the silly name and all).
i see the appeal of Rappy Snappy as, well, it being most-pressure SOCD resolution. And obviously Razer's Snap Tap, being latest-input SOCD resolution + Rapid Trigger -- I'd just hope it doesn't stop at just these two resolution options because they're "the most marketable"
more customization good
Razer's Snap Tap seems weird to me, I think it does more than just SOCD resolution
the marketing definitely works, tho, because it seems like everyone suddenly "must have" Rappy Snappy or Snap Tap (even in Discords for some smaller hall effect keyboard manufacturers like Akko and Keychron).
it does, it also does what Wooting calls Rapid Trigger on top of latest input SOCD -- releasing the key event as soon as the switch starts moving back to neutral position, not when it's past an arbitrary actuation point; and then using that as the inputs used for SOCD resolution.
This was me testing both. I'm not sure if I'm tripping and I might have to retest it, but the razer keyboard also seemed to input 'S' (given that my character is moving backwards).
which is really strange when you're just tapping A and D, so I definitely see why people are uncertain if it should be allowed in competitive play 😄
that's odd
well, can't see it, but it definitely does strange stuff
it's also not quite most recently pressed, since whichever is further down is also a factor seemingly
I certainly prefer that Wooting's option is easy to reason about
yeah, especially since Razer just claims it's straight latest-input SOCD + RT, if they're doing some extra shenanigans then that's just odd and not quite user friendly
in all the video material they put out with an input visualizer it does just trigger A/D, not S though, so idk
might be helpful to use one that's unaware of analog inputs
I don't think it's using joystick input in GTA V 
urg, why did I ever downgrade to using the stock version of the analogue SDK, now I once again can't deinit/unload the SDK without crashing 😄
...and that's why I originally designed my plugin as a replacement for the "wooting-analog-plugin", too
I already fixed this shit for you over 8 months ago 
whats the difference between "neutral" and having the setting off ?
Probably the funniest thing about Rappy Snappy is that it results in SOCD behaviour being the same as in "analogue-ready" apps, e.g. here is GTA V with analogue support patched in: My character moves to the left despite my input being SOCD (from a digital perspective)!!!
So, maybe if you worked on improving the analogue SDK — fixing the crash on unload issue and making the testing plugin not so Rustly-stable — and pushed it a bit more, game devs would handle this stuff for you 
Also, I realised the Razer default profile is some "game-ready" crap, where it basically ignores your actuation point when it notices you're starting to let go of a key.
If this could be change every time when I switch songs in osu that will be amazing!
Like gosu's livestream interface.
yeah i would make it do that if i could control wootility externally
i dont think its possible
Maybe need special rgb sdk from wooting?
i have exactly that setup with artemis: it changes colors with whatever song im playing on spotify. let me try and find a video of it
Wooting can develop a function that change rgb from input image or even video.
If so it will be the most fancy rgb kb ever.
if u find it i will check it out tmr gonna sleep now
i could probably make it video if the thing that changes the rgb is efficient enough
i dont really know if doing that for osu would work though. there are some ways to get data from the game but color stuff is hard probably
you can make it mirror the screen for example
if i find a way to change the rgb while using gosu memory i will make it work
there are osu overlays that use bg image
so gotta link it to my kb
here's a rough idea of what it looks like
does anyone know how to fix this
everytime i try to trash an advanced key
this pops up and it won't let me
is there supposed to be sound
no
the movement is just perlin noise, not audio reactive. you can make it reactive but i dont have mine setup like that
can you link the tools you used?
thx
Does artemis work with wooting arm boards after the firmware update? 
Good
wow love the example artemis rgb plugins
just use the wooting rgb sdk or talk to the HID directly
all these RGB tools are just gonna hold you back more than anything imo
i know wooting has their sw open source, and cad files, but does anyone know if they publish ecad stuff? schematics etc?
decent amount of example plugins here: https://github.com/Artemis-RGB/Artemis/network/dependents
where is that dead link, wiki?
we dont
Fair enough
Any considerations for a Go wrapper in the future?
Just make your own with FFI?
Hmm, could be fun
@placid ledge I hope I'm not annoying but given how the SOCD stuff is seemingly "on hold" now, do you maybe have the time to get https://github.com/WootingKb/wooting-analog-sdk/pull/70 over the finish line? It is really annoying that the stock Analog SDK still crashes on unload, especially when I provided a patch for it over 8 months ago.
Unfortunately, I'm never not busy. But I've taken another look at this and have merged it
It'll take some more time before I have the space to make a new release, but I'll try and not leave it too long
Now I guess we only have to wait until Wooting releases a new keyboard 😛
(Which probably wouldn't be a good move given that the 80HE is still chugging along)
I just wish I had something to do, just waiting for incompetent-ass DHL to finally give me more hall effect keyboards to suffer with 
Ah wait, I just realised the 80HE isn't in the SDKs yet, so that one will probably be the next 
I'm having some strange issues when working with the analog SDK. At some point it suddenly starts taking 180s to initialize and a reboot is required to fix it.
[2024-07-26T19:01:15Z TRACE wooting_analog_sdk::ffi] wooting_analog_initialise called
[2024-07-26T19:01:15Z INFO wooting_analog_sdk::sdk] No plugins found in "C:\\Program Files\\WootingAnalogPlugins"
[2024-07-26T19:01:15Z INFO wooting_analog_sdk::sdk] Loading plugin: "C:\Program Files\WootingAnalogPlugins\wooting-analog-plugin\wooting_analog_plugin.dll"
[2024-07-26T19:01:15Z DEBUG wooting_analog_sdk::sdk] Plugin got plugin-dev sem version: 0.7.1. SDK: 0.7.1
[2024-07-26T19:01:15Z INFO wooting_analog_sdk::sdk] Plugin and SDK are compatible!
[2024-07-26T19:01:15Z DEBUG wooting_analog_sdk::sdk] We got it and we're trying
[2024-07-26T19:01:15Z INFO wooting_analog_sdk::sdk] Loaded plugin: "Wooting Official Plugin"
[2024-07-26T19:01:15Z DEBUG wooting_analog_sdk::sdk] Loaded 1 plugins from "C:\\Program Files\\WootingAnalogPlugins\\wooting-analog-plugin"
[2024-07-26T19:04:16Z INFO wooting_analog_plugin] Found and opened the Some("Wooting Two HE (ARM)") successfully!
[2024-07-26T19:04:16Z DEBUG wooting_analog_plugin] Started timer
[2024-07-26T19:04:16Z DEBUG wooting_analog_sdk::sdk] SDKResult(Ok(1))
[2024-07-26T19:04:16Z INFO wooting_analog_sdk::sdk] 1 plugins successfully initialised
[2024-07-26T19:04:16Z TRACE wooting_analog_sdk::ffi] catch unwind result: Ok(1)
Initialized successfully in 180.5000753 s
Here's the output with full logging enabled.
Looks to me like it's a shared memory access problem
Can't say I've ever seen that before. Have you tried building it yourself from develop branch? There are a few good bugfixes for the "wooting-analog-plugin" in there.
