VL6180x_ATY.h 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**
  2. * @file VL6180x_ATY.h
  3. *
  4. * @param Project DEVICE_DRIVER_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2026 MZ-ATY
  10. * - This code follows:
  11. * - MZ-ATY Various Contents Joint Statement -
  12. * <a href="https://mengze.top/MZ-ATY_VCJS">
  13. * https://mengze.top/MZ-ATY_VCJS</a>
  14. * - CC 4.0 BY-NC-SA -
  15. * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  16. * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
  17. * - Your use will be deemed to have accepted the terms of this statement.
  18. *
  19. * @brief functions of VL6180 for C platform
  20. *
  21. * @version
  22. * - 1_01_230828 > ATY
  23. * -# Preliminary version, first Release
  24. * - 1_01_240104 > ATY
  25. * -# base tested VL6180
  26. * - 1_01_240111 > ATY
  27. * -# add lock
  28. ********************************************************************************
  29. */
  30. #ifndef __VL6180x_ATY_H
  31. #define __VL6180x_ATY_H
  32. #include "INCLUDE_ATY.h"
  33. /******************************* For user *************************************/
  34. // 0 1 0 1 0 0 1 R/W // can be editted by program
  35. #define VL6180x_ADDRESS (0x29)
  36. /******************************************************************************/
  37. struct VL6180x_ATY_Dev
  38. {
  39. uint8_t addr;
  40. uint8_t* id;
  41. uint8_t (*i2cProcess)(uint8_t addr, uint8_t* data_t, uint8_t len, uint8_t rw);
  42. uint8_t lock;
  43. };
  44. uint8_t VL6180x_GetId(uint8_t* id, struct VL6180x_ATY_Dev* dev);
  45. uint8_t VL6180x_SetAddress(uint8_t newAddr, struct VL6180x_ATY_Dev* dev);
  46. uint8_t VL6180x_GetOffset(uint8_t *offset, struct VL6180x_ATY_Dev* dev);
  47. uint8_t VL6180x_SetOffset(uint8_t offset, struct VL6180x_ATY_Dev* dev);
  48. uint8_t VL6180x_Init(struct VL6180x_ATY_Dev* dev);
  49. uint8_t VL6180x_Config(struct VL6180x_ATY_Dev* dev);
  50. uint8_t VL6180x_MeasureRangeOnce(uint8_t* range, struct VL6180x_ATY_Dev* dev);
  51. uint8_t VL6180x_MeasureRangeOnceFast(uint8_t* range, struct VL6180x_ATY_Dev* dev);
  52. uint8_t VL6180x_IsDeviceReady(struct VL6180x_ATY_Dev* dev);
  53. uint8_t VL6180x_WaitDeviceReady(struct VL6180x_ATY_Dev* dev);
  54. uint8_t VL6180x_IsRangeComplete(struct VL6180x_ATY_Dev* dev);
  55. uint8_t VL6180x_WaitRangeComplete(struct VL6180x_ATY_Dev* dev);
  56. uint8_t VL6180x_StartRange(struct VL6180x_ATY_Dev* dev);
  57. uint8_t VL6180x_ReadRangeResult(uint8_t* range, struct VL6180x_ATY_Dev* dev);
  58. uint8_t VL6180x_ClearInterrupts(struct VL6180x_ATY_Dev* dev);
  59. // not tested below
  60. uint8_t VL6180x_ReadRangeStatus(uint8_t* status, struct VL6180x_ATY_Dev* dev);
  61. uint8_t VL6180x_StartRangeContinuous(uint16_t period_ms, struct VL6180x_ATY_Dev* dev);
  62. uint8_t VL6180x_StopRangeContinuous(struct VL6180x_ATY_Dev* dev);
  63. uint8_t VL6180x_ReadLux(uint8_t gain, float* lux, struct VL6180x_ATY_Dev* dev);
  64. // device model identification number
  65. #define VL6180x_REG_IDENTIFICATION_MODEL_ID 0x000
  66. #define VL6180x_REG_IDENTIFICATION_MODEL_REV_MAJOR 0x001
  67. #define VL6180x_REG_IDENTIFICATION_MODEL_REV_MINOR 0x002
  68. #define VL6180x_REG_IDENTIFICATION_MODULE_REV_MAJOR 0x003
  69. #define VL6180x_REG_IDENTIFICATION_MODULE_REV_MINOR 0x004
  70. #define VL6180x_REG_IDENTIFICATION_DATE_HI 0x006
  71. #define VL6180x_REG_IDENTIFICATION_DATE_LO 0x007
  72. #define VL6180x_REG_IDENTIFICATION_TIME 0x008 // 8~9
  73. #define VL6180x_REG_SYSTEM_MODE_GPIO0 0x010
  74. #define VL6180x_REG_SYSTEM_MODE_GPIO1 0x011
  75. #define VL6180x_REG_SYSTEM_HISTORY_CTRL 0x012
  76. #define VL6180x_REG_SYSTEM_INTERRUPT_CONFIG 0x014
  77. #define VL6180x_REG_SYSTEM_INTERRUPT_CLEAR 0x015
  78. #define VL6180x_REG_SYSTEM_FRESH_OUT_OF_RESET 0x016
  79. #define VL6180x_REG_SYSTEM_GROUPED_PARAMETER_HOLD 0x017
  80. #define VL6180x_REG_SYSRANGE_START 0x018
  81. #define VL6180x_REG_SYSRANGE_THRESH_HIGH 0x019
  82. #define VL6180x_REG_SYSRANGE_THRESH_LOW 0x01A
  83. #define VL6180x_REG_SYSRANGE_INTERMEASUREMENT_PERIOD 0x01B
  84. #define VL6180x_REG_SYSRANGE_MAX_CONVERGENCE_TIME 0x01C
  85. #define VL6180x_REG_SYSRANGE_CROSSTALK_COMPENSATION_RATE 0x01E
  86. #define VL6180x_REG_SYSRANGE_CROSSTALK_VALID_HEIGHT 0x021
  87. #define VL6180x_REG_SYSRANGE_EARLY_CONVERGENCE_ESTIMATE 0x022
  88. #define VL6180x_REG_SYSRANGE_PART_TO_PART_RANGE_OFFSET 0x024
  89. #define VL6180x_REG_SYSRANGE_RANGE_IGNORE_VALID_HEIGHT 0x025
  90. #define VL6180x_REG_SYSRANGE_RANGE_IGNORE_THRESHOLD 0x026
  91. #define VL6180x_REG_SYSRANGE_MAX_AMBIENT_LEVEL_MULT 0x02C
  92. #define VL6180x_REG_SYSRANGE_RANGE_CHECK_ENABLES 0x02D
  93. #define VL6180x_REG_SYSRANGE_VHV_RECALIBRATE 0x02E
  94. #define VL6180x_REG_SYSRANGE_VHV_REPEAT_RATE 0x031
  95. #define VL6180x_REG_RESULT_RANGE_STATUS 0x04D
  96. #define VL6180x_REG_RESULT_ALS_STATUS 0x04E
  97. #define VL6180x_REG_RESULT_INTERRUPT_STATUS_GPIO 0x04F
  98. #define VL6180x_REG_RESULT_HISTORY_BUFFER_x 0x052 // 52~60
  99. #define VL6180x_REG_RESULT_RANGE_VAL 0x062
  100. #define VL6180x_REG_RESULT_RANGE_RAW 0x064
  101. #define VL6180x_REG_RESULT_RANGE_RETURN_RATE 0x066
  102. #define VL6180x_REG_RESULT_RANGE_REFERENCE_RATE 0x068
  103. #define VL6180x_REG_RESULT_RANGE_RETURN_SIGNAL_COUNT 0x06C
  104. #define VL6180x_REG_RESULT_RANGE_REFERENCE_SIGNAL_COUNT 0x070
  105. #define VL6180x_REG_RESULT_RANGE_RETURN_AMB_COUNT 0x074
  106. #define VL6180x_REG_RESULT_RANGE_REFERENCE_AMB_COUNT 0x078
  107. #define VL6180x_REG_RESULT_RANGE_RETURN_CONV_TIME 0x07C
  108. #define VL6180x_REG_RESULT_RANGE_REFERENCE_CONV_TIME 0x080
  109. #define VL6180x_REG_READOUT_AVERAGING_SAMPLE_PERIOD 0x10A
  110. #define VL6180x_REG_FIRMWARE_BOOTUP 0x119
  111. #define VL6180x_REG_SLAVE_DEVICE_ADDRESS 0x212
  112. // only for VL6180x below reg
  113. #define VL6180x_REG_SYSALS_START 0x038
  114. #define VL6180x_REG_SYSALS_THRESH_HIGH 0x03A
  115. #define VL6180x_REG_SYSALS_THRESH_LOW 0x03C
  116. #define VL6180x_REG_SYSALS_INTERMEASUREMENT_PERIOD 0x03E
  117. #define VL6180x_REG_SYSALS_ANALOGUE_GAIN 0x03F
  118. #define VL6180x_REG_SYSALS_INTEGRATION_PERIOD_HI 0x040
  119. #define VL6180x_REG_SYSALS_INTEGRATION_PERIOD_LO 0x041
  120. #define VL6180x_REG_RESULT_ALS_VAL 0x050
  121. #define VL6180x_REG_FIRMWARE_RESULT_SCALER 0x120
  122. #define VL6180x_REG_INTERLEAVED_MODE_ENABLE 0x2A3
  123. #define VL6180x_ALS_GAIN_1 0x06
  124. #define VL6180x_ALS_GAIN_1_25 0x05
  125. #define VL6180x_ALS_GAIN_1_67 0x04
  126. #define VL6180x_ALS_GAIN_2_5 0x03
  127. #define VL6180x_ALS_GAIN_5 0x02
  128. #define VL6180x_ALS_GAIN_10 0x01
  129. #define VL6180x_ALS_GAIN_20 0x00
  130. #define VL6180x_ALS_GAIN_40 0x07
  131. #define VL6180x_ERROR_NONE 0 // Success!
  132. #define VL6180x_ERROR_SYSERR_1 1 // System error
  133. #define VL6180x_ERROR_SYSERR_5 5 // Sysem error
  134. #define VL6180x_ERROR_ECEFAIL 6 // Early convergence estimate fail
  135. #define VL6180x_ERROR_NOCONVERGE 7 // No target detected
  136. #define VL6180x_ERROR_RANGEIGNORE 8 // Ignore threshold check failed
  137. #define VL6180x_ERROR_SNR 11 // Ambient conditions too high
  138. #define VL6180x_ERROR_RAWUFLOW 12 // Raw range algo underflow
  139. #define VL6180x_ERROR_RAWOFLOW 13 // Raw range algo overflow
  140. #define VL6180x_ERROR_RANGEUFLOW 14 // Raw range algo underflow
  141. #define VL6180x_ERROR_RANGEOFLOW 15 // Raw range algo overflow
  142. // Define some additional registers mentioned in application notes and we use
  143. // period between each measurement when in continuous mode
  144. #define SYSRANGE__INTERMEASUREMENT_PERIOD 0x001b // P19 application notes
  145. #endif /* __VL6180x_ATY_H */
  146. /******************************** End Of File *********************************/