diff options
Diffstat (limited to 'peripheral/libmraa/src/usb/ftdi_ft4222.c')
-rw-r--r-- | peripheral/libmraa/src/usb/ftdi_ft4222.c | 46 |
1 files changed, 20 insertions, 26 deletions
diff --git a/peripheral/libmraa/src/usb/ftdi_ft4222.c b/peripheral/libmraa/src/usb/ftdi_ft4222.c index d3183cd..5c6167e 100644 --- a/peripheral/libmraa/src/usb/ftdi_ft4222.c +++ b/peripheral/libmraa/src/usb/ftdi_ft4222.c @@ -335,22 +335,19 @@ mraa_ftdi_ft4222_detect_io_expander() if (mraa_ftdi_ft4222_i2c_read_internal(ftHandleI2c, PCA9672_ADDR, &data, 1) == 1) { gpio_expander_chip = IO_EXP_PCA9672; return PCA9672_PINS; - } else { - uint8_t reg = PCA9555_INPUT_REG; + } else if (mraa_ftdi_ft4222_i2c_read_internal(ftHandleI2c, PCA9555_ADDR, &data, 1) == 1) { + gpio_expander_chip = IO_EXP_PCA9555; + uint8_t reg = PCA9555_OUTPUT_REG; mraa_ftdi_ft4222_i2c_write_internal(ftHandleI2c, PCA9555_ADDR, ®, 1); - if (mraa_ftdi_ft4222_i2c_read_internal(ftHandleI2c, PCA9555_ADDR, &data, 1) == 1) { - gpio_expander_chip = IO_EXP_PCA9555; - reg = PCA9555_OUTPUT_REG; - mraa_ftdi_ft4222_i2c_write_internal(ftHandleI2c, PCA9555_ADDR, ®, 1); - mraa_ftdi_ft4222_i2c_read_internal(ftHandleI2c, PCA9555_ADDR, (uint8_t*)&pca9555OutputValue, 2); - reg = PCA9555_DIRECTION_REG; - mraa_ftdi_ft4222_i2c_write_internal(ftHandleI2c, PCA9555_ADDR, ®, 1); - mraa_ftdi_ft4222_i2c_read_internal(ftHandleI2c, PCA9555_ADDR, (uint8_t*)&pca9555DirectionValue, 2); - return PCA9555_PINS; - } + mraa_ftdi_ft4222_i2c_read_internal(ftHandleI2c, PCA9555_ADDR, (uint8_t*)&pca9555OutputValue, 2); + reg = PCA9555_DIRECTION_REG; + mraa_ftdi_ft4222_i2c_write_internal(ftHandleI2c, PCA9555_ADDR, ®, 1); + mraa_ftdi_ft4222_i2c_read_internal(ftHandleI2c, PCA9555_ADDR, (uint8_t*)&pca9555DirectionValue, 2); + return PCA9555_PINS; + } else { + gpio_expander_chip = IO_EXP_NONE; + return 0; } - gpio_expander_chip = IO_EXP_NONE; - return 0; } @@ -553,17 +550,17 @@ mraa_ftdi_ft4222_i2c_read(mraa_i2c_context dev, uint8_t* data, int length) return bytes_read; } -static int +static uint8_t mraa_ftdi_ft4222_i2c_read_byte(mraa_i2c_context dev) { uint8_t data; pthread_mutex_lock(&ft4222_lock); int bytes_read = mraa_ftdi_ft4222_i2c_context_read(dev, &data, 1); pthread_mutex_unlock(&ft4222_lock); - return bytes_read == 1 ? data : -1; + return bytes_read == 1 ? data : 0; } -static int +static uint8_t mraa_ftdi_ft4222_i2c_read_byte_data(mraa_i2c_context dev, uint8_t command) { uint8_t data; @@ -573,13 +570,10 @@ mraa_ftdi_ft4222_i2c_read_byte_data(mraa_i2c_context dev, uint8_t command) if (bytesWritten == 1) bytes_read = mraa_ftdi_ft4222_i2c_context_read(dev, &data, 1); pthread_mutex_unlock(&ft4222_lock); - if (bytes_read == 1) { - return (int) data; - } - return -1; + return (bytes_read == 1) ? data : 0; } -static int +static uint16_t mraa_ftdi_ft4222_i2c_read_word_data(mraa_i2c_context dev, uint8_t command) { uint8_t buf[2]; @@ -590,10 +584,8 @@ mraa_ftdi_ft4222_i2c_read_word_data(mraa_i2c_context dev, uint8_t command) if (bytes_written == 1) bytes_read = mraa_ftdi_ft4222_i2c_context_read(dev, buf, 2); pthread_mutex_unlock(&ft4222_lock); - if (bytes_read == 2) { - return (int) data; - } - return -1; + data = (bytes_read == 2) ? *(uint16_t*)buf : 0; + return data; } static int @@ -608,6 +600,7 @@ mraa_ftdi_ft4222_i2c_read_bytes_data(mraa_i2c_context dev, uint8_t command, uint return bytes_read; } + static mraa_result_t mraa_ftdi_ft4222_i2c_write(mraa_i2c_context dev, const uint8_t* data, int bytesToWrite) { @@ -625,6 +618,7 @@ mraa_ftdi_ft4222_i2c_write_byte(mraa_i2c_context dev, uint8_t data) return status; } + static mraa_result_t mraa_ftdi_ft4222_i2c_write_byte_data(mraa_i2c_context dev, const uint8_t data, const uint8_t command) { |