Qmk键盘制作公文翻译第三部分配置

这真是愚蠢的教学。写得很详细。只是一个人

翻译/排版/制作:aialra

原始来源:docs.qmk.fm

*未经作者许可请勿商用

配置

概览

QMK配置器

QMK配置器对Chrome或火狐浏览器兼容性最好。

*注意:来自其他工具的文件,如键盘布局编辑器(KLE Keyboard Layout Editor),这样会使键盘固件不兼容QMK配置器。不要尝试加载它们或者导入它们。QMK配置器是一个完全不同的工具。


QMK配置器:按步操作教程

本页面描述在QMK配置器中构建固件的步骤。


·第一步:选择键盘

单击下拉框并选择要为其创建键映射的键盘。

*如果你的键盘有几个版本,确保你选择了正确的那一个。

我再说一遍,因为这很重要:

*确保您选择了正确的版本!

·第二步:选择你的键盘布局

选择最能代表您想要创建的键映射的布局。有些键盘没有足够的布局或正确的布局尚未被定义。在未来,它们将会得到支持

有时没有一个布局能够支持你想要的配列。在这种情况下,选择LAYOUT_all。

·第三步:命名你的键映射

随你怎么称呼这个键映射。

如果在编译时遇到问题,你可能需要更改这个名称,因为它这个名称可能已经存在于QMK固件repo(报告)中了。

·第四步:定义键映射

关键代码输入可以由下面的三种方法之一完成:

1、拖拽

2、点击布局上的空白点,然后点击你想要的键码

3、点击布局上的空白点,然后按键盘上的物理按键

你可以将鼠标指针悬停在一个键上,一个简短的简介会告诉你这个键码是做什么的。如需详细描述,请参阅:

*如果您选择的布局与您的物理按键不匹配,请将未使用的键留空。如果您不确定使用的是哪个键,例如,您有一个退格键,但LAYOUT_all中有两个键,那么在两个位置都放置相同的退格键的键码。


第五步:保存键映射以备将来更改

当您对您的键映射感到满意或希望稍后对其进行处理时,请按Export keymap按钮。它将保存您的键映射到您的计算机。然后,您可以在将来通过按Import Keymap按钮来加载这个.json文件。

*注意:这与 kbfirmware.com或其他任何工具使用的.json文件类型不同。如果您尝试在这些工具中使用它,或者在这些工具中使用带有QMK配置器的.json,您将会遇到问题。

第六步:编译固件文件

按下绿色的编译按钮。

编译完成后,您将能够按下绿色的下载固件按钮。

下一步:刷写你的键盘固件


配置故障排查

我的.json文件不工作

如果不是bug的问题的话,你看看是不是漏看了在顶部的粗体字的提示:不要使用其他.json文件

在我的布局中有额外的空间?我该怎么办?

如果你指的是有三个空格条的位置,最好的做法是用空格键码来填满它们。退格键和Shift键也可以这样做。

关键代码是什么?

请参阅:

编译不能进行

请仔细检查你的键图的其他层,确保没有乱序的键存在。

问题和缺陷

QMK API(Application Programming Interface,应用程序接口)

 如果不懂这方面的可以跳过

概览

QMK API

QMK API提供了一个异步API, Web和GUI工具可以使用该API为QMK支持的任何键盘编译任意键映射。常规键映射模板支持所有不需要支持C语言的QMK键值代码。键盘维护人员可以提供他们自己的自定义模板来启用更多的功能。

应用程序开发者

键盘维护者

后台开发人员

如果您对API本身感兴趣,您应该从设置开发环境开始,请参阅下面两篇文章。

API必备资料

QMK API

本页面描述了QMK API的使用方式。如果您是一名应用程序开发人员,您可以使用此API为任何QMK键盘编译固件。

概述

此服务是用于编译自定义键映射的异步API。您可以向API发布一些JSON(JavaScript Object Notation 基于 JavaScript 语言的轻量级的数据交换格式),并定期检查状态,当固件完成编译时,您可以下载该固件和源代码(如果需要的话)

一个JSON 有效载荷(payload)的例子:

{

  “keyboard”: “clueboard/66/rev2”,

  “keymap”: “my_awesome_keymap”,

  “layout”: “LAYOUT_all”,

  “layers”: [

    [“KC_GRV”,”KC_1″,”KC_2″,”KC_3″,”KC_4″,”KC_5″,”KC_6″,”KC_7″,”KC_8″,”KC_9″,”KC_0″,”KC_MINS”,”KC_EQL”,”KC_GRV”,”KC_BSPC”,”KC_PGUP”,”KC_TAB”,”KC_Q”,”KC_W”,”KC_E”,”KC_R”,”KC_T”,”KC_Y”,”KC_U”,”KC_I”,”KC_O”,”KC_P”,”KC_LBRC”,”KC_RBRC”,”KC_BSLS”,”KC_PGDN”,”KC_CAPS”,”KC_A”,”KC_S”,”KC_D”,”KC_F”,”KC_G”,”KC_H”,”KC_J”,”KC_K”,”KC_L”,”KC_SCLN”,”KC_QUOT”,”KC_NUHS”,”KC_ENT”,”KC_LSFT”,”KC_NUBS”,”KC_Z”,”KC_X”,”KC_C”,”KC_V”,”KC_B”,”KC_N”,”KC_M”,”KC_COMM”,”KC_DOT”,”KC_SLSH”,”KC_RO”,”KC_RSFT”,”KC_UP”,”KC_LCTL”,”KC_LGUI”,”KC_LALT”,”KC_MHEN”,”KC_SPC”,”KC_SPC”,”KC_HENK”,”KC_RALT”,”KC_RCTL”,”MO(1)”,”KC_LEFT”,”KC_DOWN”,”KC_RIGHT”],

    [“KC_ESC”,”KC_F1″,”KC_F2″,”KC_F3″,”KC_F4″,”KC_F5″,”KC_F6″,”KC_F7″,”KC_F8″,”KC_F9″,”KC_F10″,”KC_F11″,”KC_F12″,”KC_TRNS”,”KC_DEL”,”BL_STEP”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”_______”,”KC_TRNS”,”KC_PSCR”,”KC_SLCK”,”KC_PAUS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”MO(2)”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_PGUP”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”MO(1)”,”KC_LEFT”,”KC_PGDN”,”KC_RGHT”],

    [“KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”RESET”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”MO(2)”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”,”MO(1)”,”KC_TRNS”,”KC_TRNS”,”KC_TRNS”]

  ]

}

如您所见,有效载荷描述了创建和生成键盘固件所需的的所有方面的信息。每一层配列都是与键盘布局宏相同长度的QMK键码列表。如果键盘支持多个布局宏,您可以指定使用哪个宏。


编译工程

要将键映射编译为固件,只需将JSON发布到/v1/compile端点。在下面的示例中,我们将JSON有效载荷放入名为json_data的文件中:

{

  “enqueued”: true,

  “job_id”: “ea1514b3-bdfc-4a7b-9b5c-08752684f7f6”

}

检查状态

提交你的键映射后,你可以使用一个简单的HTTP GET调用来检查状态是否正确:

例如:

{

  “created_at”: “Sat, 19 Aug 2017 21:39:12 GMT”,

  “enqueued_at”: “Sat, 19 Aug 2017 21:39:12 GMT”,

  “id”: “f5f9b992-73b4-479b-8236-df1deb37c163”,

  “status”: “running”,

  “result”: null

}

这向我们显示工程文件已通过队列并正在运行。在这种情况下有5种可能的状态:

·失败:编译服务的某些地方损坏了。

·完成:编译完成,您应该检查result以查看结果。

·排队:键映射正在等待编译服务器可用。

·运行:编译正在进行中,应该很快就会完成。

·未知:一个严重的错误已经发生,你应该尝试去提交这个错误。

检查完成结果

编译作业完成后,您需要检查“result”这个键。这个键的值是一个散列,包含几个关键的信息:

·firmware_binary_url:可刷写固件的URLs列表( URL Uniform Resoure Locator:统一资源定位器,urls为批量)

compware_keymap_url: keymap.c的URLs列表

firmware_source_url:完整固件源代码的URLs列表

output::这个编译作业的stdout和 stderr ,这里可以检查发生的错误


键盘支持

在QMK配置器内支持您的键盘

本页面介绍如何在QMK配置器中正确地使您的键盘被支持。

配置器是如何兼容键盘的

要了解配置器如何兼容键盘,首先你必须了解布局宏。下面是一个例子,来帮助你更好地理解。在这个例子中,我们将想象一个17键的numpad(数字键) PCB,我们将称之为numpad。

|——————–|

|NLk|  /  | *  | –   |

|—–+—+—+—-|

|  7   | 8  |9  | +  |

|—–+—+—+—-|

|4    | 5   | 6 |     |

|—–+—+—+—-|

|1     |2   |3  |Ent|

|———-+—|      |

|0           | .  |      |

|———————|


配置器的API从qmk_firmware/keyboards/<keyboard>/<keyboard>.h中读取键盘的.h文件。对于我们的numpad,这个文件将是qmk_firmware/keyboard /numpad/numpad.h,内容如下:

#pragma once

#define LAYOUT( \

    k00, k01, k02, k03, \

    k10, k11, k12, k13, \

    k20, k21, k22,      \

    k30, k31, k32, k33, \

    k40,      k42       \

  ) { \

    { k00, k01,   k02, k03   }, \

    { k10, k11,   k12, k13   }, \

    { k20, k21,   k22, KC_NO }, \

    { k30, k31,   k32, k33   }, \

    { k40, KC_NO, k42, KC_NO }  \

}

QMK使用KC_NO来指定键盘矩阵中没有设置键位的地方。有时,当需要被调试时XXX, ___或____的形式可以使这个值的可读性更强。这通常被定义在.h文件的开头:

例如:

#pragma once

#define XXX KC_NO

#define LAYOUT( \

    k00, k01, k02, k03, \

    k10, k11, k12, k13, \

    k20, k21, k22,      \

    k30, k31, k32, k33, \

    k40,      k42       \

  ) { \

    { k00, k01, k02, k03 }, \

    { k10, k11, k12, k13 }, \

    { k20, k21, k22, XXX }, \

    { k30, k31, k32, k33 }, \

    { k40, XXX, k42, XXX }  \

}

*这种方法常用于不同于键映射宏,通常使用XXXXXXX (7个大写的X) 来表示KC_NO和 _________(七个下划线)来表示KC_TRNS。

*为了防止用户混淆,最好使用KC_NO。

在这个例子中,布局宏告诉配置器,我们的键盘有17个键,按5行4列排列。我们的键位命名为k<row><column>,并从0开始计数。名称本身实际上并不重要,只要顶部部分(接收来自键映射的键码)与下半部分(指定每个键在矩阵中的位置)之间匹配就可以了。

要以类似于物理键盘的方式显示键盘,我们需要构建一个JSON文件,告诉配置器如何将键的物理位置和大小绑定到键位矩阵。

构建JSON文件

要构建JSON文件,最简单的方法是在键盘布局编辑器(“KLE”)中构建布局,我们将从中将原始数据输入QMK工具,该工具将该数据转换为可让配置器读取和使用的JSON。因为KLE打开时显示的是默认的numpad布局,我们只需要删除默认的布局,然后使用剩下的即可。

一旦布局符合你的要求,请移动到KLE的Raw Data tab,并复制内容如下(例子为上述小pad):

[“Num Lock”,”/”,”*”,”-“],

[“7\nHome”,”8\n↑”,”9\nPgUp”,{h:2},”+”],

[“4\n←”,”5″,”6\n→”],

[“1\nEnd”,”2\n↓”,”3\nPgDn”,{h:2},”Enter”],

[{w:2},”0\nIns”,”.\nDel”]

你可以使用keyboard_name来设置键盘的名称。出于指令目的,我们将把每个键标准在它自己的行上。这只是为了使文件更易于阅读,并不影响配置器的功能。

例如:

{

    “keyboard_name”: “Numpad”,

    “url”: “”,

    “maintainer”: “qmk”,

    “tags”: {

        “form_factor”: “numpad”

    },

    “width”: 4,

    “height”: 5,

    “layouts”: {

        “LAYOUT”: {

            “layout”: [

                {“label”:”Num Lock”, “x”:0, “y”:0},

                {“label”:”/”, “x”:1, “y”:0},

                {“label”:”*”, “x”:2, “y”:0},

                {“label”:”-“, “x”:3, “y”:0},

                {“label”:”7″, “x”:0, “y”:1},

                {“label”:”8″, “x”:1, “y”:1},

                {“label”:”9″, “x”:2, “y”:1},

                {“label”:”+”, “x”:3, “y”:1, “h”:2},

                {“label”:”4″, “x”:0, “y”:2},

                {“label”:”5″, “x”:1, “y”:2},

                {“label”:”6″, “x”:2, “y”:2},

                {“label”:”1″, “x”:0, “y”:3},

                {“label”:”2″, “x”:1, “y”:3},

                {“label”:”3″, “x”:2, “y”:3},

                {“label”:”Enter”, “x”:3, “y”:3, “h”:2},

                {“label”:”0″, “x”:0, “y”:4, “w”:2},

                {“label”:”.”, “x”:2, “y”:4}

            ]

        }

    }

}

layouts(层)包含表示键盘物理布局的数据。它有一个部分是LAYOUT,它需要匹配我们在numpad.h中的布局宏的名称。LAYOUT本身有一个名为layout的部分,它使键盘上的每个物理键都包含一个JSON对象,格式如下(例子同上):

  The name of the key. Not displayed in the Configurator.

  |

  |                   The key’s X-axis location, in key units from the

  |                   | keyboard’s left edge.

  |                   |

  |                   |      The key’s Y-axis location, in key units from

  |                   |      | the keyboard’s top (rear-facing) edge.

  ↓                   ↓      ↓

{“label”:”Num Lock”, “x”:0, “y”:0},

一些对象还含有“w”和“h”键,分别表示键的宽度和高度。

配置器如何编程键位

配置器的API使用布局宏和我们给它的JSON文件来创建一个可视化的键盘,这个键盘中每个可视化的对象都按顺序绑定到一个特定的键,例如:

当用户在配置器中选择左上脚的键并将Num Lock分配给它时,配置器将构建一个以KC_NLCK为第一个键的键映射文件,以此类推。实际上键盘构建并不使用标签键;它们仅供用户在调试信息时或识别特定键时作为info.json文件。


问题和风险

目前,配置器不支持旋钮按键或非矩形的键形状,如ISO配列的Enter。此外,那些偏移于垂直的行的键——比如TKC1800布局上的方向键就是一个典型的例子——如果此类信息的提供者没有调整它们的话,会使KLE-to-JSON转换器无法理解info.json文件。

*TCK1800视频参考以及资料文件:

解决方法

非矩形的键

对于ISO配列输入键,QMK的自定义程序会将其显示为一个矩形键,宽1.25u,高2u,并且使其右边缘与字母数字键块的右边缘对齐。

*标准ISO布局的60%配列键盘,由QMK配置器呈现。

垂直偏移的键

对于垂直偏移的键,请将它们放在KLE中,就像它们没有偏移时候的情况一样,然后根据需要在转换后的JSON文件中编辑y值

*在键盘布局编辑器中呈现的1800布局键盘,没有应用于方向键的垂直偏移量。

*一个Unix差异文件,为我们展示了在键盘的JSON文件中对箭头键进行所需垂直偏移量的更改。


资源下载: