Skip to content

File syn_i2c.h

File List > drivers > syn_i2c.h

Go to the documentation of this file

#ifndef SYN_I2C_H
#define SYN_I2C_H

#include "../common/syn_defs.h"
#include "../port/syn_port_i2c.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef enum {
    SYN_I2C_ROLE_MASTER = 0, 
    SYN_I2C_ROLE_SLAVE       
} SYN_I2C_Role;

typedef struct {
    uint8_t i2c_id;          
    uint32_t clock_speed_hz; 
    SYN_I2C_Role role;       
    uint16_t own_address;    
    bool use_dma;            
} SYN_I2C_Config;

typedef struct {
    SYN_I2C_Config cfg; 
    bool initialized;   
} SYN_I2C;

SYN_Status syn_i2c_init(SYN_I2C *i2c, const SYN_I2C_Config *cfg);

SYN_Status syn_i2c_deinit(SYN_I2C *i2c);

SYN_Status syn_i2c_transfer(SYN_I2C *i2c, uint16_t addr, const uint8_t *tx, size_t tx_len,
                            uint8_t *rx, size_t rx_len);

SYN_Status syn_i2c_read_reg(SYN_I2C *i2c, uint16_t addr, uint8_t reg, uint8_t *val);

SYN_Status syn_i2c_write_reg(SYN_I2C *i2c, uint16_t addr, uint8_t reg, uint8_t val);

#ifdef __cplusplus
}
#endif

#endif /* SYN_I2C_H */