13cd035d8SPaul Brook #ifndef BITBANG_I2C_H 23cd035d8SPaul Brook #define BITBANG_I2C_H 33cd035d8SPaul Brook 40d09e41aSPaolo Bonzini #include "hw/i2c/i2c.h" 53cd035d8SPaul Brook 6d718b747SBALATON Zoltan typedef struct bitbang_i2c_interface bitbang_i2c_interface; 7d718b747SBALATON Zoltan 83cd035d8SPaul Brook #define BITBANG_I2C_SDA 0 93cd035d8SPaul Brook #define BITBANG_I2C_SCL 1 103cd035d8SPaul Brook 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); 483cd035d8SPaul Brook int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level); 493cd035d8SPaul Brook 503cd035d8SPaul Brook #endif 51