3 extern inline void frenchdev_board_led_on(void);
4 extern inline void frenchdev_led_1_on(void);
5 extern inline void frenchdev_led_2_on(void);
6 extern inline void frenchdev_led_3_on(void);
7 extern inline void frenchdev_led_on(uint8_t led);
9 extern inline void frenchdev_board_led_off(void);
10 extern inline void frenchdev_led_1_off(void);
11 extern inline void frenchdev_led_2_off(void);
12 extern inline void frenchdev_led_3_off(void);
13 extern inline void frenchdev_led_off(uint8_t led);
15 extern inline void frenchdev_led_all_on(void);
16 extern inline void frenchdev_led_all_off(void);
18 extern inline void frenchdev_led_1_set(uint8_t n);
19 extern inline void frenchdev_led_2_set(uint8_t n);
20 extern inline void frenchdev_led_3_set(uint8_t n);
21 extern inline void frenchdev_led_set(uint8_t led, uint8_t n);
23 extern inline void frenchdev_led_all_set(uint8_t n);
25 bool i2c_initialized = 0;
26 uint8_t mcp23018_status = 0x20;
28 void matrix_init_kb(void) {
29 // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
30 TCCR1A = 0b10101001; // set and configure fast PWM
31 TCCR1B = 0b00001001; // set and configure fast PWM
35 // unused pins - D4, D5, D7, E6
36 // set as input with internal pull-ip enabled
37 DDRD &= ~(1<<5 | 1<<4);
39 PORTD |= (1<<5 | 1<<4);
42 frenchdev_blink_all_leds();
43 frenchdev_blink_all_leds();
44 frenchdev_blink_all_leds();
45 frenchdev_blink_all_leds();
50 void frenchdev_blink_all_leds(void)
52 frenchdev_led_all_off();
53 frenchdev_led_all_set(LED_BRIGHTNESS_HI);
60 frenchdev_led_1_off();
62 frenchdev_led_2_off();
64 frenchdev_led_3_off();
65 frenchdev_led_all_off();
68 uint8_t init_mcp23018(void) {
69 mcp23018_status = 0x20;
76 if (i2c_initialized == 0) {
77 i2c_init(); // on pins D(1,0)
78 i2c_initialized = true;;
83 // - unused : input : 1
84 // - input : input : 1
85 // - driving : output : 0
86 mcp23018_status = i2c_start(I2C_ADDR_WRITE, I2C_TIMEOUT); if (mcp23018_status) goto out;
87 mcp23018_status = i2c_write(IODIRA, I2C_TIMEOUT); if (mcp23018_status) goto out;
88 mcp23018_status = i2c_write(0b00000000, I2C_TIMEOUT); if (mcp23018_status) goto out;
89 mcp23018_status = i2c_write(0b00111111, I2C_TIMEOUT); if (mcp23018_status) goto out;
95 // - driving : off : 0
96 mcp23018_status = i2c_start(I2C_ADDR_WRITE, I2C_TIMEOUT); if (mcp23018_status) goto out;
97 mcp23018_status = i2c_write(GPPUA, I2C_TIMEOUT); if (mcp23018_status) goto out;
98 mcp23018_status = i2c_write(0b00000000, I2C_TIMEOUT); if (mcp23018_status) goto out;
99 mcp23018_status = i2c_write(0b00111111, I2C_TIMEOUT); if (mcp23018_status) goto out;
106 return mcp23018_status;