]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/claw44/i2c.h
[Keymap] Jarred's Plaid keymap (#6049)
[qmk_firmware.git] / keyboards / claw44 / i2c.h
1 #pragma once
2
3 #include <stdint.h>
4
5 #ifndef F_CPU
6 #define F_CPU 16000000UL
7 #endif
8
9 #define I2C_READ 1
10 #define I2C_WRITE 0
11
12 #define I2C_ACK 1
13 #define I2C_NACK 0
14
15 #define SLAVE_BUFFER_SIZE 0x10
16
17 // i2c SCL clock frequency 400kHz
18 #define SCL_CLOCK  400000L
19
20 extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
21
22 void i2c_master_init(void);
23 uint8_t i2c_master_start(uint8_t address);
24 void i2c_master_stop(void);
25 uint8_t i2c_master_write(uint8_t data);
26 uint8_t i2c_master_read(int);
27 void i2c_reset_state(void);
28 void i2c_slave_init(uint8_t address);
29
30
31 static inline unsigned char i2c_start_read(unsigned char addr) {
32   return i2c_master_start((addr << 1) | I2C_READ);
33 }
34
35 static inline unsigned char i2c_start_write(unsigned char addr) {
36   return i2c_master_start((addr << 1) | I2C_WRITE);
37 }
38
39 // from SSD1306 scrips
40 extern unsigned char i2c_rep_start(unsigned char addr);
41 extern void i2c_start_wait(unsigned char addr);
42 extern unsigned char i2c_readAck(void);
43 extern unsigned char i2c_readNak(void);
44 extern unsigned char i2c_read(unsigned char ack);
45
46 #define i2c_read(ack)  (ack) ? i2c_readAck() : i2c_readNak();