/** * @file VL6180X_ATY.h * * @param Project DEVICE_GENERAL_ATY_LIB * * @author ATY * * @copyright * - Copyright 2017 - 2026 MZ-ATY * - This code follows: * - MZ-ATY Various Contents Joint Statement - * * https://mengze.top/MZ-ATY_VCJS * - CC 4.0 BY-NC-SA - * * https://creativecommons.org/licenses/by-nc-sa/4.0/ * - Your use will be deemed to have accepted the terms of this statement. * * @brief functions of VL6180 for C platform * * @version * - 1_01_230828 > ATY * -# Preliminary version, first Release * - 1_01_240104 > ATY * -# base tested VL6180 * - 1_01_240111 > ATY * -# add lock ******************************************************************************** */ #ifndef __VL6180X_ATY_H #define __VL6180X_ATY_H #include "INCLUDE_ATY.h" /******************************* For user *************************************/ // 0 1 0 1 0 0 1 R/W // can edit by program #define VL6180X_ADDRESS (0x29) /******************************************************************************/ struct VL6180X_ATY_Dev { uint8_t addr; uint8_t(*i2cProcess)(uint8_t addr, uint8_t* data_t, uint8_t len, uint8_t rw); uint8_t lock; uint8_t debugEnable; int (*LOG)(); }; uint8_t VL6180X_WriteByte(uint16_t reg, uint8_t data, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_WriteBytes(uint16_t reg, uint8_t* data, uint8_t bytes, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_ReadByte(uint16_t reg, uint8_t* data, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_ReadBytes(uint16_t reg, uint8_t* data, uint8_t bytes, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_GetId(uint8_t* id, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_SetOffset(uint8_t offset, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_SetAddress(uint8_t newAddr, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_Clear_Interrupts(struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_IsDeviceReady(struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_WaitDeviceReady(struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_IsRangeComplete(struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_WaitRangeComplete(struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_ReadRangeStatus(uint8_t* status, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_ReadRangeResult(uint8_t* range, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_StartRange(struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_StartRangeContinuous(uint16_t period_ms, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_StopRangeContinuous(struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_Init(struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_MeasureRangeOnce(uint8_t* range, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_MeasureRangeOnceFast(uint8_t* range, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_ReadLux(uint8_t gain, float* lux, struct VL6180X_ATY_Dev* dev); uint8_t VL6180X_Config(struct VL6180X_ATY_Dev* dev); // device model identification number #define VL6180X_REG_IDENTIFICATION_MODEL_ID 0x000 #define VL6180X_REG_IDENTIFICATION_MODEL_REV_MAJOR 0x001 #define VL6180X_REG_IDENTIFICATION_MODEL_REV_MINOR 0x002 #define VL6180X_REG_IDENTIFICATION_MODULE_REV_MAJOR 0x003 #define VL6180X_REG_IDENTIFICATION_MODULE_REV_MINOR 0x004 #define VL6180X_REG_IDENTIFICATION_DATE_HI 0x006 #define VL6180X_REG_IDENTIFICATION_DATE_LO 0x007 #define VL6180X_REG_IDENTIFICATION_TIME 0x008 // 8~9 #define VL6180X_REG_SYSTEM_MODE_GPIO0 0x010 #define VL6180X_REG_SYSTEM_MODE_GPIO1 0x011 #define VL6180X_REG_SYSTEM_HISTORY_CTRL 0x012 #define VL6180X_REG_SYSTEM_INTERRUPT_CONFIG 0x014 #define VL6180X_REG_SYSTEM_INTERRUPT_CLEAR 0x015 #define VL6180X_REG_SYSTEM_FRESH_OUT_OF_RESET 0x016 #define VL6180X_REG_SYSTEM_GROUPED_PARAMETER_HOLD 0x017 #define VL6180X_REG_SYSRANGE_START 0x018 #define VL6180X_REG_SYSRANGE_THRESH_HIGH 0x019 #define VL6180X_REG_SYSRANGE_THRESH_LOW 0x01A #define VL6180X_REG_SYSRANGE_INTERMEASUREMENT_PERIOD 0x01B #define VL6180X_REG_SYSRANGE_MAX_CONVERGENCE_TIME 0x01C #define VL6180X_REG_SYSRANGE_CROSSTALK_COMPENSATION_RATE 0x01E #define VL6180X_REG_SYSRANGE_CROSSTALK_VALID_HEIGHT 0x021 #define VL6180X_REG_SYSRANGE_EARLY_CONVERGENCE_ESTIMATE 0x022 #define VL6180X_REG_SYSRANGE_PART_TO_PART_RANGE_OFFSET 0x024 #define VL6180X_REG_SYSRANGE_RANGE_IGNORE_VALID_HEIGHT 0x025 #define VL6180X_REG_SYSRANGE_RANGE_IGNORE_THRESHOLD 0x026 #define VL6180X_REG_SYSRANGE_MAX_AMBIENT_LEVEL_MULT 0x02C #define VL6180X_REG_SYSRANGE_RANGE_CHECK_ENABLES 0x02D #define VL6180X_REG_SYSRANGE_VHV_RECALIBRATE 0x02E #define VL6180X_REG_SYSRANGE_VHV_REPEAT_RATE 0x031 #define VL6180X_REG_RESULT_RANGE_STATUS 0x04D #define VL6180X_REG_RESULT_ALS_STATUS 0x04E #define VL6180X_REG_RESULT_INTERRUPT_STATUS_GPIO 0x04F #define VL6180X_REG_RESULT_HISTORY_BUFFER_x 0x052 // 52~60 #define VL6180X_REG_RESULT_RANGE_VAL 0x062 #define VL6180X_REG_RESULT_RANGE_RAW 0x064 #define VL6180X_REG_RESULT_RANGE_RETURN_RATE 0x066 #define VL6180X_REG_RESULT_RANGE_REFERENCE_RATE 0x068 #define VL6180X_REG_RESULT_RANGE_RETURN_SIGNAL_COUNT 0x06C #define VL6180X_REG_RESULT_RANGE_REFERENCE_SIGNAL_COUNT 0x070 #define VL6180X_REG_RESULT_RANGE_RETURN_AMB_COUNT 0x074 #define VL6180X_REG_RESULT_RANGE_REFERENCE_AMB_COUNT 0x078 #define VL6180X_REG_RESULT_RANGE_RETURN_CONV_TIME 0x07C #define VL6180X_REG_RESULT_RANGE_REFERENCE_CONV_TIME 0x080 #define VL6180X_REG_READOUT_AVERAGING_SAMPLE_PERIOD 0x10A #define VL6180X_REG_FIRMWARE_BOOTUP 0x119 #define VL6180X_REG_SLAVE_DEVICE_ADDRESS 0x212 // only for VL6180X below reg #define VL6180X_REG_SYSALS_START 0x038 #define VL6180X_REG_SYSALS_THRESH_HIGH 0x03A #define VL6180X_REG_SYSALS_THRESH_LOW 0x03C #define VL6180X_REG_SYSALS_INTERMEASUREMENT_PERIOD 0x03E #define VL6180X_REG_SYSALS_ANALOGUE_GAIN 0x03F #define VL6180X_REG_SYSALS_INTEGRATION_PERIOD_HI 0x040 #define VL6180X_REG_SYSALS_INTEGRATION_PERIOD_LO 0x041 #define VL6180X_REG_RESULT_ALS_VAL 0x050 #define VL6180X_REG_FIRMWARE_RESULT_SCALER 0x120 #define VL6180X_REG_INTERLEAVED_MODE_ENABLE 0x2A3 #define VL6180X_ALS_GAIN_1 0x06 #define VL6180X_ALS_GAIN_1_25 0x05 #define VL6180X_ALS_GAIN_1_67 0x04 #define VL6180X_ALS_GAIN_2_5 0x03 #define VL6180X_ALS_GAIN_5 0x02 #define VL6180X_ALS_GAIN_10 0x01 #define VL6180X_ALS_GAIN_20 0x00 #define VL6180X_ALS_GAIN_40 0x07 #define VL6180X_ERROR_NONE 0 // Success! #define VL6180X_ERROR_SYSERR_1 1 // System error #define VL6180X_ERROR_SYSERR_5 5 // Sysem error #define VL6180X_ERROR_ECEFAIL 6 // Early convergence estimate fail #define VL6180X_ERROR_NOCONVERGE 7 // No target detected #define VL6180X_ERROR_RANGEIGNORE 8 // Ignore threshold check failed #define VL6180X_ERROR_SNR 11 // Ambient conditions too high #define VL6180X_ERROR_RAWUFLOW 12 // Raw range algo underflow #define VL6180X_ERROR_RAWOFLOW 13 // Raw range algo overflow #define VL6180X_ERROR_RANGEUFLOW 14 // Raw range algo underflow #define VL6180X_ERROR_RANGEOFLOW 15 // Raw range algo overflow // Define some additional registers mentioned in application notes and we use // period between each measurement when in continuous mode #define SYSRANGE__INTERMEASUREMENT_PERIOD 0x001b // P19 application notes #endif /* __VL6180X_ATY_H */ /******************************** End Of File *********************************/