diff --git a/quad/src/virt_quad/hw_impl_unix_i2c.c b/quad/src/virt_quad/hw_impl_unix_i2c.c index b77e635a54b66eed2e16cd1d6eeb06fef2cb859e..97228f0bada9ca366f30c145f66c54edae0cedde 100644 --- a/quad/src/virt_quad/hw_impl_unix_i2c.c +++ b/quad/src/virt_quad/hw_impl_unix_i2c.c @@ -5,6 +5,8 @@ #include <pthread.h> #include "iic_utils.h" +#define NUM_INPUTS 7 + void * update_i2c_input_cache(void *); union val { @@ -12,16 +14,16 @@ union val { unsigned short s; }; -static char *input_names[6]; -static int fifos[6]; -static union val cache[6]; +static char *input_names[NUM_INPUTS]; +static int fifos[NUM_INPUTS]; +static union val cache[NUM_INPUTS]; static short last_dev; static short last_reg; static short last_val; static int nums[] = {0, 1, 2, 3, 4, 5}; -static pthread_t workers[6]; +static pthread_t workers[NUM_INPUTS]; int unix_i2c_reset(struct I2CDriver *self) { input_names[0] = "i2c-mpu-accel-x"; @@ -30,12 +32,13 @@ int unix_i2c_reset(struct I2CDriver *self) { input_names[3] = "i2c-mpu-gryo-x"; input_names[4] = "i2c-mpu-gryo-y"; input_names[5] = "i2c-mpu-gyro-z"; + input_names[6] = "i2c-lidar"; mkdir(VIRT_QUAD_FIFOS_DIR, 0777); // Start up worker thread whose job is to update the caches int i; - for (i = 0; i < 6; i += 1) { + for (i = 0; i < NUM_INPUTS; i += 1) { pthread_create(&workers[i], 0, update_i2c_input_cache, &nums[i]); } @@ -45,6 +48,7 @@ int unix_i2c_reset(struct I2CDriver *self) { cache[3].s = 0; cache[4].s = 0; cache[5].s = 0; + cache[6].s = 0; return 0; } @@ -87,6 +91,13 @@ int unix_i2c_read(struct I2CDriver *self, buff[12] = cache[5].b[0]; buff[13] = cache[5].b[1]; } + else if (last_reg == LIDARLITE_DEVICE_ADDR) { + buff[0] = cache[6].b[0]; + buff[1] = cache[6].b[0]; + } + else { + return -1; + } } return 0; }