#ifndef BITBANG_I2C_H | |
#define BITBANG_I2C_H | |
#include "hw/i2c/i2c.h" | |
#define TYPE_GPIO_I2C "gpio_i2c" | |
typedef struct bitbang_i2c_interface bitbang_i2c_interface; | |
#define BITBANG_I2C_SDA 0 | |
#define BITBANG_I2C_SCL 1 | |
typedef enum bitbang_i2c_state { | |
STOPPED = 0, | |
SENDING_BIT7, | |
SENDING_BIT6, | |
SENDING_BIT5, | |
SENDING_BIT4, | |
SENDING_BIT3, | |
SENDING_BIT2, | |
SENDING_BIT1, | |
SENDING_BIT0, | |
WAITING_FOR_ACK, | |
RECEIVING_BIT7, | |
RECEIVING_BIT6, | |
RECEIVING_BIT5, | |
RECEIVING_BIT4, | |
RECEIVING_BIT3, | |
RECEIVING_BIT2, | |
RECEIVING_BIT1, | |
RECEIVING_BIT0, | |
SENDING_ACK, | |
SENT_NACK | |
} bitbang_i2c_state; | |
struct bitbang_i2c_interface { | |
I2CBus *bus; | |
bitbang_i2c_state state; | |
int last_data; | |
int last_clock; | |
int device_out; | |
uint8_t buffer; | |
int current_addr; | |
}; | |
/** | |
* bitbang_i2c_init: in-place initialize the bitbang_i2c_interface struct | |
*/ | |
void bitbang_i2c_init(bitbang_i2c_interface *s, I2CBus *bus); | |
int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level); | |
#endif |