コード例 #1
0
ファイル: AsI2c_wrap.c プロジェクト: Wailshire/armadeus
static PyObject * i2c_open(PyObject *self, PyObject *args)
{
    /* parameters */
    int aBusNumber;

    struct as_i2c_device *dev;
    PyObject *ret;
    char buff[300];
    /* Get arguments */
    if (!PyArg_ParseTuple(args, "i", &aBusNumber))
    {
        PyErr_SetString(PyExc_IOError,
                        "Wrong parameters.");
        return NULL;
    }
    dev = as_i2c_open(aBusNumber);
    if (dev == NULL)
    {
        snprintf(buff, 300,
                "Initialization error for i2c bus %d.", aBusNumber);
        PyErr_SetString(PyExc_IOError,buff);
        return NULL;
    }
    ret = Py_BuildValue("l", (long)dev);

    return ret;
}
コード例 #2
0
ファイル: as_tcs3472.c プロジェクト: pblottiere/armadeus
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;
}
コード例 #3
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;
}
コード例 #4
0
ファイル: as_i2c.cpp プロジェクト: pblottiere/armadeus
AsI2c::AsI2c(int aBusNumber)
{
	mDev = as_i2c_open(aBusNumber);
}