Пример #1
0
int I2C::i2c_write8(int addr, uint8_t reg)
{
    int res = i2c_set_slave_address(addr);
    if (res)
       return res;
    return i2c_write(&reg, sizeof(reg));
}
Пример #2
0
int I2C::i2c_write16(int addr, uint8_t reg, uint8_t value)
{
    uint8_t data[2] = { reg, value };
    int res = i2c_set_slave_address(addr);
    if (res)
       return res;
    return i2c_write(data, sizeof(data));
}
Пример #3
0
/*
 *  Return a file handle if successful.
 *  Return a value less then zero on failure.
 */
int i2c_start_transaction(uint8_t slave_address)
{
	int fh, result;

	fh = i2c_open_device();

	if (fh < 0) 
		return -1;

	result = i2c_set_slave_address(fh, slave_address);	

	if (result < 0) {
		close(fh);
		return result;
	}

	return fh;
}
Пример #4
0
int I2C::i2c_read8(int addr, uint8_t reg, uint8_t *value)
{
    int res = i2c_set_slave_address(addr);
    if (res)
       return res;

    res = i2c_write(&reg, sizeof(reg));
    if (res)
       return res;

    int len = 0;
    res = i2c_read(value, sizeof(*value), len);
    if (res)
        return res;
    if (len != sizeof(*value))
        return EFAULT;
    return 0;
}
Пример #5
0
int I2C::i2c_read16(int addr, uint8_t reg, uint16_t *value)
{
    uint8_t data[2] = { reg, 0 };
    int res = 0;
    res = i2c_set_slave_address(addr);
    if (res)
       return res;

    res = i2c_write(data, 1);
    if (res)
       return res;

    int len = 0;
    res = i2c_read(data, sizeof(data), len);
    if (res)
       return res;
    if (len != sizeof(data))
        return EFAULT;

    *value = (data[0] << 8) | data[1];
    return 0;
}