init_internal_cleanup:
if (status == MRAA_SUCCESS) {
return dev;
- } else {
+ } else {
if (dev != NULL)
free(dev);
return NULL;
syslog(LOG_ERR, "Invalid i2c bus, moving to default i2c bus");
bus = board->def_i2c_bus;
}
-
- int pos = board->i2c_bus[bus].sda;
- if (board->pins[pos].i2c.mux_total > 0) {
- if (mraa_setup_mux_mapped(board->pins[pos].i2c) != MRAA_SUCCESS) {
- syslog(LOG_ERR, "i2c: Failed to set-up i2c sda multiplexer");
- return NULL;
+ if (!board->no_bus_mux) {
+ int pos = board->i2c_bus[bus].sda;
+ if (board->pins[pos].i2c.mux_total > 0) {
+ if (mraa_setup_mux_mapped(board->pins[pos].i2c) != MRAA_SUCCESS) {
+ syslog(LOG_ERR, "i2c: Failed to set-up i2c sda multiplexer");
+ return NULL;
+ }
}
- }
- pos = board->i2c_bus[bus].scl;
- if (board->pins[pos].i2c.mux_total > 0) {
- if (mraa_setup_mux_mapped(board->pins[pos].i2c) != MRAA_SUCCESS) {
- syslog(LOG_ERR, "i2c: Failed to set-up i2c scl multiplexer");
- return NULL;
+ pos = board->i2c_bus[bus].scl;
+ if (board->pins[pos].i2c.mux_total > 0) {
+ if (mraa_setup_mux_mapped(board->pins[pos].i2c) != MRAA_SUCCESS) {
+ syslog(LOG_ERR, "i2c: Failed to set-up i2c scl multiplexer");
+ return NULL;
+ }
}
}
mraa_i2c_read(mraa_i2c_context dev, uint8_t* data, int length)
{
int bytes_read = 0;
- if (IS_FUNC_DEFINED(dev, i2c_read_replace))
+ if (IS_FUNC_DEFINED(dev, i2c_read_replace)) {
bytes_read = dev->advance_func->i2c_read_replace(dev, data, length);
- else
+ }
+ else {
bytes_read = read(dev->fh, data, length);
- if (bytes_read == length)
- return length;
- else
- return 0;
+ }
+ if (bytes_read == length) {
+ return length;
+ }
+
+ return 0;
}
uint8_t
mraa_i2c_read_byte(mraa_i2c_context dev)
{
+ if (IS_FUNC_DEFINED(dev, i2c_read_byte_replace))
+ return dev->advance_func->i2c_read_byte_replace(dev);
i2c_smbus_data_t d;
-
if (mraa_i2c_smbus_access(dev->fh, I2C_SMBUS_READ, I2C_NOCMD, I2C_SMBUS_BYTE, &d) < 0) {
syslog(LOG_ERR, "i2c: Failed to write");
return 0;
uint16_t
mraa_i2c_read_word_data(mraa_i2c_context dev, uint8_t command)
{
+ if (IS_FUNC_DEFINED(dev, i2c_read_word_data_replace))
+ return dev->advance_func->i2c_read_word_data_replace(dev, command);
i2c_smbus_data_t d;
-
if (mraa_i2c_smbus_access(dev->fh, I2C_SMBUS_READ, command, I2C_SMBUS_WORD_DATA, &d) < 0) {
syslog(LOG_ERR, "i2c: Failed to write");
return 0;
int
mraa_i2c_read_bytes_data(mraa_i2c_context dev, uint8_t command, uint8_t* data, int length)
{
+ if (IS_FUNC_DEFINED(dev, i2c_read_bytes_data_replace))
+ return dev->advance_func->i2c_read_bytes_data_replace(dev, command, data, length);
struct i2c_rdwr_ioctl_data d;
struct i2c_msg m[2];
mraa_result_t
mraa_i2c_write(mraa_i2c_context dev, const uint8_t* data, int length)
{
+ if (IS_FUNC_DEFINED(dev, i2c_write_replace))
+ return dev->advance_func->i2c_write_replace(dev, data, length);
i2c_smbus_data_t d;
int i;
uint8_t command = data[0];