1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#pragma once
#include "quantum.h"
#include <stdint.h>
#include <stdbool.h>
#include "i2c_master.h"
#include <util/delay.h>
/* I2C aliases and register addresses (see "mcp23018.md") */
#define I2C_ADDR 0b0100000
#define I2C_TIMEOUT 100
#define IODIRA 0x00 /* i/o direction register */
#define IODIRB 0x01
#define GPPUA 0x0C /* GPIO pull-up resistor register */
#define GPPUB 0x0D
#define GPIOA 0x12 /* general purpose i/o port register (write modifies OLAT) */
#define GPIOB 0x13
#define OLATA 0x14 /* output latch register */
#define OLATB 0x15
extern uint8_t mcp23018_status;
uint8_t init_mcp23018(void);
#define XXX KC_NO
#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
k10, k11, k12, k13, k14, k15, k16, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
k20, k21, k22, k23, k24, k25, k26, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
k40, k41, k42, k43, k44, k45, k48, k49, k4A, k4B, k4C, k4D \
) { \
{ k00, k01, k02, k03, k04, k05, k06, XXX, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
{ k10, k11, k12, k13, k14, k15, k16, XXX, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F }, \
{ k20, k21, k22, k23, k24, k25, k26, XXX, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3E }, \
{ k40, k41, k42, k43, k44, k45, XXX, XXX, k48, k49, k4A, k4B, k4C, k4D, XXX, XXX } \
}
#define LAYOUT_ansi_split_bs_rshift( \
k00, k01, k02, k03, k04, k05, k06, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
k10, k11, k12, k13, k14, k15, k16, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
k20, k21, k22, k23, k24, k25, k26, k28, k29, k2A, k2B, k2C, k2D, k2E, \
k30, k31, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
k40, k41, k42, k43, k44, k45, k48, k49, k4A, k4B, k4C, k4E \
) { \
{ k00, k01, k02, k03, k04, k05, k06, XXX, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
{ k10, k11, k12, k13, k14, k15, k16, XXX, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F }, \
{ k20, k21, k22, k23, k24, k25, k26, XXX, k28, k29, k2A, k2B, k2C, k2D, k2E, XXX }, \
{ k30, k31, XXX, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3E }, \
{ k40, k41, k42, k43, k44, k45, XXX, XXX, k48, k49, k4A, k4B, k4C, k4E, XXX, XXX } \
}
#define LAYOUT_ansi_split_bs( \
k00, k01, k02, k03, k04, k05, k06, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
k10, k11, k12, k13, k14, k15, k16, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
k20, k21, k22, k23, k24, k25, k26, k28, k29, k2A, k2B, k2C, k2D, k2E, \
k30, k31, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, \
k40, k41, k42, k43, k44, k45, k48, k49, k4A, k4B, k4C, k4D \
) { \
{ k00, k01, k02, k03, k04, k05, k06, XXX, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
{ k10, k11, k12, k13, k14, k15, k16, XXX, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F }, \
{ k20, k21, k22, k23, k24, k25, k26, XXX, k28, k29, k2A, k2B, k2C, k2D, k2E, XXX }, \
{ k30, k31, XXX, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, XXX, XXX }, \
{ k40, k41, k42, k43, k44, k45, XXX, XXX, k48, k49, k4A, k4B, k4C, k4D, XXX, XXX } \
}
#define LAYOUT_ansi_split_rshift( \
k00, k01, k02, k03, k04, k05, k06, k08, k09, k0A, k0B, k0C, k0D, k0E, \
k10, k11, k12, k13, k14, k15, k16, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
k20, k21, k22, k23, k24, k25, k26, k28, k29, k2A, k2B, k2C, k2D, k2E, \
k30, k31, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
k40, k41, k42, k43, k44, k45, k48, k49, k4A, k4B, k4C, k4D \
) { \
{ k00, k01, k02, k03, k04, k05, k06, XXX, k08, k09, k0A, k0B, k0C, k0D, k0E, k0E }, \
{ k10, k11, k12, k13, k14, k15, k16, XXX, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F }, \
{ k20, k21, k22, k23, k24, k25, k26, XXX, k28, k29, k2A, k2B, k2C, k2D, k2E, XXX }, \
{ k30, k31, XXX, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3E }, \
{ k40, k41, k42, k43, k44, k45, XXX, XXX, k48, k49, k4A, k4B, k4C, k4D, XXX, XXX } \
}
|