X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Fpcf8574.c;h=7c5cf164b30b132c3c86c647a526566fd5a22ce6;hb=e8b0472be10fba4ca6baa62d8d483db90e28c06e;hp=c4477efce2df8c9d39c41048c315e82c41e81129;hpb=b1f6c7a1dd4085619835949b47d334bf9c03f2c0;p=bertos.git diff --git a/bertos/drv/pcf8574.c b/bertos/drv/pcf8574.c index c4477efc..7c5cf164 100644 --- a/bertos/drv/pcf8574.c +++ b/bertos/drv/pcf8574.c @@ -40,25 +40,30 @@ * each pin as input or output, see datasheet on how this * is achieved. * - * \version $Id: ft245rl.c 22301 2008-09-09 16:53:17Z batt $ * \author Francesco Sacchi */ #include "pcf8574.h" + +#include "cfg/cfg_i2c.h" + #include + #include /** * Read PCF8574 \a pcf bit status. * \return the pins status or EOF on errors. */ -int pcf8574_get(Pcf8574 *pcf) +int pcf8574_get_2(I2c *i2c, Pcf8574 *pcf) { - if (!i2c_start_r(PCF8574ID | ((pcf->addr << 1) & 0xF7))) - return EOF; + i2c_start_r(i2c, PCF8574ID | ((pcf->addr << 1) & 0xF7), 1, I2C_STOP); + + int data = i2c_getc(i2c); + + if (i2c_error(i2c)) + data = EOF; - int data = i2c_get(false); - i2c_stop(); return data; } @@ -66,20 +71,26 @@ int pcf8574_get(Pcf8574 *pcf) * Write to PCF8574 \a pcf port \a data. * \return true if ok, false on errors. */ -bool pcf8574_put(Pcf8574 *pcf, uint8_t data) +bool pcf8574_put_3(I2c *i2c, Pcf8574 *pcf, uint8_t data) { - bool res = i2c_start_w(PCF8574ID | ((pcf->addr << 1) & 0xF7)) && i2c_put(data); - i2c_stop(); - return res; + i2c_start_w(i2c, PCF8574ID | ((pcf->addr << 1) & 0xF7), 1, I2C_STOP); + i2c_putc(i2c, data); + + if (i2c_error(i2c)) + return false; + + return true; } /** * Init a PCF8574 on the bus with addr \a addr. * \return true if device is found, false otherwise. */ -bool pcf8574_init(Pcf8574 *pcf, pcf8574_addr addr) +bool pcf8574_init_3(I2c *i2c, Pcf8574 *pcf, pcf8574_addr addr) { - MOD_CHECK(i2c); + ASSERT(i2c); pcf->addr = addr; - return pcf8574_get(pcf) != EOF; + + return (pcf8574_get(i2c, pcf) != EOF); } +