Guest User

vl6180.h

a guest
Feb 11th, 2019
532
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.74 KB | None | 0 0
  1. /*
  2.  * vl6180.h
  3.  *
  4.  *  Created on: Feb 4, 2019
  5.  *      Author: DEVJEET MANDAL
  6.  */
  7.  
  8. #ifndef VL6180_H_
  9. #define VL6180_H_
  10.  
  11. #include "stm32f7xx.h"
  12. #include "stdbool.h"
  13.  
  14. #define IDENTIFICATION__MODEL_ID               0x000
  15. #define IDENTIFICATION__MODEL_REV_MAJOR        0x001
  16. #define IDENTIFICATION__MODEL_REV_MINOR        0x002
  17. #define IDENTIFICATION__MODULE_REV_MAJOR       0x003
  18. #define IDENTIFICATION__MODULE_REV_MINOR       0x004
  19. #define IDENTIFICATION__DATE_HI                0x006
  20. #define IDENTIFICATION__DATE_LO                0x007
  21. #define IDENTIFICATION__TIME                   0x008 // 16-bit
  22.  
  23. #define SYSTEM__MODE_GPIO0                     0x010
  24. #define SYSTEM__MODE_GPIO1                     0x011
  25. #define SYSTEM__HISTORY_CTRL                   0x012
  26. #define SYSTEM__INTERRUPT_CONFIG_GPIO          0x014
  27. #define SYSTEM__INTERRUPT_CLEAR                0x015
  28. #define SYSTEM__FRESH_OUT_OF_RESET             0x016
  29. #define SYSTEM__GROUPED_PARAMETER_HOLD         0x017
  30.  
  31. #define SYSRANGE__START                        0x018
  32. #define SYSRANGE__THRESH_HIGH                  0x019
  33. #define SYSRANGE__THRESH_LOW                   0x01A
  34. #define SYSRANGE__INTERMEASUREMENT_PERIOD      0x01B
  35. #define SYSRANGE__MAX_CONVERGENCE_TIME         0x01C
  36. #define SYSRANGE__CROSSTALK_COMPENSATION_RATE  0x01E // 16-bit
  37. #define SYSRANGE__CROSSTALK_VALID_HEIGHT       0x021
  38. #define SYSRANGE__EARLY_CONVERGENCE_ESTIMATE   0x022 // 16-bit
  39. #define SYSRANGE__PART_TO_PART_RANGE_OFFSET    0x024
  40. #define SYSRANGE__RANGE_IGNORE_VALID_HEIGHT    0x025
  41. #define SYSRANGE__RANGE_IGNORE_THRESHOLD       0x026 // 16-bit
  42. #define SYSRANGE__MAX_AMBIENT_LEVEL_MULT       0x02C
  43. #define SYSRANGE__RANGE_CHECK_ENABLES          0x02D
  44. #define SYSRANGE__VHV_RECALIBRATE              0x02E
  45. #define SYSRANGE__VHV_REPEAT_RATE              0x031
  46.  
  47. #define SYSALS__START                          0x038
  48. #define SYSALS__THRESH_HIGH                    0x03A
  49. #define SYSALS__THRESH_LOW                     0x03C
  50. #define SYSALS__INTERMEASUREMENT_PERIOD        0x03E
  51. #define SYSALS__ANALOGUE_GAIN                  0x03F
  52. #define SYSALS__INTEGRATION_PERIOD             0x040
  53.  
  54. #define RESULT__RANGE_STATUS                   0x04D
  55. #define RESULT__ALS_STATUS                     0x04E
  56. #define RESULT__INTERRUPT_STATUS_GPIO          0x04F
  57. #define RESULT__ALS_VAL                        0x050 // 16-bit
  58. #define RESULT__HISTORY_BUFFER_0               0x052 // 16-bit
  59. #define RESULT__HISTORY_BUFFER_1               0x054 // 16-bit
  60. #define RESULT__HISTORY_BUFFER_2               0x056 // 16-bit
  61. #define RESULT__HISTORY_BUFFER_3               0x058 // 16-bit
  62. #define RESULT__HISTORY_BUFFER_4               0x05A // 16-bit
  63. #define RESULT__HISTORY_BUFFER_5               0x05C // 16-bit
  64. #define RESULT__HISTORY_BUFFER_6               0x05E // 16-bit
  65. #define RESULT__HISTORY_BUFFER_7               0x060 // 16-bit
  66. #define RESULT__RANGE_VAL                      0x062
  67. #define RESULT__RANGE_RAW                      0x064
  68. #define RESULT__RANGE_RETURN_RATE              0x066 // 16-bit
  69. #define RESULT__RANGE_REFERENCE_RATE           0x068 // 16-bit
  70. #define RESULT__RANGE_RETURN_SIGNAL_COUNT      0x06C // 32-bit
  71. #define RESULT__RANGE_REFERENCE_SIGNAL_COUNT   0x070 // 32-bit
  72. #define RESULT__RANGE_RETURN_AMB_COUNT         0x074 // 32-bit
  73. #define RESULT__RANGE_REFERENCE_AMB_COUNT      0x078 // 32-bit
  74. #define RESULT__RANGE_RETURN_CONV_TIME         0x07C // 32-bit
  75. #define RESULT__RANGE_REFERENCE_CONV_TIME      0x080 // 32-bit
  76.  
  77. #define RANGE_SCALER                           0x096 // 16-bit - see STSW-IMG003 core/inc/vl6180x_def.h
  78.  
  79. #define READOUT__AVERAGING_SAMPLE_PERIOD       0x10A
  80. #define FIRMWARE__BOOTUP                       0x119
  81. #define FIRMWARE__RESULT_SCALER                0x120
  82. #define I2C_SLAVE__DEVICE_ADDRESS              0x212
  83. #define INTERLEAVED_MODE__ENABLE               0x2A3
  84.  
  85. #define RANGE_CONTINUOUS_PERIOD                100
  86. #define RANGE_AMBIENT_PERIOD                   500
  87. #define RANGE_INTERLEAVED_PERIOD               500
  88.  
  89. typedef struct __VL6180X
  90. {
  91.     uint8_t     address;
  92.     uint16_t    io_timeout;
  93.     bool        did_timeout;
  94.     uint16_t    timeout_start_ms;
  95.  
  96.     uint8_t     scaling;                // read by iniused when starting measurement; is StopVariable field of VL53L0X_DevData_t structure in API
  97.     uint8_t     ptp_offset;
  98.     uint8_t     last_status;            // status of last I2C transmission
  99.  
  100. } VL6180X;
  101.  
  102.  
  103. typedef struct VL6180xIdentification {
  104.     /** Model Number */
  105.     uint8_t idModel;
  106.     /** Model Number */
  107.     uint8_t idModelRevMajor;
  108.     /** Model Number */
  109.     uint8_t idModelRevMinor;
  110.     /** Module major revision */
  111.     uint8_t idModuleRevMajor;
  112.     /** Module minor revision */
  113.     uint8_t idModuleRevMinor;
  114.     /** Manufacture date */
  115.     uint16_t idDate;
  116.     /** Manufacture time seconds after midnight */
  117.     uint16_t idTime;
  118. } VL6180X_Identity;
  119.  
  120. void writeReg(uint16_t reg, uint8_t value);
  121. void writeReg16Bit(uint16_t reg, uint16_t value);
  122. void writeReg32Bit(uint16_t reg, uint32_t value);
  123. uint8_t readReg(uint16_t reg);
  124. uint16_t readReg16Bit(uint16_t reg);
  125. uint32_t readReg32Bit(uint16_t reg);
  126.  
  127.  
  128. void setup_VL6180X(void);
  129. void setAddress(uint8_t new_addr);
  130. uint8_t getAddress(void);
  131. void getWhoAmI(VL6180X_Identity *Identity);
  132. bool init(void);
  133. void configureDefault(void);
  134. void setScaling(uint8_t new_scaling);
  135. uint8_t getScaling(void);
  136. uint8_t readRangeSingle(void);
  137. uint16_t readRangeSingleMillimeters(void);
  138. uint16_t readAmbientSingle(void);
  139. void startRangeContinuous(uint16_t period);
  140. void startAmbientContinuous(uint16_t period);
  141. void startInterleavedContinuous(uint16_t period);
  142. void stopContinuous();
  143. uint8_t readRangeContinuous(void);
  144. uint16_t readRangeContinuousMillimeters(void);
  145. uint16_t readAmbientContinuous(void);
  146. void setTimeout(uint16_t timeout);
  147. uint16_t getTimeout(void);
  148. bool timeoutOccurred(void);
  149.  
  150.  
  151. #endif /* VL6180_H_ */
Add Comment
Please, Sign In to add comment