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; }
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; }
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; }
AsI2c::AsI2c(int aBusNumber) { mDev = as_i2c_open(aBusNumber); }