aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md130
1 files changed, 115 insertions, 15 deletions
diff --git a/README.md b/README.md
index 90c24b031..cf09a9407 100644
--- a/README.md
+++ b/README.md
@@ -208,7 +208,7 @@ Keymap
208Many of existent projects offer keymap framework to define your own keymap easily. The following will explain how you can define keymap using this framework. 208Many of existent projects offer keymap framework to define your own keymap easily. The following will explain how you can define keymap using this framework.
209 Instead, you can also implement your own `keymap_get_action()` to return action code for each key if you want. 209 Instead, you can also implement your own `keymap_get_action()` to return action code for each key if you want.
210 210
211This is keymap example for [HHKB](http://en.wikipedia.org/wiki/Happy_Hacking_Keyboard) keyboard. Keyamp is defined in `keymaps[]` array. 211This is keymap example for [HHKB](http://en.wikipedia.org/wiki/Happy_Hacking_Keyboard) keyboard. Keymap is defined in `keymaps[]` array.
212 212
213 static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 213 static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
214 /* Layer 0: Default Layer 214 /* Layer 0: Default Layer
@@ -279,17 +279,44 @@ This is keymap example for [HHKB](http://en.wikipedia.org/wiki/Happy_Hacking_Key
279 279
280 280
281### 1. Keycode 281### 1. Keycode
282See `common/keycode.h`. Keycode is 8bit internal code to inidicate action performed on key in keymap. Keycode has `KC_` prefixed symbol respectively. Most of keycodes like 'KC_A' have simple action register key on press and unregister on release, on the other some of keycodes has some special actions like Fn keys, Media contorl keys, System control keys and Mouse keys. 282See `common/keycode.h`. Keycode is 8bit internal code to inidicate action performed on key in keymap. Keycode has `KC_` prefixed symbol respectively. Most of keycodes like `KC_A` have simple action register key on press and unregister on release, on the other some of keycodes has some special actions like Fn keys, Media contorl keys, System control keys and Mouse keys.
283 283
284 ***In `KEYMAP` definition you need to omit prefix part `KC_` of keycode to keep keymap compact.*** For example, just use `A` instead you place `KC_A` in `KEYMAP`. Some keycodes has 4-letter short name in addition to descriptive name, you'll prefer short one in `KEYMAP`. 284 ***In `KEYMAP` definition you need to omit prefix part `KC_` of keycode to keep keymap compact.*** For example, just use `A` instead you place `KC_A` in `KEYMAP`. Some keycodes has 4-letter short name in addition to descriptive name, you'll prefer short one in `KEYMAP`.
285 285
286 **`KC_NO`** indicates the key has no keycode to transmit. 286#### 1.1 Normal key
287- `KC_NO` for no aciton
288- `KC_A` to `KC_Z`, `KC_1` to `KC_0` for alpha numeric key
289- `KC_MINS`, `KC_EQL`, `KC_GRV`, `KC_RBRC`, `KC_LBRC`, `KC_COMM`, `KC_DOT`, `KC_BSLS`, `KC_SLSH`, `KC_SCLN`, `KC_QUOT`
290- `KC_ESC`, `KC_TAB`, `KC_SPC`, `KC_BSPC`, `KC_ENT`, `KC_DEL`, `KC_INS`
291- `KC_UP`, `KC_DOWN`, `KC_RGHT`, `KC_LEFT`, `KC_PGUP`, `KC_PGDN`, `KC_HOME`, `KC_END`
292- `KC_CAPS`, `KC_NLCK`, `KC_SLCK`, `KC_PSCR`, `KC_PAUS`, `KC_APP`, `KC_F1` to `KC_F24`
293- `KC_P1` to `KC_P0`, `KC_PDOT`, `KC_PCMM`, `KC_PSLS`, `KC_PAST`, `KC_PMNS`, `KC_PPLS`, `KC_PEQL`, `KC_PENT` for keypad.
287 294
288 **`KC_LGUI`** and **`KC_RGUI`** are windows key or command key in Mac. 295#### 1.2 Modifier
296There are 8 modifiers which has discrimination between left and right.
289 297
298- `KC_LCTL` and `KC_RCTL` for Control
299- `KC_LSFT` and `KC_RSFT` for Shift
300- `KC_LALT` and `KC_RALT` for Alt
301- `KC_LGUI` and `KC_RGUI` for Windows key or Command key in Mac
302
303#### 1.3 Fn key
290 **`KC_FNnn`** are `Fn` keys which not given any action at the beginning unlike most of keycodes has its own action. To use these keys in `KEYMAP` you need to assign action you want at first. Action of `Fn` is defined in `fn_actions[]` and index of the array is identical with number part of `KC_FNnn`. Thus `KC_FN0` designates action defined in first element of the array. ***32 `Fn` keys can be defined at most.*** 304 **`KC_FNnn`** are `Fn` keys which not given any action at the beginning unlike most of keycodes has its own action. To use these keys in `KEYMAP` you need to assign action you want at first. Action of `Fn` is defined in `fn_actions[]` and index of the array is identical with number part of `KC_FNnn`. Thus `KC_FN0` designates action defined in first element of the array. ***32 `Fn` keys can be defined at most.***
291 305
292 See [keycode table](doc/keycode.txt) in `doc/keycode.txt` or `common/keycode.h` for other keycodes. 306#### 1.4 Mousekey
307- `KC_MS_U`, `KC_MS_D`, `KC_MS_L`, `KC_MS_R` for mouse cursor
308- `KC_WH_U`, `KC_WH_D`, `KC_WH_L`, `KC_WH_R` for mouse wheel
309- `KC_BTN1`, `KC_BTN2`, `KC_BTN3`, `KC_BTN4`, `KC_BTN5` for mouse buttons
310
311#### 1.5 System & Media key
312- `KC_PWR`, `KC_SLEP`, `KC_WAKE` for Power, Sleep, Wake
313- `KC_MUTE`, `KC_VOLU`, `KC_VOLD` for audio volume control
314- `KC_MNXT`, `KC_MPRV`, `KC_MSTP`, `KC_MPLY`, `KC_MSEL` for media control
315- `KC_MAIL`, `KC_CALC`, `KC_MYCM` for application launch
316- `KC_WSCH`, `KC_WHOM`, `KC_WBAK`, `KC_WFWD`, `KC_WSTP`, `KC_WREF`, `KC_WFAV` for web browser operation
317
318#### Keycode Table
319 See [keycode table](doc/keycode.txt) in `doc/keycode.txt` or `common/keycode.h` for the detail or other keycodes.
293 320
294 In regard to implementation side most of keycodes are identical with [HID usage] sent to host for real and some virtual keycodes are defined to support special actions. 321 In regard to implementation side most of keycodes are identical with [HID usage] sent to host for real and some virtual keycodes are defined to support special actions.
295[HID usage]: http://www.usb.org/developers/devclass_docs/Hut1_11.pdf 322[HID usage]: http://www.usb.org/developers/devclass_docs/Hut1_11.pdf
@@ -299,22 +326,23 @@ See `common/keycode.h`. Keycode is 8bit internal code to inidicate action perfor
299### 2. Action 326### 2. Action
300See `common/action.h`. Action is a 16bit code and defines function to perform on events of a key like press, release, hold and tap. You can define various actions to use various action codes. 327See `common/action.h`. Action is a 16bit code and defines function to perform on events of a key like press, release, hold and tap. You can define various actions to use various action codes.
301 328
302Most of keys just register 8bit keycode as HID usage(or scan code) to host, but to support other complex functions needs 16bit extended action codes internally. But using 16bit action codes with keymap results in double size in memory against keycodes. To avoid this waste 8bit keycodes are used in `KEYMAP` to define instead of action codes. ***Keycodes can be considered as subset of action codes.*** Like `KC_A`(0x04) is equal to a `Key` action(0x0004) that transmit keycode of `A`. 329Most of keys just register 8bit keycode as HID usage(or scan code) to host, but to support other complex features needs 16bit extended action codes internally. But using 16bit action codes in keymap results in double size in memory against keycodes. To avoid this waste 8bit keycodes are used in `KEYMAP` to define instead of action codes. ***Keycodes can be considered as subset of action codes.*** Like `KC_A`(0x04) is equal to a `Key` action(0x0004) that transmit keycode of *'A'*.
303 330
304#### 2.1 Key action 331#### 2.1 Key action
305Key is simple action that registers keycode on press of key and unregister on release. 332Key is simple action that registers keycode on press of key and unregister on release.
306You can define `Key` action on `A` with: 333You can define `Key` action on *'A'* key with:
307 334
308 ACTION_KEY(KC_A) 335 ACTION_KEY(KC_A)
309 336
310But you won't need to use this expression directly because you can just put symbol like `A` in `KEYMAP`. 337But you don't need to use this expression directly because you can just put symbol `A` in `KEYMAP` definition.
311 338
312 Say you want to assign a key to `Shift + 1` to get *!* or `Alt + Tab` to switch windows. 339 Say you want to assign a key to `Shift + 1` to get charactor *'!'* or `Alt + Tab` to switch windows.
313 340
314 ACTION_MOD_KEY(KC_LSHIFT, KC_1) 341 ACTION_MOD_KEY(KC_LSHIFT, KC_1)
315 ACTION_MOD_KEY(KC_LALT, KC_TAB) 342 ACTION_MOD_KEY(KC_LALT, KC_TAB)
316 343
317`Alt,Shift + Tab` 344Or `Alt,Shift + Tab` can be defined.
345
318 ACTION_MODS_KEY((MOD_BIT(KC_LALT) | MOD_BIT(KC_LSHIFT)), KC_TAB) 346 ACTION_MODS_KEY((MOD_BIT(KC_LALT) | MOD_BIT(KC_LSHIFT)), KC_TAB)
319 347
320These actions are comprised of strokes of modifiers and a key. `Macro` action is needed if you want more complex key strokes. 348These actions are comprised of strokes of modifiers and a key. `Macro` action is needed if you want more complex key strokes.
@@ -344,12 +372,73 @@ These acitons change `default layer`.
344 372
345 373
346#### 2.3 Macro action 374#### 2.3 Macro action
347`Macro` action indicates complex key strokes. ***TODO*** 375***NOT FIXED***
376`Macro` action indicates complex key strokes.
377
378 MACRO( MD(LSHIFT), D(D), END )
379 MACRO( U(D), MU(LSHIFT), END )
380 MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END )
381
382##### 2.3.1 Normal mode
383- **I()** change interavl of stroke.
384- **D()** press key
385- **U()** release key
386- **T()** type key(press and release)
387- **W()** wait
388- **MD()** modifier down
389- **MU()** modifier up
390- **END** end mark
391
392##### 2.3.2 Extended mode
393
394***TODO: sample impl***
395See `keyboard/hhkb/keymap.c` for sample.
348 396
349 397
350#### 2.4 Function action 398#### 2.4 Function action
351`Function` action can be defined freely in C function. ***TODO*** 399***NOT FIXED***
352`Function` action is implemented in `keymap_call_function()` 400There are two type of action, normal `Function` and tappable `Function`.
401These actions call user defined function with `id`, `opt`, and key event information as arguments.
402
403##### 2.4.1 Function
404To define normal `Function` action in keymap use this.
405
406 ACTION_FUNCTION(id, opt)
407
408##### 2.4.2 Function with tap
409To define tappable `Function` action in keymap use this.
410
411 ACTION_FUNCTION_TAP(id, opt)
412
413##### 2.4.3 Implement user function
414`Function` actions can be defined freely with C by user in callback function:
415
416 void keymap_call_function(keyrecord_t *event, uint8_t id, uint8_t opt)
417
418This C function is called every time key is operated, argument `id` selects action to be performed and `opt` can be used for option. Functon `id` can be 0-255 and `opt` can be 0-15.
419
420 `keyrecord_t` is comprised of key event and tap count. `keyevent_t` indicates which and when key is pressed or released. From `tap_count` you can know tap state, 0 means no tap. These information will be used in user function to decide how action of key is performed.
421
422 typedef struct {
423 keyevent_t event;
424 uint8_t tap_count;
425 } keyrecord_t;
426
427 typedef struct {
428 key_t key;
429 bool pressed;
430 uint16_t time;
431 } keyevent_t;
432
433 typedef struct {
434 uint8_t col;
435 uint8_t row;
436 } key_t;
437
438***TODO: sample impl***
439See `keyboard/hhkb/keymap.c` for sample.
440
441
353 442
354 443
355 444
@@ -370,7 +459,7 @@ There are two kind of layer switch action `Layer Set` and `Layer Bit` and two ty
370Momentary switching changes layer only while holding Fn key. 459Momentary switching changes layer only while holding Fn key.
371 460
372##### 4.1.1 Momentary Set 461##### 4.1.1 Momentary Set
373This `Layer Set` action sets new layer(`Layer 1`) to `current layer` on key press event. 462This `Layer Set` action sets new layer `Layer 1` to `current layer` on key press event.
374 463
375 ACTION_LAYER_SET(1) 464 ACTION_LAYER_SET(1)
376 465
@@ -379,7 +468,7 @@ It switches to destination layer immediately when key is pressed, after that act
379 ACTION_LAYER_DEFAULT 468 ACTION_LAYER_DEFAULT
380 469
381##### 4.1.2 Momentary Bit 470##### 4.1.2 Momentary Bit
382This `Layer Bit` action performs XOR(`1`) with `current layer` on both press and release event. If you are on `Layer 0` now next layer to switch will be `Layer 1`. To come back to previous layer you need to place same action on destination layer. 471This `Layer Bit` action performs XOR `1` with `current layer` on both press and release event. If you are on `Layer 0` now next layer to switch will be `Layer 1`. To come back to previous layer you need to place same action on destination layer.
383 472
384 ACTION_LAYER_BIT(1) 473 ACTION_LAYER_BIT(1)
385 474
@@ -499,6 +588,17 @@ Following commands can be also executed with `Magic` + key. In console mode `Mag
499 Caps: Lock Keyboard(Child Proof) 588 Caps: Lock Keyboard(Child Proof)
500 Paus: jump to bootloader 589 Paus: jump to bootloader
501 590
591### Boot Magic
592Magic commands are executed when boot time. Press `Magic` command key then pulgin.
593
594Define these macros in config.h.
595
596 IS_BOOTMAGIC_DEBUG
597 IS_BOOTMAGIC_BOOTLOADER
598
599***TODO: sample impl***
600See `keyboard/hhkb/config.h` for sample.
601
502 602
503 603
504Start Your Own Project 604Start Your Own Project