#🤖│community_dev
1 messages · Page 14 of 1
@grizzled wolf And just updated now. 😉
hehe
didn't get to it earlier today, and was off playing at a session
@steel ruin Doesn't detect - still needs sudo?
It doesn't detect my w1
Are you in the plugdev group?
That group doesn't exist on Arch
so I have been sudo-ing until I get a chance to work on a better solution
Ubuntu thing - the plugdev
@grizzled wolf I don't actually have a Wooting yet, so my testing is very limited. I can basically verify that it places files in the proper places and runs. :p
I was trying to help Jeroen and looking at how others did it (I have roccat stuff) but I have been busy
ah
yeah - I am keeping it as an appimage with an alias for now - I am working on making a long term stable solution
Hm. Seems like I should use input, but that is listed as a pre-systemd group, so there should be a better method to use now. https://wiki.archlinux.org/index.php/Users_and_groups#Pre-systemd_groups
yeah - I don't think there is a pre-existing group that fits
the roccat software adds a roccat group
and I think something like that for wooting might be the way to go - then it can work on any distro
although not sure how that works with appimage
like I say - hoping to sort out a long term solution
@grizzled wolf I'm about to push an update, can you test that?
yeah - no problem
@grizzled wolf Pushed.
(May need udev rules reloading, and maybe replugging of keyboard.)
Thanks for testing!
np
Anyway, I would definitely prefer a non-AppImage way of distribution too.
No need to duplicate all these libraries on the system.
And no sudo needed anymore. 😃
@grizzled wolf If you feel adventurous, https://gist.github.com/Freso/b250e90d89a5d0e729336597de0ee5fe is my current state of trying to unpack the AppImage. (Doesn't work yet.)
Squeeck
Awesome perms are fixed
Hey, new channel
new channel who dis
it's the dev cult channel
Correct

I just looked into the API, do I see correctly that there can be only 1 wooting keyboard connected?
I will wait to play with it until my Wooting two arrives 😃
@meager seal technically its already out.
Just not the normal download 😄
Its downloadable 🤷
Just not stable release
but its still a release 😄
He said he was going to do it last thursday
So erm, rip.
I'm just home from holiday, I should be able to get the release out tomorrow
unsure if you can call that "native analog support in csgo" but uhh https://streamable.com/tz2kj
@little monolith follow the guide?
that's without the joystick thing 😛
i can send binaries in case anyone wants to mess around
is that in c++?
yea
so much auto D:
i like auto
I hate using var/auto/whatever so much, it's so unsafe, but I know it can be easy to use and people are used to it from other languages
it isn't really unsafe if you know what you're doing
for example,
auto i = 0ull; here you're still specifying the type in the second operand (ull - unsigned long long)
and ull is just easier to type than unsigned long long
well in that case you could just make ull a makro or something if you use it that often, because in a different line I only know that i is from type auto
in most of the cases you still can hover over the variable with your mouse and it'll kindly tell you the type
even in a different row than the one where you initialize it? and what editor is it, Visual studio?
and yes that's vs
__declspec(__nonvolatile) auto get_data() const noexcept ->
std::enable_if<!0 != !1, std::add_pointer<std::remove_pointer<minefield_data*>::type>::type>::type
perfection
hm, maybe last time I tried it it was a different c++ or VS version, still prefer typesafety personally
i'm using vs2017
@little monolith You can optimise your code by just change "(w / 255.f -s / 255.f) * 450.f" to "(w - s) / 255.f * 450.f" that would be automaticly optimise to "(w - s) * 1.764705882352941"
@little monolith And you can spare the clamp stuff and optimise it even more when you just filter the input values just before you use it for the calculation.
See full code example:
const auto w = read_analog(2, 2),
a = read_analog(3, 1),
s = read_analog(3, 2),
d = read_analog(3, 3);
// limit values between -450 and 450, just make sure auto produce only signed integers
cmd->forwardmove = ((w & 0xff) - (s & 0xff)) / 255.f * 450.f;
cmd->sidemove = ((d & 0xff) - (a & 0xff)) / 255.f * 450.f;
This produces less furcation in the compiled code and eliminate the chance of a wrong prediction for the clamp stuff. Because clamp has at most two comparisons (according to https://en.cppreference.com/w/cpp/algorithm/clamp ). You only have to check that "255 / 255.f * 450.f" don't produce a value higher than 450.f because of the intern roundings. But I expect there is no problem with that.
The only "big" disadvantage with this is that its cut off the original value when it is out of range. Like if the value is 256 for example, it only produces 0 and for 257 it produces 1.
@little monolith sick, I’m not a “coder”, so what’s effectively happening.
It just read the analog values of the keypresses and make a transformation of the range from a single movement of one direction with 0 to 255 to a corresponding movement of two directions (forward movement minus backward movement to get the overall movement of one axis) with a range of -450 to 450 and he use this as a native input for the movement of the game.
The only question for me is: Where are any problems related to VAC with this method?
If he's catching input, changes it, then gives that to the game there should be no issues, unless he grabs something from the engine?
@wide nymph i'm basically hooking game's movement function and changing the forwardmove/sidemove values to which i've read from the keyboard.
@chilly oar technically - it is a cheat, practically - not really. you should be completely fine if you use -insecure as a launch option.
it is technically a cheat because we're hooking a game's movement function which gets called every tick, and, surprise surprise, cheats take advantage of that too.
VAC can't analyze the behavior of your module where the hooked function is located. they also have a VAC module they stream to accounts with low trust factor which actually catches this kind of hooks. i'm not a valve employee so i can't be 100% sure with what i'm saying right now, but you should be completely fine if your trust factor isn't incredibly low due to past VAC bans in cs:go on other accounts you have.
That was a really good explanation, thx.
@hybrid lake there are some weird keyboard crashes on wooting_rgb_reset - happens randomly, can't tell when and/or why exactly that happens. only resets half of the keyboard's rgb colors, then the keyboard decides that it's enough and hangs completely.
yep, that happened 3 times for me already
but at least cool tracker has a cool visualizer now: https://youtu.be/kX5gueO9Roc
@little monolith hey that's pretty cool, me wants
@little monolith thanks for the explanation. I see how it makes the difference now, no calling Xinput but grab it straight by the balls for movement.
Cool stuff on RGB 😄
Looks like we have another candidate to get featured
gained quite some knowledge during the making of the visualizer, since i basically was taking raw sample data and processing that
the first video was synced very poorly with the audio though, that's why it could look worse on video than it actually does in person
this one should be synced very well: https://www.youtube.com/watch?v=R-8jFc-mttg
{
printf(" > wooting keyboard isn't connected\n");
return;
}```
@little monolith yikes? 😛
Love the projects btw, your fft is a lot smoother than mine
well, if you don't have a keyboard and decide to try it - i'm surprised lol
do you have an effect active when the reset crashed the keyboard?
yep, wave
twice it reset it to the selected one (pink) and once it went for the default (rainbow)
all 3 times only half of the keyboard was reset though
Alright interesting, I'll look into it
could it be because i might be using wooting_rgb_array_set_full after a reset?
i'm unsure if there are race conditions
but if console event handlers are slow - there sure are
void console_handler(uintptr_t type)
{
if(type != CTRL_CLOSE_EVENT)
return;
if(reset != nullptr)
reset();
ExitProcess(0);
}
actually no
i doubt it's a race condition
I don't think it should
also there is some weird stuff when wooting_rgb_array_set_full just ceases to work after a couple of program open-close iterations
plugging the keyboard out and back in seems to fix that
i'm probably doing something wrong
oh wait it could
I don't close the handle when you do the rgb_reset, shit
so when you call the array again after you "close", it will still go through. Your effect has probably started in the meanwhile and the keyboard doesn't deal well with multiple RGB going on at the same time
yeah, i see what's wrong
if (!pleasedontapplytheeffect) // alright buddy
{
array_set_full(reinterpret_cast<uint8_t*>(kb_array));
array_update_keyboard();
}
}
}
void console_handler(uintptr_t type)
{
if(type != CTRL_CLOSE_EVENT)
return;
pleasedontapplytheeffect = true;
if(reset != nullptr)
reset();
ExitProcess(0);
}
cba recompiling the sdk lol
actually i'll fix that
can you leave it and try it with this?
Although
It shouldn't crash now and will show the array_update
Still not ideal, but at least expected behavior 😛
alright, gimme a sec
is that an x86 dll?
should be x64
recompiled it myself, there were either weird export names or a x64 dll
yeah, my program is x86
whatever, i'll test that now
don't know about the weird freezing thing but wooting_rgb_array_set_full still doesn't seem to work sometimes
resetting still works fine and the current wootility effect stops, but wooting_rgb_array_set_full doesn't wanna work
could it be because i'm not handling something correctly?
starts working after not applying any effects for some time and trying again... weird
doesn't seem to crash anymore though
so that's good
did you trigger the update, or did you set auto update?
Do they both return true?
unsure, don't check the return value
let me see
both functions return true
screenshot taken when it wasn't working again btw
So it's not working if you try to update after a little pause right?
With the program still running in the meantime
it always works fine when i first launch the program
then i close it and open it again
after adjusting some code, for example
and it sometimes just ceases to work
it being wooting_rgb_array_set_full
on the other hand, if you wait for like a minute after closing the program
and then open it
it always works perfectly
Alright, I'll look into it later. Don't have the keyboard with me right now
Thanks for the description
Anyone here with some experience in dealing with DLL's? Specifically installing, removing, updating?
I'm working on an installer so they can be updated client side, but could use some advice
Do you guys use HID drivers or your own?
@hybrid lake
What do you want to know exactly? Like where to put them?
Sorry, don't have my Two yet so I don't check often.
@cyan saddle so I use this now for the DLL install: http://nsis.sourceforge.net/Docs/AppendixB.html. It puts them nicely in the SYSTEM32 folder, where I think they belong? I'm just not sure how to work with 32-bit and 64-bit. I read something that with some windows folder redirects it can work with the same filename? I'm also not sure yet how to do versioning. DLL versioning seems overly complicated, so I'm thinking about running a getVersion() in the SDK
Any common pitfalls will also be very helpful
There are a couple ways to handle it.
put 32bit ones in SYSWOW64, 64bit ones in SYSTEM32 if the system is x64
I'm not 100% on it, but I'm pretty sure x86 has a 32 bit folder and amd64 has a 64 bit folder. Another approach is to use different file names for x86 and amd64.
DLL versioning is just a pain, that's basically do what you want and try and to remove interfaces, but when they are deprecated you can remove them from headers and have stubs in the DLL.
Should have environment variables for where to put things.
And you can always print PATH.
windows will always handle the different paths if you just hardcode c:\windows\system32\epicdll.dll wherever you're going to load your dlls
you shouldn't hardcode this types of paths in the first place though
LoadLibraryA does look for dlls in system32/syswow64 accordingly
If only MSDN was better.
yeah, and the patented aspx sites are so fast 😃
The examples are lacking and the documentation is lacking.
Maybe I just try to do obscure things.
why would you need examples with winapi functions
argument description is usually all you need
Some function params are just the name and nothing else. Guess it's because I do weird things. :-P
Got to go.
there are sometimes undocumented functions but they mostly have documented wrappers
"Reserved"
But clearly they used it because it changes based on stuff.
One simple example that's kind of goofy.
Not sure what you mean by versioning in this context. If it's just how to number versions, please, please, please use semantic versioning. (semver.org? Can't remember the URL detailing it.)
Alright made a PR with a clear split between the 32 and 64 bit version and added windows versioning. We'll follow semantic versioning, so I think the last number in windows versioning will be ignored
Feedback here please 😃
I'm also adding DLL installers to the Wootility. I've made some NSIS installers scripts. They're in the Wootility repo, but I can also make them into a separate open project if people are interested. I would love to have a release + installer creation automated process
Does anyone know whyhid_read would hang forever?
I tried sending the info command, but getting a response doesn't seem to happen :/
*GetVersion
I'm sending this with hid_write \x00\xd0\xda\x01\x00\x00\x00\x00\x00
Then using hid_read(256)
Sending the commands is done with hid_send_feature_report
bool wooting_usb_send_feature(uint8_t commandId, uint8_t parameter0, uint8_t parameter1, uint8_t parameter2, uint8_t parameter3) {
if (!wooting_usb_find_keyboard()) {
return false;
}
uint8_t report_buffer[WOOTING_COMMAND_SIZE];
report_buffer[0] = 0; // HID report index (unused)
report_buffer[1] = 0xD0; // Magic word
report_buffer[2] = 0xDA; // Magic word
report_buffer[3] = commandId;
report_buffer[4] = parameter3;
report_buffer[5] = parameter2;
report_buffer[6] = parameter1;
report_buffer[7] = parameter0;
if (hid_send_feature_report(keyboard_handle, report_buffer, WOOTING_COMMAND_SIZE) == WOOTING_COMMAND_SIZE) {
return true;
}
else {
wooting_usb_disconnect(true);
return false;
}
}```
how did you enable highlighting? only knew you can put it in a box
Ah, now I get data back
Seems to be garbage though
Everything is the same, except 4 bytes which seem to change at random
uint8_t buf[128];
uint8_t buf2[128];
int a = hid_read(device, buf, 128);
a += hid_read(device, buf2, 128);
Oh, maybe this is why
I can't seem to send a big feature report
When I set it to 129 bytes, hidapi returns -1 with no error code
It seems 8 is the biggest I can set it to
Oh nvm I'm an idiot
Not sure where I got 129 from lol
I'm getting all this from the JS in your app, so I could be completely wrong
But is there supposed to be magic bytes at the beginning of the response?
ty
Bots can do hidden links
@hybrid lake You an surround links with <> to make them not preview. :x
It's like: [MW0, MW1, ResponseResult, Data (123 bytes), CRC0, CRC1]
enum ResponseResult {
UNKNOWN = 0x66,
SUCCESS = 0x88,
ERROR = 0xFF
}
MW = magicword
Yep
But the only thing that changes in the second packet is garbage
4 bytes near the end
The first packet is the same every time
Maybe its my distributions hidapi, since it also claims it only read 64 bytes each time
trying to get the example working on Ubuntu 18.04
Running node basic-example.js gives an error that it cannot find './libs/wooting-rgb-sdk.dll.so'
i guess i need to build the sdk manually, and stick it there
how do i build it?
the rgb sdk example
Is the API going to have a list of keys with positions and functions for connected keyboards? Would be handy since there are multiple versions of the keyboard.
You can try the makefiles from this branch: https://github.com/WootingKb/wooting-rgb-sdk/tree/linux-build @sweet peak
@cyan saddle a list as a return from a function or just a reference somewhere?
Yeah, like the Corsair stuff has a function that returns a printer to a struct.
Basically this:
typedef enum{
...
} KeyFunction;
typedef struct{
KeyFunction function;
double x;
double y;
double width;
double height;
} KeyInfo;
typedef struct{
KeyInfo* info;
size_t keyCount;
} KeyInfoSize;
KeyInfoSize* getKeyImfo();
Could set it up to use a pointer to the size, but that's how they do it. Allows for you to never duplicate the info in the library since the DLL data can be read by the loaded processes and the DLL memory is copy on write.
That's not the exact definitions they use, but it's the same idea.
I'll try that Jeroen
needed to install libudev-dev libusb-1.0-0-dev
now i get
Error: Dynamic Linking Error: ./libs/wooting-rgb-sdk.dll.so: undefined symbol: udev_new
I'll try again tomorrow.
Uhm, running it on Linux?
trying to
libs/wooting-rgb-sdk.dll.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0438ecbcc2d18bd74805a30ae46c0e006c3217de, with debug_info, not stripped
Not sure at all.
Sorry, what are the include statements to include the Wooting API header files, when you have the *.dll loaded into your application properly?
Which one do you want?
I see all the color gradients in the software code, are those hardcoded into the keyboard or determined by the utility?
They're in the wootility
Made a beta release with the SDK installers, see #archived_wootility_beta_feedback 😄
See <nonexistent channel>?
What do you think about that layout function?
oh it's hidden
New beta release: v2.5.0
- Windows: from the general settings you can now install the SDK. It will take the latest version and install it to your computer. You can also update them with the same button when there's a new release. We let the user install the SDK's, because it will make the live of a developer a lot easier. They will not have to worry anymore about packing DLL's, different version etc.
- Fixed an issue where new keyboards with old firmware would not be recognized.
Get it fresh from: https://s3.eu-west-2.amazonaws.com/wooting-update/wootility-win-beta/wootility-beta+Setup+2.5.0-beta.exe
(Sorry, no auto update for this beta)
What layout function?
The SDK one where you can fetch the key layout of the keyboard(s) attached to the computer.
I got a good response!
Sadly the keyboard claims there was an error :(
But the response buffer is right!!!
0x10 0x11 is the fw version?
Wtf is the point of the KeysOffcommand lol
Paanicing trying to find another keyboard was fun :P
I thought it would turn off the light or something
I like it @cyan saddle, there might be some issues once you're able to change the layout though. Guess the coordinates will fix that for position based effects
I think it's essential once you have devices outside of keyboards
It's a per device thing, and if you change the layout it just changes what's retuned.
As soon as I get my Wooting Two I plan on making a Java wrapper. :-P
unresolved exports linker error when using the Wooting dll files, any ideas please?
the exports are unresolved
Thank you.
How would I fix this?
you're linking the library wrong
Thank you.
Please if you can, is there some where I can revise linking *.dll files in VS 2017?
you can use LoadLibraryA and GetProcAddress to link it dynamically
const void* sdk_mod = LoadLibraryA("wooting-rgb-sdk.dll");
if (sdk_mod == nullptr)
return;
const auto kbd_connected = decltype(&wooting_rgb_kbd_connected)(GetProcAddress(sdk_mod, "wooting_rgb_kbd_connected"));
if (!kbd_connected())
return;
here's an example
Thanks, but I am using the code inside another .dll.
what stops you from using LoadLibraryA?
Because I am making a wrapper dll.
Are you using the lib file?
So you just copied the code in the project to a new project? @pearl tartan
Also what is the error exactly?
what is the point of making a wrapper dll of a dll
because i really don't see why you can't just use the existing sdk dll
for Lua.
For Java.
The problem is how the extensions work.
Basically the code you write to wrap them needs very specific definitions and the library dlls just don't have them in a way that works.
i mean why would you create a wrapper dll
isn't it extremely unpractical to include both dlls in your project?
For example:
public class Hello{
static{
System.loadLibrary("hello");
}
public static void main(String[] args){
helloNative();
}
private static native void helloNative();
}
Requires a C function something like this:
void Hello_helloNative(JNIEnv* env, jclass klass){
printf("Hello from C!\n");
}
Which must reside in a DLL/shared object.
no not really, you can just replace those with any arguments with the same size
What do you mean?
(Just got a call, brb)
you don't need the specific definition
Yeah you need those params.
But your lib doesn't have the same names, same params and the first two are determined by JNI and not Java.
if i was you, i'd recompile the sdk with 2 extra parameters
Then I'd need to rename functions and it wouldn't be easy to update for bug fixes and such.
java's way of calling external functions seems flawed at best
kills any flexibility
Java 12 will (hopefully) have much better native support, not even requiring the extra library.
Don't have my hopes up though, it's been pushed back four times already.
It's from Java 1. :-P
if you introduce support of external functions you might as well do it properly
I have only started looking into to native methods in Java.
Because it's already a great language.
Java is the only language I know, really well.
eh that's not the greatest logic
Why not make something great and popular better?
that way nothing needs to be done better if it's already good enough
Also, got to go for a bit.
Error message: invalid or corrupt file: cannot read at 0x318.
For this Wooting dll: wooting-rgb-control-64bit.dll. Any ideas?
now it is giving me these errors.
I was not the {} were black.
The error is coming from an include file, sal.h
No matter what you do there in your code, isn't gonna fix it
An extern C might have
Since there's different syntax
note: C++ does not support...
Looks like something isn't being extern C'd properly
i might just try downloading a fresh copy of the header file and try again.
Maybe add the extern C to the header file?
Yeah I'm not sure.
Does MSVC not tell you from header included in foo.h?
LOL
Wow.
That's a new one
I found and s at the beginning of the header file, properly from when I went to save it did that.
Something is not right.
Do you have the Windows SDK installed?
Did you remove default library linkages?
It's trying to link but isn't finding it?
This might be a fix, just trying it now.
O_o
You do clean the build right?
I made an untested Linux PR for the analog API, if anyone can test I will do the same for the RGB version.
https://github.com/WootingKb/wooting-analog-sdk/pull/5#pullrequestreview-145450120
I already made one for the RGB
Ah.
Though I think your win32 check is better
My Makefile is also a little more dynamic, you don't have to edit it to add files and such.
Yes.
Globs?
Auto finding files
Yeah IDK
Just replace the wildcard.
It's just what I've been taught
I knew the reason at some point, thought something like that is such a stupid reason and went about my merry way.
haha
I do use the version that only executes it once at least.
Hard to break habits though
Any ideas?
Yes.
How odd.
@jade drum ?
I know nothing about windows, just guessing lol
Rebooting might fix it.
It said corrupt file in your msg, I think windows runs fsck or something on boot
Sometimes the file cache gets a little overzealous.
Thanks I will do, but not right now.
Do I need the .lib file as well?
Ohai, I'm working on an input display in Unity, I'm using the unity example on the website but it's not returning anything other than 0
[DllImport("wooting-analog-sdk", EntryPoint = "wooting_read_analog")]
public static extern byte wooting_read_analog(byte row, byte column);
Debug.Log(wooting_read_analog(2,2));
Only returns 0 >.<
Anyone has any idea why? running the 64bit dll, not sure what other info to give
Oh, Unity's not recognizing the keyboard. nvm then I'll fix
Using the SDK linked on the tutorial page didn't work. When I rebuilt the x64 one myself it works. I almost gave up...
However wooting_read_full_buffer crashes unity, which I would kinda need >.<
:3 wooting_read_analog works perfectly, the full buffer doesn't, if I want to rebind keys the full buffer would be super good :3
Is the buffer you pass as reference big enough? Should be 32 bytes @reef wyvern
I pass in an empty byte array and the buffer length of 32
@hybrid lake
I might be the stupidest person alive
Yes I'm just stupid, sorry for wasting your time. Generally I can debug stuff but since unity just crashes I couldn't.
What I did was basically
byte[] data;
wooting_read_full_buffer(data, 32);
Which obviously won't work because data's not initialized
Thanks for your time ❤
No worries man, dealing with buffer sizes really sucks. I wonder if there's a way to make the interface easier
Please let me know if you make something in unity, we're really in dire need of good examples
I'm going to make an input display, seeing if it can work in the background while I run other games just to show my inputs
Buffer sizes are not that bad to me.
since I'm used to unity (been working with it for 7ish years)
Just not used to native dlls
The number one thing when working with native code: Watch your memory!
Oh, pro tip for the SDK people:
If you need to change the params of a function, you and just remove the old one, put in a new one that is called "[command]2" or something, and use "define" for the original name. The compiler will transparently use the new name when compiling, and you can still use the old one in your code.
What would you normally expect to work with? @reef wyvern
Also, does wooting_rgb_array_set_single return true if the auto_update flag is set to false?
Not clear from the docs if it did or not.
Also good point, I should check the bounds....
yes
Alright.
Anyone have a graphic of the keyboard's top?
Like if you put it on a flatbed scanner.
Wait a sec.
Found one.
That will work for me.
:3
@hybrid lake I kinda just do game programming, mobile games and I don't handle the android/ios integrations. Most things we have are written in c# and we have the source code in the project 😛
? you dont like VS
It loves doing things like this.
sexy
Planning on making a SVG version so I can properly center things and such.
Why wouldn't one use VS? I love it :3
very pretty
Aren’t we able to provide some resources for this @hybrid lake ? Hasn’t @dawn totem made something like above before ?
I just ended up using the layout in the readme, I did change it some since I posted that. I will make it look better, that was the first one that worked. :-P
Okay so using unity for a background process is waaay too heavy 😛 Need to find myself a graphics library that can run some smaller effects
Not an expert at this stuff, but I say that is pretty okay so far.
Uh-oh.
Coding and design, props 😛
What do you mean by that?
as in, cool job to not only make a small program but also design the keyboard layout
Most people can only do one thing, that's why there's a term "programmer art"
I think I broke it.
Does anyone happen to have a program I could use to test this against?
One that is precompiled so I can test the simulator DLL I made.
Just one that uses the RGB SDK so I can try throwing the simulator DLL at it to test the simulator.
The DLL I made should be binary compatible, but I have yet to actually test if that is the case.
oh, no idea tbh
After that I will probably try and do some sort of variable framerate thing on my app to save resources. Make it only really update it when there is a change instead of at 60Hz, which I think it is running at right now.
Then I would need to do more hardening against protocol errors.
So, I'm thinking my daily driver has become Linux. Once I get my Wooting two I'll be more than happy to try and get it working well on there.
@cyan saddle uhh, waiting for you <3
I'm waiting on Wooting.
@hybrid lake is on a small vacation atm 😃
Noo, not the pasta!
hi there, I just learned about Wooting and I'm super excited about it 😛
what's the state of the SDKs on Linux/Mac?
that's great! it almost sounds too good to be true hehe
ah sorry :) I meant pull requests in github
Ah, hopefully a founder can answer that soon.
@hybrid lake is it possible for us to get something to disable certain digital keys using the sdk?
@inner anvil Yes, they accept PRs on Github. SDK uses hidapi library to interface with the keyboard and that has known issues with composite HID devices on Linux.
thanks for the info! I'm gonna get one and start playing as soon as I finish moving
PR's are very welcome. Our position on linux is mostly: we support it wherever we can, but because of our limited resources we have to focus on windows first. Any input is greatly appreciated
@little monolith maybe in the future, now it's pretty hard to do from a configuration perspective
We're working on the new DKS system, which involves this part though. I'll see if I can bring this into the design
would be really cool! 😄
What do you want to use it for?
@hybrid lake that position is more than most companies do, much appreciated 😃
I could use that feature too, I'm making this: https://www.youtube.com/watch?v=yBaa21Wb2mQ https://www.youtube.com/watch?v=0gFbdMSwbb0
@hybrid lake i wanna make the keyboard connect to my android phone using a running server on my pc and i'd want some improvised mode switch
which would disable all keys
so i can type on my phone
but not on pc
it's hard to explain
That is really cool @inner anvil, we're in dire need of some sort of MIDI plugin for our keyboard
@hybrid lake thanks! 😄 I'm almost ready to release the fist version. Then I want to use your sdk to add support velocity and some rgb feedback on wooting keyboards. I can't wait to start playing with this 🤓
Question about the drivers, is this a good way to look for keybinds to trigger more python code?
like if I wanted to incriment a file that was just a number every time I hit a hotkey?
OH SICK. So I can listen for FN+ somthing?
am I allowed to redistribute the dll I just compiled?
You can use it for this @autumn plover, like you said it will allow you to check for the FN key
Feel free to post any questions you have
You're just the guy I was hoping to talk too actually
I got this "up and running" (I think) but it says my wooting ins't connected so probably not.
@wicked grove @hybrid lake So what I'm doing is implementing a little script that will listen for a hotkey then read a number from (the first line of a file) and increment it by one, then write the new number to the file *(I already know how to do all of that), I just want a kill counter in OBS that doesn't cover up a large area of my game lol
I got it
I was running the
x64 version of the dll with the x32bit version of python
sorry for the dumbpotatoe question.
xd
@wicked grove Okay real question now, I got it working, it says my wooting is connected, but when I run the program it always says my key I'm test-reading from is at "0"
I haven't tried out the analog reader yet
@eager root please don't be cocky ;)
Plus this is very tech specific, we don't want to fill it up with Memes and jokes
@autumn plover I had a similar issue, I rebuilt the .dll myself and after that it worked
¯_(ツ)_/¯
Well, i can't figure this out :/
took forever but I finally got it to work
Still can't figure out why I can't get any dll to work though. this is directly via hidapi :/
Anybody else with the same issue, and otherwise does @hybrid lake have a troubleshoot step to find out why it's not working.
@wide nymph my issue is that I don't know what i'm doing
Alright, that'll make sense 👍 Just like any programmer out there 😄
@grizzled wolf compile the dll yourself, use LoadLibraryA and GetProcAddress to get exports
LoadLibraryA and GetProcAddress ay? Ok i'll check that out
Now then, time to get things done
wanted to make a quick and dirty.. (picture for easy understanding)
1/3 octave audio spectrum analyser on the wooting
using Open Sound Control (fancy MIDI) but osc just seems too slow, using oscpkt
I think the wooting itself handles the changes quickly enough
maybe that's useful info
Musical keyboard?
Nah, just a visualisation for fun
For music work i'm just making a controller for the program
controlling the timeline, scrubbing, editing etc etc
oh that's pretty cool
i just got the new das keyboards, didn't realize the wooting could do similar with some programming
@peak vigil https://dev.wooting.nl/ you can do quite some things using the SDK
fuck yes dev contest
finally something to spend time on
i really like it tho, two of the favorite things combined
now that i also have motivation
@meager seal must i submit the source code?
because i would just submit whatever i wrote in past but it's all spaghetti and i'm ashamed
"If you cheat, and we find out, your are disqualified. "
🤔
for anyone thinking to do a musical instrument, i suggest you do not do a piano keyboard, instead make it play chords (you'll have to borrow someone else's code as it's a lot of design to make it useful)
Or if that's out of reach: an isomorphic keyboard (so anyone can play and you benefit from the rgb)
As for the virtual instrument itself i suggest you do an organ (as see brackets above and that's a good use for the depth sensors as velocity is problematic)
https://juce.com
have fun
Or... make a 1/3 octave spectrum analyser (windows media player visualisation) but that has the issue of having to either making your own media player or using a virtual audio cable that is not opensource or the new windows 10 audio routing pannel
low-key submit aurora to the contest for the memes 😩
"Entries must be original and made by the person submitting them"
That just means you did not steal the whole thing from some one else right?
@meager seal Can I DM you? Need some critique about an idea for the dev contest as I'm still learning how to code properly
Whats up with the "at least 56 years" spotlight on the dev portal?
@ whoever was spelling things under the post, I removed a couple of my reaccs so you could finish ur thing ❤
On announcements?
I suppose I should continue with my simulator even though I can't properly test it. :-P
After school stuff.
testing is overvalued anyway
I don't know if it even half works.
got 93% in my shader exam and I had one mistake that made everything insisible LUL
so I had no idea if even one single thing worked lol
I didn't even know there where shader classes.
it's the last topic before the bachelor thesis
So can we read the gyro yeet?
wut
Is there a gyroscope in the keyboard or am I going insane?
@hybrid lake @dawn totem omg
u r going insane
Slowly though, so that's nice.
You probably guessed it, this was an April fools :)! --------------------------------------------------------------------------------------------------------...
Oh I had to disable that
the ball bearing rolling inside drove me mad
tfw you thought this was real and not just a jab at the steam controller
yay me
It uses throttling for digital commands. Which makes me wonder, how can i make it send pc keyboard data instead, so that you could have "analogue emulation" for wasd
preferably something that doesn't trigger anti cheat
And like.. something that actually works because I'd think direct input would refuse to read a software keyboard input
But can you analog through the timeline
@autumn plover Reaper
oh shit, are you the dude who posted the picture of the seaboard
or was that in another discorb, my memories don't so good.
@dawn totem The docs don't make it obvious if I can, technically the input type for it is float
@autumn plover probably not me
cool
@grizzled wolf Someone recently I was talking too I reccomended reaper too, I was just curious because it's the daw I use. That's cool what are you doing with reaper if you don't mind my asking?
I... am switching to it... for 2 years now, busy with other audio related matters for now
Cool :3 so far it seems to have the most of what I need but audio is just a hobby for me so I'm still not sure about any of it yet 😃
it is the least elegant daw out there
but it has almost everything you'd ever need, pretty much why i want to add wooting support to it, it's that uncomfortable
maybe it's different on linux/mac but on windows the keyboard context is torture
TBH, the whole thing feels kind of tortuous to me but unless ableton gets MPE support I'm kind of just rolling with it lol.
wait a sec
Why do you need mpe?
You have an expressive controller? (which one)
Wooting one and two added to the list of MPE devices on the market, that makes it 4
@grizzled wolf Seabord
*seaboard
Fun fact, you're literally doing the thing I was imagining getting a wooting for
I wanted to do midi stuff but I'm a dumbshit
😂
someone already made a midipiano.exe
@autumn plover and it lags a wee bit, I would think because of the velocity calculation (you need several values and over usb that's quite a bit)
oh you have a roli? neat
@autumn plover i can give you my spaghetti.sln file for reaper
if you'd like
could probably make a neat and tidy wooting to OSC thingy but i don't even wear hoodies
keeping track of projects and ideas, funny things, an insight into technical fortitude
@autumn plover So do you need the sln file? i'd like someone to remove the hidapi and add the wooting analog api
you could make it send midi over osc
Every time I've tried to read about the Photoshop API I failed to find any real information on it and gave up
I want that to be an easily accessible thing, so bad. at this point there's a lot of like little Graphics technologies that are missing from Photoshop that could be implemented with plugins if that API was accessable
I'll take a look. Probably won't get anything done with it. I'm still struggling with menu controls for my little game
nah i just meant for reaper
I don't even know what the photoshop api has
@autumn plover https://github.com/kurasu/Surge
it's open source with MPE support.. do you want that hoodie?
Who is planning or currenmtly making something for the code it challenge. Would be cool if we can show something tomorrow during the stream
i wish but i'm super far away from home
Alright, finally changed the api from hidapi to wooting.
Had to comment something out in another api header file for some reason
can't convert from WCHAR * something something
If someone needs a wooting to OSC bridge, ping me
@grizzled wolf
ping
wooting data comes in, open sound control data comes out
it's basically midi over udp but with human readable messages
and no limitations
that is.. outside of not being in every midi capable program
Ah
@grizzled wolf switch from unicode to multibyte
@little monolith thanks that worked
huh, right.. i need to figure out how github works to submit to the contest
it was said on the steam that everyone will get a Fugl game key
everyone who submits..[if it's ok]... gets the fugl key
well he project folder is 120mb with everything included
i think i can cut that down by having other apis linked to other githubs?
doesn't use github
I don't use github
it scares me
why can't google have like google docs but for code
Google Code was a thing for many years but was shuttered because everyone went to the hub of gits, however do note that git != github
can't quite figure out how to make this all work
since I'm making another repository I added the sdks as submodule not just cloned, now the sdks are locally there but what's step 2
Just a reminder, I'm going to abuse my role and ask that everyone send me their awesome projects for early access :3
@meager seal still unclear: does it have to be source code or just binaries is tolerable?
Now to figure out how to get include and dll paths to work
So i been working on this and wanted to show it https://share.nosjo.xyz/zXqPQk.mp4
neat
heh, still cant' figure it out
what problems are you having?
can't get an include to work
what are you coding c++ or?
can't figure out how to add an include outside a solution directly into another solution directory with a relative path
c++
can't figure out how to get ..$(SolutionDir)\oscpkt\src
well i dont know to much about c++ so i wrote my thing in c#
i give up.
ok got it
I didn't know bronies were so smart
@split herald can you help me get the dll to work in c#
this is how i do it right now probelly not the best way but it works https://share.nosjo.xyz/IewyZ2.png
ooh ok
hope that helps 😄
wouldn't it still need to be inside the same folder as your exe or otherwise specified?
did you make it copy to output directory?
ok it works now but I think I need wootdev for my keyboard to respond
ok done!
@split herald ty for help
no problem happy to help
I just saw the thing about the steam I'm coding a thing but the analogue part isn't in yet and my computer asplode :(
@pliant carbon Looks like you're using C#, you might want to have a look at https://github.com/simon-wh/Wooting.NET should make things a bit easier for you

If anyone needs a super basic c++ example for visual studio as a starting point https://github.com/tyuioo/WootOSC.git
You just need to install visual studio with the windows api, c++. then the git extension. then make a free git account then just clone the repository and click build then edit the switch at the bottom.
Thanks @placid ledge, I'm new to c# to im unsure how to use the library in my project. Could you show me how to install/use it?
@pliant carbon If you download the files you can add it as a project to your solution on visual studio
I might make a release of it and put it on nuget to make it a bit easier
I don't know what files I should put in my solution
like that
or just the wooting.net
In the "Wooting.NET" folder inside that there is a .csproj
In the solution explorer, right click on the first item (your solution) and it should be something like "add project"
and you point to that .csproj file
You need to be starting your console app, not the library
I'm confused
It says you're trying to start a class library
which is wooting.net
so don't start the class library
Ok I'm just confused since it was working fine a few minutes ago and I haven't changed anything
So I put the dll's in
and get that
ty works
I made a nuget package for Wooting.NET there and added instructions for getting started, should make it easier for people to get started with it
Submitting my project.
Yay.
It has been "Processing" for a disturbing amount of time.
Oh.
I am late aren't I?
That is school for you.
So, @kindred skiff am I late?
@cyan saddle what you mean by "late"? the contest ends on the 22nd of October
Yeah, same dude XD
weird, I cant look at the behind of that and still working on my project to submit, so I havent gotten to that point yet XD
I am going to copy all of the things I put in there and paste them into a text document.
So, if anyone can shed some light on that I would appreciate it.
it is @meager seal 's baby, so he would be the best to ask on that 😛
Considering you already pinged them, I don't think I have to.
yeah, dont want to spam him
Ping me when you get to it Tino.
are you using chrome?
That's good.
If you're projects use github please add the "wooting" tag so it's easy for people to find project later 👍
or topic or whatever github calls it
Did anyone get both RGB and analog reader to work under Linux
?
checks "wooting" on github
No pong? no nibbles?
You're doing this all wrong, my friends
RGB pong
would be awesome if it would be over internet
cross-platform cross-vendor multiplayer RGB pong 😮
i don't think it is feasible to make pong for keyboards
at least because the layout isn't just a n by n led matrix
well the qwerty part is
that's 3 or 4 rows
yes it is
how are you gonna play pong on that lol
you make the paddle 1 pixel and you make the ball 1 pixel
that is going to be a pain in the ass to play proper pong on 10x4 resolution
if the paddle only has 4 positions which can be changed instantly
add some inertia to the movement and add sub-pixel states using brightness control
wouldn't it look kinda bad with the ball
I'll do it
Start with a script that maps an x by y pixel display onto the keyboard
can probably find an opensource nibbles source and then just replace their grid size and drawing function with the wooting one
Another idea for a project: display letters scrolling over the keyboard
wack a mole is a nice keyboard game
question, is there a limit for how many projects can we enter?
I am being blind then XD

makes a program to generate projects
making an OBS overlay, anyone interested when it looks prettier?
could put it live right now and update it without maintenance work on the front end if you want
i might change the positions around though, so experientable
it's the easiest to use right now, when I push changes it updates the overlay everywhere
Whatever works. ^^'
yea sorry if it's not preferable, I've seen most overlays do it this way
https://streamelements.com/ for example uses browser overlays
most overlays do it this way but cluttering obs with browser plugin instances is not nice
it's the same reason why you don't want to open lots of tabs in the browser on a low end pc
At least I have the RAM for that.
I would prefer to have the program be "native", but for a prototype or whatever that is fine.
Let's you easily work out how you want it to look and such.
Speaking of plugins, I can not get the input overlay plugin to be recognized by OBS and that is bugging me. :V
¯_(ツ)_/¯
idk how to problem solve it, I don't use OBS all that often
here's a vid of how I add it though
personally for me this is just a gadget to play around with, Jeroen did say he was planning to make this a feature at some point
but right now they're too busy making more important changes
@cyan saddle that kinda attitude is definitely not the best in programming
you want your program to perform as best as it could
a hacky solution should never require less computing power
if it does - you're doing something wrong
:@glass radish oh wow thats awesome
visual changes to the overlay https://darrenvs.github.io/analogue_keyboard_overlay/
That is amazing @glass radish , do you have the code public? Would love to take a look
here is my git @hybrid lake https://github.com/DarrenVs/analogue_keyboard_overlay
going to submit it to the contest in a sec @meager seal !
uploading a higher resolution&fps recording of the overlay atm
in case you want to tweet that one
submitted 
anyone made a music spectrum yet?
Well since most people use spotify, you would have to use 3rd party tools (drivers) to rout your audio into your app
can't you just get the master audio from the pc
Well if you can find some open source software that does that...
i mean, how attractive does messing with obs source sound
@pliant carbon i guess: https://youtu.be/R-8jFc-mttg
why not from bottom?
there's spacebar at the bottom
woah, nice work!
Canvas is very interesting darren, seems perfect for this kind of application
@little monolith did you make that work specifically with trackers?
@grizzled wolf yes
@meager seal I don't mind continuing on making additional features, it's already very configurable from within the code
I could make a front-end for it
I have a question though that maybe you could guess the answer from
would he need more keys than movement keys?
because I can't read keystrokes, only gamepad
because it's a browser, you can't read unfocused keystrokes
The only way to solve that is to bind your keys to controller keys in wootility
or make an application that logs your keys and sends them to a local web server
but I prefer to keep this stand alone without background applications
just wanted to submit that but apparently it decides not to work properly after a windows reinstall https://i.holl0w.me/kmdxel9JSeQgra.png
well, it almost works

@little monolith don't forget to add a command for playing a random file from a mod archive
it's supposed to have a console gui
apparently it decided it doesn't need any of that
alright am i creating a cool directx gui or am i using some shit like ncurses
If you could make it display a scrolling tracker grid with RGB showing the effect commands that would be cool
i don't think bass will let me
i wonder if bass has built in fft calculation
because that way i can ditch my spaghetti
maybe try some other opened tracker then?
bass is honestly the best idea
i've already researched on that
nothing of good stuff is available besides bass
should i make a directx gui
Thanks @meager seal for helping facilitate the communication.
@glass radish I understand the dilemma in hooking standard keystrokes. That limitation would be okay with me. I would be interested in more than just the WASD keys though still limited to controller-bound buttons/axis.
As a bit of background, in space/simulator games, WASD provides 2-dimensional ship movement but there is a third dimension (up/down) that can be equally important in certain manoeuvres. CTRL + SPACE are typically bound to vertical movement and I would be interested in options to have them appear alongside the other keys in an overlay to show off the keyboard when I get it.
Perhaps even a profile you can switch between for different games or situations. For example, on foot/doing FPS combat you might want additional buttons displayed for leaning out from behind a wall. Just thinking ahead here but the greater the customisability the more options you can provide for your audience to use it to their preference.
@humble garden So I'm now planning to make a front-end for the overlay that allows you to add thumb sticks and keys and bind them to controller inputs and move them around
with a property edit window to change any visuals/colors/font styles/etc..
Sounds good
@hybrid lake yea canvas is really nice for these kind of things
@hybrid lake the comments are a little unclear over there: https://github.com/WootingKb/wooting-rgb-sdk/blob/master/src/wooting-rgb-sdk.h#L38
does the callback get triggered on any color update (so even on every reset function) or only on the functions which actually set the color?
it does yeah, it does after any failed USB packet
alright cool
checking the return value is essentially the same thing
at first I thought about adding a periodic ping, but ended up not using it
not sure if we still need the callback
i'm creating a virtual keyboard of sorts for hopefully easier debugging
basically recreated every function in the rgb sdk, all you have to do it to replace the dll and call the visualizer_init export in visualizer.dll
you send the little video before right? the one in c#?
Oh, it was somebody else, sorry
here i replaced the dll in my older project
hell, i really need some extrapolation on these bars
oh, it virtualises the RGB?
yes, also wanna add the same thing for the analog sdk module
just so you can enter precise analog values and check the behavior
keyboard connection state also can be changed but it's probably not the best idea to show it on my program 😛 https://i.holl0w.me/X2j4vhGkZhmZ.mp4
in case anyone wants to check it out:
just do this somewhere in your program:
GetProcAddress(LoadLibraryA("visualizer.dll"), "visualizer_init")();
visualizer_init prints some nerdy addresses to stdout so you might wanna allocate a console if you wanna see those
Some progress on the OBS overlay: https://gfycat.com/GleefulAmusedEasteuropeanshepherd
@humble garden you can move items around now and change their properties, I'm still going to work on saving&profiles and adding more buttons to the overlay
nothing is final on here though
Ngl, that is actually really cool
this is how you edit the overlay within OBS https://gfycat.com/WetOnlyGuppy (for now)
That's sweet
I like it. Looking good @glass radish!
Hey guys, after Tino basically forcing me to show what I am doing to you guys for the competition. Here is a gif for it https://cdn.discordapp.com/attachments/450979903039602688/497971621919719448/ezgif-2-2097fedc6103-1.gif
Basically, Game detection, automatically changing profiles.
❤ @meager seal I blame you
@clear hedge Do you really change the active profile, because the colours are changing very slowly?
Yeah it does change profiles, it shows slow on the recording for some reason (its not slow in person)
in that demo, it changes from digital to analog profile 1
and then back
How did you get the necessary commands for that, I only played a little bit around with a USB capture to get them from the wootility but can't do it right now by myself.
So you don't have the commands, you just use the wootility itself?
the profile switching is the rgb.dll, the detection is windows (User32.dll)
so, yes
(I will release the github to it, when it is more stable XD )
what's unstable in it?
the rgb is one part, I am currently setting it but without that, the rgb does not change
@hybrid lake is it intended that dev.wooting.nl has no https?
@glass radish I can change it from checking active processes to focused process, which would suit it more
that'd be awesome because I often have games in the background and use profiles that disable some keys
Thanks for the feedback ❤
@glass radish currently, recoding it to allow it to know the focused window and check on that instead 😛
he's thinking , but he lost some code due to stupidity
now he's pretending to be "clever" :p
Submitted my project into the contest 😄 but still working on a new way of it detecting active windows, as that seems more of a pain than I thought
GetForegroundWindow()
yeah, I have that already running on my testing area
I just have to do a bit of recoding to get it to work (annoyingly)
And Completed the code, for focused window 😄
I feel bullied
Pushed a update to fix the typing, before as the switch happened it stopped anything sending from the keyboard, so added a check to make sure it doesnt change if it doesnt need to XD
what's the github page though
there is still soo much I need to do to it, so suggestions would be great
you can also see that I am setting the colours there, hopefully the bug in that, will be fixed soon (so that is only temp code)
pull requests
I have been recoding it to pull the code to better quality and sure, go for it if you want
Ok, now I know why it is so slow to change the colours, you change the colours for each key separately and not in an bunch.
AYYYY @chilly oar is alive 😄
And yeah, but like I said, temp code as Jeroen needs to fix why the profile colours do not copy over (yeah he knows about it)
XD
I was able to change the active profile a while ago for a few times only but without to adapt the correct colours too. I think it's not a bug, it's just not combined to change the colours when you chage the profiles.
according to Jeroen it "should just work"
But I did it a dirty way, so everytime I made a not so perfect change the keyboard got stuck and I had to reset it.
oh fun XD