I got sick of my hotkeys clashing with my apps, so I programmed my Falcon-8 to send F13-F20 keys and used Autohotkey to hook these and implement macros. Couldn't program the F13-F20 with the normal programming software. With a lot of experimenting and trial and error, eventually found the right spot in the firmware bin file and the right bytes to write using a hex editor (... so I guess technically it could be done in non-windows!) Works like a charm. ZERO hotkey clashes with any apps. All modifier keys work too (Ctrl, Alt, Shift, Win) to each give another 8 macros. Now with all these new keys available, I needed a way to remember the macros. Used the same Autohotkey script to put an always on top legend down in the taskbar. Scroll Lock disables the hotkeys so you can press the modifier keys to glance at the legend before using Scroll Lock again to re-enable. Also, the programming combination that seems to work best for me for each Falcon-8 "Prog" (again from trial and error) was :- Line 1, 0s, desired keystroke (eg F13), Line 2, 0.1s nothing (clears modifier), Line 3 usual terminator. Currently tinkering with rewriting my ahk script using Python. For no good reason really. This works. I haven't seen any way yet to distinguish keydown from keyup events. That would be nice. Love the device. I bought a second one for home.
YamiFrankcHere is the main info. If you need more let me know,
Spiroc
; REQUIRES:
; - MAX Falcon-8 Mini keypad programmed to F13 - F20 buttons. Note that these are currently
; non-standard keyboard values. You have to poke them into the right spots in the firmware
; binary. Program the 8 keys (Prog 1-8) to: line 1- 0s, F1-F8 no modifiers,
; line 2- 0.1s, no modifiers, line 3 terminator. Save this. Then edit the firmware and
; replace 8 bytes to get F13 - F20 instead of F1 - F8. eg load 0x68 into binary
; offset 0x53A3, 0x69 @ 0x56C3 etc
; NOTE that if your program is different to mine (Lines 1-3) then these addresses may
; be different for you. To find the new addresses, program to F1-F8, save the binary,
; then program to something else, eg F2-F9, and do a binary compare on the two firmware images.
; You can check if you were successful with AutoHotKey's Key History Window (and
; installkeybdHook command). There's other kb testers too that can verify the keys
; (eg Logitech's Gaming Software when programming G-Keys in a recording mode)
;
; MAX Falcon-8 Mini Settings:
; Microsoft Virtual Key reference:
; https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
;
; Load Binary-offset Scan VK VK_DESC Falcon8
; 0x68 0x53A3 0x64 0x7C F13 Prog 1
; 0x69 0x56C3 0x65 0x7D F14 Prog 2
; 0x6A 0x59E3 0x66 0x7E F15 Prog 3
; 0x6B 0x5D03 0x67 0x7F F16 Prog 4
; 0x6C 0x6023 0x68 0x80 F17 Prog 5
; 0x6D 0x6343 0x69 0x81 F18 Prog 6
; 0x6E 0x6663 0x6A 0x82 F19 Prog 7
; 0x6F 0x6983 0x6B 0x83 F20 Prog 8
; 0x70 0x 0x6C 0x84 F21
; 0x71 0x 0x6D 0x85 F22
; 0x72 0x 0x6E 0x86 F23
; 0x73 0x 0x6F 0x87 F24
FYI, if you program the F13-F20 keys into the Falcon8 and then reopen the firmware using the MAX Falcon8 programming software, here is how it looks. You will notice the keystroke isn't interpreted in the text box. It just says 0x68 (F13)
SpiroCAFAIK, copying and overwriting the firmware file on the kbd does the job without needing the app if all you are doing is using someone else's settings so you should just upload your working firmware file online and post the link here.
SpiroCTrying to download the file through the link you provided - first attempt "ticket could not be found" so no dice, second attempt considered that my one hourly download and is refusing me... Any chance you could upload this to, say, a Dropbox folder or somesuch? Maybe www.tinyupload.com? I'm sure I'm not the only one who'd love to play around with this layout.
SpiroCThanks muchly! I'm sure I won't be the only one to appreciate this, either. I already flashed it to mine and confirmed through AutoHotkey's KeyHistory that the keys are correctly mapped to F13 through F20, left to right and top to bottom. Now I just need to think of things to assign to those keys!
SpiroCI'm obviously no expert, but how come the VK says 0x7c while you need to put in 0x68?
Any idea if I can program the right mouse button onto a key (VK 0x02), and if so: what should I put in there (obviously not 0x02)?
Thanks a bunch for your help!
LastBratFor the right mouse button, did you try the key in the programming GUI called 'App'. It's at the bottom of the screen on the right of the spacebar between the RWin and RCtr keys. Alternatively, if you were interested in programming the buttons to F13-F20 as I did, you can easily use Autohotkey to program the right mouse button (using Autohotkey function MouseClick()) into a macro. It does mean though you have to have AHK running in the tasktray for the macro to work. It's not usually a problem.
0x7c vs 0x68 - It's because the part of the firmware that we are patching is not the bit that sends the VK_Code to the PC. It's something else, for example an internal lookup table of which PC Gui config button was pressed to configure the button. So it's possibly used as an index (and tied together with the rest of the programming parameters like pauses and other keystrokes etc) to eventually lookup the VK Code. I **WISH** I could find the part of the code that sends the VK code to the PC. I've been looking on and off for weeks as a slow background project (with tools like IDA, qemuarm and looking at soldering down a connector to attach a JTAG debugger). I've noticed that when you use the custom macros, you can only have fixed time keypresses (you actually set the fixed keypress time), but when you program it as a set key from the pulldown menu (eg F1-F12), you can use indefinite presses (ie the release code isn't sent until you let go of the button). That's just so much better that it's frustrating it doesn't work with user macros. If the F13-F20 keypresses were indefinite, then the whole Falcon-8 could be used as modifier keys for the entire rest of your main keyboard (eg macros such as F13 + A, F14 + Enter, etc). I want to find a patch where you set the buttons to single keys from the pulldown menu as described above, then patch the VK Code to F13 ... F20
SpiroCThanks a lot for replying! As you said, without AHK it's tough (impossible?) to pull off. I have tried the windows mousekeys with the numlock 5 key as RMB trick, and it works, but only as single click (no contunuos press). It seems this windows implementation also has a fixed make to break (down - release) time :(
I also found the binary offset location for the keys you can program from their drop down list. Indeed they are the same exact scan codes, just in a different location (0x517a is one). So you could try to put your scan code 68 in there and see if it works?
Meanwhile, I've been searching online a bit, and now understand there is a difference between VK and scan codes. I have found a list of the scan codes, which seem to correspond with the falcon 8 ones, here:
http://www.quadibloc.com/comp/scan.htmIn the fourth column, under "USB". I've tested a few keys, and all are like the list says (so ESC is scan code 29 etc.). No mouse button scan codes though, I doubt they exist. I guess this controller does not support mouse key codes. The "ducky pocket rgb" numpad seems to, from what I've seen in their manual.
Any other info or ideas on this topic are welcome!
LastBratfantastic info thanks! I will get back into this and poke a few values into 0x517a, see what happens, report back here. Seeing as you've tested the keyboard App/Menu button and it's only fixed time, I would suggest you try the AHK solution. It definitely lets you programmatically distinguish between keydown and keyup events on the trigger side (eg F13 down, F13 up) and it definitely lets you distinguish between mouse button down and mouse button up events on the macros side. AHK funtion MouseClick has an optional D/U parameter for "down only" and "up only". Your AHK would simply trigger MouseDown action with Falcon8 button down trigger and MouseUp action with Falcon8 button up trigger. You don't even have to test with F13, just try F11 or something already available in the Falcon8 programming pulldown menu. Do not use a Prog macro though. As I mentioned above it uses a fixed time press. I'm assuming you have a Falcon8. If not I can test it for you soon (maybe on the weekend). I already have F13-F20 on my Falcon buttons. I just need a few AHK lines to link them to mouse presses. Let me know.
You know the sad part is that my 4 year old Logitech G510s does EVERYTHING straight out of the box. I can put F13-F20 on the GKeys by just changing an xml file, the keypress times are infinite, and I can easily put any mouse button (again infinite keypress time, I just tested it in about 60 seconds). I am currently looking to upgrade to a high end keyboard (K95, M800 or maybe even an ErgoDox), but, without knowing any of their software, I'm thinking of kicking back to a Logitech G910 even though its Romer G switches only get underwhelming mentions in the mech keyboard circles (no gamer here just a programmer that likes his macros) . The Logitech Gaming Software even let me write a profile script which responds to a keyboard press, sending further keystroke presses (AHK macro style) to trigger my AHK script so that when I change layers by pressing the Logitech M1-M3 keys on the keyboard, my AHK script triggers and changes colours in the AHK Gui. So my little AHK gui app background colour follows the keyboard LCD and key colours. It just works. I'm half tempted to dig out my old Logitech G keyboards (I've got G105 and G110 around the place somewhere) just to see how much of this already works. Lots of these high end keyboards say they're "the most customisable" keyboard. If they were $50 each I'd try them all but they aren't!!!
LastBrat"Whale oil beef hooked". That worked!!!! Dude I think you just fixed my falcon8 :-) I programmed the 8 buttons away from macros (Prog1-Prog8) and set them to fixed single keys from the pulldown menu (I used F1-F8). Then saved the firmware and made these mods:
Button bin_offset Byte_Loaded key
1 0x5189 0x68 F13
2 0x5181 0x69 F14
3 0x5179 0x6A F15
4 0x5149 0x6B F16
5 0x518A 0x6C F17
6 0x5182 0x6D F18
7 0x517A 0x6E F19
8 0x514A 0x6F F20
Confirmed with AHK keys debug/logging window. It's now giving me F13-F20 with arbitrary length keypresses. Thanks!!! Damn. I can pack up the idapro and qemuarm now :-)
Read my older comment above. I can test the MouseClick function if you wish, let me know
S
SpiroCHa, great to hear that :)
Yeah, I have the falcon, so I can always use AHK, though I'd rather have it all in the firmware to be plug and play when switching computers. For now it'll have to do though.
LastBratOk no worries. FYI I did not test ALL unaccounted for values between 0-256. Once I found 0x68 to 0x73 (F13 to F24) I stopped looking. It's painfully slow. Poke in the value, program the firmware, use pc tool to catch the scan code. The values I know so far: 0 for null, 0x04-0x65 (with 0x32, 0x64 missing) for all the regular keyboard keys and also 0xE0-0xE7 for Ctrl/Alt/Shift/Win. IF you wanted to hunt for codes that correspond to the Mouse buttons, then try 0x01-0x03, 0x32, 0x64, 0x66, 0x74-0xDF, 0xE8-0xFF. At least you get 8 buttons to test with per iteration. I'd try something like 0x02, 0x76, 0x78, 0x7E, 0xE9, 0xEB, 0xED, 0xF0.
SpiroCFrom all the keys I programmed, it looks like the falcon accepts all official USB HID device keyboard codes, which I found in the document I linked to, and some other official docs online. Since it's a keyboard, there are no mouse scan codes. There are "mouse hid" mouse scan codes, but they overlap with some keyboard keys, so there needs to be an identifier sent first through usb, to let the computer know which device type it is. You'd need to be able to identify as 2 devices (kb and mouse) I've been told, and I have no clue if it's possible or how to do that...
LastBratHey I just poked around the USB bus with HHD Device Monitoring Studio. I looked at my standard keyboard packets, the Falcon8 packets, and also the Logitech key I had programmed yesterday for that left mouse button click. The regular keys are 8 bytes, eg an 'A' is 01 00 04 00 00 00 00 00, with the 3rd byte (04) corresponding to the scan code and also the Falcon8 gui byte being used. So I understand your earlier comment now that these bytes are real codes. Looking at the firmware image, there are indeed lots of 00 around these bytes. The Falcon8 keys are also coming up as 8 bytes. F13 (0x68 in my list above), sends: 00 00 68 00 00 00 00 00. The Logitech key programmed to Left Mouse Button, sends this packet: 03 00 00 02 00, except don't get too excited. When I programmed the button to be Right Mouse Button, it also sends 03 00 00 02 00. The same packet (as far as HHD Device Monitoring Studio is concerned). So there's more detail there than this free usb sniffer is catching. You might try the value 02, and possibly even a 03 3 bytes before that but the problem is where to put them. The bytes we've been talking about to date correspond to the third byte (00). The 02 comes in after that. Maybe try various gui combinations to see if you can hit a key combo that uses multiple bytes. Try to find the scan code variable mapping. My first guess would be they are only using 4 bytes. I'd replace my F13 key (0x68) as 00 00 00 68 --> 00 03 02 00 ie take a guess at byte swapping (because that's the only way the 3rd byte lines up with 0x5189). I notice also every second one is reversed in memory. 00 00 00 00 00 00 68, followed by 6C 00 00 00 00 00 00. Not sure about why that would be. I think I may have noticed a compiler doing that if you're packing the data in structs.
SpiroCThanks, this is interesting. I'm going to look if I can find something. I also have another pgrogrammable keyboard, a wacom tablet that can send mouse events, so I'll see what codes they are sending. Will also thry this HDD dm studio. We'll see...
LastBratbeen poking around for a tiny bit. It seems the "next track" to "www favorites" codes are different then the standard usb his ones, as they fall within the "reserved" range, namely E9 to FA. And D7 to DE is for "program 1" through 8.
So these codes are interptreted with the USB (report) descriptor, so the computer knows hoe to translafe "FA" into "www favolites", which would normally have the USB hid code of 022A (see http://www.hiemalis.org/~keiji/PC/scancode-translate.pdf).
Also, a problem is that key8 (@0x514A) follows key4 (@0x5149), so there are no additional bytes between them. This and the above info, would suggest there is only 1 bit reserved per key, hence the FA instead of 022A.