259 lines
9.2 KiB
HTML
259 lines
9.2 KiB
HTML
<html>
|
|
<head>
|
|
<link rel="stylesheet" type="text/css" href="style1.css">
|
|
<title>XT/AT/PS2/Terminal to USB Converter with NKRO - Config</title>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<script type="text/javascript" src="headermenu.js"></script>
|
|
<script type="text/javascript">navtabfn("Config")</script>
|
|
<noscript><div id=jswarn class=\"navtabs\">These docs work best with Javascript enabled!</div></noscript>
|
|
|
|
|
|
<h2>Config <span class="versioninfo">v0.997+</span></h2>
|
|
<hr>
|
|
|
|
<div id="contentslist">
|
|
<ul>
|
|
<li><a href="#overview">Overview</a></li>
|
|
<li><a href="#commands">Command Reference</a></li>
|
|
<ul>
|
|
<li><a href="#force">force</a></li>
|
|
<li><a href="#include">include</a></li>
|
|
<li><a href="#ifselect">ifselect</a></li>
|
|
<li><a href="#ifset">ifset</a></li>
|
|
<li><a href="#ifkeyboard">ifkeyboard</a></li>
|
|
<li><a href="#remapblock">remapblock</a></li>
|
|
<li><a href="#layerblock">layerblock</a></li>
|
|
<li><a href="#macroblock">macroblock</a></li>
|
|
<ul>
|
|
<li><a href="#macro_commands">Macro Commands</a></li>
|
|
<li><a href="#triggers">Macro trigger matching</a></li>
|
|
</ul>
|
|
</ul>
|
|
</ul>
|
|
</div>
|
|
|
|
|
|
<h3><a name="overview">Overview</a></h3>
|
|
<hr>
|
|
|
|
<p>This diagram gives an simplified view of the processing stages inside the converter:<br>
|
|
<img src="images/dataflow.png"/></p>
|
|
<p>The first stage is a fixed translation into HID codes, that cannot be modified by the config. The goal of this stage is
|
|
to map into a reasonable base set of codes for further remapping, and to try and ensure that each key on the keyboard
|
|
results in a unique HID code after this stage.</p>
|
|
<p>The second stage combines remapping and layer functions, since layers are simply alternate remappings.</p>
|
|
<p>The third stage is macro expansion.</p>
|
|
<p>The final stage separates out the internal commands such as SELECTn and BOOT etc. and routes them appropriately, and
|
|
also converts the HIDX codes back into standard HID codes for the keyboard, media, and power code pages.</p>
|
|
|
|
|
|
<h3><a name="commands">Command Reference</a></h3>
|
|
<hr>
|
|
|
|
<h4><a name=force></a>force</h4>
|
|
<hr>
|
|
<p>The <code>force</code> command disables the auto-detection of keyboard type. It is only very rarely needed!</p>
|
|
<pre><code>force {set1|set2|set3|set2ext}
|
|
</code></pre>
|
|
<p>Example:</p>
|
|
<pre><code>force set2
|
|
</code></pre>
|
|
|
|
<h4><a name=include></a>include</h4>
|
|
<hr>
|
|
<p>The <code>include</code> command processes another file, exactly as if it was copy-pasted to where the include command is.</p>
|
|
<pre><code>include <file_name>
|
|
</code></pre>
|
|
<p>Quotation marks are optional unless the file name contains spaces.</p>
|
|
<p>Example:</p>
|
|
<pre><code>include "colemak.sc"
|
|
</code></pre>
|
|
|
|
<h4><a name=ifselect></a>ifselect</h4>
|
|
<hr>
|
|
<p>
|
|
Groups of settings can be toggled by using the <code>ifselect</code> command and defining remaps or macros that output the SELECT_0 to SELECT_7 codes.</p>
|
|
<pre><code>ifselect {<select_num> | any}
|
|
</code></pre>
|
|
<p>
|
|
When any of the SELECT codes are output the entire config is reloaded, and the <code>ifselect</code> commands choose which blocks will be applied.<br/>
|
|
When the converter powers-up, all selects, except select 0, are inactive.<br/>
|
|
Multiple selects can be active at a time.<br/>
|
|
Select 0 is special - it is always active, and when SELECT_0 is output it resets all the other selects.
|
|
</p>
|
|
<p>Blocks following <code>ifselect <select_num></code>, up to the next <code>ifselect</code>, are applied only if the specified select is active.</p>
|
|
<p>Blocks following <code>ifselect any</code>, up to the next <code>ifselect</code>, are applied regardless of which selects are active.</p>
|
|
<p>Example:</p>
|
|
<pre><code># toggle between qwerty and colemak by pressing scroll lock
|
|
|
|
ifselect 1
|
|
include colemak.sc
|
|
|
|
ifselect any
|
|
remapblock
|
|
SCROLL_LOCK SELECT_1
|
|
endblock
|
|
</code></pre>
|
|
|
|
<h4><a name=ifset></a>ifset</h4>
|
|
<hr>
|
|
<p>Blocks following the <code>ifset</code> command are only applied if using one of the specified sets.</p>
|
|
<pre><code>ifset [set1] [set2] [set3] [set2ext] [any]
|
|
</code></pre>
|
|
<p>Example:</p>
|
|
<pre><code>ifset set1 set2
|
|
</code></pre>
|
|
|
|
<h4><a name=ifkeyboard></a>ifkeyboard</h4>
|
|
<hr>
|
|
<p>Blocks following the <code>ifkeyboard</code> command are only applied if the keyboard has the specified ID.</br>
|
|
<pre><code>ifkeyboard {<keyboard_id> | any}
|
|
</code></pre>
|
|
<p>The keyboard ID is given in hexadecimal.</p>
|
|
<p>See the <a href=trouble.html#keyboardid>Troubleshooting</a> section for details of how to find out the ID of your keyboard.</p>
|
|
<p>Example:</p>
|
|
<pre><code>ifkeyboard BABA
|
|
</code></pre>
|
|
|
|
<h4><a name=layerblock></a>layerblock</h4>
|
|
<hr>
|
|
<p>Layerblocks define combinations of function keys to access different layers.</p>
|
|
<pre><code>layerblock
|
|
<fn_key_combo> <layer_num>
|
|
...
|
|
endblock
|
|
</code></pre>
|
|
<p>Function keys are defined by remapping keys to codes FN1 to FN8.</p>
|
|
<p>Example:</p>
|
|
<pre><code>layerblock
|
|
FN1 1
|
|
FN2 1
|
|
FN1 FN2 2
|
|
endblock
|
|
|
|
<a href=config.html#remapblock>remapblock</a>
|
|
LGUI FN1
|
|
RGUI FN2
|
|
endblock
|
|
</code></pre>
|
|
|
|
<h4><a name=remapblock></a>remapblock</h4>
|
|
<hr>
|
|
<p>Remapblocks define remappings either for the base layer, or for the specified
|
|
layer if a <code>layer</code> command is given inside the block.</p>
|
|
<pre><code>remapblock
|
|
[layer <layer_num>]
|
|
<from_hid> <to_hid>
|
|
...
|
|
endblock
|
|
</code></pre>
|
|
<p>Example:</p>
|
|
<pre><code># swap capslock and backspace
|
|
|
|
remapblock
|
|
CAPS_LOCK BACKSPACE
|
|
BACKSPACE CAPS_LOCK
|
|
endblock
|
|
</code></pre>
|
|
|
|
<h4><a name=macroblock></a>macroblock</h4>
|
|
<hr>
|
|
<p>Macroblocks define one or more macros. Macros are triggered by a single HID
|
|
key with any combination of metas, and can have command blocks that execute
|
|
on make and/or break of the HID key.</p>
|
|
<pre><code>macroblock
|
|
macro <hid> [[-][{l|r}]shift] [[-][{l|r}]ctrl] [[-][{l|r}]alt] [[-][{l|r}]gui] ...
|
|
[
|
|
<command> [<value>]
|
|
...
|
|
]
|
|
[onbreak [norestoremeta]
|
|
<command> [<value>]
|
|
...
|
|
]
|
|
endmacro
|
|
...
|
|
endblock
|
|
</code></pre>
|
|
|
|
<p>Example:</p>
|
|
<pre><code>macroblock
|
|
macro SCROLL_LOCK LSHIFT LCTRL -ALT
|
|
PUSH_META CLEAR_META all # save and clear all metas
|
|
PRESS p # press some keys...
|
|
PRESS i
|
|
PRESS N # case is ignored - this results in lowercase 'n'
|
|
SET_META lshift # you have to set modifiers yourself
|
|
PRESS g # results in a capital 'G', since shift is set
|
|
POP_ALL_META # restore metas that were active before
|
|
endmacro
|
|
endblock
|
|
</code></pre>
|
|
|
|
<h5><a name="macro_commands">Macro Commands</a></h5>
|
|
|
|
<table>
|
|
<tr><th>Command</th><th>Description</th></tr>
|
|
<tr><td>NOP</td><td>Does nothing</td></tr>
|
|
<tr><td>PRESS <hid></td><td>Shorthand for MAKE <hid> then BREAK <hid></td></tr>
|
|
<tr><td>MAKE <hid></td><td>Set keystate to 'down'</td></tr>
|
|
<tr><td>BREAK <hid></td><td>Set keystate to 'up'</td></tr>
|
|
<tr><td>ASSIGN_META <metas></td><td>Set all metas to the state specified</td></tr>
|
|
<tr><td>SET_META <metas></td><td>Set specified metas to down state</td></tr>
|
|
<tr><td>CLEAR_META <metas></td><td>Set specified metas to up state</td></tr>
|
|
<tr><td>TOGGLE_META <metas></td><td>Set specified metas to inverse of current state</td></tr>
|
|
<tr><td>POP_META</td><td>Restore metas from the time of the last PUSH_META</td></tr>
|
|
<tr><td>POP_ALL_META</td><td>Restore metas from the time of the first PUSH_META</td></tr>
|
|
<tr><td>DELAY <delay_in_ms></td><td>Delay by the specified number of milliseconds</td></tr>
|
|
<tr><td>CLEAR_ALL</td><td>(internal use e.g. when buffer overrun is received)</td></tr>
|
|
<tr><td>BOOT</td><td>Cause the converter to jump to the bootloader <span class="versioninfo">v1.0+</span></td></tr>
|
|
<tr><td>PUSH_META <cmd> <value></td><td>Save metas for later. Combines with other commands</td></tr>
|
|
</table>
|
|
|
|
<h5><a name="triggers">Macro trigger matching</a></h5>
|
|
|
|
<p>
|
|
Macros are triggered only when the state matches for all of the the specified metas.<br/>
|
|
If a particular meta is not specified, its state is not matched.<br/>
|
|
</p>
|
|
|
|
<table>
|
|
<tr><th>Meta</th><th>Trigger condition</th></tr>
|
|
<tr><td>LSHIFT</td><td>LSHIFT is pressed</td></tr>
|
|
<tr><td>RSHIFT</td><td>RSHIFT is pressed</td></tr>
|
|
<tr><td>SHIFT</td><td>Either LSHIFT or RSHIFT is pressed</td></tr>
|
|
<tr><td>-LSHIFT</td><td>LSHIFT is not pressed</td></tr>
|
|
</table>
|
|
|
|
<p>
|
|
When looking for a match, macros are checked in the order they appear in the config file.<br/>
|
|
The first matching macro found (if any) is executed, so you sometimes need to take of what order the macros are in.
|
|
</p>
|
|
<pre><code>macroblock
|
|
macro SCROLL_LOCK LSHIFT # this macro will execute even if LCTRL is down, so...
|
|
...
|
|
endmacro
|
|
macro SCROLL_LOCK LSHIFT LCTRL # ... this macro will never execute!
|
|
...
|
|
endmacro
|
|
endblock
|
|
</code></pre>
|
|
<p>The correct order would be:</p>
|
|
<pre><code>macroblock
|
|
macro SCROLL_LOCK LSHIFT LCTRL
|
|
...
|
|
endmacro
|
|
macro SCROLL_LOCK LSHIFT
|
|
...
|
|
endmacro
|
|
endblock
|
|
</code></pre>
|
|
|
|
<p>See the <a href="codes.html">HID code list</a> for HID and META values.</p>
|
|
|
|
<hr>
|
|
</body></html>
|