1 #ifndef BITBANG_I2C_H 2 #define BITBANG_I2C_H 3 4 #include "hw/i2c/i2c.h" 5 6 typedef struct bitbang_i2c_interface bitbang_i2c_interface; 7 8 #define BITBANG_I2C_SDA 0 9 #define BITBANG_I2C_SCL 1 10 11 typedef enum bitbang_i2c_state { 12 STOPPED = 0, 13 SENDING_BIT7, 14 SENDING_BIT6, 15 SENDING_BIT5, 16 SENDING_BIT4, 17 SENDING_BIT3, 18 SENDING_BIT2, 19 SENDING_BIT1, 20 SENDING_BIT0, 21 WAITING_FOR_ACK, 22 RECEIVING_BIT7, 23 RECEIVING_BIT6, 24 RECEIVING_BIT5, 25 RECEIVING_BIT4, 26 RECEIVING_BIT3, 27 RECEIVING_BIT2, 28 RECEIVING_BIT1, 29 RECEIVING_BIT0, 30 SENDING_ACK, 31 SENT_NACK 32 } bitbang_i2c_state; 33 34 struct bitbang_i2c_interface { 35 I2CBus *bus; 36 bitbang_i2c_state state; 37 int last_data; 38 int last_clock; 39 int device_out; 40 uint8_t buffer; 41 int current_addr; 42 }; 43 44 /** 45 * bitbang_i2c_init: in-place initialize the bitbang_i2c_interface struct 46 */ 47 void bitbang_i2c_init(bitbang_i2c_interface *s, I2CBus *bus); 48 int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level); 49 50 #endif 51