Ejemplo n.º 1
0
static PyObject * i2c_set_slave_addr(PyObject *self, PyObject *args)
{
    /* parameters */
    struct as_i2c_device *aDev;
    int aSlaveAddr;

    int ret;

    /* Get arguments */
    if (!PyArg_ParseTuple(args, "li", (long *)&aDev, &aSlaveAddr))
    {
        PyErr_SetString(PyExc_IOError,
                        "Wrong parameters.");
        return NULL;
    }

    ret = as_i2c_set_slave_addr(aDev, aSlaveAddr);
    if (ret < 0)
    {
        PyErr_SetString(PyExc_IOError,
                        "Can't set slave address");
        return NULL;
    }

    return Py_BuildValue("i", ret);
}
Ejemplo n.º 2
0
long AsI2c::setSlaveAddr(unsigned char aAddr)
{
	if (mDev != NULL)
	{
		return as_i2c_set_slave_addr(mDev, aAddr);
	}
	else
	{
		std::cerr<<"AsI2c device structure not allocated"<<std::endl;
		return -1;
	}
}
Ejemplo n.º 3
0
struct as_tcs3472 *as_tcs3472_open(int i2c_bus, int i2c_addr)
{
	struct as_tcs3472 *tcs3472;
	struct as_i2c_device *i2c_dev;
	int ret;
	unsigned char id;

	i2c_dev = as_i2c_open(i2c_bus);
	if (i2c_dev == NULL) {
		perror("Can't open I2C bus number\n");
		return NULL;
	}

	ret = as_i2c_set_slave_addr(i2c_dev, i2c_addr);
	if (ret < 0) {
		perror("Can't set i2c address\n");
		goto close_i2c_err;
	}

	tcs3472 = (struct as_tcs3472 *)malloc(sizeof(struct as_tcs3472));
	if (!tcs3472) {
		perror("can't allocate memory for device structure\n");
		goto close_i2c_err;
	}
	tcs3472->i2c_dev = i2c_dev;

	ret = as_tcs3472_read8(tcs3472, TCS3472_REG_ID, &id);
	if (ret) {
		printf("%s: can't read ID register !\n", __func__);
		goto free_tcs3472_dev_err;
	}
	if (id == 0x44) {
		printf("found a TCS34721/5");
	} else if (id == 0x42) {
		printf("found a TCS34723/7");
	} else {
		printf("No TCS3472x found at given address !!\n");
		goto free_tcs3472_dev_err;
	}
	printf(" @ 0x%02x on I2C%d\n", i2c_addr, i2c_bus);

	/* Powerdown by default */
	as_tcs3472_write8(tcs3472, TCS3472_REG_ENABLE, 0x00);

	return tcs3472;

free_tcs3472_dev_err:
	free(tcs3472);
close_i2c_err:
	as_i2c_close(i2c_dev);
	return NULL;
}
Ejemplo n.º 4
0
void ApfI2cWithMd25::run(int, char*[])
{
	std::cout << "APF : Use I2C on devLightV2 (As_devices) with MD25" << std::endl;

	struct as_i2c_device *i2c_bus = 0;
	int value = 0;

	printf("Open i2c bus\n");
	i2c_bus = as_i2c_open(MD25_I2C_BUS);
	if (i2c_bus < 0)
	{
		printf("Error can't open i2c bus\n");
	}
	else
	{
		printf("Bus %d opened\n", MD25_I2C_BUS);
	}

	value = as_i2c_set_slave_addr(i2c_bus, MD25_DEFAULT_ADDRESS);
	if (value < 0)
	{
		printf(" Error, can't as_i2c_set_slave_addr i2c bus num %d\n", MD25_I2C_BUS);
	}
	usleep(5000); //fréq i2c à 100kHz : attente de l'application complète de la trame

	int ver = getSoftwareVersion(i2c_bus);
	std::cout << "getSoftwareVersion" << ver << std::endl;

	float bat = getBatteryVolts(i2c_bus);
	std::cout << "getBatteryVolts" << bat << std::endl;

	printf("Close i2c bus\n");
	value = as_i2c_close(i2c_bus);
	if (value < 0)
	{
		printf(" Error, can't close i2c bus num %d\n", MD25_I2C_BUS);
	}

	std::cout << "End Of APF-TEST" << std::endl;
}