*/
#include "pcf8574.h"
+
+#include "cfg/cfg_i2c.h"
+
#include <cfg/module.h>
+
#include <drv/i2c.h>
/**
* 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;
}
* 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);
}
+