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