Exemplo n.º 1
0
INLINE int write_reg(AccMMA *mma, uint8_t addr, uint8_t data)
{
	i2c_start_w(mma->i2c, mma->dev_addr,  2, I2C_STOP);
	i2c_putc(mma->i2c, addr);
	i2c_putc(mma->i2c, data);

	LOG_INFO("Reg[%0x], Value[%0x]\n", addr, data);

	if (i2c_error(mma->i2c))
	{
		LOG_ERR("Errore!\n");
		return -1;
	}

	return data;

}
Exemplo n.º 2
0
INLINE int read_reg(AccMMA *mma, uint8_t addr)
{
	i2c_start_w(mma->i2c, mma->dev_addr,  1, I2C_NOSTOP);
	i2c_putc(mma->i2c, addr);
	i2c_start_r(mma->i2c, mma->dev_addr, 1, I2C_STOP);

	uint8_t data = i2c_getc(mma->i2c);
	//LOG_INFO("%.2x\n", data);

	if (i2c_error(mma->i2c))
	{
		LOG_ERR("Errore!\n");
		return -1;
	}

	return data;
}
Exemplo n.º 3
0
int mma8451_readData(AccMMA *mma, AccData *data)
{
	ASSERT(data);
	memset(data, 0, sizeof(AccData));

	LOG_INFO("wait data\n");
	event_wait(&data_ready_ev);

	if (data_event_flag)
	{
		data_event_flag = false;
		data->data_status = read_reg(mma, MMA8451_REG_STATUS);
		i2c_start_w(mma->i2c, mma->dev_addr,  1, I2C_NOSTOP);
		i2c_putc(mma->i2c, MMA8451_REG_OUT_X_MSB);
		i2c_start_r(mma->i2c, mma->dev_addr, 6, I2C_STOP);

		memset(buf, 0, sizeof(buf));
		i2c_read(mma->i2c, buf, sizeof(buf));

		if (i2c_error(mma->i2c))
		{
			LOG_ERR("Errore!\n");
			return -1;
		}
		else
		{
			data->x = (int16_t)((buf[0] << 8) | buf[1]) >> 2;
			data->y = (int16_t)((buf[2] << 8) | buf[3]) >> 2;
			data->z = (int16_t)((buf[4] << 8) | buf[5]) >> 2;
		}
	}

	if (acc_event_flag)
	{
		acc_event_flag = false;
		data->ff_status = read_reg(mma,  MMA8451_REG_FF_MT_SRC);
		data->pl_status = read_reg(mma,  MMA8451_REG_PL_STATUS);
		data->tap_status = read_reg(mma, MMA8451_REG_PULSE_SRC);
	}

	return 0;
}
Exemplo n.º 4
0
/**
 * Write to PCF8574 \a pcf port \a data.
 * \return true if ok, false on errors.
 */
bool pcf8574_put(Pcf8574 *pcf, uint8_t data)
{
	bool res = i2c_start_w(PCF8574ID | ((pcf->addr << 1) & 0xF7)) && i2c_put(data);
	i2c_stop();
	return res;
}