summaryrefslogtreecommitdiff
path: root/peripheral/libmraa/src/usb/ftdi_ft4222.c
diff options
context:
space:
mode:
Diffstat (limited to 'peripheral/libmraa/src/usb/ftdi_ft4222.c')
-rw-r--r--peripheral/libmraa/src/usb/ftdi_ft4222.c46
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, &reg, 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, &reg, 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, &reg, 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, &reg, 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)
{