diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md index 6287b953090..7be82c650f7 100644 --- a/docs/custom_quantum_functions.md +++ b/docs/custom_quantum_functions.md @@ -267,7 +267,7 @@ You should use this function if you need custom matrix scanning code. It can als If the board supports it, it can be "idled", by stopping a number of functions. A good example of this is RGB lights or backlights. This can save on power consumption, or may be better behavior for your keyboard. -This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system is board is idled and when it wakes up, respectively. +This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system board is idled and when it wakes up, respectively. ### Example suspend_power_down_user() and suspend_wakeup_init_user() Implementation diff --git a/docs/how_keyboards_work.md b/docs/how_keyboards_work.md index 0772f055d68..5697a21872c 100644 --- a/docs/how_keyboards_work.md +++ b/docs/how_keyboards_work.md @@ -63,10 +63,10 @@ You may wonder why a keyboard layout containing all of Unicode is not devised th ## How to (Maybe) Enter Unicode Characters -You can have the firmware send *sequences of keys* to use the [software Unicode Input Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of the target operating system, thus effectively entering characters independently of the layout defined in the OS. +You can have the firmware send *sequences of keys* to use the [software Unicode Input Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_input) of the target operating system, thus effectively entering characters independently of the layout defined in the OS. Yet, it does come with multiple disadvantages: - - Tied to a specific OS a a time (need recompilation when changing OS); + - Tied to a specific OS at a time (need recompilation when changing OS); - Within a given OS, does not work in all software; - Limited to a subset of Unicode on some systems. diff --git a/docs/zh-cn/_summary.md b/docs/zh-cn/_summary.md index df25a3ccd14..b0d9f1c068a 100644 --- a/docs/zh-cn/_summary.md +++ b/docs/zh-cn/_summary.md @@ -7,27 +7,27 @@ * [学习资æº�](newbs_learn_more_resources.md) * [QMK基础](README.md) - * [QMK 简介](getting_started_introduction.md) - * [贡献 QMK](contributing.md) + * [QMK简介](getting_started_introduction.md) + * [å�‘QMK贡献](contributing.md) * [如何使用Github](getting_started_github.md) * [获得帮助](getting_started_getting_help.md) * [问题解答](faq.md) * [一般问题](faq_general.md) - * [构建/编译QMK](faq_build.md) - * [调试/故障排除 QMK](faq_debug.md) - * [键盘布局](faq_keymap.md) + * [构建/编译](faq_build.md) + * [调试/故障排除](faq_debug.md) + * [键盘映射](faq_keymap.md) * 详细指å�— * [安装构建工具](getting_started_build_tools.md) - * [æµ�浪者指å�—](getting_started_vagrant.md) + * [vagrant指å�—](getting_started_vagrant.md) * [构建/编译指令](getting_started_make_guide.md) * [刷新固件](flashing.md) * [定制功能](custom_quantum_functions.md) - * [布局概述](keymap.md) + * [映射概述](keymap.md) * [硬件](hardware.md) - * [AVR 处ç�†å™¨](hardware_avr.md) + * [AVR处ç�†å™¨](hardware_avr.md) * [驱动](hardware_drivers.md) * å�‚考 @@ -35,8 +35,8 @@ * [é…�置选项](config_options.md) * [é”®ç �](keycodes.md) * [记录最佳实践](documentation_best_practices.md) - * [文档指å�—](documentation_templates.md) - * [è¯�汇表](reference_glossary.md) + * [文档模æ�¿](documentation_templates.md) + * [术语表](reference_glossary.md) * [å�•元测试](unit_testing.md) * [有用的功能](ref_functions.md) * [é…�置器支æŒ�](reference_configurator_support.md) @@ -44,35 +44,35 @@ * [特性](features.md) * [基本键ç �](keycodes_basic.md) - * [US ANSI 控制键](keycodes_us_ansi_shifted.md) + * [US ANSI控制ç �](keycodes_us_ansi_shifted.md) * [é‡�å­�é”®ç �](quantum_keycodes.md) * [高级键ç �](feature_advanced_keycodes.md) * [音频](feature_audio.md) - * [自动控制](feature_auto_shift.md) + * [自动shift](feature_auto_shift.md) * [背光](feature_backlight.md) * [è“�牙](feature_bluetooth.md) - * [Bootmagic](feature_bootmagic.md) + * [热改键](feature_bootmagic.md) * [组å�ˆ](feature_combo) * [命令](feature_command.md) * [动æ€�å®�指令](feature_dynamic_macros.md) * [ç¼–ç �器](feature_encoders.md) - * [Grave Escape](feature_grave_esc.md) - * [é”®é”�](feature_key_lock.md) - * [层](feature_layouts.md) - * [引导键](feature_leader_key.md) - * [LED 阵列](feature_led_matrix.md) + * [é‡�音å�·Escå¤�å�ˆé”®](feature_grave_esc.md) + * [自é”�é”®](feature_key_lock.md) + * [布局](feature_layouts.md) + * [å‰�导键](feature_leader_key.md) + * [LED阵列](feature_led_matrix.md) * [å®�指令](feature_macros.md) * [鼠标键](feature_mouse_keys.md) * [一键功能](feature_advanced_keycodes.md#one-shot-keys) * [指针设备](feature_pointing_device.md) - * [PS/2 é¼ æ ‡](feature_ps2_mouse.md) - * [RGB å…‰](feature_rgblight.md) - * [RGB 矩阵](feature_rgb_matrix.md) + * [PS/2é¼ æ ‡](feature_ps2_mouse.md) + * [RGBç�¯å…‰](feature_rgblight.md) + * [RGB矩阵](feature_rgb_matrix.md) * [空格候补æ�¢æŒ¡](feature_space_cadet_shift.md) * [空格候补æ�¢æŒ¡å›žè½¦](feature_space_cadet_shift_enter.md) * [速录机](feature_stenography.md) * [æ�¢æ‰‹](feature_swap_hands.md) - * [踢è¸�舞](feature_tap_dance.md) + * [多击键](feature_tap_dance.md) * [终端](feature_terminal.md) * [热æ•�打å�°æœº](feature_thermal_printer.md) * [Unicode](feature_unicode.md) @@ -80,16 +80,16 @@ * [速度键](feature_velocikey.md) * 针对制造者和定制者 - * [飞线指å�—](hand_wire.md) - * [ISP 刷新指å�—](isp_flashing_guide.md) - * [ARM 调试指å�—](arm_debugging.md) - * [I2C 驱动](i2c_driver.md) - * [GPIO 控制器](internals_gpio_control.md) - * [Proton C 转æ�¢](proton_c_conversion.md) + * [手工连线指å�—](hand_wire.md) + * [ISP刷新指å�—](isp_flashing_guide.md) + * [ARM调试指å�—](arm_debugging.md) + * [I2C驱动](i2c_driver.md) + * [GPIO控制器](internals_gpio_control.md) + * [Proton C转æ�¢](proton_c_conversion.md) * 深入了解 * [键盘如何工作](how_keyboards_work.md) - * [ç�†è§£ QMK](understanding_qmk.md) + * [ç�†è§£QMK](understanding_qmk.md) * å…¶ä»–è¯�题 * [使用Eclipseå¼€å�‘QMK](other_eclipse.md) @@ -99,8 +99,8 @@ * QMK 内构 (正在编写) * [定义](internals_defines.md) * [输入回调寄存器](internals_input_callback_reg.md) - * [Midi 设备](internals_midi_device.md) - * [Midi 设备设置过程](internals_midi_device_setup_process.md) - * [Midi 工具库](internals_midi_util.md) + * [Midi设备](internals_midi_device.md) + * [Midi设备设置过程](internals_midi_device_setup_process.md) + * [Midi工具库](internals_midi_util.md) * [å�‘é€�函数](internals_send_functions.md) - * [Sysex 工具](internals_sysex_tools.md) + * [Sysex工具](internals_sysex_tools.md) diff --git a/docs/zh-cn/custom_quantum_functions.md b/docs/zh-cn/custom_quantum_functions.md new file mode 100644 index 00000000000..42ceba9cac7 --- /dev/null +++ b/docs/zh-cn/custom_quantum_functions.md @@ -0,0 +1,490 @@ +# ÈçºÎ¶¨ÖÆÄã¼üÅ̵ŦÄÜ + +¶ÔÓںܶàÈËÀ´Ëµ¿ÍÖÆ»¯¼üÅ̿ɲ»Ö»ÊÇÏòÄãµÄµçÄÔ·¢ËÍÄã°´ÁËÄǸö¼þÕâô¼òµ¥¡£Äã¿Ï¶¨ÏëʵÏֱȼòµ¥°´¼üºÍºê¸ü¸´ÔӵŦÄÜ¡£QMKÓÐÄÜÈÃÄã×¢Èë´úÂëµÄ¹³×Ó, ¸²¸Ç¹¦ÄÜ, ÁíÍ⣬»¹¿ÉÒÔ×Ô¶¨Òå¼üÅÌÔÚ²»Í¬Çé¿öϵÄÐÐΪ¡£ + +±¾Ò³²»¼Ù¶¨ÈκÎÌØÊâµÄQMK֪ʶ£¬µ«ÔĶÁ[Àí½âQMK](understanding_qmk.md)½«»áÔÚ¸ü»ù´¡µÄ²ãÃæ°ïÄãÀí½â·¢ÉúÁËʲô¡£ + +## A Word on Core vs ¼üÅÌ vs ²¼¾Ö + +ÎÒÃǰÑqmk×éÖ¯³ÉÒ»¸ö²ã´Î½á¹¹£º + +* Core (`_quantum`) + * Keyboard/Revision (`_kb`) + * Keymap (`_user`) + +ÏÂÃæÃèÊöµÄÿһ¸öº¯Êý¶¼¿ÉÒÔÔÚ¶¨ÒåÉϼÓÒ»¸ö`_kb()`»ò `_user()` ºó׺¡£ ½¨ÒéÔÚ¼üÅÌ/ÐÞ¶©²ãʹÓÃ`_kb()`ºó׺£¬ÔÚ²¼¾Ö²ãʹÓÃ`_user()`ºó׺¡£ + +ÔÚ¼üÅÌ/ÐÞ¶©²ã¶¨Ò庯Êýʱ£¬`_kb()`ÔÚÖ´ÐÐÈκδúÂëǰÏȵ÷ÓÃ`_user()`ÊDZØÒªµÄ£¬²»È»²¼¾Ö²ãº¯Êý¾Í²»Òª±»µ÷Óᣠ+ +# ×Ô¶¨Òå¼üÂë + +µ½Ä¿Ç°ÎªÖ¹£¬×î³£¼ûµÄÈÎÎñÊǸü¸ÄÏÖÓмüÂëµÄÐÐΪ»ò´´½¨ÐµļüÂë¡£´Ó´úÂë½Ç¶ÈÀ´¿´ÕâЩ²Ù×÷¶¼ºÜÏàËÆ¡£ + +## ¶¨ÒåÒ»¸öмüÂë + +´´½¨¼üÂëµÚÒ»²½£¬ÏÈö¾Ù³öËüÈ«²¿£¬Ò²¾ÍÊǸø¼üÂëÆð¸öÃû×Ö²¢·ÖÅäΨһÊýÖµ¡£QMKûÓÐÖ±½ÓÏÞÖÆ×î´ó¼üÂëÖµ´óС£¬¶øÊÇÌṩÁËÒ»¸ö`SAFE_RANGE`ºê¡£Äã¿ÉÒÔÔÚö¾ÙʱÓÃ`SAFE_RANGE`À´±£Ö¤ÄãÈ¡µÃÁËΨһµÄ¼üÂëÖµ¡£ + + +ÕâÓÐö¾ÙÁ½¸ö¼üÂëµÄÀý×Ó¡£°ÑÕâ¿é¼Óµ½`keymap.c`µÄ»°Äã¾ÍÔÚ²¼¾ÖÖÐÄÜÓÃ`FOO`ºÍ`BAR`ÁË¡£ + +```c +enum my_keycodes { + FOO = SAFE_RANGE, + BAR +}; +``` + +## Ϊ¼üÂëµÄÐÐΪ±à³Ì + +µ±Ä㸲¸ÇÒ»¸öÒÑ´æÔÚ°´¼üµÄÐÐΪʱ£¬»ò½«Õâ¸öÐÐΪ¸³¸øÐ¼üʱ£¬ÄãÒªÓÃ`process_record_kb()`ºÍ`process_record_user()`º¯Êý¡£ÕâÁ©º¯ÊýÔÚ¼ü´¦ÀíÖÐÕæÊµ¼üʼþ±»´¦Àíǰ±»QMKµ÷Óá£Èç¹ûÕâÁ©º¯Êý·µ»Ø`true`£¬QMK½«»áÓÃÕý³£µÄ·½Ê½´¦Àí¼üÂë¡£ÕâÑù¿ÉÒԺܷ½±ãµÄÀ©Õ¹¼üÂëµÄ¹¦Äܶø²»ÊÇÌæ»»Ëü¡£Èç¹ûº¯Êý·µ»Ø`false` QMK»áÌø¹ýÕý³£¼ü´¦Àí£¬È»ºó·¢Ëͼü×Ó̧Æð»¹Êǰ´ÏÂʼþ¾ÍÓÉÄã¾ö¶¨ÁË¡£ + +µ±Ä³¸ö¼ü°´Ï»òÊÍ·ÅʱÕâÁ©º¯Êý»á±»µ÷Óᣠ+ +### process_record_user()`º¯ÊýʾÀýʵÏÖ + +Õâ¸öÀý×Ó×öÁËÁ½¸öÊ¡£×Ô¶¨ÒåÁËÒ»¸ö½Ð×ö`FOO`µÄ¼üÂëµÄÐÐΪ£¬²¢²¹³äÁËÔÚ°´Ï»سµÊ±²¥·ÅÒô·û¡£ + +```c +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case FOO: + if (record->event.pressed) { + // °´ÏÂʱ×öЩʲô + } else { + // ÊÍ·Åʱ×öЩʲô + } + return false; // Ìø¹ý´Ë¼üµÄËùÓнøÒ»²½´¦Àí + case KC_ENTER: + // µ±°´Ï»سµÊ±²¥·ÅÒô·û + if (record->event.pressed) { + PLAY_NOTE_ARRAY(tone_qwerty); + } + return true; // ÈÃQMK´¥·¢»Ø³µ°´ÏÂ/ÊÍ·Åʼþ + default: + return true; // Õý³£´¦ÀíÆäËû¼üÂë + } +} +``` + +### `process_record_*` º¯ÊýÎĵµ + +* ¼üÅÌ/ÐÞ¶©: `bool process_record_kb(uint16_t keycode, keyrecord_t *record)` +* ²¼¾Ö: `bool process_record_user(uint16_t keycode, keyrecord_t *record)` + +`keycode(¼üÂë)`²ÎÊýÊÇÔÚ²¼¾ÖÉ϶¨ÒåµÄ£¬±ÈÈç`MO(1)`, `KC_L`, µÈµÈ¡£ ÄãÒªÓà `switch...case` ¿éÀ´´¦ÀíÕâЩʼþ¡£ + +`record`²ÎÊýº¬ÓÐʵ¼Ê°´¼üµÄÐÅÏ¢£º + +```c +keyrecord_t record { + keyevent_t event { + keypos_t key { + uint8_t col + uint8_t row + } + bool pressed + uint16_t time + } +} +``` + +# LED¿ØÖÆ + +qmkÌṩÁ˶ÁÈ¡HID¹æ·¶°üº¬µÄ5¸öLEDµÄ·½·¨¡£: + +* `USB_LED_NUM_LOCK` +* `USB_LED_CAPS_LOCK` +* `USB_LED_SCROLL_LOCK` +* `USB_LED_COMPOSE` +* `USB_LED_KANA` + +ÕâÎå¸ö³£Á¿¶ÔÓ¦ÓÚÖ÷»úLED״̬µÄλÖÃλ¡£ +ÓÐÁ½ÖÖ·½·¨¿ÉÒÔ»ñµÃÖ÷»úLED״̬£º + +* ͨ¹ýÖ´ÐÐ `led_set_user()` +* ͨ¹ýµ÷Óà `host_keyboard_leds()` + +## `led_set_user()` + +µ±5¸öLEDÖÐÈκÎÒ»¸öµÄ״̬ÐèÒª¸Ä±äʱ£¬´Ëº¯Êý½«±»µ÷Óᣴ˺¯Êýͨ¹ý²ÎÊýÊäÈëLED²ÎÊý¡£ +ʹÓÃ`IS_LED_ON(usb_led, led_name)`ºÍ`IS_LED_OFF(usb_led, led_name)`ÕâÁ½¸öºêÀ´¼ì²éLED״̬¡£ + +!> `host_keyboard_leds()`¿ÉÄÜ»áÔÚ`led_set_user()`±»µ÷ÓÃǰ·µ»ØÐÂÖµ¡£ + +### `led_set_user()`º¯ÊýʾÀýʵÏÖ + +```c +void led_set_user(uint8_t usb_led) { + if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) { + writePinLow(B0); + } else { + writePinHigh(B0); + } + if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) { + writePinLow(B1); + } else { + writePinHigh(B1); + } + if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) { + writePinLow(B2); + } else { + writePinHigh(B2); + } + if (IS_LED_ON(usb_led, USB_LED_COMPOSE)) { + writePinLow(B3); + } else { + writePinHigh(B3); + } + if (IS_LED_ON(usb_led, USB_LED_KANA)) { + writePinLow(B4); + } else { + writePinHigh(B4); + } +} +``` + +### `led_set_*`º¯ÊýÎĵµ + +* ¼üÅÌ/ÐÞ¶©: `void led_set_kb(uint8_t usb_led)` +* ²¼¾Ö: `void led_set_user(uint8_t usb_led)` + +## `host_keyboard_leds()` + +µ÷ÓÃÕâ¸öº¯Êý»á·µ»Ø×îºóÊÕµ½µÄLED״̬¡£Õâ¸öº¯ÊýÔÚ`led_set_*`Ö®Íâ¶ÁÈ¡LED״̬ʱºÜÓÐÓ㬱ÈÈçÔÚ[`matrix_scan_user()`](#¾ØÕóɨÃè´úÂë). +ΪÁ˱ã½Ý£¬Äã¿ÉÒÔÓÃ`IS_HOST_LED_ON(led_name)`ºÍ`IS_HOST_LED_OFF(led_name)` ºê£¬¶ø²»Ö±½Óµ÷Óúͼì²é`host_keyboard_leds()`¡£ + +## ÉèÖÃÎïÀíLED״̬ + +һЩ¼üÅÌʵÏÖÁËΪÉèÖÃÎïÀíLEDµÄ״̬ÌṩÁË·½±ãµÄ·½·¨¡£ + +### Ergodox Boards + +ErgodoxʵÏÖÁËÌṩ`ergodox_right_led_1`/`2`/`3_on`/`off()`À´ÈÃÿ¸öLED¿ª»ò¹Ø, Ò²¿ÉÒÔÓà `ergodox_right_led_on`/`off(uint8_t led)` °´Ë÷Òý´ò¿ª»ò¹Ø±ÕËûÃÇ¡£ + +´ËÍ⣬»¹¿ÉÒÔʹÓÃ`ergodox_led_all_set(uint8_t n)`Ö¸¶¨ËùÓÐLEDµÄÁÁ¶È¼¶±ð£»Õë¶Ôÿ¸öLEDÓÃ`ergodox_right_led_1`/`2`/`3_set(uint8_t n)`£»Ê¹ÓÃË÷ÒýµÄ»°ÓÃ`ergodox_right_led_set(uint8_t led, uint8_t n)`¡£ + +Ergodox boards ͬʱ¶¨ÒåÁË×îµÍÁÁ¶È¼¶±ð`LED_BRIGHTNESS_LO`ºÍ×î¸ßÁÁ¶È¼¶±ð`LED_BRIGHTNESS_HI`(ĬÈÏ×î¸ß). + +# ¼üÅ̳õʼ»¯´úÂë + +¼üÅ̳õʼ»¯¹ý³ÌÓм¸¸ö²½Öè¡£ÄãÊÇÓÃÄǸöº¯ÊýÈ¡¾öÓÚÄãÏëÒª×öʲô¡£ + +ÓÐÈý¸öÖ÷Òª³õʼ»¯º¯Êý£¬°´µ÷ÓÃ˳ÐòÁгö¡£ + +* `keyboard_pre_init_*` - »áÔÚ´ó¶àÊýÆäËû¶«Î÷ÔËÐÐǰÔËÐС£ÊÊÓÃÓÚÄÄЩÐèÒªÌáǰÔËÐеÄÓ²¼þ³õʼ»¯¡£ +* `matrix_init_*` - Ôڹ̼þÆô¶¯¹ý³ÌÖм䱻µ÷ÓᣴËʱӲ¼þÒѳõʼ»¯£¬¹¦ÄÜÉÐδ³õʼ»¯¡£ +* `keyboard_post_init_*` - Ôڹ̼þÆô¶¯¹ý³Ì×îºó±»µ÷Óᣴó¶àÊýÇé¿öÏ£¬ÄãµÄ¡°¿ÍÖÆ»¯¡±´úÂë¶¼¿ÉÒÔ·ÅÔÚÕâÀï¡£ + +!> ¶ÔÓÚ´ó¶àÊýÈËÀ´Ëµ`keyboard_post_init_user`ÊÇÄãÏëÒªµ÷Óõĺ¯Êý¡£ÀýÈç, ´ËʱÄã¿ÉÒÔÉèÖÃRGBµÆ·¢¹â¡£ + +## ¼üÅÌÔ¤³õʼ»¯´úÂë + +Õâ´úÂ뼫ÔçÔËÐУ¬ÉõÖÁ¶¼ÔÚUSB³õʼ»¯Ç°ÔËÐС£ + +ÔÚÕâÖ®ºó²»¾Ã¾ØÕó¾Í±»³õʼ»¯ÁË¡£ + +¶ÔÓÚ´ó¶àÊýÓû§À´Ëµ,ÕâÓò»µ½£¬ÒòΪËüÖ÷ÒªÊÇÓÃÓÚÃæÏòÓ²¼þµÄ³õʼ»¯¡£ + +µ«Èç¹ûÄãÓÐÓ²¼þ³õʼ»¯µÄ»°·ÅÔÚÕâÀïÔٺò»¹ýÁË(±ÈÈç³õʼ»¯LEDÒý½ÅÒ»ÀàµÄ). + +### `keyboard_pre_init_user()`º¯ÊýʾÀýʵÏÖ + +±¾ÀýÖÐÔÚ¼üÅ̼¶±ð£¬É趨 B0, B1, B2, B3, ºÍ B4 ÊÇLEDÒý½Å¡£ + +```c +void keyboard_pre_init_user(void) { + // µ÷ÓüüÅÌÔ¤³õʼ»¯´úÂë + + // ÉèÖÃLEDÒý½ÅΪÊä³öģʽ + setPinOutput(B0); + setPinOutput(B1); + setPinOutput(B2); + setPinOutput(B3); + setPinOutput(B4); +} +``` + +### `keyboard_pre_init_*` º¯ÊýÎĵµ + +* ¼üÅÌ/ÐÞ¶©: `void keyboard_pre_init_kb(void)` +* ²¼¾Ö: `void keyboard_pre_init_user(void)` + +## ¾ØÕó³õʼ»¯´úÂë + +Õ⽫»áÔÚ¾ØÕó³õʼ»¯Ê±±»µ÷Óã¬ÔÚijЩӲ¼þÉèÖúú󣬵«ÔÚһЩ¹¦Äܱ»³õʼ»¯Ç°¡£ + +ÕâÔÚÄãÉèÖÃÆäËûµØ·½»áÓõ½µÄ¶«Î÷µÄʱºò»áºÜÓÐÓ㬵«ÓëÓ²¼þÎ޹أ¬Ò²²»ÒÀÀµÓÚËüµÄÆô¶¯Î»Öᣠ+ + +### `matrix_init_*`º¯ÊýÎĵµ + +* ¼üÅÌ/ÐÞ¶©: `void matrix_init_kb(void)` +* ²¼¾Ö: `void matrix_init_user(void)` + + +## ¼üÅ̺ó³õʼ»¯´úÂë + +ÕâÊǼüÅ̳õʼ»¯¹ý³ÌÖеÄ×îºóÒ»¸öÈÎÎñ¡£Èç¹ûÄúÏë¸ü¸ÄÄ³Ð©ÌØÐÔ£¬Õâ»áºÜÓÐÓã¬ÒòΪ´ËʱӦ¸Ã¶ÔËüÃǽøÐгõʼ»¯¡£ + + +### `keyboard_post_init_user()`ʾÀýʵÏÖ + +±¾Ê¾ÀýÔÚËùÓгõʼ»¯Íê³ÉºóÔËÐУ¬ÅäÖÃRGBµÆ¡£ + +```c +void keyboard_post_init_user(void) { + // µ÷Óúó³õʼ»¯´úÂë + rgblight_enable_noeeprom(); // ʹÄÜRgb£¬²»±£´æÉèÖà + rgblight_sethsv_noeeprom(180, 255, 255); // ½«ÑÕÉ«ÉèÖõ½À¶ÂÌÉ«(ÇàÉ«)²»±£´æ + rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // ÉèÖÿìËÙºôÎüģʽ²»±£´æ +} +``` + +### `keyboard_post_init_*` º¯ÊýÎĵµ + +* ¼üÅÌ/ÐÞ¶©: `void keyboard_post_init_kb(void)` +* ²¼¾Ö: `void keyboard_post_init_user(void)` + +# ¾ØÕóɨÃè´úÂë + +¿ÉÄܵϰÄãÒªÓÃ`process_record_*()`×Ô¶¨Òå¼üÅÌ£¬ÒÔÕâÖÖ·½Ê½Á¬½Óµ½Ê¼þÖУ¬ÒÔÈ·±£´úÂë²»»á¶Ô¼üÅ̲úÉú¸ºÃæµÄÐÔÄÜÓ°Ï졣Ȼ¶ø£¬ÔÚ¼«ÉÙÊýÇé¿öÏ£¬ÓбØÒª½øÐоØÕóɨÃè¡£ÔÚÕâЩº¯ÊýÖÐÒªÌØ±ð×¢Òâ´úÂëµÄÐÔÄÜ£¬ÒòΪËüÿÃëÖÁÉÙ±»µ÷ÓÃ10´Î¡£ + +### `matrix_scan_*`ʾÀýʵÏÖ + +Õâ¸öÀý×Ó±»¹ÊÒâÊ¡ÂÔÁË¡£ÔÚhookÕâÑùÒ»¸ö¶ÔÐÔÄܼ°ÆäÃô¸ÐµÄÇøÓò֮ǰ£¬ÄúÓ¦¸Ã×ã¹»Á˽âqmkµÄÄÚ²¿½á¹¹£¬ÒÔ±ãÔÚûÓÐʾÀýµÄÇé¿öϱàд¡£Èç¹ûÄãÐèÒª°ïÖú£¬Çë[½¨Á¢Ò»¸öissue](https://github.com/qmk/qmk_firmware/issues/new)»ò[ÔÚDiscordÉÏÓëÎÒÃǽ»Á÷](https://discord.gg/Uq7gcHh). + +### `matrix_scan_*` º¯ÊýÎĵµ + +* ¼üÅÌ/ÐÞ¶©: `void matrix_scan_kb(void)` +* ²¼¾Ö: `void matrix_scan_user(void)` + +¸Ãº¯ÊýÔÚÿ´Î¾ØÕóɨÃèʱ±»µ÷Óã¬Õâ»ù±¾ÓëMCU´¦ÀíÄÜÁ¦ÉÏÏÞÏàͬ¡£ÔÚÕâÀïд´úÂëÒª½÷É÷£¬ÒòΪËü»áÔËÐкܶà´Î¡£ + +Äã»áÔÚ×Ô¶¨Ò徨ÕóɨÃè´úÂëʱÓõ½Õâ¸öº¯Êý¡£ÕâÒ²¿ÉÒÔÓÃ×÷×Ô¶¨Òå״̬Êä³ö(±ÈÈçLEDµÆ»òÕ߯ÁÄ»)»òÕ߯äËû¼´±ãÓû§²»ÊäÈëÄãÒ²Ï붨ÆÚÔËÐеŦÄÜ¡£ + + +# ¼üÅÌ ¿ÕÏÐ/»½ÐÑ ´úÂë + +Èç¹û¼üÅÌÖ§³Ö¾Í¿ÉÒÔͨ¹ýÍ£Ö¹Ò»´óƱ¹¦ÄÜÀ´´ïµ½"¿ÕÏÐ"¡£RGBµÆºÍ±³¹â¾ÍÊǺܺõÄÀý×Ó¡£Õâ¿ÉÒÔ½ÚÔ¼Äܺģ¬Ò²¿ÉÄÜÈÃÄã¼üÅÌ·çζ¸ü¼Ñ¡£ + +ÓÃÁ½¸öº¯Êý¿ØÖÆ: `suspend_power_down_*`ºÍ`suspend_wakeup_init_*`, ·Ö±ðÔÚϵͳ°å¿ÕÏкͻ½ÐÑʱµ÷Óᣠ+ + +### suspend_power_down_user()ºÍsuspend_wakeup_init_user()ʾÀýʵÏÖ + + +```c +void suspend_power_down_user(void) { + rgb_matrix_set_suspend_state(true); +} + +void suspend_wakeup_init_user(void) { + rgb_matrix_set_suspend_state(false); +} +``` + +### ¼üÅÌ ¹ÒÆð/»½ÐÑ º¯ÊýÎĵµ + +* ¼üÅÌ/ÐÞ¶©: `void suspend_power_down_kb(void)` ºÍ`void suspend_wakeup_init_user(void)` +* ²¼¾Ö: `void suspend_power_down_kb(void)` ºÍ `void suspend_wakeup_init_user(void)` + +# ²ã¸Ä±ä´úÂë + +ÿµ±²ã¸Ä±äÕâ¸ö¾ÍÔËÐдúÂë¡£Õâ¶ÔÓÚ²ãָʾ»ò×Ô¶¨Òå²ã´¦ÀíºÜÓÐÓᣠ+ +### `layer_state_set_*` ʾÀýʵÏÖ + +±¾ÀýʹÓÃÁËPlanck¼üÅÌʾ·¶ÁËÈçºÎÉèÖà [RGB±³¹âµÆ](feature_rgblight.md)ʹ֮Óë²ã¶ÔÓ¦ + +```c +uint32_t layer_state_set_user(uint32_t state) { + switch (biton32(state)) { + case _RAISE: + rgblight_setrgb (0x00, 0x00, 0xFF); + break; + case _LOWER: + rgblight_setrgb (0xFF, 0x00, 0x00); + break; + case _PLOVER: + rgblight_setrgb (0x00, 0xFF, 0x00); + break; + case _ADJUST: + rgblight_setrgb (0x7A, 0x00, 0xFF); + break; + default: // for any other layers, or the default layer + rgblight_setrgb (0x00, 0xFF, 0xFF); + break; + } + return state; +} +``` +### `layer_state_set_*` º¯ÊýÎĵµ + +* ¼üÅÌ/ÐÞ¶©: `uint32_t layer_state_set_kb(uint32_t state)` +* ²¼¾Ö: `uint32_t layer_state_set_user(uint32_t state)` + + +¸Ã`״̬`Êǻ²ãµÄbitmask, Ïê¼û[²¼¾Ö¸ÅÊö](keymap.md#²¼¾ÖµÄ²ã״̬) + + +# µôµç±£´æÅäÖà (EEPROM) + +Õâ»áÈÃÄãµÄÅäÖó¤ÆÚµÄ±£´æÔÚ¼üÅÌÖС£ÕâЩÅäÖñ£´æÔÚÄãÖ÷¿ØµÄEEPROMÀµôµç²»»áÏûʧ¡£ ÉèÖÿÉÒÔÓÃ`eeconfig_read_kb`ºÍ`eeconfig_read_user`¶ÁÈ¡£¬¿ÉÒÔÓÃ`eeconfig_update_kb`ºÍ`eeconfig_update_user`дÈë¡£Õâ¶ÔÓÚÄúÏ£ÍûÄܹ»Çл»µÄ¹¦ÄܺÜÓÐÓÃ(±ÈÈçÇл»RGB²ãָʾ¡£´ËÍ⣬Äã¿ÉÒÔÓÃ`eeconfig_init_kb`ºÍ`eeconfig_init_user`À´ÉèÖÃEEPROMĬÈÏÖµ¡£ + +×ÔӵIJ¿·Ö¿ÉÄÜÊÇ£¬Óкܶ෽·¨¿ÉÒÔͨ¹ýEEPROM´æ´¢ºÍ·ÃÎÊÊý¾Ý£¬²¢ÇÒ²¢Ã»ÓÐÓÃÄÄÖÖ·½·¨ÊÇ¡°ÕþÖÎÕýÈ·¡±µÄ¡£Äãÿ¸ö¹¦ÄÜÖ»ÓÐÒ»¸öË«×Ö(ËÄ×Ö½Ú)¿Õ¼ä¡£ + +¼ÇסEEPROMÊÇÓÐдÈëÊÙÃüµÄ¡£¾¡¹ÜдÈëÊÙÃüºÜ¸ß£¬µ«ÊDz¢²»ÊÇÖ»ÓÐÉèÖÃдµÀEEPROMÖС£Èç¹ûÄãдÈëÆµ·±£¬ÄãµÄMCUÊÙÃü½«»á±ä¶Ì¡£ + +* Èç¹ûÄú²»Àí½âÕâ¸öÀý×Ó£¬ÄÇôÄú¿ÉÄÜÏ£Íû±ÜÃâʹÓÃÕâ¸öÌØÐÔ£¬ÒòΪËüÏ൱¸´ÔÓ¡£ + +### ʾÀýʵÏÖ + +±¾Àý½²½âÁËÈçºÎÌí¼ÓÉèÖ㬲¢ÇÒ¶Áд¡£±¾ÀïʹÓÃÁËÓû§²¼¾Ö¡£ÕâÊÇÒ»¸ö¸´Ôӵĺ¯Êý£¬ÓкܶàÊÂÇéÒª×ö¡£Êµ¼ÊÉÏ£¬ËüʹÓÃÁ˺ܶàÉÏÊöº¯ÊýÀ´¹¤×÷£¡ + + +ÔÚÄãµÄkeymap.cÎļþÖУ¬½«ÒÔÏ´úÂëÌí¼ÓÖÁ¶¥²¿: +```c +typedef union { + uint32_t raw; + struct { + bool rgb_layer_change :1; + }; +} user_config_t; + +user_config_t user_config; +``` + +ÒÔÉÏ´úÂ뽨Á¢ÁËÒ»¸ö½á¹¹Ì壬¸Ã½á¹¹Ìå¿ÉÒÔ´æ´¢ÉèÖò¢¿ÉÓÃÓÚдÈëEEPROM¡£Èç´ËÕâ°ã½«ÎÞÐ趨Òå±äÁ¿£¬ÒòΪÔڽṹÌåÖÐÒÑÈ»¶¨Òå¡£Òª¼Çס`bool` (²¼¶û)ֵʹÓÃ1λ, `uint8_t`ʹÓÃ8λ, `uint16_t`ʹÓÃ16λ¡£Äã¿ÉÒÔ»ìºÏ´îÅäʹÓ㬵«ÊÇ˳Ðò¼Ç´í¿ÉÄÜ»áÕÐÖÂÂé·³£¬ÒòΪÄÇ»á¸Ä±äдÈëд³öµÄÖµ¡£ + + `layer_state_set_*`º¯ÊýÖÐʹÓÃÁË`rgb_layer_change`£¬Ê¹ÓÃÁË`keyboard_post_init_user`ºÍ`process_record_user`À´ÅäÖÃÒ»ÇС£ + +Ê×ÏÈҪʹÓÃ`keyboard_post_init_user£¬ÄãÒª¼ÓÈë`eeconfig_read_user()`À´Ìî³äÄã¸Õ¸Õ´´½¨µÄ½á¹¹Ì塣ȻºóÄú¿ÉÒÔÁ¢¼´Ê¹ÓÃÕâ¸ö½á¹¹À´¿ØÖÆÄúµÄ²¼¾ÖÖеŦÄÜ¡£¾ÍÏñÕâÑù£º +```c +void keyboard_post_init_user(void) { + // µ÷Óò¼¾Ö¼¶±ðµÄ¾ØÕó³õʼ»¯ + + // ´ÓEEPROM¶ÁÓû§ÅäÖà + user_config.raw = eeconfig_read_user(); + + // ÈçʹÄÜ£¬ÉèÖÃĬÈϲã + if (user_config.rgb_layer_change) { + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom_cyan(); + rgblight_mode_noeeprom(1); + } +} +``` +ÒÔÉϺ¯Êý»áÔÚ¶ÁEEPROMÅäÖúóÁ¢¼´Ê¹ÓøÃÉèÖÃÀ´ÉèÖÃĬÈϲãRGBÑÕÉ«¡£"raw"µÄÖµÊÇ´ÓÄãÉÏÃæ»ùÓÚ"union"´´½¨µÄ½á¹¹ÌåÖÐת»»À´µÄ¡£ + +```c +uint32_t layer_state_set_user(uint32_t state) { + switch (biton32(state)) { + case _RAISE: + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_magenta(); rgblight_mode_noeeprom(1); } + break; + case _LOWER: + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_red(); rgblight_mode_noeeprom(1); } + break; + case _PLOVER: + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_green(); rgblight_mode_noeeprom(1); } + break; + case _ADJUST: + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); } + break; + default: // Õë¶ÔÆäËû²ã»òĬÈϲã + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); } + break; + } + return state; +} +``` +ÕâÑù½öÔÚֵʹÄÜʱ»á¸Ä±äRGB±³¹âµÆ¡£ÏÖÔÚÅäÖÃÕâ¸öÖµ, Ϊ`process_record_user`´´½¨Ò»¸öмüÂë½Ð×ö`RGB_LYR`¡£ÎÒÃÇҪȷ±££¬Èç¹ûʹÓÃÕý³£µÄRGB´úÂ룬ʹÓÃÉÏÃæµÄʾÀý½«Æä¹Ø±Õ£¬Ç뽫ÆäÉèÖÃΪ£º +```c + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case FOO: + if (record->event.pressed) { + // °´ÏÂʱ×öµãʲô + } else { + // ÊÍ·Åʱ×öµãʲô + } + return false; // Ìø¹ý´Ë¼üµÄ½øÒ»²½´¦Àí + case KC_ENTER: + // ÔÚ°´Ï»سµÊ±²¥·ÅÒô·û + if (record->event.pressed) { + PLAY_NOTE_ARRAY(tone_qwerty); + } + return true; // ÈÃQMK²úÉú»Ø³µ°´ÏÂ/ÊÍ·Åʼþ + case RGB_LYR: // ±¾¾äÈÃunderglow×÷Ϊ²ãָʾ£¬»òÕý³£Ê¹Óᣠ+ if (record->event.pressed) { + user_config.rgb_layer_change ^= 1; // Çл»×´Ì¬ + eeconfig_update_user(user_config.raw); // ÏòEEPROMдÈëÐÂ״̬ + if (user_config.rgb_layer_change) { // Èç¹û²ã״̬±»Ê¹ÄÜ + layer_state_set(layer_state); // ÄÇôÁ¢¿Ì¸üвãÑÕÉ« + } + } + return false; break; + case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // ¶ÔÓÚËùÓеÄRGB´úÂë (see quantum_keycodes.h, L400 ¿ÉÒԲο¼) + if (record->event.pressed) { //±¾¾äʧÄܲãָʾ£¬¼ÙÉèÄã¸Ä±äÁËÕâ¸ö¡­ÄãÒª°ÑËü½ûÓà + if (user_config.rgb_layer_change) { // ½öµ±Ê¹ÄÜʱ + user_config.rgb_layer_change = false; // ʧÄÜ£¬È»ºó + eeconfig_update_user(user_config.raw); // ÏòEEPROMдÈëÉèÖà + } + } + return true; break; + default: + return true; // °´ÆäËû¼üÕý³£ + } +} +``` +×îºóÄãÒª¼ÓÈë`eeconfig_init_user`º¯Êý£¬ËùÒÔµ±EEPROMÖØÖÃʱ£¬¿ÉÒÔÖ¸¶¨Ä¬ÈÏÖµ, ÉõÖÁ×Ô¶¨Òå²Ù×÷¡£ÏëÇ¿ÖÆÖØÖÃEEPROM£¬ÇëÓÃ`EEP_RST`¼üÂë»ò[Bootmagic](feature_bootmagic.md)º¯Êý¡£±ÈÈ磬Èç¹ûÒªÔÚĬÈÏÇé¿öÏÂÉèÖÃRGB²ãָʾ£¬²¢±£´æÄ¬ÈÏÖµ + +```c +void eeconfig_init_user(void) { // EEPROMÕý±»ÖØÖà + user_config.raw = 0; + user_config.rgb_layer_change = true; // ÎÒÃÇÏëҪĬÈÏʹÄÜ + eeconfig_update_user(user_config.raw); // ÏòEEPROMдÈëĬÈÏÖµ + + // use the non noeeprom versions, »¹ÒªÏòEEPROMдÈëÕâЩֵ + rgblight_enable(); // ĬÈÏʹÄÜRGB + rgblight_sethsv_cyan(); // ĬÈÏÉèÖÃÇàÉ« + rgblight_mode(1); // ĬÈÏÉèÖó¤ÁÁ +} +``` + +È»ºó¾ÍÍêÊÂÁË¡£RGB²ãָʾ»áÔÚÄãÏëÈÃËü¹¤×÷ʱ¹¤×÷¡£Õâ¸öÉèÖûáÒ»Ö±±£´æ£¬¼´±ãÄã°ÎϼüÅÌ¡£Èç¹ûÄãʹÓÃÆäËûRGB´úÂ룬²ãָʾ½«Ê§ÄÜ£¬ÏÖÔÚËü¿ÉÒÔ×öÄãËùÏëÁË¡£ + +### 'EECONFIG' º¯ÊýÎĵµ + +* ¼üÅÌ/ÐÞ¶©: `void eeconfig_init_kb(void)`, `uint32_t eeconfig_read_kb(void)`ºÍ`void eeconfig_update_kb(uint32_t val)` +* ²¼¾Ö: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)`ºÍ`void eeconfig_update_user(uint32_t val)` + +`val` ÊÇÄãÏëдÈëEEPROMµÄÖµ£¬`eeconfig_read_*`º¯Êý»á´ÓEEPROM·µ»ØÒ»¸ö32λ(Ë«×Ö)µÄÖµ¡£ + +# ×Ô¶¨Òå»÷¼ü-³¤°´ÁÙ½çÖµ(TAPPING_TERM) +ĬÈÏÇé¿öÏÂ,»÷¼ü-³¤°´ÁÙ½çÖµÊÇÈ«ÇòͳһµÄ£¬²¢ÇÒ²»ÄÜͨ¹ý¼ü½øÐÐÅäÖ᣶ÔÓÚ´ó¶àÊýÓû§À´ËµÕâºÜºÃ¡£µ«ÊÇÔÚÓÐЩÇé¿öÏ£¬¶ÔÓÚ`LT`¼üÀ´Ëµ°´¼üÑÓʱ¶ÔË«¹¦ÄܼüµÄÌáÉý¸ü´ó£¬¿ÉÄÜÊÇÒòΪÓÐЩ¼ü±ÈÆäËûµÄ¼ü¸üÈÝÒ×°´×¡¡£ÎªÁ˲»¸øÃ¿¸ö¶¼×Ô¶¨Òå¼üÂ룬±¾¹¦ÄÜ¿ÉÒÔΪÿ¸ö¼ü¶¨Òå`TAPPING_TERM`¡£ + +ÏëʹÄÜÕâ¸ö¹¦Äܵϰ, ÒªÏÈÔÚ`config.h`¼ÓÉÏ`#define TAPPING_TERM_PER_KEY`¡£ + + +## `get_tapping_term`ʾÀýʵÏÖ + +ÏëÒªÐ޸ĻùÓÚ¼üÂëµÄ`TAPPING TERM`,ÄãÒªÏò`keymap.c`ÎļþÌí¼ÓÈçÏ´úÂë: + +```c +uint16_t get_tapping_term(uint16_t keycode) { + switch (keycode) { + case SFT_T(KC_SPC): + return TAPPING_TERM + 1250; + case LT(1, KC_GRV): + return 130; + default: + return TAPPING_TERM; + } +} +``` + +### `get_tapping_term` º¯ÊýÎĵµ + +²»ÏñÕâÆªµÄÆäËû¹¦ÄÜ,Õâ¸ö²»ÐèÒªquantum»òÕß¼üÅ̼¶±ðµÄº¯Êý£¬Ö»ÒªÓû§¼¶º¯Êý¼´¿É¡£ diff --git a/docs/zh-cn/faq_general.md b/docs/zh-cn/faq_general.md new file mode 100644 index 00000000000..4949acb8c9d --- /dev/null +++ b/docs/zh-cn/faq_general.md @@ -0,0 +1,19 @@ +# ³£¼ûÎÊÌâ + +## QMKÊÇʲô? + +[QMK](https://github.com/qmk), ÊÇÁ¿×Ó»úе¼üÅÌ(Quantum Mechanical Keyboard)µÄËõд£¬ÊÇһȺ¿ªÔ´°®ºÃÕßΪ¶¨ÖƼüÅÌ¿ª·¢µÄ¹¤¾ß¡£ÎÒÃÇ´Ó[QMK¹Ì¼þ](https://github.com/qmk/qmk_firmware)¿ªÊ¼£¬ÕâÊÇ[TMK](https://github.com/tmk/tmk_keyboard)µÄħ¸Ä·Ö²æ¡£ + +### Ϊʲô½ÐÁ¿×Ó(Quantum)? + + + +## QMKºÍTMKÓÐÊ²Ã´Çø±ð? + +TMK×î³õÓÉ[Jun Wako](https://github.com/tmk)Éè¼ÆºÍÖ´ÐС£QMKʼÓÚ[Jack Humbert](https://github.com/jackhumbert)ΪPlanck¼üÅÌ´´½¨µÄTMK·Ö²æ¡£Ò»¶Îʱ¼äºó£¬JackµÄ·Ö²æ¾ÍºÍTMKÏàÈ¥ÉõÔ¶ÁË£¬ÓÚÊÇÔÚ2015Ä꣬Jack¾ö¶¨¸ÄÃûQMK¡£ + +´Ó¼¼Êõ¹ÛµãÀ´½²£¬QMKÊÇTMKÌí¼ÓһЩй¦Äܶø³ÉµÄ¡£ÓÈÆäÊÇQMKÀ©Õ¹ÁË¿ÉÓõļüÂ룬ʹ¸ß¼¶¹¦ÄܽøÒ»²½·á¸»±ÈÈç `S()`, `LCTL()`, ºÍ `MO()`¡£È«²¿¼üÂë¼û[¼üÂë](keycodes.md). + +´Ó¹¤³ÌµÄÉçÇø¹ÜÀíÀ´½²TMK×Ô¼ºÎ¬»¤ÁËËùÓйٷ½Ö§³ÖµÄ¼üÅÌ£¬Ö»ÓкÜСһ²¿·ÖÉçÇøÖ§³Ö¡£¶ÀÁ¢ÉçÇøÎ¬»¤ÒÑ´æÔÚ·Ö²æ»òΪÆäËû¼üÅÌ´´½¨µÄ·Ö²æ¡£Ä¬ÈÏÖ§³ÖºÜÉٵļüÂ룬ËùÒÔÓû§Í¨³£²»»áÓëËûÈË·ÖÏí²¼¾Ö¡£QMK¹ÄÀøÍ¨¹ý¼¯ÖйÜÀí²Ö¿â·ÖÏí²¼¾ÖºÍ¼üÅÌ£¬ÎÒÃÇ»á²ÉÄÉËùÓзûºÏÖÊÁ¿±ê×¼µÄPR¡£Õâ¾Í¼«´óµÄ±£Ö¤ÁËÉçÇøÎ¬»¤£¬Í¬Ê±QMKС×éÒ²»áÔÚ±ØÒªÊ±¸øÓè°ïÖú¡£ + +ÕâÁ½ÖÖ·½·¨¶¼ÓÐÆäÓŵãºÍȱµã£¬²¢ÇÒ´úÂëÔÚÓÐÒâÒåʱÔÚTMKºÍQMKÖ®¼ä×ÔÓÉÁ÷¶¯¡£ diff --git a/docs/zh-cn/reference_glossary.md b/docs/zh-cn/reference_glossary.md new file mode 100644 index 00000000000..7b9adcc2a7c --- /dev/null +++ b/docs/zh-cn/reference_glossary.md @@ -0,0 +1,170 @@ +# QMK术语表 + +## ARM +多家公å�¸ç”Ÿäº§çš„32ä½�å�•片机系列,例如Atmel, Cypress, Kinetis, NXP, ST, å’Œ TI等公å�¸ã€‚ + +## AVR +[Atmel](http://www.microchip.com/)å…¬å�¸çš„å�•片机系列。 AVR是TMKçš„åˆ�始支æŒ�å¹³å�°ã€‚ + +## AZERTY +Français (法国)标准键盘布局。用键盘的å‰�六个字æ¯�命å��。 + +## Backlight(背光) +键盘上照明的通称。背光通常是一组LEDç�¯ï¼Œé€šè¿‡é”®å¸½æˆ–者按轴å�‘光,但也ä¸�总是这样。 + +## Bluetooth(è“�牙) +一ç§�短è·�离点对点无线å��议。许多多无线键盘使用此å��议。 + +## Bootloader(引导加载程åº�) +一ç§�写到你å�•片机的ä¿�护区的特殊的程åº�,该程åº�å�¯ä»¥ä½¿å�•片机å�‡çº§è‡ªå·±çš„固件,通常是通过USBæ�¥å�‡çº§ã€‚ + +## Bootmagic(热改键) +å…�许å�„ç§�键盘行为动æ€�å�˜åŒ–的功能,如交æ�¢æˆ–ç¦�用常用键。 + +## C +一ç§�适用于系统代ç �的低级编程语言。大多数qmk代ç �是用C编写的。 + +## Colemak +一ç§�æµ�行的键盘布局。 + +## Compile(编译) +把人å�¯è¯»çš„代ç �转æ�¢æˆ�ä½ çš„å�•片机å�¯ä»¥è¿�行的机器代ç �的过程。 + +## Dvorak +一个由August Dvorakå�šå£«åœ¨20世纪30年代创建的布局。Dvorak简化键盘(Dvorak Simplified Keyboard)的缩写。 + +## Dynamic Macro(动æ€�å®�) +一ç§�记录在键盘上的å®�,当键盘拔出或计算机é‡�æ–°å�¯åŠ¨æ—¶ï¼Œå®�将丢失。 + +* [动æ€�å®�文档](feature_dynamic_macros.md) + +## Eclipse +是一ç§�å�—C语言开å�‘者追æ�§çš„集æˆ�å¼€å�‘环境(IDE)。 + +* [Eclipse安装说明](eclipse.md) + +## Firmware(固件) +用æ�¥æŽ§åˆ¶å�•片机的软件。 + +## FLIP +爱特梅尔(Atmel)æ��供的AVR器件刷写软件。我们一般推è�� [QMK刷写工具](https://github.com/qmk/qmk_flasher),但是对于一些高级用例,需è¦�FLIP。 + +## git +命令行版本控制软件 + +## GitHub +负责大多数QMK项目的网站。它是Gitã€�问题跟踪和其他帮助我们è¿�行qmk的功能的集æˆ�å¹³å�°ã€‚ + +## ISP(在系统编程) +在系统编程(In-system programming), 使用外部硬件和JTAG管脚对AVR芯片进行编程的一ç§�方法。 + +## hid_listen +从键盘接收调试消æ�¯çš„æŽ¥å�£ã€‚ 您å�¯ä»¥ä½¿ç”¨[QMK Flasher](https://github.com/qmk/qmk_flasher)或[PJRC's hid_listen](https://www.pjrc.com/teensy/hid_listen.html)查看这些消æ�¯ + +## Keycode(é”®ç �) +表示特定键的2字节数æ�®ã€‚`0x00`-`0xFF`用于[基本键ç �](keycodes_basic.md)而`0x100`-`0xFFFF`用于[é‡�å­�é”®ç �](quantum_keycodes.md). + +## Key Down +一个键按下尚未抬起时触å�‘的事件。 + +## Key Up +一个键抬起时触å�‘的事件。 + +## Keymap(键映射) +映射到物ç�†é”®ç›˜å¸ƒå±€çš„一组键ç �,在按键和按键释放时进行处ç�†ã€‚有时翻译为布局,æ„�为软件上表示的布局,å�³æ˜ å°„。 + +## Layer(层) +为了让一个键实现多个功能的抽象结构。最高活动层有é™�。 + +## Leader Key(å‰�导键ã€�设置è�œå�•é”®) +本功能å…�许您点击å‰�导键,然å�ŽæŒ‰é¡ºåº�按1-3个键å­�æ�¥æ¿€æ´»æŒ‰é”®æˆ–å…¶ä»–é‡�å­�功能。 + +* [å‰�导键文档](feature_leader_key.md) + +## LED +å�‘光二æž�管,键盘上最常用的指示ç�¯è£…置。 + +## Make +用于编译所有æº�文件的软件包。å�¯ä»¥ä½¿ç”¨`make`命令和其他å�‚æ•°æ�¥ç¼–译你的固件。 + +## Matrix(矩阵) +一ç§�由列和行组æˆ�的接线模å¼�,使å�•片机能够用较少的引脚检测按键。矩阵通常包å�«äºŒæž�管,以达到全键无冲。 + +## Macro(å®�) +本功能å�¯ä»¥åœ¨æ•²å‡»å�•个键å�Žå�‘é€�多个按键事件(hid报告)。 + +* [å®�文档](feature_macros.md) + +## MCU(å�•片机ã€�微控制å�•å…ƒ) +微控制å�•元,键盘的处ç�†å™¨ã€‚ + +## Modifier(修改键ã€�修饰键ã€�功能键) +按ä½�该键将会改å�˜å…¶ä»–键的功能,修饰键包括 Ctrl, Alt, å’Œ Shift。 + +## Mousekeys(鼠标键) +本功能在您敲击键盘时会控制鼠标光标。 + +* [鼠标键文档](feature_mouse_keys.md) + +## N-Key Rollover (NKROã€�全键无冲) +一ç§�术语,适用于能够å�Œæ—¶æŠ¥å‘Šä»»æ„�æ•°é‡�按键的键盘。 + +## Oneshot Modifier(粘滞键) +一ç§�能让你的功能键一直ä¿�æŒ�按下,直到你按下其他键的功能。它å�«å�šç²˜æ»žé”®æˆ–å�«å�šç²˜è¿žé”®ï¼Œè¯¥åŠŸèƒ½ç”±è½¯ä»¶å®žçŽ°è€Œé�žæœºæ¢°ç»“构。 + +## ProMicro +一ç§�低æˆ�本AVRå¼€å�‘æ�¿ã€‚è¿™ç§�æ�¿å­�很容易在购物网站找到(ä»·æ ¼ä¸�到20RMB),但是æ�®è¯´åˆ·å†™pro micro有点令人抓狂。 + +## Pull Request(拉请求ã€�PR) +å�‘QMK请求æ��交代ç �。我们鼓励所有用户æ��交你们自己的键盘的代ç �。 + +## QWERTY +标准英文键盘,通常也用于其他语言,例如中文。是用键盘å‰�6个字æ¯�命å��的。 + +## QWERTZ +标准Deutsche(德语)键盘布局。使用å‰�6个字æ¯�明å��。 + +## Rollover(å…�许翻转ã€�无冲形å¼�) +该术语表示在一个键已按下时按下å�¦ä¸€ä¸ªé”®ã€‚å½¢å¼�包括2KRO(å�Œé”®æ— å†²),6KRO(6键无冲),å’ŒNKRO(全键无冲),无冲表示å�¯å�Œæ—¶æŒ‰ä¸‹è€Œä¸�产生冲çª�的键的数é‡�。 + +## Scancode(扫æ��ç �) +HID报告中的一个1字节的数字,表示一个键å­�。这些数字在下列文档中[HID Usage Tables](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf)该文档å�‘布于[USB-IF](http://www.usb.org/)。 + +## Space Cadet键盘的shifté”® +一ç§�特使的shift设置,能让你通过敲击左或å�³shift一次或多次键入ä¸�å�Œçš„æ‹¬å�·ã€‚ + +* [Space Cadet键盘文档](feature_space_cadet.md) + +## Tap(敲击ã€�å�•击) +按下并释放一个键。在æŸ�些情况下您需è¦�区分键按下和键抬起,但是å�•击把两个事件都包括了。 + +## Tap Dance(多击键) +本功能å…�许å�‘å�Œä¸€ä¸ªé”®å­�分é…�多个键ç �,并根æ�®æŒ‰é”®æ¬¡æ•°åŒºåˆ†ã€‚ + +* [多击键文档](feature_tap_dance.md) + +## Teensy +一ç§�低æˆ�本AVRå¼€å�‘æ�¿ï¼Œé€šå¸¸ç”¨äºŽæ‰‹å·¥è¿žçº¿é”®ç›˜ã€‚这个teensy是有点å°�贵但是halfkay bootloader会让它刷写å��分简å�•,所以也很常用。 + +## Underlight(背光) +用于照亮电路æ�¿åº•é�¢çš„LED的总称。这些LED通常从å�°åˆ·ç”µè·¯æ�¿çš„底部å�‘键盘所在的表é�¢å�‘光。 + +## Unicode +在较大的计算机世界中,Unicode是一组编ç �方案,用于表示任何语言中的字符。 与qmk相关的是,它æ„�味ç�€ä½¿ç”¨å�„ç§�æ“�作系统方案æ�¥å�‘é€�Unicode代ç �点,而ä¸�是扫æ��ç �。 + +* [Unicode文档](feature_unicode.md) + +## Unit Testing(å�•元测试) +针对qmk的自动è¿�行测试框架。å�•元测试帮助我们确信我们的更改ä¸�会破å��任何东西。 + +* [å�•元测试文档](unit_testing.md) + +## USB +通用串行总线,键盘最常è§�的有线接å�£ã€‚ + +## USB 主机 (或简易主机) +USB诸暨市你的电脑,或者你的键盘所æ�’的任何设备。 + +# 并没有找到你想找到的术语? + +[建立一个issue](https://github.com/qmk/qmk_firmware/issues) ,想好你的问题,或许你所问的术语就会添加到这里。创建一个PR帮我们添加需è¦�添加的术语当然å� å�¼äº†:)