Please send your layouts!If you have some cool layouts for the GH60, please send them to me and I'll include them in this thread. Please attach a short description too.
![GH60 prototype betatesting [Call for layouts, GUI testing] 8238-0](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=8239;image)
![GH60 prototype betatesting [Call for layouts, GUI testing] 8240-1](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=8241;image)
Please download the current beta firmware snapshot for testing:
ukbdc-gh60.hex (22.96 kB - downloaded 1785 times.) [old pre-release]
ukbdc_gh60-0.1.hex (18.21 kB - downloaded 3081 times.) [deprecated and buggy]
ukbdc_gh60-0.2_rc2.hex (20.97 kB - downloaded 2011 times.) [current]
ukbdc_gh60-0.2_rc2_std_layout.hex (23.78 kB - downloaded 2805 times.) [current, preprogrammed with layout]
DISCLAIMER: the current version of firmware is not yet compatible with USB power requirements in sleep mode. It may draw about 20mA or more in sleep. This shouldn't break anything, but you should know anyway.
CHANGELOG
v0.2-rc2
* fixed bug which caused the keyboard to stop working from time to time
* added support for remote wakeup
* pwm-controlled caps-lock LED
* minor code cleanup
v0.1
* first "official build"
Programming instructions in the post below.
Programming gui:
ukbdc_gui.zip (53.36 kB - downloaded 1138 times.) [current version, problems on win 7, please test on linux]
ukbdc_gui_win7.7z (61.75 kB - downloaded 1312 times.) [current version, please test on windows xp, vista and 7]
ukbdc_gui_w7_new.7z (34.03 kB - downloaded 1582 times.) [current windows version, please test on windows xp, vista and 7]
ukbdc_gui_linux_new.tar.gz (40.91 kB - downloaded 1300 times.) [current linux version]
Using the firmwareThe "official" firmware does not contain any layout on its own, so after programming, the keyboard will enumerate but not send any keystrokes. In order to program it with a layout you need to use a program, which is currently in a very early stage and we need your help to find bugs and make it better.
WindowsAfter the keyboard is connected, windows should detect it and install drivers. The keyboard can be used without any extra drivers, but programming requires libusb driver. This will hopefully change, when we find someone with winapi knowledge who will remove the libusb dependency from the GUI program.
1. Install libusb driver: download libusb-win32 (link:
http://sourceforge.net/projects/libusb-win32/files/latest/download?source=files), unpack the zip file. Run inf-wizard.exe from the bin subdirectory. Choose the device with vid = 16c0 and pid = 047c. You should see 2 such devices, choose the one with "Interface 1" in its name. Leave all other options unchanged, save the inf file anywhere when asked and then click "Install driver" in the last screen.
2. Install Python 3.3 (download from here:
http://www.python.org/download/)
3. Download ukbdc_gui, the layout programming program, unpack and run gui.py
4. Choose File->Open and load the example layout file, gh60.lay
5. Click the programming button and wait for a message in the status bar. You should get "Programmed 1026 bytes of layout"
6. At this point the keyboard should send keystrokes according to the programmed layout
Linux1. Download ukbdc_gui, unpack and run:
python3 gui.py (or set the executable bit on gui.py and run it). You need python 3, but most distros will already have it
2. Load the layout, as in windows and click the programming button.
Creating layouts in ukbdc_gui![GH60 prototype betatesting [Call for layouts, GUI testing] 16006-10](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=16006;image)
1. Layer selector - there are 16 independent layers which can be programmed into the keyboard
2. Inheritance selector - each layer (except for layer 0) inherits from some other layer whose number must be less than its own.
3. Programming button - clicking programs the board immediately
4. Key properties - after a key is selected, its properties are presented here; every modification takes place immediately, no need to apply.
How to use inheritanceThis is handy if you want to have at least 2 layers which differ from each other only by a few keys. In this case, set the derived layer to inherit from the base layer and set all derived layer's keys' mode to "inherited". Then override some of the keys by setting the "defined" mode. We should have a button which sets all the keys to inherited... I know.
What are actionsFor each key (on each layer independently) you can define 0, 1 or 2 actions. There are 2 types of actions: "key press" and "key release", and their meaning is self-explanatory. The action basically changes layers. You can change layer by specifying its number ("Go to layer") or in a relative way with respect to the current layer's number ("Change layer by"), in which case you can write either a positive or a negative integer.
How to do XFn button:
one special button switches to a different layer when pressed, and goes back to previous one when releaseddefine Fn button's press action to go to another layer, then on another layer define that same Fn button's release action to go back to your base layer. This will basically mean for example: "on press go to layer 1, on release go back to layer 0".
More Fn buttons:
you can have a few layers, and you can change them by holding multiple Fn keys, for example Fn2 - layer 1, Fn2 - layer 2, and Fn1 and Fn2 together - layer 3On layer 0 define Fn1 with press action "change layer by 2", and release action "change layer by -2", then Fn2 with press action "change layer by 1" and release action "change layer by -1". This basically sets Fn1 as the more significant bit and Fn2 as less significant bit of layer number offset. Now define layers 1, 2 and 3 in such a way that they inherit directly or indirectly from layer 0, so that the Fn1 and Fn2 definitions are common to all 4 layers. On layers 1, 2 and 3 make sure that Fn1 and Fn2 are set to "inherited".
This is how your Fn keys should look on the base layer (Fn1 and Fn2, respectively):
How to do X (advanced)Cycling through layers:
one key, when pressed and released, changes to next layer, after the last layer, it goes back to the first one. For example there are 5 layersOn layer 0 define the key with a press action which changes layer by 1. Make layers 1, 2, 3 inherit directly or indirectly from layer 0 (if you're actually starting from 0, that's the only possible way anyway). On layers 1, 2 and 3 make sure the layer cycling key is set to "inherited". On layer 4, set the layer cycling key's press action to go to layer 0 (as opposed to "change by" as in layer 0).
Conditional keys:
esc changes to tilde/tick, when shift is pressed, so that esc is easily available and at the same time tilde can be written (by holding shift and pressing esc) without switching to a different layer using Fn - good for linux/vim usersI'm assuming you already have a number of layers, and that conditional esc has to work independently from which layer you're on.
On all your existing layers define key number 0 to be esc (or use inheritance, of course).
For every existing layer create another one, which inherits from the respective layer, for example for 4 existing layers, set layers 4, 5, 6, 7 to inherit from 0, 1, 2, 3, respectively.
On each of the new layers set all the keys to "inherited", except key number 0, which you need to set to tick/tilde of course.
Now on layer 0 set both shifts' press action to "change layer by 4", so that on each of those layers, pressing shift goes to its corresponding layer, where esc becomes tilde/shift. On layers 1, 2 and 3 it's enough to set the shift buttons as inherited, since they all indirectly inherit from layer 0. Alternatively you can just redefine shifts on all those layers.
In order to provide a way to come back from the extra layers, on each of them set both shifts to "change layer by -4" on key release. You have to do it for every layer separately, since they inherit from different layers.
Warning: in order for this to work properly, you need to use only relative actions ("change layer by...") in the existing layers or you will have to redefine the action keys in the newly added layers, so that while on one of the extra layers, the keyboard actually switches between the extra layers, instead of going back to the original ones.
Fn-lock:
2 layers: basic and extra, and Fn key. When Fn is pressed the extra layer is active, when it's released, the keyboard goes back to the basic layer. When Fn+space is pressed, the keyboard stays on the extra layer, where pressing Fn temporarily goes back to basic. Pressing Fn+space again goes back to basic, permanently.![GH60 prototype betatesting [Call for layouts, GUI testing] 16088-12](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=16089;image)
![GH60 prototype betatesting [Call for layouts, GUI testing] 16090-13](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=16091;image)
![GH60 prototype betatesting [Call for layouts, GUI testing] 16092-14](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=16093;image)
![GH60 prototype betatesting [Call for layouts, GUI testing] 16094-15](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=16095;image)
You will need 4 layers for this.
Use layers 0 and 2 to define the basic and extra layers.
(1) Set layer 2 to inherit from layer 0, and redefine whichever keys you need.
Set up the Fn button to switch between these layers:
(2) on l. 0 set press action to "change by +2" and
(3) on l.2 set release action to "change by -2".
You have 2 working layers with Fn button.
Now the locking happens when space is pressed while Fn is being held. So that happens on layer 2.
(4) That's why on l. 2 remove the scancode from space and set up press action to "change layer by 1". This will go to layer 3.
(5) Layer 3 needs to be the same as layer 2, so set it to inherit from layer 2.
The only difference is that layer 3 will be used when the keyboard is Fn-locked, as opposed to layer 2 being used when Fn is pressed. We use different layers with the same keys here as internal state of the keyboard which remembers that the keyboard was Fn-locked.
Now on layer 2, space does nothing, so set it to "defined" and define it as regular space with no actions.
Now, being on layer 3, we want to be able to use the basic layer while holding Fn, but Fn can't go to layer 0, since this would loose information about being Fn-locked and after releasing it on layer 0, nothing would happen.
(6) That's why you have to set the press action to "change layer by -2", so that it goes to layer 1 instead.
(7) Now of course layer 1 has to be the same as layer 0, so set all the keys to inherited, and set layer 1 to inherit from layer 0.
(

Remember we want to be able to come back from layer 1 to layer 3, so on layer 1 set the Fn's release action to "change by +2".
The last thing to do is to make sure we can Fn-unlock the keyboard. This happens when we press space, while holding Fn being in the locked mode, so it happens on layer 1.
(9) That's why on layer 1 remove the space's scancode and set the press action to "change layer by -1", which will go back to layer 0.
That's it!
Layoutskomar's layout(this is not the layout included in the ukbdc_gui package; that one is old, deprecated and buggy)![GH60 prototype betatesting [Call for layouts, GUI testing] 16291-16](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=16292;image)
![GH60 prototype betatesting [Call for layouts, GUI testing] 16293-17](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=16294;image)
This is my "official" layout for the GH60. It's designed mainly for linux/vim users, but should work well for others too.
The primary layer contains all the standard keys, except in the upper left-hand corner there's escape.
The second modifier from the left in the 5th row is Fn, and when pressed it activates the second layer. On the second layer there are arrows instead of hjkl (that's for vim users mainly), also another set of arrows in the lower right-hand corner (like in the Poker).
There are also the F keys and a few other, which you can see in the pictures.
You can lock to the second layer by pressing Fn+space. Then the layers are swapped and you have the second by default, and Fn switches it to the first one.
One more feature, especially for linux users is conditional escape. If you press escape while holding shift, tick/tilde is sent, so you effectively get the tilde without changing layers.
Download:
gh60.lay (4.02 kB - downloaded 1243 times.)hasu's poker layout![GH60 prototype betatesting [Call for layouts, GUI testing] 17598-19](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=17599;image)
![GH60 prototype betatesting [Call for layouts, GUI testing] 17600-20](https://geekhack.org/index.php?PHPSESSID=jknv6j3vuaaugl98rakaq3ajoldtq0or&action=dlattach;topic=37570.0;attach=17601;image)
Original Poker has two locking layers, Fn+Q fixes cursor keys on right bottom area and Fn+Space places Esc instead of back quote(`). I add my layout file just for reference
This layout is comprised of these layers:
0: default(qwerty)
1: Space lock(cursor keys)
2: Q lock(Esc)
3: Space and Q lock
4: Fn layer of default
5: Fn layer of Layer 1
6: Fn layer of Layer 2
7: Fn layer of Layer 3
Download: gh60_poker.lay