66 lines
2.0 KiB
C
66 lines
2.0 KiB
C
#include "soft_i2c_if.h"
|
|
#include <stdint.h>
|
|
|
|
static const soft_i2c_ops_t *g_soft_i2c_ops = 0;
|
|
|
|
void soft_i2c_register_ops(const soft_i2c_ops_t *ops)
|
|
{
|
|
g_soft_i2c_ops = ops;
|
|
}
|
|
|
|
int soft_i2c_if_init(int ch)
|
|
{
|
|
if (!g_soft_i2c_ops || !g_soft_i2c_ops->init)
|
|
return -1;
|
|
return g_soft_i2c_ops->init(ch);
|
|
}
|
|
|
|
int soft_i2c_if_mem_write(int ch, uint16_t dev_addr, uint16_t mem_addr, uint16_t mem_add_size, const uint8_t *data, uint16_t size, uint32_t timeout)
|
|
{
|
|
if (!g_soft_i2c_ops || !g_soft_i2c_ops->mem_write)
|
|
return -1;
|
|
return g_soft_i2c_ops->mem_write(ch, dev_addr, mem_addr, mem_add_size, data, size, timeout);
|
|
}
|
|
|
|
int soft_i2c_if_mem_read(int ch, uint16_t dev_addr, uint16_t mem_addr, uint16_t mem_add_size, uint8_t *data, uint16_t size, uint32_t timeout)
|
|
{
|
|
if (!g_soft_i2c_ops || !g_soft_i2c_ops->mem_read)
|
|
return -1;
|
|
return g_soft_i2c_ops->mem_read(ch, dev_addr, mem_addr, mem_add_size, data, size, timeout);
|
|
}
|
|
|
|
int soft_i2c_if_write(int ch, uint16_t dev_addr, const uint8_t *data, uint16_t size, uint32_t timeout)
|
|
{
|
|
if (!g_soft_i2c_ops || !g_soft_i2c_ops->write)
|
|
return -1;
|
|
return g_soft_i2c_ops->write(ch, dev_addr, data, size, timeout);
|
|
}
|
|
|
|
int soft_i2c_if_read(int ch, uint16_t dev_addr, uint8_t *data, uint16_t size, uint32_t timeout)
|
|
{
|
|
if (!g_soft_i2c_ops || !g_soft_i2c_ops->read)
|
|
return -1;
|
|
return g_soft_i2c_ops->read(ch, dev_addr, data, size, timeout);
|
|
}
|
|
|
|
int soft_i2c_if_start_frame(int ch) {
|
|
return g_soft_i2c_ops->__start_frame(ch);
|
|
}
|
|
|
|
int soft_i2c_if_send_frame(int ch, uint8_t byte) {
|
|
return g_soft_i2c_ops->__send_frame(ch, byte);
|
|
}
|
|
int soft_i2c_if_wait_ack_frame(int ch) {
|
|
return g_soft_i2c_ops->__wait_ack_frame(ch);
|
|
}
|
|
int soft_i2c_if_stop_frame(int ch) {
|
|
return g_soft_i2c_ops->__stop_frame(ch);
|
|
}
|
|
int soft_i2c_if_read_frame(int ch, int ack) {
|
|
return g_soft_i2c_ops->__read_frame(ch, ack);
|
|
}
|
|
int soft_i2c_if_send_ack_frame(int ch, int ack) {
|
|
return g_soft_i2c_ops->__send_ack_frame(ch, ack);
|
|
}
|
|
|