Creating a project about VL6180XA1 for TT_Mxx

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers VL6180X.h Source File

VL6180X.h

00001 #ifndef VL6180X_h
00002 #define VL6180X_h
00003 
00004 #include "mbed.h"
00005 
00006 class VL6180X
00007 {
00008   public:
00009     // register addresses
00010     enum regAddr
00011     {
00012       IDENTIFICATION__MODEL_ID              = 0x000,
00013       IDENTIFICATION__MODEL_REV_MAJOR       = 0x001,
00014       IDENTIFICATION__MODEL_REV_MINOR       = 0x002,
00015       IDENTIFICATION__MODULE_REV_MAJOR      = 0x003,
00016       IDENTIFICATION__MODULE_REV_MINOR      = 0x004,
00017       IDENTIFICATION__DATE_HI               = 0x006,
00018       IDENTIFICATION__DATE_LO               = 0x007,
00019       IDENTIFICATION__TIME                  = 0x008, // 16-bit
00020 
00021       SYSTEM__MODE_GPIO0                    = 0x010,
00022       SYSTEM__MODE_GPIO1                    = 0x011,
00023       SYSTEM__HISTORY_CTRL                  = 0x012,
00024       SYSTEM__INTERRUPT_CONFIG_GPIO         = 0x014,
00025       SYSTEM__INTERRUPT_CLEAR               = 0x015,
00026       SYSTEM__FRESH_OUT_OF_RESET            = 0x016,
00027       SYSTEM__GROUPED_PARAMETER_HOLD        = 0x017,
00028 
00029       SYSRANGE__START                       = 0x018,
00030       SYSRANGE__THRESH_HIGH                 = 0x019,
00031       SYSRANGE__THRESH_LOW                  = 0x01A,
00032       SYSRANGE__INTERMEASUREMENT_PERIOD     = 0x01B,
00033       SYSRANGE__MAX_CONVERGENCE_TIME        = 0x01C,
00034       SYSRANGE__CROSSTALK_COMPENSATION_RATE = 0x01E, // 16-bit
00035       SYSRANGE__CROSSTALK_VALID_HEIGHT      = 0x021,
00036       SYSRANGE__EARLY_CONVERGENCE_ESTIMATE  = 0x022, // 16-bit
00037       SYSRANGE__PART_TO_PART_RANGE_OFFSET   = 0x024,
00038       SYSRANGE__RANGE_IGNORE_VALID_HEIGHT   = 0x025,
00039       SYSRANGE__RANGE_IGNORE_THRESHOLD      = 0x026, // 16-bit
00040       SYSRANGE__MAX_AMBIENT_LEVEL_MULT      = 0x02C,
00041       SYSRANGE__RANGE_CHECK_ENABLES         = 0x02D,
00042       SYSRANGE__VHV_RECALIBRATE             = 0x02E,
00043       SYSRANGE__VHV_REPEAT_RATE             = 0x031,
00044 
00045       SYSALS__START                         = 0x038,
00046       SYSALS__THRESH_HIGH                   = 0x03A,
00047       SYSALS__THRESH_LOW                    = 0x03C,
00048       SYSALS__INTERMEASUREMENT_PERIOD       = 0x03E,
00049       SYSALS__ANALOGUE_GAIN                 = 0x03F,
00050       SYSALS__INTEGRATION_PERIOD            = 0x040,
00051 
00052       RESULT__RANGE_STATUS                  = 0x04D,
00053       RESULT__ALS_STATUS                    = 0x04E,
00054       RESULT__INTERRUPT_STATUS_GPIO         = 0x04F,
00055       RESULT__ALS_VAL                       = 0x050, // 16-bit
00056       RESULT__HISTORY_BUFFER_0              = 0x052, // 16-bit
00057       RESULT__HISTORY_BUFFER_1              = 0x054, // 16-bit
00058       RESULT__HISTORY_BUFFER_2              = 0x056, // 16-bit
00059       RESULT__HISTORY_BUFFER_3              = 0x058, // 16-bit
00060       RESULT__HISTORY_BUFFER_4              = 0x05A, // 16-bit
00061       RESULT__HISTORY_BUFFER_5              = 0x05C, // 16-bit
00062       RESULT__HISTORY_BUFFER_6              = 0x05E, // 16-bit
00063       RESULT__HISTORY_BUFFER_7              = 0x060, // 16-bit
00064       RESULT__RANGE_VAL                     = 0x062,
00065       RESULT__RANGE_RAW                     = 0x064,
00066       RESULT__RANGE_RETURN_RATE             = 0x066, // 16-bit
00067       RESULT__RANGE_REFERENCE_RATE          = 0x068, // 16-bit
00068       RESULT__RANGE_RETURN_SIGNAL_COUNT     = 0x06C, // 32-bit
00069       RESULT__RANGE_REFERENCE_SIGNAL_COUNT  = 0x070, // 32-bit
00070       RESULT__RANGE_RETURN_AMB_COUNT        = 0x074, // 32-bit
00071       RESULT__RANGE_REFERENCE_AMB_COUNT     = 0x078, // 32-bit
00072       RESULT__RANGE_RETURN_CONV_TIME        = 0x07C, // 32-bit
00073       RESULT__RANGE_REFERENCE_CONV_TIME     = 0x080, // 32-bit
00074 
00075       RANGE_SCALER                          = 0x096, // 16-bit - see STSW-IMG003 core/inc/vl6180x_def.h
00076 
00077       READOUT__AVERAGING_SAMPLE_PERIOD      = 0x10A,
00078       FIRMWARE__BOOTUP                      = 0x119,
00079       FIRMWARE__RESULT_SCALER               = 0x120,
00080       I2C_SLAVE__DEVICE_ADDRESS             = 0x212,
00081       INTERLEAVED_MODE__ENABLE              = 0x2A3,
00082     };
00083 
00084     uint8_t last_status; // status of last I2C transmission
00085 
00086     VL6180X(I2C *_i2c);
00087 
00088     /**
00089      * @brief Read device's ID.
00090      * @return [device ID] 0x64.
00091      */
00092     uint8_t readID()
00093     {
00094        return readReg(IDENTIFICATION__MODEL_ID);
00095     }
00096 
00097     void setAddress(uint8_t new_addr);
00098 
00099     void init(void);
00100 
00101     void configureDefault(void);
00102 
00103     void writeReg(uint16_t reg, uint8_t value);
00104     void writeReg16Bit(uint16_t reg, uint16_t value);
00105     void writeReg32Bit(uint16_t reg, uint32_t value);
00106     uint8_t readReg(uint16_t reg);
00107     uint16_t readReg16Bit(uint16_t reg);
00108     uint32_t readReg32Bit(uint16_t reg);
00109 
00110     uint32_t millis()
00111     {
00112       return 2;
00113     }
00114 
00115     void setScaling(uint8_t new_scaling);
00116     inline uint8_t getScaling(void) { return scaling; }
00117 
00118     uint8_t readRangeSingle(void);
00119     inline uint16_t readRangeSingleMillimeters(void) { return (uint16_t)scaling * readRangeSingle(); }
00120     uint16_t readAmbientSingle(void);
00121 
00122     void startRangeContinuous(uint16_t period = 100);
00123     void startAmbientContinuous(uint16_t period = 500);
00124     void startInterleavedContinuous(uint16_t period = 500);
00125     void stopContinuous();
00126 
00127     uint8_t readRangeContinuous(void);
00128     inline uint16_t readRangeContinuousMillimeters(void) { return (uint16_t)scaling * readRangeContinuous(); }
00129     uint16_t readAmbientContinuous(void);
00130 
00131     inline void setTimeout(uint16_t timeout) { io_timeout = timeout; }
00132     inline uint16_t getTimeout(void) { return io_timeout; }
00133     bool timeoutOccurred(void);
00134 
00135   private:
00136     I2C *i2c;
00137     uint8_t address;
00138     uint8_t scaling;
00139     uint8_t ptp_offset;
00140     uint16_t io_timeout;
00141     bool did_timeout;
00142 };
00143 
00144 #endif
00145 
00146 
00147 
00148