#🤖│community_dev
1 messages · Page 13 of 1
Cool
FN keys = RPM
Numbers = Gear
Nav panel corners = Wheels (contact, drifting, no contact)
Arrows = Steering + brake + gas
that's dope dude, is it subscribed to game events?
It uses game's "telemetry" - shared memory block
how do you use that?
I copied the code, which obtains the telemetry object from memory to my program, included your library and then ran a loop, which controls RGB dependent on stuff like RPM and steering 😄
What game is that?
ManiaPlanet -> TrackMania 2
Cool, might have to try and add support for that in Aurora
When I'm finished with my effect exe I'll publish the code
I understand that, I'm just not aware of the "telemetry" stuff and google is not really helping 😛
@hybrid lake It's just reading game's shared memory block
They have an example available
Where?
ugh
Currently a few
I'm unsure if it's problem of my code, but when I exit my app and close event handle is executed, it restores only few first keys
Did you call the restore method?
Yep
I only done this: ```CPP
static BOOL WINAPI console_ctrl_handler(DWORD dwCtrlType) {
ApplicationRunning = false;
wootingRGB.wooting_rgb_reset();
return FALSE;
}```
In main: CPP SetConsoleCtrlHandler(console_ctrl_handler, TRUE);
ApplicationRunning breaks my while(true) where effects function is called every frame
I managed to fix the problem of keyboard not being reset properly
Just added Sleep(250) before i call the reset method

Anything that is sent via here or said here stays here
For anybody interested in Aurora with the Wooting One: https://ci.appveyor.com/project/antonpup/aurora/build/0.6.1-dev4-324/artifacts this build + the firmware and you're good to go
👀
I noticed it only now
Will check out asap 😄
Video showing W1 + ManiaPlanet soon on YouTube
@placid ledge Hey, just a heads up.... running the new version crashed my keyboard completely and my mouse
Now, yes i never had the wootdev firmware but this could be a huge issue
@wicked grove ccan you possibly try and replicate this
I have it consistently when on the digital profile, is a known issue with the firmware
I see
Works fine if on analog profile
Uh
Sorry for the stupuid questions.... just concerned is all haha
I'll try tomorrow
I guess its something the firmware needs sorting out with
idk why but whatever Auroa did i had to restore my woot, have a feeling the firmware has some issues overall.
I have no issues when I'm in the analog profile, I have to unplug the kB if I'm on the digital profile with the rainbow effect every time as it completely freezes
When i was playing overwatch
Auroa randomly closed and froze my keyboard

does auroa have any logsd
Yeah, %appdata%/aurora/logs
Hm, doesn't seem to have thrown out any error. Are you sure that is the right log? Aurora creates a new one for every new instance
What exactly does Aurora add to Overwatch? It replaces the razer's DLL or does it add other files?
It replaces razer's dll
You can add other layers around what lighting is given by overwatch, but there is no other information taken
If an experienced c++ dev gets eye cancer from this, I'm sorry:
https://github.com/domino54/maniaplanet-wooting
But it works and I don't care
You love LIS
Yes
@peak dagger check the pinned messages
When you try to analyze audio frequencies of ytdl-core stream but the data chunks are so big your visualizer would have 1/4 fps 
Back on the wootdev
@placid ledge you told me before that your keyboard crashed on digital mode, was that just when you had rainbow running?
I think it's crashing because the effect refreshing conflicts with the wootdev now
Yeah, I've got the rainbow animation running
Alright that's probably it then
Can you double check later if it still happens when you turn the effect off?
Alright, I'll probably have to add some sort of effect pause
TLDR (for Unix): Update firmware (use Windows to avoid hassle). Then dev away on Linux?
Haven't had the chance to try everything on linux, but please go ahead
hidapi does have linux support already
any help here is greatly appreciated
im currently trying to compile the DLLs for analog reading and rgb control. the rgb one compiled just fine, but the analog one gives me a compile errorRC1110 could not open wooting-analog-reader.rc wooting-analog-reader
im not that familiar with C programming so idk how to fix this, any ideas?
also i just ran the rgb tests in wooting.NET but nothing happens
I'll look into the RC thing
@bleak oyster should be good now
@nimble whale This is the Dev channel, @hybrid lake is the guy that can give things a shot on the Keyboard and work it out to something native.
Thanks again for reaching out.
@hybrid lake thanks, successfully compiled without any further problems. however the wooting.NET tests still don't work, i don't get any readings in the analog test, nor do the colors change in the rgb test
i'll try using it natively
Did you update your keyboard to the wootdev firmware?
Hi all! Here's a proof of concept HID to MIDI for wooting one: https://github.com/microdee/WootingPiano
this should work if the vendor and product ID for the analog HID input stays consistent with wooting one
not the nicest architecture I could have there but it does the job
Hmm, we might wanna keep an index of the different projects.
@hybrid lake oh shit right i forgot about that 😅
http://puu.sh/AFK4R/cbeee3d169.jpg is this normal? after i started patching the wootdev firmware the window turned white and its been like this for 10 minutes now
the keyboard doesnt work right now and idk if i should unplug it now
Good lord that's one long list of Discord channels.
I'd say it is normal. Electron
¯_(ツ)_/¯
well how long is this patch supposed to take
just replug and try again
How many of us are comfortable with CMake?
I just below people I don't know much of programming 
That's a yes in my book. The fact that you are not used to any of the tools - you are equally open to all of them 😄
Haha
Comfortable as in know how to use it, or open to using it?
Open to using it. It's cross-platform. You can generate projects for different IDEs as well.
Oh yes of course, would love to have a cross platform build process
I'm worried about the keyboard detection on linux though, have you tried it yet?
Already have some issues with getting the usage page values on linux in the wootility. Not sure if it's because of the driver or some other USB linux stuff
Didn't have time to tinker with anything yet.
@hybrid lake it would be very cool if you would track the issues you encounter (at least how to reproduce) on Linux (and other) in the Github project. Easier to collaborate.
Yeah we can do it as soon as we know if it does or doesn't work
That way when I get to it. I wouldn't have to ping you for more info :D
checking it out now @nimble whale 😄
We'll have an overview of projects on the portal later
thanks, if you have any questions or feedback don't hesitate
@nimble whale
I think the HID read timed out,
You don't select a certain interface somewhere do you?
let's see
at line 151 I do
bool success = DeviceList.Local.TryGetHidDevice(out _hidDevice, 1003, 65281);
where 1003 is VID and 65281 is PID
are there multiple PID's possible for wooting one?
No, but there are multiple USB interfaces, as in the wooting one is a composite device
I'm not sure if it matters here, even if I get the full list with " DeviceList.Local.GetHidDevices(1003, 65281)" I cannot get it right
What firmware are you using?
you need woot dev
no you dont
nah I've been playing with that HID thing for a while without woot dev
I can put back a dropdown list for HID devices as well
also filtering for "wooting" name
alright got it
oh what was it?
foreach(HidDevice hid in hids)
{
try
{
if(hid.GetMaxInputReportLength() == 33)
{
_hidStream = hid.Open();
HidStatus.Fill = new SolidColorBrush(Color.FromRgb(255, 255, 0));
}
} catch
{
}
}```
changed line 151 to this
the try catch is because the GetMaxInputReportLength fails for some interfaces
I think before it opened the configuration interface instead of the analog one
ah ok made sense so interfaces doesn't stay consistent apparently?
ok by some miracle patching the firmware just worked now. RGB control works fine now, but i still cant read any analog values
tried both using wooting.NET and compiling native C tests with the dll, but in both cases only the RGB control works and analog readings always return 0
any ides how to fix this?
also i just realized that i can no longer change any settings with the wootility. is that expected behavious with the wootdev firmware?
@nimble whale it's very dependent on the driver implementation I've found. I'm still looking for a way that is consistent across all platforms
Settings works for me @bleak oyster, have you tried replugging?
Can you use: http://www.virtualdj.com/download/hidtrace.exe to see if you get the analog data?
Also don't use rgb effects in combination with the wootdev stuff for now
with the tool you linked i get analog values
they dont max out all the way to 0xFF but i think thatrs expected behaviour?
before i patched the firmware my program would just close whenever i tried reading analog. now it always reads a value of 0 instead
Not sure, maybe @placid ledge has an idea
Wasn't there already an analog range output program from crude ui btw
Bit off topic
Sorry
When I tried to use the analog reader I had it working properly when I read just esc, but the results weren't correct when I read the buffer. It would sometimes get values but it never showed everything pressed
This being through the wooting.net tests, I haven't tried it without it, so I'm not sure if it is a firmware/API issue or if it is something to do with the .Net wrapper
But I don't think the wrapper would cause the issues like I was having though
@placid ledge its definitely not a problem with the wrapper as the same problem also occurs when i use the analog reader natively (plain C)
Ah, okay. Didn't have the time to check it properly, thanks for letting me know
@placid ledge btw i PRd a little code cleanup for the RGB tests to be more comprehensible for first time use
still can't figure out why I don't get any analog readings. any ideas how to proceed @hybrid lake ?
Does it work when you just try to repeatedly read a single key?
@bleak oyster thanks! Was initially just doing basic tests to just make sure it was basically working, didn't get around to writing proper ones
@hybrid lake thats exactly what I tried to do, but it just returns 0 all the time no matter what
I changed it to a row column index btw, not sure if I pushed that to master
I’m not at my pc noe
Now*
i used the esc key (0,0) so it shouldnt have made a difference even if you did
can hardly believe that since its also the key simon uses in his tests, but i'll try
also the HID sniffing thing you send before detects the analog input of esc, but I'll double check now
It will also return 0 when it doesn’t connect, might be a problem there
I’ll have to look into it later
The esc key worked fine for me
@hybrid lake Yeah, it doesn't detect the keyboard on Linux. Will be looking into it.
Meanwhile while my C might be a bit rusty, but each (this for example -> https://github.com/PastaJ36/wooting-analog-reader/blob/master/src/wooting-analog-reader.c#L27) hid_enumerate call we are leaking memory.
/*
@returns
This function returns a pointer to a linked list of type
struct #hid_device, containing information about the HID devices
attached to the system, or NULL in the case of failure. Free
this linked list by calling hid_free_enumeration().
*/
struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned short vendor_id, unsigned short product_id);
Should be freed with hid_free_enumeration().
Valgrind
==19243== 13,312 bytes in 13 blocks are possibly lost in loss record 21 of 21
==19243== at 0x4C2FA3F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==19243== by 0x4C31D84: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==19243== by 0x5F8FBB3: ??? (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.1.0)
==19243== by 0x5F90CC3: ??? (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.1.0)
==19243== by 0x5F8F452: ??? (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.1.0)
==19243== by 0x5F86C9C: libusb_init (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.1.0)
==19243== by 0x4E3FB03: hid_init (in /usr/lib/x86_64-linux-gnu/libhidapi-libusb.so.0.0.0)
==19243== by 0x4E407DC: hid_enumerate (in /usr/lib/x86_64-linux-gnu/libhidapi-libusb.so.0.0.0)
==19243== by 0x400BA6: wooting::keyboard::AnalogReader::find() (in /home/vtkacenko/CLionProjects/cross-platform-woot/wooting-hidapi-wrapper-cpp/build/wooting_hidapi_wrapper_cpp-example)
==19243== by 0x400A57: main (in /home/vtkacenko/CLionProjects/cross-platform-woot/wooting-hidapi-wrapper-cpp/build/wooting_hidapi_wrapper_cpp-example)
good catch, I'll change it
Ok I'm really out of ideas now. i tried
- repatching firmware
- rebooting
- different programming language (C and C#)
- diferent cable
- different usb port
- differnt pc
#include <stdio.h>
#include "..\..\src\wooting-analog-reader.h"
void main() {
while (true) {
uint8_t v = wooting_read_analog(0, 0);
printf("%d\n", v);
}
}```
honestly can't imagine having a mistake in there but just in case
I'd say there's something wrong with my keyboard if it wasnt for the fact that hidtrace reads the buffer just fine
Tried a different pc yet?
I’m assuming it’s not a problem on your side atm, but if you’re waiting for it 😄
...
- different pc```
"did you try a different pc?"
🤔
Oh
jk lol
i didnt edit it in
anyway, yes i tried another pc, same result. i just don't know how to proceed now
I understand how it works so i could in theory work without it returning proper values, but not being able to test your code sucks.
You have quite an agressive loop there. I'd add a sleep.
yeah ik it fries my cpu like that, but it was just to quickly have something for testing
I'll look into it tomorrow, I think it's a problem with detecting the keyboard
So lighting control is plain HID stuff, right?
The rgb control is basically a HID wrapper yeah
welcome btw, I pinned the first post with some explanations
why isn't this channel open to everyone in the first place?
Because it allows more support and tech discussion between people like you and the founders.
its just to keep it closed from @ everyone
All people need to do is ask 😃
you mean because there would be too much offtopic otherwise?
Correct.
Its just easier overall too, be able to share releases etc before public builds etc
it will be public once we have the website docs up
^ was holding back on that 😄
How soon you reckon? 👀👀
Planning to make an Aurora release, but would rather wait till the RGB control stuff is public before hand
end of the month is the target now
Any plans to abstract it more?
More how? How would you like to use it?
Like a lib, can query what keys are where and can set them. Could allow for arbitration between multiple programs as well.
Pushed something to a rgb control develop branch
- Moved USB code to a seperate file
- Got rid of the color array, now keep track of everything in raw buffers. The conversion every time felt like a mess and will get worse with the fullsize.
- RGB effects will pause automatically and restore after the reset is called
- Freed the HID structure that was allocated by hid_enumerate
I could also use feedback how to work with github / keep you guys up to date. I already added the linux opening issue
There's also a new wootdev firmware with the update for the RGB pause stuff
Make a read only dev channel and a webhook that automatically dumps commuts into it. Could even make a few for different thimgs and turn it into a category.
Create a branch (per feature) -> develop feature -> pull request to master -> review -> merge with the master
Could set that all up to dump into a channel I'm pretty sure.
The main things I am worried about are:
- RGB control
- Input reading
- Key info (location, size, label, name)
@hybrid lake Wooting Updater now shows and empty dropdown for me.
Is your system clock correct?
@hybrid lake Linux begs the sudo, otherwise you will get the zeroes with hidapi (if that was your end problem).
Oke cool, thanks
It must be something else in the wootility then
Does the updater work now?
With synced clock yes. In my case clock goes out of sync when dual booting Windows<->Linux
how are custom RGB themes supposed to work in the end? do we have a program running on the pc that changes the colors all the time or do we upload some script to the keyboards controller so we don't need to have something running on the pc?
Please check the pinned post for the Google doc documentation and Github source
the pin is just about how to make a program on the pc control the RGB. but my question was whether there is plans to somehow upload a script to the keyboard instead so we don't need to have a program running in the background
I think calder wasn't responding to you, give me a sec
oh ok
It's mostly aimed now at app/game developers that want to add support for Wooting keyboards to whatever color integrations they have. That's why it's a seperate library that doesn't require the Wootility or another service to work
ah ok
For custom RGB themes or effects we need some sort of plugin system for the Wootility. I'm not against it, just not sure how to implement something like that
how do the presets in the wootility work? does it keep a background process up on your computer?`
Yeah exactly
uploaded with the firmware?
@cursive marlin Here it is, info in pinned
Thanks 😄
The rgb effects are hard-coded in the keyboard, the presets are just color sets that are sent from the Wootility and then saved on the keyboard
so i guess the only way for me to make lets say a inverted ripple effect would be a program that always needs to be running in the background for now?
Yep
Alright, I think I got it in a pull request now: https://github.com/PastaJ36/wooting-rgb-control/pull/3
Plugins should not be that hard. Depends on a lot of stuff though.
« We are thinking of launching something like a community hub thing on our site, possibly» Maybe also consider using/utilising "topics" on GitHub? (E.g., https://github.com/topics/discourse-theme-component is for repositories with Discourse theme components.) A community hub thing controlled by yourself would still be good though (not all people might have GitHub as their preferred platform, esp. recently…).
@round rivet Your time desyncing may be because Linux expects your hw clock to be UTC and Windows expects it to be localtime, so whenever you switch from one to the other, their NTP/time daemons starts stepping towards the "correct" time. (The best solution for this would be to tell Windows to also expect the hwclock to be UTC, but that's arguably a bit more hacky than telling your Linux to expect localtime though.)
Also, general heads up, I don't have a Wooting One, but I do almost exclusively run (Arch) Linux, so if you need anything tested (that doesn't require the hard wares), just ping (or, probably better, DM) me. (Not sure how many here are Linux peeps, so thought I'd offer my services as best as I can.)
@steel ruin Thank you for the nice explanation. I know that. Used to change registry in windows to avoid that. Now I am just lazy :)
@round rivet Haha. Alright. You never know what people know, and it is certainly something I could see someone new to Linux/*nix being confounded by.
thanks for the topics tip, will also make it easier for us to track @steel ruin
I'm having a ton of problems attempting to build the rgb-control, I downloaded it, opened the project, added the hidapi into the folder, as it didn't come by default, and when I build I get all kinds of errors...
maybe forgot to --recurse-submodules while cloning?
I'mma try to clone with git then
This time I cloned with git clone https://github.com/PastaJ36/wooting-rgb-control --recurse-submodules, but it still fails to build
are you on debug? if yes try release
@hybrid lake already fixed this, guess he still needs to push
@bleak oyster https://github.com/PastaJ36/wooting-rgb-control/pull/3
I got it working, yay.
Also, nice wrapper and test, Dommy 😃
As long as you have a dll, its pretty easy to make it work in python 😃
😄
I had a bit of a rough time with the wooting_read_full_buffer, and since I had access to source for the dll, I copy pasta wrote a new function that splits the scan code and analog value into two seperate arrays, because python really dislikes structs 😄
WOOTINGRGBCONTROL_API bool wooting_rgb_array_set_full(uint8_t *colors_buffer);
For that function, how large should colors_buffer be? I'm guessing rows*keys_per_row*3 = 6*21*3, but wanna make sure.
Maybe we should just pass it as array and leave parsing up to the implementation
Than at least the memory layout is guaranteed
Yes it is @sharp patrol
Alright, thanks, I'm trying to make an python version for it, so I can use it with my discord bot
@hybrid lake Its prolly better to keep it to basic types as far as the dll goes, yeah.
Mind if I ask if you have a list for scan code to which key it means?
If you do, please do add it to the GitHub as well
@sharp patrol is this what you are looking for https://github.com/PastaJ36/wooting-analog-reader/blob/master/src/wooting-scan-codes.h ?
... 🤦
Yes, thank you ❤
Wait, what about the scan codes for the numpad? (I know none has them now, but worth asking if you wanna extend so that the numpad counts on after the mode key)
In Simon's Wooting.NET wrapper, he had a similar list, but his included the numpad and macro keys.
Though its worth mentioning his list is a bit different, so its not a straight copy pasta. 🤷
I'm not sure what I am doing wrong, but my keyboard tends to get stuck whenever I try to set the rgb on a key
Happens for me sometimes
I launch the program and the keyboard doesn't want to draw the colors
Its not just that it doesn't want to draw the colors for me, but it also stops responding, even to keypresses in general.
That too, but only if I try to switch current mode from digital to analog or vice versa
It seems that at certain times, reading the (full) buffer will cause the keyboard to get stuck, and repeat any keypress that was pressed until you unplug it
I can't see any closer than my code stopping at a dll function call.
@sharp patrol The list I made is purely based on the order of keys for easily getting the coords of a key, it's not based on scan codes
Oh, I see
I should probably add that scan code enum, it didn't notice it before
it seems writing the RGB is where it often fails for me (and gets stuck)
Do you have the usb improvements branch and latest firmware? @sharp patrol
I installed the wootdev firmware, was that not it?
Oh, a new push to github for the RGB control? @hybrid lake
Yeah it’s a pull request now
Alright, I'll have a look 😃
Alright let me know 👍
@hybrid lake Much much much better with that pull request 👍
Having a script in the background writing to the RGB does not impair its ability to type now with the dll from usb refactor
It's not much, but its powered by python. 
Yes it does 😃
The RGB control works flawlessly after building the DLL with the usb refactor 😃
great
if you publish it on github we can feature it on the dev portal
would be nice to have a python example
Will do, just gonna make a proper test file and add documentation to the methods
You'll need to change or add a new method for the full buffer that takes the integer arrays instead of a AnalogRaw array. I just named mine wooting_py_read_full_buffer, but I think you might wanna name it better. If you implement/change the function let me know 😃
I had to look up USB HID stuff for a project and found this to be relevant.
http://www.usb.org/developers/hidpage/HUTRR84_-_Lighting_and_Illumination_Page.pdf
Omg, good find!
@sharp patrol @hybrid lake I guess the PR can be merged now (?)
@round rivet PR?
Oh yeah, its vital for it to work properly
I tried before without the update, and it worked in a few cases, but very often did the keyboard get stuck sending the same keypress.
Then Jeroen mentioned the refactor, and I had a bit of a rough time downloading it and applying it, but after it was done, it was well worth the trouble. 😃
There's also a memory leak fix. I am a bit confused about why have RGB control and analog reader as separate repositories.
Perhaps someone just wanna read the value? and others just wanna write rgb without reading? Though it's most likely because he developed the reader first, then the rgb controller, but wanted to keep them seperate to make the development easier for the time being 
Maybe, solo development is messy.
Because the analog part needs to be universal and not dependent on or intertwined with our own RGB solution.
What about having it as module/namespace in the same repo? For the whole CRUD to be available in the same SDK API?
I'm not saying that spreading your company's name is wrong, but if you want it to become universal, shouldn't the wooting name in the analog reader be kept to a minimum?
The function name doesn't affect the function, so the naming doesn't really matter that much.
namespace wooting {
namespace keyboard {
class AnalogReader;
class KeyPressEvent;
My take on it.
I do like the idea of keeping them separate. Make the code a little smaller when only one side needs to be used.
I'll merge it this weekend.
As for the split, we want to have a complete split to allow the analog reader to develop into something that is not just dependent on a wooting keyboard
Hypothetically speaking, razer should be able to use it while keeping their own RGB system
I wrote some minor patches to get wooting-rgb-control to compile on Linux, would someone be willing to check that I didn't break windows?
I won't have time tonight, but feel free to share and I'll take a look tomorrow 😃
Here's the patch for the usb-code-refactor branch
Skimming on my phone it looks okay.
git format-patch HEAD~ was a lot faster lol
@grizzled wolf now have access
Thank you kindly
All the information is in the Pinned posts on the top of this discord channel.
This July we will release everything public on the dedicated wootdev website.
allright.gif
Oh cool.

'Morning here !
All information needed as said is in the pinned post.
Any quesitons feel free to ask other devs who have experience so far (guys in yellow) or the founders ofc, WootHelp is here but im a web dev not a programmer 😃 so im sorry if im unable to help.
sounds good
Your perm should cover everything here, if there is an issue message me.
I thought you joined to develop something 😂
Thanks <@&195660585931636737>

@pliant carbon Did you solve it or still need help?
No, I'm not sure why it can't find the file
An issue with how my visual studio is installed I think
Its looking at "hidapi/hidapi.h", I think
Did you download it from the github page, or with git in commandline?
I cloned it from the page
Then you didn't get the hidapi repo with it.
But does it have anything inside it?
Sorry for the delay, from what file does the error message originate from?
I have the wooting rgb control file open
and the hidapi.h?
Are the inclide paths relitive?
@pliant carbon
The paths should have something like $(ProjectDir)\..\..\hidapi\hidapi.
Right click the solution (second to top level in the tree), properties, c++, general, additional include paths or something to that nature.
Click the edit button, what's in there?
nothing
Really?
Well that's probably the issue then. Make sure you close that and choose "all configurations" (or similar) in the combo boxes up top then add it. Should fix the issue if I used the correct path. (On mobile)
It didn't do anything, same error
Alrighty, I'll have to look at that when I get home.
@pliant carbon Are you on the Debug or Release build config? I'm pretty sure your issue is due to the Debug config not being setup correctly, so you need to use release
Ah it was set on debug
putting it to release fixed it, builds fine now
now gotta find a way to use this api with python
I can't help you with that at all.
@jade drum seems to work fine on windows still. Made it into a pull request: https://github.com/PastaJ36/wooting-rgb-control/pull/4. Thanks!
Did you do some tests with changing the lights on linux btw?
Your can try in WSL maybe.
@hybrid lake https://github.com/PastaJ36/wooting-analog-reader/blob/master/src/wooting-scan-codes.h#L95-L96
I saw the push and decided to build it, and it complained on that xD (Sorry if I'm repeating and you already pushed an patch for it)
Oh man, you're fast 😛
Mode is also redefined
I don't know if this is a python specific issue, but I'm getting some cases where the buffer can get really far behind or just plain unresponsive.
Maybe it's because the buffer doesn't get reset?
So you feel like there's still values in them
the analog reader only updates the buffer untill how many keys are pressed
Well, I'm calling the buffer with 16, to allow the maximum amount of keys. But sometimes I can press some keys, and release them, but the reader still reports them as pressed, even though they were released a few seconds ago
The reader doesn't report them that way, the buffer just doesn't get updated
You can reset the buffer after every read or check how many keys are pressed from the function result
Not sure how we can make it more clear
Added DLL links to the pinned post
For everybody that joined today:
Welcome to the wootdev channel! Most things are still a work in progress, but feel free to mess around and ask any questions you have. Contributions are very welcome.
Perhaps add a "Read the pinned messages" as the channel topic 🤷

@sharp patrol better? :p
No 🅱s everywhere, literally unplayable, asking for a refund
🅱anks you ve🅱y much
👌
The only function I was able to test is that I do not have a keyboard connected :P
You don't have a wooting?
I haven't had time to order one yet lol
Oh
@placid ledge I'm considering doing the work to support for wooting keyboards in the Godot engine when the reader is further along. Anything I should consider?
@rancid root Um, I'm not sure
@pliant carbon Check the pinned messages
While downloading the DLL files is nice and all, I prefer compiling it myself to have access to the code. But either way, it ends up as a DLL.
As for how python works with DLL's, the ctypes modules offers ways to load and call the functions in the DLL.
yeah ty
@hybrid lake Could it be added to the API to return if the keyboard is ANSI/ISO?
I mean, atm I have a dictionary of scancode to position on the keyboard to do the lighting upon key press, but I'm sure those positions wouldn't line up for an ANSI keyboard
@sharp patrol AFAIK they will be the same, coord wise, only diff is having the extra keys in the iso layout in the middle of the layout
in theory, if you're just drawing lighting over the coords it shouldn't matter the layout, as if it is iso it'll light the extra keys, otherwise it won't, the rest of the map is the same for both
So its only a matter that ISO splits the left shift into two keys, while ANSI splits the enter key into two keys?
Hi, I'm confused with how to use the DLL within python, and how to convert the code shown in the Wootdev portal
How do I define the functions?
import ctypes
dll=ctypes.WinDLL('wooting-rgb-control-64bit.dll')
proto=ctypes.WINFUNCTYPE(
ctypes.c_bool
)
parameters=None
keyboardOn=proto(("wooting_rgb_kbd_connected",dll),parameters)
this is what I have so far, it returns true
I do not use the WinDLL function, as it becomes unnecessary complex to call functions
which should I use instead?
I use the ctypes.cdll.LoadLibrary(dll_file)
which returns an object with the dll loaded and ready to go, assuming the filepath exists.
That's what WinDLL does too apparently
as in cdll.LoadLibrary returns the same thing as WinDLL
>>> a=dll['wooting_rgb_kbd_connected']
>>> a()
1
@sharp patrol is that correct use?
Noooo

You call it by doing ```py
dll.wooting_rgb_kbd_connected()
Cause the interpretter doesn't know what's in the DLL file
@sharp patrol ISO has hash and enter, whereas ANSI has backslash and enter
The important thing to keep in mind though, is that you need to pass ctypes variables to it.
@placid ledge Oh, I see
I dunno if this has been posted here, but this is the map Jeroen gave me
That's extremly useful!
So the BSL at 2,13 is ansi only and the two iso ones are iso only
with the rest being the same
This map is what I based the dictionary in Wooting.NET on
Hmm, I see, and ISO keyboards will never give the scan code of BSL (And vice versa)? So you can put them in the same dictionary without them sending positions that doesn't exist.
I assume so
I'm pretty sure it doesn't matter if you give the rgb control coords that aren't relevant to the layout of the connected keyboard
The array with the size 21*6*3 will hold the colors for the non-existing places anyway 🤷
It makes sense the way it is currently
@hybrid lake Be sure to add that picture to the docs, its very helpful when pointing to a key
Yes I will, I just need to make it wooting style

that map is useful
btw sending too many updates will brick your wooting
the entire keyboard
Changing mode from digital to analog while rgb is controlled will brick it
wew
I only encountered RGBs stopping to update after restarting my app multiple times
I've only encountered the RGB stopping before the USB refactor 
Maybe I have issues as I'm updating keyboard 120 times per second

Cus u know, gotta have em FPS on the keyboard
Can it even update that fast? 
Idk
I mean, its just some LED's, so I'm sure it has like an update rate of a 1 kHz or more
But, the bandwidth to the processor is probably going to limit that rate 
Or perhaps ... idk 🤷
consider the effects already on the board
the wave effect must update hundreds of times a second
Are you sending each key's color or the massive array?
As for the ANSI/ISO split, I haven't thought of an easy way to add it yet
Although I don't think it's necessary
Yeah, I just realized that after Simon went over that the keys don't collide
It was just if the lib should have been "Oh, its ISO, I should load this dictionary for the scan code to coordinates"
But, since they don't collide, that isn't needed.
👍
@sharp patrol how do I convert tuple to c array with ctypes?
sending func((foo,bar),foo) says it doesnt know how to convert (foo,bar)
You declare an C array of the length you want, and initiate it with all zeroes, then pass that onto the function
Which function are you doing?
wooting_rgb_direct_reset_key
def rgb_timeout(self,row,column,time):
self.dll.wooting_rgb_direct_reset_key([row,column],time)
wooting_rgb_direct_reset_key only takes row and column, if I didn't miss any update
hold on, I'm checking the github
oh it does
oh I see you just call it
I was confused, I thought you specified when it reset
@sharp patrol dw then I got it
Alright
It might give an error an error if you attempt to call it with python integer, don't know if it works or not.
they work fine with python integers
import ctypes
class rgb_control():
def __init__(self,file='wooting-rgb-control-64bit.dll'):
self.dll=ctypes.cdll.LoadLibrary(file)
def keyboard_connected(self):
return bool(self.dll.wooting_rgb_kbd_connected())
def keyboard_reset(self):
self.dll.wooting_rgb_reset()
def keyboard_set_rgb(self,row,column,rgb):
'''rgb must be tuple'''
red,green,blue=rgb
self.dll.wooting_rgb_direct_set_key(row,column,red,green,blue)
def rgb_timeout(self,row,column):
self.dll.wooting_rgb_direct_reset_key(row,column
all of this works fine
Hmm, I set mine to ctype ints, but it looks like its not needed 
But, that's after documenting it and uploading it to Github. 😃
@hybrid lake https://github.com/BattleCisco/pyWooting I'm a total noob at Github, but hey, its something 
sees brick talk
Uhm, you can flash it at home I hope?
Hmm?
About the keyboard bricking if changing modes during some of the operations. 🙃
Oh yeah 
@pliant carbon «consider the effects already on the board» but as you say, those are on the board - those instructions don't need to go through the CPU and USB to reach the keyboard. (AIUI anyway.)
@sharp patrol (Effectively) Windows-only Python module. FeelsBadMan 😦
@sharp patrol awesome, I'll check it out later
Oh changing modes is hard. Effectively I'll have to disable rgb changes when changing modes, but not sure how to indicate a mode change then
@steel ruin Which function is it that unix doesn't have?
@sharp patrol DLLs. 😃
Oh, then there isn't much I can do on the software side for you 
Once I have my own Wooting I'll start poking at it myself. 😃
Well, the api source is there, if you wanna try and rewrite it so it can work on linux 🤷
But, with wootility working on linux, I assume they plan to add proper linux support for the api eventually.
@hybrid lake Don't know how it works on your side. But is it possible to create a queue for requests and drop them/change queues gracefully when the mode is changed?
🤔
It might be good to add "Is_keyboard_avaliable" (or occupied) function that will return a bool for when its okay to send commands, and if its recently switched profiles, it will return false for maybe a second or two to make sure it doesn't brick when running?
I can queue the color changes, because that's where it crashes
The only thing is: let's say I have a custom color scheme running and the user presses the mode key
who wins? the custom color scheme or the profile colors in the keyboard
I think a check function should be bad, the keyboard has either to ignore or query the changes when it's busy and can't handle it instandly. Normaly I expect a option on the wootility to block all external colour changes from outside (except the wootility itself) and a option in the game or software to give the permission to change it. I also expect that a game integration would override the current default colour of the keyboard and when it's closed the colours are set back to normal.
@edit: I think it would be nice if we can block external colour changes depending on the profile. So no program can change the colour of the digital and profile 2 but on 1 and 3 for example. So the owner decide who wins...
Are array functions in the RGB DLL yet?
@hybrid lake the way I imagined it - you'd have to switch contexts. Any app/game represents the context. Have two modes - one static, the other dynamic. Dynamic - current context dictates the rgb etc... Static - well, static color schemes.
@chilly oar good ideas, but I would like to keep it logically as simple as possible. I like having a switch in the wootility to completely disables all color changes
@pliant carbon they should already be there
ok
@round rivet not a 100% sure what you mean, can you apply it to the situation I described above?
So static is no external color changes happening, as soon as an app starts it becomes dynamic and thus solely dictated by the app?
Can you do anything in the Wootility that you can't do via the API? (E.g., is the Wootility directly using the API, or is it using its own "secret" API/interfacing.)
@hybrid lake A switch for all would be good for now, but maybe later on per profile would be great.
@hybrid lake in static it ignores all but whitelisted wootility. In dynamic it doesn't ignore integrations, color changes etc. Regarding your issue - user always wins. 😅
But I don't assume the logic would be that complicated. One global variable in the memory that represent if it's allowed or not, a test condition per RGB change function and one status value per profile that change the variable when it's set.
Of course the user should win, but in this case the user wants to switch a profile, not necessarily the colors
@chilly oar it's not just about the firmware, also UX, profile layout etc
(Imagining the per profile switch has been implemented) So if the user allows it on both profiles, it switches profiles, and keeps the color already made by the API calls?
Also, it would be good with a "Reset color combination" if the software communicating with the API encounters an error and doesn't reset the color.
@round rivet I don't get it... Now, when no programs are open no changes are made (static) and when a application is open it overrides the colours (dynamic). So what do you want to change?
@hybrid lake Yes, whats the only thing that takes a lot of time for it I guess.
@sharp patrol I would assume that the keyboard changes the colour to the selected profile until the colours are reupdated by the program again.
Maybe I missed something in general... The two github Project on top are just the source code of the DLLs right? There are no documentation of the functions available yet or?
I assume it would change to color of the selected profile IF custom colors is turned off for that profile, otherwise changing profile but staying with the color array written by the software.
What does "wooting_rgb_set_disconnected_cb" actually do?
If the keyboard disconnects, it calls the function specified
oh ok
cb = Callback
Will "wooting_rgb_reset" remove all changes from the application so the colours are set to the current profile default values?
Yeah
yes, but currently have no time to test it for myself
I don't ask for it because I don't really need this role.
To late
@sharp patrol That would be the best option (colours stay on profile change when it is allowed), but it makes it a little bit more complex.
It just needs to store the boolean value for allowed/or not on the keyboard, so it can check it up 
And it needs to check it when changing profile.
It needs a little bit more @sharp patrol . It has to check, if temporary changes are made or not, too.
So it musst accept and store the values in the memory, even when it's not allowed on the current profile. When the profile changes and it's allowed on it, it has to use the RGB values from the memory, even when it wasn't allowed on the previous profile. Additional it has to check if a program has currently send RGB values or not, because when no program has changed it the keyboard has to show the default colours of the profile.
If I'm not wrong, it already keeps the RGB written to the keyboard in an array, but if its not allowed on the profile it would need a second array to store it in until it becomes avaliable.
But, like I said, I could be wrong. Jeroen knows better on this than I do.
I have access thx Jeroen!
Make sure to check out the pinned post! 😃
aw sweet! I will definitely check it out!
Probably a dumb question, but what's different about the "Wootdev" firmware?
I see. So the way commands/data are sent to the keyboard with the regular firmware is different than what the newly-released API's use?
Honesty I'm no programmer
But it allows you to access the wootings firmware etc
For example a few people have made custom rgb stuff
@torpid juniper Wootdev firmware includes the SDK support, in a way, it's a beta version of the next firmware release. It'll be standard on every keyboard.
Cool. I guess I just figured that the SDK would communicate with the keyboard in the same way that wootility does now, so I didn't think a firmware update would be necessary. That was probably naive of me. I'm sure there's a good reason for the update.
We separated the RGB and analog communication. Before, it was 1 piece.
The separation is to ensure that we can apply the analog communication on any analog input device instead of only our own keyboard.
Interesting. So you envision this SDK being used to communicate with many analog devices in the future? So devs work with one SDK, and get support for a wide # of devices? I guess that fits with your goal to make analog keyboards a standard.
Yes exactly @torpid juniper that’s why it we are also opting for open sourcing as much as we can.
regarding bool wooting_rgb_array_set_full(const uint8_t* colors_buffer) {
does it take a single number as an input, or an array?
It sends 378 (6 * 21 * 3) byte to the keyboard, starts with the given address.
To answer you question correctly, it takes a address, not a value.
And if you don't want to send nonsense you have to ensure you give it a array of that size that you set before.
I dont get that
in the code all that colors_buffer does it set the colour
@chilly oar
uint8_t red = colors_buffer[baseIndex + 0];
uint8_t green = colors_buffer[baseIndex + 1];
uint8_t blue = colors_buffer[baseIndex + 2];
give me a second
You have to give that function the address of a array with 378 bytes. A byte matrix of 6 row, 21 columns and the three values of the colour (red, green & blue).
I see
The function gose other eyery key in the 6 row - 21 column matrix and take the 3 colour values and send it to the internal buffer.
I'm using python with a DLL so it might be hard to get an array and stuff
I don't khow phyton before, but try ' array = [[1,2], [3,4], [5,6], [7,8]] ' for a 4 * 2 array, for example.
But maybe you have to use a char instead of a integer to hold a byte.
An integer only has 255 different values in phyton, sounds weird?
no but it works
eg I can do this
def keyboard_set_rgb(self,row,column,rgb):
red,green,blue=rgb
self.dll.wooting_rgb_direct_set_key(column,row,red,green,blue)
don't need to be bytes
If you want to use a array maybe this will work ' examplearray = bytes([0x13, 0x00, 0x00, 0x00, 0x08, 0x00]) ' for a 1 * 6 array.
For phyton 3
ok I'll see if I can make it work
Or you can make your integer array as usual and just convert it for the function.
integerList = [1, 2, 3, 4, 5]
byteArray = bytes(integerList )
For an array you use the ctype uint8 array 🤔
I stick to converting everything to ctypes in my wrapper to avoid any possible error on that part.
@pliant carbon
c_array = (ctypes.c_uint8 * (length))(*(0 for i in range(length)))
Note that there are a ton of modules on PyPI to do various things with colors, if interested: https://pypi.org/search/?q=color
(PyPI is the official Python package(/module) index.)
E.g., do you want to take a colour and make it 10° cooler or warmer? Use https://pypi.org/project/color-temp/
@hybrid lake As I understand it correctly the W1 uses two special dedicated USB devices, one for RGB write and one for analog read and you differ them by the usage id. But as I understand the HID stuff by now, you use a reserved value for it befause 0x1337 for RGB and 0x1338 for analog are in the 92 - FEFE reserved range and not in the FF00 - FFFF vendor defined range.
See table 1 on caption 3 in http://www.usb.org/developers/hidpage/Hut1_12v2.pdf
Yeah you're right, I should change it
Who experienced crashes again while switching profiles? I can't reproduce it with the latest WOOTDEV firmware
I think it was @wicked grove
Maybe I need to update my kb
So it's good that I figured it out before the public opening of the dev portal, because the current dll wil no longer work then.
@hybrid lake You wrote "Scan_Numpad5" instead of "SCAN_Numpad5" on https://github.com/PastaJ36/wooting-analog-reader/blob/master/src/wooting-scan-codes.h#L102.
And on https://github.com/PastaJ36/wooting-analog-reader/blob/master/src/wooting-analog-reader.c#L61 you use a 0 millisecond timeout. I think there must be a -1 instead so it handle the call as a blocking one, 0 milliseconds are to fast
madlad
@chilly oar (for future references) Github supports line linking, for example. Linking to line 102 looks like https://github.com/PastaJ36/wooting-analog-reader/blob/master/src/wooting-scan-codes.h#L102
thx
It's non blocking on purpose. The idea is that the function can be called faster than there are new packets available. I'll add it as a comment to make the purpose clear
I changed the spelling error thanks
Feel free to request it in the future on github yourself 😃
@chilly oar Maybe we could do PRs on Github and discuss there, like the cool kids 🤔
Damn timing lol
But yeah I agree, especially to prevent some closed circle that just works on discord
And for many other reasons as well 🙃
It might be over the top for this, but I'm just experimenting with github workflow
ok, but the weird thing is now it works for me with the zero...
yesterday I never got any data from it until I use it in blocking mode, as I said weird thing.
HeisenFirmware
data from where? how did you use it?
At the moment I play a little bit around with the wooting-analog-reader. I set up a Visual Studio project and imported all the sourcefiles so I can debug it. I use Wireshark and some other tools to inspect the USB device informations and capture and inspect the RAW data from the wooting one.
I want to figure out how the HID stuff work and try to create a virtual device, but currently I only use SendInput to send keystrockes to Win.
Did you know if it's possible to send data to the already installed W1 devices from Win itself? So I can send a command to the keyboard device from a program so Win thinks this would came from the hardware.
😕 so you want to reverse engineer the "protocol" and create virtual w1?
Only to know how the USB stuff is working. If it's possible I would reuse the existing devices so I don't need to create my own virtual ones.
I watched the USB raw data only because I don't got any data from the analog reader. So I found out the wooting one was corretly sending the data, but the program don't saw it. But now it work just fine, so on...
https://github.com/nefarius/ScpToolkit @chilly oar
OSR Online is the homepage for Windows driver writers. The NTDEV, NTFSD and NTTALK lists are world-wide peer support forum administered by OSR.
Thx, I don't really want to depend on some big projects, after all I want to learn how this stuff works too and don't rely on other projects. Your last link look very interesting.
I interested in how I can communicate to a USB device but also to a registred device in Win itself.
Fairly enjoyed this read http://kevincuzner.com/2018/02/02/cross-platform-driverless-usb-the-human-interface-device/
By any chance could anyone test the latest commit on Wooting.net and Aurora? I've updated them with the renamed lib but I won't be able to test it for a few days
I'll check it out later today
Hi all, wrote this wooting101 example to use functions from both dlls : the key pressed and side keys are lightened depending on how much you press 😃
nodejs
however when you have this running, the keyboard becomes so sluggish it's impossible to use
i guess that kind of stuff would run better as c
anyway, dll are easy to use, the doc needs some work, but that was forewarned, good work team !!!
why not use node-gyp bindings tho
@quiet root tell me more
Cool, I was wondering why is node-gyp better in this case.
Mostly because I've never used it before and this method is more in line with how you would use it in other languages @quiet root
well node-gyp would give a more native interface to what pmuch all node modules work like
might actually make the node-gyp bindings myself and a coresponding npm package
Yeah for sure, please feel free to do so 👍
will do once i got my wooting kbd 😄
Are you waiting for the two?
Checked it out @placid ledge , looks good. I'm still tweaking some header file comments, working on the RGB part today. The analog part is pretty much final
As in: I read it, didn't test it, sorry
yes jeroen
and giving out untested code is just against my german nature i guess.... would feel really weird
@hybrid lake Thanks
Are there going to be anymore changes to the RGB SDK before release? I was going to make an Aurora release but wanted to wait incase you updated it
@placid ledge @hybrid lake what about the reporting protocol to identify the keyboard on Linux?
No API changes, I'm still looking into the Linux thing but that shouldn't influence aurora too much
We're going live today or this weekend
@round rivet haven't found the time for it yet, sorry. Prepping everything takes a lot longer than expected
Would love to get everyone's feedback on something:
I'm thinking about releasing the SDK on Mozilla Public License Version 2.0. Basically: you can use it for commercial purposes, but modifications need to be published. (As far as I understand)
We choose this so any developer can take the whole library, implement it and release it with whatever. It should protect us from a bigger entity taking everything, modify it without backwards compatibility and push it to developers.
That sounds good
@hybrid lake MPL sounds fine - there were a few issues with the older one but 2.0 looks grand
looks good
i mean u could also go with GNUGPL3
since that wouldnt be bound by the whole same license per file
with MPL2 you could technically get away with not disclosing the source of large changes in where u add new files to the whole thing that werent a part of it before
you could even change the license that those files would fall under
@quiet root "Problem" with GPL is that, say, Razer couldn't static link the analog API library to their custom keyboard setup program, without making their whole program covered by the GPL, meaning they'd have to release their source code.
Using MPL (or LGPL or another "weak copyleft" license) circumvents this problem.
MPL means that the individual source files are covered by the license, but anyone can include the files in any project, as long as they don't alter the MPL-licensed files. (And if they alter the MPL'd files, they can release just those files with alterations, without necessarily releasing the entire project's source.)
razer has a custom keyboard setup program?
i mean i wouldnt be able to think of a current thing that would be like "oh but they cant do this and that without releasing their source" since well the big entities have their own keyboards and wouldnt support other kbds anyways
altho in that case u could also just use GNULGPL3
that would cover even big additions of the libraries but would allow for closed source or different licenses of software that uses any interface the opensource library offers
@quiet root The point of open sourcing the analog API (apart from being The Right Thing To Do™) isn't that companies can support each other's keyboards, but that they can all share the same API, instead of each company developing their own, which could potentially lower the cost to entry for other manufacturers looking into adding analog to their keyboard line-up.
Razer or Roccat or Logitech or whatever aren't necessarily expected to contribute code to the analog API, even if they decide to use it.
ik that this isnt about supporting other kbds but in that case u can always just go LGPL3
which, as you prob know yourself, in this case would allow for closed source config porograms or whatever interfaces with the library/api
technically could add files to the api/lib that change the entire lib and not release those since well only changes to existing files have to keep the license
Sure. Technically, you can also add a front-end interface to an LGPL library that changes the entire LGPL lib and not release that front-end interface.
and prob also crap the performance
i mean as far as i understood the MPL renaming files would consider them as new files
altho im not a lawyer
No, it wouldn't.
It's the contents that are copyrighted, not the filename.
I can't just republish Lord of the Rings under a new name and not have copyright apply to it.
like i said i only know that large enough work done on the source can be entirely published under different licenses
If it contains any of the original source, it's a derivative work and the license will apply to it.
welp at the end its for woot people to choose
My recommendation for the license (in PMs with Jeroen) was Apache 2.0, which is a libre license. MPL is more strict than this, but (ever so slightly) less strict than LGPL.
This is good. Less strict = bigger chance of wider adoption.
And the goal is wide adoption.
(MPL does have a trademark clause though, unlike LGPL.)
altho cant u just release the entire thing under a new license then?
@quiet root If it's released under the MPL? Depends on the version of MPL.
no the AL2
Yes, with AL2 you could. It is a "libre" license.
Which is good for adoption.
But potentially bad for upstream/community.
(Potentially!)
oh cause Jeroen said
We choose this so any developer can take the whole library, implement it and release it with whatever. It should protect us from a bigger entity taking everything, modify it without backwards compatibility and push it to developers.
Yep.
which is also what id be concerned about
That's why he went with MPL over AL2.
In the livestream he also mentioned he felt like the (L)GPL were ideologically burdened, coming from Stallman et al. I don't think so, but eh. I honestly don't care too much about MPL vs. LGPL. They're close enough, and either of them does what Jeroen wants it to do for this.
i technically dont care about what license it would be but thats just cause i personally go full open source anyway
Anyway. Bed time now. I'll be happy to discuss more tomorrow. Licenses (and copyright law) is interesting and mostly poorly understood. 😃
MPL is full open source; https://opensource.org/licenses/alphabetical
(I prefer to use CC0 for public domaining, since I know CC has a ton of lawyers and smart people behind it. No clue where Unlicense comes/originates from.)
👋
@quiet root The Unlicense is very much not like having no license. Having no license means full copyright applies. The Unlicense is licensing the work into the public domain, which is also what CC0 does. See https://creativecommons.org/share-your-work/public-domain/cc0 for the background/thoughts behind the Creative Commons' "Zero"/public domain license. The Unlicense seems like it's a one-man creation, made by someone who's not a lawyer(?). Multiple organisations recommend using CC0 over the Unlicense license due to CC0 being more mature/more comprehensive: https://en.wikipedia.org/wiki/Unlicense#Reception
“No Rights Reserved” CC0 enables scientists, educators, artists and other creators and owners of copyright- or database-protected content to waive those interests in their works and thereby place them as completely as possible in the public domain, so that others may free...
dont really understand how u got copyright when its unlicensed anyway
just blows my mind
@quiet root All creative works are copyrighted by default. You license your copyrighted work under the Unlicense to waive the rights that copyright gives you.
(This is how all software licenses work. Full copyright protection is the default - whatever license you choose determines which copyright rights you waive.)
dont see how i should get copyright when i dont care enough to specify what license my work falls under
just blows my mind
Because that's how copyright works. 😃 If you don't specify a license, full copyright is applied. (Specifying the Unlicense license is specifying a license.)
like i said blows my mind how not giving a crap about a pretty important step of the creation process (choosing the right license) would still reward u
welp at least i know i wont become a copyright lawyer
i mean now i know that those wont affect me much anyway
Is source code for the updater available?
No but you can unpack the wooting-updater+Setup+1.1.0.exe file with 7zip and have a look. It seems to me that the necessary JS code is under $PLUGINSDIR\app-64\resources\app.asar
Line 933622 and follows
7z can open EXEs???
it depends, if the exe are a selfcontaining zip file yes
Oh neat. Thanks!
and if not you may get some structure of the build of the file
but until now I don't get the address of the firmware files out of it
7z can open every pe file
it will just show you the sections if it's not any kind of selfunpacking stuff
Oh that's really cool
Just check out the line on it I wrote above, it's very interesting I think. But I don't want to post the code here.
alright so i coded something to add analog moving to csgo without the joystick thing
there's only 1 problem
i still got no keyboard to test it on lol http://hvhsquad.ru/u/TzuvYI.png
How'd you do that?
altering the movement struct in memory
That sounds like an ez ban lol
Yeah, but games don't like it when you poke around their memory
Idk about Valve though
i'm not doing anything to trigger vac's checks 😛
or rather i'm not doing anything that can trigger vac's checks
It's the same as my username here lol
Neat
just throw wooting-analog-reader.dll in the csgo directory
in case you want to try it out
or loadlibrary will fail
Does windows just load everything?
wym
use a dll injector
Ah
I thought VAC didn't exist on Linux
it does
if you're on linux you're going to need to recompile their analog reader library
Did they even port that?
and replace winapi functions in my project
Yep
i assume
Gn
@jade drum I recommend just using the RGB SDK if you want to do custom effects, it's a real pain to do it in the FW.
I also said in the tech_talk that the fwr file you were looking at is in this format: https://en.wikipedia.org/wiki/Intel_HEX
Intel HEX is a file format that conveys binary information in ASCII text form. It is commonly used for programming microcontrollers, EPROMs, and other types of programmable logic devices. In a typical application, a compiler or assembler converts a program's source code (such...
And I think somebody else mentioned the MCU type: ATXMEGA128A4U and it is indeed made with atmel studio
I'm happy to answer any questions you have about the firmware. It's just not as easy to get to the actual source code compared to JS or something 😛
If you want to get started with FW development I can recommend getting a Teensy or Arduino
I have some experience in FW development
Some of the effects I wanted to do would require extremely fast polling
Which is something I really want to avoid
Could probably do a kernel module that maps the analog to evdev
But that seems more painful
I am just not active here because I don't have my Two yet.
So, how hard is it to recover from bad fw?
If I flashed a FW that did literally nothing, would it still be recoverable?
Is that implemented in the firmware though?
@hybrid lake
Hey, I'm thinking about it
I think flashing is not a big issue, I'm just not sure how you can work on it without full access to the firmware code
The switches and microcontroller are both standard hardware, no?
Yes they are
I could modify our updater tool a little bit to just get the firmware files locally
It's just an S3 url?
If I modify it you can just place the HEX file in the folder and press the update button
should work
The compiled firmware yeah, it's the standard output from Atmel Studio
Neat
But then again, getting it all to work requires knowledge about the hardware too
Sounds like a fun project :D
Let me discuss it with calder and erik a little bit. I've been thinking about doing some sort of open-source lite firmware
no promises though 😅
I just prefer working with the SDK's because it's easier to provide support for
Basic knowledge required is not as high and no bricking issues etc
opensource stuff is always great
Idk if I can do the effects I want with the SDK though :(
Bricking is part of the experience :P
@hybrid lake I was a little bit disappointed when I heared in a stream that you are don't plan to make it open source any more due to your company property, but I can unterstand that. But if you can offer the code for a lite version of it, with maybe only very simple basic stuff or even a little project with only the necessary settings to start to read out the keypress values, it would be great. I don't know but maybe it's possible to have a starting project and some libraries so we can play around and add stuff to it by yourselves without to see your actually written code.
@round rivet I pushed a branch with a new method for linux opening, can you (or someone else) check if it works?
@hybrid lake Is the latest wootdev firmware required?
Shouldn’t be
@hybrid lake Works for me 👌
vtkacenko@Teapot:~/CLionProjects/cross-platform-woot/wooting-hidapi-wrapper-cpp/build$ sudo ./wooting_hidapi_wrapper_cpp-example
Creating analog reader
Creating dispatch queue: AnalogReaderKeyboardNotificationQueue
Dispatch threads: 1
Hidapi initialization status 0.
Analog reader found
Usage page 0.
Product WootingOne.
Manufacturer Wooting.
Path 0002:0005:05
magic
onKeyboardConnected
Closed handle.
Exited library - status 0.
Destructor: Destroying dispatch threads...
Destructor: Joining thread 0 until completion
But the hid_read_timeout reads 0 bytes even when making a blocking call 🤔
Did you install the Dev firmware? It's necessary for the analog reader because it uses the usage page 0x1338 that are not used in the standard firmware.
@chilly oar Yeah, I have dev firmware, albeit not the latest available.
So maybe this is the reason, as far as I know you have to use the WOOTDEV one.
whats the major differences between dev and standard fw
no i mean is there anything that prevents the dev fw from working like a normal one
(This is my personal opinion on it and nothing more)
I think dev is for people who have done one or more of three things:
* Joined the development and contribute so that Jeroen could fix the code to compile and work properly.
* Developed implementations for the API(This means on a larger scale, rather than coding something yourself that uses the API)
* Extended the API with a wrapper for a previously unsupported language
There are of course exceptions, but that is my view of it. 😃
Maybe somebody wants to get into dev; maybe somebody is willing to do the grunt work should the need arise.
well i was asking cause when i get my w2 i want to make a wrapper should the lang still be unsupported
What language are you targeting?
node
I managed to make a python wrapper since python supports loading dll's and feeding it with c types
Can I ask Linux packaging questions here? Assuming yes, the Wootility AppImage has some files in usr/bin/locales/. Are these translations for Wootility itself or from/for bundled framework(s) etc.?
@hybrid lake Neither? I was mostly just poking around trying to see if I could take the .AppImage and package it in a nicer way. (E.g., using up-to-date and non-duplicated system libraries instead of the bundled ones.)
Electron builder docs say:
Linux: AppImage, snap, debian package (deb), rpm, freebsd, pacman, p5p, apk
Is snap new?
@hybrid lake wdym by new ?
As in more recent, I don't remember seeing it before
I'll need to revisit the building and updating, hate not having updates on linux and mac
Kinda. Currently there "is a fight" between Snapcraft and Flatpak
Snapcraft is bundled with latest Ubuntu distros. But is also kinda annoying, since almost all 'useful' packages require snap install --classic ... which is annoying in my experience. Also some other issues...
yeah :(
There is no one-thing fits all right?
Too early for that. Too early for even the "just works without too much hassle" goto solution.
Hmm auto updating seems to work with AppImage now
Can you recommend sticking with AppImage? I feel like it has been pretty smooth so far
@wet knot Not sure what you mean by "manually update". For me the discord install is managed like all other system packages and get updated when I update everything else.
you mean via apt-get upgrade?
yaourt -Syu 😃
I don't like non-rolling release distros (like pretty much all Debian-offspring), so no idea how it'd work there.
But don't blame Linux, blame your distribution(/packaging system/packager). 😃
That's a plus in my book. And most packaging systems have GUIs by now.
i love using the termina
If you want the client to autoupdate itself, don't install it via the package manager.
but apps like discord would be mice to just auto update
i dont
i use terminal for everything
You don't want the client to autoupdate itself? Or you don't install it via your package manager?
no i mean i install everything via the termina
and discord still does not auto update
🤷
Exactly. You install discord via your package manager.
Don't do that if you want Discord to update itself.
(Installing packages via you package manager installs them into system directories. You don't want Discord to have permission to write to system directories when run as your user.)
(Installing Discord as your user (not via package manager) will install it into your $HOME and it will have write permission to overwrite its own files, so it can autoupdate.)
@hybrid lake I wonder what the "pacman" build option/target does. (pacman is Arch Linux's package manager.)
(But a .deb or .rpm can easily be massaged for Arch packaging too.)
not related but i need to change my distro, i installed mint and never used it at uni due to a bad install
id just run linux but uni applications require windows sometimes
😄
And they won't run under Wine?
Some have most wont.
When I took a high school level supplementary course to up my Physics level for acceptance to a uni course, there was a math-ish program needed that I worked seamlessly in Wine. (With the added bonus that I could just wipe and remake the Wine prefix when the 30 day trial period expired. 😂)
Is it at all possible to access the ISP ports?
If someone did manage to read analog values for Wooting One on Linux - please share your incantations. 🙃




