# Portar para o KMK

Portar uma placa para o KMK é bastante simples, e segue o seguinte formato-base:

```python
import board

from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
{EXTENSIONS_IMPORT}

class KMKKeyboard(_KMKKeyboard):
{REQUIRED}
    extensions = []

```

## REQUERIDO

Isto é projetado para ser substituído com os pinos de definição de seu teclado.
Linhas, colunas e direção dos diodos (se houver) devem ser definidas dessa
forma:

```python
    row_pins = [board.p0_31, board.p0_29, board.p0_02, board.p1_15]
    col_pins = [board.p0_22, board.p0_24, board.p1_00, board.p0_11, board.p1_04]
    diode_orientation = DiodeOrientation.COL2ROW
```

## Pinos Adicionais para Extensões

KMK inclui extensões embutidas para RGB e teclados repartidos, e para economia
de energia. Se estes são aplicáveis ao seu teclado/micro-controlador, os pinos
devem ser acrescentados aqui. Remeta às instruções na respectiva página de
extensões sobre como adicioná-los. Se não pretende adicionar extensões, mantenha
a lista vazia como mostrado.

# Mapeamento Coordenado

Se seu teclado não é eletricamente construído como um quadrado (apesar que a
maioria é), você pode fornecer o mapeamento diretamente. Um exemplo disso é o
teclado [Corne](https://github.com/foostan/crkbd). Ele tem 12 colunas para 3
linhas, e 6 colunas para a linha inferior. Teclados repartidos são contados pelo
total, não por parte separada. Isto seria mais ou menos assim:

```python
from kmk.scanners import intify_coordinate as ic

    coord_mapping = []
    coord_mapping.extend(ic(0, x, 6) for x in range(6))
    coord_mapping.extend(ic(4, x, 6) for x in range(6))
    coord_mapping.extend(ic(1, x, 6) for x in range(6))
    coord_mapping.extend(ic(5, x, 6) for x in range(6))
    coord_mapping.extend(ic(2, x, 6) for x in range(6))
    coord_mapping.extend(ic(6, x, 6) for x in range(6))
    # And now, to handle R3, which at this point is down to just six keys
    coord_mapping.extend(ic(3, x, 6) for x in range(3, 6))
    coord_mapping.extend(ic(7, x, 6) for x in range(0, 3))
```

`intify_coordinate` é a maneira tradicional de gerar posições-chave.
Aqui está uma versão equivalente, talvez visualmente mais explicativa:
```python
coord_mapping = [
 0,  1,  2,  3,  4,  5,  24, 25, 26, 27, 28, 29,
 6,  7,  8,  9, 10, 11,  30, 31, 32, 33, 34, 35,
12, 13, 14, 15, 16, 17,  36, 37, 38, 39, 40, 41,
            21, 22, 23,  42, 43, 44,
]
```

## Keymaps

Mapas de teclas (*keymap*) são organizados com listas de listas. Keycodes são
adicionados para cada tecla de cada camada. Veja [keycodes](keycodes.md) para
mais detalhes sobre que keycodes estão disponíveis. Se usar camadas ou outras
extensões, remeta também à página de extensões para keycodes adicionais.

```python
from kb import KMKKeyboard
from kmk.keys import KC

keyboard = KMKKeyboard()

keyboard.keymap = [
    [KC.A, KC.B],
    [KC.C, KC.D],
]

if __name__ == '__main__':
    keyboard.go()
```

## Mais Informação

Mais informação pode ser vista [aqui](config_and_keymap.md)