You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					46 lines
				
				1.5 KiB
			
		
		
			
		
	
	
					46 lines
				
				1.5 KiB
			| 
											5 years ago
										 | #pragma once
 | ||
|  | 
 | ||
| 
											3 years ago
										 | #include "system/sensord/sensors/i2c_sensor.h"
 | ||
| 
											5 years ago
										 | 
 | ||
|  | // Address of the chip on the bus
 | ||
|  | #define LSM6DS3_GYRO_I2C_ADDR       0x6A
 | ||
|  | 
 | ||
|  | // Registers of the chip
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_I2C_REG_DRDY_CFG  0x0B
 | ||
| 
											5 years ago
										 | #define LSM6DS3_GYRO_I2C_REG_ID        0x0F
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_I2C_REG_INT1_CTRL 0x0D
 | ||
| 
											5 years ago
										 | #define LSM6DS3_GYRO_I2C_REG_CTRL2_G   0x11
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_I2C_REG_CTRL5_C   0x14
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_I2C_REG_STAT_REG  0x1E
 | ||
| 
											5 years ago
										 | #define LSM6DS3_GYRO_I2C_REG_OUTX_L_G  0x22
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_POSITIVE_TEST   (0b01 << 2)
 | ||
|  | #define LSM6DS3_GYRO_NEGATIVE_TEST   (0b11 << 2)
 | ||
| 
											5 years ago
										 | 
 | ||
|  | // Constants
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_CHIP_ID         0x69
 | ||
|  | #define LSM6DS3TRC_GYRO_CHIP_ID      0x6A
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_FS_2000dps      (0b11 << 2)
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_ODR_104HZ       (0b0100 << 4)
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_ODR_208HZ       (0b0101 << 4)
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_INT1_DRDY_G     0b10
 | ||
|  | #define LSM6DS3_GYRO_DRDY_GDA        0b10
 | ||
|  | #define LSM6DS3_GYRO_DRDY_PULSE_MODE (1 << 7)
 | ||
| 
											3 years ago
										 | #define LSM6DS3_GYRO_MIN_ST_LIMIT_mdps 150000.0f
 | ||
|  | #define LSM6DS3_GYRO_MAX_ST_LIMIT_mdps 700000.0f
 | ||
| 
											5 years ago
										 | 
 | ||
|  | 
 | ||
|  | class LSM6DS3_Gyro : public I2CSensor {
 | ||
|  |   uint8_t get_device_address() {return LSM6DS3_GYRO_I2C_ADDR;}
 | ||
| 
											4 years ago
										 |   cereal::SensorEventData::SensorSource source = cereal::SensorEventData::SensorSource::LSM6DS3;
 | ||
| 
											3 years ago
										 | 
 | ||
|  |   // self test functions
 | ||
|  |   int self_test(int test_type);
 | ||
|  |   void wait_for_data_ready();
 | ||
|  |   void read_and_avg_data(float* val_st_off);
 | ||
| 
											5 years ago
										 | public:
 | ||
| 
											3 years ago
										 |   LSM6DS3_Gyro(I2CBus *bus, int gpio_nr = 0, bool shared_gpio = false);
 | ||
| 
											5 years ago
										 |   int init();
 | ||
| 
											3 years ago
										 |   bool get_event(MessageBuilder &msg, uint64_t ts = 0);
 | ||
| 
											3 years ago
										 |   int shutdown();
 | ||
| 
											5 years ago
										 | };
 |