diff --git a/drivers/input/misc/vl53L1/Android.mk b/drivers/input/misc/vl53L1/Android.mk deleted file mode 100644 index 2fc25dc43319..000000000000 --- a/drivers/input/misc/vl53L1/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -DLKM_DIR := motorola/kernel/modules -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_MODULE := stmvl53l1.ko -LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT) -include $(DLKM_DIR)/AndroidKernelModule.mk diff --git a/drivers/input/misc/vl53L1/Kbuild b/drivers/input/misc/vl53L1/Kbuild deleted file mode 100644 index 71cbc7ecdec1..000000000000 --- a/drivers/input/misc/vl53L1/Kbuild +++ /dev/null @@ -1,26 +0,0 @@ -# -# Makefile for the vl53L1 drivers. -# - -ccflags-y += -Idrivers/input/misc/vl53L1/inc \ - -Idrivers/input/misc/vl53L1/ipp -Idrivers/input/misc/vl53L1 - -# define this environment variable if you want to compile driver for an old -# kernel -ifdef OLD_NETLINK_API -ccflags-y += -DOLD_NETLINK_API -endif - -obj-m += stmvl53l1.o -stmvl53l1-objs := stmvl53l1_module.o stmvl53l1_module-i2c.o -stmvl53l1-objs += stmvl53l1_i2c.o stmvl53l1_ipp_nl.o -stmvl53l1-objs += src/vl53l1_api.o src/vl53l1_api_core.o -stmvl53l1-objs += src/vl53l1_api_strings.o src/vl53l1_error_strings.o -stmvl53l1-objs += src/vl53l1_core.o src/vl53l1_register_funcs.o -stmvl53l1-objs += src/vl53l1_api_preset_modes.o -stmvl53l1-objs += src/vl53l1_api_calibration.o -stmvl53l1-objs += src/vl53l1_fpga_core.o src/vl53l1_silicon_core.o -stmvl53l1-objs += src/vl53l1_zone_presets.o src/vl53l1_nvm.o -stmvl53l1-objs += src/vl53l1_wait.o ipp/ipp_linux.o -stmvl53l1-objs += src/vl53l1_api_debug.o src/vl53l1_core_support.o -stmvl53l1-objs += src/vl53l1_nvm_debug.o stmvl53l1_log.o diff --git a/drivers/input/misc/vl53L1/Makefile b/drivers/input/misc/vl53L1/Makefile deleted file mode 100644 index 4191dea22679..000000000000 --- a/drivers/input/misc/vl53L1/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build - -all: - $(MAKE) -C $(KERNEL_SRC) M=$(shell pwd) modules $(KBUILD_OPTIONS) - -modules_install: - $(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(shell pwd) modules_install - -clean: - $(MAKE) -C $(KERNEL_SRC) M=$(PWD) clean diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_api.h b/drivers/input/misc/vl53L1/inc/vl53l1_api.h deleted file mode 100644 index 8c310fb463db..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_api.h +++ /dev/null @@ -1,1264 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either -* 'STMicroelectronics Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - -#ifndef _VL53L1_API_H_ -#define _VL53L1_API_H_ - -#include "vl53l1_api_strings.h" -#include "vl53l1_api_core.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** @defgroup VL53L1_cut11_group VL53L1 cut1.1 Function Definition - * @brief VL53L1 cut1.1 Function Definition - * @{ - */ - -/** @defgroup VL53L1_general_group VL53L1 General Functions - * @brief General functions and definitions - * @{ - */ - -/** - * @brief Return the VL53L1 PAL Implementation Version - * - * @note This function doesn't access to the device - * - * @param pVersion Pointer to current PAL Implementation Version - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetVersion(VL53L1_Version_t *pVersion); - -/** - * @brief Return the PAL Specification Version used for the current - * implementation. - * - * @note This function doesn't access to the device - * - * @param pPalSpecVersion Pointer to current PAL Specification Version - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetPalSpecVersion( - VL53L1_Version_t *pPalSpecVersion); - -/** - * @brief Reads the Product Revision for a for given Device - * This function can be used to distinguish cut1.0 from cut1.1. - * - * @param Dev Device Handle - * @param pProductRevisionMajor Pointer to Product Revision Major - * for a given Device - * @param pProductRevisionMinor Pointer to Product Revision Minor - * for a given Device - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetProductRevision(VL53L1_DEV Dev, - uint8_t *pProductRevisionMajor, uint8_t *pProductRevisionMinor); - -/** - * @brief Reads the Device information for given Device - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @param pVL53L1_DeviceInfo Pointer to current device info for a given - * Device - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetDeviceInfo(VL53L1_DEV Dev, - VL53L1_DeviceInfo_t *pVL53L1_DeviceInfo); - -/** - * @brief Human readable Range Status string for a given RangeStatus - * - * @note This function doesn't access to the device - * - * @param RangeStatus The RangeStatus code as stored on - * @a VL53L1_RangingMeasurementData_t - * @param pRangeStatusString The returned RangeStatus string. Shall be - * defined as char buf[VL53L1_MAX_STRING_LENGTH] - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetRangeStatusString(uint8_t RangeStatus, - char *pRangeStatusString); - -/** - * @brief Human readable error string for current PAL error status - * - * @note This function doesn't access to the device - * - * @param PalErrorCode The error code as stored on @a VL53L1_Error - * @param pPalErrorString The error string corresponding to the - * PalErrorCode. Shall be defined as char buf[VL53L1_MAX_STRING_LENGTH] - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetPalErrorString(VL53L1_Error PalErrorCode, - char *pPalErrorString); - -/** - * @brief Human readable PAL State string - * - * @note This function doesn't access to the device - * - * @param PalStateCode The State code as stored on @a VL53L1_State - * @param pPalStateString The State string corresponding to the - * PalStateCode. Shall be defined as char buf[VL53L1_MAX_STRING_LENGTH] - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetPalStateString(VL53L1_State PalStateCode, - char *pPalStateString); - -/** - * @brief Reads the internal state of the PAL for a given Device - * - * @note This function doesn't access to the device - * - * @param Dev Device Handle - * @param pPalState Pointer to current state of the PAL for a - * given Device - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetPalState(VL53L1_DEV Dev, - VL53L1_State *pPalState); - - - -/** @} VL53L1_general_group */ - -/** @defgroup VL53L1_init_group VL53L1 Init Functions - * @brief VL53L1 Init Functions - * @{ - */ - -/** - * @brief Set new device address - * - * After completion the device will answer to the new address programmed. - * This function should be called when several devices are used in parallel - * before start programming the sensor. - * When a single device us used, there is no need to call this function. - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @param DeviceAddress The new Device address - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetDeviceAddress(VL53L1_DEV Dev, - uint8_t DeviceAddress); - -/** - * - * @brief One time device initialization - * - * To be called once and only once after device is brought out of reset - * (Chip enable) and booted see @a VL53L1_WaitDeviceBooted() - * - * @par Function Description - * When not used after a fresh device "power up" or reset, it may return - * @a #VL53L1_ERROR_CALIBRATION_WARNING meaning wrong calibration data - * may have been fetched from device that can result in ranging offset error\n - * If application cannot execute device reset or need to run VL53L1_DataInit - * multiple time then it must ensure proper offset calibration saving and - * restore on its own by using @a VL53L1_GetOffsetCalibrationData() on first - * power up and then @a VL53L1_SetOffsetCalibrationData() in all subsequent init - * This function will change the VL53L1_State from VL53L1_STATE_POWERDOWN to - * VL53L1_STATE_WAIT_STATICINIT. - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_DataInit(VL53L1_DEV Dev); - - -/** - * @brief Do basic device init (and eventually patch loading) - * This function will change the VL53L1_State from - * VL53L1_STATE_WAIT_STATICINIT to VL53L1_STATE_IDLE. - * In this stage all default setting will be applied. - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_StaticInit(VL53L1_DEV Dev); - -/** - * @brief Wait for device booted after chip enable (hardware standby) - * This function can be run only when VL53L1_State is VL53L1_STATE_POWERDOWN. - * - * @param Dev Device Handle - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - * - */ -VL53L1_Error VL53L1_WaitDeviceBooted(VL53L1_DEV Dev); - - -/** @} VL53L1_init_group */ - -/** @defgroup VL53L1_parameters_group VL53L1 Parameters Functions - * @brief Functions used to prepare and setup the device - * @{ - */ - -/** - * @brief Set a new Preset Mode - * @par Function Description - * Set device to a new Operating Mode (High speed ranging, Multi objects ...) - * - * @note This function doesn't Access to the device - * - * @warning This function change the timing budget to 16 ms and the inter- - * measurement period to 1000 ms. Also the VL53L1_DISTANCEMODE_LONG is used. - * - * @param Dev Device Handle - * @param PresetMode New Preset mode to apply - * Valid values are: - * VL53L1_PRESETMODE_MULTIZONES_SCANNING - * VL53L1_PRESETMODE_RANGING - * VL53L1_PRESETMODE_AUTONOMOUS - * VL53L1_PRESETMODE_LITE_RANGING - * VL53L1_PRESETMODE_OLT - * - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_MODE_NOT_SUPPORTED This error occurs when PresetMode is - * not in the supported list - */ -VL53L1_Error VL53L1_SetPresetMode(VL53L1_DEV Dev, - VL53L1_PresetModes PresetMode); - -/** - * @brief Get current Preset Mode - * @par Function Description - * Get actual mode of the device(ranging, histogram ...) - * - * @note This function doesn't Access to the device - * - * @param Dev Device Handle - * @param pPresetMode Pointer to current apply mode value - * - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_MODE_NOT_SUPPORTED This error occurs when - * DeviceMode is not in the supported list - */ -VL53L1_Error VL53L1_GetPresetMode(VL53L1_DEV Dev, - VL53L1_PresetModes *pPresetMode); - - -/** - * @brief Set the distance mode - * @par Function Description - * Set the distance mode to be used for the next ranging. - * The modes Short, Medium and Long are used to optimize the ranging accuracy - * in a specific range of distance. The user select one of these modes to fix - * the distance range, for this reason these are also called Manual modes. - * Two additional modes are supported: AUTO and AUTO_LITE the difference between - * these modes is the following. - * The mode AUTO take into account both the ranging distance (RangeMilliMeter) - * and the dmax distance (DmaxMilliMeter). The algorithm uses the ranging - * distance when the range status is ok i.e. when range - * status = VL53L1_RANGESTATUS_RANGE_VALID or - * status = VL53L1_RANGESTATUS_RANGE_VALID_NO_WRAP_CHECK - * and it uses the dmax distance when the range status is not ok. - * The AUTO_LITE take into account only the ranging distance, so nothing is done - * in case of range error i.e. the distance mode will not be changed. - * @note This function doesn't Access to the device - * - * @warning This function should be called after @a VL53L1_SetPresetMode(). - - * @param Dev Device Handle - * @param DistanceMode Distance mode to apply - * Valid values are: - * for all Preset Mode (MANUAL MODE) - * VL53L1_DISTANCEMODE_SHORT - * VL53L1_DISTANCEMODE_MEDIUM - * VL53L1_DISTANCEMODE_LONG - * - * for LIGHT_RANGING and RANGING (AUTO MODE) - * VL53L1_DISTANCEMODE_AUTO_LITE - * VL53L1_DISTANCEMODE_AUTO - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_MODE_NOT_SUPPORTED This error occurs when DistanceMode - * is not in the supported list - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetDistanceMode(VL53L1_DEV Dev, - VL53L1_DistanceModes DistanceMode); - -/** - * @brief Get the distance mode - * @par Function Description - * Get the distance mode used for the next ranging. - * - * @param Dev Device Handle - * @param *pDistanceMode Pointer to Distance mode - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetDistanceMode(VL53L1_DEV Dev, - VL53L1_DistanceModes *pDistanceMode); - - -/** - * @brief Set the output mode - * @par Function Description - * Set the output mode to be used for the next ranging. The output mode is used - * to select, in case of multiple objects, which one will be used in - * function @a VL53L1_GetRangingMeasurementData(). - * VL53L1_SetOutputMode also sets the object used by automatic - * distance mode algorithm when @a VL53L1_SetDistanceMode() is - * set to automatic mode. - * - * @note This function doesn't Access to the device - * - * @warning This function should be called after @a VL53L1_SetPresetMode(). - - * @param Dev Device Handle - * @param OutputMode Output mode to apply - * Valid values are: - * VL53L1_OUTPUTMODE_NEAREST - * VL53L1_OUTPUTMODE_STRONGEST - * - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_MODE_NOT_SUPPORTED This error occurs when OutputMode - * is not in the supported list - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetOutputMode(VL53L1_DEV Dev, - VL53L1_OutputModes OutputMode); - -/** - * @brief Get the output mode - * @par Function Description - * Get the output mode used for the next ranging. - * - * @param Dev Device Handle - * @param *pOutputMode Pointer to Output mode - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetOutputMode(VL53L1_DEV Dev, - VL53L1_OutputModes *pOutputMode); - - -/** - * @brief Set Ranging Timing Budget in microseconds - * - * @par Function Description - * Defines the maximum time allowed by the user to the device to run a - * full ranging sequence for the current mode (ranging, histogram, ASL ...) - * - * @param Dev Device Handle - * @param MeasurementTimingBudgetMicroSeconds Max measurement time in - * microseconds. - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_INVALID_PARAMS Error timing parameter not - * supported. - * The maximum accepted value for the - * computed timing budget is 10 seconds - * the minimum value depends on the preset - * mode selected. - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetMeasurementTimingBudgetMicroSeconds( - VL53L1_DEV Dev, uint32_t MeasurementTimingBudgetMicroSeconds); - -/** - * @brief Get Ranging Timing Budget in microseconds - * - * @par Function Description - * Returns the programmed the maximum time allowed by the user to the - * device to run a full ranging sequence for the current mode - * (ranging, histogram, ASL ...) - * - * @param Dev Device Handle - * @param pMeasurementTimingBudgetMicroSeconds Max measurement time in - * microseconds. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetMeasurementTimingBudgetMicroSeconds( - VL53L1_DEV Dev, uint32_t *pMeasurementTimingBudgetMicroSeconds); - - -/** - * Program continuous mode Inter-Measurement period in milliseconds - * - * @par Function Description - * When trying to set too short time return INVALID_PARAMS minimal value - * - * @param Dev Device Handle - * @param InterMeasurementPeriodMilliSeconds Inter-Measurement Period in ms. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetInterMeasurementPeriodMilliSeconds( - VL53L1_DEV Dev, uint32_t InterMeasurementPeriodMilliSeconds); - -/** - * Get continuous mode Inter-Measurement period in milliseconds - * - * @par Function Description - * - * @param Dev Device Handle - * @param pInterMeasurementPeriodMilliSeconds Pointer to programmed - * Inter-Measurement Period in milliseconds. - * @return VL53L1_ERROR_NONE - */ -VL53L1_Error VL53L1_GetInterMeasurementPeriodMilliSeconds( - VL53L1_DEV Dev, uint32_t *pInterMeasurementPeriodMilliSeconds); - -/** - * @brief target reflectance for Dmax setting - * @par Function Description - * Allow user to set the value for target reflectance @ 940nm to calculate the - * ambient DMAX values for. Set to 50% by default by @a VL53L1_DataInit() - * - * @param Dev Device Handle - * @param value Reflectance % in 16.16 fixed point - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetDmaxReflectance(VL53L1_DEV Dev, - FixPoint1616_t value); - -/** - * @brief Get target reflectance for Dmax - * @par Function Description - * Retrieves the value for target reflectance @ 940nm to calculate the - * ambient DMAX values for. Set to 50% by default by @a VL53L1_DataInit() - * - * @param Dev Device Handle - * @param pvalue pointer to Reflectance % in 16.16 fixed point - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetDmaxReflectance(VL53L1_DEV Dev, - FixPoint1616_t *pvalue); -/** - * @brief Set function for ambient Dmax mode - * - * - * @param Dev Device Handle - * @param DmaxMode DMAX mode to be used in ranging - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_SetDmaxMode(VL53L1_DEV Dev, - VL53L1_DeviceDmaxModes DmaxMode); - -/** - * @brief Get function for ambient Dmax mode - * - * @param Dev Device Handle - * @param pDmaxMode output pointer to DMAX mode currently in use - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_GetDmaxMode(VL53L1_DEV Dev, - VL53L1_DeviceDmaxModes *pDmaxMode); - -/** @} VL53L1_parameters_group */ - - -/** @defgroup VL53L1_limitcheck_group VL53L1 Limit Check Functions - * @brief Functions used for the Limit checks - * @{ - */ - - - -/** - * @brief Get the number of the check limit managed by a given Device - * - * @par Function Description - * This function give the number of the check limit managed by the Device - * - * @param pNumberOfLimitCheck Pointer to the number of check limit. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetNumberOfLimitCheck( - uint16_t *pNumberOfLimitCheck); - -/** - * @brief Return a description string for a given limit check number - * - * @par Function Description - * This function returns a description string for a given limit check number. - * The limit check is identified with the LimitCheckId. - * - * @param LimitCheckId Limit Check ID - (0<= LimitCheckId < VL53L1_GetNumberOfLimitCheck() ). - * @param pLimitCheckString Pointer to the description string of - * the given check limit. Shall be defined as char buf[VL53L1_MAX_STRING_LENGTH] - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetLimitCheckInfo(uint16_t LimitCheckId, - char *pLimitCheckString); - -/** - * @brief Return a the Status of the specified check limit - * - * @par Function Description - * This function returns the Status of the specified check limit. - * The value indicate if the check is fail or not. - * The limit check is identified with the LimitCheckId. - * - * @param Dev Device Handle - * @param LimitCheckId Limit Check ID - (0<= LimitCheckId < VL53L1_GetNumberOfLimitCheck() ). - * @param pLimitCheckStatus Pointer to the - Limit Check Status of the given check limit. - * LimitCheckStatus : - * 0 the check is not fail or not enabled - * 1 the check if fail - * - *

- * - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetLimitCheckStatus(VL53L1_DEV Dev, - uint16_t LimitCheckId, uint8_t *pLimitCheckStatus); - -/** - * @brief Enable/Disable a specific limit check - * - * @par Function Description - * This function Enable/Disable a specific limit check. - * The limit check is identified with the LimitCheckId. - * - * @note This function doesn't Access to the device - * - * @param Dev Device Handle - * @param LimitCheckId Limit Check ID - * (0<= LimitCheckId < VL53L1_GetNumberOfLimitCheck() ). - * @param LimitCheckEnable if 1 the check limit - * corresponding to LimitCheckId is Enabled - * if 0 the check limit - * corresponding to LimitCheckId is disabled - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_INVALID_PARAMS This error is returned - * when LimitCheckId value is out of range. - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetLimitCheckEnable(VL53L1_DEV Dev, - uint16_t LimitCheckId, uint8_t LimitCheckEnable); - -/** - * @brief Get specific limit check enable state - * - * @par Function Description - * This function get the enable state of a specific limit check. - * The limit check is identified with the LimitCheckId. - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @param LimitCheckId Limit Check ID - * (0<= LimitCheckId < VL53L1_GetNumberOfLimitCheck() ). - * @param pLimitCheckEnable Pointer to the check limit enable - * value. - * if 1 the check limit - * corresponding to LimitCheckId is Enabled - * if 0 the check limit - * corresponding to LimitCheckId is disabled - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_INVALID_PARAMS This error is returned - * when LimitCheckId value is out of range. - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetLimitCheckEnable(VL53L1_DEV Dev, - uint16_t LimitCheckId, uint8_t *pLimitCheckEnable); - -/** - * @brief Set a specific limit check value - * - * @par Function Description - * This function set a specific limit check value. - * The limit check is identified with the LimitCheckId. - * - * @note Note that the value written with that function will not be applied if - * the limit is not enabled. In other words this function will not enable the - * limit but change only the value. In case the limit is not enabled the value - * is saved internally and applied with VL53L1_SetLimitCheckEnable. - * - * @param Dev Device Handle - * @param LimitCheckId Limit Check ID - * (0<= LimitCheckId < VL53L1_GetNumberOfLimitCheck() ). - * @param LimitCheckValue Limit check Value for a given - * LimitCheckId - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetLimitCheckValue(VL53L1_DEV Dev, - uint16_t LimitCheckId, FixPoint1616_t LimitCheckValue); - -/** - * @brief Get a specific limit check value - * - * @par Function Description - * This function get a specific limit check value from device then it updates - * internal values and check enables. - * The limit check is identified with the LimitCheckId. - * - * @note This function get the current value from device if zero then the value - * returned is the one stored by the user, but in that case the check is store - * as disabled. If the value from device is not zero, this is returned and set - * into the memory at the same way that user call VL53L1_SetLimitCheckValue() - * - * @param Dev Device Handle - * @param LimitCheckId Limit Check ID - * (0<= LimitCheckId < VL53L1_GetNumberOfLimitCheck() ). - * @param pLimitCheckValue Pointer to Limit - * check Value for a given LimitCheckId. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetLimitCheckValue(VL53L1_DEV Dev, - uint16_t LimitCheckId, FixPoint1616_t *pLimitCheckValue); - -/** - * @brief Get the current value of the signal used for the limit check - * - * @par Function Description - * This function get a the current value of the signal used for the limit check. - * To obtain the latest value you should run a valid ranging before. - * The value reported is linked to the limit check identified with the - * LimitCheckId. - * - * @param Dev Device Handle - * @param LimitCheckId Limit Check ID - * (0<= LimitCheckId < VL53L1_GetNumberOfLimitCheck() ). - * @param pLimitCheckCurrent Pointer to current Value for a - * given LimitCheckId. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetLimitCheckCurrent(VL53L1_DEV Dev, - uint16_t LimitCheckId, FixPoint1616_t *pLimitCheckCurrent); - -/** @} VL53L1_limitcheck_group */ - - - -/** @defgroup VL53L1_ROI_group VL53L1 ROI Functions - * @brief Functions used to select ROIs - * @{ - */ - -/** - * @brief Get the Maximum number of ROI Zones managed by the Device - * - * @par Function Description - * Get Maximum number of ROI Zones managed by the Device. - * - * @note The number of Zone depends on the preset mode used so to have the - * right number this function should be call after @a VL53L1_SetPresetMode() - * @note This function doesn't Access to the device - * - * @param Dev Device Handle - * @param pMaxNumberOfROI Pointer to the Maximum Number - * of ROI Zones value. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetMaxNumberOfROI(VL53L1_DEV Dev, - uint8_t *pMaxNumberOfROI); - -/** - * @brief Set the ROI to be used for a specific Device - * - * @par Function Description - * Set the ROI to be used for a specific Device. - * Rectangle in user's coordinate system: - * 15 TL(x,y) o-----* - * ^ | | - * | *-----o BR(x,y) - * 0------------------------- >15 - * Minimal ROI size is 4x4 - * - * @param Dev Device Handle - * @param pRoiConfig Pointer to the Structure containing all the - * ROI to be used. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetROI(VL53L1_DEV Dev, - VL53L1_RoiConfig_t *pRoiConfig); - -/** - * @brief Get the ROI managed by the Device - * - * @par Function Description - * Get the ROI managed by the Device - * - * @param Dev Device Handle - * @param pRoiConfig Pointer to the Structure containing all the - * ROI to be used. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetROI(VL53L1_DEV Dev, - VL53L1_RoiConfig_t *pRoiConfig); - - -/** @} VL53L1_ROI_group */ - - -/** @defgroup VL53L1_sequencestep_group VL53L1 Sequence Step Functions - * @brief Functions used to select Steps done on each ranging - * @{ - */ - -/** - * @brief Gets number of sequence steps managed by the API. - * - * @par Function Description - * This function retrieves the number of sequence steps currently managed - * by the API - * - * @note This function Accesses the device - * - * @param Dev Device Handle - * @param pNumberOfSequenceSteps Out parameter reporting the number of - * sequence steps. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetNumberOfSequenceSteps(VL53L1_DEV Dev, - uint8_t *pNumberOfSequenceSteps); - -/** - * @brief Gets the name of a given sequence step. - * - * @par Function Description - * This function retrieves the name of sequence steps corresponding to - * SequenceStepId. - * - * @note This function doesn't Accesses the device - * - * @param SequenceStepId Sequence step identifier. - * @param pSequenceStepsString Pointer to Info string. Shall be - * defined as char buf[VL53L1_MAX_STRING_LENGTH] - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetSequenceStepsInfo( - VL53L1_SequenceStepId SequenceStepId, char *pSequenceStepsString); - - - -/** - * @brief Sets the (on/off) state of a requested sequence step. - * - * @par Function Description - * This function enables/disables a requested sequence step. - * - * @note This function Accesses the device - * - * @param Dev Device Handle - * @param SequenceStepId Sequence step identifier. - * @param SequenceStepEnabled Demanded state {0=Off,1=On} - * is enabled. - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_INVALID_PARAMS Error SequenceStepId parameter not - * supported. - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetSequenceStepEnable(VL53L1_DEV Dev, - VL53L1_SequenceStepId SequenceStepId, uint8_t SequenceStepEnabled); - -/** - * @brief Gets the (on/off) state of a requested sequence step. - * - * @par Function Description - * This function retrieves the state of a requested sequence step, i.e. on/off. - * - * @note This function Accesses the device - * - * @param Dev Device Handle - * @param SequenceStepId Sequence step identifier. - * @param pSequenceStepEnabled Out parameter reporting if the sequence step - * is enabled {0=Off,1=On}. - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_INVALID_PARAMS Error SequenceStepId parameter not - * supported. - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetSequenceStepEnable(VL53L1_DEV Dev, - VL53L1_SequenceStepId SequenceStepId, uint8_t *pSequenceStepEnabled); - - -/** @} VL53L1_sequencestep_group */ - - - -/** @defgroup VL53L1_measurement_group VL53L1 Measurement Functions - * @brief Functions used for the measurements - * @{ - */ - -/** - * @brief Start device measurement - * - * @details Started measurement will depend on preset parameters set through - * @a VL53L1_SetPreseMode() - * This function will change the VL53L1_State from VL53L1_STATE_IDLE to - * VL53L1_STATE_RUNNING. - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_MODE_NOT_SUPPORTED This error occurs when - * PresetMode programmed with @a VL53L1_SetPresetMode - * - * @return VL53L1_ERROR_TIME_OUT Time out on start measurement - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_StartMeasurement(VL53L1_DEV Dev); - -/** - * @brief Stop device measurement - * - * @details Will set the device in standby mode at end of current measurement\n - * Not necessary in single mode as device shall return automatically - * in standby mode at end of measurement. - * This function will change the VL53L1_State from VL53L1_STATE_RUNNING - * to VL53L1_STATE_IDLE. - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_StopMeasurement(VL53L1_DEV Dev); - -/** - * @brief Clear the Interrupt flag and start new measurement - * * - * @note This function Access to the device - * - * @param Dev Device Handle - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_ClearInterruptAndStartMeasurement(VL53L1_DEV Dev); - -/** - * @brief Return Measurement Data Ready - * - * @par Function Description - * This function indicate that a measurement data is ready. - * This function is used for non-blocking capture. - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @param pMeasurementDataReady Pointer to Measurement Data Ready. - * 0 = data not ready, 1 = data ready - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetMeasurementDataReady(VL53L1_DEV Dev, - uint8_t *pMeasurementDataReady); - -/** - * @brief Wait for measurement data ready. - * Blocking function. - * Note that the timeout is given by: - * VL53L1_RANGE_COMPLETION_POLLING_TIMEOUT_MS defined in def.h - * - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_TIME_OUT In case of timeout - */ -VL53L1_Error VL53L1_WaitMeasurementDataReady(VL53L1_DEV Dev); - - -/** - * @brief Retrieve the measurements from device for a given setup - * - * @par Function Description - * Get data from last successful Ranging measurement - * @warning this function will return only the first ROI data and only the - * first object. For multi objects or multi ROI use: - * @a Vl53L1_GetMultiRangingData. - * In case of RANGING or MULTIZONES_SCANNING, only one output is given, this can - * be selected with the help of @a VL53L1_SetOutputMode() - * - * @note This function Access to the device - * - * @note The first valid value returned by this function will have a range - * status equal to VL53L1_RANGESTATUS_RANGE_VALID_NO_WRAP_CHECK which means that - * the data is valid but no wrap around check have been done. User should take - * care about that. - * - * @param Dev Device Handle - * @param pRangingMeasurementData Pointer to the data structure to fill up. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetRangingMeasurementData(VL53L1_DEV Dev, - VL53L1_RangingMeasurementData_t *pRangingMeasurementData); - -/** - * @brief Retrieve all ROI's measurements from device for a given setup - * - * @par Function Description - * Get data from last successful Ranging measurement - * @warning USER should take care about @a VL53L1_GetNumberOfROI() - * before get data. - * PAL will fill a NumberOfROI times the corresponding data - * structure used in the measurement function. - * - * @note This function Access to the device - * - * @note The first valid value returned by this function will have a range - * status equal to VL53L1_RANGESTATUS_RANGE_VALID_NO_WRAP_CHECK which means that - * the data is valid but no wrap around check have been done. User should take - * care about that. - * - * @param Dev Device Handle - * @param pMultiRangingData Pointer to the data structure to fill up. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetMultiRangingData(VL53L1_DEV Dev, - VL53L1_MultiRangingData_t *pMultiRangingData); - -/** @} VL53L1_measurement_group */ - -/** @defgroup VL53L1_Calibration_group VL53L1 Calibration Functions - * @brief Functions used for Calibration - * @{ - */ - - -/** - * @brief Performs Reference Spad Management - * - * @par Function Description - * The reference SPAD initialization procedure determines the minimum amount - * of reference spads to be enables to achieve a target reference signal rate - * and should be performed once during initialization. - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_PerformRefSpadManagement(VL53L1_DEV Dev); - -/** -* @brief Enable/Disable Cross talk compensation feature -* -* Enable/Disable Cross Talk correction. -* -* @param Dev Device Handle -* @param XTalkCompensationEnable Cross talk compensation -* to be set 0 = disabled; other values than zero = enabled. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error -*/ -VL53L1_Error VL53L1_SetXTalkCompensationEnable(VL53L1_DEV Dev, -uint8_t XTalkCompensationEnable); - -/** - * @brief Get Cross talk compensation rate enable - * - * Get if the Cross Talk is Enabled or Disabled. - * - * @note This function doesn't access to the device - * - * @param Dev Device Handle - * @param pXTalkCompensationEnable Pointer to the Cross talk compensation - * state 0=disabled or 1 = enabled - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetXTalkCompensationEnable(VL53L1_DEV Dev, - uint8_t *pXTalkCompensationEnable); - -/** - * @brief Perform XTalk Calibration - * - * @details Perform a XTalk calibration of the Device. - * This function will launch a ranging measurement, if interrupts - * are enabled an interrupt will be done. - * This function will clear the interrupt generated automatically. - * This function will program a new value for the XTalk compensation - * and it will enable the cross talk before exit. - * - * @warning This function is a blocking function - * - * @note This function Access to the device - * - * @note This function change the preset mode so a new preset mode should - * be done after the call to this function - * - * @param Dev Device Handle - * @param CalibrationOption Select the Calibration to be run - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_PerformXTalkCalibration(VL53L1_DEV Dev, - uint8_t CalibrationOption); - -/** -* @brief Define the mode to be used for the offset calibration -* -* Define the mode to be used for the offset calibration. This function should -* be called before run the @a VL53L1_PerformOffsetCalibration() -* -* @param Dev Device Handle -* @param OffsetCalibrationMode Offset Calibration Mode -* valid values are: -* VL53L1_OFFSETCALIBRATIONMODE_STANDARD -* VL53L1_OFFSETCALIBRATIONMODE_PRERANGE_ONLY -* VL53L1_OFFSETCALIBRATIONMODE_MULTI_ZONE -* -* @return VL53L1_ERROR_NONE Success -* @return "Other error code" See ::VL53L1_Error -*/ -VL53L1_Error VL53L1_SetOffsetCalibrationMode(VL53L1_DEV Dev, - VL53L1_OffsetCalibrationModes OffsetCalibrationMode); - -/** -* @brief Define the mode to be used for the offset correction -* -* Define the mode to be used for the offset correction. -* -* @param Dev Device Handle -* @param OffsetCorrectionMode Offset Correction Mode -* valid values are: -* VL53L1_OFFSETCORRECTIONMODE_STANDARD -* VL53L1_OFFSETCORRECTIONMODE_PERZONE -* -* @return VL53L1_ERROR_NONE Success -* @return "Other error code" See ::VL53L1_Error -*/ -VL53L1_Error VL53L1_SetOffsetCorrectionMode(VL53L1_DEV Dev, - VL53L1_OffsetCorrectionModes OffsetCorrectionMode); - - -/** - * @brief Perform Offset Calibration - * - * @details Perform a Offset calibration of the Device. - * This function will launch a ranging measurement, if interrupts are - * enabled interrupts will be done. - * This function will program a new value for the Offset calibration value - * - * @warning This function is a blocking function - * - * @note This function Access to the device - * - * @param Dev Device Handle - * @param CalDistanceMilliMeter Calibration distance value used for the - * offset compensation. - * @param CalReflectancePercent Calibration Target reflectance @ 940nm - * in percentage. - * - * @return VL53L1_ERROR_NONE - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_PerformOffsetCalibration(VL53L1_DEV Dev, - int32_t CalDistanceMilliMeter, - FixPoint1616_t CalReflectancePercent); - -/** - * @brief Sets the Calibration Data. - * - * @par Function Description - * This function set all the Calibration Data issued from the functions - * @a VL53L1_PerformRefSpadManagement(), @a VL53L1_PerformXTalkCalibration, - * @a VL53L1_PerformOffsetCalibration() - * - * @note This function doesn't Accesses the device - * - * @param Dev Device Handle - * @param *pCalibrationData Pointer to Calibration data to be set. - * @return VL53L1_ERROR_NONE Success - * @return VL53L1_ERROR_INVALID_PARAMS pCalibrationData points to an older - * version of the inner structure. Need for support to convert its content. - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_SetCalibrationData(VL53L1_DEV Dev, - VL53L1_CalibrationData_t *pCalibrationData); - -/** - * @brief Gets the Calibration Data. - * - * @par Function Description - * This function get all the Calibration Data issued from the functions - * @a VL53L1_PerformRefSpadManagement(), @a VL53L1_PerformXTalkCalibration, - * @a VL53L1_PerformOffsetCalibration() - * - * @note This function doesn't Accesses the device - * - * @param Dev Device Handle - * @param *pCalibrationData pointer where to store Calibration - * data. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetCalibrationData(VL53L1_DEV Dev, - VL53L1_CalibrationData_t *pCalibrationData); - -/** - * @brief Gets the optical center. - * - * @par Function Description - * This function get the optical center issued from the nvm set at FTM stage - * expressed in the same coordinate system as the ROI are - * - * @note This function doesn't Accesses the device - * - * @param Dev Device Handle - * @param *pOpticalCentreX pointer to the X position of center - * @param *pOpticalCentreY pointer to the Y position of center - * data. - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_GetOpticalCenter(VL53L1_DEV Dev, - uint8_t *pOpticalCenterX, uint8_t *pOpticalCenterY); - -/** @} VL53L1_Calibration_group */ - -/** @defgroup VL53L1_Thresholds_group VL53L1 IRQ Triggered events Functions - * @brief Functions used to configure interrupt to be triggered only when - * a measurement satisfies some thresholds parameters - * @{ - */ - -/** -* @brief Configure the interrupt config, from the given structure -* -* @param[in] Dev : Device Handle -* @param[in] pConfig : pointer to configuration structure -*/ - -VL53L1_Error VL53L1_SetThresholdConfig(VL53L1_DEV Dev, - VL53L1_DetectionConfig_t *pConfig); - -/** -* @brief Retrieves the interrupt config structure currently programmed -* into the API -* -* @param[in] Dev : Device Handle -* @param[out] pConfig : pointer to configuration structure -*/ - -VL53L1_Error VL53L1_GetThresholdConfig(VL53L1_DEV Dev, - VL53L1_DetectionConfig_t *pConfig); - - -/** @} VL53L1_Thresholds_group */ - - -/** @} VL53L1_cut11_group */ - -#ifdef __cplusplus -} -#endif - -#endif /* _VL53L1_API_H_ */ diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_api_calibration.h b/drivers/input/misc/vl53L1/inc/vl53l1_api_calibration.h deleted file mode 100644 index 4ab74b666bf8..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_api_calibration.h +++ /dev/null @@ -1,569 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_API_CALIBRATION_H_ -#define _VL53L1_API_CALIBRATION_H_ - -#include "vl53l1_platform.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_run_ref_spad_char(VL53L1_DEV Dev, VL53L1_Error *pcal_status); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_run_device_test( - VL53L1_DEV Dev, - VL53L1_DeviceTestMode device_test_mode); - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_run_spad_rate_map( - VL53L1_DEV Dev, - VL53L1_DeviceTestMode device_test_mode, - VL53L1_DeviceSscArray array_select, - uint32_t ssc_config_timeout_us, - VL53L1_spad_rate_data_t *pspad_rate_data); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_run_xtalk_extraction( - VL53L1_DEV Dev, - uint16_t dss_config__target_total_rate_mcps, - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint8_t num_of_samples, - VL53L1_Error *pcal_status); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_run_xtalk_extraction_dual_reflectance( - VL53L1_DEV Dev, - uint16_t dss_config__target_total_rate_mcps, - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint8_t num_of_samples, - uint8_t calc_parms, - uint8_t higher_reflectance, - uint16_t expected_target_distance_mm, - uint16_t xtalk_filter_thresh_mm, - VL53L1_Error *pcal_status); - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_and_avg_xtalk_samples( - VL53L1_DEV Dev, - uint8_t num_of_samples, - uint8_t measurement_mode, - int16_t xtalk_filter_thresh_max_mm, - int16_t xtalk_filter_thresh_min_mm, - uint16_t xtalk_max_valid_rate_kcps, - uint8_t xtalk_result_id, - uint8_t xtalk_histo_id, - VL53L1_xtalk_range_results_t *pxtalk_results, - VL53L1_histogram_bin_data_t *psum_histo, - VL53L1_histogram_bin_data_t *pavg_histo); - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_and_avg_all_xtalk_samples( - VL53L1_DEV Dev, - uint8_t num_of_samples, - uint8_t measurement_mode, - int16_t xtalk_filter_thresh_mm, - VL53L1_xtalk_range_results_t *pxtalk_results, - VL53L1_histogram_bin_data_t *pavg_histo_z0, - VL53L1_histogram_bin_data_t *pavg_histo_z1, - VL53L1_histogram_bin_data_t *pavg_histo_z2, - VL53L1_histogram_bin_data_t *pavg_histo_z3, - VL53L1_histogram_bin_data_t *pavg_histo_z4); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_run_offset_calibration( - VL53L1_DEV Dev, - uint16_t dss_config__target_total_rate_mcps, - uint32_t phasecal_config_timeout_us, - uint32_t range_config_timeout_us, - uint8_t pre_num_of_samples, - uint8_t mm1_num_of_samples, - uint8_t mm2_num_of_samples, - int16_t cal_distance_mm, - uint16_t cal_reflectance_pc, - VL53L1_Error *pcal_status); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_run_zone_calibration( - VL53L1_DEV Dev, - VL53L1_DevicePresetModes device_preset_mode, - VL53L1_DeviceZonePreset zone_preset, - VL53L1_zone_config_t *pzone_cfg, - uint16_t dss_config__target_total_rate_mcps, - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint16_t num_of_samples, - int16_t cal_distance_mm, - uint16_t cal_reflectance_pc, - VL53L1_Error *pcal_status); - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_api_core.h b/drivers/input/misc/vl53L1/inc/vl53l1_api_core.h deleted file mode 100644 index b9d9a96668ab..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_api_core.h +++ /dev/null @@ -1,1579 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_API_CORE_H_ -#define _VL53L1_API_CORE_H_ - -#include "vl53l1_platform.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - -VL53L1_Error VL53L1_get_version( - VL53L1_DEV Dev, - VL53L1_ll_version_t *pversion); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_is_fpga_system( - VL53L1_DEV Dev, - uint8_t *pfpga_system); - - - - - - - - - - - - -VL53L1_Error VL53L1_get_device_firmware_version( - VL53L1_DEV Dev, - uint16_t *pfw_version); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_data_init( - VL53L1_DEV Dev, - uint8_t read_p2p_data); - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_read_p2p_data( - VL53L1_DEV Dev); - - - - - - - - - - - - - -VL53L1_Error VL53L1_software_reset( - VL53L1_DEV Dev); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_part_to_part_data( - VL53L1_DEV Dev, - VL53L1_calibration_data_t *pcal_data); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_part_to_part_data( - VL53L1_DEV Dev, - VL53L1_calibration_data_t *pcal_data); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_inter_measurement_period_ms( - VL53L1_DEV Dev, - uint32_t inter_measurement_period_ms); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_inter_measurement_period_ms( - VL53L1_DEV Dev, - uint32_t *pinter_measurement_period_ms); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_timeouts_us( - VL53L1_DEV Dev, - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_timeouts_us( - VL53L1_DEV Dev, - uint32_t *pphasecal_config_timeout_us, - uint32_t *pmm_config_timeout_us, - uint32_t *prange_config_timeout_us); - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_calibration_repeat_period( - VL53L1_DEV Dev, - uint16_t cal_config__repeat_period); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_calibration_repeat_period( - VL53L1_DEV Dev, - uint16_t *pcal_config__repeat_period); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_sequence_config_bit( - VL53L1_DEV Dev, - VL53L1_DeviceSequenceConfig bit_id, - uint8_t value); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_sequence_config_bit( - VL53L1_DEV Dev, - VL53L1_DeviceSequenceConfig bit_id, - uint8_t *pvalue); - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_interrupt_polarity( - VL53L1_DEV Dev, - VL53L1_DeviceInterruptPolarity interrupt_polarity); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_interrupt_polarity( - VL53L1_DEV Dev, - VL53L1_DeviceInterruptPolarity *pinterrupt_polarity); - - - - - - - - - - - - -VL53L1_Error VL53L1_get_refspadchar_config_struct( - VL53L1_DEV Dev, - VL53L1_refspadchar_config_t *pdata); - - - - - - - - - - - - -VL53L1_Error VL53L1_set_refspadchar_config_struct( - VL53L1_DEV Dev, - VL53L1_refspadchar_config_t *pdata); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_range_ignore_threshold( - VL53L1_DEV Dev, - uint8_t range_ignore_thresh_mult, - uint16_t range_ignore_threshold_mcps); - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_range_ignore_threshold( - VL53L1_DEV Dev, - uint8_t *prange_ignore_thresh_mult, - uint16_t *prange_ignore_threshold_mcps_internal, - uint16_t *prange_ignore_threshold_mcps_current); - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_user_zone( - VL53L1_DEV Dev, - VL53L1_user_zone_t *puser_zone); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_user_zone( - VL53L1_DEV Dev, - VL53L1_user_zone_t *puser_zone); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_mode_mitigation_roi( - VL53L1_DEV Dev, - VL53L1_user_zone_t *pmm_roi); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_zone_config( - VL53L1_DEV Dev, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_zone_config( - VL53L1_DEV Dev, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_preset_mode( - VL53L1_DEV Dev, - VL53L1_DevicePresetModes device_preset_mode, - uint16_t dss_config__target_total_rate_mcps, - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint32_t inter_measurement_period_ms); - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_zone_preset( - VL53L1_DEV Dev, - VL53L1_DeviceZonePreset zone_preset); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_enable_xtalk_compensation( - VL53L1_DEV Dev); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_disable_xtalk_compensation( - VL53L1_DEV Dev); - - - - - - - - - - - - - - -void VL53L1_get_xtalk_compensation_enable( - VL53L1_DEV Dev, - uint8_t *pcrosstalk_compensation_enable); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_init_and_start_range( - VL53L1_DEV Dev, - uint8_t measurement_mode, - VL53L1_DeviceConfigLevel device_config_level); - - - - - - - - - - - - - -VL53L1_Error VL53L1_stop_range( - VL53L1_DEV Dev); - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_measurement_results( - VL53L1_DEV Dev, - VL53L1_DeviceResultsLevel device_result_level); - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_device_results( - VL53L1_DEV Dev, - VL53L1_DeviceResultsLevel device_result_level, - VL53L1_range_results_t *prange_results); - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_clear_interrupt_and_enable_next_range( - VL53L1_DEV Dev, - uint8_t measurement_mode); - - - - - - - - - - -VL53L1_Error VL53L1_get_histogram_bin_data( - VL53L1_DEV Dev, - VL53L1_histogram_bin_data_t *phist_data); - - - - - - - - - - - - -void VL53L1_copy_sys_and_core_results_to_range_results( - int32_t gain_factor, - VL53L1_system_results_t *psys, - VL53L1_core_results_t *pcore, - VL53L1_range_results_t *presults); - - - - - - - - - -VL53L1_Error VL53L1_set_zone_dss_config( - VL53L1_DEV Dev, - VL53L1_zone_private_dyn_cfg_t *pzone_dyn_cfg); - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_calc_ambient_dmax( - VL53L1_DEV Dev, - uint16_t target_reflectance, - int16_t *pambient_dmax_mm); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_GPIO_interrupt_config( - VL53L1_DEV Dev, - VL53L1_GPIO_Interrupt_Mode intr_mode_distance, - VL53L1_GPIO_Interrupt_Mode intr_mode_rate, - uint8_t intr_new_measure_ready, - uint8_t intr_no_target, - uint8_t intr_combined_mode, - uint16_t thresh_distance_high, - uint16_t thresh_distance_low, - uint16_t thresh_rate_high, - uint16_t thresh_rate_low - ); - - - - - - - - - -VL53L1_Error VL53L1_set_GPIO_interrupt_config_struct( - VL53L1_DEV Dev, - VL53L1_GPIO_interrupt_config_t intconf); - - - - - - - - - - -VL53L1_Error VL53L1_get_GPIO_interrupt_config( - VL53L1_DEV Dev, - VL53L1_GPIO_interrupt_config_t *pintconf); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_dmax_mode( - VL53L1_DEV Dev, - VL53L1_DeviceDmaxMode dmax_mode); - - - - - - - - - - - - -VL53L1_Error VL53L1_get_dmax_mode( - VL53L1_DEV Dev, - VL53L1_DeviceDmaxMode *pdmax_mode); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_dmax_calibration_data( - VL53L1_DEV Dev, - VL53L1_DeviceDmaxMode dmax_mode, - uint8_t zone_id, - VL53L1_dmax_calibration_data_t *pdmax_cal); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_hist_dmax_config( - VL53L1_DEV Dev, - VL53L1_hist_gen3_dmax_config_t *pdmax_cfg); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_hist_dmax_config( - VL53L1_DEV Dev, - VL53L1_hist_gen3_dmax_config_t *pdmax_cfg); - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_offset_calibration_mode( - VL53L1_DEV Dev, - VL53L1_OffsetCalibrationMode offset_cal_mode); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_offset_calibration_mode( - VL53L1_DEV Dev, - VL53L1_OffsetCalibrationMode *poffset_cal_mode); - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_offset_correction_mode( - VL53L1_DEV Dev, - VL53L1_OffsetCalibrationMode offset_cor_mode); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_offset_correction_mode( - VL53L1_DEV Dev, - VL53L1_OffsetCorrectionMode *poffset_cor_mode); - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_zone_calibration_data( - VL53L1_DEV Dev, - VL53L1_zone_calibration_results_t *pzone_cal); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_zone_calibration_data( - VL53L1_DEV Dev, - VL53L1_zone_calibration_results_t *pzone_cal); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_lite_xtalk_margin_kcps( - VL53L1_DEV Dev, - int16_t *pxtalk_margin); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_lite_xtalk_margin_kcps( - VL53L1_DEV Dev, - int16_t xtalk_margin); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_histogram_xtalk_margin_kcps( - VL53L1_DEV Dev, - int16_t *pxtalk_margin); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_histogram_xtalk_margin_kcps( - VL53L1_DEV Dev, - int16_t xtalk_margin); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_histogram_phase_consistency( - VL53L1_DEV Dev, - uint8_t *pphase_consistency); - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_histogram_phase_consistency( - VL53L1_DEV Dev, - uint8_t phase_consistency); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_histogram_event_consistency( - VL53L1_DEV Dev, - uint8_t *pevent_consistency); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_histogram_event_consistency( - VL53L1_DEV Dev, - uint8_t event_consistency); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_histogram_ambient_threshold_sigma( - VL53L1_DEV Dev, - uint8_t *pamb_thresh_sigma); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_histogram_ambient_threshold_sigma( - VL53L1_DEV Dev, - uint8_t amb_thresh_sigma); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_lite_min_count_rate( - VL53L1_DEV Dev, - uint16_t *plite_mincountrate); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_lite_min_count_rate( - VL53L1_DEV Dev, - uint16_t lite_mincountrate); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_lite_sigma_threshold( - VL53L1_DEV Dev, - uint16_t *plite_sigma); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_lite_sigma_threshold( - VL53L1_DEV Dev, - uint16_t lite_sigma); - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_restore_xtalk_nvm_default( - VL53L1_DEV Dev); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_xtalk_detect_config( - VL53L1_DEV Dev, - int16_t *pmax_valid_range_mm, - int16_t *pmin_valid_range_mm, - uint16_t *pmax_valid_rate_kcps, - uint16_t *pmax_sigma_mm); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_xtalk_detect_config( - VL53L1_DEV Dev, - int16_t max_valid_range_mm, - int16_t min_valid_range_mm, - uint16_t max_valid_rate_kcps, - uint16_t max_sigma_mm); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_target_order_mode( - VL53L1_DEV Dev, - VL53L1_HistTargetOrder *phist_target_order); - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_target_order_mode( - VL53L1_DEV Dev, - VL53L1_HistTargetOrder hist_target_order); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_dmax_reflectance_values( - VL53L1_DEV Dev, - VL53L1_dmax_reflectance_array_t *pdmax_reflectances); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_dmax_reflectance_values( - VL53L1_DEV Dev, - VL53L1_dmax_reflectance_array_t *pdmax_reflectances); - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_api_debug.h b/drivers/input/misc/vl53L1/inc/vl53l1_api_debug.h deleted file mode 100644 index 1203caa2f532..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_api_debug.h +++ /dev/null @@ -1,649 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_API_DEBUG_H_ -#define _VL53L1_API_DEBUG_H_ - -#include "vl53l1_platform.h" -#include "vl53l1_nvm_structs.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_decode_calibration_data_buffer( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_calibration_data_t *pdata); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_nvm_debug_data( - VL53L1_DEV Dev, - VL53L1_decoded_nvm_data_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_histogram_debug_data( - VL53L1_DEV Dev, - VL53L1_histogram_bin_data_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_xtalk_debug_data( - VL53L1_DEV Dev, - VL53L1_xtalk_debug_data_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_offset_debug_data( - VL53L1_DEV Dev, - VL53L1_offset_debug_data_t *pdata); - -#ifdef VL53L1_LOG_ENABLE - - - - - - - - - - - - -void VL53L1_signed_fixed_point_sprintf( - int32_t fp_value, - uint8_t frac_bits, - uint16_t buf_size, - char *pbuffer); - - - - - - - - - - - -void VL53L1_print_static_nvm_managed( - VL53L1_static_nvm_managed_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - -void VL53L1_print_customer_nvm_managed( - VL53L1_customer_nvm_managed_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - -void VL53L1_print_nvm_copy_data( - VL53L1_nvm_copy_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_histogram_bin_data( - VL53L1_histogram_bin_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_xtalk_histogram_data( - VL53L1_xtalk_histogram_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_xtalk_histogram_shape_data( - VL53L1_xtalk_histogram_shape_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_range_results( - VL53L1_range_results_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - -void VL53L1_print_range_data( - VL53L1_range_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_offset_range_results( - VL53L1_offset_range_results_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_offset_range_data( - VL53L1_offset_range_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_cal_peak_rate_map( - VL53L1_cal_peak_rate_map_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_additional_offset_cal_data( - VL53L1_additional_offset_cal_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_gain_calibration_data( - VL53L1_gain_calibration_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - - -void VL53L1_print_zone_calibration_data( - VL53L1_zone_calibration_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - - -void VL53L1_print_zone_calibration_results( - VL53L1_zone_calibration_results_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_xtalk_range_results( - VL53L1_xtalk_range_results_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_xtalk_range_data( - VL53L1_xtalk_range_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_xtalk_calibration_results( - VL53L1_xtalk_calibration_results_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_xtalk_config( - VL53L1_xtalk_config_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_dmax_calibration_data( - VL53L1_dmax_calibration_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_calibration_data( - VL53L1_calibration_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_xtalk_debug_data( - VL53L1_xtalk_debug_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - -void VL53L1_print_offset_debug_data( - VL53L1_offset_debug_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_user_zone( - VL53L1_user_zone_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - -void VL53L1_print_zone_config( - VL53L1_zone_config_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - -void VL53L1_print_spad_rate_data( - VL53L1_spad_rate_data_t *pspad_rates, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - -void VL53L1_print_spad_rate_map( - VL53L1_spad_rate_data_t *pspad_rates, - char *pprefix, - uint32_t trace_flags); - - -#endif - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_api_preset_modes.h b/drivers/input/misc/vl53L1/inc/vl53l1_api_preset_modes.h deleted file mode 100644 index 5ba58a97e79b..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_api_preset_modes.h +++ /dev/null @@ -1,1191 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_API_PRESET_MODES_H_ -#define _VL53L1_API_PRESET_MODES_H_ - -#include "vl53l1_ll_def.h" -#include "vl53l1_dmax_structs.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - -VL53L1_Error VL53L1_init_refspadchar_config_struct( - VL53L1_refspadchar_config_t *pdata); - - - - - - - - - - - - -VL53L1_Error VL53L1_init_ssc_config_struct( - VL53L1_ssc_config_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_init_xtalk_config_struct( - VL53L1_customer_nvm_managed_t *pnvm, - VL53L1_xtalk_config_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_init_hist_post_process_config_struct( - uint8_t xtalk_compensation_enable, - VL53L1_hist_post_process_config_t *pdata); - - - - - - - - - - - - -VL53L1_Error VL53L1_init_dmax_calibration_data_struct( - VL53L1_dmax_calibration_data_t *pdata); - - - - - - - - - - - -VL53L1_Error VL53L1_init_hist_gen3_dmax_config_struct( - VL53L1_hist_gen3_dmax_config_t *pdata); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_standard_ranging( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_standard_ranging_short_range( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_standard_ranging_long_range( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_standard_ranging_mm1_cal( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_standard_ranging_mm2_cal( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_timed_ranging( - - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_timed_ranging_short_range( - - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_timed_ranging_long_range( - - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_with_mm1( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_with_mm2( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_mm1_cal( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_mm2_cal( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_ref( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_characterisation( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_xtalk_planar( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_xtalk_mm1( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_xtalk_mm2( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_multizone( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_multizone_short_range( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_multizone_long_range( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_short_timing( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_long_range( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_medium_range( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_short_range( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_long_range_mm1( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_long_range_mm2( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_medium_range_mm1( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_medium_range_mm2( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_short_range_mm1( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_histogram_short_range_mm2( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_olt( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_preset_mode_singleshot_ranging( - - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - - - - - -void VL53L1_copy_hist_cfg_to_static_cfg( - VL53L1_histogram_config_t *phistogram, - VL53L1_static_config_t *pstatic, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic); - - - - - - - - - - - - - - -void VL53L1_copy_hist_bins_to_static_cfg( - VL53L1_histogram_config_t *phistogram, - VL53L1_static_config_t *pstatic, - VL53L1_timing_config_t *ptiming); - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_api_strings.h b/drivers/input/misc/vl53L1/inc/vl53l1_api_strings.h deleted file mode 100644 index 24f12bc698d4..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_api_strings.h +++ /dev/null @@ -1,210 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either -* 'STMicroelectronics Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - -/** - * @file vl53l1_api_strings.h - * @brief VL53L1 API function declarations for decoding error codes to a - * text strings - */ - - -#ifndef VL53L1_API_STRINGS_H_ -#define VL53L1_API_STRINGS_H_ - -#include "vl53l1_def.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - -/** - * @brief Generates a string for the input device range status code - * - * @param[in] RangeStatus : Device Range AStatus Code - * @param[out] pRangeStatusString : pointer to character buffer - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_get_range_status_string( - uint8_t RangeStatus, - char *pRangeStatusString); - -/** - * @brief Generates an error string for the input PAL error code - * - * @param[in] PalErrorCode : PAL Error Code - * @param[out] pPalErrorString : pointer to character buffer - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_get_pal_error_string( - VL53L1_Error PalErrorCode, - char *pPalErrorString); - -/** - * @brief Generates a string for the input PAL State code - * - * @param[in] PalStateCode : PAL State Code - * @param[out] pPalStateString : pointer to character buffer - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_get_pal_state_string( - VL53L1_State PalStateCode, - char *pPalStateString); - - -/** - * @brief Generates a string for the sequence step Id - * - * @param[in] SequenceStepId : Sequence Step Id - * @param[out] pSequenceStepsString : pointer to character buffer - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_get_sequence_steps_info( - VL53L1_SequenceStepId SequenceStepId, - char *pSequenceStepsString); - -/** - * @brief Generates a string for the limit check Id - * - * @param[in] LimitCheckId : Limit check Id - * @param[out] pLimitCheckString : pointer to character buffer - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_get_limit_check_info(uint16_t LimitCheckId, - char *pLimitCheckString); - -#ifndef VL53L1_USE_EMPTY_STRING - #define VL53L1_STRING_DEVICE_INFO_NAME0 "VL53L1 cut1.0" - #define VL53L1_STRING_DEVICE_INFO_NAME1 "VL53L1 cut1.1" - #define VL53L1_STRING_DEVICE_INFO_TYPE "VL53L1" - - /* Range Status */ - #define VL53L1_STRING_RANGESTATUS_NONE "No Update" - #define VL53L1_STRING_RANGESTATUS_RANGEVALID "Range Valid" - #define VL53L1_STRING_RANGESTATUS_SIGMA "Sigma Fail" - #define VL53L1_STRING_RANGESTATUS_SIGNAL "Signal Fail" - #define VL53L1_STRING_RANGESTATUS_MINRANGE "Min Range Fail" - #define VL53L1_STRING_RANGESTATUS_PHASE "Phase Fail" - #define VL53L1_STRING_RANGESTATUS_HW "Hardware Fail" - - - /* Range Status */ - #define VL53L1_STRING_STATE_POWERDOWN "POWERDOWN State" - #define VL53L1_STRING_STATE_WAIT_STATICINIT \ - "Wait for staticinit State" - #define VL53L1_STRING_STATE_STANDBY "STANDBY State" - #define VL53L1_STRING_STATE_IDLE "IDLE State" - #define VL53L1_STRING_STATE_RUNNING "RUNNING State" - #define VL53L1_STRING_STATE_RESET "RESET State" - #define VL53L1_STRING_STATE_UNKNOWN "UNKNOWN State" - #define VL53L1_STRING_STATE_ERROR "ERROR State" - - - - /* Check Enable */ - #define VL53L1_STRING_CHECKENABLE_SIGMA_FINAL_RANGE \ - "SIGMA FINAL RANGE" - #define VL53L1_STRING_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE \ - "SIGNAL RATE FINAL RANGE" - #define VL53L1_STRING_CHECKENABLE_SIGNAL_MIN_CLIP \ - "SIGNAL MIN CLIP" - #define VL53L1_STRING_CHECKENABLE_RANGE_IGNORE_THRESHOLD \ - "RANGE IGNORE THRESHOLD" - #define VL53L1_STRING_CHECKENABLE_RANGE_PHASE_HIGH \ - "RANGE PHASE HIGH" - #define VL53L1_STRING_CHECKENABLE_RANGE_PHASE_LOW \ - "RANGE PHASE LOW" - #define VL53L1_STRING_CHECKENABLE_RANGE_PHASE_CONSISTENCY \ - "RANGE PHASE CONSISTENCY" - - /* Sequence Step */ - #define VL53L1_STRING_SEQUENCESTEP_VHV "VHV" - #define VL53L1_STRING_SEQUENCESTEP_PHASECAL "PHASE CAL" - #define VL53L1_STRING_SEQUENCESTEP_REFPHASE "REF PHASE" - #define VL53L1_STRING_SEQUENCESTEP_DSS1 "DSS1" - #define VL53L1_STRING_SEQUENCESTEP_DSS2 "DSS2" - #define VL53L1_STRING_SEQUENCESTEP_MM1 "MM1" - #define VL53L1_STRING_SEQUENCESTEP_MM2 "MM2" - #define VL53L1_STRING_SEQUENCESTEP_RANGE "RANGE" -#endif /* VL53L1_USE_EMPTY_STRING */ - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_core.h b/drivers/input/misc/vl53L1/inc/vl53l1_core.h deleted file mode 100644 index bc5e5ea2326c..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_core.h +++ /dev/null @@ -1,1513 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_CORE_H_ -#define _VL53L1_CORE_H_ - -#include "vl53l1_platform.h" -#include "vl53l1_core_support.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - -void VL53L1_init_version( - VL53L1_DEV Dev); - - - - - - - - - - -void VL53L1_init_ll_driver_state( - VL53L1_DEV Dev, - VL53L1_DeviceState ll_state); - - - - - - - - - - - - -VL53L1_Error VL53L1_update_ll_driver_rd_state( - VL53L1_DEV Dev); - - - - - - - - - - - - - -VL53L1_Error VL53L1_check_ll_driver_rd_state( - VL53L1_DEV Dev); - - - - - - - - - - - - -VL53L1_Error VL53L1_update_ll_driver_cfg_state( - VL53L1_DEV Dev); - - - - - - - - - - -void VL53L1_copy_rtn_good_spads_to_buffer( - VL53L1_nvm_copy_data_t *pdata, - uint8_t *pbuffer); - - - - - - - - - - - - -void VL53L1_init_system_results( - VL53L1_system_results_t *pdata); - - - - - - - - - - -void V53L1_init_zone_results_structure( - uint8_t active_zones, - VL53L1_zone_results_t *pdata); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void VL53L1_init_histogram_config_structure( - uint8_t even_bin0, - uint8_t even_bin1, - uint8_t even_bin2, - uint8_t even_bin3, - uint8_t even_bin4, - uint8_t even_bin5, - uint8_t odd_bin0, - uint8_t odd_bin1, - uint8_t odd_bin2, - uint8_t odd_bin3, - uint8_t odd_bin4, - uint8_t odd_bin5, - VL53L1_histogram_config_t *pdata); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void VL53L1_init_histogram_multizone_config_structure( - uint8_t even_bin0, - uint8_t even_bin1, - uint8_t even_bin2, - uint8_t even_bin3, - uint8_t even_bin4, - uint8_t even_bin5, - uint8_t odd_bin0, - uint8_t odd_bin1, - uint8_t odd_bin2, - uint8_t odd_bin3, - uint8_t odd_bin4, - uint8_t odd_bin5, - VL53L1_histogram_config_t *pdata); - - - - - - - - - - - -void VL53L1_init_xtalk_bin_data_struct( - uint32_t bin_value, - uint16_t VL53L1_PRM_00017, - VL53L1_xtalk_histogram_shape_t *pdata); - - - - - - - - - - - - - -void VL53L1_i2c_encode_uint16_t( - uint16_t ip_value, - uint16_t count, - uint8_t *pbuffer); - - - - - - - - - - - - - - -uint16_t VL53L1_i2c_decode_uint16_t( - uint16_t count, - uint8_t *pbuffer); - - - - - - - - - - - - - -void VL53L1_i2c_encode_int16_t( - int16_t ip_value, - uint16_t count, - uint8_t *pbuffer); - - - - - - - - - - - - - - -int16_t VL53L1_i2c_decode_int16_t( - uint16_t count, - uint8_t *pbuffer); - - - - - - - - - - - - - -void VL53L1_i2c_encode_uint32_t( - uint32_t ip_value, - uint16_t count, - uint8_t *pbuffer); - - - - - - - - - - - - - - -uint32_t VL53L1_i2c_decode_uint32_t( - uint16_t count, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - - -uint32_t VL53L1_i2c_decode_with_mask( - uint16_t count, - uint8_t *pbuffer, - uint32_t bit_mask, - uint32_t down_shift, - uint32_t offset); - - - - - - - - - - - - - -void VL53L1_i2c_encode_int32_t( - int32_t ip_value, - uint16_t count, - uint8_t *pbuffer); - - - - - - - - - - - - - - -int32_t VL53L1_i2c_decode_int32_t( - uint16_t count, - uint8_t *pbuffer); - - - - - - - - - - - - - -VL53L1_Error VL53L1_start_test( - VL53L1_DEV Dev, - uint8_t test_mode__ctrl); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_firmware_enable_register( - VL53L1_DEV Dev, - uint8_t value); - - - - - - - - - - - - -VL53L1_Error VL53L1_enable_firmware( - VL53L1_DEV Dev); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_disable_firmware( - VL53L1_DEV Dev); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_powerforce_register( - VL53L1_DEV Dev, - uint8_t value); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_enable_powerforce( - VL53L1_DEV Dev); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_disable_powerforce( - VL53L1_DEV Dev); - - - - - - - - - - - - - -VL53L1_Error VL53L1_clear_interrupt( - VL53L1_DEV Dev); - - - - - - - - - - - - - -VL53L1_Error VL53L1_force_shadow_stream_count_to_zero( - VL53L1_DEV Dev); - - - - - - - - - - - - - - - - - - - -uint32_t VL53L1_calc_macro_period_us( - uint16_t fast_osc_frequency, - uint8_t VL53L1_PRM_00007); - - - - - - - - - - - - - - - - - - -uint16_t VL53L1_calc_range_ignore_threshold( - uint16_t central_rate, - int16_t x_gradient, - int16_t y_gradient, - uint8_t rate_mult); - - - - - - - - - - - - - -uint32_t VL53L1_calc_timeout_mclks( - uint32_t timeout_us, - uint32_t macro_period_us); - - - - - - - - - - - - -uint16_t VL53L1_calc_encoded_timeout( - uint32_t timeout_us, - uint32_t macro_period_us); - - - - - - - - - - - - - -uint32_t VL53L1_calc_timeout_us( - uint32_t timeout_mclks, - uint32_t macro_period_us); - - - - - - - - - - - - -uint32_t VL53L1_calc_decoded_timeout_us( - uint16_t timeout_encoded, - uint32_t macro_period_us); - - - - - - - - - - - -uint16_t VL53L1_encode_timeout( - uint32_t timeout_mclks); - - - - - - - - - - - - -uint32_t VL53L1_decode_timeout( - uint16_t encoded_timeout); - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_calc_timeout_register_values( - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint16_t fast_osc_frequency, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming); - - - - - - - - - - - - -uint8_t VL53L1_encode_vcsel_period( - uint8_t VL53L1_PRM_00028); - - - - - - - - - - - - - - - -uint32_t VL53L1_decode_unsigned_integer( - uint8_t *pbuffer, - uint8_t no_of_bytes); - - - - - - - - - - - - -void VL53L1_encode_unsigned_integer( - uint32_t ip_value, - uint8_t no_of_bytes, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_hist_copy_and_scale_ambient_info( - VL53L1_zone_hist_info_t *pidata, - VL53L1_histogram_bin_data_t *podata); - - - - - - - - - - - - -void VL53L1_hist_get_bin_sequence_config( - VL53L1_DEV Dev, - VL53L1_histogram_bin_data_t *pdata); - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_hist_phase_consistency_check( - VL53L1_DEV Dev, - VL53L1_zone_hist_info_t *phist_prev, - VL53L1_histogram_bin_data_t *phist_curr, - VL53L1_zone_objects_t *prange_prev, - VL53L1_range_results_t *prange_curr); - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_hist_events_consistency_check( - VL53L1_DEV Dev, - uint8_t VL53L1_PRM_00001, - uint8_t p, - VL53L1_zone_hist_info_t *phist_prev, - VL53L1_histogram_bin_data_t *phist_curr, - VL53L1_zone_objects_t *prange_prev, - VL53L1_range_results_t *prange_curr, - int32_t *pevents_tolerance, - int32_t *pevents_delta, - VL53L1_DeviceError *prange_status); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_hist_wrap_dmax( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_histogram_bin_data_t *pcurrent, - int16_t *pwrap_dmax_mm); - - - - - - - - - - - - - - - - - - - - - -void VL53L1_hist_combine_mm1_mm2_offsets( - int16_t mm1_offset_mm, - int16_t mm2_offset_mm, - uint8_t encoded_mm_roi_centre, - uint8_t encoded_mm_roi_size, - uint8_t encoded_zone_centre, - uint8_t encoded_zone_size, - VL53L1_additional_offset_cal_data_t *pcal_data, - uint8_t *pgood_spads, - uint16_t aperture_attenuation, - int16_t *prange_offset_mm); - - - - - - - - - - - - - - - - - - -void VL53L1_spad_number_to_byte_bit_index( - uint8_t spad_number, - uint8_t *pbyte_index, - uint8_t *pbit_index, - uint8_t *pbit_mask); - - - - - - - - - - - - - -void VL53L1_encode_row_col( - uint8_t row, - uint8_t col, - uint8_t *pspad_number); - - - - - - - - - - - - -void VL53L1_decode_zone_size( - uint8_t encoded_xy_size, - uint8_t *pwidth, - uint8_t *pheight); - - - - - - - - - - - - -void VL53L1_encode_zone_size( - uint8_t width, - uint8_t height, - uint8_t *pencoded_xy_size); - - - - - - - - - - - - - - - - - -void VL53L1_decode_zone_limits( - uint8_t encoded_xy_centre, - uint8_t encoded_xy_size, - int16_t *px_ll, - int16_t *py_ll, - int16_t *px_ur, - int16_t *py_ur); - - - - - - - - - - - - -uint8_t VL53L1_is_aperture_location( - uint8_t row, - uint8_t col); - - - - - - - - - - - - - - - - - - - -void VL53L1_calc_mm_effective_spads( - uint8_t encoded_mm_roi_centre, - uint8_t encoded_mm_roi_size, - uint8_t encoded_zone_centre, - uint8_t encoded_zone_size, - uint8_t *pgood_spads, - uint16_t aperture_attenuation, - uint16_t *pmm_inner_effective_spads, - uint16_t *pmm_outer_effective_spads); - - - - - - - - - - - - - - -void VL53L1_hist_copy_results_to_sys_and_core( - VL53L1_histogram_bin_data_t *pbins, - VL53L1_range_results_t *phist, - VL53L1_system_results_t *psys, - VL53L1_core_results_t *pcore); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_sum_histogram_data ( - VL53L1_histogram_bin_data_t *phist_input, - VL53L1_histogram_bin_data_t *phist_output); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_avg_histogram_data ( - uint8_t no_of_samples, - VL53L1_histogram_bin_data_t *phist_sum, - VL53L1_histogram_bin_data_t *phist_avg); - - - - - - - - - - - - - -VL53L1_Error VL53L1_save_cfg_data( - VL53L1_DEV Dev); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_dynamic_zone_update( - VL53L1_DEV Dev, - VL53L1_range_results_t *presults); - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_update_internal_stream_counters( - VL53L1_DEV Dev, - uint8_t external_stream_count, - uint8_t *pinternal_stream_count, - uint8_t *pinternal_stream_count_val - ); - - - - - - - - - - - - -VL53L1_Error VL53L1_multizone_hist_bins_update( - VL53L1_DEV Dev); - - - - - - - -VL53L1_Error VL53L1_set_histogram_multizone_initial_bin_config( - VL53L1_zone_config_t *pzone_cfg, - VL53L1_histogram_config_t *phist_cfg, - VL53L1_histogram_config_t *pmulti_hist - ); - - - - - - - - - -uint8_t VL53L1_encode_GPIO_interrupt_config( - VL53L1_GPIO_interrupt_config_t *pintconf); - - - - - - - - - -VL53L1_GPIO_interrupt_config_t VL53L1_decode_GPIO_interrupt_config( - uint8_t system__interrupt_config); - - - - - - - - - - -VL53L1_Error VL53L1_set_GPIO_distance_threshold( - VL53L1_DEV Dev, - uint16_t threshold_high, - uint16_t threshold_low); - - - - - - - - - - -VL53L1_Error VL53L1_set_GPIO_rate_threshold( - VL53L1_DEV Dev, - uint16_t threshold_high, - uint16_t threshold_low); - - - - - - - - - - -VL53L1_Error VL53L1_set_GPIO_thresholds_from_struct( - VL53L1_DEV Dev, - VL53L1_GPIO_interrupt_config_t *pintconf); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_ref_spad_char_config( - VL53L1_DEV Dev, - uint8_t vcsel_period_a, - uint32_t phasecal_timeout_us, - uint16_t total_rate_target_mcps, - uint16_t max_count_rate_rtn_limit_mcps, - uint16_t min_count_rate_rtn_limit_mcps, - uint16_t fast_osc_frequency); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_ssc_config( - VL53L1_DEV Dev, - VL53L1_ssc_config_t *pssc_cfg, - uint16_t fast_osc_frequency); - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_spad_rate_data( - VL53L1_DEV Dev, - VL53L1_spad_rate_data_t *pspad_rates); - - - - - - - - - - - - - - - - -uint16_t VL53L1_calc_crosstalk_plane_offset_with_margin( - uint16_t plane_offset_kcps, - int16_t margin_offset_kcps); - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_core_support.h b/drivers/input/misc/vl53L1/inc/vl53l1_core_support.h deleted file mode 100644 index e66c5ec97202..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_core_support.h +++ /dev/null @@ -1,410 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_CORE_SUPPORT_H_ -#define _VL53L1_CORE_SUPPORT_H_ - -#include "vl53l1_types.h" -#include "vl53l1_hist_structs.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - -uint32_t VL53L1_calc_pll_period_us( - uint16_t fast_osc_frequency); - - - - - - - - - - - - - - - - - - -uint32_t VL53L1_duration_maths( - uint32_t pll_period_us, - uint32_t vcsel_parm_pclks, - uint32_t window_vclks, - uint32_t periods_elapsed_mclks); - - - - - - - - - - - - - - - - -uint32_t VL53L1_events_per_spad_maths( - int32_t VL53L1_PRM_00009, - uint16_t num_spads, - uint32_t duration); - - - - - - - - - - - - - -uint32_t VL53L1_isqrt( - uint32_t num); - - - - - - - - - - -void VL53L1_hist_calc_zero_distance_phase( - VL53L1_histogram_bin_data_t *pdata); - - - - - - - - - - - - - - - - - - - -void VL53L1_hist_estimate_ambient_from_thresholded_bins( - int32_t ambient_threshold_sigma, - VL53L1_histogram_bin_data_t *pdata); - - - - - - - - - - - - - -void VL53L1_hist_remove_ambient_bins( - VL53L1_histogram_bin_data_t *pdata); - - - - - - - - - - - - - - -uint32_t VL53L1_calc_pll_period_mm( - uint16_t fast_osc_frequency); - - - - - - - - - - - - - - - -uint16_t VL53L1_rate_maths( - int32_t VL53L1_PRM_00006, - uint32_t time_us); - - - - - - - - - - - - - - - - - - -uint16_t VL53L1_rate_per_spad_maths( - uint32_t frac_bits, - uint32_t peak_count_rate, - uint16_t num_spads, - uint32_t max_output_value); - - - - - - - - - - - - - - - - - -int32_t VL53L1_range_maths( - uint16_t fast_osc_frequency, - uint16_t VL53L1_PRM_00013, - uint16_t zero_distance_phase, - int32_t gain_factor, - int32_t range_offset_mm); - - - - - - - - - - - - -uint8_t VL53L1_decode_vcsel_period( - uint8_t vcsel_period_reg); - - - - - - - - - - - -void VL53L1_copy_xtalk_bin_data_to_histogram_data_struct( - VL53L1_xtalk_histogram_shape_t *pxtalk, - VL53L1_histogram_bin_data_t *phist); - - - - - - - - - - - -void VL53L1_init_histogram_bin_data_struct( - int32_t bin_value, - uint16_t VL53L1_PRM_00017, - VL53L1_histogram_bin_data_t *pdata); - - - - - - - - - - - - -void VL53L1_decode_row_col( - uint8_t spad_number, - uint8_t *prow, - uint8_t *pcol); - - - - - - - - - - - - - - - -void VL53L1_hist_find_min_max_bin_values( - VL53L1_histogram_bin_data_t *pdata); - - - - - - - - - - - - - - - -void VL53L1_hist_estimate_ambient_from_ambient_bins( - VL53L1_histogram_bin_data_t *pdata); - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_def.h b/drivers/input/misc/vl53L1/inc/vl53l1_def.h deleted file mode 100644 index 71e60165d9ce..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_def.h +++ /dev/null @@ -1,704 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either -* 'STMicroelectronics Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - -/** - * @file vl53l1_def.h - * - * @brief Type definitions for VL53L1 API. - * - */ - - -#ifndef _VL53L1_DEF_H_ -#define _VL53L1_DEF_H_ - -#include "vl53l1_ll_def.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup VL53L1_globaldefine_group VL53L1 Defines - * @brief VL53L1 Defines - * @{ - */ - - -/** PAL SPECIFICATION major version */ -#define VL53L1_SPECIFICATION_VER_MAJOR 1 -/** PAL SPECIFICATION minor version */ -#define VL53L1_SPECIFICATION_VER_MINOR 2 -/** PAL SPECIFICATION sub version */ -#define VL53L1_SPECIFICATION_VER_SUB 7 -/** PAL SPECIFICATION sub version */ -#define VL53L1_SPECIFICATION_VER_REVISION 1440 - -/** VL53L1 IMPLEMENTATION major version */ -#define VL53L1_IMPLEMENTATION_VER_MAJOR 4 -/** VL53L1 IMPLEMENTATION minor version */ -#define VL53L1_IMPLEMENTATION_VER_MINOR 1 -/** VL53L1 IMPLEMENTATION sub version */ -#define VL53L1_IMPLEMENTATION_VER_SUB 0 -/** VL53L1 IMPLEMENTATION sub version */ -#define VL53L1_IMPLEMENTATION_VER_REVISION 1249 - - -/**************************************** - * PRIVATE define do not edit - ****************************************/ - -/** @brief Defines the parameters of the Get Version Functions - */ -typedef struct { - uint32_t revision; /*!< revision number */ - uint8_t major; /*!< major number */ - uint8_t minor; /*!< minor number */ - uint8_t build; /*!< build number */ -} VL53L1_Version_t; - - -#define VL53L1_DEVINFO_STRLEN 32 - -/** @brief Defines the parameters of the Get Device Info Functions - */ -typedef struct { - char Name[VL53L1_DEVINFO_STRLEN]; - /*!< Name of the Device e.g. Left_Distance */ - char Type[VL53L1_DEVINFO_STRLEN]; - /*!< Type of the Device e.g VL53L1 */ - char ProductId[VL53L1_DEVINFO_STRLEN]; - /*!< Product Identifier String - * @warning Not yet implemented - */ - uint8_t ProductType; - /*!< Product Type, VL53L1 = 1, VL53L1 = 2*/ - uint8_t ProductRevisionMajor; - /*!< Product revision major */ - uint8_t ProductRevisionMinor; - /*!< Product revision minor */ -} VL53L1_DeviceInfo_t; - - - -/** @defgroup VL53L1_define_PresetModes_group Defines Preset modes - * Defines all possible preset modes for the device - * @{ - */ -typedef uint8_t VL53L1_PresetModes; - -#define VL53L1_PRESETMODE_RANGING ((VL53L1_PresetModes) 1) -#define VL53L1_PRESETMODE_MULTIZONES_SCANNING ((VL53L1_PresetModes) 2) -#define VL53L1_PRESETMODE_AUTONOMOUS ((VL53L1_PresetModes) 3) -#define VL53L1_PRESETMODE_LITE_RANGING ((VL53L1_PresetModes) 4) -#define VL53L1_PRESETMODE_OLT ((VL53L1_PresetModes) 7) - - /* ... Modes to be added depending on device */ -/** @} VL53L1_define_PresetModes_group */ - - -/** @defgroup VL53L1_define_DistanceModes_group Defines Distance modes - * Defines all possible Distance modes for the device - * @{ - */ -typedef uint8_t VL53L1_DistanceModes; - -#define VL53L1_DISTANCEMODE_SHORT ((VL53L1_DistanceModes) 1) -#define VL53L1_DISTANCEMODE_MEDIUM ((VL53L1_DistanceModes) 2) -#define VL53L1_DISTANCEMODE_LONG ((VL53L1_DistanceModes) 3) -#define VL53L1_DISTANCEMODE_AUTO_LITE ((VL53L1_DistanceModes) 4) -#define VL53L1_DISTANCEMODE_AUTO ((VL53L1_DistanceModes) 5) - - /* ... Modes to be added depending on device */ -/** @} VL53L1_define_DistanceModes_group */ - -/** @defgroup VL53L1_define_OutputModes_group Defines Output modes - * Defines all possible Output modes for the device - * @{ - */ -typedef uint8_t VL53L1_OutputModes; - -#define VL53L1_OUTPUTMODE_NEAREST ((VL53L1_OutputModes) 1) -#define VL53L1_OUTPUTMODE_STRONGEST ((VL53L1_OutputModes) 2) - -/** @} VL53L1_define_OutputModes_group */ - -/** @defgroup VL53L1_define_OffsetCalibrationModes_group Defines Offset Calibration modes -* Defines all possible Offset Calibration modes for the device -* @{ -*/ -typedef uint8_t VL53L1_OffsetCalibrationModes; - -#define VL53L1_OFFSETCALIBRATIONMODE_STANDARD \ - ((VL53L1_OffsetCalibrationModes) 1) -#define VL53L1_OFFSETCALIBRATIONMODE_PRERANGE_ONLY \ - ((VL53L1_OffsetCalibrationModes) 2) -#define VL53L1_OFFSETCALIBRATIONMODE_MULTI_ZONE \ - ((VL53L1_OffsetCalibrationModes) 3) - -/** @} VL53L1_define_OffsetCalibrationModes_group */ - -/** @defgroup VL53L1_define_DeviceDmaxModes_group Defines Dmax source modes -* Defines all possible sources for Dmax calibration for the device -* @{ -*/ -typedef uint8_t VL53L1_DeviceDmaxModes; - -#define DMAXMODE_FMT_CAL_DATA ((VL53L1_DeviceDmaxModes) 1) -#define DMAXMODE_CUSTCAL_DATA ((VL53L1_DeviceDmaxModes) 2) -#define DMAXMODE_PER_ZONE_CAL_DATA ((VL53L1_DeviceDmaxModes) 3) - -/** @} VL53L1_define_DeviceDmaxModes_group */ - -/** @defgroup VL53L1_define_OffsetCalibrationModesBD_group - * Device Offset Correction Mode - * - * @brief Defines all possible offset correction modes for the device - * @{ - */ -typedef uint8_t VL53L1_OffsetCorrectionModes; - -#define VL53L1_OFFSETCORRECTIONMODE_STANDARD ((VL53L1_OffsetCorrectionMode) 1) -#define VL53L1_OFFSETCORRECTIONMODE_PERZONE ((VL53L1_OffsetCorrectionMode) 2) - -/** @} VL53L1_define_OffsetCalibrationModesBD_group */ - - -/** @defgroup VL53L1_define_RoiStatus_group Defines Roi Status - * Defines the read status mode - * @{ - */ -typedef uint8_t VL53L1_RoiStatus; - -#define VL53L1_ROISTATUS_NOT_VALID ((VL53L1_RoiStatus) 0) -#define VL53L1_ROISTATUS_VALID_NOT_LAST ((VL53L1_RoiStatus) 1) -#define VL53L1_ROISTATUS_VALID_LAST ((VL53L1_RoiStatus) 2) -/** @} VL53L1_define_RoiStatus_group */ - - -/** @defgroup VL53L1_CheckEnable_group Check Enable list - * @brief Check Enable code - * - * Define used to specify the LimitCheckId. - * Use @a VL53L1_GetLimitCheckInfo() to get the string. - * @{ - */ - -#define VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE 0 -#define VL53L1_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE 1 - -#define VL53L1_CHECKENABLE_NUMBER_OF_CHECKS 2 - -/** @} end of VL53L1_CheckEnable_group */ - - -/** @defgroup VL53L1_define_InterruptPolarity_group Defines the Polarity - * of the Interrupt - * Defines the Polarity of the Interrupt - * @{ - */ -typedef uint8_t VL53L1_InterruptPolarity; - -#define VL53L1_INTERRUPTPOLARITY_LOW ((VL53L1_InterruptPolarity) 0) -/*!< Set active low polarity best setup for falling edge. */ -#define VL53L1_INTERRUPTPOLARITY_HIGH ((VL53L1_InterruptPolarity) 1) -/*!< Set active high polarity best setup for rising edge. */ - -/** @} VL53L1_define_InterruptPolarity_group */ - -/** @defgroup VL53L1_ThresholdMode_gropup Detection Functionality - * @brief Defines the different functionalities for the detection feature - * @{ - */ -typedef uint8_t VL53L1_ThresholdMode; - -#define VL53L1_THRESHOLD_CROSSED_LOW \ - ((VL53L1_ThresholdMode) 0) - /*!< Trigger interrupt if value < thresh_low */ -#define VL53L1_THRESHOLD_CROSSED_HIGH \ - ((VL53L1_ThresholdMode) 1) - /*!< Trigger interrupt if value > thresh_high */ -#define VL53L1_THRESHOLD_OUT_OF_WINDOW \ - ((VL53L1_ThresholdMode) 2) - /*!< Trigger interrupt if value < thresh_low OR value > thresh_high */ -#define VL53L1_THRESHOLD_IN_WINDOW \ - ((VL53L1_ThresholdMode) 3) - /*!< Trigger interrupt if value > thresh_low AND value < thresh_high */ - -/** @} end of VL53L1_ThresholdMode_gropup */ - -/** @brief Defines parameters for Distance detection Thresholds configuration - */ -typedef struct { - VL53L1_ThresholdMode CrossMode; /*!< See #VL53L1_GpioThreshold */ - uint16_t High; /*!< Distance threshold high limit in mm */ - uint16_t Low; /*!< Distance threshold low limit in mm */ -} VL53L1_DistanceThreshold_t; - -/** @brief Defines parameters for Signal rate detection Thresholds configuration - */ -typedef struct { - VL53L1_ThresholdMode CrossMode; /*!< See #VL53L1_GpioThreshold */ - FixPoint1616_t High; /*!< Signal rate threshold high limit */ - FixPoint1616_t Low; /*!< Signal rate threshold low limit */ -} VL53L1_RateThreshold_t; - -/** @defgroup VL53L1_DetectionMode_group Gpio Functionality - * @brief Defines conditions leading to device's IT on GPIO - * @{ - */ -typedef uint8_t VL53L1_DetectionMode; - -#define VL53L1_DETECTION_NORMAL_RUN \ - ((VL53L1_DetectionMode) 0) - /*!< Trigger interrupt on new measurement regardless of threshold - * just like after a VL53L1_SetPresetMode() call - */ -#define VL53L1_DETECTION_DISTANCE_ONLY \ - ((VL53L1_DetectionMode) 1) - /*!< Trigger interrupt if "threshold event" occurs on distance */ -#define VL53L1_DETECTION_RATE_ONLY \ - ((VL53L1_DetectionMode) 2) - /*!< Trigger interrupt if "threshold event" occurs on signal rate */ -#define VL53L1_DETECTION_DISTANCE_AND_RATE \ - ((VL53L1_DetectionMode) 3) - /*!< Trigger interrupt if "threshold event" occurs on distance AND rate - */ -#define VL53L1_DETECTION_DISTANCE_OR_RATE \ - ((VL53L1_DetectionMode) 4) - /*!< Trigger interrupt if "threshold event" occurs on distance OR rate - */ - -/** @} end of VL53L1_DetectionMode_group */ - -/** @brief Defines parameters for User/object Detection configuration - */ -typedef struct { - VL53L1_DetectionMode DetectionMode; - /*!< See #VL53L1_GPIODetectionMode*/ - uint8_t IntrNoTarget; /*!< 1 to trigger IT in case of no target found */ - VL53L1_DistanceThreshold_t Distance; /*!< limits in mm */ - VL53L1_RateThreshold_t Rate;/*!< limits in FixPoint1616_t */ -} VL53L1_DetectionConfig_t; - - -/** @brief Defines all parameters for the device - */ -typedef struct { - VL53L1_PresetModes PresetMode; - /*!< Defines the operating mode to be used for the next measure */ - VL53L1_OutputModes OutputMode; - /*!< Defines the Output mode to be used for the next measure */ - VL53L1_DistanceModes DistanceMode; - /*!< Defines the operating mode to be used for the next measure */ - VL53L1_DistanceModes InternalDistanceMode; - /*!< Defines the internal operating mode to be used for the next - * measure - */ - VL53L1_DistanceModes NewDistanceMode; - /*!< Defines the new operating mode to be programmed for the next - * measure - */ - uint32_t MeasurementTimingBudgetMicroSeconds; - /*!< Defines the allowed total time for a single measurement */ - uint8_t LimitChecksEnable[VL53L1_CHECKENABLE_NUMBER_OF_CHECKS]; - /*!< This Array store all the Limit Check enable for this device. */ - uint8_t LimitChecksStatus[VL53L1_CHECKENABLE_NUMBER_OF_CHECKS]; - /*!< This Array stores all the Status of the check linked to last - * measurement. - */ - FixPoint1616_t LimitChecksValue[VL53L1_CHECKENABLE_NUMBER_OF_CHECKS]; - /*!< This Array stores all the Limit Check value for this device */ - FixPoint1616_t LimitChecksCurrent[VL53L1_CHECKENABLE_NUMBER_OF_CHECKS]; - /*!< This Array stores all the Limit Check current value from latest - * ranging - */ - uint8_t AmbientDmaxIndex; - /*!< This value stores the index of the ambient Dmax to take from - * ambient_dmax_mm[] table to populate ranging results - */ -} VL53L1_DeviceParameters_t; - - -/** @defgroup VL53L1_define_State_group Defines the current status of the device - * Defines the current status of the device - * @{ - */ - -typedef uint8_t VL53L1_State; - -#define VL53L1_STATE_POWERDOWN ((VL53L1_State) 0) - /*!< Device is in HW reset */ -#define VL53L1_STATE_WAIT_STATICINIT ((VL53L1_State) 1) - /*!< Device is initialized and wait for static initialization */ -#define VL53L1_STATE_STANDBY ((VL53L1_State) 2) - /*!< Device is in Low power Standby mode */ -#define VL53L1_STATE_IDLE ((VL53L1_State) 3) - /*!< Device has been initialized and ready to do measurements */ -#define VL53L1_STATE_RUNNING ((VL53L1_State) 4) - /*!< Device is performing measurement */ -#define VL53L1_STATE_RESET ((VL53L1_State) 5) - /*!< Soft reset has been run on Device */ -#define VL53L1_STATE_UNKNOWN ((VL53L1_State) 98) - /*!< Device is in unknown state and need to be rebooted */ -#define VL53L1_STATE_ERROR ((VL53L1_State) 99) - /*!< Device is in error state and need to be rebooted */ - -/** @} VL53L1_define_State_group */ - - -/** - * @struct VL53L1_SingleRangingData_t - * @brief Single Range measurement data. - */ -typedef struct { - uint32_t TimeStamp; - /*!< 32-bit time stamp. - * @warning Not yet implemented - */ - - uint8_t StreamCount; /*!< 8-bit Stream Count. */ - - uint8_t RangeQualityLevel; - /*!< indicate a quality level in percentage from 0 to 100 - * @warning Not yet implemented - */ - - int16_t DmaxMilliMeter; - /*!< range Dmax distance in millimeter. - */ - - int16_t RangeMaxMilliMeter; - /*!< Tells what is the maximum detection distance of the object - * in current setup and environment conditions (Filled when - * applicable) - */ - - int16_t RangeMinMilliMeter; - /*!< Tells what is the minimum detection distance of the object - * in current setup and environment conditions (Filled when - * applicable) - */ - - FixPoint1616_t SignalRateRtnMegaCps; - /*!< Return signal rate (MCPS)\n these is a 16.16 fix point - * value, which is effectively a measure of target - * reflectance. - */ - - FixPoint1616_t AmbientRateRtnMegaCps; - /*!< Return ambient rate (MCPS)\n these is a 16.16 fix point - * value, which is effectively a measure of the ambien - * t light. - */ - - uint16_t EffectiveSpadRtnCount; - /*!< Return the effective SPAD count for the return signal. - * To obtain Real value it should be divided by 256 - */ - - FixPoint1616_t SigmaMilliMeter; - /*!< Return the Sigma value in millimeter */ - - int16_t RangeMilliMeter; - /*!< range distance in millimeter. This should be between - * RangeMinMilliMeter and RangeMaxMilliMeter */ - - uint8_t RangeFractionalPart; - /*!< Fractional part of range distance. Final value is a - * RangeMilliMeter + RangeFractionalPart/256. - * @warning Not yet implemented - */ - - uint8_t RangeStatus; - /*!< Range Status for the current measurement. This is device - * dependent. Value = 0 means value is valid. - */ -} VL53L1_RangingMeasurementData_t; - -/** - * @struct VL53L1_ROIRangeResults_t - * @brief Structure for storing the set of range results for a single ROI - * - */ -typedef struct { - - uint8_t RoiNumber; - /*!< Denotes on which ROI the range data is related to. */ - uint8_t NumberOfObjectsFound; - /*!< Indicate the number of objects found in the current ROI. - * This is used to know how many ranging data should be get. - * NumberOfObjectsFound is in the range 0 to - * VL53L1_MAX_RANGE_RESULTS. - */ - VL53L1_RoiStatus RoiStatus; - /*!< Indicate if the data read is valid or not or if this is - * the last valid data in the ROI. - */ - VL53L1_RangingMeasurementData_t RangeData[VL53L1_MAX_RANGE_RESULTS]; - /*!< Range data each target distance */ - -} VL53L1_MultiRangingData_t; - - -/** @brief Defines User Zone(ROI) parameters - * - */ -typedef struct { - - uint8_t TopLeftX; /*!< Top Left x coordinate: 0-15 range */ - uint8_t TopLeftY; /*!< Top Left y coordinate: 0-15 range */ - uint8_t BotRightX; /*!< Bot Right x coordinate: 0-15 range */ - uint8_t BotRightY; /*!< Bot Right x coordinate:0-15 range */ - -} VL53L1_UserRoi_t; - - -/** @brief Defines ROI configuration parameters - * - * Support up a max of 16 zones, Each Zone has the same size - * - */ -typedef struct { - - uint8_t NumberOfRoi; /*!< Number of Rois defined*/ - - VL53L1_UserRoi_t UserRois[VL53L1_MAX_USER_ZONES]; - /*!< List of Rois */ - -} VL53L1_RoiConfig_t; - - - -/** - * @struct VL53L1_CalibrationData_t - * @brief Structure for storing the Calibration Data - * - */ -typedef VL53L1_calibration_data_t VL53L1_CalibrationData_t; - - -/** @defgroup VL53L1_define_SequenceStepId_group Defines the SequenceStep - * Defines the the sequence steps performed during ranging.. - * @{ - */ -typedef uint8_t VL53L1_SequenceStepId; - -#define VL53L1_SEQUENCESTEP_VHV ((VL53L1_SequenceStepId) 0) -/*!>2)&0xFFFF) -#define VL53L1_FIXPOINT72TOFIXPOINT1616(Value) \ - (FixPoint1616_t)(Value<<2) - -#define VL53L1_FIXPOINT1616TOFIXPOINT97(Value) \ - (uint16_t)((Value>>9)&0xFFFF) -#define VL53L1_FIXPOINT97TOFIXPOINT1616(Value) \ - (FixPoint1616_t)(Value<<9) - -#define VL53L1_FIXPOINT1616TOFIXPOINT88(Value) \ - (uint16_t)((Value>>8)&0xFFFF) -#define VL53L1_FIXPOINT88TOFIXPOINT1616(Value) \ - (FixPoint1616_t)(Value<<8) - -#define VL53L1_FIXPOINT1616TOFIXPOINT412(Value) \ - (uint16_t)((Value>>4)&0xFFFF) -#define VL53L1_FIXPOINT412TOFIXPOINT1616(Value) \ - (FixPoint1616_t)(Value<<4) - -#define VL53L1_FIXPOINT1616TOFIXPOINT313(Value) \ - (uint16_t)((Value>>3)&0xFFFF) -#define VL53L1_FIXPOINT313TOFIXPOINT1616(Value) \ - (FixPoint1616_t)(Value<<3) - -#define VL53L1_FIXPOINT1616TOFIXPOINT08(Value) \ - (uint8_t)((Value>>8)&0x00FF) -#define VL53L1_FIXPOINT08TOFIXPOINT1616(Value) \ - (FixPoint1616_t)(Value<<8) - -#define VL53L1_FIXPOINT1616TOFIXPOINT53(Value) \ - (uint8_t)((Value>>13)&0x00FF) -#define VL53L1_FIXPOINT53TOFIXPOINT1616(Value) \ - (FixPoint1616_t)(Value<<13) - -#define VL53L1_FIXPOINT1616TOFIXPOINT102(Value) \ - (uint16_t)((Value>>14)&0x0FFF) -#define VL53L1_FIXPOINT102TOFIXPOINT1616(Value) \ - (FixPoint1616_t)(Value<<14) - -#define VL53L1_FIXPOINT1616TOFIXPOINT142(Value) \ - (uint16_t)((Value>>14)&0xFFFF) -#define VL53L1_FIXPOINT142TOFIXPOINT1616(Value) \ - (FixPoint1616_t)(Value<<14) - -#define VL53L1_FIXPOINT1616TOFIXPOINT160(Value) \ - (uint16_t)((Value>>16)&0xFFFF) -#define VL53L1_FIXPOINT160TOFIXPOINT1616(Value) \ - (FixPoint1616_t)(Value<<16) - -#define VL53L1_MAKEUINT16(lsb, msb) (uint16_t)((((uint16_t)msb)<<8) + \ - (uint16_t)lsb) - -#ifndef SUPPRESS_UNUSED_WARNING -#define SUPPRESS_UNUSED_WARNING(x) ((void) (x)) -#endif - -/** @} VL53L1_define_GeneralMacro_group */ - - -/** @} VL53L1_globaldefine_group */ - - - -#ifdef __cplusplus -} -#endif - - -#endif /* _VL53L1_DEF_H_ */ diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_dmax_structs.h b/drivers/input/misc/vl53L1/inc/vl53l1_dmax_structs.h deleted file mode 100644 index 5b77f4517feb..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_dmax_structs.h +++ /dev/null @@ -1,205 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_DMAX_STRUCTS_H_ -#define _VL53L1_DMAX_STRUCTS_H_ - -#include "vl53l1_types.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#define VL53L1_MAX_AMBIENT_DMAX_VALUES 5 - - - - - - - - - - - - -typedef struct { - - - - - uint16_t ref__actual_effective_spads; - - - uint16_t ref__peak_signal_count_rate_mcps; - - - uint16_t ref__distance_mm; - - - uint16_t ref_reflectance_pc; - - - - - - - uint16_t coverglass_transmission; - - - -} VL53L1_dmax_calibration_data_t ; - - - - - - - - - - -typedef struct { - - - - - uint8_t signal_thresh_sigma; - - - uint8_t ambient_thresh_sigma; - - - int32_t min_ambient_thresh_events; - - - - uint16_t target_reflectance_for_dmax_calc[VL53L1_MAX_AMBIENT_DMAX_VALUES]; - - - uint8_t estimated_spad_yield; - - - - - - - uint16_t dss_config__target_total_rate_mcps; - - - uint8_t dss_config__aperture_attenuation; - - - -} VL53L1_hist_gen3_dmax_config_t; - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_error_codes.h b/drivers/input/misc/vl53L1/inc/vl53l1_error_codes.h deleted file mode 100644 index dd197e9f0873..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_error_codes.h +++ /dev/null @@ -1,323 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_ERROR_CODES_H_ -#define _VL53L1_ERROR_CODES_H_ - -#include "vl53l1_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - - -typedef int8_t VL53L1_Error; - -#define VL53L1_ERROR_NONE ((VL53L1_Error) 0) -#define VL53L1_ERROR_CALIBRATION_WARNING ((VL53L1_Error) - 1) - - - - - -#define VL53L1_ERROR_MIN_CLIPPED ((VL53L1_Error) - 2) - - - -#define VL53L1_ERROR_UNDEFINED ((VL53L1_Error) - 3) - - -#define VL53L1_ERROR_INVALID_PARAMS ((VL53L1_Error) - 4) - - -#define VL53L1_ERROR_NOT_SUPPORTED ((VL53L1_Error) - 5) - - -#define VL53L1_ERROR_RANGE_ERROR ((VL53L1_Error) - 6) - - -#define VL53L1_ERROR_TIME_OUT ((VL53L1_Error) - 7) - - -#define VL53L1_ERROR_MODE_NOT_SUPPORTED ((VL53L1_Error) - 8) - - -#define VL53L1_ERROR_BUFFER_TOO_SMALL ((VL53L1_Error) - 9) - - -#define VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL ((VL53L1_Error) - 10) - - -#define VL53L1_ERROR_GPIO_NOT_EXISTING ((VL53L1_Error) - 11) - - -#define VL53L1_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED ((VL53L1_Error) - 12) - - -#define VL53L1_ERROR_CONTROL_INTERFACE ((VL53L1_Error) - 13) - - -#define VL53L1_ERROR_INVALID_COMMAND ((VL53L1_Error) - 14) - - - -#define VL53L1_ERROR_DIVISION_BY_ZERO ((VL53L1_Error) - 15) - - -#define VL53L1_ERROR_REF_SPAD_INIT ((VL53L1_Error) - 16) - - -#define VL53L1_ERROR_GPH_SYNC_CHECK_FAIL ((VL53L1_Error) - 17) - - -#define VL53L1_ERROR_STREAM_COUNT_CHECK_FAIL ((VL53L1_Error) - 18) - - -#define VL53L1_ERROR_GPH_ID_CHECK_FAIL ((VL53L1_Error) - 19) - - -#define VL53L1_ERROR_ZONE_STREAM_COUNT_CHECK_FAIL ((VL53L1_Error) - 20) - - -#define VL53L1_ERROR_ZONE_GPH_ID_CHECK_FAIL ((VL53L1_Error) - 21) - - - -#define VL53L1_ERROR_XTALK_EXTRACTION_NO_SAMPLE_FAIL ((VL53L1_Error) - 22) - - - - - -#define VL53L1_ERROR_XTALK_EXTRACTION_SIGMA_LIMIT_FAIL ((VL53L1_Error) - 23) - - - - - - - - -#define VL53L1_ERROR_OFFSET_CAL_NO_SAMPLE_FAIL ((VL53L1_Error) - 24) - - - -#define VL53L1_ERROR_OFFSET_CAL_NO_SPADS_ENABLED_FAIL ((VL53L1_Error) - 25) - - - - -#define VL53L1_ERROR_ZONE_CAL_NO_SAMPLE_FAIL ((VL53L1_Error) - 26) - - - - - -#define VL53L1_WARNING_REF_SPAD_CHAR_NOT_ENOUGH_SPADS ((VL53L1_Error) - 27) - - -#define VL53L1_WARNING_REF_SPAD_CHAR_RATE_TOO_HIGH ((VL53L1_Error) - 28) - - - - -#define VL53L1_WARNING_REF_SPAD_CHAR_RATE_TOO_LOW ((VL53L1_Error) - 29) - - - - - - -#define VL53L1_WARNING_OFFSET_CAL_MISSING_SAMPLES ((VL53L1_Error) - 30) - - - -#define VL53L1_WARNING_OFFSET_CAL_SIGMA_TOO_HIGH ((VL53L1_Error) - 31) - - - - -#define VL53L1_WARNING_OFFSET_CAL_RATE_TOO_HIGH ((VL53L1_Error) - 32) - - - - -#define VL53L1_WARNING_OFFSET_CAL_SPAD_COUNT_TOO_LOW ((VL53L1_Error) - 33) - - - - - - -#define VL53L1_WARNING_ZONE_CAL_MISSING_SAMPLES ((VL53L1_Error) - 34) - - - -#define VL53L1_WARNING_ZONE_CAL_SIGMA_TOO_HIGH ((VL53L1_Error) - 35) - - - - -#define VL53L1_WARNING_ZONE_CAL_RATE_TOO_HIGH ((VL53L1_Error) - 36) - - - - - - -#define VL53L1_WARNING_XTALK_MISSING_SAMPLES ((VL53L1_Error) - 37) - - - - - - - - -#define VL53L1_WARNING_XTALK_NO_SAMPLES_FOR_GRADIENT ((VL53L1_Error) - 38) - - - - - - - - - -#define VL53L1_WARNING_XTALK_SIGMA_LIMIT_FOR_GRADIENT ((VL53L1_Error) - 39) - - - - - - - - - - -#define VL53L1_ERROR_NOT_IMPLEMENTED ((VL53L1_Error) - 40) - - - -#define VL53L1_ERROR_PLATFORM_SPECIFIC_START ((VL53L1_Error) - 60) - - - - - - -#ifdef __cplusplus -} -#endif - - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_error_exceptions.h b/drivers/input/misc/vl53L1/inc/vl53l1_error_exceptions.h deleted file mode 100644 index 4fbd38b5d9a6..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_error_exceptions.h +++ /dev/null @@ -1,125 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_ERROR_EXCEPTIONS_H_ -#define _VL53L1_ERROR_EXCEPTIONS_H_ - -#define IGNORE_DIVISION_BY_ZERO 0 - -#define IGNORE_XTALK_EXTRACTION_NO_SAMPLE_FAIL 0 -#define IGNORE_XTALK_EXTRACTION_SIGMA_LIMIT_FAIL 0 -#define IGNORE_XTALK_EXTRACTION_NO_SAMPLE_FOR_GRADIENT_WARN 0 -#define IGNORE_XTALK_EXTRACTION_SIGMA_LIMIT_FOR_GRADIENT_WARN 0 -#define IGNORE_XTALK_EXTRACTION_MISSING_SAMPLES_WARN 0 - -#define IGNORE_REF_SPAD_CHAR_NOT_ENOUGH_SPADS 0 -#define IGNORE_REF_SPAD_CHAR_RATE_TOO_HIGH 0 -#define IGNORE_REF_SPAD_CHAR_RATE_TOO_LOW 0 - -#define IGNORE_OFFSET_CAL_MISSING_SAMPLES 0 -#define IGNORE_OFFSET_CAL_SIGMA_TOO_HIGH 0 -#define IGNORE_OFFSET_CAL_RATE_TOO_HIGH 0 -#define IGNORE_OFFSET_CAL_SPAD_COUNT_TOO_LOW 0 - -#define IGNORE_ZONE_CAL_MISSING_SAMPLES 0 -#define IGNORE_ZONE_CAL_SIGMA_TOO_HIGH 0 -#define IGNORE_ZONE_CAL_RATE_TOO_HIGH 0 - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_error_strings.h b/drivers/input/misc/vl53L1/inc/vl53l1_error_strings.h deleted file mode 100644 index 5fd63d1f6e28..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_error_strings.h +++ /dev/null @@ -1,243 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef VL53L1_ERROR_STRINGS_H_ -#define VL53L1_ERROR_STRINGS_H_ - -#include "vl53l1_error_codes.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_pal_error_string( - VL53L1_Error PalErrorCode, - char *pPalErrorString); - - -#ifndef VL53L1_USE_EMPTY_STRING - - - - #define VL53L1_STRING_ERROR_NONE \ - "No Error" - #define VL53L1_STRING_ERROR_CALIBRATION_WARNING \ - "Calibration Warning Error" - #define VL53L1_STRING_ERROR_MIN_CLIPPED \ - "Min clipped error" - #define VL53L1_STRING_ERROR_UNDEFINED \ - "Undefined error" - #define VL53L1_STRING_ERROR_INVALID_PARAMS \ - "Invalid parameters error" - #define VL53L1_STRING_ERROR_NOT_SUPPORTED \ - "Not supported error" - #define VL53L1_STRING_ERROR_RANGE_ERROR \ - "Range error" - #define VL53L1_STRING_ERROR_TIME_OUT \ - "Time out error" - #define VL53L1_STRING_ERROR_MODE_NOT_SUPPORTED \ - "Mode not supported error" - #define VL53L1_STRING_ERROR_BUFFER_TOO_SMALL \ - "Buffer too small" - #define VL53L1_STRING_ERROR_COMMS_BUFFER_TOO_SMALL \ - "Comms Buffer too small" - #define VL53L1_STRING_ERROR_GPIO_NOT_EXISTING \ - "GPIO not existing" - #define VL53L1_STRING_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED \ - "GPIO funct not supported" - #define VL53L1_STRING_ERROR_CONTROL_INTERFACE \ - "Control Interface Error" - #define VL53L1_STRING_ERROR_INVALID_COMMAND \ - "Invalid Command Error" - #define VL53L1_STRING_ERROR_DIVISION_BY_ZERO \ - "Division by zero Error" - #define VL53L1_STRING_ERROR_REF_SPAD_INIT \ - "Reference Spad Init Error" - #define VL53L1_STRING_ERROR_GPH_SYNC_CHECK_FAIL \ - "GPH Sync Check Fail - API out of sync" - #define VL53L1_STRING_ERROR_STREAM_COUNT_CHECK_FAIL \ - "Stream Count Check Fail - API out of sync" - #define VL53L1_STRING_ERROR_GPH_ID_CHECK_FAIL \ - "GPH ID Check Fail - API out of sync" - #define VL53L1_STRING_ERROR_ZONE_STREAM_COUNT_CHECK_FAIL \ - "Zone Stream Count Check Fail - API out of sync" - #define VL53L1_STRING_ERROR_ZONE_GPH_ID_CHECK_FAIL \ - "Zone GPH ID Check Fail - API out of sync" - - #define VL53L1_STRING_ERROR_XTALK_EXTRACTION_NO_SAMPLES_FAIL \ - "No Xtalk using full array - Xtalk Extract Fail" - #define VL53L1_STRING_ERROR_XTALK_EXTRACTION_SIGMA_LIMIT_FAIL \ - "Xtalk does not meet required VL53L1_PRM_00012 limit - Xtalk Extract Fail" - - #define VL53L1_STRING_ERROR_OFFSET_CAL_NO_SAMPLE_FAIL \ - "Offset Cal - one of more stages with no valid samples - fatal" - #define VL53L1_STRING_ERROR_OFFSET_CAL_NO_SPADS_ENABLED_FAIL \ - "Offset Cal - one of more stages with no SPADS enables - fatal" - #define VL53L1_STRING_ERROR_ZONE_CAL_NO_SAMPLE_FAIL \ - "Zone Cal - one of more zones with no valid samples - fatal" - - #define VL53L1_STRING_WARNING_REF_SPAD_CHAR_NOT_ENOUGH_SPADS \ - "Ref SPAD Char - Not Enough Good SPADs" - #define VL53L1_STRING_WARNING_REF_SPAD_CHAR_RATE_TOO_HIGH \ - "Ref SPAD Char - Final Ref Rate too high" - #define VL53L1_STRING_WARNING_REF_SPAD_CHAR_RATE_TOO_LOW \ - "Ref SPAD Char - Final Ref Rate too low" - - #define VL53L1_STRING_WARNING_OFFSET_CAL_MISSING_SAMPLES \ - "Offset Cal - Less than the requested number of valid samples" - #define VL53L1_STRING_WARNING_OFFSET_CAL_SIGMA_TOO_HIGH \ - "Offset Cal - Sigma estimate value too high - offset not stable" - #define VL53L1_STRING_WARNING_OFFSET_CAL_RATE_TOO_HIGH \ - "Offset Cal - Rate too high - in pile up" - #define VL53L1_STRING_WARNING_OFFSET_CAL_SPAD_COUNT_TOO_LOW \ - "Offset Cal - Insufficient SPADs - offset may not be stable" - - #define VL53L1_STRING_WARNING_ZONE_CAL_MISSING_SAMPLES \ - "Zone Cal - One or more zone with less than requested valid samples" - #define VL53L1_STRING_WARNING_ZONE_CAL_SIGMA_TOO_HIGH \ - "Zone Cal - One of more zones the VL53L1_PRM_00012 estimate too high" - #define VL53L1_STRING_WARNING_ZONE_CAL_RATE_TOO_HIGH \ - "Zone Cal - One of more zones with rate too high - in pile up" - - #define VL53L1_STRING_WARNING_XTALK_NO_SAMPLES_FOR_GRADIENT \ - "Xtalk - Gradient sample num = 0" - #define VL53L1_STRING_WARNING_XTALK_SIGMA_LIMIT_FOR_GRADIENT \ - "Xtalk - Gradient Sigma > Limit" - #define VL53L1_STRING_WARNING_XTALK_MISSING_SAMPLES \ - "Xtalk - Some missing and invalid samples" - - #define VL53L1_STRING_ERROR_DEVICE_FIRMWARE_TOO_OLD \ - "Device Firmware too old" - #define VL53L1_STRING_ERROR_DEVICE_FIRMWARE_TOO_NEW \ - "Device Firmware too new" - #define VL53L1_STRING_ERROR_UNIT_TEST_FAIL \ - "Unit Test Fail" - #define VL53L1_STRING_ERROR_FILE_READ_FAIL \ - "File Read Fail" - #define VL53L1_STRING_ERROR_FILE_WRITE_FAIL \ - "File Write Fail" - - #define VL53L1_STRING_ERROR_NOT_IMPLEMENTED \ - "Not implemented error" - #define VL53L1_STRING_UNKNOW_ERROR_CODE \ - "Unknown Error Code" - -#endif - - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_fpga_core.h b/drivers/input/misc/vl53L1/inc/vl53l1_fpga_core.h deleted file mode 100644 index e5d13a65bb9c..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_fpga_core.h +++ /dev/null @@ -1,134 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_FPGA_CORE_H_ -#define _VL53L1_FPGA_CORE_H_ - -#include "vl53l1_platform.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_is_firmware_ready_fpga( - VL53L1_DEV Dev, - uint8_t *pready); - - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_hist_char.h b/drivers/input/misc/vl53L1/inc/vl53l1_hist_char.h deleted file mode 100644 index 46ac93f42250..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_hist_char.h +++ /dev/null @@ -1,175 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_HIST_CHAR_H_ -#define _VL53L1_HIST_CHAR_H_ - -#include "vl53l1_platform.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_calib_config( - VL53L1_DEV Dev, - uint8_t vcsel_delay__a0, - uint8_t calib_1, - uint8_t calib_2, - uint8_t calib_3, - uint8_t calib_2__a0, - uint8_t spad_readout); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_hist_calib_pulse_delay( - VL53L1_DEV Dev, - uint8_t calib_delay); - - - - - - - - - - - - -VL53L1_Error VL53L1_disable_calib_pulse_delay( - VL53L1_DEV Dev); - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_hist_map.h b/drivers/input/misc/vl53L1/inc/vl53l1_hist_map.h deleted file mode 100644 index 514bc2cdec51..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_hist_map.h +++ /dev/null @@ -1,154 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_HIST_MAP_H_ -#define _VL53L1_HIST_MAP_H_ - -#include "vl53l1_register_map.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - - - - -#define VL53L1_HISTOGRAM_CONFIG__OPCODE_SEQUENCE_0 \ - VL53L1_SIGMA_ESTIMATOR__EFFECTIVE_PULSE_WIDTH_NS - -#define VL53L1_HISTOGRAM_CONFIG__OPCODE_SEQUENCE_1 \ - VL53L1_SIGMA_ESTIMATOR__EFFECTIVE_AMBIENT_WIDTH_NS - -#define VL53L1_HISTOGRAM_CONFIG__OPCODE_SEQUENCE_2 \ - VL53L1_SIGMA_ESTIMATOR__SIGMA_REF_MM - -#define VL53L1_HISTOGRAM_CONFIG__AMB_THRESH_HIGH \ - VL53L1_ALGO__RANGE_IGNORE_THRESHOLD_MCPS - - - - - -#define VL53L1_RESULT__HISTOGRAM_BIN_0_2 0x008E -#define VL53L1_RESULT__HISTOGRAM_BIN_0_1 0x008F -#define VL53L1_RESULT__HISTOGRAM_BIN_0_0 0x0090 - -#define VL53L1_RESULT__HISTOGRAM_BIN_23_2 0x00D3 -#define VL53L1_RESULT__HISTOGRAM_BIN_23_1 0x00D4 -#define VL53L1_RESULT__HISTOGRAM_BIN_23_0 0x00D5 - -#define VL53L1_RESULT__HISTOGRAM_BIN_23_0_MSB 0x00D9 -#define VL53L1_RESULT__HISTOGRAM_BIN_23_0_LSB 0x00DA - - - - -#define VL53L1_HISTOGRAM_BIN_DATA_I2C_INDEX \ - VL53L1_RESULT__INTERRUPT_STATUS -#define VL53L1_HISTOGRAM_BIN_DATA_I2C_SIZE_BYTES \ - (VL53L1_RESULT__HISTOGRAM_BIN_23_0_LSB - VL53L1_RESULT__INTERRUPT_STATUS + 1) - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_hist_structs.h b/drivers/input/misc/vl53L1/inc/vl53l1_hist_structs.h deleted file mode 100644 index 6c7c6925f0ca..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_hist_structs.h +++ /dev/null @@ -1,477 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_HIST_STRUCTS_H_ -#define _VL53L1_HIST_STRUCTS_H_ - -#include "vl53l1_ll_device.h" -#include "vl53l1_dmax_structs.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define VL53L1_MAX_BIN_SEQUENCE_LENGTH 6 -#define VL53L1_MAX_BIN_SEQUENCE_CODE 15 -#define VL53L1_HISTOGRAM_BUFFER_SIZE 24 -#define VL53L1_XTALK_HISTO_BINS 12 - - - - - - - - -typedef struct { - - uint8_t histogram_config__spad_array_selection; - - uint8_t histogram_config__low_amb_even_bin_0_1; - uint8_t histogram_config__low_amb_even_bin_2_3; - uint8_t histogram_config__low_amb_even_bin_4_5; - - uint8_t histogram_config__low_amb_odd_bin_0_1; - uint8_t histogram_config__low_amb_odd_bin_2_3; - uint8_t histogram_config__low_amb_odd_bin_4_5; - - uint8_t histogram_config__mid_amb_even_bin_0_1; - uint8_t histogram_config__mid_amb_even_bin_2_3; - uint8_t histogram_config__mid_amb_even_bin_4_5; - - uint8_t histogram_config__mid_amb_odd_bin_0_1; - uint8_t histogram_config__mid_amb_odd_bin_2; - uint8_t histogram_config__mid_amb_odd_bin_3_4; - uint8_t histogram_config__mid_amb_odd_bin_5; - - uint8_t histogram_config__user_bin_offset; - - uint8_t histogram_config__high_amb_even_bin_0_1; - uint8_t histogram_config__high_amb_even_bin_2_3; - uint8_t histogram_config__high_amb_even_bin_4_5; - - uint8_t histogram_config__high_amb_odd_bin_0_1; - uint8_t histogram_config__high_amb_odd_bin_2_3; - uint8_t histogram_config__high_amb_odd_bin_4_5; - - uint16_t histogram_config__amb_thresh_low; - - - - uint16_t histogram_config__amb_thresh_high; - - - - -} VL53L1_histogram_config_t; - - - - - - - - - -typedef struct { - - VL53L1_HistAlgoSelect hist_algo_select; - - - - VL53L1_HistTargetOrder hist_target_order; - - - - - - uint8_t filter_woi0; - - - - uint8_t filter_woi1; - - - - - VL53L1_HistAmbEstMethod hist_amb_est_method; - - - uint8_t ambient_thresh_sigma0; - - - - uint8_t ambient_thresh_sigma1; - - - int32_t min_ambient_thresh_events; - - - uint16_t noise_threshold; - - - - int32_t signal_total_events_limit; - - - uint8_t sigma_estimator__sigma_ref_mm; - - - uint16_t sigma_thresh; - - - int16_t range_offset_mm; - - - uint16_t gain_factor; - - - - uint8_t valid_phase_low; - - - - uint8_t valid_phase_high; - - - - uint8_t algo__consistency_check__phase_tolerance; - - - - uint8_t algo__consistency_check__event_sigma; - - - - - uint8_t algo__crosstalk_compensation_enable; - - - uint16_t algo__crosstalk_compensation_plane_offset_kcps; - - - int16_t algo__crosstalk_compensation_x_plane_gradient_kcps; - - - int16_t algo__crosstalk_compensation_y_plane_gradient_kcps; - - - - int16_t algo__crosstalk_detect_min_valid_range_mm; - - - int16_t algo__crosstalk_detect_max_valid_range_mm; - - - uint16_t algo__crosstalk_detect_max_valid_rate_kcps; - - - - uint16_t algo__crosstalk_detect_max_sigma_mm; - - - - -} VL53L1_hist_post_process_config_t; - - - - - - - -typedef struct { - - - - VL53L1_DeviceState cfg_device_state; - - - VL53L1_DeviceState rd_device_state; - - - - uint8_t zone_id; - - - uint32_t time_stamp; - - - - uint8_t VL53L1_PRM_00015; - - - uint8_t VL53L1_PRM_00016; - - - uint8_t VL53L1_PRM_00017; - - - - uint8_t number_of_ambient_bins; - - - - uint8_t bin_seq[VL53L1_MAX_BIN_SEQUENCE_LENGTH]; - - - uint8_t bin_rep[VL53L1_MAX_BIN_SEQUENCE_LENGTH]; - - - - - int32_t bin_data[VL53L1_HISTOGRAM_BUFFER_SIZE]; - - - - uint8_t result__interrupt_status; - - - uint8_t result__range_status; - - - uint8_t result__report_status; - - - uint8_t result__stream_count; - - - uint16_t result__dss_actual_effective_spads; - - - - uint16_t phasecal_result__reference_phase; - - - uint8_t phasecal_result__vcsel_start; - - - uint8_t cal_config__vcsel_start; - - - uint16_t vcsel_width; - - - uint8_t VL53L1_PRM_00007; - - - uint16_t VL53L1_PRM_00018; - - - uint32_t total_periods_elapsed; - - - - uint32_t peak_duration_us; - - - uint32_t woi_duration_us; - - - - int32_t min_bin_value; - - - int32_t max_bin_value; - - - - uint16_t zero_distance_phase; - - - uint8_t number_of_ambient_samples; - - - int32_t ambient_events_sum; - - - int32_t VL53L1_PRM_00026; - - - - uint8_t roi_config__user_roi_centre_spad; - - - uint8_t roi_config__user_roi_requested_global_xy_size; - - - -} VL53L1_histogram_bin_data_t; - - - - - - - - -typedef struct { - - - - uint8_t zone_id; - - - uint32_t time_stamp; - - - - uint8_t VL53L1_PRM_00015; - - - uint8_t VL53L1_PRM_00016; - - - uint8_t VL53L1_PRM_00017; - - - uint32_t bin_data[VL53L1_XTALK_HISTO_BINS]; - - - - - uint16_t phasecal_result__reference_phase; - - - uint8_t phasecal_result__vcsel_start; - - - uint8_t cal_config__vcsel_start; - - - uint16_t vcsel_width; - - - uint16_t VL53L1_PRM_00018; - - - uint16_t zero_distance_phase; - - - -} VL53L1_xtalk_histogram_shape_t; - - - - - - - - -typedef struct { - - - - VL53L1_xtalk_histogram_shape_t xtalk_shape; - - - VL53L1_histogram_bin_data_t xtalk_hist_removed; - -} VL53L1_xtalk_histogram_data_t; - - - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_ll_def.h b/drivers/input/misc/vl53L1/inc/vl53l1_ll_def.h deleted file mode 100644 index 0b1c4275b3c4..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_ll_def.h +++ /dev/null @@ -1,1625 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_LL_DEF_H_ -#define _VL53L1_LL_DEF_H_ - -#include "vl53l1_error_codes.h" -#include "vl53l1_register_structs.h" -#include "vl53l1_platform_user_config.h" -#include "vl53l1_platform_user_defines.h" -#include "vl53l1_hist_structs.h" -#include "vl53l1_dmax_structs.h" -#include "vl53l1_error_exceptions.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - -#define VL53L1_LL_API_IMPLEMENTATION_VER_MAJOR 1 - - -#define VL53L1_LL_API_IMPLEMENTATION_VER_MINOR 1 - - -#define VL53L1_LL_API_IMPLEMENTATION_VER_SUB 16 - - -#define VL53L1_LL_API_IMPLEMENTATION_VER_REVISION 11634 - -#define VL53L1_LL_API_IMPLEMENTATION_VER_STRING "1.1.16.11634" - - - -#define VL53L1_FIRMWARE_VER_MINIMUM 398 -#define VL53L1_FIRMWARE_VER_MAXIMUM 400 - - - - - - - -#define VL53L1_LL_CALIBRATION_DATA_STRUCT_VERSION 0xECAB0101 - - - -#define VL53L1_MAX_XTALK_RANGE_RESULTS 5 - - - - - - -#define VL53L1_MAX_OFFSET_RANGE_RESULTS 3 - - - - - -#define VL53L1_NVM_MAX_FMT_RANGE_DATA 4 - - - -#define VL53L1_NVM_PEAK_RATE_MAP_SAMPLES 25 - - -#define VL53L1_NVM_PEAK_RATE_MAP_WIDTH 5 - - -#define VL53L1_NVM_PEAK_RATE_MAP_HEIGHT 5 - - - - - - - - - -#define VL53L1_ERROR_DEVICE_FIRMWARE_TOO_OLD ((VL53L1_Error) - 80) - - -#define VL53L1_ERROR_DEVICE_FIRMWARE_TOO_NEW ((VL53L1_Error) - 85) - - -#define VL53L1_ERROR_UNIT_TEST_FAIL ((VL53L1_Error) - 90) - - -#define VL53L1_ERROR_FILE_READ_FAIL ((VL53L1_Error) - 95) - - -#define VL53L1_ERROR_FILE_WRITE_FAIL ((VL53L1_Error) - 96) - - - - - - - - - - - - -typedef struct { - uint32_t ll_revision; - - uint8_t ll_major; - - uint8_t ll_minor; - - uint8_t ll_build; - -} VL53L1_ll_version_t; - - - - - - -typedef struct { - - uint8_t device_test_mode; - - uint8_t VL53L1_PRM_00007; - - uint32_t timeout_us; - - uint16_t target_count_rate_mcps; - - - uint16_t min_count_rate_limit_mcps; - - - uint16_t max_count_rate_limit_mcps; - - - -} VL53L1_refspadchar_config_t; - - - - - - - -typedef struct { - - VL53L1_DeviceSscArray array_select; - - - - - uint8_t VL53L1_PRM_00007; - - - uint8_t vcsel_start; - - - uint8_t vcsel_width; - - - uint32_t timeout_us; - - - uint16_t rate_limit_mcps; - - - - - -} VL53L1_ssc_config_t; - - - - - - -typedef struct { - - - uint16_t algo__crosstalk_compensation_plane_offset_kcps; - - - int16_t algo__crosstalk_compensation_x_plane_gradient_kcps; - - - int16_t algo__crosstalk_compensation_y_plane_gradient_kcps; - - - uint16_t nvm_default__crosstalk_compensation_plane_offset_kcps; - - - int16_t nvm_default__crosstalk_compensation_x_plane_gradient_kcps; - - - int16_t nvm_default__crosstalk_compensation_y_plane_gradient_kcps; - - - uint8_t global_crosstalk_compensation_enable; - - - int16_t histogram_mode_crosstalk_margin_kcps; - - - - - - - int16_t lite_mode_crosstalk_margin_kcps; - - - - - - - uint8_t crosstalk_range_ignore_threshold_mult; - - - uint16_t crosstalk_range_ignore_threshold_rate_mcps; - - - - - int16_t algo__crosstalk_detect_min_valid_range_mm; - - - int16_t algo__crosstalk_detect_max_valid_range_mm; - - - uint16_t algo__crosstalk_detect_max_valid_rate_kcps; - - - - uint16_t algo__crosstalk_detect_max_sigma_mm; - - - - - -} VL53L1_xtalk_config_t; - - - - - - - -typedef struct { - - uint8_t x_centre; - - uint8_t y_centre; - - uint8_t width; - - uint8_t height; - - -} VL53L1_user_zone_t; - - - - - - - - - -typedef struct { - - uint8_t max_zones; - - uint8_t active_zones; - - - - - - - - - -VL53L1_histogram_config_t multizone_hist_cfg; - - VL53L1_user_zone_t user_zones[VL53L1_MAX_USER_ZONES]; - - - - uint8_t bin_config[VL53L1_MAX_USER_ZONES]; - - - -} VL53L1_zone_config_t; - - - - - - - - - -typedef struct { - - - - VL53L1_GPIO_Interrupt_Mode intr_mode_distance; - - - - VL53L1_GPIO_Interrupt_Mode intr_mode_rate; - - - - - - uint8_t intr_new_measure_ready; - - - - uint8_t intr_no_target; - - - - - - - uint8_t intr_combined_mode; - - - - - - - - - - - uint16_t threshold_distance_high; - - - - uint16_t threshold_distance_low; - - - - uint16_t threshold_rate_high; - - - - uint16_t threshold_rate_low; - -} VL53L1_GPIO_interrupt_config_t; - - - - - - - - -typedef struct { - - - - - uint8_t range_id; - - - uint32_t time_stamp; - - - uint8_t VL53L1_PRM_00010; - - - uint8_t VL53L1_PRM_00015; - - - uint8_t VL53L1_PRM_00019; - - - uint8_t VL53L1_PRM_00020; - - - uint8_t VL53L1_PRM_00011; - - - uint8_t VL53L1_PRM_00021; - - - - uint16_t width; - - - uint8_t VL53L1_PRM_00027; - - - - - uint16_t fast_osc_frequency; - - - uint16_t zero_distance_phase; - - - uint16_t VL53L1_PRM_00003; - - - - uint32_t total_periods_elapsed; - - - - uint32_t peak_duration_us; - - - - uint32_t woi_duration_us; - - - - - - - - uint32_t VL53L1_PRM_00023; - - - uint32_t VL53L1_PRM_00022; - - - - int32_t VL53L1_PRM_00009; - - - - - - - - uint16_t peak_signal_count_rate_mcps; - - - uint16_t avg_signal_count_rate_mcps; - - - uint16_t ambient_count_rate_mcps; - - - uint16_t total_rate_per_spad_mcps; - - - uint32_t VL53L1_PRM_00008; - - - - - - - uint16_t VL53L1_PRM_00004; - - - - - - - uint16_t VL53L1_PRM_00024; - - - - uint16_t VL53L1_PRM_00014; - - - uint16_t VL53L1_PRM_00025; - - - - - - - - int16_t min_range_mm; - - - - - - int16_t median_range_mm; - - - - - int16_t max_range_mm; - - - - - - - - - - uint8_t range_status; - -} VL53L1_range_data_t; - - - - - - - - - - -typedef struct { - - VL53L1_DeviceState cfg_device_state; - - - VL53L1_DeviceState rd_device_state; - - - uint8_t zone_id; - - - uint8_t stream_count; - - - - int16_t ambient_dmax_mm[VL53L1_MAX_AMBIENT_DMAX_VALUES]; - - - - - int16_t wrap_dmax_mm; - - - - uint8_t max_results; - - - - uint8_t active_results; - - - VL53L1_range_data_t VL53L1_PRM_00005[VL53L1_MAX_RANGE_RESULTS]; - - - - -} VL53L1_range_results_t; - - - - - - - - - - -typedef struct { - - uint8_t no_of_samples; - - - uint32_t rate_per_spad_kcps_sum; - - - - uint32_t rate_per_spad_kcps_avg; - - - int32_t signal_total_events_sum; - - - - int32_t signal_total_events_avg; - - - - uint32_t sigma_mm_sum; - - - - uint32_t sigma_mm_avg; - - - -} VL53L1_xtalk_range_data_t; - - - - - - - - - - -typedef struct { - - VL53L1_Error cal_status; - - - uint8_t num_of_samples_status; - - - - - - - - - uint8_t zero_samples_status; - - - - - - - - - uint8_t max_sigma_status; - - - - - - - - - - - - - - - - - - - uint8_t max_results; - - - - uint8_t active_results; - - - - VL53L1_xtalk_range_data_t VL53L1_PRM_00005[VL53L1_MAX_XTALK_RANGE_RESULTS]; - - - VL53L1_histogram_bin_data_t central_histogram_sum; - - - - VL53L1_histogram_bin_data_t central_histogram_avg; - - - - uint8_t central_histogram__window_start; - - - - uint8_t central_histogram__window_end; - - - - VL53L1_histogram_bin_data_t histogram_avg_1[VL53L1_MAX_XTALK_RANGE_RESULTS]; - - - - VL53L1_histogram_bin_data_t histogram_avg_2[VL53L1_MAX_XTALK_RANGE_RESULTS]; - - - - VL53L1_histogram_bin_data_t xtalk_avg[VL53L1_MAX_XTALK_RANGE_RESULTS]; - - - - -} VL53L1_xtalk_range_results_t; - - - - - - - - - - - -typedef struct { - - uint8_t preset_mode; - - - uint8_t dss_config__roi_mode_control; - - - uint16_t dss_config__manual_effective_spads_select; - - - uint8_t no_of_samples; - - - uint32_t effective_spads; - - - uint32_t peak_rate_mcps; - - - uint32_t VL53L1_PRM_00004; - - - int32_t median_range_mm; - - - - int32_t range_mm_offset; - - - -} VL53L1_offset_range_data_t; - - - - - - - - - - -typedef struct { - - int16_t cal_distance_mm; - - - uint16_t cal_reflectance_pc; - - - VL53L1_Error cal_status; - - - uint8_t cal_report; - - - uint8_t max_results; - - - - uint8_t active_results; - - - VL53L1_offset_range_data_t VL53L1_PRM_00005[VL53L1_MAX_OFFSET_RANGE_RESULTS]; - - - -} VL53L1_offset_range_results_t; - - - - - - - - - - - - -typedef struct { - - uint16_t result__mm_inner_actual_effective_spads; - - - uint16_t result__mm_outer_actual_effective_spads; - - - uint16_t result__mm_inner_peak_signal_count_rtn_mcps; - - - uint16_t result__mm_outer_peak_signal_count_rtn_mcps; - - - -} VL53L1_additional_offset_cal_data_t; - - - - - - - - - - -typedef struct { - - uint32_t VL53L1_PRM_00023; - - - uint32_t VL53L1_PRM_00022; - - - - uint16_t VL53L1_PRM_00014; - - - -} VL53L1_object_data_t; - - - - - - - - - - -typedef struct { - - VL53L1_DeviceState cfg_device_state; - - - VL53L1_DeviceState rd_device_state; - - - uint8_t zone_id; - - - uint8_t stream_count; - - - - uint8_t max_objects; - - - - uint8_t active_objects; - - - VL53L1_object_data_t VL53L1_PRM_00005[VL53L1_MAX_RANGE_RESULTS]; - - - -} VL53L1_zone_objects_t; - - - - - - - - - - -typedef struct { - - uint8_t max_zones; - - - - uint8_t active_zones; - - - VL53L1_zone_objects_t VL53L1_PRM_00005[VL53L1_MAX_USER_ZONES]; - - - -} VL53L1_zone_results_t; - - - - - - - - - -typedef struct { - - VL53L1_DeviceState rd_device_state; - - - - uint8_t number_of_ambient_bins; - - - - - uint16_t result__dss_actual_effective_spads; - - - uint8_t VL53L1_PRM_00007; - - - uint32_t total_periods_elapsed; - - - - int32_t ambient_events_sum; - - - -} VL53L1_zone_hist_info_t; - - - - - - - - - - -typedef struct { - - uint8_t max_zones; - - - - uint8_t active_zones; - - - VL53L1_zone_hist_info_t VL53L1_PRM_00005[VL53L1_MAX_USER_ZONES]; - - - -} VL53L1_zone_histograms_t; - - - - - - - - - -typedef struct { - - uint32_t no_of_samples; - - - uint32_t effective_spads; - - - uint32_t peak_rate_mcps; - - - uint32_t VL53L1_PRM_00014; - - - uint32_t VL53L1_PRM_00004; - - - - int32_t median_range_mm; - - - - int32_t range_mm_offset; - - - -} VL53L1_zone_calibration_data_t; - - - - - - - - -typedef struct { - - VL53L1_DevicePresetModes preset_mode; - - - VL53L1_DeviceZonePreset zone_preset; - - - int16_t cal_distance_mm; - - - uint16_t cal_reflectance_pc; - - - uint16_t phasecal_result__reference_phase; - - - uint16_t zero_distance_phase; - - - VL53L1_Error cal_status; - - - uint8_t max_zones; - - - - uint8_t active_zones; - - - VL53L1_zone_calibration_data_t VL53L1_PRM_00005[VL53L1_MAX_USER_ZONES]; - - - -} VL53L1_zone_calibration_results_t; - - - - - - - - - - - -typedef struct { - - int16_t cal_distance_mm; - - - uint16_t cal_reflectance_pc; - - - uint16_t max_samples; - - - uint16_t width; - - - uint16_t height; - - - uint16_t peak_rate_mcps[VL53L1_NVM_PEAK_RATE_MAP_SAMPLES]; - - - -} VL53L1_cal_peak_rate_map_t; - - - - - - - - - -typedef struct { - - uint8_t expected_stream_count; - - - uint8_t expected_gph_id; - - - uint8_t dss_mode; - - - uint16_t dss_requested_effective_spad_count; - - - - uint8_t seed_cfg; - - - uint8_t initial_phase_seed; - - - - uint8_t roi_config__user_roi_centre_spad; - - - uint8_t roi_config__user_roi_requested_global_xy_size; - - - -} VL53L1_zone_private_dyn_cfg_t; - - - - - - - - - -typedef struct { - - uint8_t max_zones; - - - - uint8_t active_zones; - - - VL53L1_zone_private_dyn_cfg_t VL53L1_PRM_00005[VL53L1_MAX_USER_ZONES]; - - - -} VL53L1_zone_private_dyn_cfgs_t; - - - - - - - - - -typedef struct { - - uint16_t algo__crosstalk_compensation_plane_offset_kcps; - - - int16_t algo__crosstalk_compensation_x_plane_gradient_kcps; - - - int16_t algo__crosstalk_compensation_y_plane_gradient_kcps; - - - -} VL53L1_xtalk_calibration_results_t; - - - - - - - - - - -typedef struct { - - uint16_t standard_ranging_gain_factor; - - - uint16_t histogram_ranging_gain_factor; - - - -} VL53L1_gain_calibration_data_t; - - - - - - - - - - -typedef struct { - - VL53L1_DeviceState cfg_device_state; - - - uint8_t cfg_stream_count; - - - - uint8_t cfg_internal_stream_count; - - - uint8_t cfg_internal_stream_count_val; - - - uint8_t cfg_gph_id; - - - uint8_t cfg_timing_status; - - - uint8_t cfg_zone_id; - - - - VL53L1_DeviceState rd_device_state; - - - uint8_t rd_stream_count; - - - uint8_t rd_internal_stream_count; - - - uint8_t rd_internal_stream_count_val; - - - uint8_t rd_gph_id; - - - uint8_t rd_timing_status; - - - uint8_t rd_zone_id; - - - -} VL53L1_ll_driver_state_t; - - - - - - - - - - -typedef struct { - - uint8_t wait_method; - - - VL53L1_DevicePresetModes preset_mode; - - - VL53L1_DeviceZonePreset zone_preset; - - - VL53L1_DeviceMeasurementModes measurement_mode; - - - VL53L1_OffsetCalibrationMode offset_calibration_mode; - - - VL53L1_OffsetCorrectionMode offset_correction_mode; - - - VL53L1_DeviceDmaxMode dmax_mode; - - - uint32_t phasecal_config_timeout_us; - - - uint32_t mm_config_timeout_us; - - - uint32_t range_config_timeout_us; - - - uint32_t inter_measurement_period_ms; - - - uint32_t fw_ready_poll_duration_ms; - - - uint8_t fw_ready; - - - uint8_t debug_mode; - - - uint8_t fpga_system; - - - - - - VL53L1_ll_version_t version; - - - - VL53L1_ll_driver_state_t ll_state; - - - - VL53L1_GPIO_interrupt_config_t gpio_interrupt_config; - - - - VL53L1_customer_nvm_managed_t customer; - VL53L1_cal_peak_rate_map_t cal_peak_rate_map; - VL53L1_additional_offset_cal_data_t add_off_cal_data; - VL53L1_dmax_calibration_data_t fmt_dmax_cal; - VL53L1_dmax_calibration_data_t cust_dmax_cal; - VL53L1_gain_calibration_data_t gain_cal; - VL53L1_user_zone_t mm_roi; - VL53L1_zone_config_t zone_cfg; - - - - uint8_t rtn_good_spads[VL53L1_RTN_SPAD_BUFFER_SIZE]; - - - - VL53L1_refspadchar_config_t refspadchar; - VL53L1_ssc_config_t ssc_cfg; - VL53L1_hist_post_process_config_t histpostprocess; - VL53L1_hist_gen3_dmax_config_t dmax_cfg; - VL53L1_xtalk_config_t xtalk_cfg; - - - - VL53L1_static_nvm_managed_t stat_nvm; - VL53L1_histogram_config_t hist_cfg; - VL53L1_static_config_t stat_cfg; - VL53L1_general_config_t gen_cfg; - VL53L1_timing_config_t tim_cfg; - VL53L1_dynamic_config_t dyn_cfg; - VL53L1_system_control_t sys_ctrl; - VL53L1_system_results_t sys_results; - VL53L1_nvm_copy_data_t nvm_copy_data; - - - - VL53L1_histogram_bin_data_t hist_data; - VL53L1_histogram_bin_data_t hist_xtalk; - - - - VL53L1_xtalk_histogram_data_t xtalk_shapes; - VL53L1_xtalk_range_results_t xtalk_results; - VL53L1_xtalk_calibration_results_t xtalk_cal; - - - - VL53L1_offset_range_results_t offset_results; - - - - VL53L1_core_results_t core_results; - VL53L1_debug_results_t dbg_results; - -#ifdef PAL_EXTENDED - - - VL53L1_patch_results_t patch_results; - VL53L1_shadow_core_results_t shadow_core_results; - VL53L1_shadow_system_results_t shadow_sys_results; - VL53L1_prev_shadow_core_results_t prev_shadow_core_results; - VL53L1_prev_shadow_system_results_t prev_shadow_sys_results; -#endif - -} VL53L1_LLDriverData_t; - - - - - - - - - - -typedef struct { - - - - VL53L1_range_results_t range_results; - - - - VL53L1_zone_private_dyn_cfgs_t zone_dyn_cfgs; - - - - VL53L1_zone_results_t zone_results; - VL53L1_zone_histograms_t zone_hists; - VL53L1_zone_calibration_results_t zone_cal; - -} VL53L1_LLDriverResults_t; - - - - - - - - - - -typedef struct { - - uint32_t struct_version; - VL53L1_customer_nvm_managed_t customer; - VL53L1_dmax_calibration_data_t fmt_dmax_cal; - VL53L1_dmax_calibration_data_t cust_dmax_cal; - VL53L1_additional_offset_cal_data_t add_off_cal_data; - VL53L1_user_zone_t mm_roi; - VL53L1_xtalk_histogram_data_t xtalkhisto; - VL53L1_gain_calibration_data_t gain_cal; - VL53L1_cal_peak_rate_map_t cal_peak_rate_map; - -} VL53L1_calibration_data_t; - - - - - - - - - - -typedef struct { - - VL53L1_customer_nvm_managed_t customer; - VL53L1_xtalk_config_t xtalk_cfg; - VL53L1_histogram_bin_data_t hist_data; - VL53L1_xtalk_histogram_data_t xtalk_shapes; - VL53L1_xtalk_range_results_t xtalk_results; - -} VL53L1_xtalk_debug_data_t; - - - - - - - - - - -typedef struct { - - VL53L1_customer_nvm_managed_t customer; - VL53L1_dmax_calibration_data_t fmt_dmax_cal; - VL53L1_dmax_calibration_data_t cust_dmax_cal; - VL53L1_additional_offset_cal_data_t add_off_cal_data; - VL53L1_offset_range_results_t offset_results; - -} VL53L1_offset_debug_data_t; - - - - - - - - - - - -typedef struct { - - uint16_t target_reflectance_for_dmax[VL53L1_MAX_AMBIENT_DMAX_VALUES]; - -} VL53L1_dmax_reflectance_array_t; - - - - - - - - - - - - - - -typedef struct { - - uint8_t spad_type; - - - uint16_t VL53L1_PRM_00016; - - - uint16_t rate_data[VL53L1_NO_OF_SPAD_ENABLES]; - - - uint16_t no_of_values; - - - uint8_t fractional_bits; - - - uint8_t error_status; - - - -} VL53L1_spad_rate_data_t; - - - - - -#define SUPPRESS_UNUSED_WARNING(x) \ - ((void) (x)) - - -#define IGNORE_STATUS(__FUNCTION_ID__, __ERROR_STATUS_CHECK__, __STATUS__) \ - do { \ - DISABLE_WARNINGS(); \ - if (__FUNCTION_ID__) { \ - if (__STATUS__ == __ERROR_STATUS_CHECK__) { \ - __STATUS__ = VL53L1_ERROR_NONE; \ - WARN_OVERRIDE_STATUS(__FUNCTION_ID__); \ - } \ - } \ - ENABLE_WARNINGS(); \ - } \ - while (0) - -#define VL53L1_COPYSTRING(str, ...) \ - (strncpy(str, ##__VA_ARGS__, VL53L1_MAX_STRING_LENGTH-1)) - -#ifdef __cplusplus -} -#endif - -#endif - - - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_ll_device.h b/drivers/input/misc/vl53L1/inc/vl53l1_ll_device.h deleted file mode 100644 index a7990f49dd01..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_ll_device.h +++ /dev/null @@ -1,843 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_LL_DEVICE_H_ -#define _VL53L1_LL_DEVICE_H_ - -#include "vl53l1_types.h" - -#define VL53L1_I2C 0x01 -#define VL53L1_SPI 0x00 - - - - - - - - - - - - - -typedef uint8_t VL53L1_WaitMethod; - -#define VL53L1_WAIT_METHOD_BLOCKING ((VL53L1_WaitMethod) 0) -#define VL53L1_WAIT_METHOD_NON_BLOCKING ((VL53L1_WaitMethod) 1) - - - - - - - - - - -typedef uint8_t VL53L1_DeviceState; - -#define VL53L1_DEVICESTATE_POWERDOWN ((VL53L1_DeviceState) 0) -#define VL53L1_DEVICESTATE_HW_STANDBY ((VL53L1_DeviceState) 1) -#define VL53L1_DEVICESTATE_FW_COLDBOOT ((VL53L1_DeviceState) 2) -#define VL53L1_DEVICESTATE_SW_STANDBY ((VL53L1_DeviceState) 3) -#define VL53L1_DEVICESTATE_RANGING_DSS_AUTO ((VL53L1_DeviceState) 4) -#define VL53L1_DEVICESTATE_RANGING_DSS_MANUAL ((VL53L1_DeviceState) 5) -#define VL53L1_DEVICESTATE_RANGING_WAIT_GPH_SYNC ((VL53L1_DeviceState) 6) -#define VL53L1_DEVICESTATE_RANGING_GATHER_DATA ((VL53L1_DeviceState) 7) -#define VL53L1_DEVICESTATE_RANGING_OUTPUT_DATA ((VL53L1_DeviceState) 8) - -#define VL53L1_DEVICESTATE_UNKNOWN ((VL53L1_DeviceState) 98) -#define VL53L1_DEVICESTATE_ERROR ((VL53L1_DeviceState) 99) - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceZonePreset; - -#define VL53L1_DEVICEZONEPRESET_NONE ((VL53L1_DeviceZonePreset) 0) - -#define VL53L1_DEVICEZONEPRESET_XTALK_PLANAR ((VL53L1_DeviceZonePreset) 1) -#define VL53L1_DEVICEZONEPRESET_1X1_SIZE_16X16 ((VL53L1_DeviceZonePreset) 2) -#define VL53L1_DEVICEZONEPRESET_1X2_SIZE_16X8 ((VL53L1_DeviceZonePreset) 3) -#define VL53L1_DEVICEZONEPRESET_2X1_SIZE_8X16 ((VL53L1_DeviceZonePreset) 4) -#define VL53L1_DEVICEZONEPRESET_2X2_SIZE_8X8 ((VL53L1_DeviceZonePreset) 5) -#define VL53L1_DEVICEZONEPRESET_3X3_SIZE_5X5 ((VL53L1_DeviceZonePreset) 6) -#define VL53L1_DEVICEZONEPRESET_4X4_SIZE_4X4 ((VL53L1_DeviceZonePreset) 7) -#define VL53L1_DEVICEZONEPRESET_5X5_SIZE_4X4 ((VL53L1_DeviceZonePreset) 8) -#define VL53L1_DEVICEZONEPRESET_11X11_SIZE_5X5 ((VL53L1_DeviceZonePreset) 9) -#define VL53L1_DEVICEZONEPRESET_13X13_SIZE_4X4 ((VL53L1_DeviceZonePreset) 10) - -#define VL53L1_DEVICEZONEPRESET_1X1_SIZE_4X4_POS_8X8 ((VL53L1_DeviceZonePreset) 11) - -#define VL53L1_DEVICEZONEPRESET_CUSTOM ((VL53L1_DeviceZonePreset) 255) - - - - - - - - - - - -typedef uint8_t VL53L1_DevicePresetModes; - -#define VL53L1_DEVICEPRESETMODE_NONE ((VL53L1_DevicePresetModes) 0) -#define VL53L1_DEVICEPRESETMODE_STANDARD_RANGING ((VL53L1_DevicePresetModes) 1) -#define VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_SHORT_RANGE ((VL53L1_DevicePresetModes) 2) -#define VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_LONG_RANGE ((VL53L1_DevicePresetModes) 3) -#define VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_MM1_CAL ((VL53L1_DevicePresetModes) 4) -#define VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_MM2_CAL ((VL53L1_DevicePresetModes) 5) -#define VL53L1_DEVICEPRESETMODE_TIMED_RANGING ((VL53L1_DevicePresetModes) 6) -#define VL53L1_DEVICEPRESETMODE_TIMED_RANGING_SHORT_RANGE ((VL53L1_DevicePresetModes) 7) -#define VL53L1_DEVICEPRESETMODE_TIMED_RANGING_LONG_RANGE ((VL53L1_DevicePresetModes) 8) -#define VL53L1_DEVICEPRESETMODE_NEAR_FARRANGING ((VL53L1_DevicePresetModes) 9) -#define VL53L1_DEVICEPRESETMODE_QUADRANT_RANGING ((VL53L1_DevicePresetModes) 10) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING ((VL53L1_DevicePresetModes) 11) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_SHORT_TIMING ((VL53L1_DevicePresetModes) 12) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_CHARACTERISATION ((VL53L1_DevicePresetModes) 13) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_XTALK_PLANAR ((VL53L1_DevicePresetModes) 14) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_XTALK_MM1 ((VL53L1_DevicePresetModes) 15) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_XTALK_MM2 ((VL53L1_DevicePresetModes) 16) -#define VL53L1_DEVICEPRESETMODE_OLT ((VL53L1_DevicePresetModes) 17) -#define VL53L1_DEVICEPRESETMODE_SINGLESHOT_RANGING ((VL53L1_DevicePresetModes) 18) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_REF_ARRAY ((VL53L1_DevicePresetModes) 19) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_WITH_MM1 ((VL53L1_DevicePresetModes) 20) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_WITH_MM2 ((VL53L1_DevicePresetModes) 21) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_MM1_CAL ((VL53L1_DevicePresetModes) 22) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_MM2_CAL ((VL53L1_DevicePresetModes) 23) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_MULTIZONE ((VL53L1_DevicePresetModes) 24) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_MULTIZONE_SHORT_RANGE ((VL53L1_DevicePresetModes) 25) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_MULTIZONE_LONG_RANGE ((VL53L1_DevicePresetModes) 26) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_LONG_RANGE ((VL53L1_DevicePresetModes) 27) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_LONG_RANGE_MM1 ((VL53L1_DevicePresetModes) 28) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_LONG_RANGE_MM2 ((VL53L1_DevicePresetModes) 29) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_MEDIUM_RANGE ((VL53L1_DevicePresetModes) 30) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_MEDIUM_RANGE_MM1 ((VL53L1_DevicePresetModes) 31) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_MEDIUM_RANGE_MM2 ((VL53L1_DevicePresetModes) 32) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_SHORT_RANGE ((VL53L1_DevicePresetModes) 33) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_SHORT_RANGE_MM1 ((VL53L1_DevicePresetModes) 34) -#define VL53L1_DEVICEPRESETMODE_HISTOGRAM_SHORT_RANGE_MM2 ((VL53L1_DevicePresetModes) 35) - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceMeasurementModes; - -#define VL53L1_DEVICEMEASUREMENTMODE_STOP ((VL53L1_DeviceMeasurementModes) 0x00) -#define VL53L1_DEVICEMEASUREMENTMODE_SINGLESHOT ((VL53L1_DeviceMeasurementModes) 0x10) -#define VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK ((VL53L1_DeviceMeasurementModes) 0x20) -#define VL53L1_DEVICEMEASUREMENTMODE_TIMED ((VL53L1_DeviceMeasurementModes) 0x40) -#define VL53L1_DEVICEMEASUREMENTMODE_ABORT ((VL53L1_DeviceMeasurementModes) 0x80) - - - - - - - - - - - -typedef uint8_t VL53L1_OffsetCalibrationMode; - -#define VL53L1_OFFSETCALIBRATIONMODE__NONE ((VL53L1_OffsetCalibrationMode) 0) -#define VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__STANDARD ((VL53L1_OffsetCalibrationMode) 1) -#define VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__HISTOGRAM ((VL53L1_OffsetCalibrationMode) 2) -#define VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__STANDARD_PRE_RANGE_ONLY ((VL53L1_OffsetCalibrationMode) 3) -#define VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__HISTOGRAM_PRE_RANGE_ONLY ((VL53L1_OffsetCalibrationMode) 4) - - - - - - - - - - - -typedef uint8_t VL53L1_OffsetCorrectionMode; - -#define VL53L1_OFFSETCORRECTIONMODE__NONE ((VL53L1_OffsetCorrectionMode) 0) -#define VL53L1_OFFSETCORRECTIONMODE__MM1_MM2_OFFSETS ((VL53L1_OffsetCorrectionMode) 1) -#define VL53L1_OFFSETCORRECTIONMODE__PER_ZONE_OFFSETS ((VL53L1_OffsetCorrectionMode) 2) - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceDmaxMode; - -#define VL53L1_DEVICEDMAXMODE__NONE ((VL53L1_DeviceDmaxMode) 0) -#define VL53L1_DEVICEDMAXMODE__FMT_CAL_DATA ((VL53L1_DeviceDmaxMode) 1) -#define VL53L1_DEVICEDMAXMODE__CUST_CAL_DATA ((VL53L1_DeviceDmaxMode) 2) -#define VL53L1_DEVICEDMAXMODE__PER_ZONE_CAL_DATA ((VL53L1_DeviceDmaxMode) 3) - - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceSequenceConfig; - -#define VL53L1_DEVICESEQUENCECONFIG_VHV ((VL53L1_DeviceSequenceConfig) 0) -#define VL53L1_DEVICESEQUENCECONFIG_PHASECAL ((VL53L1_DeviceSequenceConfig) 1) -#define VL53L1_DEVICESEQUENCECONFIG_REFERENCE_PHASE ((VL53L1_DeviceSequenceConfig) 2) -#define VL53L1_DEVICESEQUENCECONFIG_DSS1 ((VL53L1_DeviceSequenceConfig) 3) -#define VL53L1_DEVICESEQUENCECONFIG_DSS2 ((VL53L1_DeviceSequenceConfig) 4) -#define VL53L1_DEVICESEQUENCECONFIG_MM1 ((VL53L1_DeviceSequenceConfig) 5) -#define VL53L1_DEVICESEQUENCECONFIG_MM2 ((VL53L1_DeviceSequenceConfig) 6) -#define VL53L1_DEVICESEQUENCECONFIG_RANGE ((VL53L1_DeviceSequenceConfig) 7) - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceInterruptPolarity; - -#define VL53L1_DEVICEINTERRUPTPOLARITY_ACTIVE_HIGH ((VL53L1_DeviceInterruptPolarity) 0x00) -#define VL53L1_DEVICEINTERRUPTPOLARITY_ACTIVE_LOW ((VL53L1_DeviceInterruptPolarity) 0x10) -#define VL53L1_DEVICEINTERRUPTPOLARITY_BIT_MASK ((VL53L1_DeviceInterruptPolarity) 0x10) -#define VL53L1_DEVICEINTERRUPTPOLARITY_CLEAR_MASK ((VL53L1_DeviceInterruptPolarity) 0xEF) - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceGpioMode; - -#define VL53L1_DEVICEGPIOMODE_OUTPUT_CONSTANT_ZERO ((VL53L1_DeviceGpioMode) 0x00) -#define VL53L1_DEVICEGPIOMODE_OUTPUT_RANGE_AND_ERROR_INTERRUPTS ((VL53L1_DeviceGpioMode) 0x01) -#define VL53L1_DEVICEGPIOMODE_OUTPUT_TIMIER_INTERRUPTS ((VL53L1_DeviceGpioMode) 0x02) -#define VL53L1_DEVICEGPIOMODE_OUTPUT_RANGE_MODE_INTERRUPT_STATUS ((VL53L1_DeviceGpioMode) 0x03) -#define VL53L1_DEVICEGPIOMODE_OUTPUT_SLOW_OSCILLATOR_CLOCK ((VL53L1_DeviceGpioMode) 0x04) -#define VL53L1_DEVICEGPIOMODE_BIT_MASK ((VL53L1_DeviceGpioMode) 0x0F) -#define VL53L1_DEVICEGPIOMODE_CLEAR_MASK ((VL53L1_DeviceGpioMode) 0xF0) - - - - - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceError; - -#define VL53L1_DEVICEERROR_NOUPDATE ((VL53L1_DeviceError) 0) - - -#define VL53L1_DEVICEERROR_VCSELCONTINUITYTESTFAILURE ((VL53L1_DeviceError) 1) -#define VL53L1_DEVICEERROR_VCSELWATCHDOGTESTFAILURE ((VL53L1_DeviceError) 2) -#define VL53L1_DEVICEERROR_NOVHVVALUEFOUND ((VL53L1_DeviceError) 3) -#define VL53L1_DEVICEERROR_MSRCNOTARGET ((VL53L1_DeviceError) 4) -#define VL53L1_DEVICEERROR_RANGEPHASECHECK ((VL53L1_DeviceError) 5) -#define VL53L1_DEVICEERROR_SIGMATHRESHOLDCHECK ((VL53L1_DeviceError) 6) -#define VL53L1_DEVICEERROR_PHASECONSISTENCY ((VL53L1_DeviceError) 7) -#define VL53L1_DEVICEERROR_MINCLIP ((VL53L1_DeviceError) 8) -#define VL53L1_DEVICEERROR_RANGECOMPLETE ((VL53L1_DeviceError) 9) -#define VL53L1_DEVICEERROR_ALGOUNDERFLOW ((VL53L1_DeviceError) 10) -#define VL53L1_DEVICEERROR_ALGOOVERFLOW ((VL53L1_DeviceError) 11) -#define VL53L1_DEVICEERROR_RANGEIGNORETHRESHOLD ((VL53L1_DeviceError) 12) -#define VL53L1_DEVICEERROR_USERROICLIP ((VL53L1_DeviceError) 13) -#define VL53L1_DEVICEERROR_REFSPADCHARNOTENOUGHDPADS ((VL53L1_DeviceError) 14) -#define VL53L1_DEVICEERROR_REFSPADCHARMORETHANTARGET ((VL53L1_DeviceError) 15) -#define VL53L1_DEVICEERROR_REFSPADCHARLESSTHANTARGET ((VL53L1_DeviceError) 16) -#define VL53L1_DEVICEERROR_MULTCLIPFAIL ((VL53L1_DeviceError) 17) -#define VL53L1_DEVICEERROR_GPHSTREAMCOUNT0READY ((VL53L1_DeviceError) 18) -#define VL53L1_DEVICEERROR_RANGECOMPLETE_NO_WRAP_CHECK ((VL53L1_DeviceError) 19) -#define VL53L1_DEVICEERROR_EVENTCONSISTENCY ((VL53L1_DeviceError) 20) - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceReportStatus; - -#define VL53L1_DEVICEREPORTSTATUS_NOUPDATE ((VL53L1_DeviceReportStatus) 0) - - -#define VL53L1_DEVICEREPORTSTATUS_ROI_SETUP ((VL53L1_DeviceReportStatus) 1) -#define VL53L1_DEVICEREPORTSTATUS_VHV ((VL53L1_DeviceReportStatus) 2) -#define VL53L1_DEVICEREPORTSTATUS_PHASECAL ((VL53L1_DeviceReportStatus) 3) -#define VL53L1_DEVICEREPORTSTATUS_REFERENCE_PHASE ((VL53L1_DeviceReportStatus) 4) -#define VL53L1_DEVICEREPORTSTATUS_DSS1 ((VL53L1_DeviceReportStatus) 5) -#define VL53L1_DEVICEREPORTSTATUS_DSS2 ((VL53L1_DeviceReportStatus) 6) -#define VL53L1_DEVICEREPORTSTATUS_MM1 ((VL53L1_DeviceReportStatus) 7) -#define VL53L1_DEVICEREPORTSTATUS_MM2 ((VL53L1_DeviceReportStatus) 8) -#define VL53L1_DEVICEREPORTSTATUS_RANGE ((VL53L1_DeviceReportStatus) 9) -#define VL53L1_DEVICEREPORTSTATUS_HISTOGRAM ((VL53L1_DeviceReportStatus) 10) - - - - - - - - - - -typedef uint8_t VL53L1_DeviceDssMode; - -#define VL53L1_DEVICEDSSMODE__DISABLED \ - ((VL53L1_DeviceDssMode) 0) -#define VL53L1_DEVICEDSSMODE__TARGET_RATE \ - ((VL53L1_DeviceDssMode) 1) -#define VL53L1_DEVICEDSSMODE__REQUESTED_EFFFECTIVE_SPADS \ - ((VL53L1_DeviceDssMode) 2) -#define VL53L1_DEVICEDSSMODE__BLOCK_SELECT \ - ((VL53L1_DeviceDssMode) 3) - - - - - - - - - - - - -typedef uint8_t VL53L1_HistAlgoSelect; - -#define VL53L1_HIST_ALGO_SELECT__PW_HIST_GEN1 \ - ((VL53L1_HistAlgoSelect) 1) -#define VL53L1_HIST_ALGO_SELECT__PW_HIST_GEN2 \ - ((VL53L1_HistAlgoSelect) 2) -#define VL53L1_HIST_ALGO_SELECT__PW_HIST_GEN3 \ - ((VL53L1_HistAlgoSelect) 3) -#define VL53L1_HIST_ALGO_SELECT__PW_HIST_GEN4 \ - ((VL53L1_HistAlgoSelect) 4) - - - - - - - - - - - -typedef uint8_t VL53L1_HistTargetOrder; - -#define VL53L1_HIST_TARGET_ORDER__INCREASING_DISTANCE \ - ((VL53L1_HistTargetOrder) 1) -#define VL53L1_HIST_TARGET_ORDER__STRONGEST_FIRST \ - ((VL53L1_HistTargetOrder) 2) - - - - - - - - - - - -typedef uint8_t VL53L1_HistAmbEstMethod; - -#define VL53L1_HIST_AMB_EST_METHOD__AMBIENT_BINS \ - ((VL53L1_HistAmbEstMethod) 1) -#define VL53L1_HIST_AMB_EST_METHOD__THRESHOLDED_BINS \ - ((VL53L1_HistAmbEstMethod) 2) - - - - - - - - - - - - -typedef uint8_t VL53L1_HistXtalkCompEnable; - -#define VL53L1_HIST_XTALK_COMP__DIS \ - ((VL53L1_HistXtalkCompEnable) 0) -#define VL53L1_HIST_XTALK_COMP__EN \ - ((VL53L1_HistXtalkCompEnable) 1) - - - - - - - - - -typedef uint8_t VL53L1_DeviceConfigLevel; - -#define VL53L1_DEVICECONFIGLEVEL_SYSTEM_CONTROL \ - ((VL53L1_DeviceConfigLevel) 0) - - -#define VL53L1_DEVICECONFIGLEVEL_DYNAMIC_ONWARDS \ - ((VL53L1_DeviceConfigLevel) 1) - - -#define VL53L1_DEVICECONFIGLEVEL_TIMING_ONWARDS \ - ((VL53L1_DeviceConfigLevel) 2) - - - -#define VL53L1_DEVICECONFIGLEVEL_GENERAL_ONWARDS \ - ((VL53L1_DeviceConfigLevel) 3) - - - -#define VL53L1_DEVICECONFIGLEVEL_STATIC_ONWARDS \ - ((VL53L1_DeviceConfigLevel) 4) - - - -#define VL53L1_DEVICECONFIGLEVEL_CUSTOMER_ONWARDS \ - ((VL53L1_DeviceConfigLevel) 5) - - - -#define VL53L1_DEVICECONFIGLEVEL_FULL \ - ((VL53L1_DeviceConfigLevel) 6) - - - - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceResultsLevel; - -#define VL53L1_DEVICERESULTSLEVEL_SYSTEM_RESULTS \ - ((VL53L1_DeviceResultsLevel) 0) - - -#define VL53L1_DEVICERESULTSLEVEL_UPTO_CORE \ - ((VL53L1_DeviceResultsLevel) 1) - - -#define VL53L1_DEVICERESULTSLEVEL_FULL \ - ((VL53L1_DeviceResultsLevel) 2) - - - - - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceTestMode; - -#define VL53L1_DEVICETESTMODE_NONE \ - ((VL53L1_DeviceTestMode) 0x00) - - -#define VL53L1_DEVICETESTMODE_NVM_ZERO \ - ((VL53L1_DeviceTestMode) 0x01) - - -#define VL53L1_DEVICETESTMODE_NVM_COPY \ - ((VL53L1_DeviceTestMode) 0x02) - - -#define VL53L1_DEVICETESTMODE_PATCH \ - ((VL53L1_DeviceTestMode) 0x03) - - -#define VL53L1_DEVICETESTMODE_DCR \ - ((VL53L1_DeviceTestMode) 0x04) - - -#define VL53L1_DEVICETESTMODE_LCR_VCSEL_OFF \ - ((VL53L1_DeviceTestMode) 0x05) - - - -#define VL53L1_DEVICETESTMODE_LCR_VCSEL_ON \ - ((VL53L1_DeviceTestMode) 0x06) - - - -#define VL53L1_DEVICETESTMODE_SPOT_CENTRE_LOCATE \ - ((VL53L1_DeviceTestMode) 0x07) - - -#define VL53L1_DEVICETESTMODE_REF_SPAD_CHAR_WITH_PRE_VHV \ - ((VL53L1_DeviceTestMode) 0x08) - - -#define VL53L1_DEVICETESTMODE_REF_SPAD_CHAR_ONLY \ - ((VL53L1_DeviceTestMode) 0x09) - - - - - - - - - - - - - -typedef uint8_t VL53L1_DeviceSscArray; - -#define VL53L1_DEVICESSCARRAY_RTN ((VL53L1_DeviceSscArray) 0x00) - - -#define VL53L1_DEVICETESTMODE_REF ((VL53L1_DeviceSscArray) 0x01) - - - - - - - - - - - - - -#define VL53L1_RETURN_ARRAY_ONLY 0x01 - - -#define VL53L1_REFERENCE_ARRAY_ONLY 0x10 - - -#define VL53L1_BOTH_RETURN_AND_REFERENCE_ARRAYS 0x11 - - -#define VL53L1_NEITHER_RETURN_AND_REFERENCE_ARRAYS 0x00 - - - - - - - - - - - - -#define VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_HIGH 0x00 - - -#define VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_LOW 0x10 - - -#define VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_MASK 0x10 - - - - - - - - - - - - -#define VL53L1_POLLING_DELAY_US 1000 - - -#define VL53L1_SOFTWARE_RESET_DURATION_US 100 - - -#define VL53L1_FIRMWARE_BOOT_TIME_US 1200 - - - -#define VL53L1_ENABLE_POWERFORCE_SETTLING_TIME_US 250 - - - - -#define VL53L1_SPAD_ARRAY_WIDTH 16 - - -#define VL53L1_SPAD_ARRAY_HEIGHT 16 - - -#define VL53L1_NVM_SIZE_IN_BYTES 512 - - -#define VL53L1_NO_OF_SPAD_ENABLES 256 - - -#define VL53L1_RTN_SPAD_BUFFER_SIZE 32 - - -#define VL53L1_REF_SPAD_BUFFER_SIZE 6 - - -#define VL53L1_AMBIENT_WINDOW_VCSEL_PERIODS 256 - - -#define VL53L1_RANGING_WINDOW_VCSEL_PERIODS 2048 - - -#define VL53L1_MACRO_PERIOD_VCSEL_PERIODS \ - (VL53L1_AMBIENT_WINDOW_VCSEL_PERIODS + VL53L1_RANGING_WINDOW_VCSEL_PERIODS) - - -#define VL53L1_MAX_ALLOWED_PHASE 0xFFFF - - - -#define VL53L1_RTN_SPAD_UNITY_TRANSMISSION 0x0100 - - -#define VL53L1_RTN_SPAD_APERTURE_TRANSMISSION 0x0038 - - - - - -#define VL53L1_SPAD_TOTAL_COUNT_MAX ((0x01 << 29) - 1) - - -#define VL53L1_SPAD_TOTAL_COUNT_RES_THRES (0x01 << 24) - - -#define VL53L1_COUNT_RATE_INTERNAL_MAX ((0x01 << 24) - 1) - - -#define VL53L1_SPEED_OF_LIGHT_IN_AIR 299704 - - -#define VL53L1_SPEED_OF_LIGHT_IN_AIR_DIV_8 (299704 >> 3) - - - - - - - - - - - - - - - - -typedef uint8_t VL53L1_ZoneConfig_BinConfig_select; - -#define VL53L1_ZONECONFIG_BINCONFIG__LOWAMB \ - ((VL53L1_ZoneConfig_BinConfig_select) 1) -#define VL53L1_ZONECONFIG_BINCONFIG__MIDAMB \ - ((VL53L1_ZoneConfig_BinConfig_select) 2) -#define VL53L1_ZONECONFIG_BINCONFIG__HIGHAMB \ - ((VL53L1_ZoneConfig_BinConfig_select) 3) - - - - - - - - - - -typedef uint8_t VL53L1_GPIO_Interrupt_Mode; - -#define VL53L1_GPIOINTMODE_LEVEL_LOW \ - ((VL53L1_GPIO_Interrupt_Mode) 0) - - -#define VL53L1_GPIOINTMODE_LEVEL_HIGH \ - ((VL53L1_GPIO_Interrupt_Mode) 1) - - -#define VL53L1_GPIOINTMODE_OUT_OF_WINDOW \ - ((VL53L1_GPIO_Interrupt_Mode) 2) - - -#define VL53L1_GPIOINTMODE_IN_WINDOW \ - ((VL53L1_GPIO_Interrupt_Mode) 3) - - - - - - - -#endif - - - - - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_nvm.h b/drivers/input/misc/vl53L1/inc/vl53l1_nvm.h deleted file mode 100644 index fc09febb733b..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_nvm.h +++ /dev/null @@ -1,422 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_NVM_H_ -#define _VL53L1_NVM_H_ - -#include "vl53l1_ll_def.h" -#include "vl53l1_platform.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define VL53L1_NVM_POWER_UP_DELAY_US 50 -#define VL53L1_NVM_READ_TRIGGER_DELAY_US 5 - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_nvm_enable( - VL53L1_DEV Dev, - uint16_t nvm_ctrl_pulse_width, - int32_t nvm_power_up_delay_us); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_nvm_read( - VL53L1_DEV Dev, - uint8_t start_address, - uint8_t count, - uint8_t *pdata); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_nvm_disable( - VL53L1_DEV Dev); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_nvm_format_decode( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_decoded_nvm_data_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_nvm_decode_cal_peak_rate_map( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_cal_peak_rate_map_t *pdata); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_nvm_decode_additional_offset_cal_data( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_additional_offset_cal_data_t *pdata); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_nvm_decode_fmt_range_results_data( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_decoded_nvm_fmt_range_data_t *pdata); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_nvm_decode_fmt_info( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_decoded_nvm_fmt_info_t *pdata); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_nvm_decode_ews_info( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_decoded_nvm_ews_info_t *pdata); - - - - - - - - - - - - - - -void VL53L1_nvm_format_encode( - VL53L1_decoded_nvm_data_t *pnvm_info, - uint8_t *pnvm_data); - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_read_nvm_raw_data( - VL53L1_DEV Dev, - uint8_t start_address, - uint8_t count, - uint8_t *pnvm_raw_data); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_read_nvm( - VL53L1_DEV Dev, - uint8_t nvm_format, - VL53L1_decoded_nvm_data_t *pnvm_info); - - - - - - - - - - - - - -VL53L1_Error VL53L1_read_nvm_cal_peak_rate_map( - VL53L1_DEV Dev, - VL53L1_cal_peak_rate_map_t *pcal_data); - - - - - - - - - - - - - -VL53L1_Error VL53L1_read_nvm_additional_offset_cal_data( - VL53L1_DEV Dev, - VL53L1_additional_offset_cal_data_t *pcal_data); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_read_nvm_fmt_range_results_data( - VL53L1_DEV Dev, - uint16_t range_results_select, - VL53L1_decoded_nvm_fmt_range_data_t *prange_data); - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_nvm_debug.h b/drivers/input/misc/vl53L1/inc/vl53l1_nvm_debug.h deleted file mode 100644 index b42bcbafe03d..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_nvm_debug.h +++ /dev/null @@ -1,201 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_NVM_DEBUG_H_ -#define _VL53L1_NVM_DEBUG_H_ - -#include "vl53l1_ll_def.h" -#include "vl53l1_nvm_structs.h" - - - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifdef VL53L1_LOG_ENABLE - - - - - - - - - - - - -void VL53L1_print_nvm_raw_data( - uint8_t *pnvm_raw_data, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_decoded_nvm_data( - VL53L1_decoded_nvm_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_decoded_nvm_fmt_range_data( - VL53L1_decoded_nvm_fmt_range_data_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - - -void VL53L1_print_decoded_nvm_fmt_info( - VL53L1_decoded_nvm_fmt_info_t *pdata, - char *pprefix, - uint32_t trace_flags); - - - - - - - - - - - -void VL53L1_print_decoded_nvm_ews_info( - VL53L1_decoded_nvm_ews_info_t *pdata, - char *pprefix, - uint32_t trace_flags); - -#endif - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_nvm_map.h b/drivers/input/misc/vl53L1/inc/vl53l1_nvm_map.h deleted file mode 100644 index a9f76da706f7..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_nvm_map.h +++ /dev/null @@ -1,3246 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_NVM_MAP_H_ -#define _VL53L1_NVM_MAP_H_ - - -#ifdef __cplusplus -extern "C" -{ -#endif - - - - - - - -#define VL53L1_NVM__IDENTIFICATION__MODEL_ID 0x0008 - - - - - - - - - - - - - - - -#define VL53L1_NVM__IDENTIFICATION__MODULE_TYPE 0x000C - - - - - - - - - - - - - - - -#define VL53L1_NVM__IDENTIFICATION__REVISION_ID 0x000D - - - - - - - - - - - - - - - -#define VL53L1_NVM__IDENTIFICATION__MODULE_ID 0x000E - - - - - - - - - - - - - - - -#define VL53L1_NVM__I2C_VALID 0x0010 - - - - - - - - - - - - - - - -#define VL53L1_NVM__I2C_SLAVE__DEVICE_ADDRESS 0x0011 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__OSC_MEASURED__FAST_OSC_FREQUENCY 0x0014 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__FAST_OSC_TRIM_MAX 0x0016 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__FAST_OSC_FREQ_SET 0x0017 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SLOW_OSC_CALIBRATION 0x0018 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__OSC_MEASURED__FAST_OSC_FREQUENCY 0x001C - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FAST_OSC_TRIM_MAX 0x001E - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FAST_OSC_FREQ_SET 0x001F - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SLOW_OSC_CALIBRATION 0x0020 - - - - - - - - - - - - - - - -#define VL53L1_NVM__VHV_CONFIG_UNLOCK 0x0028 - - - - - - - - - - - - - - - -#define VL53L1_NVM__REF_SELVDDPIX 0x0029 - - - - - - - - - - - - - - - -#define VL53L1_NVM__REF_SELVQUENCH 0x002A - - - - - - - - - - - - - - - -#define VL53L1_NVM__REGAVDD1V2_SEL_REGDVDD1V2_SEL 0x002B - - - - - - - - - - - - - - - - -#define VL53L1_NVM__VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND 0x002C - - - - - - - - - - - - - - - - -#define VL53L1_NVM__VHV_CONFIG__COUNT_THRESH 0x002D - - - - - - - - - - - - - - - -#define VL53L1_NVM__VHV_CONFIG__OFFSET 0x002E - - - - - - - - - - - - - - - -#define VL53L1_NVM__VHV_CONFIG__INIT 0x002F - - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY__VCSEL_TRIM_LL 0x0030 - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY__VCSEL_SELION_LL 0x0031 - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY__VCSEL_SELION_MAX_LL 0x0032 - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY__MULT_LL 0x0034 - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY__CLIP_LL 0x0035 - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY__VCSEL_TRIM_LD 0x0038 - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY__VCSEL_SELION_LD 0x0039 - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY__VCSEL_SELION_MAX_LD 0x003A - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY__MULT_LD 0x003C - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY__CLIP_LD 0x003D - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY_LOCK_BYTE 0x0040 - - - - - - - - - - - - - - - -#define VL53L1_NVM__LASER_SAFETY_UNLOCK_BYTE 0x0044 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_0_ 0x0048 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_1_ 0x0049 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_2_ 0x004A - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_3_ 0x004B - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_4_ 0x004C - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_5_ 0x004D - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_6_ 0x004E - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_7_ 0x004F - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_8_ 0x0050 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_9_ 0x0051 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_10_ 0x0052 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_11_ 0x0053 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_12_ 0x0054 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_13_ 0x0055 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_14_ 0x0056 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_15_ 0x0057 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_16_ 0x0058 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_17_ 0x0059 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_18_ 0x005A - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_19_ 0x005B - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_20_ 0x005C - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_21_ 0x005D - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_22_ 0x005E - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_23_ 0x005F - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_24_ 0x0060 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_25_ 0x0061 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_26_ 0x0062 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_27_ 0x0063 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_28_ 0x0064 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_29_ 0x0065 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_30_ 0x0066 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_RTN_31_ 0x0067 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC1_0_ 0x0068 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC1_1_ 0x0069 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC1_2_ 0x006A - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC1_3_ 0x006B - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC1_4_ 0x006C - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC1_5_ 0x006D - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC2_0_ 0x0070 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC2_1_ 0x0071 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC2_2_ 0x0072 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC2_3_ 0x0073 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC2_4_ 0x0074 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC2_5_ 0x0075 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC3_0_ 0x0078 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC3_1_ 0x0079 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC3_2_ 0x007A - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC3_3_ 0x007B - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC3_4_ 0x007C - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC3_5_ 0x007D - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_0_ 0x0080 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_1_ 0x0081 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_2_ 0x0082 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_3_ 0x0083 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_4_ 0x0084 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_5_ 0x0085 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_6_ 0x0086 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_7_ 0x0087 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_8_ 0x0088 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_9_ 0x0089 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_10_ 0x008A - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_11_ 0x008B - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_12_ 0x008C - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_13_ 0x008D - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_14_ 0x008E - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_15_ 0x008F - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_16_ 0x0090 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_17_ 0x0091 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_18_ 0x0092 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_19_ 0x0093 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_20_ 0x0094 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_21_ 0x0095 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_22_ 0x0096 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_23_ 0x0097 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_24_ 0x0098 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_25_ 0x0099 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_26_ 0x009A - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_27_ 0x009B - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_28_ 0x009C - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_29_ 0x009D - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_30_ 0x009E - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_RTN_31_ 0x009F - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC1_0_ 0x00A0 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC1_1_ 0x00A1 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC1_2_ 0x00A2 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC1_3_ 0x00A3 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC1_4_ 0x00A4 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC1_5_ 0x00A5 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC2_0_ 0x00A8 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC2_1_ 0x00A9 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC2_2_ 0x00AA - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC2_3_ 0x00AB - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC2_4_ 0x00AC - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC2_5_ 0x00AD - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC3_0_ 0x00B0 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC3_1_ 0x00B1 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC3_2_ 0x00B2 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC3_3_ 0x00B3 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC3_4_ 0x00B4 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC3_5_ 0x00B5 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__ROI_CONFIG__MODE_ROI_CENTRE_SPAD 0x00B8 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__ROI_CONFIG__MODE_ROI_XY_SIZE 0x00B9 - - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__REF_SPAD_APPLY__NUM_REQUESTED_REF_SPAD 0x00BC - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__REF_SPAD_MAN__REF_LOCATION 0x00BD - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__MM_CONFIG__INNER_OFFSET_MM 0x00C0 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__MM_CONFIG__OUTER_OFFSET_MM 0x00C2 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__ALGO__PART_TO_PART_RANGE_OFFSET_MM 0x00C4 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS 0x00C8 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS 0x00CA - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS 0x00CC - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPARE_HOST_CONFIG__NVM_CONFIG_SPARE_0 0x00CE - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SPARE_HOST_CONFIG__NVM_CONFIG_SPARE_1 0x00CF - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUSTOMER_NVM_SPACE_PROGRAMMED 0x00E0 - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__I2C_SLAVE__DEVICE_ADDRESS 0x00E4 - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__REF_SPAD_APPLY__NUM_REQUESTED_REF_SPAD 0x00E8 - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__REF_SPAD_MAN__REF_LOCATION 0x00E9 - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__MM_CONFIG__INNER_OFFSET_MM 0x00EC - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__MM_CONFIG__OUTER_OFFSET_MM 0x00EE - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__ALGO__PART_TO_PART_RANGE_OFFSET_MM 0x00F0 - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS 0x00F4 - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS 0x00F6 - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS 0x00F8 - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__SPARE_HOST_CONFIG__NVM_CONFIG_SPARE_0 0x00FA - - - - - - - - - - - - - - - -#define VL53L1_NVM__CUST__SPARE_HOST_CONFIG__NVM_CONFIG_SPARE_1 0x00FB - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_0 0x01DC - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_1 0x01DD - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_2 0x01DE - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_3 0x01DF - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_4 0x01E0 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_5 0x01E1 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_6 0x01E2 - - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_7 0x01E3 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_8 0x01E4 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_9 0x01E5 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_10 0x01E6 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_11 0x01E7 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_12 0x01E8 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_13 0x01E9 - - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_14 0x01EA - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__FGC__BYTE_15 0x01EB - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__TEST_PROGRAM_MAJOR_MINOR 0x01EC - - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__MAP_MAJOR_MINOR 0x01ED - - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__YEAR_MONTH 0x01EE - - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__DAY_MODULE_DATE_PHASE 0x01EF - - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__TIME 0x01F0 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__TESTER_ID 0x01F2 - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__SITE_ID 0x01F3 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__TEST_PROGRAM_MAJOR_MINOR 0x01F4 - - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__PROBE_CARD_MAJOR_MINOR 0x01F5 - - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__TESTER_ID 0x01F6 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__LOT__BYTE_0 0x01F8 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__LOT__BYTE_1 0x01F9 - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__LOT__BYTE_2 0x01FA - - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__LOT__BYTE_3 0x01FB - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__LOT__BYTE_4 0x01FC - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__LOT__BYTE_5 0x01FD - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__WAFER 0x01FD - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__XCOORD 0x01FE - - - - - - - - - - - - - - - -#define VL53L1_NVM__EWS__YCOORD 0x01FF - - - - - - - - - - - - - - - - -#define VL53L1_NVM__FMT__CAL_PEAK_RATE_MAP_DATA_INDEX 0x015C -#define VL53L1_NVM__FMT__CAL_PEAK_RATE_MAP_DATA_SIZE 56 - -#define VL53L1_NVM__FMT__ADDITIONAL_OFFSET_CAL_DATA_INDEX 0x0194 -#define VL53L1_NVM__FMT__ADDITIONAL_OFFSET_CAL_DATA_SIZE 8 - -#define VL53L1_NVM__FMT__RANGE_RESULTS__140MM_MM_PRE_RANGE 0x019C -#define VL53L1_NVM__FMT__RANGE_RESULTS__140MM_DARK 0x01AC -#define VL53L1_NVM__FMT__RANGE_RESULTS__400MM_DARK 0x01BC -#define VL53L1_NVM__FMT__RANGE_RESULTS__400MM_AMBIENT 0x01CC -#define VL53L1_NVM__FMT__RANGE_RESULTS__SIZE_BYTES 16 - - - - - - - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_nvm_structs.h b/drivers/input/misc/vl53L1/inc/vl53l1_nvm_structs.h deleted file mode 100644 index 5676bb6a487a..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_nvm_structs.h +++ /dev/null @@ -1,804 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_NVM_STRUCTS_H_ -#define _VL53L1_NVM_STRUCTS_H_ - - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "vl53l1_platform.h" -#include "vl53l1_ll_def.h" - - - - - - - - - - -typedef struct { - - uint16_t result__actual_effective_rtn_spads; - - - uint8_t ref_spad_array__num_requested_ref_spads; - - - uint8_t ref_spad_array__ref_location; - - - uint16_t result__peak_signal_count_rate_rtn_mcps; - - - uint16_t result__ambient_count_rate_rtn_mcps; - - - uint16_t result__peak_signal_count_rate_ref_mcps; - - - uint16_t result__ambient_count_rate_ref_mcps; - - - uint16_t measured_distance_mm; - - - uint16_t measured_distance_stdev_mm; - - - -} VL53L1_decoded_nvm_fmt_range_data_t; - - - - - - - - - - -typedef struct { - - char nvm__fmt__fgc[19]; - - - uint8_t nvm__fmt__test_program_major; - - - - - - uint8_t nvm__fmt__test_program_minor; - - - - - - uint8_t nvm__fmt__map_major; - - - - - - uint8_t nvm__fmt__map_minor; - - - - - - uint8_t nvm__fmt__year; - - - - - - uint8_t nvm__fmt__month; - - - - - - uint8_t nvm__fmt__day; - - - - - - uint8_t nvm__fmt__module_date_phase; - - - - - - uint16_t nvm__fmt__time; - - - - - - uint8_t nvm__fmt__tester_id; - - - - - - uint8_t nvm__fmt__site_id; - - - - - - uint8_t nvm__ews__test_program_major; - - - - - - uint8_t nvm__ews__test_program_minor; - - - - - - uint8_t nvm__ews__probe_card_major; - - - - - - uint8_t nvm__ews__probe_card_minor; - - - - - - uint8_t nvm__ews__tester_id; - - - - - - - char nvm__ews__lot[8]; - - - uint8_t nvm__ews__wafer; - - - - - - uint8_t nvm__ews__xcoord; - - - - - - uint8_t nvm__ews__ycoord; - - - - - -} VL53L1_decoded_nvm_fmt_info_t; - - - - - - - - - - -typedef struct { - - uint8_t nvm__ews__test_program_major; - - - - - - uint8_t nvm__ews__test_program_minor; - - - - - - uint8_t nvm__ews__probe_card_major; - - - - - - uint8_t nvm__ews__probe_card_minor; - - - - - - uint8_t nvm__ews__tester_id; - - - - - - - char nvm__ews__lot[8]; - - - uint8_t nvm__ews__wafer; - - - - - - uint8_t nvm__ews__xcoord; - - - - - - uint8_t nvm__ews__ycoord; - - - - - - -} VL53L1_decoded_nvm_ews_info_t; - - - - - - - - - - -typedef struct { - uint8_t nvm__identification_model_id; - - - - - - uint8_t nvm__identification_module_type; - - - - - - uint8_t nvm__identification_revision_id; - - - - - - uint16_t nvm__identification_module_id; - - - - - - uint8_t nvm__i2c_valid; - - - - - - uint8_t nvm__i2c_device_address_ews; - - - - - - uint16_t nvm__ews__fast_osc_frequency; - - - - - - uint8_t nvm__ews__fast_osc_trim_max; - - - - - - uint8_t nvm__ews__fast_osc_freq_set; - - - - - - uint16_t nvm__ews__slow_osc_calibration; - - - - - - uint16_t nvm__fmt__fast_osc_frequency; - - - - - - uint8_t nvm__fmt__fast_osc_trim_max; - - - - - - uint8_t nvm__fmt__fast_osc_freq_set; - - - - - - uint16_t nvm__fmt__slow_osc_calibration; - - - - - - uint8_t nvm__vhv_config_unlock; - - - - - - uint8_t nvm__ref_selvddpix; - - - - - - uint8_t nvm__ref_selvquench; - - - - - - uint8_t nvm__regavdd1v2_sel; - - - - - - uint8_t nvm__regdvdd1v2_sel; - - - - - - uint8_t nvm__vhv_timeout__macrop; - - - - - - uint8_t nvm__vhv_loop_bound; - - - - - - uint8_t nvm__vhv_count_threshold; - - - - - - uint8_t nvm__vhv_offset; - - - - - - uint8_t nvm__vhv_init_enable; - - - - - - uint8_t nvm__vhv_init_value; - - - - - - uint8_t nvm__laser_safety_vcsel_trim_ll; - - - - - - uint8_t nvm__laser_safety_vcsel_selion_ll; - - - - - - uint8_t nvm__laser_safety_vcsel_selion_max_ll; - - - - - - uint8_t nvm__laser_safety_mult_ll; - - - - - - uint8_t nvm__laser_safety_clip_ll; - - - - - - uint8_t nvm__laser_safety_vcsel_trim_ld; - - - - - - uint8_t nvm__laser_safety_vcsel_selion_ld; - - - - - - uint8_t nvm__laser_safety_vcsel_selion_max_ld; - - - - - - uint8_t nvm__laser_safety_mult_ld; - - - - - - uint8_t nvm__laser_safety_clip_ld; - - - - - - uint8_t nvm__laser_safety_lock_byte; - - - - - - uint8_t nvm__laser_safety_unlock_byte; - - - - - - uint8_t nvm__ews__spad_enables_rtn[VL53L1_RTN_SPAD_BUFFER_SIZE]; - - - - - - uint8_t nvm__ews__spad_enables_ref__loc1[VL53L1_REF_SPAD_BUFFER_SIZE]; - - - - - - uint8_t nvm__ews__spad_enables_ref__loc2[VL53L1_REF_SPAD_BUFFER_SIZE]; - - - - - - uint8_t nvm__ews__spad_enables_ref__loc3[VL53L1_REF_SPAD_BUFFER_SIZE]; - - - - - - uint8_t nvm__fmt__spad_enables_rtn[VL53L1_RTN_SPAD_BUFFER_SIZE]; - - - - - - uint8_t nvm__fmt__spad_enables_ref__loc1[VL53L1_REF_SPAD_BUFFER_SIZE]; - - - - - - uint8_t nvm__fmt__spad_enables_ref__loc2[VL53L1_REF_SPAD_BUFFER_SIZE]; - - - - - - uint8_t nvm__fmt__spad_enables_ref__loc3[VL53L1_REF_SPAD_BUFFER_SIZE]; - - - - - - uint8_t nvm__fmt__roi_config__mode_roi_centre_spad; - - - - - - uint8_t nvm__fmt__roi_config__mode_roi_x_size; - - - - - - uint8_t nvm__fmt__roi_config__mode_roi_y_size; - - - - - - uint8_t nvm__fmt__ref_spad_apply__num_requested_ref_spad; - - - - - - uint8_t nvm__fmt__ref_spad_man__ref_location; - - - - - - uint16_t nvm__fmt__mm_config__inner_offset_mm; - - - - - - uint16_t nvm__fmt__mm_config__outer_offset_mm; - - - - - - uint16_t nvm__fmt__algo_part_to_part_range_offset_mm; - - - - - - uint16_t nvm__fmt__algo__crosstalk_compensation_plane_offset_kcps; - - - - - - uint16_t nvm__fmt__algo__crosstalk_compensation_x_plane_gradient_kcps; - - - - - - uint16_t nvm__fmt__algo__crosstalk_compensation_y_plane_gradient_kcps; - - - - - - uint8_t nvm__fmt__spare__host_config__nvm_config_spare_0; - - - - - - uint8_t nvm__fmt__spare__host_config__nvm_config_spare_1; - - - - - - uint8_t nvm__customer_space_programmed; - - - - - - uint8_t nvm__cust__i2c_device_address; - - - - - - uint8_t nvm__cust__ref_spad_apply__num_requested_ref_spad; - - - - - - uint8_t nvm__cust__ref_spad_man__ref_location; - - - - - - uint16_t nvm__cust__mm_config__inner_offset_mm; - - - - - - uint16_t nvm__cust__mm_config__outer_offset_mm; - - - - - - uint16_t nvm__cust__algo_part_to_part_range_offset_mm; - - - - - - uint16_t nvm__cust__algo__crosstalk_compensation_plane_offset_kcps; - - - - - - uint16_t nvm__cust__algo__crosstalk_compensation_x_plane_gradient_kcps; - - - - - - uint16_t nvm__cust__algo__crosstalk_compensation_y_plane_gradient_kcps; - - - - - - uint8_t nvm__cust__spare__host_config__nvm_config_spare_0; - - - - - - uint8_t nvm__cust__spare__host_config__nvm_config_spare_1; - - - - - - - VL53L1_cal_peak_rate_map_t fmt_peak_rate_map; - VL53L1_additional_offset_cal_data_t fmt_add_offset_data; - VL53L1_decoded_nvm_fmt_range_data_t fmt_range_data[VL53L1_NVM_MAX_FMT_RANGE_DATA]; - VL53L1_decoded_nvm_fmt_info_t fmt_info; - VL53L1_decoded_nvm_ews_info_t ews_info; - -} VL53L1_decoded_nvm_data_t; - - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_register_funcs.h b/drivers/input/misc/vl53L1/inc/vl53l1_register_funcs.h deleted file mode 100644 index b6e2bab57832..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_register_funcs.h +++ /dev/null @@ -1,1693 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_REGISTER_FUNCS_H_ -#define _VL53L1_REGISTER_FUNCS_H_ - -#include "vl53l1_platform.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_static_nvm_managed( - VL53L1_static_nvm_managed_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_static_nvm_managed( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_static_nvm_managed_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_static_nvm_managed( - VL53L1_DEV Dev, - VL53L1_static_nvm_managed_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_static_nvm_managed( - VL53L1_DEV Dev, - VL53L1_static_nvm_managed_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_customer_nvm_managed( - VL53L1_customer_nvm_managed_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_customer_nvm_managed( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_customer_nvm_managed_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_customer_nvm_managed( - VL53L1_DEV Dev, - VL53L1_customer_nvm_managed_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_customer_nvm_managed( - VL53L1_DEV Dev, - VL53L1_customer_nvm_managed_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_static_config( - VL53L1_static_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_static_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_static_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_static_config( - VL53L1_DEV Dev, - VL53L1_static_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_static_config( - VL53L1_DEV Dev, - VL53L1_static_config_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_general_config( - VL53L1_general_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_general_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_general_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_general_config( - VL53L1_DEV Dev, - VL53L1_general_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_general_config( - VL53L1_DEV Dev, - VL53L1_general_config_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_timing_config( - VL53L1_timing_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_timing_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_timing_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_timing_config( - VL53L1_DEV Dev, - VL53L1_timing_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_timing_config( - VL53L1_DEV Dev, - VL53L1_timing_config_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_dynamic_config( - VL53L1_dynamic_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_dynamic_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_dynamic_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_dynamic_config( - VL53L1_DEV Dev, - VL53L1_dynamic_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_dynamic_config( - VL53L1_DEV Dev, - VL53L1_dynamic_config_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_system_control( - VL53L1_system_control_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_system_control( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_system_control_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_system_control( - VL53L1_DEV Dev, - VL53L1_system_control_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_system_control( - VL53L1_DEV Dev, - VL53L1_system_control_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_system_results( - VL53L1_system_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_system_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_system_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_system_results( - VL53L1_DEV Dev, - VL53L1_system_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_system_results( - VL53L1_DEV Dev, - VL53L1_system_results_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_core_results( - VL53L1_core_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_core_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_core_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_core_results( - VL53L1_DEV Dev, - VL53L1_core_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_core_results( - VL53L1_DEV Dev, - VL53L1_core_results_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_debug_results( - VL53L1_debug_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_debug_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_debug_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_debug_results( - VL53L1_DEV Dev, - VL53L1_debug_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_debug_results( - VL53L1_DEV Dev, - VL53L1_debug_results_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_nvm_copy_data( - VL53L1_nvm_copy_data_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_nvm_copy_data( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_nvm_copy_data_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_nvm_copy_data( - VL53L1_DEV Dev, - VL53L1_nvm_copy_data_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_nvm_copy_data( - VL53L1_DEV Dev, - VL53L1_nvm_copy_data_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_prev_shadow_system_results( - VL53L1_prev_shadow_system_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_prev_shadow_system_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_prev_shadow_system_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_prev_shadow_system_results( - VL53L1_DEV Dev, - VL53L1_prev_shadow_system_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_prev_shadow_system_results( - VL53L1_DEV Dev, - VL53L1_prev_shadow_system_results_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_prev_shadow_core_results( - VL53L1_prev_shadow_core_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_prev_shadow_core_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_prev_shadow_core_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_prev_shadow_core_results( - VL53L1_DEV Dev, - VL53L1_prev_shadow_core_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_prev_shadow_core_results( - VL53L1_DEV Dev, - VL53L1_prev_shadow_core_results_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_patch_debug( - VL53L1_patch_debug_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_patch_debug( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_patch_debug_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_patch_debug( - VL53L1_DEV Dev, - VL53L1_patch_debug_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_patch_debug( - VL53L1_DEV Dev, - VL53L1_patch_debug_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_gph_general_config( - VL53L1_gph_general_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_gph_general_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_gph_general_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_gph_general_config( - VL53L1_DEV Dev, - VL53L1_gph_general_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_gph_general_config( - VL53L1_DEV Dev, - VL53L1_gph_general_config_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_gph_static_config( - VL53L1_gph_static_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_gph_static_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_gph_static_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_gph_static_config( - VL53L1_DEV Dev, - VL53L1_gph_static_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_gph_static_config( - VL53L1_DEV Dev, - VL53L1_gph_static_config_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_gph_timing_config( - VL53L1_gph_timing_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_gph_timing_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_gph_timing_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_gph_timing_config( - VL53L1_DEV Dev, - VL53L1_gph_timing_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_gph_timing_config( - VL53L1_DEV Dev, - VL53L1_gph_timing_config_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_fw_internal( - VL53L1_fw_internal_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_fw_internal( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_fw_internal_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_fw_internal( - VL53L1_DEV Dev, - VL53L1_fw_internal_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_fw_internal( - VL53L1_DEV Dev, - VL53L1_fw_internal_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_patch_results( - VL53L1_patch_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_patch_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_patch_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_patch_results( - VL53L1_DEV Dev, - VL53L1_patch_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_patch_results( - VL53L1_DEV Dev, - VL53L1_patch_results_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_shadow_system_results( - VL53L1_shadow_system_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_shadow_system_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_shadow_system_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_shadow_system_results( - VL53L1_DEV Dev, - VL53L1_shadow_system_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_shadow_system_results( - VL53L1_DEV Dev, - VL53L1_shadow_system_results_t *pdata); - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_encode_shadow_core_results( - VL53L1_shadow_core_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_i2c_decode_shadow_core_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_shadow_core_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_set_shadow_core_results( - VL53L1_DEV Dev, - VL53L1_shadow_core_results_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_get_shadow_core_results( - VL53L1_DEV Dev, - VL53L1_shadow_core_results_t *pdata); - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_register_map.h b/drivers/input/misc/vl53L1/inc/vl53l1_register_map.h deleted file mode 100644 index cb4be06573c2..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_register_map.h +++ /dev/null @@ -1,13113 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_REGISTER_MAP_H_ -#define _VL53L1_REGISTER_MAP_H_ - - - - - - -#define VL53L1_SOFT_RESET 0x0000 - - - - - - - -#define VL53L1_I2C_SLAVE__DEVICE_ADDRESS 0x0001 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__VHV_REF_SEL_VDDPIX 0x0002 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__VHV_REF_SEL_VQUENCH 0x0003 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__REG_AVDD1V2_SEL 0x0004 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__FAST_OSC__TRIM 0x0005 - - - - - - - - - - - - - - - -#define VL53L1_OSC_MEASURED__FAST_OSC__FREQUENCY 0x0006 - - - - - - - - - - - - - - - -#define VL53L1_OSC_MEASURED__FAST_OSC__FREQUENCY_HI 0x0006 - - - - - - - -#define VL53L1_OSC_MEASURED__FAST_OSC__FREQUENCY_LO 0x0007 - - - - - - - -#define VL53L1_VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND 0x0008 - - - - - - - - - - - - - - - - -#define VL53L1_VHV_CONFIG__COUNT_THRESH 0x0009 - - - - - - - - - - - - - - - -#define VL53L1_VHV_CONFIG__OFFSET 0x000A - - - - - - - - - - - - - - - -#define VL53L1_VHV_CONFIG__INIT 0x000B - - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_REF_0 0x000D - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_REF_1 0x000E - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_REF_2 0x000F - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_REF_3 0x0010 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_REF_4 0x0011 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_REF_5 0x0012 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__REF_EN_START_SELECT 0x0013 - - - - - - - - - - - - - - - -#define VL53L1_REF_SPAD_MAN__NUM_REQUESTED_REF_SPADS 0x0014 - - - - - - - - - - - - - - - -#define VL53L1_REF_SPAD_MAN__REF_LOCATION 0x0015 - - - - - - - - - - - - - - - -#define VL53L1_ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS 0x0016 - - - - - - - - - - - - - - - -#define VL53L1_ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS_HI 0x0016 - - - - - - - -#define VL53L1_ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS_LO 0x0017 - - - - - - - -#define VL53L1_ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS 0x0018 - - - - - - - - - - - - - - - -#define VL53L1_ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS_HI 0x0018 - - - - - - - -#define VL53L1_ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS_LO 0x0019 - - - - - - - -#define VL53L1_ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS 0x001A - - - - - - - - - - - - - - - -#define VL53L1_ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS_HI 0x001A - - - - - - - -#define VL53L1_ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS_LO 0x001B - - - - - - - -#define VL53L1_REF_SPAD_CHAR__TOTAL_RATE_TARGET_MCPS 0x001C - - - - - - - - - - - - - - - -#define VL53L1_REF_SPAD_CHAR__TOTAL_RATE_TARGET_MCPS_HI 0x001C - - - - - - - -#define VL53L1_REF_SPAD_CHAR__TOTAL_RATE_TARGET_MCPS_LO 0x001D - - - - - - - -#define VL53L1_ALGO__PART_TO_PART_RANGE_OFFSET_MM 0x001E - - - - - - - - - - - - - - - -#define VL53L1_ALGO__PART_TO_PART_RANGE_OFFSET_MM_HI 0x001E - - - - - - - -#define VL53L1_ALGO__PART_TO_PART_RANGE_OFFSET_MM_LO 0x001F - - - - - - - -#define VL53L1_MM_CONFIG__INNER_OFFSET_MM 0x0020 - - - - - - - - - - - - - - - -#define VL53L1_MM_CONFIG__INNER_OFFSET_MM_HI 0x0020 - - - - - - - -#define VL53L1_MM_CONFIG__INNER_OFFSET_MM_LO 0x0021 - - - - - - - -#define VL53L1_MM_CONFIG__OUTER_OFFSET_MM 0x0022 - - - - - - - - - - - - - - - -#define VL53L1_MM_CONFIG__OUTER_OFFSET_MM_HI 0x0022 - - - - - - - -#define VL53L1_MM_CONFIG__OUTER_OFFSET_MM_LO 0x0023 - - - - - - - -#define VL53L1_DSS_CONFIG__TARGET_TOTAL_RATE_MCPS 0x0024 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CONFIG__TARGET_TOTAL_RATE_MCPS_HI 0x0024 - - - - - - - -#define VL53L1_DSS_CONFIG__TARGET_TOTAL_RATE_MCPS_LO 0x0025 - - - - - - - -#define VL53L1_DEBUG__CTRL 0x0026 - - - - - - - - - - - - - - - -#define VL53L1_TEST_MODE__CTRL 0x0027 - - - - - - - - - - - - - - - -#define VL53L1_CLK_GATING__CTRL 0x0028 - - - - - - - - - - - - - - - - - - -#define VL53L1_NVM_BIST__CTRL 0x0029 - - - - - - - - - - - - - - - - -#define VL53L1_NVM_BIST__NUM_NVM_WORDS 0x002A - - - - - - - - - - - - - - - -#define VL53L1_NVM_BIST__START_ADDRESS 0x002B - - - - - - - - - - - - - - - -#define VL53L1_HOST_IF__STATUS 0x002C - - - - - - - - - - - - - - - -#define VL53L1_PAD_I2C_HV__CONFIG 0x002D - - - - - - - - - - - - - - - - - - - - -#define VL53L1_PAD_I2C_HV__EXTSUP_CONFIG 0x002E - - - - - - - - - - - - - - - -#define VL53L1_GPIO_HV_PAD__CTRL 0x002F - - - - - - - - - - - - - - - - -#define VL53L1_GPIO_HV_MUX__CTRL 0x0030 - - - - - - - - - - - - - - - - -#define VL53L1_GPIO__TIO_HV_STATUS 0x0031 - - - - - - - - - - - - - - - - -#define VL53L1_GPIO__FIO_HV_STATUS 0x0032 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__SPAD_SEL_PSWIDTH 0x0033 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__VCSEL_PULSE_WIDTH_OFFSET 0x0034 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__FAST_OSC__CONFIG_CTRL 0x0035 - - - - - - - - - - - - - - - -#define VL53L1_SIGMA_ESTIMATOR__EFFECTIVE_PULSE_WIDTH_NS 0x0036 - - - - - - - - - - - - - - - -#define VL53L1_SIGMA_ESTIMATOR__EFFECTIVE_AMBIENT_WIDTH_NS 0x0037 - - - - - - - - - - - - - - - -#define VL53L1_SIGMA_ESTIMATOR__SIGMA_REF_MM 0x0038 - - - - - - - - - - - - - - - -#define VL53L1_ALGO__CROSSTALK_COMPENSATION_VALID_HEIGHT_MM 0x0039 - - - - - - - - - - - - - - - -#define VL53L1_SPARE_HOST_CONFIG__STATIC_CONFIG_SPARE_0 0x003A - - - - - - - - - - - - - - - -#define VL53L1_SPARE_HOST_CONFIG__STATIC_CONFIG_SPARE_1 0x003B - - - - - - - - - - - - - - - -#define VL53L1_ALGO__RANGE_IGNORE_THRESHOLD_MCPS 0x003C - - - - - - - - - - - - - - - -#define VL53L1_ALGO__RANGE_IGNORE_THRESHOLD_MCPS_HI 0x003C - - - - - - - -#define VL53L1_ALGO__RANGE_IGNORE_THRESHOLD_MCPS_LO 0x003D - - - - - - - -#define VL53L1_ALGO__RANGE_IGNORE_VALID_HEIGHT_MM 0x003E - - - - - - - - - - - - - - - -#define VL53L1_ALGO__RANGE_MIN_CLIP 0x003F - - - - - - - - - - - - - - - - -#define VL53L1_ALGO__CONSISTENCY_CHECK__TOLERANCE 0x0040 - - - - - - - - - - - - - - - -#define VL53L1_SPARE_HOST_CONFIG__STATIC_CONFIG_SPARE_2 0x0041 - - - - - - - - - - - - - - - -#define VL53L1_SD_CONFIG__RESET_STAGES_MSB 0x0042 - - - - - - - - - - - - - - - -#define VL53L1_SD_CONFIG__RESET_STAGES_LSB 0x0043 - - - - - - - - - - - - - - - - -#define VL53L1_GPH_CONFIG__STREAM_COUNT_UPDATE_VALUE 0x0044 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__STREAM_DIVIDER 0x0045 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__INTERRUPT_CONFIG_GPIO 0x0046 - - - - - - - - - - - - - - - - - - - - -#define VL53L1_CAL_CONFIG__VCSEL_START 0x0047 - - - - - - - - - - - - - - - -#define VL53L1_CAL_CONFIG__REPEAT_RATE 0x0048 - - - - - - - - - - - - - - - -#define VL53L1_CAL_CONFIG__REPEAT_RATE_HI 0x0048 - - - - - - - -#define VL53L1_CAL_CONFIG__REPEAT_RATE_LO 0x0049 - - - - - - - -#define VL53L1_GLOBAL_CONFIG__VCSEL_WIDTH 0x004A - - - - - - - - - - - - - - - -#define VL53L1_PHASECAL_CONFIG__TIMEOUT_MACROP 0x004B - - - - - - - - - - - - - - - -#define VL53L1_PHASECAL_CONFIG__TARGET 0x004C - - - - - - - - - - - - - - - -#define VL53L1_PHASECAL_CONFIG__OVERRIDE 0x004D - - - - - - - - - - - - - - - -#define VL53L1_DSS_CONFIG__ROI_MODE_CONTROL 0x004F - - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__THRESH_RATE_HIGH 0x0050 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__THRESH_RATE_HIGH_HI 0x0050 - - - - - - - -#define VL53L1_SYSTEM__THRESH_RATE_HIGH_LO 0x0051 - - - - - - - -#define VL53L1_SYSTEM__THRESH_RATE_LOW 0x0052 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__THRESH_RATE_LOW_HI 0x0052 - - - - - - - -#define VL53L1_SYSTEM__THRESH_RATE_LOW_LO 0x0053 - - - - - - - -#define VL53L1_DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT 0x0054 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT_HI 0x0054 - - - - - - - -#define VL53L1_DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT_LO 0x0055 - - - - - - - -#define VL53L1_DSS_CONFIG__MANUAL_BLOCK_SELECT 0x0056 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CONFIG__APERTURE_ATTENUATION 0x0057 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CONFIG__MAX_SPADS_LIMIT 0x0058 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CONFIG__MIN_SPADS_LIMIT 0x0059 - - - - - - - - - - - - - - - -#define VL53L1_MM_CONFIG__TIMEOUT_MACROP_A_HI 0x005A - - - - - - - - - - - - - - - -#define VL53L1_MM_CONFIG__TIMEOUT_MACROP_A_LO 0x005B - - - - - - - - - - - - - - - -#define VL53L1_MM_CONFIG__TIMEOUT_MACROP_B_HI 0x005C - - - - - - - - - - - - - - - -#define VL53L1_MM_CONFIG__TIMEOUT_MACROP_B_LO 0x005D - - - - - - - - - - - - - - - -#define VL53L1_RANGE_CONFIG__TIMEOUT_MACROP_A_HI 0x005E - - - - - - - - - - - - - - - -#define VL53L1_RANGE_CONFIG__TIMEOUT_MACROP_A_LO 0x005F - - - - - - - - - - - - - - - -#define VL53L1_RANGE_CONFIG__VCSEL_PERIOD_A 0x0060 - - - - - - - - - - - - - - - -#define VL53L1_RANGE_CONFIG__TIMEOUT_MACROP_B_HI 0x0061 - - - - - - - - - - - - - - - -#define VL53L1_RANGE_CONFIG__TIMEOUT_MACROP_B_LO 0x0062 - - - - - - - - - - - - - - - -#define VL53L1_RANGE_CONFIG__VCSEL_PERIOD_B 0x0063 - - - - - - - - - - - - - - - -#define VL53L1_RANGE_CONFIG__SIGMA_THRESH 0x0064 - - - - - - - - - - - - - - - -#define VL53L1_RANGE_CONFIG__SIGMA_THRESH_HI 0x0064 - - - - - - - -#define VL53L1_RANGE_CONFIG__SIGMA_THRESH_LO 0x0065 - - - - - - - -#define VL53L1_RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS 0x0066 - - - - - - - - - - - - - - - -#define VL53L1_RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS_HI 0x0066 - - - - - - - -#define VL53L1_RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS_LO 0x0067 - - - - - - - -#define VL53L1_RANGE_CONFIG__VALID_PHASE_LOW 0x0068 - - - - - - - - - - - - - - - -#define VL53L1_RANGE_CONFIG__VALID_PHASE_HIGH 0x0069 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__INTERMEASUREMENT_PERIOD 0x006C - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__INTERMEASUREMENT_PERIOD_3 0x006C - - - - - - - -#define VL53L1_SYSTEM__INTERMEASUREMENT_PERIOD_2 0x006D - - - - - - - -#define VL53L1_SYSTEM__INTERMEASUREMENT_PERIOD_1 0x006E - - - - - - - -#define VL53L1_SYSTEM__INTERMEASUREMENT_PERIOD_0 0x006F - - - - - - - -#define VL53L1_SYSTEM__FRACTIONAL_ENABLE 0x0070 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__GROUPED_PARAMETER_HOLD_0 0x0071 - - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__THRESH_HIGH 0x0072 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__THRESH_HIGH_HI 0x0072 - - - - - - - -#define VL53L1_SYSTEM__THRESH_HIGH_LO 0x0073 - - - - - - - -#define VL53L1_SYSTEM__THRESH_LOW 0x0074 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__THRESH_LOW_HI 0x0074 - - - - - - - -#define VL53L1_SYSTEM__THRESH_LOW_LO 0x0075 - - - - - - - -#define VL53L1_SYSTEM__ENABLE_XTALK_PER_QUADRANT 0x0076 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__SEED_CONFIG 0x0077 - - - - - - - - - - - - - - - - -#define VL53L1_SD_CONFIG__WOI_SD0 0x0078 - - - - - - - - - - - - - - - -#define VL53L1_SD_CONFIG__WOI_SD1 0x0079 - - - - - - - - - - - - - - - -#define VL53L1_SD_CONFIG__INITIAL_PHASE_SD0 0x007A - - - - - - - - - - - - - - - -#define VL53L1_SD_CONFIG__INITIAL_PHASE_SD1 0x007B - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__GROUPED_PARAMETER_HOLD_1 0x007C - - - - - - - - - - - - - - - - -#define VL53L1_SD_CONFIG__FIRST_ORDER_SELECT 0x007D - - - - - - - - - - - - - - - - -#define VL53L1_SD_CONFIG__QUANTIFIER 0x007E - - - - - - - - - - - - - - - -#define VL53L1_ROI_CONFIG__USER_ROI_CENTRE_SPAD 0x007F - - - - - - - - - - - - - - - -#define VL53L1_ROI_CONFIG__USER_ROI_REQUESTED_GLOBAL_XY_SIZE 0x0080 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__SEQUENCE_CONFIG 0x0081 - - - - - - - - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__GROUPED_PARAMETER_HOLD 0x0082 - - - - - - - - - - - - - - - - -#define VL53L1_POWER_MANAGEMENT__GO1_POWER_FORCE 0x0083 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__STREAM_COUNT_CTRL 0x0084 - - - - - - - - - - - - - - - -#define VL53L1_FIRMWARE__ENABLE 0x0085 - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__INTERRUPT_CLEAR 0x0086 - - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__MODE_START 0x0087 - - - - - - - - - - - - - - - - - - - - -#define VL53L1_RESULT__INTERRUPT_STATUS 0x0088 - - - - - - - - - - - - - - - - - -#define VL53L1_RESULT__RANGE_STATUS 0x0089 - - - - - - - - - - - - - - - - - - -#define VL53L1_RESULT__REPORT_STATUS 0x008A - - - - - - - - - - - - - - - -#define VL53L1_RESULT__STREAM_COUNT 0x008B - - - - - - - - - - - - - - - -#define VL53L1_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0 0x008C - - - - - - - - - - - - - - - -#define VL53L1_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_HI 0x008C - - - - - - - -#define VL53L1_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_LO 0x008D - - - - - - - -#define VL53L1_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0 0x008E - - - - - - - - - - - - - - - -#define VL53L1_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_HI 0x008E - - - - - - - -#define VL53L1_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_LO 0x008F - - - - - - - -#define VL53L1_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0 0x0090 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_HI 0x0090 - - - - - - - -#define VL53L1_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_LO 0x0091 - - - - - - - -#define VL53L1_RESULT__SIGMA_SD0 0x0092 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__SIGMA_SD0_HI 0x0092 - - - - - - - -#define VL53L1_RESULT__SIGMA_SD0_LO 0x0093 - - - - - - - -#define VL53L1_RESULT__PHASE_SD0 0x0094 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__PHASE_SD0_HI 0x0094 - - - - - - - -#define VL53L1_RESULT__PHASE_SD0_LO 0x0095 - - - - - - - -#define VL53L1_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0 0x0096 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_HI 0x0096 - - - - - - - -#define VL53L1_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_LO 0x0097 - - - - - - - -#define VL53L1_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0 0x0098 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_HI 0x0098 - - - - - - - -#define VL53L1_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_LO 0x0099 - - - - - - - -#define VL53L1_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0 0x009A - - - - - - - - - - - - - - - -#define VL53L1_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_HI 0x009A - - - - - - - -#define VL53L1_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_LO 0x009B - - - - - - - -#define VL53L1_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0 0x009C - - - - - - - - - - - - - - - -#define VL53L1_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_HI 0x009C - - - - - - - -#define VL53L1_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_LO 0x009D - - - - - - - -#define VL53L1_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0 0x009E - - - - - - - - - - - - - - - -#define VL53L1_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_HI 0x009E - - - - - - - -#define VL53L1_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_LO 0x009F - - - - - - - -#define VL53L1_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1 0x00A0 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_HI 0x00A0 - - - - - - - -#define VL53L1_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_LO 0x00A1 - - - - - - - -#define VL53L1_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1 0x00A2 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_HI 0x00A2 - - - - - - - -#define VL53L1_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_LO 0x00A3 - - - - - - - -#define VL53L1_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1 0x00A4 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_HI 0x00A4 - - - - - - - -#define VL53L1_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_LO 0x00A5 - - - - - - - -#define VL53L1_RESULT__SIGMA_SD1 0x00A6 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__SIGMA_SD1_HI 0x00A6 - - - - - - - -#define VL53L1_RESULT__SIGMA_SD1_LO 0x00A7 - - - - - - - -#define VL53L1_RESULT__PHASE_SD1 0x00A8 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__PHASE_SD1_HI 0x00A8 - - - - - - - -#define VL53L1_RESULT__PHASE_SD1_LO 0x00A9 - - - - - - - -#define VL53L1_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1 0x00AA - - - - - - - - - - - - - - - -#define VL53L1_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_HI 0x00AA - - - - - - - -#define VL53L1_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_LO 0x00AB - - - - - - - -#define VL53L1_RESULT__SPARE_0_SD1 0x00AC - - - - - - - - - - - - - - - -#define VL53L1_RESULT__SPARE_0_SD1_HI 0x00AC - - - - - - - -#define VL53L1_RESULT__SPARE_0_SD1_LO 0x00AD - - - - - - - -#define VL53L1_RESULT__SPARE_1_SD1 0x00AE - - - - - - - - - - - - - - - -#define VL53L1_RESULT__SPARE_1_SD1_HI 0x00AE - - - - - - - -#define VL53L1_RESULT__SPARE_1_SD1_LO 0x00AF - - - - - - - -#define VL53L1_RESULT__SPARE_2_SD1 0x00B0 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__SPARE_2_SD1_HI 0x00B0 - - - - - - - -#define VL53L1_RESULT__SPARE_2_SD1_LO 0x00B1 - - - - - - - -#define VL53L1_RESULT__SPARE_3_SD1 0x00B2 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__THRESH_INFO 0x00B3 - - - - - - - - - - - - - - - - -#define VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0 0x00B4 - - - - - - - - - - - - - - - -#define VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_3 0x00B4 - - - - - - - -#define VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_2 0x00B5 - - - - - - - -#define VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_1 0x00B6 - - - - - - - -#define VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_0 0x00B7 - - - - - - - -#define VL53L1_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0 0x00B8 - - - - - - - - - - - - - - - -#define VL53L1_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_3 0x00B8 - - - - - - - -#define VL53L1_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_2 0x00B9 - - - - - - - -#define VL53L1_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_1 0x00BA - - - - - - - -#define VL53L1_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_0 0x00BB - - - - - - - -#define VL53L1_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0 0x00BC - - - - - - - - - - - - - - - -#define VL53L1_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_3 0x00BC - - - - - - - -#define VL53L1_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_2 0x00BD - - - - - - - -#define VL53L1_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_1 0x00BE - - - - - - - -#define VL53L1_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_0 0x00BF - - - - - - - -#define VL53L1_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0 0x00C0 - - - - - - - - - - - - - - - -#define VL53L1_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_3 0x00C0 - - - - - - - -#define VL53L1_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_2 0x00C1 - - - - - - - -#define VL53L1_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_1 0x00C2 - - - - - - - -#define VL53L1_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_0 0x00C3 - - - - - - - -#define VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1 0x00C4 - - - - - - - - - - - - - - - -#define VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_3 0x00C4 - - - - - - - -#define VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_2 0x00C5 - - - - - - - -#define VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_1 0x00C6 - - - - - - - -#define VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_0 0x00C7 - - - - - - - -#define VL53L1_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1 0x00C8 - - - - - - - - - - - - - - - -#define VL53L1_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_3 0x00C8 - - - - - - - -#define VL53L1_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_2 0x00C9 - - - - - - - -#define VL53L1_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_1 0x00CA - - - - - - - -#define VL53L1_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_0 0x00CB - - - - - - - -#define VL53L1_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1 0x00CC - - - - - - - - - - - - - - - -#define VL53L1_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_3 0x00CC - - - - - - - -#define VL53L1_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_2 0x00CD - - - - - - - -#define VL53L1_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_1 0x00CE - - - - - - - -#define VL53L1_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_0 0x00CF - - - - - - - -#define VL53L1_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1 0x00D0 - - - - - - - - - - - - - - - -#define VL53L1_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_3 0x00D0 - - - - - - - -#define VL53L1_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_2 0x00D1 - - - - - - - -#define VL53L1_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_1 0x00D2 - - - - - - - -#define VL53L1_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_0 0x00D3 - - - - - - - -#define VL53L1_RESULT_CORE__SPARE_0 0x00D4 - - - - - - - - - - - - - - - -#define VL53L1_PHASECAL_RESULT__REFERENCE_PHASE 0x00D6 - - - - - - - - - - - - - - - -#define VL53L1_PHASECAL_RESULT__REFERENCE_PHASE_HI 0x00D6 - - - - - - - -#define VL53L1_PHASECAL_RESULT__REFERENCE_PHASE_LO 0x00D7 - - - - - - - -#define VL53L1_PHASECAL_RESULT__VCSEL_START 0x00D8 - - - - - - - - - - - - - - - -#define VL53L1_REF_SPAD_CHAR_RESULT__NUM_ACTUAL_REF_SPADS 0x00D9 - - - - - - - - - - - - - - - -#define VL53L1_REF_SPAD_CHAR_RESULT__REF_LOCATION 0x00DA - - - - - - - - - - - - - - - -#define VL53L1_VHV_RESULT__COLDBOOT_STATUS 0x00DB - - - - - - - - - - - - - - - -#define VL53L1_VHV_RESULT__SEARCH_RESULT 0x00DC - - - - - - - - - - - - - - - -#define VL53L1_VHV_RESULT__LATEST_SETTING 0x00DD - - - - - - - - - - - - - - - -#define VL53L1_RESULT__OSC_CALIBRATE_VAL 0x00DE - - - - - - - - - - - - - - - -#define VL53L1_RESULT__OSC_CALIBRATE_VAL_HI 0x00DE - - - - - - - -#define VL53L1_RESULT__OSC_CALIBRATE_VAL_LO 0x00DF - - - - - - - -#define VL53L1_ANA_CONFIG__POWERDOWN_GO1 0x00E0 - - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__REF_BG_CTRL 0x00E1 - - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__REGDVDD1V2_CTRL 0x00E2 - - - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__OSC_SLOW_CTRL 0x00E3 - - - - - - - - - - - - - - - - - -#define VL53L1_TEST_MODE__STATUS 0x00E4 - - - - - - - - - - - - - - - -#define VL53L1_FIRMWARE__SYSTEM_STATUS 0x00E5 - - - - - - - - - - - - - - - - -#define VL53L1_FIRMWARE__MODE_STATUS 0x00E6 - - - - - - - - - - - - - - - -#define VL53L1_FIRMWARE__SECONDARY_MODE_STATUS 0x00E7 - - - - - - - - - - - - - - - -#define VL53L1_FIRMWARE__CAL_REPEAT_RATE_COUNTER 0x00E8 - - - - - - - - - - - - - - - -#define VL53L1_FIRMWARE__CAL_REPEAT_RATE_COUNTER_HI 0x00E8 - - - - - - - -#define VL53L1_FIRMWARE__CAL_REPEAT_RATE_COUNTER_LO 0x00E9 - - - - - - - -#define VL53L1_FIRMWARE__HISTOGRAM_BIN 0x00EA - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_HIGH 0x00EC - - - - - - - - - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_HIGH_HI 0x00EC - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_HIGH_LO 0x00ED - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_LOW 0x00EE - - - - - - - - - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_LOW_HI 0x00EE - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_LOW_LO 0x00EF - - - - - - - -#define VL53L1_GPH__SYSTEM__ENABLE_XTALK_PER_QUADRANT 0x00F0 - - - - - - - - - - - - - - - -#define VL53L1_GPH__SPARE_0 0x00F1 - - - - - - - - - - - - - - - - - -#define VL53L1_GPH__SD_CONFIG__WOI_SD0 0x00F2 - - - - - - - - - - - - - - - -#define VL53L1_GPH__SD_CONFIG__WOI_SD1 0x00F3 - - - - - - - - - - - - - - - -#define VL53L1_GPH__SD_CONFIG__INITIAL_PHASE_SD0 0x00F4 - - - - - - - - - - - - - - - -#define VL53L1_GPH__SD_CONFIG__INITIAL_PHASE_SD1 0x00F5 - - - - - - - - - - - - - - - -#define VL53L1_GPH__SD_CONFIG__FIRST_ORDER_SELECT 0x00F6 - - - - - - - - - - - - - - - - -#define VL53L1_GPH__SD_CONFIG__QUANTIFIER 0x00F7 - - - - - - - - - - - - - - - -#define VL53L1_GPH__ROI_CONFIG__USER_ROI_CENTRE_SPAD 0x00F8 - - - - - - - - - - - - - - - -#define VL53L1_GPH__ROI_CONFIG__USER_ROI_REQUESTED_GLOBAL_XY_SIZE 0x00F9 - - - - - - - - - - - - - - - -#define VL53L1_GPH__SYSTEM__SEQUENCE_CONFIG 0x00FA - - - - - - - - - - - - - - - - - - - - - - -#define VL53L1_GPH__GPH_ID 0x00FB - - - - - - - - - - - - - - - -#define VL53L1_SYSTEM__INTERRUPT_SET 0x00FC - - - - - - - - - - - - - - - - -#define VL53L1_INTERRUPT_MANAGER__ENABLES 0x00FD - - - - - - - - - - - - - - - - - - - -#define VL53L1_INTERRUPT_MANAGER__CLEAR 0x00FE - - - - - - - - - - - - - - - - - - - -#define VL53L1_INTERRUPT_MANAGER__STATUS 0x00FF - - - - - - - - - - - - - - - - - - - -#define VL53L1_MCU_TO_HOST_BANK__WR_ACCESS_EN 0x0100 - - - - - - - - - - - - - - - -#define VL53L1_POWER_MANAGEMENT__GO1_RESET_STATUS 0x0101 - - - - - - - - - - - - - - - -#define VL53L1_PAD_STARTUP_MODE__VALUE_RO 0x0102 - - - - - - - - - - - - - - - - -#define VL53L1_PAD_STARTUP_MODE__VALUE_CTRL 0x0103 - - - - - - - - - - - - - - - - - - -#define VL53L1_PLL_PERIOD_US 0x0104 - - - - - - - - - - - - - - - -#define VL53L1_PLL_PERIOD_US_3 0x0104 - - - - - - - -#define VL53L1_PLL_PERIOD_US_2 0x0105 - - - - - - - -#define VL53L1_PLL_PERIOD_US_1 0x0106 - - - - - - - -#define VL53L1_PLL_PERIOD_US_0 0x0107 - - - - - - - -#define VL53L1_INTERRUPT_SCHEDULER__DATA_OUT 0x0108 - - - - - - - - - - - - - - - -#define VL53L1_INTERRUPT_SCHEDULER__DATA_OUT_3 0x0108 - - - - - - - -#define VL53L1_INTERRUPT_SCHEDULER__DATA_OUT_2 0x0109 - - - - - - - -#define VL53L1_INTERRUPT_SCHEDULER__DATA_OUT_1 0x010A - - - - - - - -#define VL53L1_INTERRUPT_SCHEDULER__DATA_OUT_0 0x010B - - - - - - - -#define VL53L1_NVM_BIST__COMPLETE 0x010C - - - - - - - - - - - - - - - -#define VL53L1_NVM_BIST__STATUS 0x010D - - - - - - - - - - - - - - - -#define VL53L1_IDENTIFICATION__MODEL_ID 0x010F - - - - - - - - - - - - - - - -#define VL53L1_IDENTIFICATION__MODULE_TYPE 0x0110 - - - - - - - - - - - - - - - -#define VL53L1_IDENTIFICATION__REVISION_ID 0x0111 - - - - - - - - - - - - - - - - -#define VL53L1_IDENTIFICATION__MODULE_ID 0x0112 - - - - - - - - - - - - - - - -#define VL53L1_IDENTIFICATION__MODULE_ID_HI 0x0112 - - - - - - - -#define VL53L1_IDENTIFICATION__MODULE_ID_LO 0x0113 - - - - - - - -#define VL53L1_ANA_CONFIG__FAST_OSC__TRIM_MAX 0x0114 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__FAST_OSC__FREQ_SET 0x0115 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__VCSEL_TRIM 0x0116 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__VCSEL_SELION 0x0117 - - - - - - - - - - - - - - - -#define VL53L1_ANA_CONFIG__VCSEL_SELION_MAX 0x0118 - - - - - - - - - - - - - - - -#define VL53L1_PROTECTED_LASER_SAFETY__LOCK_BIT 0x0119 - - - - - - - - - - - - - - - -#define VL53L1_LASER_SAFETY__KEY 0x011A - - - - - - - - - - - - - - - -#define VL53L1_LASER_SAFETY__KEY_RO 0x011B - - - - - - - - - - - - - - - -#define VL53L1_LASER_SAFETY__CLIP 0x011C - - - - - - - - - - - - - - - -#define VL53L1_LASER_SAFETY__MULT 0x011D - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_0 0x011E - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_1 0x011F - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_2 0x0120 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_3 0x0121 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_4 0x0122 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_5 0x0123 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_6 0x0124 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_7 0x0125 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_8 0x0126 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_9 0x0127 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_10 0x0128 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_11 0x0129 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_12 0x012A - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_13 0x012B - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_14 0x012C - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_15 0x012D - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_16 0x012E - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_17 0x012F - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_18 0x0130 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_19 0x0131 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_20 0x0132 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_21 0x0133 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_22 0x0134 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_23 0x0135 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_24 0x0136 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_25 0x0137 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_26 0x0138 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_27 0x0139 - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_28 0x013A - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_29 0x013B - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_30 0x013C - - - - - - - - - - - - - - - -#define VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_RTN_31 0x013D - - - - - - - - - - - - - - - -#define VL53L1_ROI_CONFIG__MODE_ROI_CENTRE_SPAD 0x013E - - - - - - - - - - - - - - - -#define VL53L1_ROI_CONFIG__MODE_ROI_XY_SIZE 0x013F - - - - - - - - - - - - - - - -#define VL53L1_GO2_HOST_BANK_ACCESS__OVERRIDE 0x0300 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__MULTIPLICAND 0x0400 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__MULTIPLICAND_3 0x0400 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__MULTIPLICAND_2 0x0401 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__MULTIPLICAND_1 0x0402 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__MULTIPLICAND_0 0x0403 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__MULTIPLIER 0x0404 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__MULTIPLIER_3 0x0404 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__MULTIPLIER_2 0x0405 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__MULTIPLIER_1 0x0406 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__MULTIPLIER_0 0x0407 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__PRODUCT_HI 0x0408 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__PRODUCT_HI_3 0x0408 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__PRODUCT_HI_2 0x0409 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__PRODUCT_HI_1 0x040A - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__PRODUCT_HI_0 0x040B - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__PRODUCT_LO 0x040C - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__PRODUCT_LO_3 0x040C - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__PRODUCT_LO_2 0x040D - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__PRODUCT_LO_1 0x040E - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__PRODUCT_LO_0 0x040F - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__START 0x0410 - - - - - - - -#define VL53L1_MCU_UTIL_MULTIPLIER__STATUS 0x0411 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__START 0x0412 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__STATUS 0x0413 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__DIVIDEND 0x0414 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__DIVIDEND_3 0x0414 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__DIVIDEND_2 0x0415 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__DIVIDEND_1 0x0416 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__DIVIDEND_0 0x0417 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__DIVISOR 0x0418 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__DIVISOR_3 0x0418 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__DIVISOR_2 0x0419 - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__DIVISOR_1 0x041A - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__DIVISOR_0 0x041B - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__QUOTIENT 0x041C - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__QUOTIENT_3 0x041C - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__QUOTIENT_2 0x041D - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__QUOTIENT_1 0x041E - - - - - - - -#define VL53L1_MCU_UTIL_DIVIDER__QUOTIENT_0 0x041F - - - - - - - -#define VL53L1_TIMER0__VALUE_IN 0x0420 - - - - - - - -#define VL53L1_TIMER0__VALUE_IN_3 0x0420 - - - - - - - -#define VL53L1_TIMER0__VALUE_IN_2 0x0421 - - - - - - - -#define VL53L1_TIMER0__VALUE_IN_1 0x0422 - - - - - - - -#define VL53L1_TIMER0__VALUE_IN_0 0x0423 - - - - - - - -#define VL53L1_TIMER1__VALUE_IN 0x0424 - - - - - - - -#define VL53L1_TIMER1__VALUE_IN_3 0x0424 - - - - - - - -#define VL53L1_TIMER1__VALUE_IN_2 0x0425 - - - - - - - -#define VL53L1_TIMER1__VALUE_IN_1 0x0426 - - - - - - - -#define VL53L1_TIMER1__VALUE_IN_0 0x0427 - - - - - - - -#define VL53L1_TIMER0__CTRL 0x0428 - - - - - - - -#define VL53L1_TIMER1__CTRL 0x0429 - - - - - - - -#define VL53L1_MCU_GENERAL_PURPOSE__GP_0 0x042C - - - - - - - - - - - - - - - -#define VL53L1_MCU_GENERAL_PURPOSE__GP_1 0x042D - - - - - - - - - - - - - - - -#define VL53L1_MCU_GENERAL_PURPOSE__GP_2 0x042E - - - - - - - - - - - - - - - -#define VL53L1_MCU_GENERAL_PURPOSE__GP_3 0x042F - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__CONFIG 0x0430 - - - - - - - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__OFFSET_CORRECTED_RANGE 0x0432 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__OFFSET_CORRECTED_RANGE_HI 0x0432 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__OFFSET_CORRECTED_RANGE_LO 0x0433 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_4 0x0434 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_4_3 0x0434 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_4_2 0x0435 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_4_1 0x0436 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_4_0 0x0437 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__AMBIENT_DURATION_PRE_CALC 0x0438 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__AMBIENT_DURATION_PRE_CALC_HI 0x0438 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__AMBIENT_DURATION_PRE_CALC_LO 0x0439 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_VCSEL_PERIOD 0x043C - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_5 0x043D - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_TOTAL_PERIODS 0x043E - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_TOTAL_PERIODS_HI 0x043E - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_TOTAL_PERIODS_LO 0x043F - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_ACCUM_PHASE 0x0440 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_ACCUM_PHASE_3 0x0440 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_ACCUM_PHASE_2 0x0441 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_ACCUM_PHASE_1 0x0442 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_ACCUM_PHASE_0 0x0443 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_SIGNAL_EVENTS 0x0444 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_SIGNAL_EVENTS_3 0x0444 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_SIGNAL_EVENTS_2 0x0445 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_SIGNAL_EVENTS_1 0x0446 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_SIGNAL_EVENTS_0 0x0447 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_AMBIENT_EVENTS 0x0448 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_AMBIENT_EVENTS_3 0x0448 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_AMBIENT_EVENTS_2 0x0449 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_AMBIENT_EVENTS_1 0x044A - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_AMBIENT_EVENTS_0 0x044B - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_6 0x044C - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_6_HI 0x044C - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_6_LO 0x044D - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_ADJUST_VCSEL_PERIOD 0x044E - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_ADJUST_VCSEL_PERIOD_HI 0x044E - - - - - - - -#define VL53L1_MCU_RANGE_CALC__ALGO_ADJUST_VCSEL_PERIOD_LO 0x044F - - - - - - - -#define VL53L1_MCU_RANGE_CALC__NUM_SPADS 0x0450 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__NUM_SPADS_HI 0x0450 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__NUM_SPADS_LO 0x0451 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__PHASE_OUTPUT 0x0452 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__PHASE_OUTPUT_HI 0x0452 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__PHASE_OUTPUT_LO 0x0453 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__RATE_PER_SPAD_MCPS 0x0454 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__RATE_PER_SPAD_MCPS_3 0x0454 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__RATE_PER_SPAD_MCPS_2 0x0455 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__RATE_PER_SPAD_MCPS_1 0x0456 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__RATE_PER_SPAD_MCPS_0 0x0457 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_7 0x0458 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_8 0x0459 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__PEAK_SIGNAL_RATE_MCPS 0x045A - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__PEAK_SIGNAL_RATE_MCPS_HI 0x045A - - - - - - - -#define VL53L1_MCU_RANGE_CALC__PEAK_SIGNAL_RATE_MCPS_LO 0x045B - - - - - - - -#define VL53L1_MCU_RANGE_CALC__AVG_SIGNAL_RATE_MCPS 0x045C - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__AVG_SIGNAL_RATE_MCPS_HI 0x045C - - - - - - - -#define VL53L1_MCU_RANGE_CALC__AVG_SIGNAL_RATE_MCPS_LO 0x045D - - - - - - - -#define VL53L1_MCU_RANGE_CALC__AMBIENT_RATE_MCPS 0x045E - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__AMBIENT_RATE_MCPS_HI 0x045E - - - - - - - -#define VL53L1_MCU_RANGE_CALC__AMBIENT_RATE_MCPS_LO 0x045F - - - - - - - -#define VL53L1_MCU_RANGE_CALC__XTALK 0x0460 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__XTALK_HI 0x0460 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__XTALK_LO 0x0461 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__CALC_STATUS 0x0462 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__DEBUG 0x0463 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__PEAK_SIGNAL_RATE_XTALK_CORR_MCPS 0x0464 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__PEAK_SIGNAL_RATE_XTALK_CORR_MCPS_HI 0x0464 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__PEAK_SIGNAL_RATE_XTALK_CORR_MCPS_LO 0x0465 - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_0 0x0468 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_1 0x0469 - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_2 0x046A - - - - - - - - - - - - - - - -#define VL53L1_MCU_RANGE_CALC__SPARE_3 0x046B - - - - - - - - - - - - - - - -#define VL53L1_PATCH__CTRL 0x0470 - - - - - - - -#define VL53L1_PATCH__JMP_ENABLES 0x0472 - - - - - - - -#define VL53L1_PATCH__JMP_ENABLES_HI 0x0472 - - - - - - - -#define VL53L1_PATCH__JMP_ENABLES_LO 0x0473 - - - - - - - -#define VL53L1_PATCH__DATA_ENABLES 0x0474 - - - - - - - -#define VL53L1_PATCH__DATA_ENABLES_HI 0x0474 - - - - - - - -#define VL53L1_PATCH__DATA_ENABLES_LO 0x0475 - - - - - - - -#define VL53L1_PATCH__OFFSET_0 0x0476 - - - - - - - -#define VL53L1_PATCH__OFFSET_0_HI 0x0476 - - - - - - - -#define VL53L1_PATCH__OFFSET_0_LO 0x0477 - - - - - - - -#define VL53L1_PATCH__OFFSET_1 0x0478 - - - - - - - -#define VL53L1_PATCH__OFFSET_1_HI 0x0478 - - - - - - - -#define VL53L1_PATCH__OFFSET_1_LO 0x0479 - - - - - - - -#define VL53L1_PATCH__OFFSET_2 0x047A - - - - - - - -#define VL53L1_PATCH__OFFSET_2_HI 0x047A - - - - - - - -#define VL53L1_PATCH__OFFSET_2_LO 0x047B - - - - - - - -#define VL53L1_PATCH__OFFSET_3 0x047C - - - - - - - -#define VL53L1_PATCH__OFFSET_3_HI 0x047C - - - - - - - -#define VL53L1_PATCH__OFFSET_3_LO 0x047D - - - - - - - -#define VL53L1_PATCH__OFFSET_4 0x047E - - - - - - - -#define VL53L1_PATCH__OFFSET_4_HI 0x047E - - - - - - - -#define VL53L1_PATCH__OFFSET_4_LO 0x047F - - - - - - - -#define VL53L1_PATCH__OFFSET_5 0x0480 - - - - - - - -#define VL53L1_PATCH__OFFSET_5_HI 0x0480 - - - - - - - -#define VL53L1_PATCH__OFFSET_5_LO 0x0481 - - - - - - - -#define VL53L1_PATCH__OFFSET_6 0x0482 - - - - - - - -#define VL53L1_PATCH__OFFSET_6_HI 0x0482 - - - - - - - -#define VL53L1_PATCH__OFFSET_6_LO 0x0483 - - - - - - - -#define VL53L1_PATCH__OFFSET_7 0x0484 - - - - - - - -#define VL53L1_PATCH__OFFSET_7_HI 0x0484 - - - - - - - -#define VL53L1_PATCH__OFFSET_7_LO 0x0485 - - - - - - - -#define VL53L1_PATCH__OFFSET_8 0x0486 - - - - - - - -#define VL53L1_PATCH__OFFSET_8_HI 0x0486 - - - - - - - -#define VL53L1_PATCH__OFFSET_8_LO 0x0487 - - - - - - - -#define VL53L1_PATCH__OFFSET_9 0x0488 - - - - - - - -#define VL53L1_PATCH__OFFSET_9_HI 0x0488 - - - - - - - -#define VL53L1_PATCH__OFFSET_9_LO 0x0489 - - - - - - - -#define VL53L1_PATCH__OFFSET_10 0x048A - - - - - - - -#define VL53L1_PATCH__OFFSET_10_HI 0x048A - - - - - - - -#define VL53L1_PATCH__OFFSET_10_LO 0x048B - - - - - - - -#define VL53L1_PATCH__OFFSET_11 0x048C - - - - - - - -#define VL53L1_PATCH__OFFSET_11_HI 0x048C - - - - - - - -#define VL53L1_PATCH__OFFSET_11_LO 0x048D - - - - - - - -#define VL53L1_PATCH__OFFSET_12 0x048E - - - - - - - -#define VL53L1_PATCH__OFFSET_12_HI 0x048E - - - - - - - -#define VL53L1_PATCH__OFFSET_12_LO 0x048F - - - - - - - -#define VL53L1_PATCH__OFFSET_13 0x0490 - - - - - - - -#define VL53L1_PATCH__OFFSET_13_HI 0x0490 - - - - - - - -#define VL53L1_PATCH__OFFSET_13_LO 0x0491 - - - - - - - -#define VL53L1_PATCH__OFFSET_14 0x0492 - - - - - - - -#define VL53L1_PATCH__OFFSET_14_HI 0x0492 - - - - - - - -#define VL53L1_PATCH__OFFSET_14_LO 0x0493 - - - - - - - -#define VL53L1_PATCH__OFFSET_15 0x0494 - - - - - - - -#define VL53L1_PATCH__OFFSET_15_HI 0x0494 - - - - - - - -#define VL53L1_PATCH__OFFSET_15_LO 0x0495 - - - - - - - -#define VL53L1_PATCH__ADDRESS_0 0x0496 - - - - - - - -#define VL53L1_PATCH__ADDRESS_0_HI 0x0496 - - - - - - - -#define VL53L1_PATCH__ADDRESS_0_LO 0x0497 - - - - - - - -#define VL53L1_PATCH__ADDRESS_1 0x0498 - - - - - - - -#define VL53L1_PATCH__ADDRESS_1_HI 0x0498 - - - - - - - -#define VL53L1_PATCH__ADDRESS_1_LO 0x0499 - - - - - - - -#define VL53L1_PATCH__ADDRESS_2 0x049A - - - - - - - -#define VL53L1_PATCH__ADDRESS_2_HI 0x049A - - - - - - - -#define VL53L1_PATCH__ADDRESS_2_LO 0x049B - - - - - - - -#define VL53L1_PATCH__ADDRESS_3 0x049C - - - - - - - -#define VL53L1_PATCH__ADDRESS_3_HI 0x049C - - - - - - - -#define VL53L1_PATCH__ADDRESS_3_LO 0x049D - - - - - - - -#define VL53L1_PATCH__ADDRESS_4 0x049E - - - - - - - -#define VL53L1_PATCH__ADDRESS_4_HI 0x049E - - - - - - - -#define VL53L1_PATCH__ADDRESS_4_LO 0x049F - - - - - - - -#define VL53L1_PATCH__ADDRESS_5 0x04A0 - - - - - - - -#define VL53L1_PATCH__ADDRESS_5_HI 0x04A0 - - - - - - - -#define VL53L1_PATCH__ADDRESS_5_LO 0x04A1 - - - - - - - -#define VL53L1_PATCH__ADDRESS_6 0x04A2 - - - - - - - -#define VL53L1_PATCH__ADDRESS_6_HI 0x04A2 - - - - - - - -#define VL53L1_PATCH__ADDRESS_6_LO 0x04A3 - - - - - - - -#define VL53L1_PATCH__ADDRESS_7 0x04A4 - - - - - - - -#define VL53L1_PATCH__ADDRESS_7_HI 0x04A4 - - - - - - - -#define VL53L1_PATCH__ADDRESS_7_LO 0x04A5 - - - - - - - -#define VL53L1_PATCH__ADDRESS_8 0x04A6 - - - - - - - -#define VL53L1_PATCH__ADDRESS_8_HI 0x04A6 - - - - - - - -#define VL53L1_PATCH__ADDRESS_8_LO 0x04A7 - - - - - - - -#define VL53L1_PATCH__ADDRESS_9 0x04A8 - - - - - - - -#define VL53L1_PATCH__ADDRESS_9_HI 0x04A8 - - - - - - - -#define VL53L1_PATCH__ADDRESS_9_LO 0x04A9 - - - - - - - -#define VL53L1_PATCH__ADDRESS_10 0x04AA - - - - - - - -#define VL53L1_PATCH__ADDRESS_10_HI 0x04AA - - - - - - - -#define VL53L1_PATCH__ADDRESS_10_LO 0x04AB - - - - - - - -#define VL53L1_PATCH__ADDRESS_11 0x04AC - - - - - - - -#define VL53L1_PATCH__ADDRESS_11_HI 0x04AC - - - - - - - -#define VL53L1_PATCH__ADDRESS_11_LO 0x04AD - - - - - - - -#define VL53L1_PATCH__ADDRESS_12 0x04AE - - - - - - - -#define VL53L1_PATCH__ADDRESS_12_HI 0x04AE - - - - - - - -#define VL53L1_PATCH__ADDRESS_12_LO 0x04AF - - - - - - - -#define VL53L1_PATCH__ADDRESS_13 0x04B0 - - - - - - - -#define VL53L1_PATCH__ADDRESS_13_HI 0x04B0 - - - - - - - -#define VL53L1_PATCH__ADDRESS_13_LO 0x04B1 - - - - - - - -#define VL53L1_PATCH__ADDRESS_14 0x04B2 - - - - - - - -#define VL53L1_PATCH__ADDRESS_14_HI 0x04B2 - - - - - - - -#define VL53L1_PATCH__ADDRESS_14_LO 0x04B3 - - - - - - - -#define VL53L1_PATCH__ADDRESS_15 0x04B4 - - - - - - - -#define VL53L1_PATCH__ADDRESS_15_HI 0x04B4 - - - - - - - -#define VL53L1_PATCH__ADDRESS_15_LO 0x04B5 - - - - - - - -#define VL53L1_SPI_ASYNC_MUX__CTRL 0x04C0 - - - - - - - -#define VL53L1_CLK__CONFIG 0x04C4 - - - - - - - - - - - - - - - -#define VL53L1_GPIO_LV_MUX__CTRL 0x04CC - - - - - - - - - - - - - - - - -#define VL53L1_GPIO_LV_PAD__CTRL 0x04CD - - - - - - - - - - - - - - - -#define VL53L1_PAD_I2C_LV__CONFIG 0x04D0 - - - - - - - -#define VL53L1_PAD_STARTUP_MODE__VALUE_RO_GO1 0x04D4 - - - - - - - - - - - - - - - -#define VL53L1_HOST_IF__STATUS_GO1 0x04D5 - - - - - - - - - - - - - - - -#define VL53L1_MCU_CLK_GATING__CTRL 0x04D8 - - - - - - - - - - - - - - - - - - -#define VL53L1_TEST__BIST_ROM_CTRL 0x04E0 - - - - - - - -#define VL53L1_TEST__BIST_ROM_RESULT 0x04E1 - - - - - - - -#define VL53L1_TEST__BIST_ROM_MCU_SIG 0x04E2 - - - - - - - -#define VL53L1_TEST__BIST_ROM_MCU_SIG_HI 0x04E2 - - - - - - - -#define VL53L1_TEST__BIST_ROM_MCU_SIG_LO 0x04E3 - - - - - - - -#define VL53L1_TEST__BIST_RAM_CTRL 0x04E4 - - - - - - - -#define VL53L1_TEST__BIST_RAM_RESULT 0x04E5 - - - - - - - -#define VL53L1_TEST__TMC 0x04E8 - - - - - - - -#define VL53L1_TEST__PLL_BIST_MIN_THRESHOLD 0x04F0 - - - - - - - -#define VL53L1_TEST__PLL_BIST_MIN_THRESHOLD_HI 0x04F0 - - - - - - - -#define VL53L1_TEST__PLL_BIST_MIN_THRESHOLD_LO 0x04F1 - - - - - - - -#define VL53L1_TEST__PLL_BIST_MAX_THRESHOLD 0x04F2 - - - - - - - -#define VL53L1_TEST__PLL_BIST_MAX_THRESHOLD_HI 0x04F2 - - - - - - - -#define VL53L1_TEST__PLL_BIST_MAX_THRESHOLD_LO 0x04F3 - - - - - - - -#define VL53L1_TEST__PLL_BIST_COUNT_OUT 0x04F4 - - - - - - - -#define VL53L1_TEST__PLL_BIST_COUNT_OUT_HI 0x04F4 - - - - - - - -#define VL53L1_TEST__PLL_BIST_COUNT_OUT_LO 0x04F5 - - - - - - - -#define VL53L1_TEST__PLL_BIST_GONOGO 0x04F6 - - - - - - - -#define VL53L1_TEST__PLL_BIST_CTRL 0x04F7 - - - - - - - -#define VL53L1_RANGING_CORE__DEVICE_ID 0x0680 - - - - - - - -#define VL53L1_RANGING_CORE__REVISION_ID 0x0681 - - - - - - - -#define VL53L1_RANGING_CORE__CLK_CTRL1 0x0683 - - - - - - - -#define VL53L1_RANGING_CORE__CLK_CTRL2 0x0684 - - - - - - - -#define VL53L1_RANGING_CORE__WOI_1 0x0685 - - - - - - - -#define VL53L1_RANGING_CORE__WOI_REF_1 0x0686 - - - - - - - -#define VL53L1_RANGING_CORE__START_RANGING 0x0687 - - - - - - - -#define VL53L1_RANGING_CORE__LOW_LIMIT_1 0x0690 - - - - - - - -#define VL53L1_RANGING_CORE__HIGH_LIMIT_1 0x0691 - - - - - - - -#define VL53L1_RANGING_CORE__LOW_LIMIT_REF_1 0x0692 - - - - - - - -#define VL53L1_RANGING_CORE__HIGH_LIMIT_REF_1 0x0693 - - - - - - - -#define VL53L1_RANGING_CORE__QUANTIFIER_1_MSB 0x0694 - - - - - - - -#define VL53L1_RANGING_CORE__QUANTIFIER_1_LSB 0x0695 - - - - - - - -#define VL53L1_RANGING_CORE__QUANTIFIER_REF_1_MSB 0x0696 - - - - - - - -#define VL53L1_RANGING_CORE__QUANTIFIER_REF_1_LSB 0x0697 - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_OFFSET_1_MSB 0x0698 - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_OFFSET_1_LSB 0x0699 - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_OFFSET_REF_1_MSB 0x069A - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_OFFSET_REF_1_LSB 0x069B - - - - - - - -#define VL53L1_RANGING_CORE__FILTER_STRENGTH_1 0x069C - - - - - - - -#define VL53L1_RANGING_CORE__FILTER_STRENGTH_REF_1 0x069D - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_EVENT_LIMIT_1_MSB 0x069E - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_EVENT_LIMIT_1_LSB 0x069F - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_EVENT_LIMIT_REF_1_MSB 0x06A0 - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_EVENT_LIMIT_REF_1_LSB 0x06A1 - - - - - - - -#define VL53L1_RANGING_CORE__TIMEOUT_OVERALL_PERIODS_MSB 0x06A4 - - - - - - - -#define VL53L1_RANGING_CORE__TIMEOUT_OVERALL_PERIODS_LSB 0x06A5 - - - - - - - -#define VL53L1_RANGING_CORE__INVERT_HW 0x06A6 - - - - - - - -#define VL53L1_RANGING_CORE__FORCE_HW 0x06A7 - - - - - - - -#define VL53L1_RANGING_CORE__STATIC_HW_VALUE 0x06A8 - - - - - - - -#define VL53L1_RANGING_CORE__FORCE_CONTINUOUS_AMBIENT 0x06A9 - - - - - - - -#define VL53L1_RANGING_CORE__TEST_PHASE_SELECT_TO_FILTER 0x06AA - - - - - - - -#define VL53L1_RANGING_CORE__TEST_PHASE_SELECT_TO_TIMING_GEN 0x06AB - - - - - - - -#define VL53L1_RANGING_CORE__INITIAL_PHASE_VALUE_1 0x06AC - - - - - - - -#define VL53L1_RANGING_CORE__INITIAL_PHASE_VALUE_REF_1 0x06AD - - - - - - - -#define VL53L1_RANGING_CORE__FORCE_UP_IN 0x06AE - - - - - - - -#define VL53L1_RANGING_CORE__FORCE_DN_IN 0x06AF - - - - - - - -#define VL53L1_RANGING_CORE__STATIC_UP_VALUE_1 0x06B0 - - - - - - - -#define VL53L1_RANGING_CORE__STATIC_UP_VALUE_REF_1 0x06B1 - - - - - - - -#define VL53L1_RANGING_CORE__STATIC_DN_VALUE_1 0x06B2 - - - - - - - -#define VL53L1_RANGING_CORE__STATIC_DN_VALUE_REF_1 0x06B3 - - - - - - - -#define VL53L1_RANGING_CORE__MONITOR_UP_DN 0x06B4 - - - - - - - -#define VL53L1_RANGING_CORE__INVERT_UP_DN 0x06B5 - - - - - - - -#define VL53L1_RANGING_CORE__CPUMP_1 0x06B6 - - - - - - - -#define VL53L1_RANGING_CORE__CPUMP_2 0x06B7 - - - - - - - -#define VL53L1_RANGING_CORE__CPUMP_3 0x06B8 - - - - - - - -#define VL53L1_RANGING_CORE__OSC_1 0x06B9 - - - - - - - -#define VL53L1_RANGING_CORE__PLL_1 0x06BB - - - - - - - -#define VL53L1_RANGING_CORE__PLL_2 0x06BC - - - - - - - -#define VL53L1_RANGING_CORE__REFERENCE_1 0x06BD - - - - - - - -#define VL53L1_RANGING_CORE__REFERENCE_3 0x06BF - - - - - - - -#define VL53L1_RANGING_CORE__REFERENCE_4 0x06C0 - - - - - - - -#define VL53L1_RANGING_CORE__REFERENCE_5 0x06C1 - - - - - - - -#define VL53L1_RANGING_CORE__REGAVDD1V2 0x06C3 - - - - - - - -#define VL53L1_RANGING_CORE__CALIB_1 0x06C4 - - - - - - - -#define VL53L1_RANGING_CORE__CALIB_2 0x06C5 - - - - - - - -#define VL53L1_RANGING_CORE__CALIB_3 0x06C6 - - - - - - - -#define VL53L1_RANGING_CORE__TST_MUX_SEL1 0x06C9 - - - - - - - -#define VL53L1_RANGING_CORE__TST_MUX_SEL2 0x06CA - - - - - - - -#define VL53L1_RANGING_CORE__TST_MUX 0x06CB - - - - - - - -#define VL53L1_RANGING_CORE__GPIO_OUT_TESTMUX 0x06CC - - - - - - - -#define VL53L1_RANGING_CORE__CUSTOM_FE 0x06CD - - - - - - - -#define VL53L1_RANGING_CORE__CUSTOM_FE_2 0x06CE - - - - - - - -#define VL53L1_RANGING_CORE__SPAD_READOUT 0x06CF - - - - - - - -#define VL53L1_RANGING_CORE__SPAD_READOUT_1 0x06D0 - - - - - - - -#define VL53L1_RANGING_CORE__SPAD_READOUT_2 0x06D1 - - - - - - - -#define VL53L1_RANGING_CORE__SPAD_PS 0x06D2 - - - - - - - -#define VL53L1_RANGING_CORE__LASER_SAFETY_2 0x06D4 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__MODE 0x0780 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__PDN 0x0781 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__PROGN 0x0782 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__READN 0x0783 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__PULSE_WIDTH_MSB 0x0784 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__PULSE_WIDTH_LSB 0x0785 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__HV_RISE_MSB 0x0786 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__HV_RISE_LSB 0x0787 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__HV_FALL_MSB 0x0788 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__HV_FALL_LSB 0x0789 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__TST 0x078A - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__TESTREAD 0x078B - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__DATAIN_MMM 0x078C - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__DATAIN_LMM 0x078D - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__DATAIN_LLM 0x078E - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__DATAIN_LLL 0x078F - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__DATAOUT_MMM 0x0790 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__DATAOUT_LMM 0x0791 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__DATAOUT_LLM 0x0792 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__DATAOUT_LLL 0x0793 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__ADDR 0x0794 - - - - - - - -#define VL53L1_RANGING_CORE__NVM_CTRL__DATAOUT_ECC 0x0795 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_0 0x0796 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_1 0x0797 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_2 0x0798 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_3 0x0799 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_4 0x079A - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_5 0x079B - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_6 0x079C - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_7 0x079D - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_8 0x079E - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_9 0x079F - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_10 0x07A0 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_11 0x07A1 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_12 0x07A2 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_13 0x07A3 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_14 0x07A4 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_15 0x07A5 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_16 0x07A6 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_17 0x07A7 - - - - - - - -#define VL53L1_RANGING_CORE__SPAD_SHIFT_EN 0x07BA - - - - - - - -#define VL53L1_RANGING_CORE__SPAD_DISABLE_CTRL 0x07BB - - - - - - - -#define VL53L1_RANGING_CORE__SPAD_EN_SHIFT_OUT_DEBUG 0x07BC - - - - - - - -#define VL53L1_RANGING_CORE__SPI_MODE 0x07BD - - - - - - - -#define VL53L1_RANGING_CORE__GPIO_DIR 0x07BE - - - - - - - -#define VL53L1_RANGING_CORE__VCSEL_PERIOD 0x0880 - - - - - - - -#define VL53L1_RANGING_CORE__VCSEL_START 0x0881 - - - - - - - -#define VL53L1_RANGING_CORE__VCSEL_STOP 0x0882 - - - - - - - -#define VL53L1_RANGING_CORE__VCSEL_1 0x0885 - - - - - - - -#define VL53L1_RANGING_CORE__VCSEL_STATUS 0x088D - - - - - - - -#define VL53L1_RANGING_CORE__STATUS 0x0980 - - - - - - - -#define VL53L1_RANGING_CORE__LASER_CONTINUITY_STATE 0x0981 - - - - - - - -#define VL53L1_RANGING_CORE__RANGE_1_MMM 0x0982 - - - - - - - -#define VL53L1_RANGING_CORE__RANGE_1_LMM 0x0983 - - - - - - - -#define VL53L1_RANGING_CORE__RANGE_1_LLM 0x0984 - - - - - - - -#define VL53L1_RANGING_CORE__RANGE_1_LLL 0x0985 - - - - - - - -#define VL53L1_RANGING_CORE__RANGE_REF_1_MMM 0x0986 - - - - - - - -#define VL53L1_RANGING_CORE__RANGE_REF_1_LMM 0x0987 - - - - - - - -#define VL53L1_RANGING_CORE__RANGE_REF_1_LLM 0x0988 - - - - - - - -#define VL53L1_RANGING_CORE__RANGE_REF_1_LLL 0x0989 - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_WINDOW_EVENTS_1_MMM 0x098A - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_WINDOW_EVENTS_1_LMM 0x098B - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_WINDOW_EVENTS_1_LLM 0x098C - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_WINDOW_EVENTS_1_LLL 0x098D - - - - - - - -#define VL53L1_RANGING_CORE__RANGING_TOTAL_EVENTS_1_MMM 0x098E - - - - - - - -#define VL53L1_RANGING_CORE__RANGING_TOTAL_EVENTS_1_LMM 0x098F - - - - - - - -#define VL53L1_RANGING_CORE__RANGING_TOTAL_EVENTS_1_LLM 0x0990 - - - - - - - -#define VL53L1_RANGING_CORE__RANGING_TOTAL_EVENTS_1_LLL 0x0991 - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_TOTAL_EVENTS_1_MMM 0x0992 - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_TOTAL_EVENTS_1_LMM 0x0993 - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_TOTAL_EVENTS_1_LLM 0x0994 - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_TOTAL_EVENTS_1_LLL 0x0995 - - - - - - - -#define VL53L1_RANGING_CORE__TOTAL_PERIODS_ELAPSED_1_MM 0x0996 - - - - - - - -#define VL53L1_RANGING_CORE__TOTAL_PERIODS_ELAPSED_1_LM 0x0997 - - - - - - - -#define VL53L1_RANGING_CORE__TOTAL_PERIODS_ELAPSED_1_LL 0x0998 - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_MISMATCH_MM 0x0999 - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_MISMATCH_LM 0x099A - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_MISMATCH_LL 0x099B - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_WINDOW_EVENTS_REF_1_MMM 0x099C - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_WINDOW_EVENTS_REF_1_LMM 0x099D - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_WINDOW_EVENTS_REF_1_LLM 0x099E - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_WINDOW_EVENTS_REF_1_LLL 0x099F - - - - - - - -#define VL53L1_RANGING_CORE__RANGING_TOTAL_EVENTS_REF_1_MMM 0x09A0 - - - - - - - -#define VL53L1_RANGING_CORE__RANGING_TOTAL_EVENTS_REF_1_LMM 0x09A1 - - - - - - - -#define VL53L1_RANGING_CORE__RANGING_TOTAL_EVENTS_REF_1_LLM 0x09A2 - - - - - - - -#define VL53L1_RANGING_CORE__RANGING_TOTAL_EVENTS_REF_1_LLL 0x09A3 - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_TOTAL_EVENTS_REF_1_MMM 0x09A4 - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_TOTAL_EVENTS_REF_1_LMM 0x09A5 - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_TOTAL_EVENTS_REF_1_LLM 0x09A6 - - - - - - - -#define VL53L1_RANGING_CORE__SIGNAL_TOTAL_EVENTS_REF_1_LLL 0x09A7 - - - - - - - -#define VL53L1_RANGING_CORE__TOTAL_PERIODS_ELAPSED_REF_1_MM 0x09A8 - - - - - - - -#define VL53L1_RANGING_CORE__TOTAL_PERIODS_ELAPSED_REF_1_LM 0x09A9 - - - - - - - -#define VL53L1_RANGING_CORE__TOTAL_PERIODS_ELAPSED_REF_1_LL 0x09AA - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_MISMATCH_REF_MM 0x09AB - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_MISMATCH_REF_LM 0x09AC - - - - - - - -#define VL53L1_RANGING_CORE__AMBIENT_MISMATCH_REF_LL 0x09AD - - - - - - - -#define VL53L1_RANGING_CORE__GPIO_CONFIG__A0 0x0A00 - - - - - - - -#define VL53L1_RANGING_CORE__RESET_CONTROL__A0 0x0A01 - - - - - - - -#define VL53L1_RANGING_CORE__INTR_MANAGER__A0 0x0A02 - - - - - - - -#define VL53L1_RANGING_CORE__POWER_FSM_TIME_OSC__A0 0x0A06 - - - - - - - -#define VL53L1_RANGING_CORE__VCSEL_ATEST__A0 0x0A07 - - - - - - - -#define VL53L1_RANGING_CORE__VCSEL_PERIOD_CLIPPED__A0 0x0A08 - - - - - - - -#define VL53L1_RANGING_CORE__VCSEL_STOP_CLIPPED__A0 0x0A09 - - - - - - - -#define VL53L1_RANGING_CORE__CALIB_2__A0 0x0A0A - - - - - - - -#define VL53L1_RANGING_CORE__STOP_CONDITION__A0 0x0A0B - - - - - - - -#define VL53L1_RANGING_CORE__STATUS_RESET__A0 0x0A0C - - - - - - - -#define VL53L1_RANGING_CORE__READOUT_CFG__A0 0x0A0D - - - - - - - -#define VL53L1_RANGING_CORE__WINDOW_SETTING__A0 0x0A0E - - - - - - - -#define VL53L1_RANGING_CORE__VCSEL_DELAY__A0 0x0A1A - - - - - - - -#define VL53L1_RANGING_CORE__REFERENCE_2__A0 0x0A1B - - - - - - - -#define VL53L1_RANGING_CORE__REGAVDD1V2__A0 0x0A1D - - - - - - - -#define VL53L1_RANGING_CORE__TST_MUX__A0 0x0A1F - - - - - - - -#define VL53L1_RANGING_CORE__CUSTOM_FE_2__A0 0x0A20 - - - - - - - -#define VL53L1_RANGING_CORE__SPAD_READOUT__A0 0x0A21 - - - - - - - -#define VL53L1_RANGING_CORE__CPUMP_1__A0 0x0A22 - - - - - - - -#define VL53L1_RANGING_CORE__SPARE_REGISTER__A0 0x0A23 - - - - - - - -#define VL53L1_RANGING_CORE__VCSEL_CONT_STAGE5_BYPASS__A0 0x0A24 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_18 0x0A25 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_19 0x0A26 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_20 0x0A27 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_21 0x0A28 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_22 0x0A29 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_23 0x0A2A - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_24 0x0A2B - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_25 0x0A2C - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_26 0x0A2D - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_27 0x0A2E - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_28 0x0A2F - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_29 0x0A30 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_30 0x0A31 - - - - - - - -#define VL53L1_RANGING_CORE__RET_SPAD_EN_31 0x0A32 - - - - - - - -#define VL53L1_RANGING_CORE__REF_SPAD_EN_0__EWOK 0x0A33 - - - - - - - -#define VL53L1_RANGING_CORE__REF_SPAD_EN_1__EWOK 0x0A34 - - - - - - - -#define VL53L1_RANGING_CORE__REF_SPAD_EN_2__EWOK 0x0A35 - - - - - - - -#define VL53L1_RANGING_CORE__REF_SPAD_EN_3__EWOK 0x0A36 - - - - - - - -#define VL53L1_RANGING_CORE__REF_SPAD_EN_4__EWOK 0x0A37 - - - - - - - -#define VL53L1_RANGING_CORE__REF_SPAD_EN_5__EWOK 0x0A38 - - - - - - - -#define VL53L1_RANGING_CORE__REF_EN_START_SELECT 0x0A39 - - - - - - - -#define VL53L1_RANGING_CORE__REGDVDD1V2_ATEST__EWOK 0x0A41 - - - - - - - -#define VL53L1_SOFT_RESET_GO1 0x0B00 - - - - - - - -#define VL53L1_PRIVATE__PATCH_BASE_ADDR_RSLV 0x0E00 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__INTERRUPT_STATUS 0x0ED0 - - - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__RANGE_STATUS 0x0ED1 - - - - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__REPORT_STATUS 0x0ED2 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__STREAM_COUNT 0x0ED3 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0 0x0ED4 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_HI 0x0ED4 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_LO 0x0ED5 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0 0x0ED6 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_HI 0x0ED6 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_LO 0x0ED7 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0 0x0ED8 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_HI 0x0ED8 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_LO 0x0ED9 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SIGMA_SD0 0x0EDA - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SIGMA_SD0_HI 0x0EDA - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SIGMA_SD0_LO 0x0EDB - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PHASE_SD0 0x0EDC - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PHASE_SD0_HI 0x0EDC - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PHASE_SD0_LO 0x0EDD - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0 0x0EDE - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_HI 0x0EDE - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_LO 0x0EDF - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0 0x0EE0 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_HI 0x0EE0 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_LO 0x0EE1 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0 0x0EE2 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_HI 0x0EE2 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_LO 0x0EE3 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0 0x0EE4 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_HI 0x0EE4 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_LO 0x0EE5 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0 0x0EE6 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_HI 0x0EE6 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_LO 0x0EE7 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1 0x0EE8 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_HI 0x0EE8 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_LO 0x0EE9 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1 0x0EEA - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_HI 0x0EEA - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_LO 0x0EEB - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1 0x0EEC - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_HI 0x0EEC - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_LO 0x0EED - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SIGMA_SD1 0x0EEE - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SIGMA_SD1_HI 0x0EEE - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SIGMA_SD1_LO 0x0EEF - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PHASE_SD1 0x0EF0 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PHASE_SD1_HI 0x0EF0 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__PHASE_SD1_LO 0x0EF1 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1 0x0EF2 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_HI 0x0EF2 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_LO 0x0EF3 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_0_SD1 0x0EF4 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_0_SD1_HI 0x0EF4 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_0_SD1_LO 0x0EF5 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_1_SD1 0x0EF6 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_1_SD1_HI 0x0EF6 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_1_SD1_LO 0x0EF7 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_2_SD1 0x0EF8 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_2_SD1_HI 0x0EF8 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_2_SD1_LO 0x0EF9 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_3_SD1 0x0EFA - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_3_SD1_HI 0x0EFA - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT__SPARE_3_SD1_LO 0x0EFB - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0 0x0EFC - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_3 0x0EFC - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_2 0x0EFD - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_1 0x0EFE - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_0 0x0EFF - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0 0x0F00 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_3 0x0F00 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_2 0x0F01 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_1 0x0F02 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_0 0x0F03 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0 0x0F04 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_3 0x0F04 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_2 0x0F05 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_1 0x0F06 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_0 0x0F07 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0 0x0F08 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_3 0x0F08 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_2 0x0F09 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_1 0x0F0A - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_0 0x0F0B - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1 0x0F0C - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_3 0x0F0C - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_2 0x0F0D - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_1 0x0F0E - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_0 0x0F0F - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1 0x0F10 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_3 0x0F10 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_2 0x0F11 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_1 0x0F12 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_0 0x0F13 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1 0x0F14 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_3 0x0F14 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_2 0x0F15 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_1 0x0F16 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_0 0x0F17 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1 0x0F18 - - - - - - - - - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_3 0x0F18 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_2 0x0F19 - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_1 0x0F1A - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_0 0x0F1B - - - - - - - -#define VL53L1_PREV_SHADOW_RESULT_CORE__SPARE_0 0x0F1C - - - - - - - - - - - - - - - -#define VL53L1_RESULT__DEBUG_STATUS 0x0F20 - - - - - - - - - - - - - - - -#define VL53L1_RESULT__DEBUG_STAGE 0x0F21 - - - - - - - - - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_RATE_HIGH 0x0F24 - - - - - - - - - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_RATE_HIGH_HI 0x0F24 - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_RATE_HIGH_LO 0x0F25 - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_RATE_LOW 0x0F26 - - - - - - - - - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_RATE_LOW_HI 0x0F26 - - - - - - - -#define VL53L1_GPH__SYSTEM__THRESH_RATE_LOW_LO 0x0F27 - - - - - - - -#define VL53L1_GPH__SYSTEM__INTERRUPT_CONFIG_GPIO 0x0F28 - - - - - - - - - - - - - - - - - - - - -#define VL53L1_GPH__DSS_CONFIG__ROI_MODE_CONTROL 0x0F2F - - - - - - - - - - - - - - - - -#define VL53L1_GPH__DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT 0x0F30 - - - - - - - - - - - - - - - -#define VL53L1_GPH__DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT_HI 0x0F30 - - - - - - - -#define VL53L1_GPH__DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT_LO 0x0F31 - - - - - - - -#define VL53L1_GPH__DSS_CONFIG__MANUAL_BLOCK_SELECT 0x0F32 - - - - - - - - - - - - - - - -#define VL53L1_GPH__DSS_CONFIG__MAX_SPADS_LIMIT 0x0F33 - - - - - - - - - - - - - - - -#define VL53L1_GPH__DSS_CONFIG__MIN_SPADS_LIMIT 0x0F34 - - - - - - - - - - - - - - - -#define VL53L1_GPH__MM_CONFIG__TIMEOUT_MACROP_A_HI 0x0F36 - - - - - - - - - - - - - - - -#define VL53L1_GPH__MM_CONFIG__TIMEOUT_MACROP_A_LO 0x0F37 - - - - - - - - - - - - - - - -#define VL53L1_GPH__MM_CONFIG__TIMEOUT_MACROP_B_HI 0x0F38 - - - - - - - - - - - - - - - -#define VL53L1_GPH__MM_CONFIG__TIMEOUT_MACROP_B_LO 0x0F39 - - - - - - - - - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__TIMEOUT_MACROP_A_HI 0x0F3A - - - - - - - - - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__TIMEOUT_MACROP_A_LO 0x0F3B - - - - - - - - - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__VCSEL_PERIOD_A 0x0F3C - - - - - - - - - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__VCSEL_PERIOD_B 0x0F3D - - - - - - - - - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__TIMEOUT_MACROP_B_HI 0x0F3E - - - - - - - - - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__TIMEOUT_MACROP_B_LO 0x0F3F - - - - - - - - - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__SIGMA_THRESH 0x0F40 - - - - - - - - - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__SIGMA_THRESH_HI 0x0F40 - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__SIGMA_THRESH_LO 0x0F41 - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS 0x0F42 - - - - - - - - - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS_HI 0x0F42 - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS_LO 0x0F43 - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__VALID_PHASE_LOW 0x0F44 - - - - - - - - - - - - - - - -#define VL53L1_GPH__RANGE_CONFIG__VALID_PHASE_HIGH 0x0F45 - - - - - - - - - - - - - - - -#define VL53L1_FIRMWARE__INTERNAL_STREAM_COUNT_DIV 0x0F46 - - - - - - - - - - - - - - - -#define VL53L1_FIRMWARE__INTERNAL_STREAM_COUNTER_VAL 0x0F47 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__ROI_CTRL 0x0F54 - - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__SPARE_1 0x0F55 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__SPARE_2 0x0F56 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__SPARE_3 0x0F57 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__SPARE_4 0x0F58 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__SPARE_5 0x0F59 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__SPARE_6 0x0F5A - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__SPARE_7 0x0F5B - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_0 0x0F5C - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_1 0x0F5D - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_2 0x0F5E - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_3 0x0F5F - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_4 0x0F60 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_5 0x0F61 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_6 0x0F62 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_7 0x0F63 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_8 0x0F64 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_9 0x0F65 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_10 0x0F66 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_11 0x0F67 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_12 0x0F68 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_13 0x0F69 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_14 0x0F6A - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_15 0x0F6B - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_16 0x0F6C - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_17 0x0F6D - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_18 0x0F6E - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_19 0x0F6F - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_20 0x0F70 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_21 0x0F71 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_22 0x0F72 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_23 0x0F73 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_24 0x0F74 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_25 0x0F75 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_26 0x0F76 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_27 0x0F77 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_28 0x0F78 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_29 0x0F79 - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_30 0x0F7A - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_SPAD_EN_31 0x0F7B - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_0 0x0F7C - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__USER_ROI_1 0x0F7D - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__MODE_ROI_0 0x0F7E - - - - - - - - - - - - - - - -#define VL53L1_DSS_CALC__MODE_ROI_1 0x0F7F - - - - - - - - - - - - - - - -#define VL53L1_SIGMA_ESTIMATOR_CALC__SPARE_0 0x0F80 - - - - - - - - - - - - - - - -#define VL53L1_VHV_RESULT__PEAK_SIGNAL_RATE_MCPS 0x0F82 - - - - - - - - - - - - - - - -#define VL53L1_VHV_RESULT__PEAK_SIGNAL_RATE_MCPS_HI 0x0F82 - - - - - - - -#define VL53L1_VHV_RESULT__PEAK_SIGNAL_RATE_MCPS_LO 0x0F83 - - - - - - - -#define VL53L1_VHV_RESULT__SIGNAL_TOTAL_EVENTS_REF 0x0F84 - - - - - - - - - - - - - - - -#define VL53L1_VHV_RESULT__SIGNAL_TOTAL_EVENTS_REF_3 0x0F84 - - - - - - - -#define VL53L1_VHV_RESULT__SIGNAL_TOTAL_EVENTS_REF_2 0x0F85 - - - - - - - -#define VL53L1_VHV_RESULT__SIGNAL_TOTAL_EVENTS_REF_1 0x0F86 - - - - - - - -#define VL53L1_VHV_RESULT__SIGNAL_TOTAL_EVENTS_REF_0 0x0F87 - - - - - - - -#define VL53L1_PHASECAL_RESULT__PHASE_OUTPUT_REF 0x0F88 - - - - - - - - - - - - - - - -#define VL53L1_PHASECAL_RESULT__PHASE_OUTPUT_REF_HI 0x0F88 - - - - - - - -#define VL53L1_PHASECAL_RESULT__PHASE_OUTPUT_REF_LO 0x0F89 - - - - - - - -#define VL53L1_DSS_RESULT__TOTAL_RATE_PER_SPAD 0x0F8A - - - - - - - - - - - - - - - -#define VL53L1_DSS_RESULT__TOTAL_RATE_PER_SPAD_HI 0x0F8A - - - - - - - -#define VL53L1_DSS_RESULT__TOTAL_RATE_PER_SPAD_LO 0x0F8B - - - - - - - -#define VL53L1_DSS_RESULT__ENABLED_BLOCKS 0x0F8C - - - - - - - - - - - - - - - -#define VL53L1_DSS_RESULT__NUM_REQUESTED_SPADS 0x0F8E - - - - - - - - - - - - - - - -#define VL53L1_DSS_RESULT__NUM_REQUESTED_SPADS_HI 0x0F8E - - - - - - - -#define VL53L1_DSS_RESULT__NUM_REQUESTED_SPADS_LO 0x0F8F - - - - - - - -#define VL53L1_MM_RESULT__INNER_INTERSECTION_RATE 0x0F92 - - - - - - - - - - - - - - - -#define VL53L1_MM_RESULT__INNER_INTERSECTION_RATE_HI 0x0F92 - - - - - - - -#define VL53L1_MM_RESULT__INNER_INTERSECTION_RATE_LO 0x0F93 - - - - - - - -#define VL53L1_MM_RESULT__OUTER_COMPLEMENT_RATE 0x0F94 - - - - - - - - - - - - - - - -#define VL53L1_MM_RESULT__OUTER_COMPLEMENT_RATE_HI 0x0F94 - - - - - - - -#define VL53L1_MM_RESULT__OUTER_COMPLEMENT_RATE_LO 0x0F95 - - - - - - - -#define VL53L1_MM_RESULT__TOTAL_OFFSET 0x0F96 - - - - - - - - - - - - - - - -#define VL53L1_MM_RESULT__TOTAL_OFFSET_HI 0x0F96 - - - - - - - -#define VL53L1_MM_RESULT__TOTAL_OFFSET_LO 0x0F97 - - - - - - - -#define VL53L1_XTALK_CALC__XTALK_FOR_ENABLED_SPADS 0x0F98 - - - - - - - - - - - - - - - -#define VL53L1_XTALK_CALC__XTALK_FOR_ENABLED_SPADS_3 0x0F98 - - - - - - - -#define VL53L1_XTALK_CALC__XTALK_FOR_ENABLED_SPADS_2 0x0F99 - - - - - - - -#define VL53L1_XTALK_CALC__XTALK_FOR_ENABLED_SPADS_1 0x0F9A - - - - - - - -#define VL53L1_XTALK_CALC__XTALK_FOR_ENABLED_SPADS_0 0x0F9B - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_USER_ROI_KCPS 0x0F9C - - - - - - - - - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_USER_ROI_KCPS_3 0x0F9C - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_USER_ROI_KCPS_2 0x0F9D - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_USER_ROI_KCPS_1 0x0F9E - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_USER_ROI_KCPS_0 0x0F9F - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_MM_INNER_ROI_KCPS 0x0FA0 - - - - - - - - - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_MM_INNER_ROI_KCPS_3 0x0FA0 - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_MM_INNER_ROI_KCPS_2 0x0FA1 - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_MM_INNER_ROI_KCPS_1 0x0FA2 - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_MM_INNER_ROI_KCPS_0 0x0FA3 - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_MM_OUTER_ROI_KCPS 0x0FA4 - - - - - - - - - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_MM_OUTER_ROI_KCPS_3 0x0FA4 - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_MM_OUTER_ROI_KCPS_2 0x0FA5 - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_MM_OUTER_ROI_KCPS_1 0x0FA6 - - - - - - - -#define VL53L1_XTALK_RESULT__AVG_XTALK_MM_OUTER_ROI_KCPS_0 0x0FA7 - - - - - - - -#define VL53L1_RANGE_RESULT__ACCUM_PHASE 0x0FA8 - - - - - - - - - - - - - - - -#define VL53L1_RANGE_RESULT__ACCUM_PHASE_3 0x0FA8 - - - - - - - -#define VL53L1_RANGE_RESULT__ACCUM_PHASE_2 0x0FA9 - - - - - - - -#define VL53L1_RANGE_RESULT__ACCUM_PHASE_1 0x0FAA - - - - - - - -#define VL53L1_RANGE_RESULT__ACCUM_PHASE_0 0x0FAB - - - - - - - -#define VL53L1_RANGE_RESULT__OFFSET_CORRECTED_RANGE 0x0FAC - - - - - - - - - - - - - - - -#define VL53L1_RANGE_RESULT__OFFSET_CORRECTED_RANGE_HI 0x0FAC - - - - - - - -#define VL53L1_RANGE_RESULT__OFFSET_CORRECTED_RANGE_LO 0x0FAD - - - - - - - -#define VL53L1_SHADOW_PHASECAL_RESULT__VCSEL_START 0x0FAE - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__INTERRUPT_STATUS 0x0FB0 - - - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__RANGE_STATUS 0x0FB1 - - - - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__REPORT_STATUS 0x0FB2 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__STREAM_COUNT 0x0FB3 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0 0x0FB4 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_HI 0x0FB4 - - - - - - - -#define VL53L1_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_LO 0x0FB5 - - - - - - - -#define VL53L1_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0 0x0FB6 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_HI 0x0FB6 - - - - - - - -#define VL53L1_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_LO 0x0FB7 - - - - - - - -#define VL53L1_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0 0x0FB8 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_HI 0x0FB8 - - - - - - - -#define VL53L1_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_LO 0x0FB9 - - - - - - - -#define VL53L1_SHADOW_RESULT__SIGMA_SD0 0x0FBA - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__SIGMA_SD0_HI 0x0FBA - - - - - - - -#define VL53L1_SHADOW_RESULT__SIGMA_SD0_LO 0x0FBB - - - - - - - -#define VL53L1_SHADOW_RESULT__PHASE_SD0 0x0FBC - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__PHASE_SD0_HI 0x0FBC - - - - - - - -#define VL53L1_SHADOW_RESULT__PHASE_SD0_LO 0x0FBD - - - - - - - -#define VL53L1_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0 0x0FBE - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_HI 0x0FBE - - - - - - - -#define VL53L1_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_LO 0x0FBF - - - - - - - -#define VL53L1_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0 0x0FC0 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_HI 0x0FC0 - - - - - - - -#define VL53L1_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_LO 0x0FC1 - - - - - - - -#define VL53L1_SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0 0x0FC2 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_HI 0x0FC2 - - - - - - - -#define VL53L1_SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_LO 0x0FC3 - - - - - - - -#define VL53L1_SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0 0x0FC4 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_HI 0x0FC4 - - - - - - - -#define VL53L1_SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_LO 0x0FC5 - - - - - - - -#define VL53L1_SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0 0x0FC6 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_HI 0x0FC6 - - - - - - - -#define VL53L1_SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_LO 0x0FC7 - - - - - - - -#define VL53L1_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1 0x0FC8 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_HI 0x0FC8 - - - - - - - -#define VL53L1_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_LO 0x0FC9 - - - - - - - -#define VL53L1_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1 0x0FCA - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_HI 0x0FCA - - - - - - - -#define VL53L1_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_LO 0x0FCB - - - - - - - -#define VL53L1_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1 0x0FCC - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_HI 0x0FCC - - - - - - - -#define VL53L1_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_LO 0x0FCD - - - - - - - -#define VL53L1_SHADOW_RESULT__SIGMA_SD1 0x0FCE - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__SIGMA_SD1_HI 0x0FCE - - - - - - - -#define VL53L1_SHADOW_RESULT__SIGMA_SD1_LO 0x0FCF - - - - - - - -#define VL53L1_SHADOW_RESULT__PHASE_SD1 0x0FD0 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__PHASE_SD1_HI 0x0FD0 - - - - - - - -#define VL53L1_SHADOW_RESULT__PHASE_SD1_LO 0x0FD1 - - - - - - - -#define VL53L1_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1 0x0FD2 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_HI 0x0FD2 - - - - - - - -#define VL53L1_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_LO 0x0FD3 - - - - - - - -#define VL53L1_SHADOW_RESULT__SPARE_0_SD1 0x0FD4 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__SPARE_0_SD1_HI 0x0FD4 - - - - - - - -#define VL53L1_SHADOW_RESULT__SPARE_0_SD1_LO 0x0FD5 - - - - - - - -#define VL53L1_SHADOW_RESULT__SPARE_1_SD1 0x0FD6 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__SPARE_1_SD1_HI 0x0FD6 - - - - - - - -#define VL53L1_SHADOW_RESULT__SPARE_1_SD1_LO 0x0FD7 - - - - - - - -#define VL53L1_SHADOW_RESULT__SPARE_2_SD1 0x0FD8 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__SPARE_2_SD1_HI 0x0FD8 - - - - - - - -#define VL53L1_SHADOW_RESULT__SPARE_2_SD1_LO 0x0FD9 - - - - - - - -#define VL53L1_SHADOW_RESULT__SPARE_3_SD1 0x0FDA - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT__THRESH_INFO 0x0FDB - - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0 0x0FDC - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_3 0x0FDC - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_2 0x0FDD - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_1 0x0FDE - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_0 0x0FDF - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0 0x0FE0 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_3 0x0FE0 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_2 0x0FE1 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_1 0x0FE2 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_0 0x0FE3 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0 0x0FE4 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_3 0x0FE4 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_2 0x0FE5 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_1 0x0FE6 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_0 0x0FE7 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0 0x0FE8 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_3 0x0FE8 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_2 0x0FE9 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_1 0x0FEA - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_0 0x0FEB - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1 0x0FEC - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_3 0x0FEC - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_2 0x0FED - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_1 0x0FEE - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_0 0x0FEF - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1 0x0FF0 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_3 0x0FF0 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_2 0x0FF1 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_1 0x0FF2 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_0 0x0FF3 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1 0x0FF4 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_3 0x0FF4 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_2 0x0FF5 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_1 0x0FF6 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_0 0x0FF7 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1 0x0FF8 - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_3 0x0FF8 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_2 0x0FF9 - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_1 0x0FFA - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_0 0x0FFB - - - - - - - -#define VL53L1_SHADOW_RESULT_CORE__SPARE_0 0x0FFC - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_PHASECAL_RESULT__REFERENCE_PHASE_HI 0x0FFE - - - - - - - - - - - - - - - -#define VL53L1_SHADOW_PHASECAL_RESULT__REFERENCE_PHASE_LO 0x0FFF - - - - - - - - - - - - - - - - - - - - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_register_settings.h b/drivers/input/misc/vl53L1/inc/vl53l1_register_settings.h deleted file mode 100644 index 6caf2ba9a997..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_register_settings.h +++ /dev/null @@ -1,273 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_REGISTER_SETTINGS_H_ -#define _VL53L1_REGISTER_SETTINGS_H_ - - - - - - - - - - - - - - - - -#define VL53L1_DEVICESCHEDULERMODE_PSEUDO_SOLO 0x00 -#define VL53L1_DEVICESCHEDULERMODE_STREAMING 0x01 -#define VL53L1_DEVICESCHEDULERMODE_HISTOGRAM 0x02 - - - - - - - - - - - -#define VL53L1_DEVICEREADOUTMODE_SINGLE_SD (0x00 << 2) -#define VL53L1_DEVICEREADOUTMODE_DUAL_SD (0x01 << 2) -#define VL53L1_DEVICEREADOUTMODE_SPLIT_READOUT (0x02 << 2) -#define VL53L1_DEVICEREADOUTMODE_SPLIT_MANUAL (0x03 << 2) - - - - - - - - - - - - - - - - - - - -#define VL53L1_DEVICEMEASUREMENTMODE_MODE_MASK 0xF0 -#define VL53L1_DEVICEMEASUREMENTMODE_STOP_MASK 0x0F - -#define VL53L1_GROUPEDPARAMETERHOLD_ID_MASK 0x02 - - - - -#define VL53L1_EWOK_I2C_DEV_ADDR_DEFAULT 0x29 - - -#define VL53L1_OSC_FREQUENCY 0x00 -#define VL53L1_OSC_TRIM_DEFAULT 0x00 -#define VL53L1_OSC_FREQ_SET_DEFAULT 0x00 - -#define VL53L1_RANGE_HISTOGRAM_REF 0x08 -#define VL53L1_RANGE_HISTOGRAM_RET 0x10 -#define VL53L1_RANGE_HISTOGRAM_BOTH 0x18 -#define VL53L1_RANGE_HISTOGRAM_INIT 0x20 -#define VL53L1_RANGE_VHV_INIT 0x40 - - - -#define VL53L1_RESULT_RANGE_STATUS 0x1F - - - -#define VL53L1_SYSTEM__SEED_CONFIG__MANUAL 0x00 -#define VL53L1_SYSTEM__SEED_CONFIG__STANDARD 0x01 -#define VL53L1_SYSTEM__SEED_CONFIG__EVEN_UPDATE_ONLY 0x02 - - - -#define VL53L1_INTERRUPT_CONFIG_LEVEL_LOW 0x00 -#define VL53L1_INTERRUPT_CONFIG_LEVEL_HIGH 0x01 -#define VL53L1_INTERRUPT_CONFIG_OUT_OF_WINDOW 0x02 -#define VL53L1_INTERRUPT_CONFIG_IN_WINDOW 0x03 -#define VL53L1_INTERRUPT_CONFIG_NEW_SAMPLE_READY 0x20 - - - -#define VL53L1_CLEAR_RANGE_INT 0x01 -#define VL53L1_CLEAR_ERROR_INT 0x02 - - - -#define VL53L1_SEQUENCE_VHV_EN 0x01 -#define VL53L1_SEQUENCE_PHASECAL_EN 0x02 -#define VL53L1_SEQUENCE_REFERENCE_PHASE_EN 0x04 -#define VL53L1_SEQUENCE_DSS1_EN 0x08 -#define VL53L1_SEQUENCE_DSS2_EN 0x10 -#define VL53L1_SEQUENCE_MM1_EN 0x20 -#define VL53L1_SEQUENCE_MM2_EN 0x40 -#define VL53L1_SEQUENCE_RANGE_EN 0x80 - - - -#define VL53L1_DSS_CONTROL__ROI_SUBTRACT 0x20 -#define VL53L1_DSS_CONTROL__ROI_INTERSECT 0x10 - -#define VL53L1_DSS_CONTROL__MODE_DISABLED 0x00 -#define VL53L1_DSS_CONTROL__MODE_TARGET_RATE 0x01 -#define VL53L1_DSS_CONTROL__MODE_EFFSPADS 0x02 -#define VL53L1_DSS_CONTROL__MODE_BLOCKSELECT 0x03 - - - - - - - - - - -#define VL53L1_RANGING_CORE__SPAD_READOUT__STANDARD 0x45 -#define VL53L1_RANGING_CORE__SPAD_READOUT__RETURN_ARRAY_ONLY 0x05 -#define VL53L1_RANGING_CORE__SPAD_READOUT__REFERENCE_ARRAY_ONLY 0x55 -#define VL53L1_RANGING_CORE__SPAD_READOUT__RETURN_SPLIT_ARRAY 0x25 -#define VL53L1_RANGING_CORE__SPAD_READOUT__CALIB_PULSES 0xF5 - - -#define VL53L1_LASER_SAFETY__KEY_VALUE 0x6C - - - - - - - - - - -#define VL53L1_RANGE_STATUS__RANGE_STATUS_MASK 0x1F -#define VL53L1_RANGE_STATUS__MAX_THRESHOLD_HIT_MASK 0x20 -#define VL53L1_RANGE_STATUS__MIN_THRESHOLD_HIT_MASK 0x40 -#define VL53L1_RANGE_STATUS__GPH_ID_RANGE_STATUS_MASK 0x80 - - - - - - - - - -#define VL53L1_INTERRUPT_STATUS__INT_STATUS_MASK 0x07 -#define VL53L1_INTERRUPT_STATUS__INT_ERROR_STATUS_MASK 0x18 -#define VL53L1_INTERRUPT_STATUS__GPH_ID_INT_STATUS_MASK 0x20 - - - - - -#endif - - - - - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_register_structs.h b/drivers/input/misc/vl53L1/inc/vl53l1_register_structs.h deleted file mode 100644 index 1da22e7f5f2a..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_register_structs.h +++ /dev/null @@ -1,4848 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_REGISTER_STRUCTS_H_ -#define _VL53L1_REGISTER_STRUCTS_H_ - -#include "vl53l1_types.h" -#include "vl53l1_register_map.h" - -#define VL53L1_STATIC_NVM_MANAGED_I2C_INDEX VL53L1_I2C_SLAVE__DEVICE_ADDRESS -#define VL53L1_CUSTOMER_NVM_MANAGED_I2C_INDEX VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_REF_0 -#define VL53L1_STATIC_CONFIG_I2C_INDEX VL53L1_DSS_CONFIG__TARGET_TOTAL_RATE_MCPS -#define VL53L1_GENERAL_CONFIG_I2C_INDEX VL53L1_GPH_CONFIG__STREAM_COUNT_UPDATE_VALUE -#define VL53L1_TIMING_CONFIG_I2C_INDEX VL53L1_MM_CONFIG__TIMEOUT_MACROP_A_HI -#define VL53L1_DYNAMIC_CONFIG_I2C_INDEX VL53L1_SYSTEM__GROUPED_PARAMETER_HOLD_0 -#define VL53L1_SYSTEM_CONTROL_I2C_INDEX VL53L1_POWER_MANAGEMENT__GO1_POWER_FORCE -#define VL53L1_SYSTEM_RESULTS_I2C_INDEX VL53L1_RESULT__INTERRUPT_STATUS -#define VL53L1_CORE_RESULTS_I2C_INDEX VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0 -#define VL53L1_DEBUG_RESULTS_I2C_INDEX VL53L1_PHASECAL_RESULT__REFERENCE_PHASE -#define VL53L1_NVM_COPY_DATA_I2C_INDEX VL53L1_IDENTIFICATION__MODEL_ID -#define VL53L1_PREV_SHADOW_SYSTEM_RESULTS_I2C_INDEX VL53L1_PREV_SHADOW_RESULT__INTERRUPT_STATUS -#define VL53L1_PREV_SHADOW_CORE_RESULTS_I2C_INDEX VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0 -#define VL53L1_PATCH_DEBUG_I2C_INDEX VL53L1_RESULT__DEBUG_STATUS -#define VL53L1_GPH_GENERAL_CONFIG_I2C_INDEX VL53L1_GPH__SYSTEM__THRESH_RATE_HIGH -#define VL53L1_GPH_STATIC_CONFIG_I2C_INDEX VL53L1_GPH__DSS_CONFIG__ROI_MODE_CONTROL -#define VL53L1_GPH_TIMING_CONFIG_I2C_INDEX VL53L1_GPH__MM_CONFIG__TIMEOUT_MACROP_A_HI -#define VL53L1_FW_INTERNAL_I2C_INDEX VL53L1_FIRMWARE__INTERNAL_STREAM_COUNT_DIV -#define VL53L1_PATCH_RESULTS_I2C_INDEX VL53L1_DSS_CALC__ROI_CTRL -#define VL53L1_SHADOW_SYSTEM_RESULTS_I2C_INDEX VL53L1_SHADOW_PHASECAL_RESULT__VCSEL_START -#define VL53L1_SHADOW_CORE_RESULTS_I2C_INDEX VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0 - -#define VL53L1_STATIC_NVM_MANAGED_I2C_SIZE_BYTES 11 -#define VL53L1_CUSTOMER_NVM_MANAGED_I2C_SIZE_BYTES 23 -#define VL53L1_STATIC_CONFIG_I2C_SIZE_BYTES 32 -#define VL53L1_GENERAL_CONFIG_I2C_SIZE_BYTES 22 -#define VL53L1_TIMING_CONFIG_I2C_SIZE_BYTES 23 -#define VL53L1_DYNAMIC_CONFIG_I2C_SIZE_BYTES 18 -#define VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES 5 -#define VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES 44 -#define VL53L1_CORE_RESULTS_I2C_SIZE_BYTES 33 -#define VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES 56 -#define VL53L1_NVM_COPY_DATA_I2C_SIZE_BYTES 49 -#define VL53L1_PREV_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES 44 -#define VL53L1_PREV_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES 33 -#define VL53L1_PATCH_DEBUG_I2C_SIZE_BYTES 2 -#define VL53L1_GPH_GENERAL_CONFIG_I2C_SIZE_BYTES 5 -#define VL53L1_GPH_STATIC_CONFIG_I2C_SIZE_BYTES 6 -#define VL53L1_GPH_TIMING_CONFIG_I2C_SIZE_BYTES 16 -#define VL53L1_FW_INTERNAL_I2C_SIZE_BYTES 2 -#define VL53L1_PATCH_RESULTS_I2C_SIZE_BYTES 90 -#define VL53L1_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES 82 -#define VL53L1_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES 33 - - - - - - - - - - - - -typedef struct { - uint8_t i2c_slave__device_address; - - - - - - - - - - - uint8_t ana_config__vhv_ref_sel_vddpix; - - - - - - - - - - - uint8_t ana_config__vhv_ref_sel_vquench; - - - - - - - - - - - uint8_t ana_config__reg_avdd1v2_sel; - - - - - - - - - - - uint8_t ana_config__fast_osc__trim; - - - - - - - - - - - uint16_t osc_measured__fast_osc__frequency; - - - - - - - - - - - uint8_t vhv_config__timeout_macrop_loop_bound; - - - - - - - - - - - - uint8_t vhv_config__count_thresh; - - - - - - - - - - - uint8_t vhv_config__offset; - - - - - - - - - - - uint8_t vhv_config__init; - - - - - - - - - - - -} VL53L1_static_nvm_managed_t; - - - - - - - - - - - - -typedef struct { - uint8_t global_config__spad_enables_ref_0; - - - - - - - - - - - uint8_t global_config__spad_enables_ref_1; - - - - - - - - - - - uint8_t global_config__spad_enables_ref_2; - - - - - - - - - - - uint8_t global_config__spad_enables_ref_3; - - - - - - - - - - - uint8_t global_config__spad_enables_ref_4; - - - - - - - - - - - uint8_t global_config__spad_enables_ref_5; - - - - - - - - - - - uint8_t global_config__ref_en_start_select; - - - - - - - - - - - uint8_t ref_spad_man__num_requested_ref_spads; - - - - - - - - - - - uint8_t ref_spad_man__ref_location; - - - - - - - - - - - uint16_t algo__crosstalk_compensation_plane_offset_kcps; - - - - - - - - - - - int16_t algo__crosstalk_compensation_x_plane_gradient_kcps; - - - - - - - - - - - int16_t algo__crosstalk_compensation_y_plane_gradient_kcps; - - - - - - - - - - - uint16_t ref_spad_char__total_rate_target_mcps; - - - - - - - - - - - int16_t algo__part_to_part_range_offset_mm; - - - - - - - - - - - int16_t mm_config__inner_offset_mm; - - - - - - - - - - - int16_t mm_config__outer_offset_mm; - - - - - - - - - - -} VL53L1_customer_nvm_managed_t; - - - - - - - - - - - - -typedef struct { - uint16_t dss_config__target_total_rate_mcps; - - - - - - - - - - - uint8_t debug__ctrl; - - - - - - - - - - - uint8_t test_mode__ctrl; - - - - - - - - - - - uint8_t clk_gating__ctrl; - - - - - - - - - - - - - - uint8_t nvm_bist__ctrl; - - - - - - - - - - - - uint8_t nvm_bist__num_nvm_words; - - - - - - - - - - - uint8_t nvm_bist__start_address; - - - - - - - - - - - uint8_t host_if__status; - - - - - - - - - - - uint8_t pad_i2c_hv__config; - - - - - - - - - - - - - - - - uint8_t pad_i2c_hv__extsup_config; - - - - - - - - - - - uint8_t gpio_hv_pad__ctrl; - - - - - - - - - - - - uint8_t gpio_hv_mux__ctrl; - - - - - - - - - - - - uint8_t gpio__tio_hv_status; - - - - - - - - - - - - uint8_t gpio__fio_hv_status; - - - - - - - - - - - uint8_t ana_config__spad_sel_pswidth; - - - - - - - - - - - uint8_t ana_config__vcsel_pulse_width_offset; - - - - - - - - - - - uint8_t ana_config__fast_osc__config_ctrl; - - - - - - - - - - - uint8_t sigma_estimator__effective_pulse_width_ns; - - - - - - - - - - - uint8_t sigma_estimator__effective_ambient_width_ns; - - - - - - - - - - - uint8_t sigma_estimator__sigma_ref_mm; - - - - - - - - - - - uint8_t algo__crosstalk_compensation_valid_height_mm; - - - - - - - - - - - uint8_t spare_host_config__static_config_spare_0; - - - - - - - - - - - uint8_t spare_host_config__static_config_spare_1; - - - - - - - - - - - uint16_t algo__range_ignore_threshold_mcps; - - - - - - - - - - - uint8_t algo__range_ignore_valid_height_mm; - - - - - - - - - - - uint8_t algo__range_min_clip; - - - - - - - - - - - - uint8_t algo__consistency_check__tolerance; - - - - - - - - - - - uint8_t spare_host_config__static_config_spare_2; - - - - - - - - - - - uint8_t sd_config__reset_stages_msb; - - - - - - - - - - - uint8_t sd_config__reset_stages_lsb; - - - - - - - - - - - -} VL53L1_static_config_t; - - - - - - - - - - - - -typedef struct { - uint8_t gph_config__stream_count_update_value; - - - - - - - - - - - uint8_t global_config__stream_divider; - - - - - - - - - - - uint8_t system__interrupt_config_gpio; - - - - - - - - - - - - - - - - uint8_t cal_config__vcsel_start; - - - - - - - - - - - uint16_t cal_config__repeat_rate; - - - - - - - - - - - uint8_t global_config__vcsel_width; - - - - - - - - - - - uint8_t phasecal_config__timeout_macrop; - - - - - - - - - - - uint8_t phasecal_config__target; - - - - - - - - - - - uint8_t phasecal_config__override; - - - - - - - - - - - uint8_t dss_config__roi_mode_control; - - - - - - - - - - - - uint16_t system__thresh_rate_high; - - - - - - - - - - - uint16_t system__thresh_rate_low; - - - - - - - - - - - uint16_t dss_config__manual_effective_spads_select; - - - - - - - - - - - uint8_t dss_config__manual_block_select; - - - - - - - - - - - uint8_t dss_config__aperture_attenuation; - - - - - - - - - - - uint8_t dss_config__max_spads_limit; - - - - - - - - - - - uint8_t dss_config__min_spads_limit; - - - - - - - - - - -} VL53L1_general_config_t; - - - - - - - - - - - - -typedef struct { - uint8_t mm_config__timeout_macrop_a_hi; - - - - - - - - - - - uint8_t mm_config__timeout_macrop_a_lo; - - - - - - - - - - - uint8_t mm_config__timeout_macrop_b_hi; - - - - - - - - - - - uint8_t mm_config__timeout_macrop_b_lo; - - - - - - - - - - - uint8_t range_config__timeout_macrop_a_hi; - - - - - - - - - - - uint8_t range_config__timeout_macrop_a_lo; - - - - - - - - - - - uint8_t range_config__vcsel_period_a; - - - - - - - - - - - uint8_t range_config__timeout_macrop_b_hi; - - - - - - - - - - - uint8_t range_config__timeout_macrop_b_lo; - - - - - - - - - - - uint8_t range_config__vcsel_period_b; - - - - - - - - - - - uint16_t range_config__sigma_thresh; - - - - - - - - - - - uint16_t range_config__min_count_rate_rtn_limit_mcps; - - - - - - - - - - - uint8_t range_config__valid_phase_low; - - - - - - - - - - - uint8_t range_config__valid_phase_high; - - - - - - - - - - - uint32_t system__intermeasurement_period; - - - - - - - - - - - uint8_t system__fractional_enable; - - - - - - - - - - -} VL53L1_timing_config_t; - - - - - - - - - - - - -typedef struct { - uint8_t system__grouped_parameter_hold_0; - - - - - - - - - - - - uint16_t system__thresh_high; - - - - - - - - - - - uint16_t system__thresh_low; - - - - - - - - - - - uint8_t system__enable_xtalk_per_quadrant; - - - - - - - - - - - uint8_t system__seed_config; - - - - - - - - - - - - uint8_t sd_config__woi_sd0; - - - - - - - - - - - uint8_t sd_config__woi_sd1; - - - - - - - - - - - uint8_t sd_config__initial_phase_sd0; - - - - - - - - - - - uint8_t sd_config__initial_phase_sd1; - - - - - - - - - - - uint8_t system__grouped_parameter_hold_1; - - - - - - - - - - - - uint8_t sd_config__first_order_select; - - - - - - - - - - - - uint8_t sd_config__quantifier; - - - - - - - - - - - uint8_t roi_config__user_roi_centre_spad; - - - - - - - - - - - uint8_t roi_config__user_roi_requested_global_xy_size; - - - - - - - - - - - uint8_t system__sequence_config; - - - - - - - - - - - - - - - - - - uint8_t system__grouped_parameter_hold; - - - - - - - - - - - -} VL53L1_dynamic_config_t; - - - - - - - - - - - - -typedef struct { - uint8_t power_management__go1_power_force; - - - - - - - - - - - uint8_t system__stream_count_ctrl; - - - - - - - - - - - uint8_t firmware__enable; - - - - - - - - - - - uint8_t system__interrupt_clear; - - - - - - - - - - - - uint8_t system__mode_start; - - - - - - - - - - - - - - - -} VL53L1_system_control_t; - - - - - - - - - - - - -typedef struct { - uint8_t result__interrupt_status; - - - - - - - - - - - - - uint8_t result__range_status; - - - - - - - - - - - - - - uint8_t result__report_status; - - - - - - - - - - - uint8_t result__stream_count; - - - - - - - - - - - uint16_t result__dss_actual_effective_spads_sd0; - - - - - - - - - - - uint16_t result__peak_signal_count_rate_mcps_sd0; - - - - - - - - - - - uint16_t result__ambient_count_rate_mcps_sd0; - - - - - - - - - - - uint16_t result__sigma_sd0; - - - - - - - - - - - uint16_t result__phase_sd0; - - - - - - - - - - - uint16_t result__final_crosstalk_corrected_range_mm_sd0; - - - - - - - - - - - uint16_t result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0; - - - - - - - - - - - uint16_t result__mm_inner_actual_effective_spads_sd0; - - - - - - - - - - - uint16_t result__mm_outer_actual_effective_spads_sd0; - - - - - - - - - - - uint16_t result__avg_signal_count_rate_mcps_sd0; - - - - - - - - - - - uint16_t result__dss_actual_effective_spads_sd1; - - - - - - - - - - - uint16_t result__peak_signal_count_rate_mcps_sd1; - - - - - - - - - - - uint16_t result__ambient_count_rate_mcps_sd1; - - - - - - - - - - - uint16_t result__sigma_sd1; - - - - - - - - - - - uint16_t result__phase_sd1; - - - - - - - - - - - uint16_t result__final_crosstalk_corrected_range_mm_sd1; - - - - - - - - - - - uint16_t result__spare_0_sd1; - - - - - - - - - - - uint16_t result__spare_1_sd1; - - - - - - - - - - - uint16_t result__spare_2_sd1; - - - - - - - - - - - uint8_t result__spare_3_sd1; - - - - - - - - - - - uint8_t result__thresh_info; - - - - - - - - - - - -} VL53L1_system_results_t; - - - - - - - - - - - - -typedef struct { - uint32_t result_core__ambient_window_events_sd0; - - - - - - - - - - - uint32_t result_core__ranging_total_events_sd0; - - - - - - - - - - - int32_t result_core__signal_total_events_sd0; - - - - - - - - - - - uint32_t result_core__total_periods_elapsed_sd0; - - - - - - - - - - - uint32_t result_core__ambient_window_events_sd1; - - - - - - - - - - - uint32_t result_core__ranging_total_events_sd1; - - - - - - - - - - - int32_t result_core__signal_total_events_sd1; - - - - - - - - - - - uint32_t result_core__total_periods_elapsed_sd1; - - - - - - - - - - - uint8_t result_core__spare_0; - - - - - - - - - - -} VL53L1_core_results_t; - - - - - - - - - - - - -typedef struct { - uint16_t phasecal_result__reference_phase; - - - - - - - - - - - uint8_t phasecal_result__vcsel_start; - - - - - - - - - - - uint8_t ref_spad_char_result__num_actual_ref_spads; - - - - - - - - - - - uint8_t ref_spad_char_result__ref_location; - - - - - - - - - - - uint8_t vhv_result__coldboot_status; - - - - - - - - - - - uint8_t vhv_result__search_result; - - - - - - - - - - - uint8_t vhv_result__latest_setting; - - - - - - - - - - - uint16_t result__osc_calibrate_val; - - - - - - - - - - - uint8_t ana_config__powerdown_go1; - - - - - - - - - - - - uint8_t ana_config__ref_bg_ctrl; - - - - - - - - - - - - uint8_t ana_config__regdvdd1v2_ctrl; - - - - - - - - - - - - - uint8_t ana_config__osc_slow_ctrl; - - - - - - - - - - - - - uint8_t test_mode__status; - - - - - - - - - - - uint8_t firmware__system_status; - - - - - - - - - - - - uint8_t firmware__mode_status; - - - - - - - - - - - uint8_t firmware__secondary_mode_status; - - - - - - - - - - - uint16_t firmware__cal_repeat_rate_counter; - - - - - - - - - - - uint16_t gph__system__thresh_high; - - - - - - - - - - - uint16_t gph__system__thresh_low; - - - - - - - - - - - uint8_t gph__system__enable_xtalk_per_quadrant; - - - - - - - - - - - uint8_t gph__spare_0; - - - - - - - - - - - - - uint8_t gph__sd_config__woi_sd0; - - - - - - - - - - - uint8_t gph__sd_config__woi_sd1; - - - - - - - - - - - uint8_t gph__sd_config__initial_phase_sd0; - - - - - - - - - - - uint8_t gph__sd_config__initial_phase_sd1; - - - - - - - - - - - uint8_t gph__sd_config__first_order_select; - - - - - - - - - - - - uint8_t gph__sd_config__quantifier; - - - - - - - - - - - uint8_t gph__roi_config__user_roi_centre_spad; - - - - - - - - - - - uint8_t gph__roi_config__user_roi_requested_global_xy_size; - - - - - - - - - - - uint8_t gph__system__sequence_config; - - - - - - - - - - - - - - - - - - uint8_t gph__gph_id; - - - - - - - - - - - uint8_t system__interrupt_set; - - - - - - - - - - - - uint8_t interrupt_manager__enables; - - - - - - - - - - - - - - - uint8_t interrupt_manager__clear; - - - - - - - - - - - - - - - uint8_t interrupt_manager__status; - - - - - - - - - - - - - - - uint8_t mcu_to_host_bank__wr_access_en; - - - - - - - - - - - uint8_t power_management__go1_reset_status; - - - - - - - - - - - uint8_t pad_startup_mode__value_ro; - - - - - - - - - - - - uint8_t pad_startup_mode__value_ctrl; - - - - - - - - - - - - - - uint32_t pll_period_us; - - - - - - - - - - - uint32_t interrupt_scheduler__data_out; - - - - - - - - - - - uint8_t nvm_bist__complete; - - - - - - - - - - - uint8_t nvm_bist__status; - - - - - - - - - - -} VL53L1_debug_results_t; - - - - - - - - - - - - -typedef struct { - uint8_t identification__model_id; - - - - - - - - - - - uint8_t identification__module_type; - - - - - - - - - - - uint8_t identification__revision_id; - - - - - - - - - - - - uint16_t identification__module_id; - - - - - - - - - - - uint8_t ana_config__fast_osc__trim_max; - - - - - - - - - - - uint8_t ana_config__fast_osc__freq_set; - - - - - - - - - - - uint8_t ana_config__vcsel_trim; - - - - - - - - - - - uint8_t ana_config__vcsel_selion; - - - - - - - - - - - uint8_t ana_config__vcsel_selion_max; - - - - - - - - - - - uint8_t protected_laser_safety__lock_bit; - - - - - - - - - - - uint8_t laser_safety__key; - - - - - - - - - - - uint8_t laser_safety__key_ro; - - - - - - - - - - - uint8_t laser_safety__clip; - - - - - - - - - - - uint8_t laser_safety__mult; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_0; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_1; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_2; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_3; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_4; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_5; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_6; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_7; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_8; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_9; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_10; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_11; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_12; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_13; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_14; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_15; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_16; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_17; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_18; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_19; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_20; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_21; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_22; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_23; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_24; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_25; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_26; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_27; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_28; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_29; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_30; - - - - - - - - - - - uint8_t global_config__spad_enables_rtn_31; - - - - - - - - - - - uint8_t roi_config__mode_roi_centre_spad; - - - - - - - - - - - uint8_t roi_config__mode_roi_xy_size; - - - - - - - - - - -} VL53L1_nvm_copy_data_t; - - - - - - - - - - - - -typedef struct { - uint8_t prev_shadow_result__interrupt_status; - - - - - - - - - - - - - uint8_t prev_shadow_result__range_status; - - - - - - - - - - - - - - uint8_t prev_shadow_result__report_status; - - - - - - - - - - - uint8_t prev_shadow_result__stream_count; - - - - - - - - - - - uint16_t prev_shadow_result__dss_actual_effective_spads_sd0; - - - - - - - - - - - uint16_t prev_shadow_result__peak_signal_count_rate_mcps_sd0; - - - - - - - - - - - uint16_t prev_shadow_result__ambient_count_rate_mcps_sd0; - - - - - - - - - - - uint16_t prev_shadow_result__sigma_sd0; - - - - - - - - - - - uint16_t prev_shadow_result__phase_sd0; - - - - - - - - - - - uint16_t prev_shadow_result__final_crosstalk_corrected_range_mm_sd0; - - - - - - - - - - - uint16_t prev_shadow_result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0; - - - - - - - - - - - uint16_t prev_shadow_result__mm_inner_actual_effective_spads_sd0; - - - - - - - - - - - uint16_t prev_shadow_result__mm_outer_actual_effective_spads_sd0; - - - - - - - - - - - uint16_t prev_shadow_result__avg_signal_count_rate_mcps_sd0; - - - - - - - - - - - uint16_t prev_shadow_result__dss_actual_effective_spads_sd1; - - - - - - - - - - - uint16_t prev_shadow_result__peak_signal_count_rate_mcps_sd1; - - - - - - - - - - - uint16_t prev_shadow_result__ambient_count_rate_mcps_sd1; - - - - - - - - - - - uint16_t prev_shadow_result__sigma_sd1; - - - - - - - - - - - uint16_t prev_shadow_result__phase_sd1; - - - - - - - - - - - uint16_t prev_shadow_result__final_crosstalk_corrected_range_mm_sd1; - - - - - - - - - - - uint16_t prev_shadow_result__spare_0_sd1; - - - - - - - - - - - uint16_t prev_shadow_result__spare_1_sd1; - - - - - - - - - - - uint16_t prev_shadow_result__spare_2_sd1; - - - - - - - - - - - uint16_t prev_shadow_result__spare_3_sd1; - - - - - - - - - - -} VL53L1_prev_shadow_system_results_t; - - - - - - - - - - - - -typedef struct { - uint32_t prev_shadow_result_core__ambient_window_events_sd0; - - - - - - - - - - - uint32_t prev_shadow_result_core__ranging_total_events_sd0; - - - - - - - - - - - int32_t prev_shadow_result_core__signal_total_events_sd0; - - - - - - - - - - - uint32_t prev_shadow_result_core__total_periods_elapsed_sd0; - - - - - - - - - - - uint32_t prev_shadow_result_core__ambient_window_events_sd1; - - - - - - - - - - - uint32_t prev_shadow_result_core__ranging_total_events_sd1; - - - - - - - - - - - int32_t prev_shadow_result_core__signal_total_events_sd1; - - - - - - - - - - - uint32_t prev_shadow_result_core__total_periods_elapsed_sd1; - - - - - - - - - - - uint8_t prev_shadow_result_core__spare_0; - - - - - - - - - - -} VL53L1_prev_shadow_core_results_t; - - - - - - - - - - - - -typedef struct { - uint8_t result__debug_status; - - - - - - - - - - - uint8_t result__debug_stage; - - - - - - - - - - -} VL53L1_patch_debug_t; - - - - - - - - - - - - -typedef struct { - uint16_t gph__system__thresh_rate_high; - - - - - - - - - - - uint16_t gph__system__thresh_rate_low; - - - - - - - - - - - uint8_t gph__system__interrupt_config_gpio; - - - - - - - - - - - - - - - -} VL53L1_gph_general_config_t; - - - - - - - - - - - - -typedef struct { - uint8_t gph__dss_config__roi_mode_control; - - - - - - - - - - - - uint16_t gph__dss_config__manual_effective_spads_select; - - - - - - - - - - - uint8_t gph__dss_config__manual_block_select; - - - - - - - - - - - uint8_t gph__dss_config__max_spads_limit; - - - - - - - - - - - uint8_t gph__dss_config__min_spads_limit; - - - - - - - - - - -} VL53L1_gph_static_config_t; - - - - - - - - - - - - -typedef struct { - uint8_t gph__mm_config__timeout_macrop_a_hi; - - - - - - - - - - - uint8_t gph__mm_config__timeout_macrop_a_lo; - - - - - - - - - - - uint8_t gph__mm_config__timeout_macrop_b_hi; - - - - - - - - - - - uint8_t gph__mm_config__timeout_macrop_b_lo; - - - - - - - - - - - uint8_t gph__range_config__timeout_macrop_a_hi; - - - - - - - - - - - uint8_t gph__range_config__timeout_macrop_a_lo; - - - - - - - - - - - uint8_t gph__range_config__vcsel_period_a; - - - - - - - - - - - uint8_t gph__range_config__vcsel_period_b; - - - - - - - - - - - uint8_t gph__range_config__timeout_macrop_b_hi; - - - - - - - - - - - uint8_t gph__range_config__timeout_macrop_b_lo; - - - - - - - - - - - uint16_t gph__range_config__sigma_thresh; - - - - - - - - - - - uint16_t gph__range_config__min_count_rate_rtn_limit_mcps; - - - - - - - - - - - uint8_t gph__range_config__valid_phase_low; - - - - - - - - - - - uint8_t gph__range_config__valid_phase_high; - - - - - - - - - - -} VL53L1_gph_timing_config_t; - - - - - - - - - - - - -typedef struct { - uint8_t firmware__internal_stream_count_div; - - - - - - - - - - - uint8_t firmware__internal_stream_counter_val; - - - - - - - - - - -} VL53L1_fw_internal_t; - - - - - - - - - - - - -typedef struct { - uint8_t dss_calc__roi_ctrl; - - - - - - - - - - - - uint8_t dss_calc__spare_1; - - - - - - - - - - - uint8_t dss_calc__spare_2; - - - - - - - - - - - uint8_t dss_calc__spare_3; - - - - - - - - - - - uint8_t dss_calc__spare_4; - - - - - - - - - - - uint8_t dss_calc__spare_5; - - - - - - - - - - - uint8_t dss_calc__spare_6; - - - - - - - - - - - uint8_t dss_calc__spare_7; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_0; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_1; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_2; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_3; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_4; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_5; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_6; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_7; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_8; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_9; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_10; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_11; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_12; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_13; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_14; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_15; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_16; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_17; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_18; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_19; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_20; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_21; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_22; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_23; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_24; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_25; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_26; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_27; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_28; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_29; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_30; - - - - - - - - - - - uint8_t dss_calc__user_roi_spad_en_31; - - - - - - - - - - - uint8_t dss_calc__user_roi_0; - - - - - - - - - - - uint8_t dss_calc__user_roi_1; - - - - - - - - - - - uint8_t dss_calc__mode_roi_0; - - - - - - - - - - - uint8_t dss_calc__mode_roi_1; - - - - - - - - - - - uint8_t sigma_estimator_calc__spare_0; - - - - - - - - - - - uint16_t vhv_result__peak_signal_rate_mcps; - - - - - - - - - - - uint32_t vhv_result__signal_total_events_ref; - - - - - - - - - - - uint16_t phasecal_result__phase_output_ref; - - - - - - - - - - - uint16_t dss_result__total_rate_per_spad; - - - - - - - - - - - uint8_t dss_result__enabled_blocks; - - - - - - - - - - - uint16_t dss_result__num_requested_spads; - - - - - - - - - - - uint16_t mm_result__inner_intersection_rate; - - - - - - - - - - - uint16_t mm_result__outer_complement_rate; - - - - - - - - - - - uint16_t mm_result__total_offset; - - - - - - - - - - - uint32_t xtalk_calc__xtalk_for_enabled_spads; - - - - - - - - - - - uint32_t xtalk_result__avg_xtalk_user_roi_kcps; - - - - - - - - - - - uint32_t xtalk_result__avg_xtalk_mm_inner_roi_kcps; - - - - - - - - - - - uint32_t xtalk_result__avg_xtalk_mm_outer_roi_kcps; - - - - - - - - - - - uint32_t range_result__accum_phase; - - - - - - - - - - - uint16_t range_result__offset_corrected_range; - - - - - - - - - - -} VL53L1_patch_results_t; - - - - - - - - - - - - -typedef struct { - uint8_t shadow_phasecal_result__vcsel_start; - - - - - - - - - - - uint8_t shadow_result__interrupt_status; - - - - - - - - - - - - - uint8_t shadow_result__range_status; - - - - - - - - - - - - - - uint8_t shadow_result__report_status; - - - - - - - - - - - uint8_t shadow_result__stream_count; - - - - - - - - - - - uint16_t shadow_result__dss_actual_effective_spads_sd0; - - - - - - - - - - - uint16_t shadow_result__peak_signal_count_rate_mcps_sd0; - - - - - - - - - - - uint16_t shadow_result__ambient_count_rate_mcps_sd0; - - - - - - - - - - - uint16_t shadow_result__sigma_sd0; - - - - - - - - - - - uint16_t shadow_result__phase_sd0; - - - - - - - - - - - uint16_t shadow_result__final_crosstalk_corrected_range_mm_sd0; - - - - - - - - - - - uint16_t shadow_result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0; - - - - - - - - - - - uint16_t shadow_result__mm_inner_actual_effective_spads_sd0; - - - - - - - - - - - uint16_t shadow_result__mm_outer_actual_effective_spads_sd0; - - - - - - - - - - - uint16_t shadow_result__avg_signal_count_rate_mcps_sd0; - - - - - - - - - - - uint16_t shadow_result__dss_actual_effective_spads_sd1; - - - - - - - - - - - uint16_t shadow_result__peak_signal_count_rate_mcps_sd1; - - - - - - - - - - - uint16_t shadow_result__ambient_count_rate_mcps_sd1; - - - - - - - - - - - uint16_t shadow_result__sigma_sd1; - - - - - - - - - - - uint16_t shadow_result__phase_sd1; - - - - - - - - - - - uint16_t shadow_result__final_crosstalk_corrected_range_mm_sd1; - - - - - - - - - - - uint16_t shadow_result__spare_0_sd1; - - - - - - - - - - - uint16_t shadow_result__spare_1_sd1; - - - - - - - - - - - uint16_t shadow_result__spare_2_sd1; - - - - - - - - - - - uint8_t shadow_result__spare_3_sd1; - - - - - - - - - - - uint8_t shadow_result__thresh_info; - - - - - - - - - - - - uint8_t shadow_phasecal_result__reference_phase_hi; - - - - - - - - - - - uint8_t shadow_phasecal_result__reference_phase_lo; - - - - - - - - - - -} VL53L1_shadow_system_results_t; - - - - - - - - - - - - -typedef struct { - uint32_t shadow_result_core__ambient_window_events_sd0; - - - - - - - - - - - uint32_t shadow_result_core__ranging_total_events_sd0; - - - - - - - - - - - int32_t shadow_result_core__signal_total_events_sd0; - - - - - - - - - - - uint32_t shadow_result_core__total_periods_elapsed_sd0; - - - - - - - - - - - uint32_t shadow_result_core__ambient_window_events_sd1; - - - - - - - - - - - uint32_t shadow_result_core__ranging_total_events_sd1; - - - - - - - - - - - int32_t shadow_result_core__signal_total_events_sd1; - - - - - - - - - - - uint32_t shadow_result_core__total_periods_elapsed_sd1; - - - - - - - - - - - uint8_t shadow_result_core__spare_0; - - - - - - - - - - -} VL53L1_shadow_core_results_t; - - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_silicon_core.h b/drivers/input/misc/vl53L1/inc/vl53l1_silicon_core.h deleted file mode 100644 index 8ba9f3a97244..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_silicon_core.h +++ /dev/null @@ -1,133 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_SILICON_CORE_H_ -#define _VL53L1_SILICON_CORE_H_ - -#include "vl53l1_platform.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_is_firmware_ready_silicon( - VL53L1_DEV Dev, - uint8_t *pready); - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_wait.h b/drivers/input/misc/vl53L1/inc/vl53l1_wait.h deleted file mode 100644 index d26c2f243f88..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_wait.h +++ /dev/null @@ -1,318 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_WAIT_H_ -#define _VL53L1_WAIT_H_ - -#include "vl53l1_platform.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - - - -VL53L1_Error VL53L1_wait_for_boot_completion( - VL53L1_DEV Dev); - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_wait_for_firmware_ready( - VL53L1_DEV Dev); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_wait_for_range_completion( - VL53L1_DEV Dev); - - - - - - - - - - - - - - -VL53L1_Error VL53L1_wait_for_test_completion( - VL53L1_DEV Dev); - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_is_boot_complete( - VL53L1_DEV Dev, - uint8_t *pready); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_is_firmware_ready( - VL53L1_DEV Dev, - uint8_t *pready); - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_is_new_data_ready( - VL53L1_DEV Dev, - uint8_t *pready); - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_poll_for_boot_completion( - VL53L1_DEV Dev, - uint32_t timeout_ms); - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_poll_for_firmware_ready( - VL53L1_DEV Dev, - uint32_t timeout_ms); - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_poll_for_range_completion( - VL53L1_DEV Dev, - uint32_t timeout_ms); - - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/inc/vl53l1_zone_presets.h b/drivers/input/misc/vl53L1/inc/vl53l1_zone_presets.h deleted file mode 100644 index 1288e88f1245..000000000000 --- a/drivers/input/misc/vl53L1/inc/vl53l1_zone_presets.h +++ /dev/null @@ -1,182 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifndef _VL53L1_ZONE_PRESETS_H_ -#define _VL53L1_ZONE_PRESETS_H_ - -#include "vl53l1_ll_def.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - - - - - - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_init_zone_config_structure( - uint8_t x_off, - uint8_t x_inc, - uint8_t x_zones, - uint8_t y_off, - uint8_t y_inc, - uint8_t y_zones, - uint8_t width, - uint8_t height, - VL53L1_zone_config_t *pdata); - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_zone_preset_xtalk_planar( - VL53L1_general_config_t *pgeneral, - VL53L1_zone_config_t *pzone_cfg); - - - - - - - - - - - - - -VL53L1_Error VL53L1_init_zone_config_histogram_bins( - VL53L1_zone_config_t *pdata); - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/drivers/input/misc/vl53L1/ipp/ipp_linux.c b/drivers/input/misc/vl53L1/ipp/ipp_linux.c deleted file mode 100644 index 94d69c8762b7..000000000000 --- a/drivers/input/misc/vl53L1/ipp/ipp_linux.c +++ /dev/null @@ -1,343 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/** - * @file ipp_linux.c kernel side implementation of vl53l1 protected processing - * - * @date Sep 1, 2016 - * @author : imaging - * - * @ingroup ipp_dev - */ - -#include "stmvl53l1.h" - -#define IPP_ERR_CODE (VL53L1_ERROR_PLATFORM_SPECIFIC_START-1) - -static int stmvl53l1_ipp_do_wrapper(struct stmvl53l1_data *data, - struct ipp_work_t *pin, struct ipp_work_t *pout, int payload_out) -{ - int rc; - - if (data->ipp.buzy) { - vl53l1_errmsg("try exec new ipp but still buzy on previous"); - /* TODO shall we discard it and push new ? */ - rc = IPP_ERR_CODE; - goto done; - } - BUG_ON(pin->payload > IPP_WORK_MAX_PAYLOAD); - stmvl531_ipp_tim_start(data); - rc = stmvl53l1_ipp_do(data, pin, pout); - if (rc != 0) { - vl53l1_errmsg("stmvl53l1_ipp_do err %d\n", rc); - rc = IPP_ERR_CODE; - goto done; - } - vl53l1_dbgmsg("ipp ok \n"); - /* check what we got back if valid answer error etc */ - if (pout->status) { - vl53l1_errmsg("ipp error status %d from user", pout->status); - if (pout->status >= stmvl53l1_ipp_status_proc_code) - rc = pout->status & (stmvl53l1_ipp_status_proc_code-1); - else - rc = IPP_ERR_CODE; - goto done; - } - BUG_ON(pout->payload > IPP_WORK_MAX_PAYLOAD); - if (pout->payload != payload_out) { - /* bad formated answer */ - vl53l1_errmsg("bad payload %d != %d in ipp work back", - pout->payload, payload_out); - rc = IPP_ERR_CODE; - goto done; - } - stmvl531_ipp_tim_stop(data); - stmvl531_ipp_stat(data, "ipp #%5x to=%3d fm=%3d in %5ld us", - pin->xfer_id, pin->payload, - pout->payload, - stmvl531_ipp_time(data)); - - rc = 0; -done: - - return rc; -} - -/** - * @file vl53l1_platform_ipp.h - * - * @brief EwokPlus25 IPP Wrapper Functions - */ - -/** - * @brief IPP Wrapper call for histogram post processing - * - * - * @param[in] Dev : Device handle - * @param[in] pdmax_cal : DMAX calibration data - * @param[in] pdmax_cfg : DMAX configuration data - * @param[in] ppost_cfg : VL53L1_hist_post_process_config_t - * @param[in] pbins : Input histogram raw bin data - * @param[in] pxtalk : Cross talk histogram data - * @param[out] presults : Output VL53L1_range_results_t - * structure - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_ipp_hist_process_data( - VL53L1_DEV dev, - VL53L1_dmax_calibration_data_t *pdmax_cal, - VL53L1_hist_gen3_dmax_config_t *pdmax_cfg, - VL53L1_hist_post_process_config_t *ppost_cfg, - VL53L1_histogram_bin_data_t *pbins, - VL53L1_xtalk_histogram_data_t *pxtalk, - VL53L1_range_results_t *presults) -{ - struct stmvl53l1_data *data = (struct stmvl53l1_data *) - container_of(dev, struct stmvl53l1_data, stdev); - struct ipp_work_t *pout = &data->ipp.work_out; - struct ipp_work_t *pin = &data->ipp.work; - int rc; - VL53L1_range_results_t *presults_ipp; - - IPP_SERIALIZE_VAR; - - /* setup pin */ - IPP_SERIALIZE_START(pin->data, 5); - IPP_SET_ARG_PTR(pin->data, 0, pdmax_cal); - IPP_SET_ARG_PTR(pin->data, 1, pdmax_cfg); - IPP_SET_ARG_PTR(pin->data, 2, ppost_cfg); - IPP_SET_ARG_PTR(pin->data, 3, pbins); - IPP_SET_ARG_PTR(pin->data, 4, pxtalk); - pin->payload = IPP_SERIALIZE_PAYLAOD(); - pin->process_no = stmvl53l1_ipp_cal_hist; - - /* setup pout */ - IPP_SERIALIZE_START(pout->data, 1); - IPP_OUT_ARG_PTR(pout->data, 0, presults_ipp); - - /* do ipp */ - rc = stmvl53l1_ipp_do_wrapper(data, pin, pout, IPP_SERIALIZE_PAYLAOD()); - if (rc) - goto done; - - /* copy output */ - memcpy(presults, presults_ipp, sizeof(*presults)); - - rc = 0; -done: - - return rc; -} - -/** - * @brief IPP Wrapper call for histogram ambient dmax calc - * - * The target reflectance in percent for the DMAX calculation - * is set by target_reflectance input - * - * The fixed point format is 7.2 - * - * @param[in] Dev : Device handle - * @param[in] target_reflectance : target reflectance to report ambient DMAX - * Percentage in 7.2 fixed point format - * @param[in] pdmax_cal : DMAX calibration data - * @param[in] pdmax_cfg : DMAX configuration data - * @param[in] pbins : Input histogram raw bin data - * @param[out] pambient_dmax_mm : Output ambient DMAX distance in [mm] - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_ipp_hist_ambient_dmax( - VL53L1_DEV dev, - uint16_t target_reflectance, - VL53L1_dmax_calibration_data_t *pdmax_cal, - VL53L1_hist_gen3_dmax_config_t *pdmax_cfg, - VL53L1_histogram_bin_data_t *pbins, - int16_t *pambient_dmax_mm) -{ - struct stmvl53l1_data *data = (struct stmvl53l1_data *) - container_of(dev, struct stmvl53l1_data, stdev); - struct ipp_work_t *pout = &data->ipp.work_out; - struct ipp_work_t *pin = &data->ipp.work; - int rc; - int16_t *pambient_dmax_mm_ipp; - - IPP_SERIALIZE_VAR; - - /* setup pin */ - IPP_SERIALIZE_START(pin->data, 4); - IPP_SET_ARG(pin->data, 0, target_reflectance); - IPP_SET_ARG_PTR(pin->data, 1, pdmax_cal); - IPP_SET_ARG_PTR(pin->data, 2, pdmax_cfg); - IPP_SET_ARG_PTR(pin->data, 3, pbins); - pin->payload = IPP_SERIALIZE_PAYLAOD(); - pin->process_no = stmvl53l1_ipp_hist_ambient_dmax; - - /* setup pout */ - IPP_SERIALIZE_START(pout->data, 1); - IPP_OUT_ARG_PTR(pout->data, 0, pambient_dmax_mm_ipp); - - /* do ipp */ - rc = stmvl53l1_ipp_do_wrapper(data, pin, pout, IPP_SERIALIZE_PAYLAOD()); - if (rc) - goto done; - - /* copy output */ - memcpy(pambient_dmax_mm, pambient_dmax_mm_ipp, - sizeof(*pambient_dmax_mm)); - - rc = 0; -done: - - return rc; -} - -/** - * @brief IPP Wrapper call for xtalk calibration post processing - * - * @param[in] Dev : Device handle - * @param[in] pxtalk_ranges : Input VL53L1_xtalk_range_results_t - * Must contain 5 ranges, 4 quadrants + 1 - * full FoV - * @param[out] pxtalk_shape : Output normalised Cross talk histogram - * shape - * @param[out] pxtalk_cal : Output VL53L1_xtalk_calibration_results_t - * structure - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ -VL53L1_Error VL53L1_ipp_xtalk_calibration_process_data( - VL53L1_DEV dev, - VL53L1_xtalk_range_results_t *pxtalk_ranges, - VL53L1_xtalk_histogram_data_t *pxtalk_shape, - VL53L1_xtalk_calibration_results_t *pxtalk_cal) -{ - struct stmvl53l1_data *data = (struct stmvl53l1_data *) - container_of(dev, struct stmvl53l1_data, stdev); - struct ipp_work_t *pout = &data->ipp.work_out; - struct ipp_work_t *pin = &data->ipp.work; - int rc; - VL53L1_xtalk_histogram_data_t *pxtalk_shape_ipp; - VL53L1_xtalk_calibration_results_t *pxtalk_cal_ipp; - - IPP_SERIALIZE_VAR; - - /* setup pin */ - IPP_SERIALIZE_START(pin->data, 1); - IPP_SET_ARG_PTR(pin->data, 0, pxtalk_ranges); - pin->payload = IPP_SERIALIZE_PAYLAOD(); - pin->process_no = stmvl53l1_ipp_xtalk_calibration; - - /* setup pout */ - IPP_SERIALIZE_START(pout->data, 2); - IPP_OUT_ARG_PTR(pout->data, 0, pxtalk_shape_ipp); - IPP_OUT_ARG_PTR(pout->data, 1, pxtalk_cal_ipp); - - /* do ipp */ - rc = stmvl53l1_ipp_do_wrapper(data, pin, pout, IPP_SERIALIZE_PAYLAOD()); - if (rc) - goto done; - - /* copy output */ - memcpy(pxtalk_shape, pxtalk_shape_ipp, sizeof(*pxtalk_shape)); - memcpy(pxtalk_cal, pxtalk_cal_ipp, sizeof(*pxtalk_cal)); - - rc = 0; -done: - - return rc; -} - -/** - * @brief IPP Wrapper call for Generating Xtalk data from dual reflectance - * histogram data - * - * @param[in] Dev : Device handle - * @param[in] pxtalk_results : Pointer to xtalk_results structure - * containing dual reflectance - * histogram data - * @param[in] expected_target_distance_mm : User input of true target distance - * @param[in] higher_reflectance : User input detailing which - * histogram data 1 or 2 has the - * highest reflectance. - * @param[out] pxtalk_avg_samples : Pointer to output xtalk histogram - * data - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_ipp_generate_dual_reflectance_xtalk_samples( - VL53L1_DEV dev, - VL53L1_xtalk_range_results_t *pxtalk_results, - uint16_t expected_target_distance_mm, - uint8_t higher_reflectance, - VL53L1_histogram_bin_data_t *pxtalk_avg_samples) -{ - struct stmvl53l1_data *data = (struct stmvl53l1_data *) - container_of(dev, struct stmvl53l1_data, stdev); - struct ipp_work_t *pout = &data->ipp.work_out; - struct ipp_work_t *pin = &data->ipp.work; - int rc; - VL53L1_histogram_bin_data_t *pxtalk_avg_samples_ipp; - - IPP_SERIALIZE_VAR; - - /* setup pin */ - IPP_SERIALIZE_START(pin->data, 3); - IPP_SET_ARG_PTR(pin->data, 0, pxtalk_results); - IPP_SET_ARG(pin->data, 1, expected_target_distance_mm); - IPP_SET_ARG(pin->data, 2, higher_reflectance); - pin->payload = IPP_SERIALIZE_PAYLAOD(); - pin->process_no = stmvl53l1_ipp_generate_dual_reflectance_xtalk_samples; - - /* setup pout */ - IPP_SERIALIZE_START(pout->data, 1); - IPP_OUT_ARG_PTR(pout->data, 0, pxtalk_avg_samples_ipp); - - /* do ipp */ - rc = stmvl53l1_ipp_do_wrapper(data, pin, pout, IPP_SERIALIZE_PAYLAOD()); - if (rc) - goto done; - - /* copy output */ - memcpy(pxtalk_avg_samples, pxtalk_avg_samples_ipp, - sizeof(*pxtalk_avg_samples)); - - rc = 0; -done: - - return rc; -} diff --git a/drivers/input/misc/vl53L1/src/vl53l1_api.c b/drivers/input/misc/vl53L1/src/vl53l1_api.c deleted file mode 100644 index a166dea001ae..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_api.c +++ /dev/null @@ -1,2809 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_api.h" -#include "vl53l1_api_strings.h" -#include "vl53l1_register_settings.h" -#include "vl53l1_core.h" -#include "vl53l1_api_calibration.h" -#include "vl53l1_wait.h" - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_API, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_API, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_API, status, \ - fmt, ##__VA_ARGS__) - -#ifdef VL53L1_LOG_ENABLE -#define trace_print(level, ...) trace_print_module_function(\ - VL53L1_TRACE_MODULE_API, level, VL53L1_TRACE_FUNCTION_NONE, \ - ##__VA_ARGS__) -#endif - -#ifndef MIN -#define MIN(VL53L1_PRM_00002,VL53L1_PRM_00030) ((VL53L1_PRM_00002) < (VL53L1_PRM_00030) ? (VL53L1_PRM_00002) : (VL53L1_PRM_00030)) -#endif -#ifndef MAX -#define MAX(VL53L1_PRM_00002,VL53L1_PRM_00030) ((VL53L1_PRM_00002) < (VL53L1_PRM_00030) ? (VL53L1_PRM_00030) : (VL53L1_PRM_00002)) -#endif - -#define DMAX_REFLECTANCE_IDX 2 - - - - - - - - - - - - - - - -static VL53L1_Error CheckValidRectRoi(VL53L1_UserRoi_t ROI) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - if ((ROI.TopLeftX > 15) || (ROI.TopLeftY > 15) || - (ROI.BotRightX > 15) || (ROI.BotRightY > 15)) - Status = VL53L1_ERROR_INVALID_PARAMS; - - if ((ROI.TopLeftX > ROI.BotRightX) || (ROI.TopLeftY < ROI.BotRightY)) - Status = VL53L1_ERROR_INVALID_PARAMS; - - LOG_FUNCTION_END(Status); - return Status; -} - -static VL53L1_GPIO_Interrupt_Mode ConvertModeToLLD(VL53L1_Error *pStatus, - VL53L1_ThresholdMode CrossMode) -{ - VL53L1_GPIO_Interrupt_Mode Mode; - - switch (CrossMode) { - case VL53L1_THRESHOLD_CROSSED_LOW: - Mode = VL53L1_GPIOINTMODE_LEVEL_LOW; - break; - case VL53L1_THRESHOLD_CROSSED_HIGH: - Mode = VL53L1_GPIOINTMODE_LEVEL_HIGH; - break; - case VL53L1_THRESHOLD_OUT_OF_WINDOW: - Mode = VL53L1_GPIOINTMODE_OUT_OF_WINDOW; - break; - case VL53L1_THRESHOLD_IN_WINDOW: - Mode = VL53L1_GPIOINTMODE_IN_WINDOW; - break; - default: - - - Mode = VL53L1_GPIOINTMODE_LEVEL_HIGH; - *pStatus = VL53L1_ERROR_INVALID_PARAMS; - } - return Mode; -} - -static VL53L1_ThresholdMode ConvertModeFromLLD(VL53L1_Error *pStatus, - VL53L1_GPIO_Interrupt_Mode CrossMode) -{ - VL53L1_ThresholdMode Mode; - - switch (CrossMode) { - case VL53L1_GPIOINTMODE_LEVEL_LOW: - Mode = VL53L1_THRESHOLD_CROSSED_LOW; - break; - case VL53L1_GPIOINTMODE_LEVEL_HIGH: - Mode = VL53L1_THRESHOLD_CROSSED_HIGH; - break; - case VL53L1_GPIOINTMODE_OUT_OF_WINDOW: - Mode = VL53L1_THRESHOLD_OUT_OF_WINDOW; - break; - case VL53L1_GPIOINTMODE_IN_WINDOW: - Mode = VL53L1_THRESHOLD_IN_WINDOW; - break; - default: - - - Mode = VL53L1_THRESHOLD_CROSSED_HIGH; - *pStatus = VL53L1_ERROR_UNDEFINED; - } - return Mode; -} - - - - -VL53L1_Error VL53L1_GetVersion(VL53L1_Version_t *pVersion) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - pVersion->major = VL53L1_IMPLEMENTATION_VER_MAJOR; - pVersion->minor = VL53L1_IMPLEMENTATION_VER_MINOR; - pVersion->build = VL53L1_IMPLEMENTATION_VER_SUB; - - pVersion->revision = VL53L1_IMPLEMENTATION_VER_REVISION; - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetPalSpecVersion(VL53L1_Version_t *pPalSpecVersion) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - pPalSpecVersion->major = VL53L1_SPECIFICATION_VER_MAJOR; - pPalSpecVersion->minor = VL53L1_SPECIFICATION_VER_MINOR; - pPalSpecVersion->build = VL53L1_SPECIFICATION_VER_SUB; - - pPalSpecVersion->revision = VL53L1_SPECIFICATION_VER_REVISION; - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetProductRevision(VL53L1_DEV Dev, - uint8_t *pProductRevisionMajor, uint8_t *pProductRevisionMinor) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t revision_id; - VL53L1_LLDriverData_t *pLLData; - - LOG_FUNCTION_START(""); - - pLLData = VL53L1DevStructGetLLDriverHandle(Dev); - revision_id = pLLData->nvm_copy_data.identification__revision_id; - *pProductRevisionMajor = 1; - *pProductRevisionMinor = (revision_id & 0xF0) >> 4; - - LOG_FUNCTION_END(Status); - return Status; - -} - -VL53L1_Error VL53L1_GetDeviceInfo(VL53L1_DEV Dev, - VL53L1_DeviceInfo_t *pVL53L1_DeviceInfo) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t revision_id; - VL53L1_LLDriverData_t *pLLData; - - LOG_FUNCTION_START(""); - - pLLData = VL53L1DevStructGetLLDriverHandle(Dev); - - strncpy(pVL53L1_DeviceInfo->ProductId, "", - VL53L1_DEVINFO_STRLEN-1); - pVL53L1_DeviceInfo->ProductType = - pLLData->nvm_copy_data.identification__module_type; - - revision_id = pLLData->nvm_copy_data.identification__revision_id; - pVL53L1_DeviceInfo->ProductRevisionMajor = 1; - pVL53L1_DeviceInfo->ProductRevisionMinor = (revision_id & 0xF0) >> 4; - -#ifndef VL53L1_USE_EMPTY_STRING - if (pVL53L1_DeviceInfo->ProductRevisionMinor == 0) - strncpy(pVL53L1_DeviceInfo->Name, - VL53L1_STRING_DEVICE_INFO_NAME0, - VL53L1_DEVINFO_STRLEN-1); - else - strncpy(pVL53L1_DeviceInfo->Name, - VL53L1_STRING_DEVICE_INFO_NAME1, - VL53L1_DEVINFO_STRLEN-1); - strncpy(pVL53L1_DeviceInfo->Type, - VL53L1_STRING_DEVICE_INFO_TYPE, - VL53L1_DEVINFO_STRLEN-1); -#else - pVL53L1_DeviceInfo->Name[0] = 0; - pVL53L1_DeviceInfo->Type[0] = 0; -#endif - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_GetRangeStatusString(uint8_t RangeStatus, - char *pRangeStatusString) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_range_status_string(RangeStatus, - pRangeStatusString); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetPalErrorString(VL53L1_Error PalErrorCode, - char *pPalErrorString) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_pal_error_string(PalErrorCode, pPalErrorString); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetPalStateString(VL53L1_State PalStateCode, - char *pPalStateString) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_pal_state_string(PalStateCode, pPalStateString); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetPalState(VL53L1_DEV Dev, VL53L1_State *pPalState) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - *pPalState = PALDevDataGet(Dev, PalState); - - LOG_FUNCTION_END(Status); - return Status; -} - - - - - - -VL53L1_Error VL53L1_SetDeviceAddress(VL53L1_DEV Dev, uint8_t DeviceAddress) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_WrByte(Dev, VL53L1_I2C_SLAVE__DEVICE_ADDRESS, - DeviceAddress / 2); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_DataInit(VL53L1_DEV Dev) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t i; - - LOG_FUNCTION_START(""); - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_data_init(Dev, 1); - - if (Status == VL53L1_ERROR_NONE) { - PALDevDataSet(Dev, PalState, VL53L1_STATE_WAIT_STATICINIT); - PALDevDataSet(Dev, CurrentParameters.PresetMode, - VL53L1_PRESETMODE_RANGING); - } - - - - for (i = 0; i < VL53L1_CHECKENABLE_NUMBER_OF_CHECKS; i++) { - if (Status == VL53L1_ERROR_NONE) - Status |= VL53L1_SetLimitCheckEnable(Dev, i, 1); - else - break; - - } - - - - if (Status == VL53L1_ERROR_NONE) { - Status = VL53L1_SetLimitCheckValue(Dev, - VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE, - (FixPoint1616_t)(18 * 65536)); - } - if (Status == VL53L1_ERROR_NONE) { - Status = VL53L1_SetLimitCheckValue(Dev, - VL53L1_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, - (FixPoint1616_t)(25 * 65536 / 100)); - - - } - - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_StaticInit(VL53L1_DEV Dev) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t measurement_mode; - - LOG_FUNCTION_START(""); - - if (Status == VL53L1_ERROR_NONE) - PALDevDataSet(Dev, PalState, VL53L1_STATE_IDLE); - - measurement_mode = VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - PALDevDataSet(Dev, LLData.measurement_mode, measurement_mode); - - PALDevDataSet(Dev, CurrentParameters.NewDistanceMode, - VL53L1_DISTANCEMODE_LONG); - - PALDevDataSet(Dev, CurrentParameters.InternalDistanceMode, - VL53L1_DISTANCEMODE_LONG); - - PALDevDataSet(Dev, CurrentParameters.DistanceMode, - VL53L1_DISTANCEMODE_LONG); - - PALDevDataSet(Dev, CurrentParameters.OutputMode, - VL53L1_OUTPUTMODE_NEAREST); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_WaitDeviceBooted(VL53L1_DEV Dev) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_poll_for_boot_completion(Dev, - VL53L1_BOOT_COMPLETION_POLLING_TIMEOUT_MS); - - LOG_FUNCTION_END(Status); - return Status; -} - - - - - - -static VL53L1_Error ComputeDevicePresetMode( - VL53L1_PresetModes PresetMode, - VL53L1_DistanceModes DistanceMode, - uint16_t *pdss_config__target_total_rate_mcps, - uint32_t *pphasecal_config_timeout_us, - VL53L1_DevicePresetModes *pDevicePresetMode) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - *pDevicePresetMode = VL53L1_DEVICEPRESETMODE_STANDARD_RANGING; - - switch (PresetMode) { - case VL53L1_PRESETMODE_LITE_RANGING: - *pdss_config__target_total_rate_mcps = 0x0A00; - *pphasecal_config_timeout_us = 1000; - - if (DistanceMode == VL53L1_DISTANCEMODE_SHORT) - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_SHORT_RANGE; - else if (DistanceMode == VL53L1_DISTANCEMODE_MEDIUM) - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_STANDARD_RANGING; - else - - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_LONG_RANGE; - break; - case VL53L1_PRESETMODE_RANGING: - *pdss_config__target_total_rate_mcps = 0x1400; - *pphasecal_config_timeout_us = 4000; - - if (DistanceMode == VL53L1_DISTANCEMODE_SHORT) - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_HISTOGRAM_SHORT_RANGE; - else if (DistanceMode == VL53L1_DISTANCEMODE_MEDIUM) - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_HISTOGRAM_MEDIUM_RANGE; - else - - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_HISTOGRAM_LONG_RANGE; - break; - case VL53L1_PRESETMODE_MULTIZONES_SCANNING: - *pdss_config__target_total_rate_mcps = 0x1400; - *pphasecal_config_timeout_us = 4000; - - if (DistanceMode == VL53L1_DISTANCEMODE_SHORT) - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_HISTOGRAM_MULTIZONE_SHORT_RANGE; - else if (DistanceMode == VL53L1_DISTANCEMODE_MEDIUM) - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_HISTOGRAM_MULTIZONE; - else - - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_HISTOGRAM_MULTIZONE_LONG_RANGE; - break; - case VL53L1_PRESETMODE_AUTONOMOUS: - *pdss_config__target_total_rate_mcps = 0x0A00; - *pphasecal_config_timeout_us = 1000; - - if (DistanceMode == VL53L1_DISTANCEMODE_SHORT) - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_TIMED_RANGING_SHORT_RANGE; - else if (DistanceMode == VL53L1_DISTANCEMODE_MEDIUM) - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_TIMED_RANGING; - else - - *pDevicePresetMode = - VL53L1_DEVICEPRESETMODE_TIMED_RANGING_LONG_RANGE; - break; - case VL53L1_PRESETMODE_OLT: - *pdss_config__target_total_rate_mcps = 0x0A00; - *pphasecal_config_timeout_us = 1000; - - *pDevicePresetMode = VL53L1_DEVICEPRESETMODE_OLT; - break; - default: - - - Status = VL53L1_ERROR_MODE_NOT_SUPPORTED; - } - - return Status; -} - -static VL53L1_Error SetPresetMode(VL53L1_DEV Dev, - VL53L1_PresetModes PresetMode, - VL53L1_DistanceModes DistanceMode, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint32_t inter_measurement_period_ms) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_DevicePresetModes device_preset_mode; - uint8_t measurement_mode; - uint16_t dss_config__target_total_rate_mcps; - uint32_t phasecal_config_timeout_us; - - LOG_FUNCTION_START("%d", (int)PresetMode); - - if (PresetMode == VL53L1_PRESETMODE_AUTONOMOUS) - measurement_mode = VL53L1_DEVICEMEASUREMENTMODE_TIMED; - else - measurement_mode = VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - - - Status = ComputeDevicePresetMode( - PresetMode, - DistanceMode, - &dss_config__target_total_rate_mcps, - &phasecal_config_timeout_us, - &device_preset_mode); - - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_set_preset_mode( - Dev, - device_preset_mode, - dss_config__target_total_rate_mcps, - phasecal_config_timeout_us, - mm_config_timeout_us, - range_config_timeout_us, - inter_measurement_period_ms); - - if (Status == VL53L1_ERROR_NONE) - PALDevDataSet(Dev, LLData.measurement_mode, measurement_mode); - - if (Status == VL53L1_ERROR_NONE) - PALDevDataSet(Dev, CurrentParameters.PresetMode, PresetMode); - - PALDevDataSet(Dev, CurrentParameters.OutputMode, - VL53L1_OUTPUTMODE_NEAREST); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_SetPresetMode(VL53L1_DEV Dev, VL53L1_PresetModes PresetMode) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START("%d", (int)PresetMode); - - - - - - - Status = SetPresetMode(Dev, - PresetMode, - VL53L1_DISTANCEMODE_LONG, - 2000, - 16000, - 1000); - - - if (Status == VL53L1_ERROR_NONE) { - PALDevDataSet(Dev, CurrentParameters.InternalDistanceMode, - VL53L1_DISTANCEMODE_LONG); - - PALDevDataSet(Dev, CurrentParameters.NewDistanceMode, - VL53L1_DISTANCEMODE_LONG); - - if (PresetMode == VL53L1_PRESETMODE_LITE_RANGING) - - - Status = VL53L1_SetMeasurementTimingBudgetMicroSeconds( - Dev, 33000); - else - - - Status = VL53L1_SetMeasurementTimingBudgetMicroSeconds( - Dev, 16000); - } - - if (Status == VL53L1_ERROR_NONE) { - - - Status = VL53L1_SetInterMeasurementPeriodMilliSeconds(Dev, - 1000); - } - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_GetPresetMode(VL53L1_DEV Dev, - VL53L1_PresetModes *pPresetMode) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - *pPresetMode = PALDevDataGet(Dev, CurrentParameters.PresetMode); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_SetDistanceMode(VL53L1_DEV Dev, - VL53L1_DistanceModes DistanceMode) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_PresetModes PresetMode; - VL53L1_DistanceModes InternalDistanceMode; - uint32_t mm_config_timeout_us; - uint32_t range_config_timeout_us; - uint32_t inter_measurement_period_ms; - uint8_t manual_not_auto = 0; - - LOG_FUNCTION_START("%d", (int)DistanceMode); - - PresetMode = PALDevDataGet(Dev, CurrentParameters.PresetMode); - - - - - - - - - if ((DistanceMode == VL53L1_DISTANCEMODE_SHORT) || - (DistanceMode == VL53L1_DISTANCEMODE_MEDIUM) || - (DistanceMode == VL53L1_DISTANCEMODE_LONG)) - manual_not_auto = 1; - else - manual_not_auto = 0; - - - if ((manual_not_auto == 0) && - ((PresetMode != VL53L1_PRESETMODE_LITE_RANGING) && - (PresetMode != VL53L1_PRESETMODE_RANGING))) { - Status = VL53L1_ERROR_MODE_NOT_SUPPORTED; - } - - - - - - if (Status == VL53L1_ERROR_NONE) { - if ((DistanceMode == VL53L1_DISTANCEMODE_SHORT) || - (DistanceMode == VL53L1_DISTANCEMODE_MEDIUM)) - InternalDistanceMode = DistanceMode; - else - - InternalDistanceMode = VL53L1_DISTANCEMODE_LONG; - } - - mm_config_timeout_us = PALDevDataGet(Dev, LLData.mm_config_timeout_us); - range_config_timeout_us = PALDevDataGet(Dev, - LLData.range_config_timeout_us); - inter_measurement_period_ms = PALDevDataGet(Dev, - LLData.inter_measurement_period_ms); - - if (Status == VL53L1_ERROR_NONE) - Status = SetPresetMode(Dev, - PresetMode, - InternalDistanceMode, - mm_config_timeout_us, - range_config_timeout_us, - inter_measurement_period_ms); - - if (Status == VL53L1_ERROR_NONE) { - PALDevDataSet(Dev, CurrentParameters.InternalDistanceMode, - InternalDistanceMode); - PALDevDataSet(Dev, CurrentParameters.NewDistanceMode, - InternalDistanceMode); - PALDevDataSet(Dev, CurrentParameters.DistanceMode, - DistanceMode); - } - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetDistanceMode(VL53L1_DEV Dev, - VL53L1_DistanceModes *pDistanceMode) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - *pDistanceMode = PALDevDataGet(Dev, CurrentParameters.DistanceMode); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_SetOutputMode(VL53L1_DEV Dev, - VL53L1_OutputModes OutputMode) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if ((OutputMode != VL53L1_OUTPUTMODE_NEAREST) && - (OutputMode != VL53L1_OUTPUTMODE_STRONGEST)) - Status = VL53L1_ERROR_MODE_NOT_SUPPORTED; - else - PALDevDataSet(Dev, CurrentParameters.OutputMode, OutputMode); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetOutputMode(VL53L1_DEV Dev, - VL53L1_OutputModes *pOutputMode) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - *pOutputMode = PALDevDataGet(Dev, CurrentParameters.OutputMode); - - LOG_FUNCTION_END(Status); - return Status; -} - - - -VL53L1_Error VL53L1_SetMeasurementTimingBudgetMicroSeconds(VL53L1_DEV Dev, - uint32_t MeasurementTimingBudgetMicroSeconds) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t Mm1Enabled; - uint8_t Mm2Enabled; - uint32_t TimingGuard; - uint32_t divisor; - uint32_t TimingBudget; - uint32_t MmTimeoutUs; - VL53L1_PresetModes PresetMode; - uint32_t PhaseCalTimeoutUs; - - LOG_FUNCTION_START(""); - - - - if (MeasurementTimingBudgetMicroSeconds > 10000000) - Status = VL53L1_ERROR_INVALID_PARAMS; - - if (Status == VL53L1_ERROR_NONE) { - Status = VL53L1_GetSequenceStepEnable(Dev, - VL53L1_SEQUENCESTEP_MM1, &Mm1Enabled); - } - - if (Status == VL53L1_ERROR_NONE) { - Status = VL53L1_GetSequenceStepEnable(Dev, - VL53L1_SEQUENCESTEP_MM2, &Mm2Enabled); - } - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_get_timeouts_us(Dev, - &PhaseCalTimeoutUs, - &MmTimeoutUs, - &TimingBudget); - - if (Status == VL53L1_ERROR_NONE) { - PresetMode = PALDevDataGet(Dev, CurrentParameters.PresetMode); - - TimingGuard = 0; - divisor = 1; - switch (PresetMode) { - case VL53L1_PRESETMODE_LITE_RANGING: - case VL53L1_PRESETMODE_AUTONOMOUS: - if ((Mm1Enabled == 1) || (Mm2Enabled == 1)) - TimingGuard = 5000; - else - TimingGuard = 1000; - break; - case VL53L1_PRESETMODE_RANGING: - case VL53L1_PRESETMODE_MULTIZONES_SCANNING: - TimingGuard = 1700; - divisor = 6; - break; - case VL53L1_PRESETMODE_OLT: - TimingGuard = MmTimeoutUs + 5000; - break; - default: - - - Status = VL53L1_ERROR_MODE_NOT_SUPPORTED; - } - - if (MeasurementTimingBudgetMicroSeconds > TimingGuard) { - TimingBudget = (MeasurementTimingBudgetMicroSeconds - - TimingGuard) / divisor; - - Status = VL53L1_set_timeouts_us( - Dev, - PhaseCalTimeoutUs, - MmTimeoutUs, - TimingBudget); - - if (Status == VL53L1_ERROR_NONE) - PALDevDataSet(Dev, - LLData.range_config_timeout_us, - TimingBudget); - } else { - Status = VL53L1_ERROR_INVALID_PARAMS; - } - } - if (Status == VL53L1_ERROR_NONE) { - PALDevDataSet(Dev, - CurrentParameters.MeasurementTimingBudgetMicroSeconds, - MeasurementTimingBudgetMicroSeconds); - } - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_GetMeasurementTimingBudgetMicroSeconds(VL53L1_DEV Dev, - uint32_t *pMeasurementTimingBudgetMicroSeconds) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t Mm1Enabled = 0; - uint8_t Mm2Enabled = 0; - uint32_t MmTimeoutUs = 0; - uint32_t RangeTimeoutUs = 0; - uint32_t MeasTimingBdg = 0; - uint32_t PhaseCalTimeoutUs = 0; - VL53L1_PresetModes PresetMode; - - LOG_FUNCTION_START(""); - - *pMeasurementTimingBudgetMicroSeconds = 0; - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_GetSequenceStepEnable(Dev, - VL53L1_SEQUENCESTEP_MM1, &Mm1Enabled); - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_GetSequenceStepEnable(Dev, - VL53L1_SEQUENCESTEP_MM2, &Mm2Enabled); - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_get_timeouts_us(Dev, - &PhaseCalTimeoutUs, - &MmTimeoutUs, - &RangeTimeoutUs); - - if (Status == VL53L1_ERROR_NONE) { - PresetMode = PALDevDataGet(Dev, CurrentParameters.PresetMode); - - switch (PresetMode) { - case VL53L1_PRESETMODE_LITE_RANGING: - case VL53L1_PRESETMODE_AUTONOMOUS: - if ((Mm1Enabled == 1) || (Mm2Enabled == 1)) - MeasTimingBdg = RangeTimeoutUs + 5000; - else - MeasTimingBdg = RangeTimeoutUs + 1000; - - break; - case VL53L1_PRESETMODE_RANGING: - MeasTimingBdg = (6 * RangeTimeoutUs) + 1700; - break; - case VL53L1_PRESETMODE_MULTIZONES_SCANNING: - MeasTimingBdg = (6 * RangeTimeoutUs) + 1700; - break; - case VL53L1_PRESETMODE_OLT: - MeasTimingBdg = RangeTimeoutUs + MmTimeoutUs + 5000; - break; - default: - - - Status = VL53L1_ERROR_MODE_NOT_SUPPORTED; - } - } - if (Status == VL53L1_ERROR_NONE) - *pMeasurementTimingBudgetMicroSeconds = MeasTimingBdg; - - LOG_FUNCTION_END(Status); - return Status; -} - - - -VL53L1_Error VL53L1_SetInterMeasurementPeriodMilliSeconds(VL53L1_DEV Dev, - uint32_t InterMeasurementPeriodMilliSeconds) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_set_inter_measurement_period_ms(Dev, - InterMeasurementPeriodMilliSeconds); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetInterMeasurementPeriodMilliSeconds(VL53L1_DEV Dev, - uint32_t *pInterMeasurementPeriodMilliSeconds) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_inter_measurement_period_ms(Dev, - pInterMeasurementPeriodMilliSeconds); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_SetDmaxReflectance(VL53L1_DEV Dev, - FixPoint1616_t value) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_dmax_reflectance_array_t dmax_reflectances; - - LOG_FUNCTION_START(""); - Status = VL53L1_get_dmax_reflectance_values(Dev, &dmax_reflectances); - if (Status == VL53L1_ERROR_NONE) { - dmax_reflectances.target_reflectance_for_dmax[DMAX_REFLECTANCE_IDX] = - VL53L1_FIXPOINT1616TOFIXPOINT72(value); - Status = VL53L1_set_dmax_reflectance_values(Dev, &dmax_reflectances); - } - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetDmaxReflectance(VL53L1_DEV Dev, - FixPoint1616_t *pvalue) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_dmax_reflectance_array_t dmax_reflectances; - uint16_t r; - - LOG_FUNCTION_START(""); - Status = VL53L1_get_dmax_reflectance_values(Dev, &dmax_reflectances); - if (Status == VL53L1_ERROR_NONE) { - r = dmax_reflectances.target_reflectance_for_dmax[DMAX_REFLECTANCE_IDX]; - *pvalue = VL53L1_FIXPOINT72TOFIXPOINT1616(r); - } - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_SetDmaxMode(VL53L1_DEV Dev, - VL53L1_DeviceDmaxModes DmaxMode) -{ - - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_DeviceDmaxMode dmax_mode; - - LOG_FUNCTION_START(""); - - switch(DmaxMode) { - case DMAXMODE_FMT_CAL_DATA: - dmax_mode = VL53L1_DEVICEDMAXMODE__FMT_CAL_DATA; - break; - case DMAXMODE_CUSTCAL_DATA: - dmax_mode = VL53L1_DEVICEDMAXMODE__CUST_CAL_DATA; - break; - case DMAXMODE_PER_ZONE_CAL_DATA: - dmax_mode = VL53L1_DEVICEDMAXMODE__PER_ZONE_CAL_DATA; - break; - default: - Status = VL53L1_ERROR_INVALID_PARAMS; - break; - } - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_set_dmax_mode(Dev, dmax_mode); - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_GetDmaxMode(VL53L1_DEV Dev, - VL53L1_DeviceDmaxModes *pDmaxMode) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_DeviceDmaxMode dmax_mode; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_dmax_mode(Dev, &dmax_mode); - if (Status == VL53L1_ERROR_NONE) { - switch(dmax_mode) { - case VL53L1_DEVICEDMAXMODE__FMT_CAL_DATA: - *pDmaxMode = DMAXMODE_FMT_CAL_DATA; - break; - case VL53L1_DEVICEDMAXMODE__CUST_CAL_DATA: - *pDmaxMode = DMAXMODE_CUSTCAL_DATA; - break; - case VL53L1_DEVICEDMAXMODE__PER_ZONE_CAL_DATA: - *pDmaxMode = DMAXMODE_PER_ZONE_CAL_DATA; - break; - default: - - - *pDmaxMode = VL53L1_ERROR_NOT_IMPLEMENTED; - break; - } - } - - LOG_FUNCTION_END(Status); - return Status; -} - - - - - - - - -VL53L1_Error VL53L1_GetNumberOfLimitCheck(uint16_t *pNumberOfLimitCheck) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - *pNumberOfLimitCheck = VL53L1_CHECKENABLE_NUMBER_OF_CHECKS; - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetLimitCheckInfo(uint16_t LimitCheckId, - char *pLimitCheckString) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_limit_check_info(LimitCheckId, - pLimitCheckString); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetLimitCheckStatus(VL53L1_DEV Dev, uint16_t LimitCheckId, - uint8_t *pLimitCheckStatus) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t Temp8; - - LOG_FUNCTION_START(""); - - if (LimitCheckId >= VL53L1_CHECKENABLE_NUMBER_OF_CHECKS) { - Status = VL53L1_ERROR_INVALID_PARAMS; - } else { - VL53L1_GETARRAYPARAMETERFIELD(Dev, LimitChecksStatus, - LimitCheckId, Temp8); - *pLimitCheckStatus = Temp8; - } - - LOG_FUNCTION_END(Status); - return Status; -} - -static VL53L1_Error SetLimitValue(VL53L1_DEV Dev, uint16_t LimitCheckId, - FixPoint1616_t value) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint16_t *pmin_count_rate; - - uint16_t tmpuint16; - - - LOG_FUNCTION_START(""); - - pmin_count_rate = &(PALDevDataGet(Dev, - LLData.tim_cfg.range_config__min_count_rate_rtn_limit_mcps)); - - switch (LimitCheckId) { - case VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE: - tmpuint16 = VL53L1_FIXPOINT1616TOFIXPOINT142(value); - PALDevDataSet(Dev, LLData.tim_cfg.range_config__sigma_thresh, - tmpuint16); - break; - case VL53L1_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: - tmpuint16 = VL53L1_FIXPOINT1616TOFIXPOINT97(value); - - *pmin_count_rate = tmpuint16; - break; - default: - Status = VL53L1_ERROR_INVALID_PARAMS; - } - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_SetLimitCheckEnable(VL53L1_DEV Dev, uint16_t LimitCheckId, - uint8_t LimitCheckEnable) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - FixPoint1616_t TempFix1616 = 0; - - LOG_FUNCTION_START(""); - - - if (LimitCheckId >= VL53L1_CHECKENABLE_NUMBER_OF_CHECKS) { - Status = VL53L1_ERROR_INVALID_PARAMS; - } else { - - - if (LimitCheckEnable == 0) - TempFix1616 = 0; - else - VL53L1_GETARRAYPARAMETERFIELD(Dev, LimitChecksValue, - LimitCheckId, TempFix1616); - - Status = SetLimitValue(Dev, LimitCheckId, TempFix1616); - } - - if (Status == VL53L1_ERROR_NONE) - VL53L1_SETARRAYPARAMETERFIELD(Dev, - LimitChecksEnable, - LimitCheckId, - ((LimitCheckEnable == 0) ? 0 : 1)); - - - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetLimitCheckEnable(VL53L1_DEV Dev, uint16_t LimitCheckId, - uint8_t *pLimitCheckEnable) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t Temp8; - - LOG_FUNCTION_START(""); - - if (LimitCheckId >= VL53L1_CHECKENABLE_NUMBER_OF_CHECKS) { - Status = VL53L1_ERROR_INVALID_PARAMS; - *pLimitCheckEnable = 0; - } else { - VL53L1_GETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, - LimitCheckId, Temp8); - *pLimitCheckEnable = Temp8; - } - - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_SetLimitCheckValue(VL53L1_DEV Dev, uint16_t LimitCheckId, - FixPoint1616_t LimitCheckValue) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t LimitChecksEnable; - - LOG_FUNCTION_START(""); - - if (LimitCheckId >= VL53L1_CHECKENABLE_NUMBER_OF_CHECKS) { - Status = VL53L1_ERROR_INVALID_PARAMS; - } else { - - VL53L1_GETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, - LimitCheckId, - LimitChecksEnable); - - if (LimitChecksEnable == 0) { - - - VL53L1_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, - LimitCheckId, LimitCheckValue); - } else { - - Status = SetLimitValue(Dev, LimitCheckId, - LimitCheckValue); - - if (Status == VL53L1_ERROR_NONE) { - VL53L1_SETARRAYPARAMETERFIELD(Dev, - LimitChecksValue, - LimitCheckId, LimitCheckValue); - } - } - } - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetLimitCheckValue(VL53L1_DEV Dev, uint16_t LimitCheckId, - FixPoint1616_t *pLimitCheckValue) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint16_t MinCountRate; - FixPoint1616_t TempFix1616; - uint16_t SigmaThresh; - - LOG_FUNCTION_START(""); - - MinCountRate = PALDevDataGet(Dev, - LLData.tim_cfg.range_config__min_count_rate_rtn_limit_mcps); - - switch (LimitCheckId) { - case VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE: - SigmaThresh = PALDevDataGet(Dev, - LLData.tim_cfg.range_config__sigma_thresh); - TempFix1616 = VL53L1_FIXPOINT142TOFIXPOINT1616(SigmaThresh); - break; - case VL53L1_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: - TempFix1616 = VL53L1_FIXPOINT97TOFIXPOINT1616(MinCountRate); - break; - default: - Status = VL53L1_ERROR_INVALID_PARAMS; - } - - if (Status == VL53L1_ERROR_NONE) { - - if (TempFix1616 == 0) { - - - VL53L1_GETARRAYPARAMETERFIELD(Dev, - LimitChecksValue, LimitCheckId, - TempFix1616); - *pLimitCheckValue = TempFix1616; - VL53L1_SETARRAYPARAMETERFIELD(Dev, - LimitChecksEnable, LimitCheckId, 0); - } else { - *pLimitCheckValue = TempFix1616; - VL53L1_SETARRAYPARAMETERFIELD(Dev, - LimitChecksValue, LimitCheckId, - TempFix1616); - VL53L1_SETARRAYPARAMETERFIELD(Dev, - LimitChecksEnable, LimitCheckId, 1); - } - } - LOG_FUNCTION_END(Status); - return Status; - -} - -VL53L1_Error VL53L1_GetLimitCheckCurrent(VL53L1_DEV Dev, uint16_t LimitCheckId, - FixPoint1616_t *pLimitCheckCurrent) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - FixPoint1616_t TempFix1616 = 0; - - LOG_FUNCTION_START(""); - - if (LimitCheckId >= VL53L1_CHECKENABLE_NUMBER_OF_CHECKS) { - Status = VL53L1_ERROR_INVALID_PARAMS; - } else { - VL53L1_GETARRAYPARAMETERFIELD(Dev, LimitChecksCurrent, - LimitCheckId, TempFix1616); - *pLimitCheckCurrent = TempFix1616; - } - - LOG_FUNCTION_END(Status); - return Status; - -} - - - - - - - - - -VL53L1_Error VL53L1_GetMaxNumberOfROI(VL53L1_DEV Dev, - uint8_t *pMaxNumberOfROI) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_PresetModes PresetMode; - - LOG_FUNCTION_START(""); - - PresetMode = PALDevDataGet(Dev, CurrentParameters.PresetMode); - - - - if (PresetMode == VL53L1_PRESETMODE_MULTIZONES_SCANNING) - *pMaxNumberOfROI = VL53L1_MAX_USER_ZONES; - else - *pMaxNumberOfROI = 1; - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_SetROI(VL53L1_DEV Dev, - VL53L1_RoiConfig_t *pRoiConfig) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_PresetModes PresetMode; - uint8_t MaxNumberOfROI; - VL53L1_zone_config_t zone_cfg; - VL53L1_UserRoi_t CurrROI; - uint8_t i; - uint8_t x_centre; - uint8_t y_centre; - uint8_t width, height; - - LOG_FUNCTION_START(""); - - - - PresetMode = PALDevDataGet(Dev, CurrentParameters.PresetMode); - - - - if (PresetMode == VL53L1_PRESETMODE_MULTIZONES_SCANNING) - MaxNumberOfROI = VL53L1_MAX_USER_ZONES; - else - MaxNumberOfROI = 1; - - if ((pRoiConfig->NumberOfRoi > MaxNumberOfROI) || - (pRoiConfig->NumberOfRoi < 1)) - Status = VL53L1_ERROR_INVALID_PARAMS; - - if (Status == VL53L1_ERROR_NONE) { - - - - zone_cfg.max_zones = MaxNumberOfROI; - zone_cfg.active_zones = pRoiConfig->NumberOfRoi - 1; - - for (i = 0; i < pRoiConfig->NumberOfRoi; i++) { - CurrROI = pRoiConfig->UserRois[i]; - - - - - - - - - - Status = CheckValidRectRoi(CurrROI); - if (Status != VL53L1_ERROR_NONE) - break; - - x_centre = (CurrROI.BotRightX + CurrROI.TopLeftX + 1) - / 2; - y_centre = (CurrROI.TopLeftY + CurrROI.BotRightY + 1) - / 2; - width = (CurrROI.BotRightX - CurrROI.TopLeftX); - height = (CurrROI.TopLeftY - CurrROI.BotRightY); - if ((width < 3) || (height < 3)) { - Status = VL53L1_ERROR_INVALID_PARAMS; - break; - } - zone_cfg.user_zones[i].x_centre = x_centre; - zone_cfg.user_zones[i].y_centre = y_centre; - zone_cfg.user_zones[i].width = width; - zone_cfg.user_zones[i].height = height; - } - } - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_set_zone_config(Dev, &zone_cfg); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetROI(VL53L1_DEV Dev, - VL53L1_RoiConfig_t *pRoiConfig) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_zone_config_t zone_cfg; - uint8_t i; - uint8_t TopLeftX; - uint8_t TopLeftY; - uint8_t BotRightX; - uint8_t BotRightY; - - LOG_FUNCTION_START(""); - - VL53L1_get_zone_config(Dev, &zone_cfg); - - pRoiConfig->NumberOfRoi = zone_cfg.active_zones + 1; - - for (i = 0; i < pRoiConfig->NumberOfRoi; i++) { - TopLeftX = (2 * zone_cfg.user_zones[i].x_centre - - zone_cfg.user_zones[i].width) >> 1; - TopLeftY = (2 * zone_cfg.user_zones[i].y_centre + - zone_cfg.user_zones[i].height) >> 1; - BotRightX = (2 * zone_cfg.user_zones[i].x_centre + - zone_cfg.user_zones[i].width) >> 1; - BotRightY = (2 * zone_cfg.user_zones[i].y_centre - - zone_cfg.user_zones[i].height) >> 1; - pRoiConfig->UserRois[i].TopLeftX = TopLeftX; - pRoiConfig->UserRois[i].TopLeftY = TopLeftY; - pRoiConfig->UserRois[i].BotRightX = BotRightX; - pRoiConfig->UserRois[i].BotRightY = BotRightY; - } - - LOG_FUNCTION_END(Status); - return Status; -} - - - - - - - - - -VL53L1_Error VL53L1_GetNumberOfSequenceSteps(VL53L1_DEV Dev, - uint8_t *pNumberOfSequenceSteps) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - SUPPRESS_UNUSED_WARNING(Dev); - - LOG_FUNCTION_START(""); - - *pNumberOfSequenceSteps = VL53L1_SEQUENCESTEP_NUMBER_OF_ITEMS; - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetSequenceStepsInfo(VL53L1_SequenceStepId SequenceStepId, - char *pSequenceStepsString) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_sequence_steps_info( - SequenceStepId, - pSequenceStepsString); - - LOG_FUNCTION_END(Status); - - return Status; -} - -VL53L1_Error VL53L1_SetSequenceStepEnable(VL53L1_DEV Dev, - VL53L1_SequenceStepId SequenceStepId, uint8_t SequenceStepEnabled) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t SequenceConfig = 0; - uint8_t SequenceConfigNew = 0; - uint32_t MeasurementTimingBudgetMicroSeconds; - - LOG_FUNCTION_START(""); - - SequenceConfig = PALDevDataGet(Dev, - LLData.dyn_cfg.system__sequence_config); - - SequenceConfigNew = SequenceConfig; - - if (Status == VL53L1_ERROR_NONE) { - if (SequenceStepEnabled == 1) { - - - - - switch (SequenceStepId) { - case VL53L1_SEQUENCESTEP_VHV: - SequenceConfigNew |= 0x01; - break; - case VL53L1_SEQUENCESTEP_PHASECAL: - SequenceConfigNew |= 0x02; - break; - case VL53L1_SEQUENCESTEP_REFPHASE: - SequenceConfigNew |= 0x04; - break; - case VL53L1_SEQUENCESTEP_DSS1: - SequenceConfigNew |= 0x08; - break; - case VL53L1_SEQUENCESTEP_DSS2: - SequenceConfigNew |= 0x10; - break; - case VL53L1_SEQUENCESTEP_MM1: - SequenceConfigNew |= 0x20; - break; - case VL53L1_SEQUENCESTEP_MM2: - SequenceConfigNew |= 0x40; - break; - case VL53L1_SEQUENCESTEP_RANGE: - SequenceConfigNew |= 0x80; - break; - default: - Status = VL53L1_ERROR_INVALID_PARAMS; - } - } else { - - - - switch (SequenceStepId) { - case VL53L1_SEQUENCESTEP_VHV: - SequenceConfigNew &= 0xfe; - break; - case VL53L1_SEQUENCESTEP_PHASECAL: - SequenceConfigNew &= 0xfd; - break; - case VL53L1_SEQUENCESTEP_REFPHASE: - SequenceConfigNew &= 0xfb; - break; - case VL53L1_SEQUENCESTEP_DSS1: - SequenceConfigNew &= 0xf7; - break; - case VL53L1_SEQUENCESTEP_DSS2: - SequenceConfigNew &= 0xef; - break; - case VL53L1_SEQUENCESTEP_MM1: - SequenceConfigNew &= 0xdf; - break; - case VL53L1_SEQUENCESTEP_MM2: - SequenceConfigNew &= 0xbf; - break; - case VL53L1_SEQUENCESTEP_RANGE: - SequenceConfigNew &= 0x7f; - break; - default: - Status = VL53L1_ERROR_INVALID_PARAMS; - } - } - } - - - - if ((SequenceConfigNew != SequenceConfig) && - (Status == VL53L1_ERROR_NONE)) { - PALDevDataSet(Dev, LLData.dyn_cfg.system__sequence_config, - SequenceConfigNew); - - - - MeasurementTimingBudgetMicroSeconds = PALDevDataGet(Dev, - CurrentParameters.MeasurementTimingBudgetMicroSeconds); - - VL53L1_SetMeasurementTimingBudgetMicroSeconds(Dev, - MeasurementTimingBudgetMicroSeconds); - } - - - LOG_FUNCTION_END(Status); - - return Status; -} - - -VL53L1_Error VL53L1_GetSequenceStepEnable(VL53L1_DEV Dev, - VL53L1_SequenceStepId SequenceStepId, uint8_t *pSequenceStepEnabled) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t SequenceConfig = 0; - - LOG_FUNCTION_START(""); - - SequenceConfig = PALDevDataGet(Dev, - LLData.dyn_cfg.system__sequence_config); - - switch (SequenceStepId) { - case VL53L1_SEQUENCESTEP_VHV: - *pSequenceStepEnabled = SequenceConfig & 0x01; - break; - case VL53L1_SEQUENCESTEP_PHASECAL: - *pSequenceStepEnabled = (SequenceConfig & 0x02) >> 1; - break; - case VL53L1_SEQUENCESTEP_REFPHASE: - *pSequenceStepEnabled = (SequenceConfig & 0x04) >> 2; - break; - case VL53L1_SEQUENCESTEP_DSS1: - *pSequenceStepEnabled = (SequenceConfig & 0x08) >> 3; - break; - case VL53L1_SEQUENCESTEP_DSS2: - *pSequenceStepEnabled = (SequenceConfig & 0x10) >> 4; - break; - case VL53L1_SEQUENCESTEP_MM1: - *pSequenceStepEnabled = (SequenceConfig & 0x20) >> 5; - break; - case VL53L1_SEQUENCESTEP_MM2: - *pSequenceStepEnabled = (SequenceConfig & 0x40) >> 6; - break; - case VL53L1_SEQUENCESTEP_RANGE: - *pSequenceStepEnabled = (SequenceConfig & 0x80) >> 7; - break; - default: - Status = VL53L1_ERROR_INVALID_PARAMS; - } - - LOG_FUNCTION_END(Status); - return Status; -} - - - - - - - - - - - - -VL53L1_Error VL53L1_StartMeasurement(VL53L1_DEV Dev) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t DeviceMeasurementMode; - VL53L1_State CurrPalState; - - LOG_FUNCTION_START(""); - - CurrPalState = PALDevDataGet(Dev, PalState); - switch (CurrPalState) { - case VL53L1_STATE_IDLE: - Status = VL53L1_ERROR_NONE; - break; - case VL53L1_STATE_POWERDOWN: - case VL53L1_STATE_WAIT_STATICINIT: - case VL53L1_STATE_STANDBY: - case VL53L1_STATE_RUNNING: - case VL53L1_STATE_RESET: - case VL53L1_STATE_UNKNOWN: - case VL53L1_STATE_ERROR: - Status = VL53L1_ERROR_INVALID_COMMAND; - break; - default: - Status = VL53L1_ERROR_UNDEFINED; - } - - DeviceMeasurementMode = PALDevDataGet(Dev, LLData.measurement_mode); - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_init_and_start_range( - Dev, - DeviceMeasurementMode, - VL53L1_DEVICECONFIGLEVEL_FULL); - - if (Status == VL53L1_ERROR_NONE) { - - - PALDevDataSet(Dev, PalState, VL53L1_STATE_RUNNING); - } - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_StopMeasurement(VL53L1_DEV Dev) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_stop_range(Dev); - - if (Status == VL53L1_ERROR_NONE) { - - - PALDevDataSet(Dev, PalState, VL53L1_STATE_IDLE); - } - - LOG_FUNCTION_END(Status); - return Status; -} - -static VL53L1_Error ChangePresetMode(VL53L1_DEV Dev) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_PresetModes PresetMode; - VL53L1_DistanceModes NewDistanceMode; - VL53L1_zone_config_t zone_config; - uint8_t DeviceMeasurementMode; - uint32_t mm_config_timeout_us; - uint32_t range_config_timeout_us; - uint32_t inter_measurement_period_ms; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_zone_config(Dev, &zone_config); - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_stop_range(Dev); - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_WaitUs(Dev, 500); - - if (Status == VL53L1_ERROR_NONE) { - PresetMode = PALDevDataGet(Dev, - CurrentParameters.PresetMode); - NewDistanceMode = PALDevDataGet(Dev, - CurrentParameters.NewDistanceMode); - mm_config_timeout_us = PALDevDataGet(Dev, - LLData.mm_config_timeout_us); - range_config_timeout_us = PALDevDataGet(Dev, - LLData.range_config_timeout_us); - inter_measurement_period_ms = PALDevDataGet(Dev, - LLData.inter_measurement_period_ms); - - Status = SetPresetMode(Dev, - PresetMode, - NewDistanceMode, - mm_config_timeout_us, - range_config_timeout_us, - inter_measurement_period_ms); - } - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_set_zone_config(Dev, &zone_config); - - if (Status == VL53L1_ERROR_NONE) { - DeviceMeasurementMode = PALDevDataGet(Dev, - LLData.measurement_mode); - - Status = VL53L1_init_and_start_range( - Dev, - DeviceMeasurementMode, - VL53L1_DEVICECONFIGLEVEL_FULL); - } - - if (Status == VL53L1_ERROR_NONE) - PALDevDataSet(Dev, - CurrentParameters.InternalDistanceMode, - NewDistanceMode); - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_ClearInterruptAndStartMeasurement(VL53L1_DEV Dev) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t DeviceMeasurementMode; - VL53L1_DistanceModes InternalDistanceMode; - VL53L1_DistanceModes NewDistanceMode; - - LOG_FUNCTION_START(""); - - DeviceMeasurementMode = PALDevDataGet(Dev, LLData.measurement_mode); - InternalDistanceMode = PALDevDataGet(Dev, - CurrentParameters.InternalDistanceMode); - NewDistanceMode = PALDevDataGet(Dev, - CurrentParameters.NewDistanceMode); - - if (NewDistanceMode != InternalDistanceMode) - Status = ChangePresetMode(Dev); - else - Status = VL53L1_clear_interrupt_and_enable_next_range( - Dev, - DeviceMeasurementMode); - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_GetMeasurementDataReady(VL53L1_DEV Dev, - uint8_t *pMeasurementDataReady) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_is_new_data_ready(Dev, pMeasurementDataReady); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_WaitMeasurementDataReady(VL53L1_DEV Dev) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - Status = VL53L1_poll_for_range_completion(Dev, - VL53L1_RANGE_COMPLETION_POLLING_TIMEOUT_MS); - - LOG_FUNCTION_END(Status); - return Status; -} - -static void GenNewPresetMode(VL53L1_DEV Dev, int16_t RefRange) -{ - VL53L1_DistanceModes InternalDistanceMode; - VL53L1_DistanceModes NewDistanceMode; - uint16_t HRLI = 600; - uint16_t HRLH = 700; - uint16_t MRLI = 1400; - uint16_t MRLH = 1500; - - InternalDistanceMode = PALDevDataGet(Dev, - CurrentParameters.InternalDistanceMode); - - NewDistanceMode = InternalDistanceMode; - switch (InternalDistanceMode) { - case VL53L1_DISTANCEMODE_SHORT: - - - - - - if (RefRange > MRLH) - NewDistanceMode = VL53L1_DISTANCEMODE_LONG; - else if (RefRange > HRLH) - NewDistanceMode = VL53L1_DISTANCEMODE_MEDIUM; - break; - case VL53L1_DISTANCEMODE_MEDIUM: - - - - - - if (RefRange > MRLH) - NewDistanceMode = VL53L1_DISTANCEMODE_LONG; - else if (RefRange < HRLI) - NewDistanceMode = VL53L1_DISTANCEMODE_SHORT; - break; - default: - - - - - - - if (RefRange < HRLI) - NewDistanceMode = VL53L1_DISTANCEMODE_SHORT; - else if (RefRange < MRLI) - NewDistanceMode = VL53L1_DISTANCEMODE_MEDIUM; - break; - } - - PALDevDataSet(Dev, CurrentParameters.NewDistanceMode, NewDistanceMode); - -} - -static void CheckAndChangeDistanceMode(VL53L1_DEV Dev, - VL53L1_RangingMeasurementData_t *pRangeData, - int16_t AmbientDmaxMm) -{ - - VL53L1_DistanceModes DistanceMode; - int16_t RefRange; - uint8_t RangeValid; - - - - - - - RangeValid = (pRangeData->RangeStatus == VL53L1_RANGESTATUS_RANGE_VALID) - ? 1: 0; - - RefRange = (RangeValid == 1) ? pRangeData->RangeMilliMeter : - AmbientDmaxMm; - - DistanceMode = PALDevDataGet(Dev, CurrentParameters.DistanceMode); - - if (((DistanceMode == VL53L1_DISTANCEMODE_AUTO_LITE) && - (RangeValid == 0)) || - ((DistanceMode == VL53L1_DISTANCEMODE_AUTO) && - (RangeValid == 0) && (AmbientDmaxMm == 0))) { - PALDevDataSet(Dev, CurrentParameters.NewDistanceMode, - VL53L1_DISTANCEMODE_LONG); - - } else if ((DistanceMode == VL53L1_DISTANCEMODE_AUTO_LITE) || - (DistanceMode == VL53L1_DISTANCEMODE_AUTO)) - GenNewPresetMode(Dev, RefRange); - -} - - -static uint8_t ComputeRQL(uint8_t active_results, - VL53L1_range_data_t *presults_data) -{ - int16_t T_Wide = 150; - int16_t SRL = 300; - uint16_t SRAS = 30; - FixPoint1616_t RAS; - FixPoint1616_t SRQL; - FixPoint1616_t GI = 117.7 * 65536; - FixPoint1616_t GGm = 48.8 * 65536; - FixPoint1616_t LRAP = 0.1 * 65536; - FixPoint1616_t partial; - uint8_t finalvalue; - - if (active_results == 0) - return 0; - else if ((presults_data->max_range_mm - - presults_data->min_range_mm) >= T_Wide) - return 50; - else { - if (presults_data->median_range_mm < SRL) - RAS = SRAS * 65536; - else - RAS = LRAP * presults_data->median_range_mm; - - - - if (RAS != 0) { - partial = (GGm * presults_data->VL53L1_PRM_00004) + (RAS >> 1); - partial = partial / RAS; - partial = partial * 65536; - if (GI > partial) - SRQL = GI - partial; - else - SRQL = 50 * 65536; - } else - SRQL = 100 * 65536; - - finalvalue = (uint8_t)(SRQL >> 16); - return MAX(50, MIN(100, finalvalue)); - } -} - -static VL53L1_Error SetSimpleData(VL53L1_DEV Dev, - uint8_t active_results, - VL53L1_range_data_t *presults_data, - VL53L1_RangingMeasurementData_t *pRangeData) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t FilteredRangeStatus; - uint8_t SigmaLimitflag; - uint8_t SignalLimitflag; - uint8_t Temp8Enable; - uint8_t Temp8; - uint8_t NoneFlag = 0; - FixPoint1616_t AmbientRate; - FixPoint1616_t SignalRate; - FixPoint1616_t TempFix1616; - FixPoint1616_t LimitCheckValue; - - pRangeData->TimeStamp = presults_data->time_stamp; - FilteredRangeStatus = presults_data->range_status & 0x1F; - - pRangeData->RangeQualityLevel = ComputeRQL(active_results, - presults_data); - - pRangeData->RangeMaxMilliMeter = presults_data->max_range_mm; - pRangeData->RangeMinMilliMeter = presults_data->min_range_mm; - - SignalRate = VL53L1_FIXPOINT97TOFIXPOINT1616( - presults_data->peak_signal_count_rate_mcps); - pRangeData->SignalRateRtnMegaCps - = SignalRate; - - AmbientRate = VL53L1_FIXPOINT97TOFIXPOINT1616( - presults_data->ambient_count_rate_mcps); - pRangeData->AmbientRateRtnMegaCps = AmbientRate; - - pRangeData->EffectiveSpadRtnCount = - presults_data->VL53L1_PRM_00003; - - TempFix1616 = VL53L1_FIXPOINT142TOFIXPOINT1616( - presults_data->VL53L1_PRM_00004); - - pRangeData->SigmaMilliMeter = TempFix1616; - - pRangeData->RangeMilliMeter = presults_data->median_range_mm; - - pRangeData->RangeFractionalPart = 0; - - if (FilteredRangeStatus == - VL53L1_DEVICEERROR_NOUPDATE || - FilteredRangeStatus == - VL53L1_DEVICEERROR_ALGOUNDERFLOW || - FilteredRangeStatus == - VL53L1_DEVICEERROR_ALGOOVERFLOW || - FilteredRangeStatus == - VL53L1_DEVICEERROR_RANGEIGNORETHRESHOLD || - FilteredRangeStatus == - VL53L1_DEVICEERROR_REFSPADCHARNOTENOUGHDPADS || - FilteredRangeStatus == - VL53L1_DEVICEERROR_REFSPADCHARMORETHANTARGET || - FilteredRangeStatus == - VL53L1_DEVICEERROR_REFSPADCHARLESSTHANTARGET || - FilteredRangeStatus == VL53L1_DEVICEERROR_MULTCLIPFAIL || - FilteredRangeStatus == VL53L1_DEVICEERROR_GPHSTREAMCOUNT0READY - ) { - NoneFlag = 1; - } else { - NoneFlag = 0; - } - - if (FilteredRangeStatus == - VL53L1_DEVICEERROR_RANGECOMPLETE) { - pRangeData->RangeStatus = - VL53L1_RANGESTATUS_RANGE_VALID; - } else if (FilteredRangeStatus == - VL53L1_DEVICEERROR_RANGECOMPLETE_NO_WRAP_CHECK) { - pRangeData->RangeStatus = - VL53L1_RANGESTATUS_RANGE_VALID_NO_WRAP_CHECK; - } else { - if (NoneFlag == 1) { - pRangeData->RangeStatus = VL53L1_RANGESTATUS_NONE; - } else if (FilteredRangeStatus == - VL53L1_DEVICEERROR_VCSELCONTINUITYTESTFAILURE || - FilteredRangeStatus == - VL53L1_DEVICEERROR_VCSELWATCHDOGTESTFAILURE || - FilteredRangeStatus == - VL53L1_DEVICEERROR_NOVHVVALUEFOUND) { - pRangeData->RangeStatus = - VL53L1_RANGESTATUS_HARDWARE_FAIL; - } else if (FilteredRangeStatus == - VL53L1_DEVICEERROR_RANGEPHASECHECK || - FilteredRangeStatus == - VL53L1_DEVICEERROR_PHASECONSISTENCY) { - pRangeData->RangeStatus = - VL53L1_RANGESTATUS_PHASE_FAIL; - } else if (FilteredRangeStatus == - VL53L1_DEVICEERROR_MINCLIP || - FilteredRangeStatus == - VL53L1_DEVICEERROR_USERROICLIP) { - pRangeData->RangeStatus = - VL53L1_RANGESTATUS_MIN_RANGE_FAIL; - } else if (FilteredRangeStatus == - VL53L1_DEVICEERROR_MSRCNOTARGET) { - pRangeData->RangeStatus = - VL53L1_RANGESTATUS_SIGNAL_FAIL; - } else if (FilteredRangeStatus == - VL53L1_DEVICEERROR_SIGMATHRESHOLDCHECK) { - pRangeData->RangeStatus = - VL53L1_RANGESTATUS_SIGMA_FAIL; - } else { - pRangeData->RangeStatus = - VL53L1_RANGESTATUS_NONE; - } - - } - - - - TempFix1616 = VL53L1_FIXPOINT142TOFIXPOINT1616( - presults_data->VL53L1_PRM_00004); - VL53L1_SETARRAYPARAMETERFIELD(Dev, - LimitChecksCurrent, VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE, - TempFix1616); - - TempFix1616 = VL53L1_FIXPOINT97TOFIXPOINT1616( - presults_data->peak_signal_count_rate_mcps); - VL53L1_SETARRAYPARAMETERFIELD(Dev, - LimitChecksCurrent, VL53L1_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, - TempFix1616); - - - - - - VL53L1_GetLimitCheckValue(Dev, - VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE, - &LimitCheckValue); - - SigmaLimitflag = (FilteredRangeStatus == - VL53L1_DEVICEERROR_SIGMATHRESHOLDCHECK) - ? 1 : 0; - - VL53L1_GetLimitCheckEnable(Dev, - VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE, - &Temp8Enable); - - Temp8 = ((Temp8Enable == 1) && (SigmaLimitflag == 1)) ? 1 : 0; - VL53L1_SETARRAYPARAMETERFIELD(Dev, LimitChecksStatus, - VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE, Temp8); - - - - VL53L1_GetLimitCheckValue(Dev, - VL53L1_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, - &LimitCheckValue); - - SignalLimitflag = (FilteredRangeStatus == - VL53L1_DEVICEERROR_MSRCNOTARGET) - ? 1 : 0; - - VL53L1_GetLimitCheckEnable(Dev, - VL53L1_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, - &Temp8Enable); - - Temp8 = ((Temp8Enable == 1) && (SignalLimitflag == 1)) ? 1 : 0; - VL53L1_SETARRAYPARAMETERFIELD(Dev, LimitChecksStatus, - VL53L1_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, Temp8); - - return Status; -} - - -static uint8_t GetOutputDataIndex(VL53L1_DEV Dev, - VL53L1_range_results_t *presults) -{ - uint8_t i; - uint8_t index = 0; - VL53L1_OutputModes OutputMode; - - OutputMode = PALDevDataGet(Dev, CurrentParameters.OutputMode); - - - - - if (OutputMode == VL53L1_OUTPUTMODE_NEAREST) - return 0; - - - - - - for (i = 1; i < presults->active_results; i++) { - if (presults->VL53L1_PRM_00005[i].peak_signal_count_rate_mcps > - presults->VL53L1_PRM_00005[index].peak_signal_count_rate_mcps) - index = i; - } - - return index; -} - -VL53L1_Error VL53L1_GetRangingMeasurementData(VL53L1_DEV Dev, - VL53L1_RangingMeasurementData_t *pRangingMeasurementData) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_range_results_t results; - VL53L1_range_results_t *presults = &results; - VL53L1_range_data_t *presults_data; - uint8_t index = 0; - int16_t dmax_min; - - LOG_FUNCTION_START(""); - - - - memset(pRangingMeasurementData, 0xFF, - sizeof(VL53L1_RangingMeasurementData_t)); - - - - Status = VL53L1_get_device_results( - Dev, - VL53L1_DEVICERESULTSLEVEL_FULL, - presults); - dmax_min = MIN(presults->wrap_dmax_mm, - presults->ambient_dmax_mm[DMAX_REFLECTANCE_IDX]); - - if (Status == VL53L1_ERROR_NONE) { - pRangingMeasurementData->StreamCount = presults->stream_count; - pRangingMeasurementData->DmaxMilliMeter = dmax_min; - - - - - index = GetOutputDataIndex(Dev, presults); - presults_data = &(presults->VL53L1_PRM_00005[index]); - Status = SetSimpleData(Dev, presults->active_results, - presults_data, - pRangingMeasurementData); - } - - if (Status == VL53L1_ERROR_NONE) { - CheckAndChangeDistanceMode(Dev, pRangingMeasurementData, - presults->ambient_dmax_mm[VL53L1_MAX_AMBIENT_DMAX_VALUES - - 1]); - } - - LOG_FUNCTION_END(Status); - return Status; -} - -static VL53L1_Error SetMeasurementData(VL53L1_DEV Dev, - VL53L1_range_results_t *presults, - VL53L1_MultiRangingData_t *pMultiRangingData) -{ - uint8_t i; - uint8_t iteration; - VL53L1_RangingMeasurementData_t *pRangeData; - VL53L1_range_data_t *presults_data; - int16_t dmax_min; - VL53L1_Error Status = VL53L1_ERROR_NONE; - uint8_t index = 0; - - pMultiRangingData->NumberOfObjectsFound = presults->active_results; - pMultiRangingData->RoiNumber = presults->zone_id; - - dmax_min = MIN(presults->wrap_dmax_mm, - presults->ambient_dmax_mm[DMAX_REFLECTANCE_IDX]); - - - - - if (presults->active_results < 1) - iteration = 1; - else - iteration = presults->active_results; - - for (i = 0; i < iteration; i++) { - pRangeData = &(pMultiRangingData->RangeData[i]); - - presults_data = &(presults->VL53L1_PRM_00005[i]); - pRangeData->StreamCount = presults->stream_count; - pRangeData->DmaxMilliMeter = dmax_min; - - if (Status == VL53L1_ERROR_NONE) - Status = SetSimpleData(Dev, presults->active_results, - presults_data, - pRangeData); - } - - if (Status == VL53L1_ERROR_NONE) { - index = GetOutputDataIndex(Dev, presults); - pRangeData = &(pMultiRangingData->RangeData[index]); - CheckAndChangeDistanceMode(Dev, pRangeData, - presults->ambient_dmax_mm[ - VL53L1_MAX_AMBIENT_DMAX_VALUES - 1]); - } - - return Status; -} - -VL53L1_Error VL53L1_GetMultiRangingData(VL53L1_DEV Dev, - VL53L1_MultiRangingData_t *pMultiRangingData) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_range_results_t results; - VL53L1_range_results_t *presults = &results; - - LOG_FUNCTION_START(""); - - - - memset(pMultiRangingData, 0xFF, - sizeof(VL53L1_MultiRangingData_t)); - - - - Status = VL53L1_get_device_results( - Dev, - VL53L1_DEVICERESULTSLEVEL_FULL, - presults); - - - if (Status == VL53L1_ERROR_NONE) { - - switch (presults->rd_device_state) { - case VL53L1_DEVICESTATE_RANGING_GATHER_DATA: - pMultiRangingData->RoiStatus = - VL53L1_ROISTATUS_VALID_NOT_LAST; - break; - case VL53L1_DEVICESTATE_RANGING_OUTPUT_DATA: - pMultiRangingData->RoiStatus = - VL53L1_ROISTATUS_VALID_LAST; - break; - default: - pMultiRangingData->RoiStatus = - VL53L1_ROISTATUS_NOT_VALID; - } - - Status = SetMeasurementData(Dev, - presults, - pMultiRangingData); - - } - - LOG_FUNCTION_END(Status); - return Status; -} - - - - - - - - - -VL53L1_Error VL53L1_PerformRefSpadManagement(VL53L1_DEV Dev) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_Error UnfilteredStatus; - - LOG_FUNCTION_START(""); - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_run_ref_spad_char(Dev, &UnfilteredStatus); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_SetXTalkCompensationEnable(VL53L1_DEV Dev, - uint8_t XTalkCompensationEnable) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (XTalkCompensationEnable == 0) - Status = VL53L1_disable_xtalk_compensation(Dev); - else - Status = VL53L1_enable_xtalk_compensation(Dev); - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_GetXTalkCompensationEnable(VL53L1_DEV Dev, - uint8_t *pXTalkCompensationEnable) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - VL53L1_get_xtalk_compensation_enable( - Dev, - pXTalkCompensationEnable); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_PerformXTalkCalibration(VL53L1_DEV Dev, - uint8_t CalibrationOption) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_Error UnfilteredStatus; - uint32_t mm_config_timeout_us = 2000; - uint32_t range_config_timeout_us = 10000; - uint16_t dss_config__target_total_rate_mcps = 0x1400; - uint32_t phasecal_config_timeout_us = 4000; - uint8_t num_of_samples = 7; - - SUPPRESS_UNUSED_WARNING(CalibrationOption); - - LOG_FUNCTION_START(""); - - - - - - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_run_xtalk_extraction( - Dev, - dss_config__target_total_rate_mcps, - phasecal_config_timeout_us, - mm_config_timeout_us, - range_config_timeout_us, - num_of_samples, - &UnfilteredStatus); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_SetOffsetCalibrationMode(VL53L1_DEV Dev, - VL53L1_OffsetCalibrationModes OffsetCalibrationMode) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_OffsetCalibrationMode offset_cal_mode; - - LOG_FUNCTION_START(""); - - if (OffsetCalibrationMode == VL53L1_OFFSETCALIBRATIONMODE_STANDARD) { - offset_cal_mode = - VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__STANDARD; - } else if (OffsetCalibrationMode == - VL53L1_OFFSETCALIBRATIONMODE_PRERANGE_ONLY) { - offset_cal_mode = - VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__STANDARD_PRE_RANGE_ONLY; - } else if (OffsetCalibrationMode == - VL53L1_OFFSETCALIBRATIONMODE_MULTI_ZONE) { - offset_cal_mode = - VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__HISTOGRAM; - } else { - Status = VL53L1_ERROR_INVALID_PARAMS; - } - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_set_offset_calibration_mode(Dev, - offset_cal_mode); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_SetOffsetCorrectionMode(VL53L1_DEV Dev, - VL53L1_OffsetCorrectionModes OffsetCorrectionMode) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_OffsetCorrectionMode offset_cor_mode; - - LOG_FUNCTION_START(""); - - if (OffsetCorrectionMode == VL53L1_OFFSETCORRECTIONMODE_STANDARD) { - offset_cor_mode = - VL53L1_OFFSETCORRECTIONMODE__MM1_MM2_OFFSETS; - } else if (OffsetCorrectionMode == - VL53L1_OFFSETCORRECTIONMODE_PERZONE) { - offset_cor_mode = - VL53L1_OFFSETCORRECTIONMODE__PER_ZONE_OFFSETS; - } else { - Status = VL53L1_ERROR_INVALID_PARAMS; - } - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_set_offset_correction_mode(Dev, - offset_cor_mode); - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_PerformOffsetCalibration(VL53L1_DEV Dev, - int32_t CalDistanceMilliMeter, FixPoint1616_t CalReflectancePercent) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_Error UnfilteredStatus; - uint32_t range_config_timeout_us = 13000; - uint8_t pre_num_of_samples = 32; - uint8_t mm1_num_of_samples = 100; - uint8_t mm2_num_of_samples = 64; - uint16_t dss_config__target_total_rate_mcps = 0x1400; - uint32_t phasecal_config_timeout_us = 1000; - uint16_t CalReflectancePercent_int; - - - VL53L1_DevicePresetModes device_preset_mode; - VL53L1_DeviceZonePreset zone_preset; - VL53L1_zone_config_t zone_cfg; - uint32_t phasecal_config_timeout_us_pz; - uint32_t mm_config_timeout_us_pz; - uint32_t range_config_timeout_us_pz; - uint16_t num_of_samples; - VL53L1_OffsetCalibrationMode offset_cal_mode; - - LOG_FUNCTION_START(""); - - CalReflectancePercent_int = - VL53L1_FIXPOINT1616TOFIXPOINT72(CalReflectancePercent); - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_get_offset_calibration_mode(Dev, - &offset_cal_mode); - - if ((offset_cal_mode == - VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__STANDARD) || - (offset_cal_mode == - VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__STANDARD_PRE_RANGE_ONLY)) { - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_run_offset_calibration( - Dev, - dss_config__target_total_rate_mcps, - phasecal_config_timeout_us, - range_config_timeout_us, - pre_num_of_samples, - mm1_num_of_samples, - mm2_num_of_samples, - (int16_t)CalDistanceMilliMeter, - CalReflectancePercent_int, - &UnfilteredStatus); - - } else if (offset_cal_mode == - VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__HISTOGRAM) { - - device_preset_mode = - VL53L1_DEVICEPRESETMODE_HISTOGRAM_MULTIZONE_LONG_RANGE; - zone_preset = VL53L1_DEVICEZONEPRESET_CUSTOM; - phasecal_config_timeout_us_pz = 4000; - mm_config_timeout_us_pz = 2000; - range_config_timeout_us_pz = 10000; - num_of_samples = 64; - - Status = VL53L1_get_zone_config(Dev, &zone_cfg); - - if (Status == VL53L1_ERROR_NONE) - Status = VL53L1_run_zone_calibration( - Dev, - device_preset_mode, - zone_preset, - &zone_cfg, - dss_config__target_total_rate_mcps, - phasecal_config_timeout_us_pz, - mm_config_timeout_us_pz, - range_config_timeout_us_pz, - num_of_samples, - (int16_t)CalDistanceMilliMeter, - CalReflectancePercent_int, - &UnfilteredStatus); - - } else { - Status = VL53L1_ERROR_INVALID_PARAMS; - } - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_SetCalibrationData(VL53L1_DEV Dev, - VL53L1_CalibrationData_t *pCalibrationData) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_set_part_to_part_data( - Dev, pCalibrationData); - - LOG_FUNCTION_END(Status); - return Status; - -} - -VL53L1_Error VL53L1_GetCalibrationData(VL53L1_DEV Dev, - VL53L1_CalibrationData_t *pCalibrationData) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_part_to_part_data( - Dev, pCalibrationData); - - LOG_FUNCTION_END(Status); - return Status; -} - -VL53L1_Error VL53L1_GetOpticalCenter(VL53L1_DEV Dev, - uint8_t *pOpticalCenterX, uint8_t *pOpticalCenterY) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_CalibrationData_t CalibrationData; - - LOG_FUNCTION_START(""); - - *pOpticalCenterX = 0; - *pOpticalCenterY = 0; - Status = VL53L1_get_part_to_part_data(Dev, &CalibrationData); - if (Status == VL53L1_ERROR_NONE) { - *pOpticalCenterX = CalibrationData.mm_roi.x_centre; - *pOpticalCenterY = CalibrationData.mm_roi.y_centre; - } - - LOG_FUNCTION_END(Status); - return Status; -} - - - - - - - - -VL53L1_Error VL53L1_SetThresholdConfig(VL53L1_DEV Dev, - VL53L1_DetectionConfig_t *pConfig) -{ -#define BADTHRESBOUNDS(T) \ - (((T.CrossMode == VL53L1_THRESHOLD_OUT_OF_WINDOW) || \ - (T.CrossMode == VL53L1_THRESHOLD_IN_WINDOW)) && (T.Low > T.High)) - - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_GPIO_interrupt_config_t Cfg; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_GPIO_interrupt_config(Dev, &Cfg); - if (Status == VL53L1_ERROR_NONE) { - if (pConfig->DetectionMode == VL53L1_DETECTION_NORMAL_RUN) { - Cfg.intr_new_measure_ready = 1; - Status = VL53L1_set_GPIO_interrupt_config_struct(Dev, - Cfg); - } else { - if (BADTHRESBOUNDS(pConfig->Distance)) - Status = VL53L1_ERROR_INVALID_PARAMS; - if ((Status == VL53L1_ERROR_NONE) && - (BADTHRESBOUNDS(pConfig->Rate))) - Status = VL53L1_ERROR_INVALID_PARAMS; - if (Status == VL53L1_ERROR_NONE) { - Cfg.intr_new_measure_ready = 0; - Cfg.intr_no_target = pConfig->IntrNoTarget; - Cfg.threshold_distance_high = - pConfig->Distance.High; - Cfg.threshold_distance_low = - pConfig->Distance.Low; - Cfg.threshold_rate_high = - VL53L1_FIXPOINT1616TOFIXPOINT97( - pConfig->Rate.High); - Cfg.threshold_rate_low = - VL53L1_FIXPOINT1616TOFIXPOINT97( - pConfig->Rate.Low); - - Cfg.intr_mode_distance = ConvertModeToLLD( - &Status, - pConfig->Distance.CrossMode); - if (Status == VL53L1_ERROR_NONE) - Cfg.intr_mode_rate = ConvertModeToLLD( - &Status, - pConfig->Rate.CrossMode); - } - - - - if (Status == VL53L1_ERROR_NONE) { - Cfg.intr_combined_mode = 1; - switch (pConfig->DetectionMode) { - case VL53L1_DETECTION_DISTANCE_ONLY: - Cfg.threshold_rate_high = 0; - Cfg.threshold_rate_low = 0; - break; - case VL53L1_DETECTION_RATE_ONLY: - Cfg.threshold_distance_high = 0; - Cfg.threshold_distance_low = 0; - break; - case VL53L1_DETECTION_DISTANCE_OR_RATE: - - - - - break; - case VL53L1_DETECTION_DISTANCE_AND_RATE: - Cfg.intr_combined_mode = 0; - break; - default: - Status = VL53L1_ERROR_INVALID_PARAMS; - } - } - - if (Status == VL53L1_ERROR_NONE) - Status = - VL53L1_set_GPIO_interrupt_config_struct(Dev, - Cfg); - - } - } - - LOG_FUNCTION_END(Status); - return Status; -} - - -VL53L1_Error VL53L1_GetThresholdConfig(VL53L1_DEV Dev, - VL53L1_DetectionConfig_t *pConfig) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - VL53L1_GPIO_interrupt_config_t Cfg; - - LOG_FUNCTION_START(""); - - Status = VL53L1_get_GPIO_interrupt_config(Dev, &Cfg); - - if (Status != VL53L1_ERROR_NONE) { - LOG_FUNCTION_END(Status); - return Status; - } - - pConfig->IntrNoTarget = Cfg.intr_no_target; - pConfig->Distance.High = Cfg.threshold_distance_high; - pConfig->Distance.Low = Cfg.threshold_distance_low; - pConfig->Rate.High = - VL53L1_FIXPOINT97TOFIXPOINT1616( - Cfg.threshold_rate_high); - pConfig->Rate.Low = - VL53L1_FIXPOINT97TOFIXPOINT1616(Cfg.threshold_rate_low); - pConfig->Distance.CrossMode = - ConvertModeFromLLD(&Status, Cfg.intr_mode_distance); - if (Status == VL53L1_ERROR_NONE) - pConfig->Rate.CrossMode = - ConvertModeFromLLD(&Status, Cfg.intr_mode_rate); - - if (Cfg.intr_new_measure_ready == 1) { - pConfig->DetectionMode = VL53L1_DETECTION_NORMAL_RUN; - } else { - - - if (Status == VL53L1_ERROR_NONE) { - if (Cfg.intr_combined_mode == 0) - pConfig->DetectionMode = - VL53L1_DETECTION_DISTANCE_AND_RATE; - else { - if ((Cfg.threshold_distance_high == 0) && - (Cfg.threshold_distance_low == 0)) - pConfig->DetectionMode = - VL53L1_DETECTION_RATE_ONLY; - else if ((Cfg.threshold_rate_high == 0) && - (Cfg.threshold_rate_low == 0)) - pConfig->DetectionMode = - VL53L1_DETECTION_DISTANCE_ONLY; - else - pConfig->DetectionMode = - VL53L1_DETECTION_DISTANCE_OR_RATE; - } - } - } - - LOG_FUNCTION_END(Status); - return Status; -} - - - - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_api_calibration.c b/drivers/input/misc/vl53L1/src/vl53l1_api_calibration.c deleted file mode 100644 index b10b2935a25a..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_api_calibration.c +++ /dev/null @@ -1,2617 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_ll_device.h" -#include "vl53l1_platform.h" -#include "vl53l1_platform_ipp.h" -#include "vl53l1_register_map.h" -#include "vl53l1_register_funcs.h" -#include "vl53l1_register_settings.h" -#include "vl53l1_hist_map.h" -#include "vl53l1_hist_structs.h" -#include "vl53l1_core.h" -#include "vl53l1_wait.h" -#include "vl53l1_api_preset_modes.h" -#include "vl53l1_fpga_core.h" -#include "vl53l1_silicon_core.h" -#include "vl53l1_api_core.h" -#include "vl53l1_api_calibration.h" - -#ifdef VL53L1_LOG_ENABLE - #include "vl53l1_api_debug.h" -#endif - - - - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_CORE, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_CORE, status, \ - fmt, ##__VA_ARGS__) - -#define trace_print(level, ...) \ - _LOG_TRACE_PRINT(VL53L1_TRACE_MODULE_CORE, \ - level, VL53L1_TRACE_FUNCTION_NONE, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_run_ref_spad_char( - VL53L1_DEV Dev, - VL53L1_Error *pcal_status) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t comms_buffer[6]; - - VL53L1_refspadchar_config_t *prefspadchar = &(pdev->refspadchar); - - LOG_FUNCTION_START(""); - - - - - - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_enable_powerforce(Dev); - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_set_ref_spad_char_config( - Dev, - prefspadchar->VL53L1_PRM_00007, - prefspadchar->timeout_us, - prefspadchar->target_count_rate_mcps, - prefspadchar->max_count_rate_limit_mcps, - prefspadchar->min_count_rate_limit_mcps, - pdev->stat_nvm.osc_measured__fast_osc__frequency); - - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_run_device_test( - Dev, - prefspadchar->device_test_mode); - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_ReadMulti( - Dev, - VL53L1_REF_SPAD_CHAR_RESULT__NUM_ACTUAL_REF_SPADS, - comms_buffer, - 2); - - if (status == VL53L1_ERROR_NONE) { - pdev->dbg_results.ref_spad_char_result__num_actual_ref_spads = - comms_buffer[0]; - pdev->dbg_results.ref_spad_char_result__ref_location = - comms_buffer[1]; - } - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WriteMulti( - Dev, - VL53L1_REF_SPAD_MAN__NUM_REQUESTED_REF_SPADS, - comms_buffer, - 2); - - if (status == VL53L1_ERROR_NONE) { - pdev->customer.ref_spad_man__num_requested_ref_spads = - comms_buffer[0]; - pdev->customer.ref_spad_man__ref_location = - comms_buffer[1]; - } - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_ReadMulti( - Dev, - VL53L1_RESULT__SPARE_0_SD1, - comms_buffer, - 6); - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WriteMulti( - Dev, - VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_REF_0, - comms_buffer, - 6); - - if (status == VL53L1_ERROR_NONE) { - pdev->customer.global_config__spad_enables_ref_0 = - comms_buffer[0]; - pdev->customer.global_config__spad_enables_ref_1 = - comms_buffer[1]; - pdev->customer.global_config__spad_enables_ref_2 = - comms_buffer[2]; - pdev->customer.global_config__spad_enables_ref_3 = - comms_buffer[3]; - pdev->customer.global_config__spad_enables_ref_4 = - comms_buffer[4]; - pdev->customer.global_config__spad_enables_ref_5 = - comms_buffer[5]; - } - -#ifdef VL53L1_LOG_ENABLE - - - if (status == VL53L1_ERROR_NONE) - VL53L1_print_customer_nvm_managed( - &(pdev->customer), - "run_ref_spad_char():pdev->lldata.customer.", - VL53L1_TRACE_MODULE_REF_SPAD_CHAR); -#endif - - if (status == VL53L1_ERROR_NONE) { - - switch (pdev->sys_results.result__range_status) { - - case VL53L1_DEVICEERROR_REFSPADCHARNOTENOUGHDPADS: - status = VL53L1_WARNING_REF_SPAD_CHAR_NOT_ENOUGH_SPADS; - break; - - case VL53L1_DEVICEERROR_REFSPADCHARMORETHANTARGET: - status = VL53L1_WARNING_REF_SPAD_CHAR_RATE_TOO_HIGH; - break; - - case VL53L1_DEVICEERROR_REFSPADCHARLESSTHANTARGET: - status = VL53L1_WARNING_REF_SPAD_CHAR_RATE_TOO_LOW; - break; - } - } - - - - - - - *pcal_status = status; - - - - - IGNORE_STATUS( - IGNORE_REF_SPAD_CHAR_NOT_ENOUGH_SPADS, - VL53L1_WARNING_REF_SPAD_CHAR_NOT_ENOUGH_SPADS, - status); - - IGNORE_STATUS( - IGNORE_REF_SPAD_CHAR_RATE_TOO_HIGH, - VL53L1_WARNING_REF_SPAD_CHAR_RATE_TOO_HIGH, - status); - - IGNORE_STATUS( - IGNORE_REF_SPAD_CHAR_RATE_TOO_LOW, - VL53L1_WARNING_REF_SPAD_CHAR_RATE_TOO_LOW, - status); - - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_run_xtalk_extraction( - VL53L1_DEV Dev, - uint16_t dss_config__target_total_rate_mcps, - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint8_t num_of_samples, - VL53L1_Error *pcal_status) -{ - - - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - - - - - - uint8_t results_invalid = 0; - - uint8_t i = 0; - uint8_t measurement_mode = VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - - LOG_FUNCTION_START(""); - - - - - - - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.central_histogram_avg)); - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.central_histogram_sum)); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) - - status = - VL53L1_set_preset_mode( - Dev, - VL53L1_DEVICEPRESETMODE_HISTOGRAM_XTALK_PLANAR, - dss_config__target_total_rate_mcps, - phasecal_config_timeout_us, - mm_config_timeout_us, - range_config_timeout_us, - 100); - - - - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_disable_xtalk_compensation( - Dev); - } - - - - - - - pdev->xtalk_results.max_results = VL53L1_MAX_XTALK_RANGE_RESULTS; - pdev->xtalk_results.active_results = pdev->zone_cfg.active_zones+1; - - - - - pdev->xtalk_results.central_histogram__window_start = 0xFF; - pdev->xtalk_results.central_histogram__window_end = 0x00; - - pdev->xtalk_results.num_of_samples_status = 0x00; - pdev->xtalk_results.zero_samples_status = 0x00; - pdev->xtalk_results.max_sigma_status = 0x00; - - for (i = 0 ; i < pdev->xtalk_results.max_results ; i++) { - pdev->xtalk_results.VL53L1_PRM_00005[i].no_of_samples = 0; - pdev->xtalk_results.VL53L1_PRM_00005[i].signal_total_events_avg = 0; - pdev->xtalk_results.VL53L1_PRM_00005[i].signal_total_events_sum = 0; - pdev->xtalk_results.VL53L1_PRM_00005[i].rate_per_spad_kcps_sum = 0; - pdev->xtalk_results.VL53L1_PRM_00005[i].rate_per_spad_kcps_avg = 0; - pdev->xtalk_results.VL53L1_PRM_00005[i].sigma_mm_sum = 0; - pdev->xtalk_results.VL53L1_PRM_00005[i].sigma_mm_avg = 0; - } - - - - - if (status == VL53L1_ERROR_NONE) { - - status = VL53L1_get_and_avg_xtalk_samples( - Dev, - num_of_samples, - measurement_mode, - pdev->xtalk_cfg.algo__crosstalk_detect_max_valid_range_mm, - pdev->xtalk_cfg.algo__crosstalk_detect_min_valid_range_mm, - pdev->xtalk_cfg.algo__crosstalk_detect_max_valid_rate_kcps, - 0x0, - - 0x4, - - &(pdev->xtalk_results), - &(pdev->xtalk_results.central_histogram_sum), - &(pdev->xtalk_results.central_histogram_avg)); - } - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - if ((pdev->xtalk_results.VL53L1_PRM_00005[4].no_of_samples == 0) || - (pdev->xtalk_results.VL53L1_PRM_00005[4].sigma_mm_avg > - pdev->xtalk_cfg.algo__crosstalk_detect_max_sigma_mm)) { - results_invalid = 0x01; - } - } - -#ifdef VL53L1_LOG_ENABLE - if (status == VL53L1_ERROR_NONE) - VL53L1_print_xtalk_range_results( - &(pdev->xtalk_results), - "pdev->xtalk_results", - VL53L1_TRACE_MODULE_CORE); -#endif - - - if (status == VL53L1_ERROR_NONE) { - - if (results_invalid == 0) { - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ipp_xtalk_calibration_process_data( - Dev, - &(pdev->xtalk_results), - &(pdev->xtalk_shapes), - &(pdev->xtalk_cal)); - - if (status == VL53L1_ERROR_NONE) { - - pdev->xtalk_cfg.algo__crosstalk_compensation_x_plane_gradient_kcps = - pdev->xtalk_cal.algo__crosstalk_compensation_x_plane_gradient_kcps; - pdev->xtalk_cfg.algo__crosstalk_compensation_y_plane_gradient_kcps = - pdev->xtalk_cal.algo__crosstalk_compensation_y_plane_gradient_kcps; - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps = - pdev->xtalk_cal.algo__crosstalk_compensation_plane_offset_kcps; - - - } - - - } - } - - - - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_enable_xtalk_compensation( - Dev); - } - - - - - if (status == VL53L1_ERROR_NONE) { - - for (i = 0 ; i < pdev->xtalk_results.max_results ; i++) { - - - if (pdev->xtalk_results.VL53L1_PRM_00005[i].no_of_samples != - num_of_samples) { - pdev->xtalk_results.num_of_samples_status = - pdev->xtalk_results.num_of_samples_status | - (1 << i); - } - - - if (pdev->xtalk_results.VL53L1_PRM_00005[i].no_of_samples == - 0x00) { - pdev->xtalk_results.zero_samples_status = - pdev->xtalk_results.zero_samples_status | - (1 << i); - } - - - - - - - - - - if (pdev->xtalk_results.VL53L1_PRM_00005[i].sigma_mm_avg > - pdev->xtalk_cfg.algo__crosstalk_detect_max_sigma_mm) { - pdev->xtalk_results.max_sigma_status = - pdev->xtalk_results.max_sigma_status | - (1 << i); - } - } - } - - - - - - - - - - - - - - if (results_invalid > 0) { - - - if (pdev->xtalk_results.VL53L1_PRM_00005[4].no_of_samples == 0) { - status = VL53L1_ERROR_XTALK_EXTRACTION_NO_SAMPLE_FAIL; - } else { - if (pdev->xtalk_results.VL53L1_PRM_00005[4].sigma_mm_avg > - pdev->xtalk_cfg.algo__crosstalk_detect_max_sigma_mm) { - status = VL53L1_ERROR_XTALK_EXTRACTION_SIGMA_LIMIT_FAIL; - } - } - } else { - - - if (pdev->xtalk_results.zero_samples_status != 0x00) { - status = VL53L1_WARNING_XTALK_NO_SAMPLES_FOR_GRADIENT; - } else { - if (pdev->xtalk_results.max_sigma_status != 0x00) { - status = VL53L1_WARNING_XTALK_SIGMA_LIMIT_FOR_GRADIENT; - } else { - if (pdev->xtalk_results.num_of_samples_status != - 0x00) { - status = VL53L1_WARNING_XTALK_MISSING_SAMPLES; - } - } - } - } - - - - - - - pdev->xtalk_results.cal_status = status; - *pcal_status = pdev->xtalk_results.cal_status; - - - - - IGNORE_STATUS( - IGNORE_XTALK_EXTRACTION_NO_SAMPLE_FAIL, - VL53L1_ERROR_XTALK_EXTRACTION_NO_SAMPLE_FAIL, - status); - - IGNORE_STATUS( - IGNORE_XTALK_EXTRACTION_SIGMA_LIMIT_FAIL, - VL53L1_ERROR_XTALK_EXTRACTION_SIGMA_LIMIT_FAIL, - status); - - IGNORE_STATUS( - IGNORE_XTALK_EXTRACTION_NO_SAMPLE_FOR_GRADIENT_WARN, - VL53L1_WARNING_XTALK_NO_SAMPLES_FOR_GRADIENT, - status); - - IGNORE_STATUS( - IGNORE_XTALK_EXTRACTION_SIGMA_LIMIT_FOR_GRADIENT_WARN, - VL53L1_WARNING_XTALK_SIGMA_LIMIT_FOR_GRADIENT, - status); - - IGNORE_STATUS( - IGNORE_XTALK_EXTRACTION_MISSING_SAMPLES_WARN, - VL53L1_WARNING_XTALK_MISSING_SAMPLES, - status); - -#ifdef VL53L1_LOG_ENABLE - - - - - VL53L1_print_customer_nvm_managed( - &(pdev->customer), - "run_xtalk_extraction():pdev->lldata.customer.", - VL53L1_TRACE_MODULE_XTALK_DATA); - - VL53L1_print_xtalk_config( - &(pdev->xtalk_cfg), - "run_xtalk_extraction():pdev->lldata.xtalk_cfg.", - VL53L1_TRACE_MODULE_XTALK_DATA); - - VL53L1_print_histogram_bin_data( - &(pdev->hist_data), - "run_xtalk_extraction():pdev->lldata.hist_data.", - VL53L1_TRACE_MODULE_XTALK_DATA); - - VL53L1_print_xtalk_histogram_data( - &(pdev->xtalk_shapes), - "pdev->lldata.xtalk_shapes.", - VL53L1_TRACE_MODULE_XTALK_DATA); - - VL53L1_print_xtalk_range_results( - &(pdev->xtalk_results), - "run_xtalk_extraction():pdev->lldata.xtalk_results.", - VL53L1_TRACE_MODULE_XTALK_DATA); - -#endif - - LOG_FUNCTION_END(status); - - return status; - -} - - - -VL53L1_Error VL53L1_run_xtalk_extraction_dual_reflectance( - VL53L1_DEV Dev, - uint16_t dss_config__target_total_rate_mcps, - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint8_t num_of_samples, - uint8_t calc_parms, - uint8_t higher_reflectance, - uint16_t expected_target_distance_mm, - uint16_t xtalk_filter_thresh_mm, - VL53L1_Error *pcal_status) -{ - - - - - - - - - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - - - - - - VL53L1_histogram_bin_data_t *pxtalk_avg_samples = &(pdev->xtalk_results.xtalk_avg[0]); - - VL53L1_range_results_t results_int; - VL53L1_range_results_t *presults_int = &(results_int); - - VL53L1_range_data_t *prange_data = &(presults_int->VL53L1_PRM_00005[0]); - - uint8_t results_invalid = 0; - - uint8_t i = 0; - uint8_t measurement_mode = VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - - LOG_FUNCTION_START(""); - - - - - - - - if (calc_parms == 0x00) { - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.histogram_avg_1[0])); - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.histogram_avg_1[1])); - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.histogram_avg_1[2])); - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.histogram_avg_1[3])); - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.histogram_avg_1[4])); - } - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.histogram_avg_2[0])); - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.histogram_avg_2[1])); - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.histogram_avg_2[2])); - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.histogram_avg_2[3])); - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->xtalk_results.histogram_avg_2[4])); - - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) - - status = - VL53L1_set_preset_mode( - Dev, - VL53L1_DEVICEPRESETMODE_HISTOGRAM_XTALK_PLANAR, - dss_config__target_total_rate_mcps, - phasecal_config_timeout_us, - mm_config_timeout_us, - range_config_timeout_us, - 100); - - - - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_disable_xtalk_compensation( - Dev); - } - - - - - - - pdev->xtalk_results.max_results = VL53L1_MAX_XTALK_RANGE_RESULTS; - pdev->xtalk_results.active_results = pdev->zone_cfg.active_zones+1; - - for (i = 0 ; i < pdev->xtalk_results.max_results ; i++) { - pdev->xtalk_results.VL53L1_PRM_00005[i].no_of_samples = 0; - pdev->xtalk_results.VL53L1_PRM_00005[i].signal_total_events_avg = 0; - pdev->xtalk_results.VL53L1_PRM_00005[i].signal_total_events_sum = 0; - pdev->xtalk_results.VL53L1_PRM_00005[i].rate_per_spad_kcps_sum = 0; - pdev->xtalk_results.VL53L1_PRM_00005[i].rate_per_spad_kcps_avg = 0; - } - - - - - if ((status == VL53L1_ERROR_NONE) && - (calc_parms == 0x00)) { - - status = VL53L1_get_and_avg_all_xtalk_samples( - Dev, - num_of_samples, - measurement_mode, - xtalk_filter_thresh_mm, - &(pdev->xtalk_results), - &(pdev->xtalk_results.histogram_avg_1[0]), - &(pdev->xtalk_results.histogram_avg_1[1]), - &(pdev->xtalk_results.histogram_avg_1[2]), - &(pdev->xtalk_results.histogram_avg_1[3]), - &(pdev->xtalk_results.histogram_avg_1[4]) - ); - - } else { - - status = VL53L1_get_and_avg_all_xtalk_samples( - Dev, - num_of_samples, - measurement_mode, - xtalk_filter_thresh_mm, - &(pdev->xtalk_results), - &(pdev->xtalk_results.histogram_avg_2[0]), - &(pdev->xtalk_results.histogram_avg_2[1]), - &(pdev->xtalk_results.histogram_avg_2[2]), - &(pdev->xtalk_results.histogram_avg_2[3]), - &(pdev->xtalk_results.histogram_avg_2[4]) - ); - } - - - - - if ((status == VL53L1_ERROR_NONE) && - (calc_parms == 0x01)) { - status = VL53L1_ipp_generate_dual_reflectance_xtalk_samples( - Dev, - &(pdev->xtalk_results), - expected_target_distance_mm, - higher_reflectance, - &(pdev->xtalk_results.xtalk_avg[0])); - } - - - - - for (i = 0 ; i < 5 ; i++) { - - if ((status == VL53L1_ERROR_NONE) && - (calc_parms == 0x01)) { - - status = VL53L1_ipp_hist_process_data( - Dev, - &(pdev->fmt_dmax_cal), - &(pdev->dmax_cfg), - &(pdev->histpostprocess), - &(pxtalk_avg_samples[i]), - &(pdev->xtalk_shapes), - presults_int); - } - - if (status == VL53L1_ERROR_NONE) { - if ((presults_int->active_results > 0) && - (prange_data->median_range_mm < - (int16_t)xtalk_filter_thresh_mm)) { - - pdev->xtalk_results.VL53L1_PRM_00005[i].no_of_samples++; - - pdev->xtalk_results.VL53L1_PRM_00005[i].rate_per_spad_kcps_avg = - prange_data->VL53L1_PRM_00008; - - pdev->xtalk_results.VL53L1_PRM_00005[i].signal_total_events_avg = - prange_data->VL53L1_PRM_00009; - } - } - } - - - - - memcpy(&(pdev->xtalk_results.central_histogram_avg), - &(pxtalk_avg_samples[4]), - sizeof(VL53L1_histogram_bin_data_t)); - - - - - - - - - - - if ((status == VL53L1_ERROR_NONE) && - (calc_parms == 0x01)) { - if (pdev->xtalk_results.VL53L1_PRM_00005[4].no_of_samples == 0) { - results_invalid = 0x01; - } - } - - -#ifdef VL53L1_LOG_ENABLE - if (status == VL53L1_ERROR_NONE) - VL53L1_print_xtalk_range_results( - &(pdev->xtalk_results), - "pdev->xtalk_results", - VL53L1_TRACE_MODULE_CORE); -#endif - - - if ((status == VL53L1_ERROR_NONE) && - (calc_parms == 0x01)) { - - if (results_invalid == 0) { - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ipp_xtalk_calibration_process_data( - Dev, - &(pdev->xtalk_results), - &(pdev->xtalk_shapes), - &(pdev->xtalk_cal)); - - if (status == VL53L1_ERROR_NONE) { - - pdev->xtalk_cfg.algo__crosstalk_compensation_x_plane_gradient_kcps = - pdev->xtalk_cal.algo__crosstalk_compensation_x_plane_gradient_kcps; - pdev->xtalk_cfg.algo__crosstalk_compensation_y_plane_gradient_kcps = - pdev->xtalk_cal.algo__crosstalk_compensation_y_plane_gradient_kcps; - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps = - pdev->xtalk_cal.algo__crosstalk_compensation_plane_offset_kcps; - - - } - - - } - } - - - - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_enable_xtalk_compensation( - Dev); - } - - - - - if (results_invalid > 0) - status = VL53L1_ERROR_XTALK_EXTRACTION_NO_SAMPLE_FAIL; - - - - - - - pdev->xtalk_results.cal_status = status; - *pcal_status = pdev->xtalk_results.cal_status; - - - - - IGNORE_STATUS( - IGNORE_XTALK_EXTRACTION_NO_SAMPLE_FAIL, - VL53L1_ERROR_XTALK_EXTRACTION_NO_SAMPLE_FAIL, - status); - -#ifdef VL53L1_LOG_ENABLE - - - - - VL53L1_print_customer_nvm_managed( - &(pdev->customer), - "pdev->lldata.customer.", - VL53L1_TRACE_MODULE_XTALK_DATA); - - VL53L1_print_xtalk_config( - &(pdev->xtalk_cfg), - "pdev->lldata.xtalk_cfg.", - VL53L1_TRACE_MODULE_XTALK_DATA); - - VL53L1_print_histogram_bin_data( - &(pdev->hist_data), - "pdev->lldata.hist_data.", - VL53L1_TRACE_MODULE_XTALK_DATA); - - VL53L1_print_xtalk_histogram_data( - &(pdev->xtalk_shapes), - "pdev->lldata.xtalk_shapes.", - VL53L1_TRACE_MODULE_XTALK_DATA); - - VL53L1_print_xtalk_range_results( - &(pdev->xtalk_results), - "pdev->lldata.xtalk_results.", - VL53L1_TRACE_MODULE_XTALK_DATA); - -#endif - - LOG_FUNCTION_END(status); - - return status; - -} - - - -VL53L1_Error VL53L1_get_and_avg_xtalk_samples( - VL53L1_DEV Dev, - uint8_t num_of_samples, - uint8_t measurement_mode, - int16_t xtalk_filter_thresh_max_mm, - int16_t xtalk_filter_thresh_min_mm, - uint16_t xtalk_max_valid_rate_kcps, - uint8_t xtalk_result_id, - uint8_t xtalk_histo_id, - VL53L1_xtalk_range_results_t *pxtalk_results, - VL53L1_histogram_bin_data_t *psum_histo, - VL53L1_histogram_bin_data_t *pavg_histo) -{ - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - -#ifdef VL53L1_LOG_ENABLE - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); -#endif - - VL53L1_range_results_t range_results; - VL53L1_range_results_t *prange_results = &range_results; - - VL53L1_range_data_t *prange_data; - VL53L1_xtalk_range_data_t *pxtalk_range_data; - - uint8_t i = 0; - uint8_t j = 0; - uint8_t zone_id = 0; - uint8_t final_zone = pdev->zone_cfg.active_zones+1; - - - - - if (status == VL53L1_ERROR_NONE) - - status = - VL53L1_init_and_start_range( - Dev, - measurement_mode, - VL53L1_DEVICECONFIGLEVEL_CUSTOMER_ONWARDS); - - - for (i = 0 ; i <= (final_zone*num_of_samples) ; i++) { - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_wait_for_range_completion(Dev); - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_get_device_results( - Dev, - VL53L1_DEVICERESULTSLEVEL_FULL, - prange_results); - - - - - - - if (status == VL53L1_ERROR_NONE && - pdev->ll_state.rd_device_state != - VL53L1_DEVICESTATE_RANGING_WAIT_GPH_SYNC) { - - zone_id = pdev->ll_state.rd_zone_id + xtalk_result_id; - prange_data = &(prange_results->VL53L1_PRM_00005[0]); - - - - if (prange_results->active_results > 1) { - for (j = 1 ; j < prange_results->active_results ; j++) { - - if (prange_results->VL53L1_PRM_00005[j].median_range_mm < - prange_data->median_range_mm){ - prange_data = &(prange_results->VL53L1_PRM_00005[j]); - } - } - } - - pxtalk_range_data = &(pxtalk_results->VL53L1_PRM_00005[zone_id]); - - - - - - if ((prange_results->active_results > 0) && - (prange_data->median_range_mm < - xtalk_filter_thresh_max_mm) && - (prange_data->median_range_mm > - xtalk_filter_thresh_min_mm) && - (prange_data->VL53L1_PRM_00008 < - (uint32_t)(xtalk_max_valid_rate_kcps * 16))) { - - pxtalk_range_data->no_of_samples++; - - pxtalk_range_data->rate_per_spad_kcps_sum += - prange_data->VL53L1_PRM_00008; - - pxtalk_range_data->signal_total_events_sum += - prange_data->VL53L1_PRM_00009; - - pxtalk_range_data->sigma_mm_sum += - prange_data->VL53L1_PRM_00004; - - - - - - - - - if (zone_id >= 4) { - status = VL53L1_sum_histogram_data( - &(pdev->hist_data), - psum_histo); - - - - - - if (prange_data->VL53L1_PRM_00010 < - pxtalk_results->central_histogram__window_start) { - pxtalk_results->central_histogram__window_start = - prange_data->VL53L1_PRM_00010; - } - - - - if (prange_data->VL53L1_PRM_00011 > - pxtalk_results->central_histogram__window_end) { - pxtalk_results->central_histogram__window_end = - prange_data->VL53L1_PRM_00011; - } - - } - } - } - - - - - - - -#ifdef VL53L1_LOG_ENABLE - if ((status == VL53L1_ERROR_NONE)) { - VL53L1_print_range_results( - &(pres->range_results), - "pres->range_results.", - VL53L1_TRACE_MODULE_CORE); - } -#endif - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_wait_for_firmware_ready(Dev); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_clear_interrupt_and_enable_next_range( - Dev, - measurement_mode); - - - } - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_stop_range(Dev); - - - - - - for (i = 0 ; i < (pdev->zone_cfg.active_zones+1) ; i++) { - - pxtalk_range_data = &(pxtalk_results->VL53L1_PRM_00005[i+xtalk_result_id]); - - if (pxtalk_range_data->no_of_samples > 0) { - pxtalk_range_data->rate_per_spad_kcps_avg = - pxtalk_range_data->rate_per_spad_kcps_sum / - (uint32_t)pxtalk_range_data->no_of_samples; - - pxtalk_range_data->signal_total_events_avg = - pxtalk_range_data->signal_total_events_sum / - (int32_t)pxtalk_range_data->no_of_samples; - - pxtalk_range_data->sigma_mm_avg = - pxtalk_range_data->sigma_mm_sum / - (uint32_t)pxtalk_range_data->no_of_samples; - - } else { - pxtalk_range_data->rate_per_spad_kcps_avg = - pxtalk_range_data->rate_per_spad_kcps_sum; - pxtalk_range_data->signal_total_events_avg = - pxtalk_range_data->signal_total_events_sum; - pxtalk_range_data->sigma_mm_avg = - pxtalk_range_data->sigma_mm_sum; - } - } - - - - - memcpy(pavg_histo, &(pdev->hist_data), sizeof(VL53L1_histogram_bin_data_t)); - - - - - if (status == VL53L1_ERROR_NONE) { - - pxtalk_range_data = &(pxtalk_results->VL53L1_PRM_00005[xtalk_histo_id]); - - status = VL53L1_avg_histogram_data( - pxtalk_range_data->no_of_samples, - psum_histo, - pavg_histo); - } - - - LOG_FUNCTION_END(status); - - return status; - -} - - - -VL53L1_Error VL53L1_get_and_avg_all_xtalk_samples( - VL53L1_DEV Dev, - uint8_t num_of_samples, - uint8_t measurement_mode, - int16_t xtalk_filter_thresh_mm, - VL53L1_xtalk_range_results_t *pxtalk_results, - VL53L1_histogram_bin_data_t *pavg_histo_z0, - VL53L1_histogram_bin_data_t *pavg_histo_z1, - VL53L1_histogram_bin_data_t *pavg_histo_z2, - VL53L1_histogram_bin_data_t *pavg_histo_z3, - VL53L1_histogram_bin_data_t *pavg_histo_z4) -{ - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - - - - - - VL53L1_range_results_t range_results; - VL53L1_range_results_t *prange_results = &range_results; - - VL53L1_range_data_t *prange_data; - - - VL53L1_histogram_bin_data_t z_sum[4]; - - VL53L1_histogram_bin_data_t *pz0_sum = &z_sum[0]; - VL53L1_histogram_bin_data_t *pz1_sum = &z_sum[1]; - VL53L1_histogram_bin_data_t *pz2_sum = &z_sum[2]; - VL53L1_histogram_bin_data_t *pz3_sum = &z_sum[3]; - VL53L1_histogram_bin_data_t *pz4_sum = &z_sum[4]; - - VL53L1_histogram_bin_data_t *pzcurrent_sum = &z_sum[0]; - - VL53L1_histogram_bin_data_t *pzcurrent_avg = pavg_histo_z0; - - uint8_t i = 0; - uint8_t zone_id = 0; - uint8_t final_zone = pdev->zone_cfg.active_zones+1; - - SUPPRESS_UNUSED_WARNING(pxtalk_results); - - - - - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - pz0_sum); - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - pz1_sum); - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - pz2_sum); - VL53L1_init_histogram_bin_data_struct( - 0, - (uint16_t)VL53L1_HISTOGRAM_BUFFER_SIZE, - pz3_sum); - - - - - - if (status == VL53L1_ERROR_NONE) - - status = - VL53L1_init_and_start_range( - Dev, - measurement_mode, - VL53L1_DEVICECONFIGLEVEL_CUSTOMER_ONWARDS); - - - for (i = 0 ; i <= (final_zone*num_of_samples) ; i++) { - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_wait_for_range_completion(Dev); - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_get_device_results( - Dev, - VL53L1_DEVICERESULTSLEVEL_FULL, - prange_results); - - - - - - - if (status == VL53L1_ERROR_NONE && - pdev->ll_state.rd_device_state != - VL53L1_DEVICESTATE_RANGING_WAIT_GPH_SYNC) { - - zone_id = pdev->ll_state.rd_zone_id; - prange_data = &(prange_results->VL53L1_PRM_00005[0]); - - - - - - if ((prange_results->active_results > 0) && - (prange_data->median_range_mm < - (int16_t)xtalk_filter_thresh_mm)) { - - - - - switch (zone_id) { - case 0: - pzcurrent_sum = pz0_sum; - break; - case 1: - pzcurrent_sum = pz1_sum; - break; - case 2: - pzcurrent_sum = pz2_sum; - break; - case 3: - pzcurrent_sum = pz3_sum; - break; - case 4: - pzcurrent_sum = pz4_sum; - break; - default: - pzcurrent_sum = pz0_sum; - break; - } - - - - - - - status = VL53L1_sum_histogram_data( - &(pdev->hist_data), - pzcurrent_sum); - - - } - } - - - - - - - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_wait_for_firmware_ready(Dev); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_clear_interrupt_and_enable_next_range( - Dev, - measurement_mode); - - - } - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_stop_range(Dev); - - - - - - memcpy(pavg_histo_z0, &(pdev->hist_data), sizeof(VL53L1_histogram_bin_data_t)); - memcpy(pavg_histo_z1, &(pdev->hist_data), sizeof(VL53L1_histogram_bin_data_t)); - memcpy(pavg_histo_z2, &(pdev->hist_data), sizeof(VL53L1_histogram_bin_data_t)); - memcpy(pavg_histo_z3, &(pdev->hist_data), sizeof(VL53L1_histogram_bin_data_t)); - memcpy(pavg_histo_z4, &(pdev->hist_data), sizeof(VL53L1_histogram_bin_data_t)); - - - - - - pzcurrent_sum = pz0_sum; - - for (i = 0 ; i < (pdev->zone_cfg.active_zones+1) ; i++) { - - switch (i) { - case 0: - pzcurrent_avg = pavg_histo_z0; - break; - case 1: - pzcurrent_avg = pavg_histo_z1; - break; - case 2: - pzcurrent_avg = pavg_histo_z2; - break; - case 3: - pzcurrent_avg = pavg_histo_z3; - break; - case 4: - pzcurrent_avg = pavg_histo_z4; - break; - default: - pzcurrent_avg = pavg_histo_z0; - break; - } - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_avg_histogram_data( - num_of_samples, - pzcurrent_sum, - pzcurrent_avg); - } - - pzcurrent_sum++; - - } - - - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_run_offset_calibration( - VL53L1_DEV Dev, - uint16_t dss_config__target_total_rate_mcps, - uint32_t phasecal_config_timeout_us, - uint32_t range_config_timeout_us, - uint8_t pre_num_of_samples, - uint8_t mm1_num_of_samples, - uint8_t mm2_num_of_samples, - int16_t cal_distance_mm, - uint16_t cal_reflectance_pc, - VL53L1_Error *pcal_status) -{ - - - - - - - - - - - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - VL53L1_DevicePresetModes device_preset_modes[VL53L1_MAX_OFFSET_RANGE_RESULTS]; - - VL53L1_range_results_t range_results; - VL53L1_range_results_t *prange_results = &range_results; - VL53L1_range_data_t *prange_data = NULL; - VL53L1_offset_range_data_t *poffset = NULL; - - uint8_t i = 0; - uint8_t m = 0; - uint8_t measurement_mode = - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - uint16_t manual_effective_spads = - pdev->gen_cfg.dss_config__manual_effective_spads_select; - - uint8_t num_of_samples[VL53L1_MAX_OFFSET_RANGE_RESULTS]; - - LOG_FUNCTION_START(""); - - - - - switch (pdev->offset_calibration_mode) { - - case VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__HISTOGRAM: - case VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__HISTOGRAM_PRE_RANGE_ONLY: - device_preset_modes[0] = - VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING; - device_preset_modes[1] = - VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_MM1_CAL; - device_preset_modes[2] = - VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_MM2_CAL; - break; - - default: - device_preset_modes[0] = - VL53L1_DEVICEPRESETMODE_STANDARD_RANGING; - device_preset_modes[1] = - VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_MM1_CAL; - device_preset_modes[2] = - VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_MM2_CAL; - break; - } - - - - num_of_samples[0] = pre_num_of_samples; - num_of_samples[1] = mm1_num_of_samples; - num_of_samples[2] = mm2_num_of_samples; - - - - - switch (pdev->offset_calibration_mode) { - - case VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__STANDARD_PRE_RANGE_ONLY: - case VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__HISTOGRAM_PRE_RANGE_ONLY: - - - pdev->offset_results.active_results = 1; - - break; - - default: - - pdev->customer.mm_config__inner_offset_mm = 0; - pdev->customer.mm_config__outer_offset_mm = 0; - pdev->offset_results.active_results = - VL53L1_MAX_OFFSET_RANGE_RESULTS; - - break; - } - - pdev->customer.algo__part_to_part_range_offset_mm = 0; - - - - - pdev->offset_results.max_results = VL53L1_MAX_OFFSET_RANGE_RESULTS; - pdev->offset_results.cal_distance_mm = cal_distance_mm; - pdev->offset_results.cal_reflectance_pc = cal_reflectance_pc; - - for (m = 0 ; m < VL53L1_MAX_OFFSET_RANGE_RESULTS; m++) { - - poffset = &(pdev->offset_results.VL53L1_PRM_00005[m]); - poffset->preset_mode = 0; - poffset->no_of_samples = 0; - poffset->effective_spads = 0; - poffset->peak_rate_mcps = 0; - poffset->VL53L1_PRM_00004 = 0; - poffset->median_range_mm = 0; - } - - for (m = 0 ; m < pdev->offset_results.active_results ; m++) { - - poffset = &(pdev->offset_results.VL53L1_PRM_00005[m]); - - poffset->preset_mode = device_preset_modes[m]; - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_set_preset_mode( - Dev, - device_preset_modes[m], - dss_config__target_total_rate_mcps, - phasecal_config_timeout_us, - range_config_timeout_us, - range_config_timeout_us, - 100); - - pdev->gen_cfg.dss_config__manual_effective_spads_select = - manual_effective_spads; - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_init_and_start_range( - Dev, - measurement_mode, - VL53L1_DEVICECONFIGLEVEL_CUSTOMER_ONWARDS); - - for (i = 0 ; i <= (num_of_samples[m]+2) ; i++) { - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_wait_for_range_completion(Dev); - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_get_device_results( - Dev, - VL53L1_DEVICERESULTSLEVEL_FULL, - prange_results); - - - - - - - - - - prange_data = &(prange_results->VL53L1_PRM_00005[0]); - - if (prange_results->active_results > 0 && - prange_results->stream_count > 1) { - - if (prange_data->range_status == - VL53L1_DEVICEERROR_RANGECOMPLETE) { - - poffset->no_of_samples++; - poffset->effective_spads += - (uint32_t)prange_data->VL53L1_PRM_00003; - poffset->peak_rate_mcps += - (uint32_t)prange_data->peak_signal_count_rate_mcps; - poffset->VL53L1_PRM_00004 += - (uint32_t)prange_data->VL53L1_PRM_00004; - poffset->median_range_mm += - (int32_t)prange_data->median_range_mm; - - poffset->dss_config__roi_mode_control = - pdev->gen_cfg.dss_config__roi_mode_control; - poffset->dss_config__manual_effective_spads_select = - pdev->gen_cfg.dss_config__manual_effective_spads_select; - } - } - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_wait_for_firmware_ready(Dev); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_clear_interrupt_and_enable_next_range( - Dev, - measurement_mode); - } - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_stop_range(Dev); - - - - if (poffset->no_of_samples > 0) { - - poffset->effective_spads += (poffset->no_of_samples/2); - poffset->effective_spads /= poffset->no_of_samples; - - poffset->peak_rate_mcps += (poffset->no_of_samples/2); - poffset->peak_rate_mcps /= poffset->no_of_samples; - - poffset->VL53L1_PRM_00004 += (poffset->no_of_samples/2); - poffset->VL53L1_PRM_00004 /= poffset->no_of_samples; - - poffset->median_range_mm += (poffset->no_of_samples/2); - poffset->median_range_mm /= poffset->no_of_samples; - - poffset->range_mm_offset = (int32_t)cal_distance_mm; - poffset->range_mm_offset -= poffset->median_range_mm; - - - - if (poffset->preset_mode == - VL53L1_DEVICEPRESETMODE_STANDARD_RANGING) - manual_effective_spads = - (uint16_t)poffset->effective_spads; - } - } - - - - - switch (pdev->offset_calibration_mode) { - - case VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__STANDARD_PRE_RANGE_ONLY: - case VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__HISTOGRAM_PRE_RANGE_ONLY: - - - - pdev->customer.mm_config__inner_offset_mm += - (int16_t)pdev->offset_results.VL53L1_PRM_00005[0].range_mm_offset; - pdev->customer.mm_config__outer_offset_mm += - (int16_t)pdev->offset_results.VL53L1_PRM_00005[0].range_mm_offset; - break; - - default: - - - pdev->customer.mm_config__inner_offset_mm = - (int16_t)pdev->offset_results.VL53L1_PRM_00005[1].range_mm_offset; - pdev->customer.mm_config__outer_offset_mm = - (int16_t)pdev->offset_results.VL53L1_PRM_00005[2].range_mm_offset; - pdev->customer.algo__part_to_part_range_offset_mm = 0; - - - - - - pdev->add_off_cal_data.result__mm_inner_actual_effective_spads = - (uint16_t)pdev->offset_results.VL53L1_PRM_00005[1].effective_spads; - pdev->add_off_cal_data.result__mm_outer_actual_effective_spads = - (uint16_t)pdev->offset_results.VL53L1_PRM_00005[2].effective_spads; - - pdev->add_off_cal_data.result__mm_inner_peak_signal_count_rtn_mcps = - (uint16_t)pdev->offset_results.VL53L1_PRM_00005[1].peak_rate_mcps; - pdev->add_off_cal_data.result__mm_outer_peak_signal_count_rtn_mcps = - (uint16_t)pdev->offset_results.VL53L1_PRM_00005[2].peak_rate_mcps; - - break; - } - - - - - - - - - - pdev->cust_dmax_cal.ref__actual_effective_spads = - (uint16_t)pdev->offset_results.VL53L1_PRM_00005[0].effective_spads; - pdev->cust_dmax_cal.ref__peak_signal_count_rate_mcps = - (uint16_t)pdev->offset_results.VL53L1_PRM_00005[0].peak_rate_mcps; - - - - pdev->cust_dmax_cal.ref__distance_mm = cal_distance_mm * 16; - - pdev->cust_dmax_cal.ref_reflectance_pc = cal_reflectance_pc; - pdev->cust_dmax_cal.coverglass_transmission = 0x0100; - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_set_customer_nvm_managed( - Dev, - &(pdev->customer)); - - - - - - - for (m = 0 ; m < pdev->offset_results.active_results ; m++) { - - poffset = &(pdev->offset_results.VL53L1_PRM_00005[m]); - - if (status == VL53L1_ERROR_NONE) { - - pdev->offset_results.cal_report = m; - - if (poffset->no_of_samples < num_of_samples[m]) - status = VL53L1_WARNING_OFFSET_CAL_MISSING_SAMPLES; - - - - - - - if (m == 0 && poffset->VL53L1_PRM_00004 > - VL53L1_OFFSET_CAL_MAX_SIGMA_MM) - status = VL53L1_WARNING_OFFSET_CAL_SIGMA_TOO_HIGH; - - if (poffset->peak_rate_mcps > - VL53L1_OFFSET_CAL_MAX_PRE_PEAK_RATE_MCPS) - status = VL53L1_WARNING_OFFSET_CAL_RATE_TOO_HIGH; - - if (poffset->dss_config__manual_effective_spads_select < - VL53L1_OFFSET_CAL_MIN_EFFECTIVE_SPADS) - status = VL53L1_WARNING_OFFSET_CAL_SPAD_COUNT_TOO_LOW; - - if (poffset->dss_config__manual_effective_spads_select == 0) - status = VL53L1_ERROR_OFFSET_CAL_NO_SPADS_ENABLED_FAIL; - - if (poffset->no_of_samples == 0) - status = VL53L1_ERROR_OFFSET_CAL_NO_SAMPLE_FAIL; - } - } - - - - - - - pdev->offset_results.cal_status = status; - *pcal_status = pdev->offset_results.cal_status; - - - - - IGNORE_STATUS( - IGNORE_OFFSET_CAL_MISSING_SAMPLES, - VL53L1_WARNING_OFFSET_CAL_MISSING_SAMPLES, - status); - - IGNORE_STATUS( - IGNORE_OFFSET_CAL_SIGMA_TOO_HIGH, - VL53L1_WARNING_OFFSET_CAL_SIGMA_TOO_HIGH, - status); - - IGNORE_STATUS( - IGNORE_OFFSET_CAL_RATE_TOO_HIGH, - VL53L1_WARNING_OFFSET_CAL_RATE_TOO_HIGH, - status); - - IGNORE_STATUS( - IGNORE_OFFSET_CAL_SPAD_COUNT_TOO_LOW, - VL53L1_WARNING_OFFSET_CAL_SPAD_COUNT_TOO_LOW, - status); - -#ifdef VL53L1_LOG_ENABLE - - - - - VL53L1_print_customer_nvm_managed( - &(pdev->customer), - "run_offset_calibration():pdev->lldata.customer.", - VL53L1_TRACE_MODULE_OFFSET_DATA); - - VL53L1_print_dmax_calibration_data( - &(pdev->fmt_dmax_cal), - "run_offset_calibration():pdev->lldata.fmt_dmax_cal.", - VL53L1_TRACE_MODULE_OFFSET_DATA); - - VL53L1_print_dmax_calibration_data( - &(pdev->cust_dmax_cal), - "run_offset_calibration():pdev->lldata.cust_dmax_cal.", - VL53L1_TRACE_MODULE_OFFSET_DATA); - - VL53L1_print_additional_offset_cal_data( - &(pdev->add_off_cal_data), - "run_offset_calibration():pdev->lldata.add_off_cal_data.", - VL53L1_TRACE_MODULE_OFFSET_DATA); - - VL53L1_print_offset_range_results( - &(pdev->offset_results), - "run_offset_calibration():pdev->lldata.offset_results.", - VL53L1_TRACE_MODULE_OFFSET_DATA); -#endif - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_run_zone_calibration( - VL53L1_DEV Dev, - VL53L1_DevicePresetModes device_preset_mode, - VL53L1_DeviceZonePreset zone_preset, - VL53L1_zone_config_t *pzone_cfg, - uint16_t dss_config__target_total_rate_mcps, - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint16_t num_of_samples, - int16_t cal_distance_mm, - uint16_t cal_reflectance_pc, - VL53L1_Error *pcal_status) -{ - - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - VL53L1_range_results_t range_results; - VL53L1_range_results_t *prange_results = &range_results; - VL53L1_range_data_t *prange_data = NULL; - VL53L1_zone_calibration_data_t *pzone_data = NULL; - - uint16_t i = 0; - uint16_t m = 0; - - uint8_t z = 0; - uint8_t measurement_mode = - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - - VL53L1_OffsetCorrectionMode offset_cor_mode = - VL53L1_OFFSETCORRECTIONMODE__NONE; - - LOG_FUNCTION_START(""); - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_set_preset_mode( - Dev, - device_preset_mode, - dss_config__target_total_rate_mcps, - phasecal_config_timeout_us, - mm_config_timeout_us, - range_config_timeout_us, - 100); - - - - - if (zone_preset == VL53L1_DEVICEZONEPRESET_CUSTOM) { - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_set_zone_config( - Dev, - pzone_cfg); - - } else if (zone_preset != VL53L1_DEVICEZONEPRESET_NONE) { - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_set_zone_preset( - Dev, - zone_preset); - } - - - - - - - pres->zone_cal.preset_mode = device_preset_mode; - pres->zone_cal.zone_preset = zone_preset; - - - pres->zone_cal.cal_distance_mm = cal_distance_mm * 16; - pres->zone_cal.cal_reflectance_pc = cal_reflectance_pc; - pres->zone_cal.max_zones = VL53L1_MAX_USER_ZONES; - pres->zone_cal.active_zones = pdev->zone_cfg.active_zones + 1; - - for (i = 0 ; i < VL53L1_MAX_USER_ZONES ; i++) { - pres->zone_cal.VL53L1_PRM_00005[i].no_of_samples = 0; - pres->zone_cal.VL53L1_PRM_00005[i].effective_spads = 0; - pres->zone_cal.VL53L1_PRM_00005[i].peak_rate_mcps = 0; - pres->zone_cal.VL53L1_PRM_00005[i].VL53L1_PRM_00014 = 0; - pres->zone_cal.VL53L1_PRM_00005[i].VL53L1_PRM_00004 = 0; - pres->zone_cal.VL53L1_PRM_00005[i].median_range_mm = 0; - pres->zone_cal.VL53L1_PRM_00005[i].range_mm_offset = 0; - } - - pres->zone_cal.phasecal_result__reference_phase = 0; - pres->zone_cal.zero_distance_phase = 0; - - - - - - - - status = - VL53L1_get_offset_correction_mode( - Dev, - &offset_cor_mode); - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_set_offset_correction_mode( - Dev, - VL53L1_OFFSETCORRECTIONMODE__NONE); - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_init_and_start_range( - Dev, - measurement_mode, - VL53L1_DEVICECONFIGLEVEL_CUSTOMER_ONWARDS); - - - - - m = (num_of_samples + 2) * (uint16_t)pres->zone_cal.active_zones; - - for (i = 0 ; i <= m ; i++) { - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_wait_for_range_completion(Dev); - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_get_device_results( - Dev, - VL53L1_DEVICERESULTSLEVEL_FULL, - prange_results); - - - - - - - - - - prange_data = &(prange_results->VL53L1_PRM_00005[0]); - - if (prange_results->active_results > 0 && - i > (uint16_t)pres->zone_cal.active_zones) { - - if (prange_data->range_status == - VL53L1_DEVICEERROR_RANGECOMPLETE) { - - pres->zone_cal.phasecal_result__reference_phase = - pdev->hist_data.phasecal_result__reference_phase; - pres->zone_cal.zero_distance_phase = - pdev->hist_data.zero_distance_phase; - - pzone_data = &(pres->zone_cal.VL53L1_PRM_00005[prange_results->zone_id]); - pzone_data->no_of_samples++; - pzone_data->effective_spads += - (uint32_t)prange_data->VL53L1_PRM_00003; - pzone_data->peak_rate_mcps += - (uint32_t)prange_data->peak_signal_count_rate_mcps; - pzone_data->VL53L1_PRM_00014 += - (uint32_t)prange_data->VL53L1_PRM_00014; - pzone_data->VL53L1_PRM_00004 += - (uint32_t)prange_data->VL53L1_PRM_00004; - pzone_data->median_range_mm += - (int32_t)prange_data->median_range_mm; - - } - } - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_wait_for_firmware_ready(Dev); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_clear_interrupt_and_enable_next_range( - Dev, - measurement_mode); - } - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_stop_range(Dev); - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_set_offset_correction_mode( - Dev, - offset_cor_mode); - - - - - if (status == VL53L1_ERROR_NONE) { - - for (z = 0 ; z < pres->zone_cal.active_zones ; z++) { - - pzone_data = &(pres->zone_cal.VL53L1_PRM_00005[z]); - - - - if (pzone_data->no_of_samples > 0) { - - pzone_data->effective_spads += (pzone_data->no_of_samples/2); - pzone_data->effective_spads /= pzone_data->no_of_samples; - - pzone_data->peak_rate_mcps += (pzone_data->no_of_samples/2); - pzone_data->peak_rate_mcps /= pzone_data->no_of_samples; - - pzone_data->VL53L1_PRM_00014 += (pzone_data->no_of_samples/2); - pzone_data->VL53L1_PRM_00014 /= pzone_data->no_of_samples; - - pzone_data->VL53L1_PRM_00004 += (pzone_data->no_of_samples/2); - pzone_data->VL53L1_PRM_00004 /= pzone_data->no_of_samples; - - - - pzone_data->median_range_mm *= 4; - pzone_data->median_range_mm += (pzone_data->no_of_samples/2); - pzone_data->median_range_mm /= pzone_data->no_of_samples; - - pzone_data->range_mm_offset = ((int32_t)cal_distance_mm) * 4; - pzone_data->range_mm_offset -= pzone_data->median_range_mm; - - if (pzone_data->no_of_samples < num_of_samples) - status = VL53L1_WARNING_ZONE_CAL_MISSING_SAMPLES; - - if (pzone_data->VL53L1_PRM_00004 > - VL53L1_ZONE_CAL_MAX_SIGMA_MM) - status = VL53L1_WARNING_ZONE_CAL_SIGMA_TOO_HIGH; - - if (pzone_data->peak_rate_mcps > - VL53L1_ZONE_CAL_MAX_PRE_PEAK_RATE_MCPS) - status = VL53L1_WARNING_ZONE_CAL_RATE_TOO_HIGH; - - } else { - status = VL53L1_ERROR_ZONE_CAL_NO_SAMPLE_FAIL; - } - } - } - - - - - - - pres->zone_cal.cal_status = status; - *pcal_status = pres->zone_cal.cal_status; - - - - - IGNORE_STATUS( - IGNORE_ZONE_CAL_MISSING_SAMPLES, - VL53L1_WARNING_ZONE_CAL_MISSING_SAMPLES, - status); - - IGNORE_STATUS( - IGNORE_ZONE_CAL_SIGMA_TOO_HIGH, - VL53L1_WARNING_ZONE_CAL_SIGMA_TOO_HIGH, - status); - - IGNORE_STATUS( - IGNORE_ZONE_CAL_RATE_TOO_HIGH, - VL53L1_WARNING_ZONE_CAL_RATE_TOO_HIGH, - status); - - - - - - - - - - - - - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_run_spad_rate_map( - VL53L1_DEV Dev, - VL53L1_DeviceTestMode device_test_mode, - VL53L1_DeviceSscArray array_select, - uint32_t ssc_config_timeout_us, - VL53L1_spad_rate_data_t *pspad_rate_data) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_powerforce(Dev); - - - - - - - if (status == VL53L1_ERROR_NONE) { - pdev->ssc_cfg.array_select = array_select; - pdev->ssc_cfg.timeout_us = ssc_config_timeout_us; - status = - VL53L1_set_ssc_config( - Dev, - &(pdev->ssc_cfg), - pdev->stat_nvm.osc_measured__fast_osc__frequency); - } - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_run_device_test( - Dev, - device_test_mode); - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_get_spad_rate_data( - Dev, - pspad_rate_data); - - if (device_test_mode == VL53L1_DEVICETESTMODE_LCR_VCSEL_ON) - pspad_rate_data->fractional_bits = 7; - else - pspad_rate_data->fractional_bits = 15; - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_powerforce(Dev); - -#ifdef VL53L1_LOG_ENABLE - - - - if (status == VL53L1_ERROR_NONE) { - VL53L1_print_spad_rate_data( - pspad_rate_data, - "run_spad_rate_map():", - VL53L1_TRACE_MODULE_SPAD_RATE_MAP); - VL53L1_print_spad_rate_map( - pspad_rate_data, - "run_spad_rate_map():", - VL53L1_TRACE_MODULE_SPAD_RATE_MAP); - } -#endif - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_run_device_test( - VL53L1_DEV Dev, - VL53L1_DeviceTestMode device_test_mode) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t comms_buffer[2]; - uint8_t gpio_hv_mux__ctrl = 0; - - LOG_FUNCTION_START(""); - - - - - - - if (status == VL53L1_ERROR_NONE) - - status = - VL53L1_RdByte( - Dev, - VL53L1_GPIO_HV_MUX__CTRL, - &gpio_hv_mux__ctrl); - - if (status == VL53L1_ERROR_NONE) - pdev->stat_cfg.gpio_hv_mux__ctrl = gpio_hv_mux__ctrl; - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_start_test( - Dev, - device_test_mode); - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_wait_for_test_completion(Dev); - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_ReadMulti( - Dev, - VL53L1_RESULT__RANGE_STATUS, - comms_buffer, - 2); - - if (status == VL53L1_ERROR_NONE) { - pdev->sys_results.result__range_status = comms_buffer[0]; - pdev->sys_results.result__report_status = comms_buffer[1]; - } - - - - - pdev->sys_results.result__range_status &= - VL53L1_RANGE_STATUS__RANGE_STATUS_MASK; - - if (status == VL53L1_ERROR_NONE) { - trace_print( - VL53L1_TRACE_LEVEL_INFO, - " Device Test Complete:\n\t%-32s = %3u\n\t%-32s = %3u\n", - "result__range_status", - pdev->sys_results.result__range_status, - "result__report_status", - pdev->sys_results.result__report_status); - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_clear_interrupt(Dev); - } - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_start_test( - Dev, - 0x00); - - LOG_FUNCTION_END(status); - - return status; -} - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_api_core.c b/drivers/input/misc/vl53L1/src/vl53l1_api_core.c deleted file mode 100644 index 7f32b6a92a8e..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_api_core.c +++ /dev/null @@ -1,4790 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_ll_device.h" -#include "vl53l1_platform.h" -#include "vl53l1_platform_ipp.h" -#include "vl53l1_register_map.h" -#include "vl53l1_register_settings.h" -#include "vl53l1_register_funcs.h" -#include "vl53l1_hist_map.h" -#include "vl53l1_hist_structs.h" -#include "vl53l1_nvm_map.h" -#include "vl53l1_nvm_structs.h" -#include "vl53l1_nvm.h" -#include "vl53l1_core.h" -#include "vl53l1_wait.h" -#include "vl53l1_zone_presets.h" -#include "vl53l1_api_preset_modes.h" -#include "vl53l1_fpga_core.h" -#include "vl53l1_silicon_core.h" -#include "vl53l1_api_core.h" - -#ifdef VL53L1_LOG_ENABLE -#include "vl53l1_api_debug.h" -#endif - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_CORE, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_CORE, status, \ - fmt, ##__VA_ARGS__) - -#define trace_print(level, ...) \ - _LOG_TRACE_PRINT(VL53L1_TRACE_MODULE_CORE, \ - level, VL53L1_TRACE_FUNCTION_NONE, ##__VA_ARGS__) - -#define VL53L1_MAX_I2C_XFER_SIZE 256 - -VL53L1_Error VL53L1_get_version( - VL53L1_DEV Dev, - VL53L1_ll_version_t *pdata) -{ - - - - - - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - VL53L1_init_version(Dev); - - memcpy(pdata, &(pdev->version), sizeof(VL53L1_ll_version_t)); - - return VL53L1_ERROR_NONE; -} - - -VL53L1_Error VL53L1_is_fpga_system( - VL53L1_DEV Dev, - uint8_t *pfpga_system) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - status = VL53L1_RdByte( - Dev, - VL53L1_NVM_BIST__COMPLETE, - pfpga_system); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_device_firmware_version( - VL53L1_DEV Dev, - uint16_t *pfw_version) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_RdWord( - Dev, - VL53L1_MCU_GENERAL_PURPOSE__GP_0, - pfw_version); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_data_init( - VL53L1_DEV Dev, - uint8_t read_p2p_data) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - uint8_t i = 0; - - LOG_FUNCTION_START(""); - - VL53L1_init_ll_driver_state( - Dev, - VL53L1_DEVICESTATE_UNKNOWN); - - pres->range_results.max_results = VL53L1_MAX_RANGE_RESULTS; - pres->range_results.active_results = 0; - pres->zone_results.max_zones = VL53L1_MAX_USER_ZONES; - pres->zone_results.active_zones = 0; - pres->zone_hists.max_zones = VL53L1_MAX_USER_ZONES; - pres->zone_hists.active_zones = 0; - - - - - pres->zone_cal.max_zones = VL53L1_MAX_USER_ZONES; - pres->zone_cal.active_zones = 0; - for (i = 0 ; i < VL53L1_MAX_USER_ZONES ; i++) { - pres->zone_cal.VL53L1_PRM_00005[i].no_of_samples = 0; - pres->zone_cal.VL53L1_PRM_00005[i].effective_spads = 0; - pres->zone_cal.VL53L1_PRM_00005[i].peak_rate_mcps = 0; - pres->zone_cal.VL53L1_PRM_00005[i].median_range_mm = 0; - pres->zone_cal.VL53L1_PRM_00005[i].range_mm_offset = 0; - } - - pdev->wait_method = VL53L1_WAIT_METHOD_BLOCKING; - pdev->preset_mode = VL53L1_DEVICEPRESETMODE_STANDARD_RANGING; - pdev->zone_preset = VL53L1_DEVICEZONEPRESET_NONE; - pdev->measurement_mode = VL53L1_DEVICEMEASUREMENTMODE_STOP; - - pdev->offset_calibration_mode = - VL53L1_OFFSETCALIBRATIONMODE__MM1_MM2__STANDARD; - pdev->offset_correction_mode = - VL53L1_OFFSETCORRECTIONMODE__MM1_MM2_OFFSETS; - pdev->dmax_mode = - VL53L1_DEVICEDMAXMODE__FMT_CAL_DATA; - - pdev->phasecal_config_timeout_us = 1000; - pdev->mm_config_timeout_us = 2000; - pdev->range_config_timeout_us = 13000; - pdev->inter_measurement_period_ms = 100; - pdev->debug_mode = 0x00; - - pdev->offset_results.max_results = VL53L1_MAX_OFFSET_RANGE_RESULTS; - pdev->offset_results.active_results = 0; - - - - - - pdev->gain_cal.standard_ranging_gain_factor = - VL53L1_GAIN_FACTOR__STANDARD_DEFAULT; - pdev->gain_cal.histogram_ranging_gain_factor = - VL53L1_GAIN_FACTOR__HISTOGRAM_DEFAULT; - - - - - - VL53L1_init_version(Dev); - - - - - - - - - - - if (read_p2p_data > 0 && status == VL53L1_ERROR_NONE) - - status = VL53L1_read_p2p_data(Dev); - - - - status = - VL53L1_init_refspadchar_config_struct( - &(pdev->refspadchar)); - - - - status = - VL53L1_init_ssc_config_struct( - &(pdev->ssc_cfg)); - - - - - - status = - VL53L1_init_xtalk_config_struct( - &(pdev->customer), - &(pdev->xtalk_cfg)); - - - - status = - VL53L1_init_hist_post_process_config_struct( - pdev->xtalk_cfg.global_crosstalk_compensation_enable, - &(pdev->histpostprocess)); - - - - status = - VL53L1_init_hist_gen3_dmax_config_struct( - &(pdev->dmax_cfg)); - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_set_preset_mode( - Dev, - pdev->preset_mode, - 0x0A00, - - pdev->phasecal_config_timeout_us, - pdev->mm_config_timeout_us, - pdev->range_config_timeout_us, - pdev->inter_measurement_period_ms); - - - - VL53L1_init_histogram_bin_data_struct( - 0, - VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->hist_data)); - - VL53L1_init_histogram_bin_data_struct( - 0, - VL53L1_HISTOGRAM_BUFFER_SIZE, - &(pdev->hist_xtalk)); - - - - VL53L1_init_xtalk_bin_data_struct( - 0, - VL53L1_XTALK_HISTO_BINS, - &(pdev->xtalk_shapes.xtalk_shape)); - -#ifdef VL53L1_LOG_ENABLE - - - - - VL53L1_print_static_nvm_managed( - &(pdev->stat_nvm), - "data_init():pdev->lldata.stat_nvm.", - VL53L1_TRACE_MODULE_DATA_INIT); - - VL53L1_print_customer_nvm_managed( - &(pdev->customer), - "data_init():pdev->lldata.customer.", - VL53L1_TRACE_MODULE_DATA_INIT); - - VL53L1_print_nvm_copy_data( - &(pdev->nvm_copy_data), - "data_init():pdev->lldata.nvm_copy_data.", - VL53L1_TRACE_MODULE_DATA_INIT); - - VL53L1_print_dmax_calibration_data( - &(pdev->fmt_dmax_cal), - "data_init():pdev->lldata.fmt_dmax_cal.", - VL53L1_TRACE_MODULE_DATA_INIT); - - VL53L1_print_dmax_calibration_data( - &(pdev->cust_dmax_cal), - "data_init():pdev->lldata.cust_dmax_cal.", - VL53L1_TRACE_MODULE_DATA_INIT); - - VL53L1_print_additional_offset_cal_data( - &(pdev->add_off_cal_data), - "data_init():pdev->lldata.add_off_cal_data.", - VL53L1_TRACE_MODULE_DATA_INIT); - - VL53L1_print_user_zone( - &(pdev->mm_roi), - "data_init():pdev->lldata.mm_roi.", - VL53L1_TRACE_MODULE_DATA_INIT); - - VL53L1_print_cal_peak_rate_map( - &(pdev->cal_peak_rate_map), - "data_init():pdev->lldata.cal_peak_rate_map.", - VL53L1_TRACE_MODULE_DATA_INIT); - -#endif - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_read_p2p_data( - VL53L1_DEV Dev) -{ - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - VL53L1_decoded_nvm_fmt_range_data_t fmt_range_result_data; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_is_fpga_system( - Dev, - &(pdev->fpga_system)); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_get_static_nvm_managed( - Dev, - &(pdev->stat_nvm)); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_get_customer_nvm_managed( - Dev, - &(pdev->customer)); - - if (status == VL53L1_ERROR_NONE) { - - status = VL53L1_get_nvm_copy_data( - Dev, - &(pdev->nvm_copy_data)); - - - - if (status == VL53L1_ERROR_NONE) - VL53L1_copy_rtn_good_spads_to_buffer( - &(pdev->nvm_copy_data), - &(pdev->rtn_good_spads[0])); - } - - - - - if (status == VL53L1_ERROR_NONE) { - - pdev->histpostprocess.algo__crosstalk_compensation_plane_offset_kcps = - pdev->customer.algo__crosstalk_compensation_plane_offset_kcps; - pdev->histpostprocess.algo__crosstalk_compensation_x_plane_gradient_kcps = - pdev->customer.algo__crosstalk_compensation_x_plane_gradient_kcps; - pdev->histpostprocess.algo__crosstalk_compensation_y_plane_gradient_kcps = - pdev->customer.algo__crosstalk_compensation_y_plane_gradient_kcps; - } - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_read_nvm_cal_peak_rate_map( - Dev, - &(pdev->cal_peak_rate_map)); - - - - - - - if (status == VL53L1_ERROR_NONE) { - - status = - VL53L1_read_nvm_additional_offset_cal_data( - Dev, - &(pdev->add_off_cal_data)); - - - - - - - if (pdev->add_off_cal_data.result__mm_inner_peak_signal_count_rtn_mcps == 0 && - pdev->add_off_cal_data.result__mm_outer_peak_signal_count_rtn_mcps == 0) { - - pdev->add_off_cal_data.result__mm_inner_peak_signal_count_rtn_mcps = 0x0080; - - pdev->add_off_cal_data.result__mm_outer_peak_signal_count_rtn_mcps = 0x0180; - - - - - - VL53L1_calc_mm_effective_spads( - pdev->nvm_copy_data.roi_config__mode_roi_centre_spad, - pdev->nvm_copy_data.roi_config__mode_roi_xy_size, - 0xC7, - - 0xFF, - &(pdev->rtn_good_spads[0]), - VL53L1_RTN_SPAD_APERTURE_TRANSMISSION, - &(pdev->add_off_cal_data.result__mm_inner_actual_effective_spads), - &(pdev->add_off_cal_data.result__mm_outer_actual_effective_spads)); - } - } - - - - - - - if (status == VL53L1_ERROR_NONE) { - - status = - VL53L1_read_nvm_fmt_range_results_data( - Dev, - VL53L1_NVM__FMT__RANGE_RESULTS__140MM_DARK, - &fmt_range_result_data); - - if (status == VL53L1_ERROR_NONE) { - pdev->fmt_dmax_cal.ref__actual_effective_spads = - fmt_range_result_data.result__actual_effective_rtn_spads; - pdev->fmt_dmax_cal.ref__peak_signal_count_rate_mcps = - fmt_range_result_data.result__peak_signal_count_rate_rtn_mcps; - pdev->fmt_dmax_cal.ref__distance_mm = - fmt_range_result_data.measured_distance_mm; - - - - pdev->fmt_dmax_cal.ref_reflectance_pc = 0x000F; - - - - pdev->fmt_dmax_cal.coverglass_transmission = 0x0100; - } - } - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_RdWord( - Dev, - VL53L1_RESULT__OSC_CALIBRATE_VAL, - &(pdev->dbg_results.result__osc_calibrate_val)); - - - - - - - if (pdev->stat_nvm.osc_measured__fast_osc__frequency < 0x1000) { - trace_print( - VL53L1_TRACE_LEVEL_WARNING, - "\nInvalid %s value (0x%04X) - forcing to 0x%04X\n\n", - "pdev->stat_nvm.osc_measured__fast_osc__frequency", - pdev->stat_nvm.osc_measured__fast_osc__frequency, - 0xBCCC); - pdev->stat_nvm.osc_measured__fast_osc__frequency = 0xBCCC; - } - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_get_mode_mitigation_roi( - Dev, - &(pdev->mm_roi)); - - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_software_reset( - VL53L1_DEV Dev) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_WrByte( - Dev, - VL53L1_SOFT_RESET, - 0x00); - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WaitUs( - Dev, - VL53L1_SOFTWARE_RESET_DURATION_US); - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrByte( - Dev, - VL53L1_SOFT_RESET, - 0x01); - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_wait_for_boot_completion(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_part_to_part_data( - VL53L1_DEV Dev, - VL53L1_calibration_data_t *pcal_data) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - if (pcal_data->struct_version != - VL53L1_LL_CALIBRATION_DATA_STRUCT_VERSION) { - status = VL53L1_ERROR_INVALID_PARAMS; - } - - if (status == VL53L1_ERROR_NONE) { - - - - memcpy( - &(pdev->customer), - &(pcal_data->customer), - sizeof(VL53L1_customer_nvm_managed_t)); - - - - memcpy( - &(pdev->add_off_cal_data), - &(pcal_data->add_off_cal_data), - sizeof(VL53L1_additional_offset_cal_data_t)); - - - - memcpy( - &(pdev->fmt_dmax_cal), - &(pcal_data->fmt_dmax_cal), - sizeof(VL53L1_dmax_calibration_data_t)); - - - - memcpy( - &(pdev->cust_dmax_cal), - &(pcal_data->cust_dmax_cal), - sizeof(VL53L1_dmax_calibration_data_t)); - - - - memcpy( - &(pdev->xtalk_shapes), - &(pcal_data->xtalkhisto), - sizeof(VL53L1_xtalk_histogram_data_t)); - - - - memcpy( - &(pdev->gain_cal), - &(pcal_data->gain_cal), - sizeof(VL53L1_gain_calibration_data_t)); - - - - memcpy( - &(pdev->cal_peak_rate_map), - &(pcal_data->cal_peak_rate_map), - sizeof(VL53L1_cal_peak_rate_map_t)); - - - - - - - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps = - pdev->customer.algo__crosstalk_compensation_plane_offset_kcps; - pdev->xtalk_cfg.algo__crosstalk_compensation_x_plane_gradient_kcps = - pdev->customer.algo__crosstalk_compensation_x_plane_gradient_kcps; - pdev->xtalk_cfg.algo__crosstalk_compensation_y_plane_gradient_kcps = - pdev->customer.algo__crosstalk_compensation_y_plane_gradient_kcps; - - pdev->histpostprocess.algo__crosstalk_compensation_plane_offset_kcps = - VL53L1_calc_crosstalk_plane_offset_with_margin( - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps, - pdev->xtalk_cfg.histogram_mode_crosstalk_margin_kcps); - - pdev->histpostprocess.algo__crosstalk_compensation_x_plane_gradient_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_x_plane_gradient_kcps; - pdev->histpostprocess.algo__crosstalk_compensation_y_plane_gradient_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_y_plane_gradient_kcps; - - - - - if (pdev->xtalk_cfg.global_crosstalk_compensation_enable == 0x00) { - pdev->customer.algo__crosstalk_compensation_plane_offset_kcps = - 0x00; - pdev->customer.algo__crosstalk_compensation_x_plane_gradient_kcps = - 0x00; - pdev->customer.algo__crosstalk_compensation_y_plane_gradient_kcps = - 0x00; - } else { - pdev->customer.algo__crosstalk_compensation_plane_offset_kcps = - VL53L1_calc_crosstalk_plane_offset_with_margin( - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps, - pdev->xtalk_cfg.lite_mode_crosstalk_margin_kcps); - } - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_part_to_part_data( - VL53L1_DEV Dev, - VL53L1_calibration_data_t *pcal_data) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pcal_data->struct_version = - VL53L1_LL_CALIBRATION_DATA_STRUCT_VERSION; - - - - memcpy( - &(pcal_data->customer), - &(pdev->customer), - sizeof(VL53L1_customer_nvm_managed_t)); - - - - - - - pcal_data->customer.algo__crosstalk_compensation_plane_offset_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps; - pcal_data->customer.algo__crosstalk_compensation_x_plane_gradient_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_x_plane_gradient_kcps; - pcal_data->customer.algo__crosstalk_compensation_y_plane_gradient_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_y_plane_gradient_kcps; - - - - memcpy( - &(pcal_data->fmt_dmax_cal), - &(pdev->fmt_dmax_cal), - sizeof(VL53L1_dmax_calibration_data_t)); - - - - memcpy( - &(pcal_data->cust_dmax_cal), - &(pdev->cust_dmax_cal), - sizeof(VL53L1_dmax_calibration_data_t)); - - - - memcpy( - &(pcal_data->add_off_cal_data), - &(pdev->add_off_cal_data), - sizeof(VL53L1_additional_offset_cal_data_t)); - - - - memcpy( - &(pcal_data->mm_roi), - &(pdev->mm_roi), - sizeof(VL53L1_user_zone_t)); - - - - memcpy( - &(pcal_data->xtalkhisto), - &(pdev->xtalk_shapes), - sizeof(VL53L1_xtalk_histogram_data_t)); - - - - memcpy( - &(pcal_data->gain_cal), - &(pdev->gain_cal), - sizeof(VL53L1_gain_calibration_data_t)); - - - - memcpy( - &(pcal_data->cal_peak_rate_map), - &(pdev->cal_peak_rate_map), - sizeof(VL53L1_cal_peak_rate_map_t)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_inter_measurement_period_ms( - VL53L1_DEV Dev, - uint32_t inter_measurement_period_ms) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - if (pdev->dbg_results.result__osc_calibrate_val == 0) - status = VL53L1_ERROR_DIVISION_BY_ZERO; - - if (status == VL53L1_ERROR_NONE) { - pdev->inter_measurement_period_ms = inter_measurement_period_ms; - pdev->tim_cfg.system__intermeasurement_period = \ - inter_measurement_period_ms * - (uint32_t)pdev->dbg_results.result__osc_calibrate_val; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_inter_measurement_period_ms( - VL53L1_DEV Dev, - uint32_t *pinter_measurement_period_ms) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - if (pdev->dbg_results.result__osc_calibrate_val == 0) - status = VL53L1_ERROR_DIVISION_BY_ZERO; - - if (status == VL53L1_ERROR_NONE) - *pinter_measurement_period_ms = \ - pdev->tim_cfg.system__intermeasurement_period / - (uint32_t)pdev->dbg_results.result__osc_calibrate_val; - - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_timeouts_us( - VL53L1_DEV Dev, - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - if (pdev->stat_nvm.osc_measured__fast_osc__frequency == 0) - status = VL53L1_ERROR_DIVISION_BY_ZERO; - - if (status == VL53L1_ERROR_NONE) { - - pdev->phasecal_config_timeout_us = phasecal_config_timeout_us; - pdev->mm_config_timeout_us = mm_config_timeout_us; - pdev->range_config_timeout_us = range_config_timeout_us; - - status = - VL53L1_calc_timeout_register_values( - phasecal_config_timeout_us, - mm_config_timeout_us, - range_config_timeout_us, - pdev->stat_nvm.osc_measured__fast_osc__frequency, - &(pdev->gen_cfg), - &(pdev->tim_cfg)); - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_timeouts_us( - VL53L1_DEV Dev, - uint32_t *pphasecal_config_timeout_us, - uint32_t *pmm_config_timeout_us, - uint32_t *prange_config_timeout_us) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - uint32_t macro_period_us = 0; - uint16_t timeout_encoded = 0; - - LOG_FUNCTION_START(""); - - if (pdev->stat_nvm.osc_measured__fast_osc__frequency == 0) - status = VL53L1_ERROR_DIVISION_BY_ZERO; - - if (status == VL53L1_ERROR_NONE) { - - - - macro_period_us = - VL53L1_calc_macro_period_us( - pdev->stat_nvm.osc_measured__fast_osc__frequency, - pdev->tim_cfg.range_config__vcsel_period_a); - - - - - *pphasecal_config_timeout_us = - VL53L1_calc_timeout_us( - (uint32_t)pdev->gen_cfg.phasecal_config__timeout_macrop, - macro_period_us); - - - - - timeout_encoded = - (uint16_t)pdev->tim_cfg.mm_config__timeout_macrop_a_hi; - timeout_encoded = (timeout_encoded << 8) + - (uint16_t)pdev->tim_cfg.mm_config__timeout_macrop_a_lo; - - *pmm_config_timeout_us = - VL53L1_calc_decoded_timeout_us( - timeout_encoded, - macro_period_us); - - - - - timeout_encoded = - (uint16_t)pdev->tim_cfg.range_config__timeout_macrop_a_hi; - timeout_encoded = (timeout_encoded << 8) + - (uint16_t)pdev->tim_cfg.range_config__timeout_macrop_a_lo; - - *prange_config_timeout_us = - VL53L1_calc_decoded_timeout_us( - timeout_encoded, - macro_period_us); - - pdev->phasecal_config_timeout_us = *pphasecal_config_timeout_us; - pdev->mm_config_timeout_us = *pmm_config_timeout_us; - pdev->range_config_timeout_us = *prange_config_timeout_us; - - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_calibration_repeat_period( - VL53L1_DEV Dev, - uint16_t cal_config__repeat_period) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - pdev->gen_cfg.cal_config__repeat_rate = cal_config__repeat_period; - - return status; - -} - - -VL53L1_Error VL53L1_get_calibration_repeat_period( - VL53L1_DEV Dev, - uint16_t *pcal_config__repeat_period) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - *pcal_config__repeat_period = pdev->gen_cfg.cal_config__repeat_rate; - - return status; - -} - - -VL53L1_Error VL53L1_set_sequence_config_bit( - VL53L1_DEV Dev, - VL53L1_DeviceSequenceConfig bit_id, - uint8_t value) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t bit_mask = 0x01; - uint8_t clr_mask = 0xFF - bit_mask; - uint8_t bit_value = value & bit_mask; - - if (bit_id <= VL53L1_DEVICESEQUENCECONFIG_RANGE) { - - if (bit_id > 0) { - bit_mask = 0x01 << bit_id; - bit_value = bit_value << bit_id; - clr_mask = 0xFF - bit_mask; - } - - pdev->dyn_cfg.system__sequence_config = \ - (pdev->dyn_cfg.system__sequence_config & clr_mask) | \ - bit_value; - - } else { - status = VL53L1_ERROR_INVALID_PARAMS; - } - - return status; - -} - - -VL53L1_Error VL53L1_get_sequence_config_bit( - VL53L1_DEV Dev, - VL53L1_DeviceSequenceConfig bit_id, - uint8_t *pvalue) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t bit_mask = 0x01; - - if (bit_id <= VL53L1_DEVICESEQUENCECONFIG_RANGE) { - - if (bit_id > 0) { - bit_mask = 0x01 << bit_id; - } - - *pvalue = - pdev->dyn_cfg.system__sequence_config & bit_mask; - - if (bit_id > 0) { - *pvalue = *pvalue >> bit_id; - } - - } else { - status = VL53L1_ERROR_INVALID_PARAMS; - } - - return status; -} - - -VL53L1_Error VL53L1_set_interrupt_polarity( - VL53L1_DEV Dev, - VL53L1_DeviceInterruptPolarity interrupt_polarity) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - pdev->stat_cfg.gpio_hv_mux__ctrl = \ - (pdev->stat_cfg.gpio_hv_mux__ctrl & \ - VL53L1_DEVICEINTERRUPTPOLARITY_CLEAR_MASK) | \ - (interrupt_polarity & \ - VL53L1_DEVICEINTERRUPTPOLARITY_BIT_MASK); - - return status; - -} - - -VL53L1_Error VL53L1_set_refspadchar_config_struct( - VL53L1_DEV Dev, - VL53L1_refspadchar_config_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->refspadchar.device_test_mode = pdata->device_test_mode; - pdev->refspadchar.VL53L1_PRM_00007 = pdata->VL53L1_PRM_00007; - pdev->refspadchar.timeout_us = pdata->timeout_us; - pdev->refspadchar.target_count_rate_mcps = - pdata->target_count_rate_mcps; - pdev->refspadchar.min_count_rate_limit_mcps = - pdata->min_count_rate_limit_mcps; - pdev->refspadchar.max_count_rate_limit_mcps = - pdata->max_count_rate_limit_mcps; - - LOG_FUNCTION_END(status); - - return status; -} - -VL53L1_Error VL53L1_get_refspadchar_config_struct( - VL53L1_DEV Dev, - VL53L1_refspadchar_config_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdata->device_test_mode = pdev->refspadchar.device_test_mode; - pdata->VL53L1_PRM_00007 = pdev->refspadchar.VL53L1_PRM_00007; - pdata->timeout_us = pdev->refspadchar.timeout_us; - pdata->target_count_rate_mcps = pdev->refspadchar.target_count_rate_mcps; - pdata->min_count_rate_limit_mcps = - pdev->refspadchar.min_count_rate_limit_mcps; - pdata->max_count_rate_limit_mcps = - pdev->refspadchar.max_count_rate_limit_mcps; - - LOG_FUNCTION_END(status); - - return status; -} - - - -VL53L1_Error VL53L1_set_range_ignore_threshold( - VL53L1_DEV Dev, - uint8_t range_ignore_thresh_mult, - uint16_t range_ignore_threshold_mcps) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - pdev->xtalk_cfg.crosstalk_range_ignore_threshold_rate_mcps = - range_ignore_threshold_mcps; - - pdev->xtalk_cfg.crosstalk_range_ignore_threshold_mult = - range_ignore_thresh_mult; - - return status; - -} - -VL53L1_Error VL53L1_get_range_ignore_threshold( - VL53L1_DEV Dev, - uint8_t *prange_ignore_thresh_mult, - uint16_t *prange_ignore_threshold_mcps_internal, - uint16_t *prange_ignore_threshold_mcps_current) -{ - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - *prange_ignore_thresh_mult = - pdev->xtalk_cfg.crosstalk_range_ignore_threshold_mult; - - *prange_ignore_threshold_mcps_current = - pdev->stat_cfg.algo__range_ignore_threshold_mcps; - - *prange_ignore_threshold_mcps_internal = - pdev->xtalk_cfg.crosstalk_range_ignore_threshold_rate_mcps; - - return status; - -} - - - -VL53L1_Error VL53L1_get_interrupt_polarity( - VL53L1_DEV Dev, - VL53L1_DeviceInterruptPolarity *pinterrupt_polarity) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - *pinterrupt_polarity = \ - pdev->stat_cfg.gpio_hv_mux__ctrl & \ - VL53L1_DEVICEINTERRUPTPOLARITY_BIT_MASK ; - - return status; - -} - - -VL53L1_Error VL53L1_set_user_zone( - VL53L1_DEV Dev, - VL53L1_user_zone_t *puser_zone) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - VL53L1_encode_row_col( - puser_zone->y_centre, - puser_zone->x_centre, - &(pdev->dyn_cfg.roi_config__user_roi_centre_spad)); - - - - VL53L1_encode_zone_size( - puser_zone->width, - puser_zone->height, - &(pdev->dyn_cfg.roi_config__user_roi_requested_global_xy_size)); - - - - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_user_zone( - VL53L1_DEV Dev, - VL53L1_user_zone_t *puser_zone) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - VL53L1_decode_row_col( - pdev->dyn_cfg.roi_config__user_roi_centre_spad, - &(puser_zone->y_centre), - &(puser_zone->x_centre)); - - - - VL53L1_decode_zone_size( - pdev->dyn_cfg.roi_config__user_roi_requested_global_xy_size, - &(puser_zone->width), - &(puser_zone->height)); - - LOG_FUNCTION_END(status); - - return status; -} - - - -VL53L1_Error VL53L1_get_mode_mitigation_roi( - VL53L1_DEV Dev, - VL53L1_user_zone_t *pmm_roi) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t x = 0; - uint8_t y = 0; - uint8_t xy_size = 0; - - LOG_FUNCTION_START(""); - - - - VL53L1_decode_row_col( - pdev->nvm_copy_data.roi_config__mode_roi_centre_spad, - &y, - &x); - - pmm_roi->x_centre = x; - pmm_roi->y_centre = y; - - - - - - - - - - - xy_size = pdev->nvm_copy_data.roi_config__mode_roi_xy_size; - - pmm_roi->height = xy_size >> 4; - pmm_roi->width = xy_size & 0x0F; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_zone_config( - VL53L1_DEV Dev, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - memcpy(&(pdev->zone_cfg.user_zones), &(pzone_cfg->user_zones), - sizeof(pdev->zone_cfg.user_zones)); - - - - pdev->zone_cfg.max_zones = pzone_cfg->max_zones; - pdev->zone_cfg.active_zones = pzone_cfg->active_zones; - - status = VL53L1_init_zone_config_histogram_bins(&pdev->zone_cfg); - - - - - - - - - - - if (pzone_cfg->active_zones == 0) - pdev->gen_cfg.global_config__stream_divider = 0; - else if (pzone_cfg->active_zones < VL53L1_MAX_USER_ZONES) - pdev->gen_cfg.global_config__stream_divider = pzone_cfg->active_zones + 1; - else - pdev->gen_cfg.global_config__stream_divider = VL53L1_MAX_USER_ZONES + 1; - - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_get_zone_config( - VL53L1_DEV Dev, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - memcpy(pzone_cfg, &(pdev->zone_cfg), sizeof(VL53L1_zone_config_t)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_preset_mode( - VL53L1_DEV Dev, - VL53L1_DevicePresetModes device_preset_mode, - uint16_t dss_config__target_total_rate_mcps, - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint32_t inter_measurement_period_ms) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - VL53L1_hist_post_process_config_t *phistpostprocess = - &(pdev->histpostprocess); - - VL53L1_static_config_t *pstatic = &(pdev->stat_cfg); - VL53L1_histogram_config_t *phistogram = &(pdev->hist_cfg); - VL53L1_general_config_t *pgeneral = &(pdev->gen_cfg); - VL53L1_timing_config_t *ptiming = &(pdev->tim_cfg); - VL53L1_dynamic_config_t *pdynamic = &(pdev->dyn_cfg); - VL53L1_system_control_t *psystem = &(pdev->sys_ctrl); - VL53L1_zone_config_t *pzone_cfg = &(pdev->zone_cfg); - - LOG_FUNCTION_START(""); - - - - pdev->preset_mode = device_preset_mode; - pdev->mm_config_timeout_us = mm_config_timeout_us; - pdev->range_config_timeout_us = range_config_timeout_us; - pdev->inter_measurement_period_ms = inter_measurement_period_ms; - - - - - VL53L1_init_ll_driver_state( - Dev, - VL53L1_DEVICESTATE_SW_STANDBY); - - - - - switch (device_preset_mode) { - - case VL53L1_DEVICEPRESETMODE_STANDARD_RANGING: - status = VL53L1_preset_mode_standard_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_SHORT_RANGE: - status = VL53L1_preset_mode_standard_ranging_short_range( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_LONG_RANGE: - status = VL53L1_preset_mode_standard_ranging_long_range( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_MM1_CAL: - status = VL53L1_preset_mode_standard_ranging_mm1_cal( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_MM2_CAL: - status = VL53L1_preset_mode_standard_ranging_mm2_cal( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_TIMED_RANGING: - status = VL53L1_preset_mode_timed_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_TIMED_RANGING_SHORT_RANGE: - status = VL53L1_preset_mode_timed_ranging_short_range( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_TIMED_RANGING_LONG_RANGE: - status = VL53L1_preset_mode_timed_ranging_long_range( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING: - status = VL53L1_preset_mode_histogram_ranging( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_WITH_MM1: - status = VL53L1_preset_mode_histogram_ranging_with_mm1( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_WITH_MM2: - status = VL53L1_preset_mode_histogram_ranging_with_mm2( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_MM1_CAL: - status = VL53L1_preset_mode_histogram_ranging_mm1_cal( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_MM2_CAL: - status = VL53L1_preset_mode_histogram_ranging_mm2_cal( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_MULTIZONE: - status = VL53L1_preset_mode_histogram_multizone( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_MULTIZONE_SHORT_RANGE: - status = VL53L1_preset_mode_histogram_multizone_short_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_MULTIZONE_LONG_RANGE: - status = VL53L1_preset_mode_histogram_multizone_long_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_REF_ARRAY: - status = VL53L1_preset_mode_histogram_ranging_ref( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_RANGING_SHORT_TIMING: - status = VL53L1_preset_mode_histogram_ranging_short_timing( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_LONG_RANGE: - status = VL53L1_preset_mode_histogram_long_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_LONG_RANGE_MM1: - status = VL53L1_preset_mode_histogram_long_range_mm1( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_LONG_RANGE_MM2: - status = VL53L1_preset_mode_histogram_long_range_mm2( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_MEDIUM_RANGE: - status = VL53L1_preset_mode_histogram_medium_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_MEDIUM_RANGE_MM1: - status = VL53L1_preset_mode_histogram_medium_range_mm1( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_MEDIUM_RANGE_MM2: - status = VL53L1_preset_mode_histogram_medium_range_mm2( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_SHORT_RANGE: - status = VL53L1_preset_mode_histogram_short_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_SHORT_RANGE_MM1: - status = VL53L1_preset_mode_histogram_short_range_mm1( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_SHORT_RANGE_MM2: - status = VL53L1_preset_mode_histogram_short_range_mm2( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_CHARACTERISATION: - status = VL53L1_preset_mode_histogram_characterisation( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_XTALK_PLANAR: - status = VL53L1_preset_mode_histogram_xtalk_planar( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_XTALK_MM1: - status = VL53L1_preset_mode_histogram_xtalk_mm1( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_HISTOGRAM_XTALK_MM2: - status = VL53L1_preset_mode_histogram_xtalk_mm2( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_OLT: - status = VL53L1_preset_mode_olt( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - case VL53L1_DEVICEPRESETMODE_SINGLESHOT_RANGING: - status = VL53L1_preset_mode_singleshot_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - break; - - default: - status = VL53L1_ERROR_INVALID_PARAMS; - break; - - } - - - - - if (status == VL53L1_ERROR_NONE) - pstatic->dss_config__target_total_rate_mcps = - dss_config__target_total_rate_mcps; - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_set_timeouts_us( - Dev, - phasecal_config_timeout_us, - mm_config_timeout_us, - range_config_timeout_us); - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_set_inter_measurement_period_ms( - Dev, - inter_measurement_period_ms); - - - - - V53L1_init_zone_results_structure( - pdev->zone_cfg.active_zones+1, - &(pres->zone_results)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_zone_preset( - VL53L1_DEV Dev, - VL53L1_DeviceZonePreset zone_preset) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - VL53L1_general_config_t *pgeneral = &(pdev->gen_cfg); - VL53L1_zone_config_t *pzone_cfg = &(pdev->zone_cfg); - - LOG_FUNCTION_START(""); - - - - pdev->zone_preset = zone_preset; - - - - - switch (zone_preset) { - - case VL53L1_DEVICEZONEPRESET_XTALK_PLANAR: - status = - VL53L1_zone_preset_xtalk_planar( - pgeneral, - pzone_cfg); - break; - - case VL53L1_DEVICEZONEPRESET_1X1_SIZE_16X16: - status = - VL53L1_init_zone_config_structure( - 8, 1, 1, - - 8, 1, 1, - - 15, 15, - - pzone_cfg); - break; - - case VL53L1_DEVICEZONEPRESET_1X2_SIZE_16X8: - status = - VL53L1_init_zone_config_structure( - 8, 1, 1, - - 4, 8, 2, - - 15, 7, - - pzone_cfg); - break; - - case VL53L1_DEVICEZONEPRESET_2X1_SIZE_8X16: - status = - VL53L1_init_zone_config_structure( - 4, 8, 2, - - 8, 1, 1, - - 7, 15, - - pzone_cfg); - break; - - case VL53L1_DEVICEZONEPRESET_2X2_SIZE_8X8: - status = - VL53L1_init_zone_config_structure( - 4, 8, 2, - - 4, 8, 2, - - 7, 7, - - pzone_cfg); - break; - - case VL53L1_DEVICEZONEPRESET_3X3_SIZE_5X5: - status = - VL53L1_init_zone_config_structure( - 2, 5, 3, - - 2, 5, 3, - - 4, 4, - - pzone_cfg); - break; - - case VL53L1_DEVICEZONEPRESET_4X4_SIZE_4X4: - status = - VL53L1_init_zone_config_structure( - 2, 4, 4, - - 2, 4, 4, - - 3, 3, - - pzone_cfg); - break; - - case VL53L1_DEVICEZONEPRESET_5X5_SIZE_4X4: - status = - VL53L1_init_zone_config_structure( - 2, 3, 5, - - 2, 3, 5, - - 3, 3, - - pzone_cfg); - break; - - case VL53L1_DEVICEZONEPRESET_11X11_SIZE_5X5: - status = - VL53L1_init_zone_config_structure( - 3, 1, 11, - - 3, 1, 11, - - 4, 4, - - pzone_cfg); - break; - - case VL53L1_DEVICEZONEPRESET_13X13_SIZE_4X4: - status = - VL53L1_init_zone_config_structure( - 2, 1, 13, - - 2, 1, 13, - - 3, 3, - - pzone_cfg); - - break; - - case VL53L1_DEVICEZONEPRESET_1X1_SIZE_4X4_POS_8X8: - status = - VL53L1_init_zone_config_structure( - 8, 1, 1, - - 8, 1, 1, - - 3, 3, - - pzone_cfg); - break; - - } - - - - - - - - - - - if (pzone_cfg->active_zones == 0) - pdev->gen_cfg.global_config__stream_divider = 0; - else if (pzone_cfg->active_zones < VL53L1_MAX_USER_ZONES) - pdev->gen_cfg.global_config__stream_divider = pzone_cfg->active_zones + 1; - else - pdev->gen_cfg.global_config__stream_divider = VL53L1_MAX_USER_ZONES + 1; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_enable_xtalk_compensation( - VL53L1_DEV Dev) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - pdev->customer.algo__crosstalk_compensation_plane_offset_kcps = - VL53L1_calc_crosstalk_plane_offset_with_margin( - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps, - pdev->xtalk_cfg.lite_mode_crosstalk_margin_kcps); - - pdev->customer.algo__crosstalk_compensation_x_plane_gradient_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_x_plane_gradient_kcps; - - pdev->customer.algo__crosstalk_compensation_y_plane_gradient_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_y_plane_gradient_kcps; - - - - pdev->histpostprocess.algo__crosstalk_compensation_plane_offset_kcps = - VL53L1_calc_crosstalk_plane_offset_with_margin( - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps, - pdev->xtalk_cfg.histogram_mode_crosstalk_margin_kcps); - - pdev->histpostprocess.algo__crosstalk_compensation_x_plane_gradient_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_x_plane_gradient_kcps; - pdev->histpostprocess.algo__crosstalk_compensation_y_plane_gradient_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_y_plane_gradient_kcps; - - - - - pdev->xtalk_cfg.global_crosstalk_compensation_enable = 0x01; - - pdev->histpostprocess.algo__crosstalk_compensation_enable = - pdev->xtalk_cfg.global_crosstalk_compensation_enable; - - - - - - if (status == VL53L1_ERROR_NONE) { - pdev->xtalk_cfg.crosstalk_range_ignore_threshold_rate_mcps = - VL53L1_calc_range_ignore_threshold( - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps, - pdev->xtalk_cfg.algo__crosstalk_compensation_x_plane_gradient_kcps, - pdev->xtalk_cfg.algo__crosstalk_compensation_y_plane_gradient_kcps, - pdev->xtalk_cfg.crosstalk_range_ignore_threshold_mult); - } - - - - - if (status == VL53L1_ERROR_NONE) - - status = - VL53L1_set_customer_nvm_managed( - Dev, - &(pdev->customer)); - - LOG_FUNCTION_END(status); - - return status; - -} - -void VL53L1_get_xtalk_compensation_enable( - VL53L1_DEV Dev, - uint8_t *pcrosstalk_compensation_enable) -{ - - - - - - - - - - - - - - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - - *pcrosstalk_compensation_enable = - pdev->xtalk_cfg.global_crosstalk_compensation_enable; - -} - - -VL53L1_Error VL53L1_get_lite_xtalk_margin_kcps( - VL53L1_DEV Dev, - int16_t *pxtalk_margin) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *pxtalk_margin = pdev->xtalk_cfg.lite_mode_crosstalk_margin_kcps; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_set_lite_xtalk_margin_kcps( - VL53L1_DEV Dev, - int16_t xtalk_margin) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->xtalk_cfg.lite_mode_crosstalk_margin_kcps = xtalk_margin; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_histogram_xtalk_margin_kcps( - VL53L1_DEV Dev, - int16_t *pxtalk_margin) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *pxtalk_margin = pdev->xtalk_cfg.histogram_mode_crosstalk_margin_kcps; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_set_histogram_xtalk_margin_kcps( - VL53L1_DEV Dev, - int16_t xtalk_margin) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->xtalk_cfg.histogram_mode_crosstalk_margin_kcps = xtalk_margin; - - LOG_FUNCTION_END(status); - - return status; -} - -VL53L1_Error VL53L1_restore_xtalk_nvm_default( - VL53L1_DEV Dev) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps = - pdev->xtalk_cfg.nvm_default__crosstalk_compensation_plane_offset_kcps; - pdev->xtalk_cfg.algo__crosstalk_compensation_x_plane_gradient_kcps = - pdev->xtalk_cfg.nvm_default__crosstalk_compensation_x_plane_gradient_kcps; - pdev->xtalk_cfg.algo__crosstalk_compensation_y_plane_gradient_kcps = - pdev->xtalk_cfg.nvm_default__crosstalk_compensation_y_plane_gradient_kcps; - - LOG_FUNCTION_END(status); - - return status; -} - -VL53L1_Error VL53L1_disable_xtalk_compensation( - VL53L1_DEV Dev) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - pdev->customer.algo__crosstalk_compensation_plane_offset_kcps = - 0x00; - - pdev->customer.algo__crosstalk_compensation_x_plane_gradient_kcps = - 0x00; - - pdev->customer.algo__crosstalk_compensation_y_plane_gradient_kcps = - 0x00; - - - - - pdev->xtalk_cfg.global_crosstalk_compensation_enable = 0x00; - - pdev->histpostprocess.algo__crosstalk_compensation_enable = - pdev->xtalk_cfg.global_crosstalk_compensation_enable; - - - - - if (status == VL53L1_ERROR_NONE) { - pdev->xtalk_cfg.crosstalk_range_ignore_threshold_rate_mcps = - 0x0000; - } - - - - - if (status == VL53L1_ERROR_NONE) { - - status = - VL53L1_set_customer_nvm_managed( - Dev, - &(pdev->customer)); - } - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_get_histogram_phase_consistency( - VL53L1_DEV Dev, - uint8_t *pphase_consistency) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *pphase_consistency = - pdev->histpostprocess.algo__consistency_check__phase_tolerance; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_set_histogram_phase_consistency( - VL53L1_DEV Dev, - uint8_t phase_consistency) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->histpostprocess.algo__consistency_check__phase_tolerance = - phase_consistency; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_get_histogram_event_consistency( - VL53L1_DEV Dev, - uint8_t *pevent_consistency) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *pevent_consistency = - pdev->histpostprocess.algo__consistency_check__event_sigma; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_set_histogram_event_consistency( - VL53L1_DEV Dev, - uint8_t event_consistency) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->histpostprocess.algo__consistency_check__event_sigma = - event_consistency; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_get_histogram_ambient_threshold_sigma( - VL53L1_DEV Dev, - uint8_t *pamb_thresh_sigma) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *pamb_thresh_sigma = - pdev->histpostprocess.ambient_thresh_sigma1; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_set_histogram_ambient_threshold_sigma( - VL53L1_DEV Dev, - uint8_t amb_thresh_sigma) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->histpostprocess.ambient_thresh_sigma1 = - amb_thresh_sigma; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_get_lite_sigma_threshold( - VL53L1_DEV Dev, - uint16_t *plite_sigma) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *plite_sigma = - pdev->tim_cfg.range_config__sigma_thresh; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_set_lite_sigma_threshold( - VL53L1_DEV Dev, - uint16_t lite_sigma) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->tim_cfg.range_config__sigma_thresh = lite_sigma; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_get_lite_min_count_rate( - VL53L1_DEV Dev, - uint16_t *plite_mincountrate) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *plite_mincountrate = - pdev->tim_cfg.range_config__min_count_rate_rtn_limit_mcps; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_set_lite_min_count_rate( - VL53L1_DEV Dev, - uint16_t lite_mincountrate) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->tim_cfg.range_config__min_count_rate_rtn_limit_mcps = - lite_mincountrate; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_get_xtalk_detect_config( - VL53L1_DEV Dev, - int16_t *pmax_valid_range_mm, - int16_t *pmin_valid_range_mm, - uint16_t *pmax_valid_rate_kcps, - uint16_t *pmax_sigma_mm) -{ - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *pmax_valid_range_mm = - pdev->xtalk_cfg.algo__crosstalk_detect_max_valid_range_mm; - *pmin_valid_range_mm = - pdev->xtalk_cfg.algo__crosstalk_detect_min_valid_range_mm; - *pmax_valid_rate_kcps = - pdev->xtalk_cfg.algo__crosstalk_detect_max_valid_rate_kcps; - *pmax_sigma_mm = - pdev->xtalk_cfg.algo__crosstalk_detect_max_sigma_mm; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_set_xtalk_detect_config( - VL53L1_DEV Dev, - int16_t max_valid_range_mm, - int16_t min_valid_range_mm, - uint16_t max_valid_rate_kcps, - uint16_t max_sigma_mm) -{ - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->xtalk_cfg.algo__crosstalk_detect_max_valid_range_mm = - max_valid_range_mm; - pdev->xtalk_cfg.algo__crosstalk_detect_min_valid_range_mm = - min_valid_range_mm; - pdev->xtalk_cfg.algo__crosstalk_detect_max_valid_rate_kcps = - max_valid_rate_kcps; - pdev->xtalk_cfg.algo__crosstalk_detect_max_sigma_mm = - max_sigma_mm; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_get_target_order_mode( - VL53L1_DEV Dev, - VL53L1_HistTargetOrder *phist_target_order) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *phist_target_order = - pdev->histpostprocess.hist_target_order; - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_set_target_order_mode( - VL53L1_DEV Dev, - VL53L1_HistTargetOrder hist_target_order) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->histpostprocess.hist_target_order = hist_target_order; - - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_get_dmax_reflectance_values( - VL53L1_DEV Dev, - VL53L1_dmax_reflectance_array_t *pdmax_reflectances) -{ - - VL53L1_Error status = VL53L1_ERROR_NONE; - - uint8_t i = 0; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - - - - - - for (i = 0 ; i < VL53L1_MAX_AMBIENT_DMAX_VALUES ; i++) { - pdmax_reflectances->target_reflectance_for_dmax[i] = - pdev->dmax_cfg.target_reflectance_for_dmax_calc[i]; - } - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_set_dmax_reflectance_values( - VL53L1_DEV Dev, - VL53L1_dmax_reflectance_array_t *pdmax_reflectances) -{ - - VL53L1_Error status = VL53L1_ERROR_NONE; - - uint8_t i = 0; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - - - - - - for (i = 0 ; i < VL53L1_MAX_AMBIENT_DMAX_VALUES ; i++) { - pdev->dmax_cfg.target_reflectance_for_dmax_calc[i] = - pdmax_reflectances->target_reflectance_for_dmax[i]; - } - - LOG_FUNCTION_END(status); - - return status; - -} - -VL53L1_Error VL53L1_get_vhv_loopbound( - VL53L1_DEV Dev, - uint8_t *pvhv_loopbound) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *pvhv_loopbound = pdev->stat_nvm.vhv_config__timeout_macrop_loop_bound / 4 ; - - LOG_FUNCTION_END(status); - - return status; - -} - - - -VL53L1_Error VL53L1_set_vhv_loopbound( - VL53L1_DEV Dev, - uint8_t vhv_loopbound) -{ - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->stat_nvm.vhv_config__timeout_macrop_loop_bound = - (pdev->stat_nvm.vhv_config__timeout_macrop_loop_bound & 0x03) + - (vhv_loopbound * 4); - - LOG_FUNCTION_END(status); - - return status; - -} - - - -VL53L1_Error VL53L1_init_and_start_range( - VL53L1_DEV Dev, - uint8_t measurement_mode, - VL53L1_DeviceConfigLevel device_config_level) -{ - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - uint8_t buffer[VL53L1_MAX_I2C_XFER_SIZE]; - - VL53L1_static_nvm_managed_t *pstatic_nvm = &(pdev->stat_nvm); - VL53L1_customer_nvm_managed_t *pcustomer_nvm = &(pdev->customer); - VL53L1_static_config_t *pstatic = &(pdev->stat_cfg); - VL53L1_general_config_t *pgeneral = &(pdev->gen_cfg); - VL53L1_timing_config_t *ptiming = &(pdev->tim_cfg); - VL53L1_dynamic_config_t *pdynamic = &(pdev->dyn_cfg); - VL53L1_system_control_t *psystem = &(pdev->sys_ctrl); - - VL53L1_ll_driver_state_t *pstate = &(pdev->ll_state); - - uint8_t *pbuffer = &buffer[0]; - uint16_t i = 0; - uint16_t i2c_index = 0; - uint16_t i2c_buffer_offset_bytes = 0; - uint16_t i2c_buffer_size_bytes = 0; - - LOG_FUNCTION_START(""); - - - - pdev->measurement_mode = measurement_mode; - - - - - psystem->system__mode_start = - (psystem->system__mode_start & - VL53L1_DEVICEMEASUREMENTMODE_STOP_MASK) | - measurement_mode; - - - - - - - status = - VL53L1_set_user_zone( - Dev, - &(pdev->zone_cfg.user_zones[pdev->ll_state.cfg_zone_id])); - - - - - - if (pdev->zone_cfg.active_zones > 0) { - status = - VL53L1_set_zone_dss_config( - Dev, - &(pres->zone_dyn_cfgs.VL53L1_PRM_00005[pdev->ll_state.cfg_zone_id])); - } - - - - - - - if (((pdev->sys_ctrl.system__mode_start & - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM) == 0x00) && - (pdev->xtalk_cfg.global_crosstalk_compensation_enable == 0x01)) { - pdev->stat_cfg.algo__range_ignore_threshold_mcps = - pdev->xtalk_cfg.crosstalk_range_ignore_threshold_rate_mcps; - } - - - - - - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_save_cfg_data(Dev); - } - - - - - - - switch (device_config_level) { - case VL53L1_DEVICECONFIGLEVEL_FULL: - i2c_index = VL53L1_STATIC_NVM_MANAGED_I2C_INDEX; - break; - case VL53L1_DEVICECONFIGLEVEL_CUSTOMER_ONWARDS: - i2c_index = VL53L1_CUSTOMER_NVM_MANAGED_I2C_INDEX; - break; - case VL53L1_DEVICECONFIGLEVEL_STATIC_ONWARDS: - i2c_index = VL53L1_STATIC_CONFIG_I2C_INDEX; - break; - case VL53L1_DEVICECONFIGLEVEL_GENERAL_ONWARDS: - i2c_index = VL53L1_GENERAL_CONFIG_I2C_INDEX; - break; - case VL53L1_DEVICECONFIGLEVEL_TIMING_ONWARDS: - i2c_index = VL53L1_TIMING_CONFIG_I2C_INDEX; - break; - case VL53L1_DEVICECONFIGLEVEL_DYNAMIC_ONWARDS: - i2c_index = VL53L1_DYNAMIC_CONFIG_I2C_INDEX; - break; - default: - i2c_index = VL53L1_SYSTEM_CONTROL_I2C_INDEX; - break; - } - - - - - i2c_buffer_size_bytes = \ - (VL53L1_SYSTEM_CONTROL_I2C_INDEX + - VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES) - - i2c_index; - - - - - pbuffer = &buffer[0]; - for (i = 0 ; i < i2c_buffer_size_bytes ; i++) { - *pbuffer++ = 0; - } - - - - - if (device_config_level >= VL53L1_DEVICECONFIGLEVEL_FULL && - status == VL53L1_ERROR_NONE) { - - i2c_buffer_offset_bytes = \ - VL53L1_STATIC_NVM_MANAGED_I2C_INDEX - i2c_index; - - status = - VL53L1_i2c_encode_static_nvm_managed( - pstatic_nvm, - VL53L1_STATIC_NVM_MANAGED_I2C_SIZE_BYTES, - &buffer[i2c_buffer_offset_bytes]); - } - - if (device_config_level >= VL53L1_DEVICECONFIGLEVEL_CUSTOMER_ONWARDS && - status == VL53L1_ERROR_NONE) { - - i2c_buffer_offset_bytes = \ - VL53L1_CUSTOMER_NVM_MANAGED_I2C_INDEX - i2c_index; - - status = - VL53L1_i2c_encode_customer_nvm_managed( - pcustomer_nvm, - VL53L1_CUSTOMER_NVM_MANAGED_I2C_SIZE_BYTES, - &buffer[i2c_buffer_offset_bytes]); - } - - if (device_config_level >= VL53L1_DEVICECONFIGLEVEL_STATIC_ONWARDS && - status == VL53L1_ERROR_NONE) { - - i2c_buffer_offset_bytes = \ - VL53L1_STATIC_CONFIG_I2C_INDEX - i2c_index; - - status = - VL53L1_i2c_encode_static_config( - pstatic, - VL53L1_STATIC_CONFIG_I2C_SIZE_BYTES, - &buffer[i2c_buffer_offset_bytes]); - } - - if (device_config_level >= VL53L1_DEVICECONFIGLEVEL_GENERAL_ONWARDS && - status == VL53L1_ERROR_NONE) { - - i2c_buffer_offset_bytes = - VL53L1_GENERAL_CONFIG_I2C_INDEX - i2c_index; - - status = - VL53L1_i2c_encode_general_config( - pgeneral, - VL53L1_GENERAL_CONFIG_I2C_SIZE_BYTES, - &buffer[i2c_buffer_offset_bytes]); - } - - if (device_config_level >= VL53L1_DEVICECONFIGLEVEL_TIMING_ONWARDS && - status == VL53L1_ERROR_NONE) { - - i2c_buffer_offset_bytes = \ - VL53L1_TIMING_CONFIG_I2C_INDEX - i2c_index; - - status = - VL53L1_i2c_encode_timing_config( - ptiming, - VL53L1_TIMING_CONFIG_I2C_SIZE_BYTES, - &buffer[i2c_buffer_offset_bytes]); - } - - if (device_config_level >= VL53L1_DEVICECONFIGLEVEL_DYNAMIC_ONWARDS && - status == VL53L1_ERROR_NONE) { - - i2c_buffer_offset_bytes = \ - VL53L1_DYNAMIC_CONFIG_I2C_INDEX - i2c_index; - - - - if ((psystem->system__mode_start & - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK) == - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK) { - pdynamic->system__grouped_parameter_hold_0 = pstate->cfg_gph_id | 0x01; - pdynamic->system__grouped_parameter_hold_1 = pstate->cfg_gph_id | 0x01; - pdynamic->system__grouped_parameter_hold = pstate->cfg_gph_id; - } - status = - VL53L1_i2c_encode_dynamic_config( - pdynamic, - VL53L1_DYNAMIC_CONFIG_I2C_SIZE_BYTES, - &buffer[i2c_buffer_offset_bytes]); - } - - if (status == VL53L1_ERROR_NONE) { - - i2c_buffer_offset_bytes = \ - VL53L1_SYSTEM_CONTROL_I2C_INDEX - i2c_index; - - status = - VL53L1_i2c_encode_system_control( - psystem, - VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES, - &buffer[i2c_buffer_offset_bytes]); - } - - - - - if (status == VL53L1_ERROR_NONE) { - status = - VL53L1_WriteMulti( - Dev, - i2c_index, - buffer, - (uint32_t)i2c_buffer_size_bytes); - } - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_update_ll_driver_rd_state(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_update_ll_driver_cfg_state(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_stop_range( - VL53L1_DEV Dev) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - - - - pdev->sys_ctrl.system__mode_start = - (pdev->sys_ctrl.system__mode_start & VL53L1_DEVICEMEASUREMENTMODE_STOP_MASK) | - VL53L1_DEVICEMEASUREMENTMODE_ABORT; - - status = VL53L1_set_system_control( - Dev, - &pdev->sys_ctrl); - - - - pdev->sys_ctrl.system__mode_start = - (pdev->sys_ctrl.system__mode_start & VL53L1_DEVICEMEASUREMENTMODE_STOP_MASK); - - - - VL53L1_init_ll_driver_state( - Dev, - VL53L1_DEVICESTATE_SW_STANDBY); - - - - V53L1_init_zone_results_structure( - pdev->zone_cfg.active_zones+1, - &(pres->zone_results)); - - return status; -} - -VL53L1_Error VL53L1_get_measurement_results( - VL53L1_DEV Dev, - VL53L1_DeviceResultsLevel device_results_level) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t buffer[VL53L1_MAX_I2C_XFER_SIZE]; - - VL53L1_system_results_t *psystem_results = &(pdev->sys_results); - VL53L1_core_results_t *pcore_results = &(pdev->core_results); - VL53L1_debug_results_t *pdebug_results = &(pdev->dbg_results); - - uint16_t i2c_index = VL53L1_SYSTEM_RESULTS_I2C_INDEX; - uint16_t i2c_buffer_offset_bytes = 0; - uint16_t i2c_buffer_size_bytes = 0; - - LOG_FUNCTION_START(""); - - - - - switch (device_results_level) { - case VL53L1_DEVICERESULTSLEVEL_FULL: - i2c_buffer_size_bytes = - (VL53L1_DEBUG_RESULTS_I2C_INDEX + - VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES) - - i2c_index; - break; - case VL53L1_DEVICERESULTSLEVEL_UPTO_CORE: - i2c_buffer_size_bytes = - (VL53L1_CORE_RESULTS_I2C_INDEX + - VL53L1_CORE_RESULTS_I2C_SIZE_BYTES) - - i2c_index; - break; - default: - i2c_buffer_size_bytes = - VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES; - break; - } - - - - - if (status == VL53L1_ERROR_NONE) - - status = - VL53L1_ReadMulti( - Dev, - i2c_index, - buffer, - (uint32_t)i2c_buffer_size_bytes); - - - - - if (device_results_level >= VL53L1_DEVICERESULTSLEVEL_FULL && - status == VL53L1_ERROR_NONE) { - - i2c_buffer_offset_bytes = - VL53L1_DEBUG_RESULTS_I2C_INDEX - i2c_index; - - status = - VL53L1_i2c_decode_debug_results( - VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES, - &buffer[i2c_buffer_offset_bytes], - pdebug_results); - } - - if (device_results_level >= VL53L1_DEVICERESULTSLEVEL_UPTO_CORE && - status == VL53L1_ERROR_NONE) { - - i2c_buffer_offset_bytes = - VL53L1_CORE_RESULTS_I2C_INDEX - i2c_index; - - status = - VL53L1_i2c_decode_core_results( - VL53L1_CORE_RESULTS_I2C_SIZE_BYTES, - &buffer[i2c_buffer_offset_bytes], - pcore_results); - } - - if (status == VL53L1_ERROR_NONE) { - - i2c_buffer_offset_bytes = 0; - status = - VL53L1_i2c_decode_system_results( - VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES, - &buffer[i2c_buffer_offset_bytes], - psystem_results); - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_device_results( - VL53L1_DEV Dev, - VL53L1_DeviceResultsLevel device_results_level, - VL53L1_range_results_t *prange_results) -{ - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - VL53L1_range_results_t *presults = &(pres->range_results); - VL53L1_zone_objects_t *pobjects = &(pres->zone_results.VL53L1_PRM_00005[0]); - VL53L1_ll_driver_state_t *pstate = &(pdev->ll_state); - VL53L1_zone_config_t *pzone_cfg = &(pdev->zone_cfg); - VL53L1_zone_hist_info_t *phist_info = &(pres->zone_hists.VL53L1_PRM_00005[0]); - - VL53L1_dmax_calibration_data_t dmax_cal; - VL53L1_dmax_calibration_data_t *pdmax_cal = &dmax_cal; - - uint8_t i; - - LOG_FUNCTION_START(""); - - - - - if ((pdev->sys_ctrl.system__mode_start & - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM) - == VL53L1_DEVICESCHEDULERMODE_HISTOGRAM) { - - - - - - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_get_histogram_bin_data( - Dev, - &(pdev->hist_data)); - - - - - - - if (status == VL53L1_ERROR_NONE && - pdev->hist_data.number_of_ambient_bins == 0) - status = VL53L1_hist_copy_and_scale_ambient_info( - &(pres->zone_hists.VL53L1_PRM_00005[pdev->ll_state.rd_zone_id]), - &(pdev->hist_data)); - - - - - - - - if (status == VL53L1_ERROR_NONE) { - - pdev->histpostprocess.gain_factor = - pdev->gain_cal.histogram_ranging_gain_factor; - - pdev->histpostprocess.algo__crosstalk_compensation_plane_offset_kcps = - VL53L1_calc_crosstalk_plane_offset_with_margin( - pdev->xtalk_cfg.algo__crosstalk_compensation_plane_offset_kcps, - pdev->xtalk_cfg.histogram_mode_crosstalk_margin_kcps); - - pdev->histpostprocess.algo__crosstalk_compensation_x_plane_gradient_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_x_plane_gradient_kcps; - pdev->histpostprocess.algo__crosstalk_compensation_y_plane_gradient_kcps = - pdev->xtalk_cfg.algo__crosstalk_compensation_y_plane_gradient_kcps; - - pdev->dmax_cfg.ambient_thresh_sigma = - pdev->histpostprocess.ambient_thresh_sigma1; - pdev->dmax_cfg.min_ambient_thresh_events = - pdev->histpostprocess.min_ambient_thresh_events; - pdev->dmax_cfg.dss_config__target_total_rate_mcps = - pdev->stat_cfg.dss_config__target_total_rate_mcps; - pdev->dmax_cfg.dss_config__aperture_attenuation = - pdev->gen_cfg.dss_config__aperture_attenuation; - - pdev->histpostprocess.algo__crosstalk_detect_max_valid_range_mm = - pdev->xtalk_cfg.algo__crosstalk_detect_max_valid_range_mm; - pdev->histpostprocess.algo__crosstalk_detect_min_valid_range_mm = - pdev->xtalk_cfg.algo__crosstalk_detect_min_valid_range_mm; - pdev->histpostprocess.algo__crosstalk_detect_max_valid_rate_kcps = - pdev->xtalk_cfg.algo__crosstalk_detect_max_valid_rate_kcps; - pdev->histpostprocess.algo__crosstalk_detect_max_sigma_mm = - pdev->xtalk_cfg.algo__crosstalk_detect_max_sigma_mm; - - - - - VL53L1_copy_rtn_good_spads_to_buffer( - &(pdev->nvm_copy_data), - &(pdev->rtn_good_spads[0])); - - - - - switch (pdev->offset_correction_mode) { - - case VL53L1_OFFSETCORRECTIONMODE__MM1_MM2_OFFSETS: - - VL53L1_hist_combine_mm1_mm2_offsets( - pdev->customer.mm_config__inner_offset_mm, - pdev->customer.mm_config__outer_offset_mm, - pdev->nvm_copy_data.roi_config__mode_roi_centre_spad, - pdev->nvm_copy_data.roi_config__mode_roi_xy_size, - pdev->hist_data.roi_config__user_roi_centre_spad, - pdev->hist_data.roi_config__user_roi_requested_global_xy_size, - &(pdev->add_off_cal_data), - &(pdev->rtn_good_spads[0]), - (uint16_t)pdev->gen_cfg.dss_config__aperture_attenuation, - &(pdev->histpostprocess.range_offset_mm)); - - break; - - case VL53L1_OFFSETCORRECTIONMODE__PER_ZONE_OFFSETS: - pdev->histpostprocess.range_offset_mm = - (int16_t)pres->zone_cal.VL53L1_PRM_00005[pdev->ll_state.rd_zone_id].range_mm_offset; - break; - - default: - pdev->histpostprocess.range_offset_mm = 0; - break; - - } - } - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_get_dmax_calibration_data( - Dev, - pdev->dmax_mode, - pdev->ll_state.rd_zone_id, - pdmax_cal); - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_ipp_hist_process_data( - Dev, - pdmax_cal, - &(pdev->dmax_cfg), - &(pdev->histpostprocess), - &(pdev->hist_data), - &(pdev->xtalk_shapes), - presults); - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_hist_wrap_dmax( - &(pdev->histpostprocess), - &(pdev->hist_data), - &(presults->wrap_dmax_mm)); - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_hist_phase_consistency_check( - Dev, - &(pres->zone_hists.VL53L1_PRM_00005[pdev->ll_state.rd_zone_id]), - &(pdev->hist_data), - &(pres->zone_results.VL53L1_PRM_00005[pdev->ll_state.rd_zone_id]), - presults); - - - - - - - if (status == VL53L1_ERROR_NONE) { - - pres->zone_hists.max_zones = VL53L1_MAX_USER_ZONES; - pres->zone_hists.active_zones = pdev->zone_cfg.active_zones+1; - pdev->hist_data.zone_id = pdev->ll_state.rd_zone_id; - - if (pdev->ll_state.rd_zone_id < pres->zone_results.max_zones) { - - phist_info = - &(pres->zone_hists.VL53L1_PRM_00005[pdev->ll_state.rd_zone_id]); - - phist_info->rd_device_state = - pdev->hist_data.rd_device_state; - - phist_info->number_of_ambient_bins = - pdev->hist_data.number_of_ambient_bins; - - phist_info->result__dss_actual_effective_spads = - pdev->hist_data.result__dss_actual_effective_spads; - - phist_info->VL53L1_PRM_00007 = - pdev->hist_data.VL53L1_PRM_00007; - - phist_info->total_periods_elapsed = - pdev->hist_data.total_periods_elapsed; - - phist_info->ambient_events_sum = - pdev->hist_data.ambient_events_sum; - } - - } - - - - - - - - if (status == VL53L1_ERROR_NONE) - VL53L1_hist_copy_results_to_sys_and_core( - &(pdev->hist_data), - presults, - &(pdev->sys_results), - &(pdev->core_results)); - - - - - - - - if (pzone_cfg->active_zones > 0) { - if (pstate->rd_device_state != - VL53L1_DEVICESTATE_RANGING_WAIT_GPH_SYNC) { - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_dynamic_zone_update( - Dev, presults); - } - } - - - - - - for (i = 0; i < VL53L1_MAX_USER_ZONES; i++) { - pzone_cfg->bin_config[i] = - ((pdev->ll_state.cfg_internal_stream_count) & 0x01) ? - VL53L1_ZONECONFIG_BINCONFIG__HIGHAMB : - VL53L1_ZONECONFIG_BINCONFIG__LOWAMB; - } - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_multizone_hist_bins_update(Dev); - - } - -#ifdef VL53L1_LOG_ENABLE - if (status == VL53L1_ERROR_NONE) - VL53L1_print_histogram_bin_data( - &(pdev->hist_data), - "get_device_results():pdev->lldata.hist_data.", - VL53L1_TRACE_MODULE_HISTOGRAM_DATA); -#endif - - } else { - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_get_measurement_results( - Dev, - device_results_level); - - if (status == VL53L1_ERROR_NONE) - VL53L1_copy_sys_and_core_results_to_range_results( - (int32_t)pdev->gain_cal.standard_ranging_gain_factor, - &(pdev->sys_results), - &(pdev->core_results), - presults); - } - - - - presults->cfg_device_state = pdev->ll_state.cfg_device_state; - presults->rd_device_state = pdev->ll_state.rd_device_state; - presults->zone_id = pdev->ll_state.rd_zone_id; - - if (status == VL53L1_ERROR_NONE) { - - - - pres->zone_results.max_zones = VL53L1_MAX_USER_ZONES; - pres->zone_results.active_zones = pdev->zone_cfg.active_zones+1; - - if (pdev->ll_state.rd_zone_id < pres->zone_results.max_zones) { - - pobjects = - &(pres->zone_results.VL53L1_PRM_00005[pdev->ll_state.rd_zone_id]); - - pobjects->cfg_device_state = presults->cfg_device_state; - pobjects->rd_device_state = presults->rd_device_state; - pobjects->zone_id = presults->zone_id; - pobjects->stream_count = presults->stream_count; - - pobjects->max_objects = presults->max_results; - pobjects->active_objects = presults->active_results; - - for (i = 0; i < presults->active_results; i++) { - pobjects->VL53L1_PRM_00005[i].VL53L1_PRM_00023 = - presults->VL53L1_PRM_00005[i].VL53L1_PRM_00023; - pobjects->VL53L1_PRM_00005[i].VL53L1_PRM_00022 = - presults->VL53L1_PRM_00005[i].VL53L1_PRM_00022; - pobjects->VL53L1_PRM_00005[i].VL53L1_PRM_00014 = - presults->VL53L1_PRM_00005[i].VL53L1_PRM_00014; - } - } - } - - - - - memcpy( - prange_results, - presults, - sizeof(VL53L1_range_results_t)); - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_check_ll_driver_rd_state(Dev); - -#ifdef VL53L1_LOG_ENABLE - if (status == VL53L1_ERROR_NONE) - VL53L1_print_range_results( - presults, - "get_device_results():pdev->llresults.range_results.", - VL53L1_TRACE_MODULE_RANGE_RESULTS_DATA); -#endif - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_clear_interrupt_and_enable_next_range( - VL53L1_DEV Dev, - uint8_t measurement_mode) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_init_and_start_range( - Dev, - measurement_mode, - VL53L1_DEVICECONFIGLEVEL_GENERAL_ONWARDS); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_histogram_bin_data( - VL53L1_DEV Dev, - VL53L1_histogram_bin_data_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - VL53L1_zone_private_dyn_cfg_t *pzone_dyn_cfg; - - VL53L1_static_nvm_managed_t *pstat_nvm = &(pdev->stat_nvm); - VL53L1_static_config_t *pstat_cfg = &(pdev->stat_cfg); - VL53L1_general_config_t *pgen_cfg = &(pdev->gen_cfg); - VL53L1_timing_config_t *ptim_cfg = &(pdev->tim_cfg); - - uint8_t buffer[VL53L1_MAX_I2C_XFER_SIZE]; - uint8_t *pbuffer = &buffer[0]; - uint8_t bin_23_0 = 0x00; - uint16_t bin = 0; - uint16_t i2c_buffer_offset_bytes = 0; - uint16_t encoded_timeout = 0; - - uint32_t pll_period_us = 0; - uint32_t periods_elapsed_tmp = 0; - - uint8_t i = 0; - - LOG_FUNCTION_START(""); - - - - - - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_HISTOGRAM_BIN_DATA_I2C_INDEX, - pbuffer, - VL53L1_HISTOGRAM_BIN_DATA_I2C_SIZE_BYTES); - - - - - - - pdata->result__interrupt_status = *(pbuffer + 0); - pdata->result__range_status = *(pbuffer + 1); - pdata->result__report_status = *(pbuffer + 2); - pdata->result__stream_count = *(pbuffer + 3); - pdata->result__dss_actual_effective_spads = - VL53L1_i2c_decode_uint16_t(2, pbuffer + 4); - - - - - - - i2c_buffer_offset_bytes = \ - VL53L1_PHASECAL_RESULT__REFERENCE_PHASE - \ - VL53L1_HISTOGRAM_BIN_DATA_I2C_INDEX; - - pbuffer = &buffer[i2c_buffer_offset_bytes]; - - pdata->phasecal_result__reference_phase = - VL53L1_i2c_decode_uint16_t(2, pbuffer); - - i2c_buffer_offset_bytes = \ - VL53L1_PHASECAL_RESULT__VCSEL_START - \ - VL53L1_HISTOGRAM_BIN_DATA_I2C_INDEX; - - pdata->phasecal_result__vcsel_start = buffer[i2c_buffer_offset_bytes]; - - - - - pdev->dbg_results.phasecal_result__reference_phase = - pdata->phasecal_result__reference_phase; - pdev->dbg_results.phasecal_result__vcsel_start = - pdata->phasecal_result__vcsel_start; - - - - - - - - i2c_buffer_offset_bytes = \ - VL53L1_RESULT__HISTOGRAM_BIN_23_0_MSB - \ - VL53L1_HISTOGRAM_BIN_DATA_I2C_INDEX; - - bin_23_0 = buffer[i2c_buffer_offset_bytes] << 2; - - i2c_buffer_offset_bytes = \ - VL53L1_RESULT__HISTOGRAM_BIN_23_0_LSB - \ - VL53L1_HISTOGRAM_BIN_DATA_I2C_INDEX; - - bin_23_0 += buffer[i2c_buffer_offset_bytes]; - - i2c_buffer_offset_bytes = \ - VL53L1_RESULT__HISTOGRAM_BIN_23_0 - \ - VL53L1_HISTOGRAM_BIN_DATA_I2C_INDEX; - - buffer[i2c_buffer_offset_bytes] = bin_23_0; - - - - - - - - i2c_buffer_offset_bytes = \ - VL53L1_RESULT__HISTOGRAM_BIN_0_2 - \ - VL53L1_HISTOGRAM_BIN_DATA_I2C_INDEX; - - pbuffer = &buffer[i2c_buffer_offset_bytes]; - for (bin = 0 ; bin < VL53L1_HISTOGRAM_BUFFER_SIZE ; bin++) { - pdata->bin_data[bin] = - (int32_t)VL53L1_i2c_decode_uint32_t(3, pbuffer); - pbuffer += 3; - } - - - - pdata->zone_id = pdev->ll_state.rd_zone_id; - pdata->VL53L1_PRM_00015 = 0; - pdata->VL53L1_PRM_00016 = VL53L1_HISTOGRAM_BUFFER_SIZE; - pdata->VL53L1_PRM_00017 = VL53L1_HISTOGRAM_BUFFER_SIZE; - - pdata->cal_config__vcsel_start = pgen_cfg->cal_config__vcsel_start; - - - - - pdata->vcsel_width = - ((uint16_t)pgen_cfg->global_config__vcsel_width) << 4; - pdata->vcsel_width += - (uint16_t)pstat_cfg->ana_config__vcsel_pulse_width_offset; - - - - pdata->VL53L1_PRM_00018 = - pstat_nvm->osc_measured__fast_osc__frequency; - - - - - VL53L1_hist_get_bin_sequence_config(Dev, pdata); - - - - - - - if (pdev->ll_state.rd_timing_status == 0) { - - encoded_timeout = \ - (ptim_cfg->range_config__timeout_macrop_a_hi << 8) \ - + ptim_cfg->range_config__timeout_macrop_a_lo; - pdata->VL53L1_PRM_00007 = ptim_cfg->range_config__vcsel_period_a; - } else { - - encoded_timeout = \ - (ptim_cfg->range_config__timeout_macrop_b_hi << 8) \ - + ptim_cfg->range_config__timeout_macrop_b_lo; - pdata->VL53L1_PRM_00007 = ptim_cfg->range_config__vcsel_period_b; - } - - - - - pdata->number_of_ambient_bins = 0; - - for (i = 0; i < 6; i++) { - if ((pdata->bin_seq[i] & 0x07) == 0x07) { - pdata->number_of_ambient_bins = - pdata->number_of_ambient_bins + 0x04; - } - } - - pdata->total_periods_elapsed = - VL53L1_decode_timeout(encoded_timeout); - - - - - - - - pll_period_us = - VL53L1_calc_pll_period_us(pdata->VL53L1_PRM_00018); - - - - - periods_elapsed_tmp = pdata->total_periods_elapsed + 1; - - - - - - - pdata->peak_duration_us = - VL53L1_duration_maths( - pll_period_us, - (uint32_t)pdata->vcsel_width, - VL53L1_RANGING_WINDOW_VCSEL_PERIODS, - periods_elapsed_tmp); - - pdata->woi_duration_us = 0; - - - - - VL53L1_hist_calc_zero_distance_phase(pdata); - - - - - - - VL53L1_hist_estimate_ambient_from_ambient_bins(pdata); - - - - - pdata->cfg_device_state = pdev->ll_state.cfg_device_state; - pdata->rd_device_state = pdev->ll_state.rd_device_state; - - - - - pzone_dyn_cfg = &(pres->zone_dyn_cfgs.VL53L1_PRM_00005[pdata->zone_id]); - - pdata->roi_config__user_roi_centre_spad = - pzone_dyn_cfg->roi_config__user_roi_centre_spad; - pdata->roi_config__user_roi_requested_global_xy_size = - pzone_dyn_cfg->roi_config__user_roi_requested_global_xy_size; - - - - - switch (pdata->result__range_status & - VL53L1_RANGE_STATUS__RANGE_STATUS_MASK) { - - case VL53L1_DEVICEERROR_VCSELCONTINUITYTESTFAILURE: - case VL53L1_DEVICEERROR_VCSELWATCHDOGTESTFAILURE: - case VL53L1_DEVICEERROR_NOVHVVALUEFOUND: - case VL53L1_DEVICEERROR_USERROICLIP: - case VL53L1_DEVICEERROR_MULTCLIPFAIL: - status = VL53L1_ERROR_RANGE_ERROR; - break; - - } - - LOG_FUNCTION_END(status); - - return status; -} - - -void VL53L1_copy_sys_and_core_results_to_range_results( - int32_t gain_factor, - VL53L1_system_results_t *psys, - VL53L1_core_results_t *pcore, - VL53L1_range_results_t *presults) -{ - uint8_t i = 0; - - VL53L1_range_data_t *pdata; - int32_t range_mm = 0; - - LOG_FUNCTION_START(""); - - - - - presults->zone_id = 0; - presults->stream_count = psys->result__stream_count; - presults->wrap_dmax_mm = 0; - presults->max_results = VL53L1_MAX_RANGE_RESULTS; - presults->active_results = 1; - - for (i = 0 ; i < VL53L1_MAX_AMBIENT_DMAX_VALUES ; i++) - presults->ambient_dmax_mm[i] = 0; - - pdata = &(presults->VL53L1_PRM_00005[0]); - - for (i = 0 ; i < 2 ; i++) { - - pdata->range_id = i; - pdata->time_stamp = 0; - pdata->range_status = - psys->result__range_status & VL53L1_RANGE_STATUS__RANGE_STATUS_MASK; - - pdata->VL53L1_PRM_00010 = 0; - pdata->VL53L1_PRM_00015 = 0; - pdata->VL53L1_PRM_00019 = 0; - pdata->VL53L1_PRM_00020 = 0; - pdata->VL53L1_PRM_00011 = 0; - pdata->VL53L1_PRM_00021 = 0; - - switch (i) { - - case 0: - - if (psys->result__report_status == VL53L1_DEVICEREPORTSTATUS_MM1) - pdata->VL53L1_PRM_00003 = - psys->result__mm_inner_actual_effective_spads_sd0; - else if (psys->result__report_status == VL53L1_DEVICEREPORTSTATUS_MM2) - pdata->VL53L1_PRM_00003 = - psys->result__mm_outer_actual_effective_spads_sd0; - else - pdata->VL53L1_PRM_00003 = - psys->result__dss_actual_effective_spads_sd0; - - pdata->peak_signal_count_rate_mcps = - psys->result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0; - pdata->avg_signal_count_rate_mcps = - psys->result__avg_signal_count_rate_mcps_sd0; - pdata->ambient_count_rate_mcps = - psys->result__ambient_count_rate_mcps_sd0; - - pdata->VL53L1_PRM_00004 = - psys->result__sigma_sd0; - pdata->VL53L1_PRM_00014 = - psys->result__phase_sd0; - - range_mm = - (int32_t)psys->result__final_crosstalk_corrected_range_mm_sd0; - - - - range_mm *= gain_factor; - range_mm += 0x0400; - range_mm /= 0x0800; - - pdata->median_range_mm = (int16_t)range_mm; - - pdata->VL53L1_PRM_00022 = - pcore->result_core__ranging_total_events_sd0; - pdata->VL53L1_PRM_00009 = - pcore->result_core__signal_total_events_sd0; - pdata->total_periods_elapsed = - pcore->result_core__total_periods_elapsed_sd0; - pdata->VL53L1_PRM_00023 = - pcore->result_core__ambient_window_events_sd0; - - break; - case 1: - - pdata->VL53L1_PRM_00003 = - psys->result__dss_actual_effective_spads_sd1; - pdata->peak_signal_count_rate_mcps = - psys->result__peak_signal_count_rate_mcps_sd1; - pdata->avg_signal_count_rate_mcps = - 0xFFFF; - pdata->ambient_count_rate_mcps = - psys->result__ambient_count_rate_mcps_sd1; - - pdata->VL53L1_PRM_00004 = - psys->result__sigma_sd1; - pdata->VL53L1_PRM_00014 = - psys->result__phase_sd1; - - range_mm = - (int32_t)psys->result__final_crosstalk_corrected_range_mm_sd1; - - - - range_mm *= gain_factor; - range_mm += 0x0400; - range_mm /= 0x0800; - - pdata->median_range_mm = (int16_t)range_mm; - - pdata->VL53L1_PRM_00022 = - pcore->result_core__ranging_total_events_sd1; - pdata->VL53L1_PRM_00009 = - pcore->result_core__signal_total_events_sd1; - pdata->total_periods_elapsed = - pcore->result_core__total_periods_elapsed_sd1; - pdata->VL53L1_PRM_00023 = - pcore->result_core__ambient_window_events_sd1; - - break; - } - - - - - - pdata->VL53L1_PRM_00024 = pdata->VL53L1_PRM_00014; - pdata->VL53L1_PRM_00025 = pdata->VL53L1_PRM_00014; - pdata->min_range_mm = pdata->median_range_mm; - pdata->max_range_mm = pdata->median_range_mm; - - pdata++; - } - - LOG_FUNCTION_END(0); -} - - -VL53L1_Error VL53L1_set_zone_dss_config( - VL53L1_DEV Dev, - VL53L1_zone_private_dyn_cfg_t *pzone_dyn_cfg) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - if (pzone_dyn_cfg->dss_requested_effective_spad_count == 0) { - pdev->gen_cfg.dss_config__roi_mode_control = - VL53L1_DSS_CONTROL__MODE_TARGET_RATE; - } else { - pdev->gen_cfg.dss_config__roi_mode_control = - VL53L1_DSS_CONTROL__MODE_EFFSPADS; - pdev->gen_cfg.dss_config__manual_effective_spads_select = - pzone_dyn_cfg->dss_requested_effective_spad_count; - } - - LOG_FUNCTION_END(status); - return status; -} - - -VL53L1_Error VL53L1_calc_ambient_dmax( - VL53L1_DEV Dev, - uint16_t target_reflectance, - int16_t *pambient_dmax_mm) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - VL53L1_dmax_calibration_data_t dmax_cal; - VL53L1_dmax_calibration_data_t *pdmax_cal = &dmax_cal; - - LOG_FUNCTION_START(""); - - - - - - - status = - VL53L1_get_dmax_calibration_data( - Dev, - pdev->debug_mode, - pdev->ll_state.rd_zone_id, - pdmax_cal); - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_ipp_hist_ambient_dmax( - Dev, - target_reflectance, - &(pdev->fmt_dmax_cal), - &(pdev->dmax_cfg), - &(pdev->hist_data), - pambient_dmax_mm); - - LOG_FUNCTION_END(status); - - return status; -} - - - - - - -VL53L1_Error VL53L1_set_GPIO_interrupt_config( - VL53L1_DEV Dev, - VL53L1_GPIO_Interrupt_Mode intr_mode_distance, - VL53L1_GPIO_Interrupt_Mode intr_mode_rate, - uint8_t intr_new_measure_ready, - uint8_t intr_no_target, - uint8_t intr_combined_mode, - uint16_t thresh_distance_high, - uint16_t thresh_distance_low, - uint16_t thresh_rate_high, - uint16_t thresh_rate_low - ) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_GPIO_interrupt_config_t *pintconf = &(pdev->gpio_interrupt_config); - - LOG_FUNCTION_START(""); - - - - pintconf->intr_mode_distance = intr_mode_distance; - pintconf->intr_mode_rate = intr_mode_rate; - pintconf->intr_new_measure_ready = intr_new_measure_ready; - pintconf->intr_no_target = intr_no_target; - pintconf->intr_combined_mode = intr_combined_mode; - pintconf->threshold_distance_high = thresh_distance_high; - pintconf->threshold_distance_low = thresh_distance_low; - pintconf->threshold_rate_high = thresh_rate_high; - pintconf->threshold_rate_low = thresh_rate_low; - - - - pdev->gen_cfg.system__interrupt_config_gpio = - VL53L1_encode_GPIO_interrupt_config(pintconf); - - - - - status = VL53L1_set_GPIO_thresholds_from_struct( - Dev, - pintconf); - - LOG_FUNCTION_END(status); - return status; -} - - - - - - -VL53L1_Error VL53L1_set_GPIO_interrupt_config_struct( - VL53L1_DEV Dev, - VL53L1_GPIO_interrupt_config_t intconf) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_GPIO_interrupt_config_t *pintconf = &(pdev->gpio_interrupt_config); - - LOG_FUNCTION_START(""); - - - - memcpy(pintconf, &(intconf), sizeof(VL53L1_GPIO_interrupt_config_t)); - - - - pdev->gen_cfg.system__interrupt_config_gpio = - VL53L1_encode_GPIO_interrupt_config(pintconf); - - - - status = VL53L1_set_GPIO_thresholds_from_struct( - Dev, - pintconf); - - LOG_FUNCTION_END(status); - return status; -} - - - - - - -VL53L1_Error VL53L1_get_GPIO_interrupt_config( - VL53L1_DEV Dev, - VL53L1_GPIO_interrupt_config_t *pintconf) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - - - - pdev->gpio_interrupt_config = VL53L1_decode_GPIO_interrupt_config( - pdev->gen_cfg.system__interrupt_config_gpio); - - - - - - pdev->gpio_interrupt_config.threshold_distance_high = - pdev->dyn_cfg.system__thresh_high; - pdev->gpio_interrupt_config.threshold_distance_low = - pdev->dyn_cfg.system__thresh_low; - - pdev->gpio_interrupt_config.threshold_rate_high = - pdev->gen_cfg.system__thresh_rate_high; - pdev->gpio_interrupt_config.threshold_rate_low = - pdev->gen_cfg.system__thresh_rate_low; - - if (pintconf == &(pdev->gpio_interrupt_config)) { - - - } else { - - - - memcpy(pintconf, &(pdev->gpio_interrupt_config), - sizeof(VL53L1_GPIO_interrupt_config_t)); - } - - LOG_FUNCTION_END(status); - return status; -} - - -VL53L1_Error VL53L1_set_dmax_mode( - VL53L1_DEV Dev, - VL53L1_DeviceDmaxMode dmax_mode) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->dmax_mode = dmax_mode; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_dmax_mode( - VL53L1_DEV Dev, - VL53L1_DeviceDmaxMode *pdmax_mode) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *pdmax_mode = pdev->dmax_mode; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_dmax_calibration_data( - VL53L1_DEV Dev, - VL53L1_DeviceDmaxMode dmax_mode, - uint8_t zone_id, - VL53L1_dmax_calibration_data_t *pdmax_cal) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - LOG_FUNCTION_START(""); - - switch (dmax_mode) { - - case VL53L1_DEVICEDMAXMODE__PER_ZONE_CAL_DATA: - pdmax_cal->ref__actual_effective_spads = - (uint16_t)pres->zone_cal.VL53L1_PRM_00005[zone_id].effective_spads; - pdmax_cal->ref__peak_signal_count_rate_mcps = - (uint16_t)pres->zone_cal.VL53L1_PRM_00005[zone_id].peak_rate_mcps; - pdmax_cal->ref__distance_mm = - pres->zone_cal.cal_distance_mm; - pdmax_cal->ref_reflectance_pc = - pres->zone_cal.cal_reflectance_pc; - pdmax_cal->coverglass_transmission = 0x0100; - break; - - case VL53L1_DEVICEDMAXMODE__CUST_CAL_DATA: - memcpy( - pdmax_cal, - &(pdev->cust_dmax_cal), - sizeof(VL53L1_dmax_calibration_data_t)); - break; - - case VL53L1_DEVICEDMAXMODE__FMT_CAL_DATA: - memcpy( - pdmax_cal, - &(pdev->fmt_dmax_cal), - sizeof(VL53L1_dmax_calibration_data_t)); - break; - - default: - status = VL53L1_ERROR_INVALID_PARAMS; - break; - - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_hist_dmax_config( - VL53L1_DEV Dev, - VL53L1_hist_gen3_dmax_config_t *pdmax_cfg) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - memcpy( - &(pdev->dmax_cfg), - pdmax_cfg, - sizeof(VL53L1_hist_gen3_dmax_config_t)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_hist_dmax_config( - VL53L1_DEV Dev, - VL53L1_hist_gen3_dmax_config_t *pdmax_cfg) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - memcpy( - pdmax_cfg, - &(pdev->dmax_cfg), - sizeof(VL53L1_hist_gen3_dmax_config_t)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_offset_calibration_mode( - VL53L1_DEV Dev, - VL53L1_OffsetCalibrationMode offset_cal_mode) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->offset_calibration_mode = offset_cal_mode; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_offset_calibration_mode( - VL53L1_DEV Dev, - VL53L1_OffsetCalibrationMode *poffset_cal_mode) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *poffset_cal_mode = pdev->offset_calibration_mode; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_offset_correction_mode( - VL53L1_DEV Dev, - VL53L1_OffsetCorrectionMode offset_cor_mode) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->offset_correction_mode = offset_cor_mode; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_offset_correction_mode( - VL53L1_DEV Dev, - VL53L1_OffsetCorrectionMode *poffset_cor_mode) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - *poffset_cor_mode = pdev->offset_correction_mode; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_zone_calibration_data( - VL53L1_DEV Dev, - VL53L1_zone_calibration_results_t *pzone_cal) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverResults_t *pres = VL53L1DevStructGetLLResultsHandle(Dev); - - LOG_FUNCTION_START(""); - - - - memcpy( - &(pres->zone_cal), - pzone_cal, - sizeof(VL53L1_zone_calibration_results_t)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_zone_calibration_data( - VL53L1_DEV Dev, - VL53L1_zone_calibration_results_t *pzone_cal) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverResults_t *pres = VL53L1DevStructGetLLResultsHandle(Dev); - - LOG_FUNCTION_START(""); - - - - memcpy( - pzone_cal, - &(pres->zone_cal), - sizeof(VL53L1_zone_calibration_results_t)); - - LOG_FUNCTION_END(status); - - return status; -} - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_api_debug.c b/drivers/input/misc/vl53L1/src/vl53l1_api_debug.c deleted file mode 100644 index 558317721c55..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_api_debug.c +++ /dev/null @@ -1,3184 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_ll_device.h" -#include "vl53l1_register_structs.h" -#include "vl53l1_hist_structs.h" -#include "vl53l1_nvm_structs.h" -#include "vl53l1_nvm.h" -#include "vl53l1_core.h" -#include "vl53l1_api_debug.h" - -#ifdef VL53L1_LOG_ENABLE -#include "vl53l1_nvm_debug.h" -#endif - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_CORE, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_CORE, status, \ - fmt, ##__VA_ARGS__) - -#define trace_print(level, ...) \ - _LOG_TRACE_PRINT(trace_flags, \ - level, VL53L1_TRACE_FUNCTION_NONE, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_decode_calibration_data_buffer( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_calibration_data_t *pdata) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (sizeof(VL53L1_calibration_data_t) > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - memcpy(pdata, pbuffer, sizeof(VL53L1_calibration_data_t)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_nvm_debug_data( - VL53L1_DEV Dev, - VL53L1_decoded_nvm_data_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - status = VL53L1_read_nvm(Dev, 0, pdata); - -#ifdef VL53L1_LOG_ENABLE - if (status == VL53L1_ERROR_NONE) - VL53L1_print_decoded_nvm_data( - pdata, - "get_nvm_debug_data():pnvm_info.", - VL53L1_TRACE_MODULE_NVM_DATA); -#endif - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_histogram_debug_data( - VL53L1_DEV Dev, - VL53L1_histogram_bin_data_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - memcpy( - pdata, - &(pdev->hist_data), - sizeof(VL53L1_histogram_bin_data_t)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_xtalk_debug_data( - VL53L1_DEV Dev, - VL53L1_xtalk_debug_data_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - memcpy( - &(pdata->customer), - &(pdev->customer), - sizeof(VL53L1_customer_nvm_managed_t)); - - memcpy( - &(pdata->xtalk_cfg), - &(pdev->xtalk_cfg), - sizeof(VL53L1_xtalk_config_t)); - - memcpy( - &(pdata->hist_data), - &(pdev->hist_data), - sizeof(VL53L1_histogram_bin_data_t)); - - memcpy( - &(pdata->xtalk_shapes), - &(pdev->xtalk_shapes), - sizeof(VL53L1_xtalk_histogram_data_t)); - - memcpy( - &(pdata->xtalk_results), - &(pdev->xtalk_results), - sizeof(VL53L1_xtalk_range_results_t)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_offset_debug_data( - VL53L1_DEV Dev, - VL53L1_offset_debug_data_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - - - memcpy( - &(pdata->customer), - &(pdev->customer), - sizeof(VL53L1_customer_nvm_managed_t)); - - memcpy( - &(pdata->fmt_dmax_cal), - &(pdev->fmt_dmax_cal), - sizeof(VL53L1_dmax_calibration_data_t)); - - memcpy( - &(pdata->cust_dmax_cal), - &(pdev->cust_dmax_cal), - sizeof(VL53L1_dmax_calibration_data_t)); - - memcpy( - &(pdata->add_off_cal_data), - &(pdev->add_off_cal_data), - sizeof(VL53L1_additional_offset_cal_data_t)); - - memcpy( - &(pdata->offset_results), - &(pdev->offset_results), - sizeof(VL53L1_offset_range_results_t)); - - LOG_FUNCTION_END(status); - - return status; -} - -#ifdef VL53L1_LOG_ENABLE - -void VL53L1_signed_fixed_point_sprintf( - int32_t signed_fp_value, - uint8_t frac_bits, - uint16_t buf_size, - char *pbuffer) -{ - - - - - - uint32_t fp_value = 0; - uint32_t unity_fp_value = 0; - uint32_t sign_bit = 0; - uint32_t int_part = 0; - uint32_t frac_part = 0; - uint32_t dec_points = 0; - uint32_t dec_scaler = 0; - uint32_t dec_part = 0; - - uint64_t tmp_long_int = 0; - - char fmt[VL53L1_MAX_STRING_LENGTH]; - - SUPPRESS_UNUSED_WARNING(buf_size); - - - - - sign_bit = signed_fp_value >> 31; - - if (sign_bit > 0) { - fp_value = 0x80000000 - - (0x7FFFFFFF & (uint32_t)signed_fp_value); - } else - fp_value = (uint32_t)signed_fp_value; - - int_part = fp_value >> frac_bits; - unity_fp_value = 0x01 << frac_bits; - frac_part = fp_value & (unity_fp_value-1); - - - - - - dec_points = 2; - dec_scaler = 100; - - while (dec_scaler < unity_fp_value) { - dec_points++; - dec_scaler *= 10; - } - - - - if (sign_bit > 0) - sprintf(fmt, "-%%u.%%0%uu", dec_points); - else - sprintf(fmt, "%%u.%%0%uu", dec_points); - - - - - - tmp_long_int = (uint64_t)frac_part * (uint64_t)dec_scaler; - tmp_long_int += (uint64_t)unity_fp_value/2; - - tmp_long_int = do_division_u(tmp_long_int, (uint64_t)unity_fp_value); - - dec_part = (uint32_t)tmp_long_int; - - - - sprintf( - pbuffer, - fmt, - int_part, - dec_part); -} - - -void VL53L1_print_static_nvm_managed( - VL53L1_static_nvm_managed_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = 0x%02X\n", - pprefix, - "i2c_slave__device_address", - pdata->i2c_slave__device_address); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ana_config__vhv_ref_sel_vddpix", - pdata->ana_config__vhv_ref_sel_vddpix); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ana_config__vhv_ref_sel_vquench", - pdata->ana_config__vhv_ref_sel_vquench); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ana_config__reg_avdd1v2_sel", - pdata->ana_config__reg_avdd1v2_sel); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ana_config__fast_osc__trim", - pdata->ana_config__fast_osc__trim); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->osc_measured__fast_osc__frequency, - 12, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "osc_measured__fast_osc__frequency", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "vhv_config__timeout_macrop_loop_bound", - pdata->vhv_config__timeout_macrop_loop_bound); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "vhv_config__count_thresh", - pdata->vhv_config__count_thresh); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "vhv_config__offset", - pdata->vhv_config__offset); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "vhv_config__init", - pdata->vhv_config__init); -} - - -void VL53L1_print_customer_nvm_managed( - VL53L1_customer_nvm_managed_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_ref_0", - pdata->global_config__spad_enables_ref_0); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_ref_1", - pdata->global_config__spad_enables_ref_1); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_ref_2", - pdata->global_config__spad_enables_ref_2); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_ref_3", - pdata->global_config__spad_enables_ref_3); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_ref_4", - pdata->global_config__spad_enables_ref_4); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_ref_5", - pdata->global_config__spad_enables_ref_5); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__ref_en_start_select", - pdata->global_config__ref_en_start_select); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ref_spad_man__num_requested_ref_spads", - pdata->ref_spad_man__num_requested_ref_spads); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ref_spad_man__ref_location", - pdata->ref_spad_man__ref_location); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_compensation_plane_offset_kcps, - 9, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_compensation_plane_offset_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_compensation_x_plane_gradient_kcps, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_compensation_x_plane_gradient_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_compensation_y_plane_gradient_kcps, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_compensation_y_plane_gradient_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->ref_spad_char__total_rate_target_mcps, - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "ref_spad_char__total_rate_target_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__part_to_part_range_offset_mm, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__part_to_part_range_offset_mm", - fp_text); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "mm_config__inner_offset_mm", - pdata->mm_config__inner_offset_mm); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "mm_config__outer_offset_mm", - pdata->mm_config__outer_offset_mm); -} - - -void VL53L1_print_nvm_copy_data( - VL53L1_nvm_copy_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "identification__model_id", - pdata->identification__model_id); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "identification__module_type", - pdata->identification__module_type); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "identification__revision_id", - pdata->identification__revision_id); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "identification__module_id", - pdata->identification__module_id); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ana_config__fast_osc__trim_max", - pdata->ana_config__fast_osc__trim_max); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ana_config__fast_osc__freq_set", - pdata->ana_config__fast_osc__freq_set); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ana_config__vcsel_trim", - pdata->ana_config__vcsel_trim); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ana_config__vcsel_selion", - pdata->ana_config__vcsel_selion); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ana_config__vcsel_selion_max", - pdata->ana_config__vcsel_selion_max); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "protected_laser_safety__lock_bit", - pdata->protected_laser_safety__lock_bit); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "laser_safety__key", - pdata->laser_safety__key); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "laser_safety__key_ro", - pdata->laser_safety__key_ro); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "laser_safety__clip", - pdata->laser_safety__clip); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "laser_safety__mult", - pdata->laser_safety__mult); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_0", - pdata->global_config__spad_enables_rtn_0); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_1", - pdata->global_config__spad_enables_rtn_1); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_2", - pdata->global_config__spad_enables_rtn_2); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_3", - pdata->global_config__spad_enables_rtn_3); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_4", - pdata->global_config__spad_enables_rtn_4); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_5", - pdata->global_config__spad_enables_rtn_5); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_6", - pdata->global_config__spad_enables_rtn_6); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_7", - pdata->global_config__spad_enables_rtn_7); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_8", - pdata->global_config__spad_enables_rtn_8); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_9", - pdata->global_config__spad_enables_rtn_9); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_10", - pdata->global_config__spad_enables_rtn_10); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_11", - pdata->global_config__spad_enables_rtn_11); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_12", - pdata->global_config__spad_enables_rtn_12); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_13", - pdata->global_config__spad_enables_rtn_13); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_14", - pdata->global_config__spad_enables_rtn_14); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_15", - pdata->global_config__spad_enables_rtn_15); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_16", - pdata->global_config__spad_enables_rtn_16); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_17", - pdata->global_config__spad_enables_rtn_17); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_18", - pdata->global_config__spad_enables_rtn_18); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_19", - pdata->global_config__spad_enables_rtn_19); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_20", - pdata->global_config__spad_enables_rtn_20); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_21", - pdata->global_config__spad_enables_rtn_21); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_22", - pdata->global_config__spad_enables_rtn_22); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_23", - pdata->global_config__spad_enables_rtn_23); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_24", - pdata->global_config__spad_enables_rtn_24); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_25", - pdata->global_config__spad_enables_rtn_25); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_26", - pdata->global_config__spad_enables_rtn_26); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_27", - pdata->global_config__spad_enables_rtn_27); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_28", - pdata->global_config__spad_enables_rtn_28); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_29", - pdata->global_config__spad_enables_rtn_29); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_30", - pdata->global_config__spad_enables_rtn_30); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_config__spad_enables_rtn_31", - pdata->global_config__spad_enables_rtn_31); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "roi_config__mode_roi_centre_spad", - pdata->roi_config__mode_roi_centre_spad); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = 0x%02X\n", - pprefix, - "roi_config__mode_roi_xy_size", - pdata->roi_config__mode_roi_xy_size); -} - - -void VL53L1_print_histogram_bin_data( - VL53L1_histogram_bin_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - uint8_t i = 0; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "cfg_device_state", - pdata->cfg_device_state); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "rd_device_state", - pdata->rd_device_state); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00015", - pdata->VL53L1_PRM_00015); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00016", - pdata->VL53L1_PRM_00016); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00017", - pdata->VL53L1_PRM_00017); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "number_of_ambient_bins", - pdata->number_of_ambient_bins); - - for (i = 0 ; i < VL53L1_MAX_BIN_SEQUENCE_LENGTH ; i++) { - sprintf(ppre_text, "%sbin_seq[%u]", pprefix, i); - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->bin_seq[i]); - } - - for (i = 0 ; i < VL53L1_MAX_BIN_SEQUENCE_LENGTH ; i++) { - sprintf(ppre_text, "%sbin_rep[%u]", pprefix, i); - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->bin_rep[i]); - } - - for (i = 0 ; i < pdata->VL53L1_PRM_00017 ; i++) { - sprintf(ppre_text, "%sbin_data[%u]", pprefix, i); - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %d\n", - ppre_text, - pdata->bin_data[i]); - } - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "result__interrupt_status", - pdata->result__interrupt_status); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "result__range_status", - pdata->result__range_status); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "result__report_status", - pdata->result__report_status); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "result__stream_count", - pdata->result__stream_count); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->result__dss_actual_effective_spads, - 8, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "result__dss_actual_effective_spads", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->phasecal_result__reference_phase, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "phasecal_result__reference_phase", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "phasecal_result__vcsel_start", - pdata->phasecal_result__vcsel_start); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "cal_config__vcsel_start", - pdata->cal_config__vcsel_start); - - VL53L1_signed_fixed_point_sprintf( - (uint32_t)pdata->vcsel_width, - 4, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "vcsel_width", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00007", - pdata->VL53L1_PRM_00007); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00018, - 12, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "VL53L1_PRM_00018", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "total_periods_elapsed", - pdata->total_periods_elapsed); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "peak_duration_us", - pdata->peak_duration_us); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "woi_duration_us", - pdata->woi_duration_us); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "min_bin_value", - pdata->min_bin_value); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "max_bin_value", - pdata->max_bin_value); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->zero_distance_phase, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "zero_distance_phase", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "number_of_ambient_samples", - pdata->number_of_ambient_samples); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "ambient_events_sum", - pdata->ambient_events_sum); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "VL53L1_PRM_00026", - pdata->VL53L1_PRM_00026); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = 0x%02X\n", - pprefix, - "roi_config__user_roi_centre_spad", - pdata->roi_config__user_roi_centre_spad); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = 0x%02X\n", - pprefix, - "roi_config__user_roi_requested_global_xy_size", - pdata->roi_config__user_roi_requested_global_xy_size); -} - - -void VL53L1_print_xtalk_histogram_shape_data( - VL53L1_xtalk_histogram_shape_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - uint8_t i = 0; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00015", - pdata->VL53L1_PRM_00015); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00016", - pdata->VL53L1_PRM_00016); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00017", - pdata->VL53L1_PRM_00017); - - for (i = 0 ; i < pdata->VL53L1_PRM_00017 ; i++) { - - sprintf(ppre_text, "%sbin_data[%u]", pprefix, i); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->bin_data[i], - 10, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %s\n", - ppre_text, - fp_text); - } - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->phasecal_result__reference_phase, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "phasecal_result__reference_phase", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "phasecal_result__vcsel_start", - pdata->phasecal_result__vcsel_start); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "cal_config__vcsel_start", - pdata->cal_config__vcsel_start); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->vcsel_width, - 4, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "vcsel_width", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00018, - 12, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "VL53L1_PRM_00018", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->zero_distance_phase, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "zero_distance_phase", - fp_text); -} - - -void VL53L1_print_xtalk_histogram_data( - VL53L1_xtalk_histogram_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - - - sprintf(ppre_text, "%sxtalk_shape.", pprefix); - VL53L1_print_xtalk_histogram_shape_data( - &(pdata->xtalk_shape), - ppre_text, trace_flags); - - - - sprintf(ppre_text, "%sxtalk_hist_removed.", pprefix); - VL53L1_print_histogram_bin_data( - &(pdata->xtalk_hist_removed), - ppre_text, trace_flags); -} - - -void VL53L1_print_range_data( - VL53L1_range_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "range_id", - pdata->range_id); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "time_stamp", - pdata->time_stamp); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00010", - pdata->VL53L1_PRM_00010); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00015", - pdata->VL53L1_PRM_00015); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00019", - pdata->VL53L1_PRM_00019); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00020", - pdata->VL53L1_PRM_00020); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00011", - pdata->VL53L1_PRM_00011); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00021", - pdata->VL53L1_PRM_00021); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->width, - 4, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "width", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00027", - pdata->VL53L1_PRM_00027); - - - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->fast_osc_frequency, - 12, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "fast_osc_frequency", - fp_text); - - - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->zero_distance_phase, - 11, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "zero_distance_phase", - fp_text); - - - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00003, - 8, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "actual_effective_spad", - fp_text); - - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "total_periods_elapsed", - pdata->total_periods_elapsed); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "peak_duration_us", - pdata->peak_duration_us); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "woi_duration_us", - pdata->woi_duration_us); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "VL53L1_PRM_00023", - pdata->VL53L1_PRM_00023); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "VL53L1_PRM_00022", - pdata->VL53L1_PRM_00022); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "VL53L1_PRM_00009", - pdata->VL53L1_PRM_00009); - - - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->peak_signal_count_rate_mcps, - 7, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "peak_signal_count_rate_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->avg_signal_count_rate_mcps, - 7, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "avg_signal_count_rate_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->ambient_count_rate_mcps, - 7, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "ambient_count_rate_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->total_rate_per_spad_mcps, - 13, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "total_rate_per_spad_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00008, - 11, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "VL53L1_PRM_00008", - fp_text); - - - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00004, - 2, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "VL53L1_PRM_00004", - fp_text); - - - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00024, - 11, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "VL53L1_PRM_00024", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00014, - 11, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "VL53L1_PRM_00014", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00025, - 11, VL53L1_MAX_STRING_LENGTH, fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "VL53L1_PRM_00025", - fp_text); - - - - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "min_range_mm", - pdata->min_range_mm); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "median_range_mm", - pdata->median_range_mm); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "max_range_mm", - pdata->max_range_mm); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "range_status", - pdata->range_status); -} - - -void VL53L1_print_range_results( - VL53L1_range_results_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - uint8_t i = 0; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "cfg_device_state", - pdata->cfg_device_state); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "rd_device_state", - pdata->rd_device_state); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "zone_id", - pdata->zone_id); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "stream_count", - pdata->stream_count); - - for (i = 0 ; i < VL53L1_MAX_AMBIENT_DMAX_VALUES ; i++) { - sprintf( - ppre_text, - "%sambient_dmax_mm[%u]", - pprefix, i); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->ambient_dmax_mm[i]); - } - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "wrap_dmax_mm", - pdata->wrap_dmax_mm); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "max_results", - pdata->max_results); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "active_results", - pdata->active_results); - - for (i = 0 ; i < pdata->active_results ; i++) { - sprintf(ppre_text, "%sdata[%u].", pprefix, i); - VL53L1_print_range_data( - &pdata->VL53L1_PRM_00005[i], - ppre_text, trace_flags); - } -} - - -void VL53L1_print_offset_range_results( - VL53L1_offset_range_results_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - uint8_t i = 0; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "cal_distance_mm", - pdata->cal_distance_mm); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->cal_reflectance_pc, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "cal_reflectance_pc", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "cal_status", - pdata->cal_status); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "cal_report", - pdata->cal_report); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "max_results", - pdata->max_results); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "active_results", - pdata->active_results); - - for (i = 0 ; i < pdata->active_results ; i++) { - sprintf(ppre_text, "%sdata[%u].", pprefix, i); - VL53L1_print_offset_range_data( - &(pdata->VL53L1_PRM_00005[i]), - ppre_text, trace_flags); - } -} - - -void VL53L1_print_offset_range_data( - VL53L1_offset_range_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "preset_mode", - pdata->preset_mode); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "dss_config__roi_mode_control", - pdata->dss_config__roi_mode_control); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->dss_config__manual_effective_spads_select, - 8, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "dss_config__manual_effective_spads_select", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "no_of_samples", - pdata->no_of_samples); - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->effective_spads, - 8, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "effective_spads", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->peak_rate_mcps, - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "peak_rate_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00004, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "VL53L1_PRM_00004", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "median_range_mm", - pdata->median_range_mm); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "range_mm_offset", - pdata->range_mm_offset); -} - - -void VL53L1_print_cal_peak_rate_map( - VL53L1_cal_peak_rate_map_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - uint8_t i = 0; - uint8_t x = 0; - uint8_t y = 0; - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->cal_distance_mm, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "cal_distance_mm", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->cal_reflectance_pc, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "cal_reflectance_pc", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "max_samples", - pdata->max_samples); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "width", - pdata->width); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "height", - pdata->height); - - i = 0; - for (y = 0 ; y < pdata->height ; y++) { - for (x = 0 ; x < pdata->width ; x++) { - - sprintf(ppre_text, "%speak_rate_mcps[%u]", pprefix, i); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->peak_rate_mcps[i], - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %s\n", - ppre_text, - fp_text); - - i++; - } - } -} - - -void VL53L1_print_additional_offset_cal_data( - VL53L1_additional_offset_cal_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->result__mm_inner_actual_effective_spads, - 8, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "result__mm_inner_actual_effective_spads", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->result__mm_outer_actual_effective_spads, - 8, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "result__mm_outer_actual_effective_spads", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->result__mm_inner_peak_signal_count_rtn_mcps, - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "result__mm_inner_peak_signal_count_rtn_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->result__mm_outer_peak_signal_count_rtn_mcps, - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "result__mm_outer_peak_signal_count_rtn_mcps", - fp_text); -} - - -void VL53L1_print_gain_calibration_data( - VL53L1_gain_calibration_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->standard_ranging_gain_factor, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "standard_ranging_gain_factor", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->histogram_ranging_gain_factor, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "histogram_ranging_gain_factor", - fp_text); -} - - -void VL53L1_print_zone_calibration_data( - VL53L1_zone_calibration_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "no_of_samples", - pdata->no_of_samples); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->effective_spads, - 8, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "effective_spads", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->peak_rate_mcps, - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "peak_rate_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00014, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "VL53L1_PRM_00014", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->VL53L1_PRM_00004, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "VL53L1_PRM_00004", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->median_range_mm, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "median_range_mm", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->range_mm_offset, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "range_mm_offset", - fp_text); -} - - -void VL53L1_print_zone_calibration_results( - VL53L1_zone_calibration_results_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - uint8_t i = 0; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "preset_mode", - pdata->preset_mode); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "zone_preset", - pdata->zone_preset); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "cal_distance_mm", - pdata->cal_distance_mm); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->cal_reflectance_pc, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "cal_reflectance_pc", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->phasecal_result__reference_phase, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "phasecal_result__reference_phase", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->zero_distance_phase, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "zero_distance_phase", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "cal_status", - pdata->cal_status); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "max_zones", - pdata->max_zones); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "active_zones", - pdata->active_zones); - - for (i = 0 ; i < pdata->active_zones ; i++) { - sprintf(ppre_text, "%sdata[%u].", pprefix, i); - VL53L1_print_zone_calibration_data( - &(pdata->VL53L1_PRM_00005[i]), - ppre_text, trace_flags); - } -} - -void VL53L1_print_xtalk_range_results( - VL53L1_xtalk_range_results_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - uint8_t i = 0; - - VL53L1_histogram_bin_data_t *pbin_data; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "cal_status", - pdata->cal_status); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "num_of_samples_status", - pdata->num_of_samples_status); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "zero_samples_status", - pdata->zero_samples_status); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "max_sigma_status", - pdata->max_sigma_status); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "max_results", - pdata->max_results); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "active_results", - pdata->active_results); - - for (i = 0 ; i < pdata->active_results ; i++) { - sprintf(ppre_text, "%sdata[%u].", pprefix, i); - VL53L1_print_xtalk_range_data( - &(pdata->VL53L1_PRM_00005[i]), - ppre_text, trace_flags); - } - - sprintf(ppre_text, "%scentral_histogram_sum.", pprefix); - VL53L1_print_histogram_bin_data( - &pdata->central_histogram_sum, - ppre_text, trace_flags); - - sprintf(ppre_text, "%scentral_histogram_avg.", pprefix); - VL53L1_print_histogram_bin_data( - &pdata->central_histogram_avg, - ppre_text, trace_flags); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00010", - pdata->central_histogram__window_start); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "VL53L1_PRM_00011", - pdata->central_histogram__window_end); - - pbin_data = &(pdata->histogram_avg_1[0]); - - for (i = 0 ; i < 5 ; i++) { - sprintf(ppre_text, "%shistogram_avg_1[%u].", pprefix, i); - VL53L1_print_histogram_bin_data( - pbin_data, - ppre_text, trace_flags); - pbin_data++; - } - - pbin_data = &(pdata->histogram_avg_2[0]); - - for (i = 0 ; i < 5 ; i++) { - sprintf(ppre_text, "%shistogram_avg_2[%u].", pprefix, i); - VL53L1_print_histogram_bin_data( - pbin_data, - ppre_text, trace_flags); - pbin_data++; - } - - pbin_data = &(pdata->xtalk_avg[0]); - - for (i = 0 ; i < 5 ; i++) { - sprintf(ppre_text, "%sxtalk_avg[%u].", pprefix, i); - VL53L1_print_histogram_bin_data( - pbin_data, - ppre_text, trace_flags); - pbin_data++; - } -} - - -void VL53L1_print_xtalk_range_data( - VL53L1_xtalk_range_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "no_of_samples", - pdata->no_of_samples); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "signal_total_events_sum", - pdata->signal_total_events_sum); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "signal_total_events_avg", - pdata->signal_total_events_avg); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->rate_per_spad_kcps_sum, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "rate_per_spad_kcps_sum", - fp_text); - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->rate_per_spad_kcps_avg, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "rate_per_spad_kcps_avg", - fp_text); -} - - -void VL53L1_print_xtalk_calibration_results( - VL53L1_xtalk_calibration_results_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_compensation_plane_offset_kcps, - 9, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_compensation_plane_offset_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_compensation_x_plane_gradient_kcps, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_compensation_x_plane_gradient_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_compensation_y_plane_gradient_kcps, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_compensation_y_plane_gradient_kcps", - fp_text); -} - - -void VL53L1_print_xtalk_config( - VL53L1_xtalk_config_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_compensation_plane_offset_kcps, - 9, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_compensation_plane_offset_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_compensation_x_plane_gradient_kcps, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_compensation_x_plane_gradient_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_compensation_y_plane_gradient_kcps, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_compensation_y_plane_gradient_kcps", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "global_crosstalk_compensation_enable", - pdata->global_crosstalk_compensation_enable); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->histogram_mode_crosstalk_margin_kcps, - 9, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "histogram_mode_crosstalk_margin_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->lite_mode_crosstalk_margin_kcps, - 9, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "lite_mode_crosstalk_margin_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->crosstalk_range_ignore_threshold_mult, - 5, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "crosstalk_range_ignore_threshold_mult", - fp_text); - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->crosstalk_range_ignore_threshold_rate_mcps, - 13, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "crosstalk_range_ignore_threshold_rate_mcps", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "algo__crosstalk_detect_max_valid_range_mm", - pdata->algo__crosstalk_detect_max_valid_range_mm); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "algo__crosstalk_detect_min_valid_range_mm", - pdata->algo__crosstalk_detect_min_valid_range_mm); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_detect_max_valid_rate_kcps, - 9, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_detect_max_valid_rate_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->algo__crosstalk_detect_max_sigma_mm, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "algo__crosstalk_detect_max_sigma_mm", - fp_text); - -} - - -void VL53L1_print_dmax_calibration_data( - VL53L1_dmax_calibration_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->ref__actual_effective_spads, - 8, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "ref__actual_effective_spads", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->ref__peak_signal_count_rate_mcps, - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "ref__peak_signal_count_rate_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->ref__distance_mm, - 4, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "ref__distance_mm", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->ref_reflectance_pc, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "ref_reflectance_pc", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->coverglass_transmission, - 8, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "coverglass_transmission", - fp_text); -} - - -void VL53L1_print_calibration_data( - VL53L1_calibration_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = 0x%08X\n", - pprefix, - "struct_version", - pdata->struct_version); - - sprintf(ppre_text, "%scustomer.", pprefix); - VL53L1_print_customer_nvm_managed( - &(pdata->customer), - ppre_text, trace_flags); - - sprintf(ppre_text, "%sfmt_dmax_cal.", pprefix); - VL53L1_print_dmax_calibration_data( - &(pdata->fmt_dmax_cal), - ppre_text, trace_flags); - - sprintf(ppre_text, "%scust_dmax_cal.", pprefix); - VL53L1_print_dmax_calibration_data( - &(pdata->cust_dmax_cal), - ppre_text, trace_flags); - - sprintf(ppre_text, "%sadd_off_cal_data.", pprefix); - VL53L1_print_additional_offset_cal_data( - &(pdata->add_off_cal_data), - ppre_text, trace_flags); - - sprintf(ppre_text, "%smm_roi.", pprefix); - VL53L1_print_user_zone( - &(pdata->mm_roi), - ppre_text, trace_flags); - - sprintf(ppre_text, "%sxtalkhisto.", pprefix); - VL53L1_print_xtalk_histogram_data( - &(pdata->xtalkhisto), - ppre_text, trace_flags); - - sprintf(ppre_text, "%sgain_cal.", pprefix); - VL53L1_print_gain_calibration_data( - &(pdata->gain_cal), - ppre_text, trace_flags); - - sprintf(ppre_text, "%scal_peak_rate_map.", pprefix); - VL53L1_print_cal_peak_rate_map( - &(pdata->cal_peak_rate_map), - ppre_text, trace_flags); -} - - -void VL53L1_print_xtalk_debug_data( - VL53L1_xtalk_debug_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - sprintf(ppre_text, "%scustomer.", pprefix); - VL53L1_print_customer_nvm_managed( - &(pdata->customer), - ppre_text, trace_flags); - - sprintf(ppre_text, "%sxtalk_cfg.", pprefix); - VL53L1_print_xtalk_config( - &(pdata->xtalk_cfg), - ppre_text, trace_flags); - - sprintf(ppre_text, "%shist_data.", pprefix); - VL53L1_print_histogram_bin_data( - &(pdata->hist_data), - ppre_text, trace_flags); - - sprintf(ppre_text, "%sxtalk_shapes.", pprefix); - VL53L1_print_xtalk_histogram_data( - &(pdata->xtalk_shapes), - ppre_text, trace_flags); - - sprintf(ppre_text, "%sgain_cal.", pprefix); - VL53L1_print_xtalk_range_results( - &(pdata->xtalk_results), - ppre_text, trace_flags); -} - - -void VL53L1_print_offset_debug_data( - VL53L1_offset_debug_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - sprintf(ppre_text, "%scustomer.", pprefix); - VL53L1_print_customer_nvm_managed( - &(pdata->customer), - ppre_text, trace_flags); - - sprintf(ppre_text, "%sfmt_dmax_cal.", pprefix); - VL53L1_print_dmax_calibration_data( - &(pdata->fmt_dmax_cal), - ppre_text, trace_flags); - - sprintf(ppre_text, "%scust_dmax_cal.", pprefix); - VL53L1_print_dmax_calibration_data( - &(pdata->cust_dmax_cal), - ppre_text, trace_flags); - - sprintf(ppre_text, "%sadd_off_cal_data.", pprefix); - VL53L1_print_additional_offset_cal_data( - &(pdata->add_off_cal_data), - ppre_text, trace_flags); - - sprintf(ppre_text, "%soffset_results.", pprefix); - VL53L1_print_offset_range_results( - &(pdata->offset_results), - ppre_text, trace_flags); -} - - -void VL53L1_print_zone_config( - VL53L1_zone_config_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - uint8_t i = 0; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "max_zones", - pdata->max_zones); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "active_zones", - pdata->active_zones); - - for (i = 0; i < pdata->active_zones; i++) { - sprintf(ppre_text, "%suser_zones[%u].", pprefix, i); - VL53L1_print_user_zone( - &pdata->user_zones[i], - ppre_text, - trace_flags); - } -} - - -void VL53L1_print_user_zone( - VL53L1_user_zone_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "x_centre", - pdata->x_centre); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "y_centre", - pdata->y_centre); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "width", - pdata->width); - - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "height", - pdata->height); -} - - -void VL53L1_print_spad_rate_data( - VL53L1_spad_rate_data_t *pspad_rates, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - - uint16_t spad_no = 0; - uint8_t row = 0; - uint8_t col = 0; - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%8s,%4s,%4s, %s\n", - pprefix, - "spad_no", - "row", - "col", - "peak_rate_mcps"); - - for (spad_no = 0 ; spad_no < pspad_rates->no_of_values ; spad_no++) { - - - - VL53L1_decode_row_col( - (uint8_t)spad_no, - &row, - &col); - - - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pspad_rates->rate_data[spad_no], - pspad_rates->fractional_bits, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - - - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%8u,%4u,%4u, %s\n", - pprefix, - spad_no, - row, - col, - fp_text); - } -} - - -void VL53L1_print_spad_rate_map( - VL53L1_spad_rate_data_t *pspad_rates, - char *pprefix, - uint32_t trace_flags) -{ - - - - - - - uint8_t spad_no = 0; - uint8_t row = 0; - uint8_t col = 0; - - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%4s", - pprefix, - " "); - - for (col = 0 ; col < VL53L1_SPAD_ARRAY_WIDTH ; col++) - trace_print( - VL53L1_TRACE_LEVEL_INFO, - ",%8u", - col); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "\n"); - - - - - for (row = 0 ; row < VL53L1_SPAD_ARRAY_HEIGHT ; row++) { - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%4u", - pprefix, - row); - - for (col = 0 ; col < VL53L1_SPAD_ARRAY_HEIGHT ; col++) { - - - - - VL53L1_encode_row_col( - row, - col, - &spad_no); - - - - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pspad_rates->rate_data[spad_no], - pspad_rates->fractional_bits, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - - - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - ",%8s", - fp_text); - } - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "\n"); - } -} - - -#endif - - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_api_preset_modes.c b/drivers/input/misc/vl53L1/src/vl53l1_api_preset_modes.c deleted file mode 100644 index 8a637da6d4d0..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_api_preset_modes.c +++ /dev/null @@ -1,4086 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_platform_log.h" -#include "vl53l1_register_structs.h" -#include "vl53l1_register_settings.h" -#include "vl53l1_hist_structs.h" -#include "vl53l1_zone_presets.h" -#include "vl53l1_core.h" -#include "vl53l1_api_preset_modes.h" - - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_API, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_API, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_API, status, fmt, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_init_refspadchar_config_struct( - VL53L1_refspadchar_config_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - - - - - - pdata->device_test_mode = - VL53L1_DEVICETESTMODE_REF_SPAD_CHAR_WITH_PRE_VHV; - pdata->VL53L1_PRM_00007 = 0x0B; - pdata->timeout_us = 1000; - pdata->target_count_rate_mcps = 0x0A00; - pdata->min_count_rate_limit_mcps = 0x0500; - pdata->max_count_rate_limit_mcps = 0x1400; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_init_ssc_config_struct( - VL53L1_ssc_config_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - - - pdata->array_select = VL53L1_DEVICESSCARRAY_RTN; - - - - pdata->VL53L1_PRM_00007 = 0x12; - - - - pdata->vcsel_start = 0x0F; - - - - pdata->vcsel_start = 0x02; - - - - pdata->timeout_us = 36000; - - - - - - - pdata->rate_limit_mcps = 0x000C; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_init_xtalk_config_struct( - VL53L1_customer_nvm_managed_t *pnvm, - VL53L1_xtalk_config_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - - - - - - - - - - - pdata->algo__crosstalk_compensation_plane_offset_kcps = - pnvm->algo__crosstalk_compensation_plane_offset_kcps; - pdata->algo__crosstalk_compensation_x_plane_gradient_kcps = - pnvm->algo__crosstalk_compensation_x_plane_gradient_kcps; - pdata->algo__crosstalk_compensation_y_plane_gradient_kcps = - pnvm->algo__crosstalk_compensation_y_plane_gradient_kcps; - - - - - pdata->nvm_default__crosstalk_compensation_plane_offset_kcps = - pnvm->algo__crosstalk_compensation_plane_offset_kcps; - pdata->nvm_default__crosstalk_compensation_x_plane_gradient_kcps = - pnvm->algo__crosstalk_compensation_x_plane_gradient_kcps; - pdata->nvm_default__crosstalk_compensation_y_plane_gradient_kcps = - pnvm->algo__crosstalk_compensation_y_plane_gradient_kcps; - - pdata->histogram_mode_crosstalk_margin_kcps = - 0x00; - pdata->lite_mode_crosstalk_margin_kcps = - 0x00; - - - - - pdata->crosstalk_range_ignore_threshold_mult = 64; - - if ((pdata->algo__crosstalk_compensation_plane_offset_kcps == 0x00) - && (pdata->algo__crosstalk_compensation_x_plane_gradient_kcps == 0x00) - && (pdata->algo__crosstalk_compensation_y_plane_gradient_kcps == 0x00)) - pdata->global_crosstalk_compensation_enable = 0x00; - else - pdata->global_crosstalk_compensation_enable = 0x01; - - - if ((status == VL53L1_ERROR_NONE) && - (pdata->global_crosstalk_compensation_enable == 0x01)) { - pdata->crosstalk_range_ignore_threshold_rate_mcps = - VL53L1_calc_range_ignore_threshold( - pdata->algo__crosstalk_compensation_plane_offset_kcps, - pdata->algo__crosstalk_compensation_x_plane_gradient_kcps, - pdata->algo__crosstalk_compensation_y_plane_gradient_kcps, - pdata->crosstalk_range_ignore_threshold_mult); - } else { - pdata->crosstalk_range_ignore_threshold_rate_mcps = 0; - } - - - - - - - - - - pdata->algo__crosstalk_detect_min_valid_range_mm = -50; - pdata->algo__crosstalk_detect_max_valid_range_mm = 50; - pdata->algo__crosstalk_detect_max_valid_rate_kcps = 0xC800; - pdata->algo__crosstalk_detect_max_sigma_mm = - VL53L1_XTALK_EXTRACT_MAX_SIGMA_MM; - - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_init_hist_post_process_config_struct( - uint8_t xtalk_compensation_enable, - VL53L1_hist_post_process_config_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - pdata->hist_algo_select = - VL53L1_HIST_ALGO_SELECT__PW_HIST_GEN4; - - pdata->hist_target_order = - VL53L1_HIST_TARGET_ORDER__INCREASING_DISTANCE; - - - - - pdata->filter_woi0 = 1; - - pdata->filter_woi1 = 2; - - - pdata->hist_amb_est_method = - VL53L1_HIST_AMB_EST_METHOD__AMBIENT_BINS; - pdata->ambient_thresh_sigma0 = 80; - - pdata->ambient_thresh_sigma1 = 112; - - pdata->min_ambient_thresh_events = 16; - - - pdata->noise_threshold = 50; - - - pdata->signal_total_events_limit = 100; - - pdata->sigma_estimator__sigma_ref_mm = 1; - - - - - - - - - - - - - - - pdata->sigma_thresh = 160; - - pdata->range_offset_mm = 0; - - - pdata->gain_factor = 0x0800; - - - - - - - - - - - - - - - - pdata->valid_phase_low = 0x08; - pdata->valid_phase_high = 0x88; - - - - - - - - - - pdata->algo__consistency_check__phase_tolerance = 8; - - - - - - - - pdata->algo__consistency_check__event_sigma = 112; - - - - pdata->algo__crosstalk_compensation_enable = xtalk_compensation_enable; - - - - - - - - pdata->algo__crosstalk_detect_min_valid_range_mm = -50; - pdata->algo__crosstalk_detect_max_valid_range_mm = 50; - pdata->algo__crosstalk_detect_max_valid_rate_kcps = 0xC800; - pdata->algo__crosstalk_detect_max_sigma_mm = - VL53L1_XTALK_EXTRACT_MAX_SIGMA_MM; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_init_dmax_calibration_data_struct( - VL53L1_dmax_calibration_data_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - pdata->ref__actual_effective_spads = 0x5F2D; - - - pdata->ref__peak_signal_count_rate_mcps = 0x0844; - - - pdata->ref__distance_mm = 0x08A5; - - - - - - - - - pdata->ref_reflectance_pc = 0x000F; - - - - pdata->coverglass_transmission = 0x0100; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_init_hist_gen3_dmax_config_struct( - VL53L1_hist_gen3_dmax_config_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - pdata->dss_config__target_total_rate_mcps = 0x1400; - pdata->dss_config__aperture_attenuation = 0x38; - - pdata->signal_thresh_sigma = 0x20; - pdata->ambient_thresh_sigma = 0x70; - pdata->min_ambient_thresh_events = 16; - pdata->estimated_spad_yield = 85; - - - - - - - - - - - - pdata->target_reflectance_for_dmax_calc[0] = 15; - pdata->target_reflectance_for_dmax_calc[1] = 52; - pdata->target_reflectance_for_dmax_calc[2] = 200; - pdata->target_reflectance_for_dmax_calc[3] = 364; - pdata->target_reflectance_for_dmax_calc[4] = 400; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_standard_ranging( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - pstatic->dss_config__target_total_rate_mcps = 0x0A00; - pstatic->debug__ctrl = 0x00; - pstatic->test_mode__ctrl = 0x00; - pstatic->clk_gating__ctrl = 0x00; - pstatic->nvm_bist__ctrl = 0x00; - pstatic->nvm_bist__num_nvm_words = 0x00; - pstatic->nvm_bist__start_address = 0x00; - pstatic->host_if__status = 0x00; - pstatic->pad_i2c_hv__config = 0x00; - pstatic->pad_i2c_hv__extsup_config = 0x00; - - - - - - - pstatic->gpio_hv_pad__ctrl = 0x00; - - - - - - - - - pstatic->gpio_hv_mux__ctrl = \ - VL53L1_DEVICEINTERRUPTPOLARITY_ACTIVE_LOW | \ - VL53L1_DEVICEGPIOMODE_OUTPUT_RANGE_AND_ERROR_INTERRUPTS; - - pstatic->gpio__tio_hv_status = 0x02; - pstatic->gpio__fio_hv_status = 0x00; - pstatic->ana_config__spad_sel_pswidth = 0x02; - pstatic->ana_config__vcsel_pulse_width_offset = 0x08; - pstatic->ana_config__fast_osc__config_ctrl = 0x00; - - pstatic->sigma_estimator__effective_pulse_width_ns = 0x08; - pstatic->sigma_estimator__effective_ambient_width_ns = 0x10; - pstatic->sigma_estimator__sigma_ref_mm = 0x01; - - - pstatic->algo__crosstalk_compensation_valid_height_mm = 0x01; - pstatic->spare_host_config__static_config_spare_0 = 0x00; - pstatic->spare_host_config__static_config_spare_1 = 0x00; - - pstatic->algo__range_ignore_threshold_mcps = 0x0000; - - - - pstatic->algo__range_ignore_valid_height_mm = 0xff; - pstatic->algo__range_min_clip = 0x00; - - - - - - - pstatic->algo__consistency_check__tolerance = 0x02; - pstatic->spare_host_config__static_config_spare_2 = 0x00; - pstatic->sd_config__reset_stages_msb = 0x00; - pstatic->sd_config__reset_stages_lsb = 0x00; - - pgeneral->gph_config__stream_count_update_value = 0x00; - pgeneral->global_config__stream_divider = 0x00; - pgeneral->system__interrupt_config_gpio = - VL53L1_INTERRUPT_CONFIG_NEW_SAMPLE_READY; - pgeneral->cal_config__vcsel_start = 0x0B; - - - - - - - - - pgeneral->cal_config__repeat_rate = 0; - pgeneral->global_config__vcsel_width = 0x02; - - - pgeneral->phasecal_config__timeout_macrop = 0x0D; - - - pgeneral->phasecal_config__target = 0x21; - pgeneral->phasecal_config__override = 0x00; - pgeneral->dss_config__roi_mode_control = - VL53L1_DEVICEDSSMODE__TARGET_RATE; - - - pgeneral->system__thresh_rate_high = 0x0000; - pgeneral->system__thresh_rate_low = 0x0000; - - - pgeneral->dss_config__manual_effective_spads_select = 0x8C00; - pgeneral->dss_config__manual_block_select = 0x00; - - - - - - - - - pgeneral->dss_config__aperture_attenuation = 0x38; - pgeneral->dss_config__max_spads_limit = 0xFF; - pgeneral->dss_config__min_spads_limit = 0x01; - - - - - ptiming->mm_config__timeout_macrop_a_hi = 0x00; - ptiming->mm_config__timeout_macrop_a_lo = 0x06; - ptiming->mm_config__timeout_macrop_b_hi = 0x00; - ptiming->mm_config__timeout_macrop_b_lo = 0x06; - ptiming->range_config__timeout_macrop_a_hi = 0x02; - ptiming->range_config__timeout_macrop_a_lo = 0x85; - - - ptiming->range_config__vcsel_period_a = 0x0B; - ptiming->range_config__timeout_macrop_b_hi = 0x01; - ptiming->range_config__timeout_macrop_b_lo = 0x92; - - - ptiming->range_config__vcsel_period_b = 0x09; - - - - - - - - ptiming->range_config__sigma_thresh = 0x003C; - - - - - - - ptiming->range_config__min_count_rate_rtn_limit_mcps = 0x0080; - - - - - - - ptiming->range_config__valid_phase_low = 0x08; - ptiming->range_config__valid_phase_high = 0x78; - ptiming->system__intermeasurement_period = 0x00000000; - ptiming->system__fractional_enable = 0x00; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - phistogram->histogram_config__low_amb_even_bin_0_1 = 0x07; - phistogram->histogram_config__low_amb_even_bin_2_3 = 0x21; - phistogram->histogram_config__low_amb_even_bin_4_5 = 0x43; - - phistogram->histogram_config__low_amb_odd_bin_0_1 = 0x10; - phistogram->histogram_config__low_amb_odd_bin_2_3 = 0x32; - phistogram->histogram_config__low_amb_odd_bin_4_5 = 0x54; - - phistogram->histogram_config__mid_amb_even_bin_0_1 = 0x07; - phistogram->histogram_config__mid_amb_even_bin_2_3 = 0x21; - phistogram->histogram_config__mid_amb_even_bin_4_5 = 0x43; - - phistogram->histogram_config__mid_amb_odd_bin_0_1 = 0x10; - phistogram->histogram_config__mid_amb_odd_bin_2 = 0x02; - phistogram->histogram_config__mid_amb_odd_bin_3_4 = 0x43; - phistogram->histogram_config__mid_amb_odd_bin_5 = 0x05; - - phistogram->histogram_config__user_bin_offset = 0x00; - - phistogram->histogram_config__high_amb_even_bin_0_1 = 0x07; - phistogram->histogram_config__high_amb_even_bin_2_3 = 0x21; - phistogram->histogram_config__high_amb_even_bin_4_5 = 0x43; - - phistogram->histogram_config__high_amb_odd_bin_0_1 = 0x10; - phistogram->histogram_config__high_amb_odd_bin_2_3 = 0x32; - phistogram->histogram_config__high_amb_odd_bin_4_5 = 0x54; - - phistogram->histogram_config__amb_thresh_low = 0xFFFF; - phistogram->histogram_config__amb_thresh_high = 0xFFFF; - - phistogram->histogram_config__spad_array_selection = 0x00; - - - - - - - - - pzone_cfg->max_zones = VL53L1_MAX_USER_ZONES; - pzone_cfg->active_zones = 0x00; - pzone_cfg->user_zones[0].height = 0x0f; - pzone_cfg->user_zones[0].width = 0x0f; - pzone_cfg->user_zones[0].x_centre = 0x08; - pzone_cfg->user_zones[0].y_centre = 0x08; - - - - - pdynamic->system__grouped_parameter_hold_0 = 0x01; - - pdynamic->system__thresh_high = 0x0000; - pdynamic->system__thresh_low = 0x0000; - pdynamic->system__enable_xtalk_per_quadrant = 0x00; - pdynamic->system__seed_config = - VL53L1_SYSTEM__SEED_CONFIG__EVEN_UPDATE_ONLY; - - - pdynamic->sd_config__woi_sd0 = 0x0B; - - - pdynamic->sd_config__woi_sd1 = 0x09; - pdynamic->sd_config__initial_phase_sd0 = 0x0A; - pdynamic->sd_config__initial_phase_sd1 = 0x0A; - - pdynamic->system__grouped_parameter_hold_1 = 0x01; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pdynamic->sd_config__first_order_select = 0x00; - pdynamic->sd_config__quantifier = 0x02; - - - - - - - pdynamic->roi_config__user_roi_centre_spad = 0xC7; - - - pdynamic->roi_config__user_roi_requested_global_xy_size = 0xFF; - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM2_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - - pdynamic->system__grouped_parameter_hold = 0x02; - - - - - - psystem->system__stream_count_ctrl = 0x00; - psystem->firmware__enable = 0x01; - psystem->system__interrupt_clear = \ - VL53L1_CLEAR_RANGE_INT; - - psystem->system__mode_start = \ - VL53L1_DEVICESCHEDULERMODE_STREAMING | \ - VL53L1_DEVICEREADOUTMODE_SINGLE_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_standard_ranging_short_range( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - status = VL53L1_preset_mode_standard_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - - - - - - ptiming->range_config__vcsel_period_a = 0x07; - ptiming->range_config__vcsel_period_b = 0x05; - ptiming->range_config__sigma_thresh = 0x0050; - ptiming->range_config__min_count_rate_rtn_limit_mcps = 0x0020; - ptiming->range_config__valid_phase_low = 0x08; - ptiming->range_config__valid_phase_high = 0x38; - - - - - - - - pdynamic->sd_config__woi_sd0 = 0x07; - pdynamic->sd_config__woi_sd1 = 0x05; - pdynamic->sd_config__initial_phase_sd0 = 0x06; - pdynamic->sd_config__initial_phase_sd1 = 0x06; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_standard_ranging_long_range( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - status = VL53L1_preset_mode_standard_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - - - - - - ptiming->range_config__vcsel_period_a = 0x0F; - ptiming->range_config__vcsel_period_b = 0x0D; - ptiming->range_config__sigma_thresh = 0x0050; - ptiming->range_config__min_count_rate_rtn_limit_mcps = 0x0020; - ptiming->range_config__valid_phase_low = 0x08; - ptiming->range_config__valid_phase_high = 0xB8; - - - - - - - - pdynamic->sd_config__woi_sd0 = 0x0F; - pdynamic->sd_config__woi_sd1 = 0x0D; - pdynamic->sd_config__initial_phase_sd0 = 0x0E; - pdynamic->sd_config__initial_phase_sd1 = 0x0E; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_standard_ranging_mm1_cal( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - status = VL53L1_preset_mode_standard_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - pgeneral->dss_config__roi_mode_control = - VL53L1_DEVICEDSSMODE__REQUESTED_EFFFECTIVE_SPADS; - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM1_EN; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_standard_ranging_mm2_cal( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - status = VL53L1_preset_mode_standard_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - pgeneral->dss_config__roi_mode_control = - VL53L1_DEVICEDSSMODE__REQUESTED_EFFFECTIVE_SPADS; - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM2_EN; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_timed_ranging( - - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = VL53L1_preset_mode_standard_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - pdynamic->system__grouped_parameter_hold = 0x00; - - - - - - ptiming->system__intermeasurement_period = 0x00000600; - pdynamic->system__seed_config = - VL53L1_SYSTEM__SEED_CONFIG__STANDARD; - - - - - - - psystem->system__mode_start = - VL53L1_DEVICESCHEDULERMODE_PSEUDO_SOLO | \ - VL53L1_DEVICEREADOUTMODE_SINGLE_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_TIMED; - } - - LOG_FUNCTION_END(status); - - return status; -} - -VL53L1_Error VL53L1_preset_mode_timed_ranging_short_range( - - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = VL53L1_preset_mode_standard_ranging_short_range( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - pdynamic->system__grouped_parameter_hold = 0x00; - - - - - - ptiming->system__intermeasurement_period = 0x00000600; - pdynamic->system__seed_config = - VL53L1_SYSTEM__SEED_CONFIG__STANDARD; - - - - - - - psystem->system__mode_start = - VL53L1_DEVICESCHEDULERMODE_PSEUDO_SOLO | \ - VL53L1_DEVICEREADOUTMODE_SINGLE_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_TIMED; - } - - LOG_FUNCTION_END(status); - - return status; -} - -VL53L1_Error VL53L1_preset_mode_timed_ranging_long_range( - - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = VL53L1_preset_mode_standard_ranging_long_range( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - pdynamic->system__grouped_parameter_hold = 0x00; - - - - - - ptiming->system__intermeasurement_period = 0x00000600; - pdynamic->system__seed_config = - VL53L1_SYSTEM__SEED_CONFIG__STANDARD; - - - - - - - psystem->system__mode_start = - VL53L1_DEVICESCHEDULERMODE_PSEUDO_SOLO | \ - VL53L1_DEVICEREADOUTMODE_SINGLE_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_TIMED; - } - - LOG_FUNCTION_END(status); - - return status; -} - -VL53L1_Error VL53L1_preset_mode_singleshot_ranging( - - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = VL53L1_preset_mode_standard_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - pdynamic->system__grouped_parameter_hold = 0x00; - - - - - pdynamic->system__seed_config = - VL53L1_SYSTEM__SEED_CONFIG__STANDARD; - - - - - - - psystem->system__mode_start = \ - VL53L1_DEVICESCHEDULERMODE_PSEUDO_SOLO | \ - VL53L1_DEVICEREADOUTMODE_SINGLE_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_SINGLESHOT; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_standard_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - pstatic->dss_config__target_total_rate_mcps = 0x1400; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VL53L1_init_histogram_config_structure( - 7, 0, 1, 2, 3, 4, - 0, 1, 2, 3, 4, 5, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 0, 1, 2, 3, 4, - 0, 1, 2, 3, 4, 5, - &(pzone_cfg->multizone_hist_cfg)); - - - - - - - - - - - ptiming->range_config__vcsel_period_a = 0x09; - ptiming->range_config__vcsel_period_b = 0x0B; - pdynamic->sd_config__woi_sd0 = 0x09; - pdynamic->sd_config__woi_sd1 = 0x0B; - - - - - - - - - phistpostprocess->valid_phase_low = 0x08; - phistpostprocess->valid_phase_high = 0x88; - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - - - - - - - pgeneral->phasecal_config__timeout_macrop = 0x40; - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - - - - - VL53L1_SEQUENCE_RANGE_EN; - - - - - - psystem->system__mode_start = \ - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM | \ - VL53L1_DEVICEREADOUTMODE_DUAL_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_with_mm1( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VL53L1_init_histogram_config_structure( - 7, 0, 1, 2, 3, 4, - 8+0, 8+1, 8+2, 3, 4, 5, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 0, 1, 2, 3, 4, - 8+0, 8+1, 8+2, 3, 4, 5, - &(pzone_cfg->multizone_hist_cfg)); - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM1_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - - - - - psystem->system__mode_start = \ - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM | \ - VL53L1_DEVICEREADOUTMODE_DUAL_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_with_mm2( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging_with_mm1( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM2_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_mm1_cal( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - - - - - - - - - - VL53L1_init_histogram_config_structure( - 7, 8+0, 8+1, 8+2, 8+3, 8+4, - 8+0, 8+1, 8+2, 8+3, 8+4, 8+5, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 8+0, 8+1, 8+2, 8+3, 8+4, - 8+0, 8+1, 8+2, 8+3, 8+4, 8+5, - &(pzone_cfg->multizone_hist_cfg)); - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - pgeneral->dss_config__roi_mode_control = - VL53L1_DEVICEDSSMODE__REQUESTED_EFFFECTIVE_SPADS; - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM1_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_mm2_cal( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging_mm1_cal( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - if (status == VL53L1_ERROR_NONE) { - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM2_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_short_timing( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - pstatic->dss_config__target_total_rate_mcps = 0x1400; - - - - - VL53L1_init_histogram_config_structure( - 7, 0, 1, 2, 3, 4, - 7, 0, 1, 2, 3, 4, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 0, 1, 2, 3, 4, - 7, 0, 1, 2, 3, 4, - &(pzone_cfg->multizone_hist_cfg)); - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - - - ptiming->range_config__vcsel_period_a = 0x04; - ptiming->range_config__vcsel_period_b = 0x03; - ptiming->mm_config__timeout_macrop_a_hi = 0x00; - ptiming->mm_config__timeout_macrop_a_lo = 0x42; - ptiming->mm_config__timeout_macrop_b_hi = 0x00; - ptiming->mm_config__timeout_macrop_b_lo = 0x42; - ptiming->range_config__timeout_macrop_a_hi = 0x00; - ptiming->range_config__timeout_macrop_a_lo = 0x52; - ptiming->range_config__timeout_macrop_b_hi = 0x00; - ptiming->range_config__timeout_macrop_b_lo = 0x66; - - pgeneral->cal_config__vcsel_start = 0x04; - - - - - - - - - - - pgeneral->phasecal_config__timeout_macrop = 0xa4; - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - - - - - VL53L1_SEQUENCE_RANGE_EN; - - - - - - psystem->system__mode_start = \ - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM | \ - VL53L1_DEVICEREADOUTMODE_DUAL_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_long_range( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - - - VL53L1_init_histogram_config_structure( - 7, 0, 1, 2, 3, 4, - 0, 1, 2, 3, 4, 5, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 0, 1, 2, 3, 4, - - 0, 1, 2, 3, 4, 5, - - &(pzone_cfg->multizone_hist_cfg)); - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - - - ptiming->range_config__vcsel_period_a = 0x09; - ptiming->range_config__vcsel_period_b = 0x0b; - - - - - - - ptiming->mm_config__timeout_macrop_a_hi = 0x00; - ptiming->mm_config__timeout_macrop_a_lo = 0x21; - ptiming->mm_config__timeout_macrop_b_hi = 0x00; - ptiming->mm_config__timeout_macrop_b_lo = 0x1b; - - - - - ptiming->range_config__timeout_macrop_a_hi = 0x00; - ptiming->range_config__timeout_macrop_a_lo = 0x29; - ptiming->range_config__timeout_macrop_b_hi = 0x00; - ptiming->range_config__timeout_macrop_b_lo = 0x22; - - - - - pgeneral->cal_config__vcsel_start = 0x09; - - - - - - - - - - - - - - pgeneral->phasecal_config__timeout_macrop = 0x42; - - - - - pdynamic->sd_config__woi_sd0 = 0x09; - pdynamic->sd_config__woi_sd1 = 0x0B; - pdynamic->sd_config__initial_phase_sd0 = 0x09; - pdynamic->sd_config__initial_phase_sd1 = 0x09; - - - - - - - - - phistpostprocess->valid_phase_low = 0x08; - phistpostprocess->valid_phase_high = 0x88; - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - - - - - - psystem->system__mode_start = \ - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM | \ - VL53L1_DEVICEREADOUTMODE_DUAL_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_long_range_mm1( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_long_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - - - VL53L1_init_histogram_config_structure( - 7, 0, 1, 2, 3, 4, - 8+0, 8+1, 8+2, 3, 4, 5, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 0, 1, 2, 3, 4, - 8+0, 8+1, 8+2, 3, 4, 5, - &(pzone_cfg->multizone_hist_cfg)); - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM1_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_long_range_mm2( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_long_range_mm1( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM2_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - } - - LOG_FUNCTION_END(status); - - return status; -} - - - -VL53L1_Error VL53L1_preset_mode_histogram_medium_range( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - - - VL53L1_init_histogram_config_structure( - 7, 0, 1, 1, 2, 2, - 0, 1, 2, 1, 2, 3, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 0, 1, 2, 3, 4, - 0, 1, 2, 1, 2, 3, - &(pzone_cfg->multizone_hist_cfg)); - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - - - ptiming->range_config__vcsel_period_a = 0x05; - ptiming->range_config__vcsel_period_b = 0x07; - - - - - - - ptiming->mm_config__timeout_macrop_a_hi = 0x00; - ptiming->mm_config__timeout_macrop_a_lo = 0x37; - ptiming->mm_config__timeout_macrop_b_hi = 0x00; - ptiming->mm_config__timeout_macrop_b_lo = 0x29; - - - - - ptiming->range_config__timeout_macrop_a_hi = 0x00; - ptiming->range_config__timeout_macrop_a_lo = 0x44; - ptiming->range_config__timeout_macrop_b_hi = 0x00; - ptiming->range_config__timeout_macrop_b_lo = 0x33; - - - - - pgeneral->cal_config__vcsel_start = 0x05; - - - - - - - - - - - - - - pgeneral->phasecal_config__timeout_macrop = 0x6D; - - - - - pdynamic->sd_config__woi_sd0 = 0x05; - pdynamic->sd_config__woi_sd1 = 0x07; - pdynamic->sd_config__initial_phase_sd0 = 0x05; - pdynamic->sd_config__initial_phase_sd1 = 0x05; - - - - - - - - - phistpostprocess->valid_phase_low = 0x08; - phistpostprocess->valid_phase_high = 0x48; - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - - - - - - psystem->system__mode_start = \ - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM | \ - VL53L1_DEVICEREADOUTMODE_DUAL_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_medium_range_mm1( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_medium_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - VL53L1_init_histogram_config_structure( - 7, 0, 1, 1, 2, 2, - 8+0, 8+1, 8+2, 1, 2, 3, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 0, 1, 1, 2, 2, - 8+0, 8+1, 8+2, 1, 2, 3, - &(pzone_cfg->multizone_hist_cfg)); - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM1_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_medium_range_mm2( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_medium_range_mm1( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM2_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_short_range( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - - - VL53L1_init_histogram_config_structure( - 7, 7, 0, 1, 1, 1, - 0, 1, 1, 1, 2, 2, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 7, 0, 1, 1, 1, - 0, 1, 1, 1, 2, 2, - &(pzone_cfg->multizone_hist_cfg)); - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - - - ptiming->range_config__vcsel_period_a = 0x03; - ptiming->range_config__vcsel_period_b = 0x05; - - - - - - - ptiming->mm_config__timeout_macrop_a_hi = 0x00; - ptiming->mm_config__timeout_macrop_a_lo = 0x52; - ptiming->mm_config__timeout_macrop_b_hi = 0x00; - ptiming->mm_config__timeout_macrop_b_lo = 0x37; - - - - - ptiming->range_config__timeout_macrop_a_hi = 0x00; - ptiming->range_config__timeout_macrop_a_lo = 0x66; - ptiming->range_config__timeout_macrop_b_hi = 0x00; - ptiming->range_config__timeout_macrop_b_lo = 0x44; - - - - - pgeneral->cal_config__vcsel_start = 0x03; - - - - - - - - - - - - - - pgeneral->phasecal_config__timeout_macrop = 0xA4; - - - - - pdynamic->sd_config__woi_sd0 = 0x03; - pdynamic->sd_config__woi_sd1 = 0x05; - pdynamic->sd_config__initial_phase_sd0 = 0x03; - pdynamic->sd_config__initial_phase_sd1 = 0x03; - - - - - - - - - phistpostprocess->valid_phase_low = 0x08; - phistpostprocess->valid_phase_high = 0x28; - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM1_EN | \ - - - VL53L1_SEQUENCE_RANGE_EN; - - - - - - psystem->system__mode_start = \ - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM | \ - VL53L1_DEVICEREADOUTMODE_DUAL_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_short_range_mm1( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_short_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - - - VL53L1_init_histogram_config_structure( - 7, 7, 0, 1, 1, 1, - 8+0, 8+1, 1, 1, 2, 2, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 0, 1, 1, 1, 1, - 8+0, 8+1, 1, 1, 2, 2, - &(pzone_cfg->multizone_hist_cfg)); - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM1_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_short_range_mm2( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_short_range_mm1( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM2_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - } - - LOG_FUNCTION_END(status); - - return status; -} - - - -VL53L1_Error VL53L1_preset_mode_histogram_characterisation( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - pstatic->debug__ctrl = 0x01; - psystem->power_management__go1_power_force = 0x01; - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - - psystem->system__mode_start = \ - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM | \ - VL53L1_DEVICEREADOUTMODE_SPLIT_MANUAL | \ - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_xtalk_planar( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_multizone_long_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - status = - VL53L1_zone_preset_xtalk_planar( - pgeneral, - pzone_cfg); - - - - - - - - - - - ptiming->range_config__sigma_thresh = 0x0000; - - - ptiming->range_config__min_count_rate_rtn_limit_mcps = 0x0000; - - - - - - - - ptiming->range_config__vcsel_period_a = 0x09; - ptiming->range_config__vcsel_period_b = 0x09; - - - - - VL53L1_init_histogram_config_structure( - 7, 0, 1, 2, 3, 4, - 7, 0, 1, 2, 3, 4, - phistogram); - - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 7, 0, 1, 2, 3, 4, - - 7, 0, 1, 2, 3, 4, - - &(pzone_cfg->multizone_hist_cfg)); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_set_histogram_multizone_initial_bin_config( - pzone_cfg, - phistogram, - &(pzone_cfg->multizone_hist_cfg)); - } - - - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - } - - LOG_FUNCTION_END(status); - - return status; -} - -VL53L1_Error VL53L1_preset_mode_histogram_xtalk_mm1( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - - - - - - - ptiming->range_config__sigma_thresh = 0x0000; - - - ptiming->range_config__min_count_rate_rtn_limit_mcps = 0x0000; - - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - - - VL53L1_init_histogram_config_structure( - 8+7, 8+0, 8+1, 8+2, 8+3, 8+4, - 8+7, 8+0, 8+1, 8+2, 8+3, 8+4, - phistogram); - - - - - - - VL53L1_init_histogram_multizone_config_structure( - 8+7, 8+0, 8+1, 8+2, 8+3, 8+4, - 8+7, 8+0, 8+1, 8+2, 8+3, 8+4, - &(pzone_cfg->multizone_hist_cfg)); - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - - - - - - - ptiming->range_config__vcsel_period_a = 0x09; - ptiming->range_config__vcsel_period_b = 0x09; - - - - - - - ptiming->mm_config__timeout_macrop_a_hi = 0x00; - ptiming->mm_config__timeout_macrop_a_lo = 0x21; - ptiming->mm_config__timeout_macrop_b_hi = 0x00; - ptiming->mm_config__timeout_macrop_b_lo = 0x21; - - - - - ptiming->range_config__timeout_macrop_a_hi = 0x00; - ptiming->range_config__timeout_macrop_a_lo = 0x29; - ptiming->range_config__timeout_macrop_b_hi = 0x00; - ptiming->range_config__timeout_macrop_b_lo = 0x29; - - - - - pgeneral->cal_config__vcsel_start = 0x09; - - - - - - - - - - - - - - pgeneral->phasecal_config__timeout_macrop = 0x42; - - - - - pdynamic->sd_config__woi_sd0 = 0x09; - pdynamic->sd_config__woi_sd1 = 0x09; - pdynamic->sd_config__initial_phase_sd0 = 0x09; - pdynamic->sd_config__initial_phase_sd1 = 0x09; - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM1_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - - - - - - psystem->system__mode_start = \ - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM | \ - VL53L1_DEVICEREADOUTMODE_DUAL_SD | \ - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_xtalk_mm2( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_xtalk_mm1( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - pdynamic->system__sequence_config = \ - VL53L1_SEQUENCE_VHV_EN | \ - VL53L1_SEQUENCE_PHASECAL_EN | \ - VL53L1_SEQUENCE_DSS1_EN | \ - VL53L1_SEQUENCE_DSS2_EN | \ - VL53L1_SEQUENCE_MM2_EN | \ - VL53L1_SEQUENCE_RANGE_EN; - - - - LOG_FUNCTION_END(status); - - return status; -} - - - - -VL53L1_Error VL53L1_preset_mode_histogram_multizone( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_medium_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - status = - VL53L1_init_zone_config_structure( - 4, 8, 2, - - 4, 8, 2, - - 7, 7, - - pzone_cfg); - - pgeneral->global_config__stream_divider = - pzone_cfg->active_zones + 1; - - - - - - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_set_histogram_multizone_initial_bin_config ( - pzone_cfg, - phistogram, - &(pzone_cfg->multizone_hist_cfg)); - } - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - } - - LOG_FUNCTION_END(status); - - return status; -} - -VL53L1_Error VL53L1_preset_mode_histogram_multizone_short_range( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_short_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - status = - VL53L1_init_zone_config_structure( - 4, 8, 2, - - 4, 8, 2, - - 7, 7, - - pzone_cfg); - - pgeneral->global_config__stream_divider = - pzone_cfg->active_zones + 1; - - - - - - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_set_histogram_multizone_initial_bin_config ( - pzone_cfg, - phistogram, - &(pzone_cfg->multizone_hist_cfg) - ); - } - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_preset_mode_histogram_multizone_long_range( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_long_range( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - status = - VL53L1_init_zone_config_structure( - 4, 8, 2, - - 4, 8, 2, - - 7, 7, - - pzone_cfg); - - pgeneral->global_config__stream_divider = - pzone_cfg->active_zones + 1; - - - - - - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_set_histogram_multizone_initial_bin_config ( - pzone_cfg, - phistogram, - &(pzone_cfg->multizone_hist_cfg)); - } - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - } - - LOG_FUNCTION_END(status); - - return status; -} - - - - -VL53L1_Error VL53L1_preset_mode_olt( - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = VL53L1_preset_mode_standard_ranging( - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - psystem->system__stream_count_ctrl = 0x01; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -void VL53L1_copy_hist_cfg_to_static_cfg( - VL53L1_histogram_config_t *phistogram, - VL53L1_static_config_t *pstatic, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic) -{ - - - - - - - LOG_FUNCTION_START(""); - - SUPPRESS_UNUSED_WARNING(pgeneral); - - pstatic->sigma_estimator__effective_pulse_width_ns = - phistogram->histogram_config__high_amb_even_bin_0_1; - pstatic->sigma_estimator__effective_ambient_width_ns = - phistogram->histogram_config__high_amb_even_bin_2_3; - pstatic->sigma_estimator__sigma_ref_mm = - phistogram->histogram_config__high_amb_even_bin_4_5; - - pstatic->algo__crosstalk_compensation_valid_height_mm = - phistogram->histogram_config__high_amb_odd_bin_0_1; - - pstatic->spare_host_config__static_config_spare_0 = - phistogram->histogram_config__high_amb_odd_bin_2_3; - pstatic->spare_host_config__static_config_spare_1 = - phistogram->histogram_config__high_amb_odd_bin_4_5; - - pstatic->algo__range_ignore_threshold_mcps = - (((uint16_t)phistogram->histogram_config__mid_amb_even_bin_0_1) << 8) - + (uint16_t)phistogram->histogram_config__mid_amb_even_bin_2_3; - - pstatic->algo__range_ignore_valid_height_mm = - phistogram->histogram_config__mid_amb_even_bin_4_5; - pstatic->algo__range_min_clip = - phistogram->histogram_config__mid_amb_odd_bin_0_1; - pstatic->algo__consistency_check__tolerance = - phistogram->histogram_config__mid_amb_odd_bin_2; - - pstatic->spare_host_config__static_config_spare_2 = - phistogram->histogram_config__mid_amb_odd_bin_3_4; - pstatic->sd_config__reset_stages_msb = - phistogram->histogram_config__mid_amb_odd_bin_5; - - pstatic->sd_config__reset_stages_lsb = - phistogram->histogram_config__user_bin_offset; - - ptiming->range_config__sigma_thresh = - (((uint16_t)phistogram->histogram_config__low_amb_even_bin_0_1) << 8) - + (uint16_t)phistogram->histogram_config__low_amb_even_bin_2_3; - - ptiming->range_config__min_count_rate_rtn_limit_mcps = - (((uint16_t)phistogram->histogram_config__low_amb_even_bin_4_5) << 8) - + (uint16_t)phistogram->histogram_config__low_amb_odd_bin_0_1; - - ptiming->range_config__valid_phase_low = - phistogram->histogram_config__low_amb_odd_bin_2_3; - ptiming->range_config__valid_phase_high = - phistogram->histogram_config__low_amb_odd_bin_4_5; - - pdynamic->system__thresh_high = - phistogram->histogram_config__amb_thresh_low; - - pdynamic->system__thresh_low = - phistogram->histogram_config__amb_thresh_high; - - pdynamic->system__enable_xtalk_per_quadrant = - phistogram->histogram_config__spad_array_selection; - - LOG_FUNCTION_END(0); - -} - -void VL53L1_copy_hist_bins_to_static_cfg( - VL53L1_histogram_config_t *phistogram, - VL53L1_static_config_t *pstatic, - VL53L1_timing_config_t *ptiming - ) -{ - - - - - - - LOG_FUNCTION_START(""); - - pstatic->sigma_estimator__effective_pulse_width_ns = - phistogram->histogram_config__high_amb_even_bin_0_1; - pstatic->sigma_estimator__effective_ambient_width_ns = - phistogram->histogram_config__high_amb_even_bin_2_3; - pstatic->sigma_estimator__sigma_ref_mm = - phistogram->histogram_config__high_amb_even_bin_4_5; - - pstatic->algo__crosstalk_compensation_valid_height_mm = - phistogram->histogram_config__high_amb_odd_bin_0_1; - - pstatic->spare_host_config__static_config_spare_0 = - phistogram->histogram_config__high_amb_odd_bin_2_3; - pstatic->spare_host_config__static_config_spare_1 = - phistogram->histogram_config__high_amb_odd_bin_4_5; - - pstatic->algo__range_ignore_threshold_mcps = - (((uint16_t)phistogram->histogram_config__mid_amb_even_bin_0_1) << 8) - + (uint16_t)phistogram->histogram_config__mid_amb_even_bin_2_3; - - pstatic->algo__range_ignore_valid_height_mm = - phistogram->histogram_config__mid_amb_even_bin_4_5; - pstatic->algo__range_min_clip = - phistogram->histogram_config__mid_amb_odd_bin_0_1; - pstatic->algo__consistency_check__tolerance = - phistogram->histogram_config__mid_amb_odd_bin_2; - - pstatic->spare_host_config__static_config_spare_2 = - phistogram->histogram_config__mid_amb_odd_bin_3_4; - pstatic->sd_config__reset_stages_msb = - phistogram->histogram_config__mid_amb_odd_bin_5; - - ptiming->range_config__sigma_thresh = - (((uint16_t)phistogram->histogram_config__low_amb_even_bin_0_1) << 8) - + (uint16_t)phistogram->histogram_config__low_amb_even_bin_2_3; - - ptiming->range_config__min_count_rate_rtn_limit_mcps = - (((uint16_t)phistogram->histogram_config__low_amb_even_bin_4_5) << 8) - + (uint16_t)phistogram->histogram_config__low_amb_odd_bin_0_1; - - ptiming->range_config__valid_phase_low = - phistogram->histogram_config__low_amb_odd_bin_2_3; - ptiming->range_config__valid_phase_high = - phistogram->histogram_config__low_amb_odd_bin_4_5; - - LOG_FUNCTION_END(0); - -} - - -VL53L1_Error VL53L1_preset_mode_histogram_ranging_ref( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_static_config_t *pstatic, - VL53L1_histogram_config_t *phistogram, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming, - VL53L1_dynamic_config_t *pdynamic, - VL53L1_system_control_t *psystem, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_preset_mode_histogram_ranging( - phistpostprocess, - pstatic, - phistogram, - pgeneral, - ptiming, - pdynamic, - psystem, - pzone_cfg); - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - phistogram->histogram_config__spad_array_selection = 0x00; - - - - - VL53L1_copy_hist_cfg_to_static_cfg( - phistogram, - pstatic, - pgeneral, - ptiming, - pdynamic); - } - - LOG_FUNCTION_END(status); - - return status; -} - - - - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_api_strings.c b/drivers/input/misc/vl53L1/src/vl53l1_api_strings.c deleted file mode 100644 index bdab77694bbc..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_api_strings.c +++ /dev/null @@ -1,333 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_api_core.h" -#include "vl53l1_api_strings.h" -#include "vl53l1_error_codes.h" -#include "vl53l1_error_strings.h" - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_API, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_API, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_API, status, fmt, \ - ##__VA_ARGS__) - - -VL53L1_Error VL53L1_get_range_status_string( - uint8_t RangeStatus, - char *pRangeStatusString) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - -#ifdef VL53L1_USE_EMPTY_STRING - VL53L1_COPYSTRING(pRangeStatusString, ""); -#else - switch (RangeStatus) { - case 0: - VL53L1_COPYSTRING(pRangeStatusString, - VL53L1_STRING_RANGESTATUS_RANGEVALID); - break; - case 1: - VL53L1_COPYSTRING(pRangeStatusString, - VL53L1_STRING_RANGESTATUS_SIGMA); - break; - case 2: - VL53L1_COPYSTRING(pRangeStatusString, - VL53L1_STRING_RANGESTATUS_SIGNAL); - break; - case 3: - VL53L1_COPYSTRING(pRangeStatusString, - VL53L1_STRING_RANGESTATUS_MINRANGE); - break; - case 4: - VL53L1_COPYSTRING(pRangeStatusString, - VL53L1_STRING_RANGESTATUS_PHASE); - break; - case 5: - VL53L1_COPYSTRING(pRangeStatusString, - VL53L1_STRING_RANGESTATUS_HW); - break; - - default: - - VL53L1_COPYSTRING(pRangeStatusString, - VL53L1_STRING_RANGESTATUS_NONE); - } -#endif - - LOG_FUNCTION_END(status); - return status; -} - - -VL53L1_Error VL53L1_get_pal_state_string( - VL53L1_State PalStateCode, - char *pPalStateString) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - -#ifdef VL53L1_USE_EMPTY_STRING - VL53L1_COPYSTRING(pPalStateString, ""); -#else - switch (PalStateCode) { - case VL53L1_STATE_POWERDOWN: - VL53L1_COPYSTRING(pPalStateString, - VL53L1_STRING_STATE_POWERDOWN); - break; - case VL53L1_STATE_WAIT_STATICINIT: - VL53L1_COPYSTRING(pPalStateString, - VL53L1_STRING_STATE_WAIT_STATICINIT); - break; - case VL53L1_STATE_STANDBY: - VL53L1_COPYSTRING(pPalStateString, - VL53L1_STRING_STATE_STANDBY); - break; - case VL53L1_STATE_IDLE: - VL53L1_COPYSTRING(pPalStateString, - VL53L1_STRING_STATE_IDLE); - break; - case VL53L1_STATE_RUNNING: - VL53L1_COPYSTRING(pPalStateString, - VL53L1_STRING_STATE_RUNNING); - break; - case VL53L1_STATE_RESET: - VL53L1_COPYSTRING(pPalStateString, - VL53L1_STRING_STATE_RESET); - break; - case VL53L1_STATE_UNKNOWN: - VL53L1_COPYSTRING(pPalStateString, - VL53L1_STRING_STATE_UNKNOWN); - break; - case VL53L1_STATE_ERROR: - VL53L1_COPYSTRING(pPalStateString, - VL53L1_STRING_STATE_ERROR); - break; - - default: - VL53L1_COPYSTRING(pPalStateString, - VL53L1_STRING_STATE_UNKNOWN); - } -#endif - - LOG_FUNCTION_END(status); - return status; -} - -VL53L1_Error VL53L1_get_sequence_steps_info( - VL53L1_SequenceStepId SequenceStepId, - char *pSequenceStepsString) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - -#ifdef VL53L1_USE_EMPTY_STRING - VL53L1_COPYSTRING(pSequenceStepsString, ""); -#else - switch (SequenceStepId) { - case VL53L1_SEQUENCESTEP_VHV: - VL53L1_COPYSTRING(pSequenceStepsString, - VL53L1_STRING_SEQUENCESTEP_VHV); - break; - case VL53L1_SEQUENCESTEP_PHASECAL: - VL53L1_COPYSTRING(pSequenceStepsString, - VL53L1_STRING_SEQUENCESTEP_PHASECAL); - break; - case VL53L1_SEQUENCESTEP_REFPHASE: - VL53L1_COPYSTRING(pSequenceStepsString, - VL53L1_STRING_SEQUENCESTEP_DSS1); - break; - case VL53L1_SEQUENCESTEP_DSS1: - VL53L1_COPYSTRING(pSequenceStepsString, - VL53L1_STRING_SEQUENCESTEP_DSS1); - break; - case VL53L1_SEQUENCESTEP_DSS2: - VL53L1_COPYSTRING(pSequenceStepsString, - VL53L1_STRING_SEQUENCESTEP_DSS2); - break; - case VL53L1_SEQUENCESTEP_MM1: - VL53L1_COPYSTRING(pSequenceStepsString, - VL53L1_STRING_SEQUENCESTEP_MM1); - break; - case VL53L1_SEQUENCESTEP_MM2: - VL53L1_COPYSTRING(pSequenceStepsString, - VL53L1_STRING_SEQUENCESTEP_MM2); - break; - case VL53L1_SEQUENCESTEP_RANGE: - VL53L1_COPYSTRING(pSequenceStepsString, - VL53L1_STRING_SEQUENCESTEP_RANGE); - break; - default: - Status = VL53L1_ERROR_INVALID_PARAMS; - } -#endif - - LOG_FUNCTION_END(Status); - - return Status; -} - -VL53L1_Error VL53L1_get_limit_check_info(uint16_t LimitCheckId, - char *pLimitCheckString) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - -#ifdef VL53L1_USE_EMPTY_STRING - VL53L1_COPYSTRING(pLimitCheckString, ""); -#else - switch (LimitCheckId) { - case VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE: - VL53L1_COPYSTRING(pLimitCheckString, - VL53L1_STRING_CHECKENABLE_SIGMA_FINAL_RANGE); - break; - case VL53L1_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: - VL53L1_COPYSTRING(pLimitCheckString, - VL53L1_STRING_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE); - break; - default: - VL53L1_COPYSTRING(pLimitCheckString, - VL53L1_STRING_UNKNOW_ERROR_CODE); - } -#endif - - LOG_FUNCTION_END(Status); - return Status; -} - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_core.c b/drivers/input/misc/vl53L1/src/vl53l1_core.c deleted file mode 100644 index 405182db0ec4..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_core.c +++ /dev/null @@ -1,3961 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_ll_device.h" -#include "vl53l1_platform.h" -#include "vl53l1_register_map.h" -#include "vl53l1_register_funcs.h" -#include "vl53l1_register_settings.h" -#include "vl53l1_hist_structs.h" -#include "vl53l1_api_preset_modes.h" -#include "vl53l1_core.h" - - - - - - - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_CORE, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_CORE, \ - status, fmt, ##__VA_ARGS__) - -#define trace_print(level, ...) \ - _LOG_TRACE_PRINT(VL53L1_TRACE_MODULE_CORE, \ - level, VL53L1_TRACE_FUNCTION_NONE, ##__VA_ARGS__) - - -void VL53L1_init_version( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - pdev->version.ll_major = VL53L1_LL_API_IMPLEMENTATION_VER_MAJOR; - pdev->version.ll_minor = VL53L1_LL_API_IMPLEMENTATION_VER_MINOR; - pdev->version.ll_build = VL53L1_LL_API_IMPLEMENTATION_VER_SUB; - pdev->version.ll_revision = VL53L1_LL_API_IMPLEMENTATION_VER_REVISION; -} - - -void VL53L1_init_ll_driver_state( - VL53L1_DEV Dev, - VL53L1_DeviceState device_state) -{ - - - - - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_ll_driver_state_t *pstate = &(pdev->ll_state); - - pstate->cfg_device_state = device_state; - pstate->cfg_stream_count = 0; - pstate->cfg_gph_id = VL53L1_GROUPEDPARAMETERHOLD_ID_MASK; - pstate->cfg_timing_status = 0; - pstate->cfg_zone_id = 0; - - pstate->rd_device_state = device_state; - pstate->rd_stream_count = 0; - pstate->rd_gph_id = VL53L1_GROUPEDPARAMETERHOLD_ID_MASK; - pstate->rd_timing_status = 0; - pstate->rd_zone_id = 0; - -} - - -VL53L1_Error VL53L1_update_ll_driver_rd_state( - VL53L1_DEV Dev) -{ - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_ll_driver_state_t *pstate = &(pdev->ll_state); - - - - - LOG_FUNCTION_START(""); - - - - - - if ((pdev->sys_ctrl.system__mode_start & - VL53L1_DEVICEMEASUREMENTMODE_MODE_MASK) == 0x00) { - - pstate->rd_device_state = VL53L1_DEVICESTATE_SW_STANDBY; - pstate->rd_stream_count = 0; - pstate->rd_internal_stream_count = 0; - pstate->rd_internal_stream_count_val = 0; - pstate->rd_gph_id = VL53L1_GROUPEDPARAMETERHOLD_ID_MASK; - pstate->rd_timing_status = 0; - pstate->rd_zone_id = 0; - - } else { - - - - - - - if (pstate->rd_stream_count == 0xFF) { - pstate->rd_stream_count = 0x80; - } else { - pstate->rd_stream_count++; - } - - - - - - status = VL53L1_update_internal_stream_counters(Dev, - pstate->rd_stream_count, - &(pstate->rd_internal_stream_count), - &(pstate->rd_internal_stream_count_val)); - - - - - - - pstate->rd_gph_id ^= VL53L1_GROUPEDPARAMETERHOLD_ID_MASK; - - - - - switch (pstate->rd_device_state) { - - case VL53L1_DEVICESTATE_SW_STANDBY: - - if ((pdev->dyn_cfg.system__grouped_parameter_hold & - VL53L1_GROUPEDPARAMETERHOLD_ID_MASK) > 0) { - pstate->rd_device_state = - VL53L1_DEVICESTATE_RANGING_WAIT_GPH_SYNC; - } else { - if (pstate->rd_zone_id >= - pdev->zone_cfg.active_zones) { - pstate->rd_device_state = - VL53L1_DEVICESTATE_RANGING_OUTPUT_DATA; - } else { - pstate->rd_device_state = - VL53L1_DEVICESTATE_RANGING_GATHER_DATA; - } - } - - pstate->rd_stream_count = 0; - pstate->rd_internal_stream_count = 0; - pstate->rd_internal_stream_count_val = 0; - pstate->rd_timing_status = 0; - pstate->rd_zone_id = 0; - - break; - - case VL53L1_DEVICESTATE_RANGING_WAIT_GPH_SYNC: - pstate->rd_stream_count = 0; - pstate->rd_internal_stream_count = 0; - pstate->rd_internal_stream_count_val = 0; - pstate->rd_zone_id = 0; - if (pstate->rd_zone_id >= - pdev->zone_cfg.active_zones) { - pstate->rd_device_state = - VL53L1_DEVICESTATE_RANGING_OUTPUT_DATA; - } else { - pstate->rd_device_state = - VL53L1_DEVICESTATE_RANGING_GATHER_DATA; - } - break; - - case VL53L1_DEVICESTATE_RANGING_GATHER_DATA: - pstate->rd_zone_id++; - if (pstate->rd_zone_id >= - pdev->zone_cfg.active_zones) { - pstate->rd_device_state = - VL53L1_DEVICESTATE_RANGING_OUTPUT_DATA; - } else { - pstate->rd_device_state = - VL53L1_DEVICESTATE_RANGING_GATHER_DATA; - } - break; - - case VL53L1_DEVICESTATE_RANGING_OUTPUT_DATA: - pstate->rd_zone_id = 0; - pstate->rd_timing_status ^= 0x01; - - if (pstate->rd_zone_id >= - pdev->zone_cfg.active_zones) { - pstate->rd_device_state = - VL53L1_DEVICESTATE_RANGING_OUTPUT_DATA; - } else { - pstate->rd_device_state = - VL53L1_DEVICESTATE_RANGING_GATHER_DATA; - } - break; - - default: - pstate->rd_device_state = - VL53L1_DEVICESTATE_SW_STANDBY; - pstate->rd_stream_count = 0; - pstate->rd_internal_stream_count = 0; - pstate->rd_internal_stream_count_val = 0; - pstate->rd_gph_id = VL53L1_GROUPEDPARAMETERHOLD_ID_MASK; - pstate->rd_timing_status = 0; - pstate->rd_zone_id = 0; - break; - } - } - - - - - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_check_ll_driver_rd_state( - VL53L1_DEV Dev) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - VL53L1_ll_driver_state_t *pstate = &(pdev->ll_state); - VL53L1_system_results_t *psys_results = &(pdev->sys_results); - VL53L1_histogram_bin_data_t *phist_data = &(pdev->hist_data); - - uint8_t device_range_status = 0; - uint8_t device_stream_count = 0; - uint8_t device_gph_id = 0; - uint8_t histogram_mode = 0; - uint8_t expected_stream_count = 0; - uint8_t expected_gph_id = 0; - - LOG_FUNCTION_START(""); - - - - - - device_range_status = - psys_results->result__range_status & - VL53L1_RANGE_STATUS__RANGE_STATUS_MASK; - - device_stream_count = psys_results->result__stream_count; - - - - - histogram_mode = - (pdev->sys_ctrl.system__mode_start & - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM) == - VL53L1_DEVICESCHEDULERMODE_HISTOGRAM; - - - - device_gph_id = (psys_results->result__interrupt_status & - VL53L1_INTERRUPT_STATUS__GPH_ID_INT_STATUS_MASK) >> 4; - - if (histogram_mode) { - device_gph_id = (phist_data->result__interrupt_status & - VL53L1_INTERRUPT_STATUS__GPH_ID_INT_STATUS_MASK) >> 4; - } - - - - - if ((pdev->sys_ctrl.system__mode_start & - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK) == - VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK) { - - - - - - - - - - - - - - - if (pstate->rd_device_state == - VL53L1_DEVICESTATE_RANGING_WAIT_GPH_SYNC) { - - if (histogram_mode == 0) { - if (device_range_status != - VL53L1_DEVICEERROR_GPHSTREAMCOUNT0READY) { - status = VL53L1_ERROR_GPH_SYNC_CHECK_FAIL; - } - } - } else { - if (pstate->rd_stream_count != device_stream_count) { - status = VL53L1_ERROR_STREAM_COUNT_CHECK_FAIL; - } - - - - - - - if (pstate->rd_gph_id != device_gph_id) { - status = VL53L1_ERROR_GPH_ID_CHECK_FAIL; - - - - - - - - } else { - - - - - - - - } - - - - - - - expected_stream_count = - pres->zone_dyn_cfgs.VL53L1_PRM_00005[pstate->rd_zone_id].expected_stream_count; - expected_gph_id = - pres->zone_dyn_cfgs.VL53L1_PRM_00005[pstate->rd_zone_id].expected_gph_id; - - - - - - - if (expected_stream_count != device_stream_count) { - - - - - if ((pdev->zone_cfg.active_zones == 0) && - (device_stream_count == 255)) { - - - - - - - - - } else { - status = VL53L1_ERROR_ZONE_STREAM_COUNT_CHECK_FAIL; - - - - - - - - } - } - - - - - - - if (expected_gph_id != device_gph_id) { - status = VL53L1_ERROR_ZONE_GPH_ID_CHECK_FAIL; - - - - - - - - } - } - - - - - - - - - - - - - - } - - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_update_ll_driver_cfg_state( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - VL53L1_ll_driver_state_t *pstate = &(pdev->ll_state); - - uint8_t prev_cfg_zone_id; - uint8_t prev_cfg_gph_id; - uint8_t prev_cfg_stream_count; - - LOG_FUNCTION_START(""); - - - - - - - - - if ((pdev->sys_ctrl.system__mode_start & - VL53L1_DEVICEMEASUREMENTMODE_MODE_MASK) == 0x00) { - - pstate->cfg_device_state = VL53L1_DEVICESTATE_SW_STANDBY; - pstate->cfg_stream_count = 0; - pstate->cfg_internal_stream_count = 0; - pstate->cfg_internal_stream_count_val = 0; - pstate->cfg_gph_id = VL53L1_GROUPEDPARAMETERHOLD_ID_MASK; - pstate->cfg_timing_status = 0; - pstate->cfg_zone_id = 0; - prev_cfg_zone_id = 0; - prev_cfg_gph_id = 0; - prev_cfg_stream_count = 0; - - } else { - - - - - prev_cfg_gph_id = pstate->cfg_gph_id; - prev_cfg_zone_id = pstate->cfg_zone_id; - prev_cfg_stream_count = pstate->cfg_stream_count; - - - - - - - if (pstate->cfg_stream_count == 0xFF) { - pstate->cfg_stream_count = 0x80; - } else { - pstate->cfg_stream_count++; - } - - - - - - status = VL53L1_update_internal_stream_counters( - Dev, - pstate->cfg_stream_count, - &(pstate->cfg_internal_stream_count), - &(pstate->cfg_internal_stream_count_val)); - - - - - - - pstate->cfg_gph_id ^= VL53L1_GROUPEDPARAMETERHOLD_ID_MASK; - - - - - - - switch (pstate->cfg_device_state) { - - case VL53L1_DEVICESTATE_SW_STANDBY: - pstate->cfg_zone_id = 1; - if (pstate->cfg_zone_id > - pdev->zone_cfg.active_zones) { - pstate->cfg_zone_id = 0; - pstate->cfg_timing_status ^= 0x01; - } - pstate->cfg_stream_count = 1; - - if (pdev->gen_cfg.global_config__stream_divider == 0) { - pstate->cfg_internal_stream_count = 1; - pstate->cfg_internal_stream_count_val = 0; - } else { - pstate->cfg_internal_stream_count = 0; - pstate->cfg_internal_stream_count_val = 1; - } - pstate->cfg_device_state = VL53L1_DEVICESTATE_RANGING_DSS_AUTO; - break; - - case VL53L1_DEVICESTATE_RANGING_DSS_AUTO: - pstate->cfg_zone_id++; - if (pstate->cfg_zone_id > - pdev->zone_cfg.active_zones) { - - pstate->cfg_zone_id = 0; - pstate->cfg_timing_status ^= 0x01; - - - - - - - if (pdev->zone_cfg.active_zones > 0) { - pstate->cfg_device_state = - VL53L1_DEVICESTATE_RANGING_DSS_MANUAL; - } - } - break; - - case VL53L1_DEVICESTATE_RANGING_DSS_MANUAL: - pstate->cfg_zone_id++; - if (pstate->cfg_zone_id > - pdev->zone_cfg.active_zones) { - pstate->cfg_zone_id = 0; - pstate->cfg_timing_status ^= 0x01; - } - break; - - default: - pstate->cfg_device_state = VL53L1_DEVICESTATE_SW_STANDBY; - pstate->cfg_stream_count = 0; - pstate->cfg_internal_stream_count = 0; - pstate->cfg_internal_stream_count_val = 0; - pstate->cfg_gph_id = VL53L1_GROUPEDPARAMETERHOLD_ID_MASK; - pstate->cfg_timing_status = 0; - pstate->cfg_zone_id = 0; - break; - } - } - - - - - - - if (pdev->zone_cfg.active_zones == 0) { - - - - - - pres->zone_dyn_cfgs.VL53L1_PRM_00005[prev_cfg_zone_id].expected_stream_count = - prev_cfg_stream_count - 1; - - pres->zone_dyn_cfgs.VL53L1_PRM_00005[pstate->rd_zone_id].expected_gph_id = - prev_cfg_gph_id ^ VL53L1_GROUPEDPARAMETERHOLD_ID_MASK; - } else { - pres->zone_dyn_cfgs.VL53L1_PRM_00005[prev_cfg_zone_id].expected_stream_count = - prev_cfg_stream_count; - pres->zone_dyn_cfgs.VL53L1_PRM_00005[prev_cfg_zone_id].expected_gph_id = - prev_cfg_gph_id; - } - - - - - - LOG_FUNCTION_END(status); - - return status; -} - - -void VL53L1_copy_rtn_good_spads_to_buffer( - VL53L1_nvm_copy_data_t *pdata, - uint8_t *pbuffer) -{ - - - - - - *(pbuffer + 0) = pdata->global_config__spad_enables_rtn_0; - *(pbuffer + 1) = pdata->global_config__spad_enables_rtn_1; - *(pbuffer + 2) = pdata->global_config__spad_enables_rtn_2; - *(pbuffer + 3) = pdata->global_config__spad_enables_rtn_3; - *(pbuffer + 4) = pdata->global_config__spad_enables_rtn_4; - *(pbuffer + 5) = pdata->global_config__spad_enables_rtn_5; - *(pbuffer + 6) = pdata->global_config__spad_enables_rtn_6; - *(pbuffer + 7) = pdata->global_config__spad_enables_rtn_7; - *(pbuffer + 8) = pdata->global_config__spad_enables_rtn_8; - *(pbuffer + 9) = pdata->global_config__spad_enables_rtn_9; - *(pbuffer + 10) = pdata->global_config__spad_enables_rtn_10; - *(pbuffer + 11) = pdata->global_config__spad_enables_rtn_11; - *(pbuffer + 12) = pdata->global_config__spad_enables_rtn_12; - *(pbuffer + 13) = pdata->global_config__spad_enables_rtn_13; - *(pbuffer + 14) = pdata->global_config__spad_enables_rtn_14; - *(pbuffer + 15) = pdata->global_config__spad_enables_rtn_15; - *(pbuffer + 16) = pdata->global_config__spad_enables_rtn_16; - *(pbuffer + 17) = pdata->global_config__spad_enables_rtn_17; - *(pbuffer + 18) = pdata->global_config__spad_enables_rtn_18; - *(pbuffer + 19) = pdata->global_config__spad_enables_rtn_19; - *(pbuffer + 20) = pdata->global_config__spad_enables_rtn_20; - *(pbuffer + 21) = pdata->global_config__spad_enables_rtn_21; - *(pbuffer + 22) = pdata->global_config__spad_enables_rtn_22; - *(pbuffer + 23) = pdata->global_config__spad_enables_rtn_23; - *(pbuffer + 24) = pdata->global_config__spad_enables_rtn_24; - *(pbuffer + 25) = pdata->global_config__spad_enables_rtn_25; - *(pbuffer + 26) = pdata->global_config__spad_enables_rtn_26; - *(pbuffer + 27) = pdata->global_config__spad_enables_rtn_27; - *(pbuffer + 28) = pdata->global_config__spad_enables_rtn_28; - *(pbuffer + 29) = pdata->global_config__spad_enables_rtn_29; - *(pbuffer + 30) = pdata->global_config__spad_enables_rtn_30; - *(pbuffer + 31) = pdata->global_config__spad_enables_rtn_31; -} - - -void VL53L1_init_system_results( - VL53L1_system_results_t *pdata) -{ - - - - - - - pdata->result__interrupt_status = 0xFF; - pdata->result__range_status = 0xFF; - pdata->result__report_status = 0xFF; - pdata->result__stream_count = 0xFF; - - pdata->result__dss_actual_effective_spads_sd0 = 0xFFFF; - pdata->result__peak_signal_count_rate_mcps_sd0 = 0xFFFF; - pdata->result__ambient_count_rate_mcps_sd0 = 0xFFFF; - pdata->result__sigma_sd0 = 0xFFFF; - pdata->result__phase_sd0 = 0xFFFF; - pdata->result__final_crosstalk_corrected_range_mm_sd0 = 0xFFFF; - pdata->result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0 = - 0xFFFF; - pdata->result__mm_inner_actual_effective_spads_sd0 = 0xFFFF; - pdata->result__mm_outer_actual_effective_spads_sd0 = 0xFFFF; - pdata->result__avg_signal_count_rate_mcps_sd0 = 0xFFFF; - - pdata->result__dss_actual_effective_spads_sd1 = 0xFFFF; - pdata->result__peak_signal_count_rate_mcps_sd1 = 0xFFFF; - pdata->result__ambient_count_rate_mcps_sd1 = 0xFFFF; - pdata->result__sigma_sd1 = 0xFFFF; - pdata->result__phase_sd1 = 0xFFFF; - pdata->result__final_crosstalk_corrected_range_mm_sd1 = 0xFFFF; - pdata->result__spare_0_sd1 = 0xFFFF; - pdata->result__spare_1_sd1 = 0xFFFF; - pdata->result__spare_2_sd1 = 0xFFFF; - pdata->result__spare_3_sd1 = 0xFF; - -} - - -void V53L1_init_zone_results_structure( - uint8_t active_zones, - VL53L1_zone_results_t *pdata) -{ - - - - - uint8_t z = 0; - VL53L1_zone_objects_t *pobjects; - - pdata->max_zones = VL53L1_MAX_USER_ZONES; - pdata->active_zones = active_zones; - - for (z = 0 ; z < pdata->max_zones ; z++) { - pobjects = &(pdata->VL53L1_PRM_00005[z]); - pobjects->cfg_device_state = VL53L1_DEVICESTATE_SW_STANDBY; - pobjects->rd_device_state = VL53L1_DEVICESTATE_SW_STANDBY; - pobjects->max_objects = VL53L1_MAX_RANGE_RESULTS; - pobjects->active_objects = 0; - } -} - - -void VL53L1_init_histogram_config_structure( - uint8_t even_bin0, - uint8_t even_bin1, - uint8_t even_bin2, - uint8_t even_bin3, - uint8_t even_bin4, - uint8_t even_bin5, - uint8_t odd_bin0, - uint8_t odd_bin1, - uint8_t odd_bin2, - uint8_t odd_bin3, - uint8_t odd_bin4, - uint8_t odd_bin5, - VL53L1_histogram_config_t *pdata) -{ - - - - - - - pdata->histogram_config__low_amb_even_bin_0_1 = (even_bin1 << 4) + even_bin0; - pdata->histogram_config__low_amb_even_bin_2_3 = (even_bin3 << 4) + even_bin2; - pdata->histogram_config__low_amb_even_bin_4_5 = (even_bin5 << 4) + even_bin4; - - pdata->histogram_config__low_amb_odd_bin_0_1 = (odd_bin1 << 4) + odd_bin0; - pdata->histogram_config__low_amb_odd_bin_2_3 = (odd_bin3 << 4) + odd_bin2; - pdata->histogram_config__low_amb_odd_bin_4_5 = (odd_bin5 << 4) + odd_bin4; - - pdata->histogram_config__mid_amb_even_bin_0_1 = pdata->histogram_config__low_amb_even_bin_0_1; - pdata->histogram_config__mid_amb_even_bin_2_3 = pdata->histogram_config__low_amb_even_bin_2_3; - pdata->histogram_config__mid_amb_even_bin_4_5 = pdata->histogram_config__low_amb_even_bin_4_5; - - pdata->histogram_config__mid_amb_odd_bin_0_1 = pdata->histogram_config__low_amb_odd_bin_0_1; - pdata->histogram_config__mid_amb_odd_bin_2 = odd_bin2; - pdata->histogram_config__mid_amb_odd_bin_3_4 = (odd_bin4 << 4) + odd_bin3; - pdata->histogram_config__mid_amb_odd_bin_5 = odd_bin5; - - pdata->histogram_config__user_bin_offset = 0x00; - - pdata->histogram_config__high_amb_even_bin_0_1 = pdata->histogram_config__low_amb_even_bin_0_1; - pdata->histogram_config__high_amb_even_bin_2_3 = pdata->histogram_config__low_amb_even_bin_2_3; - pdata->histogram_config__high_amb_even_bin_4_5 = pdata->histogram_config__low_amb_even_bin_4_5; - - pdata->histogram_config__high_amb_odd_bin_0_1 = pdata->histogram_config__low_amb_odd_bin_0_1; - pdata->histogram_config__high_amb_odd_bin_2_3 = pdata->histogram_config__low_amb_odd_bin_2_3; - pdata->histogram_config__high_amb_odd_bin_4_5 = pdata->histogram_config__low_amb_odd_bin_4_5; - - - - - pdata->histogram_config__amb_thresh_low = 0xFFFF; - pdata->histogram_config__amb_thresh_high = 0xFFFF; - - - - - pdata->histogram_config__spad_array_selection = 0x00; - -} - -void VL53L1_init_histogram_multizone_config_structure( - uint8_t even_bin0, - uint8_t even_bin1, - uint8_t even_bin2, - uint8_t even_bin3, - uint8_t even_bin4, - uint8_t even_bin5, - uint8_t odd_bin0, - uint8_t odd_bin1, - uint8_t odd_bin2, - uint8_t odd_bin3, - uint8_t odd_bin4, - uint8_t odd_bin5, - VL53L1_histogram_config_t *pdata) -{ - - - - - - - - pdata->histogram_config__low_amb_even_bin_0_1 = (even_bin1 << 4) + even_bin0; - pdata->histogram_config__low_amb_even_bin_2_3 = (even_bin3 << 4) + even_bin2; - pdata->histogram_config__low_amb_even_bin_4_5 = (even_bin5 << 4) + even_bin4; - - pdata->histogram_config__low_amb_odd_bin_0_1 = - pdata->histogram_config__low_amb_even_bin_0_1; - pdata->histogram_config__low_amb_odd_bin_2_3 - = pdata->histogram_config__low_amb_even_bin_2_3; - pdata->histogram_config__low_amb_odd_bin_4_5 - = pdata->histogram_config__low_amb_even_bin_4_5; - - pdata->histogram_config__mid_amb_even_bin_0_1 = - pdata->histogram_config__low_amb_even_bin_0_1; - pdata->histogram_config__mid_amb_even_bin_2_3 - = pdata->histogram_config__low_amb_even_bin_2_3; - pdata->histogram_config__mid_amb_even_bin_4_5 - = pdata->histogram_config__low_amb_even_bin_4_5; - - pdata->histogram_config__mid_amb_odd_bin_0_1 - = pdata->histogram_config__low_amb_odd_bin_0_1; - pdata->histogram_config__mid_amb_odd_bin_2 = odd_bin2; - pdata->histogram_config__mid_amb_odd_bin_3_4 = (odd_bin4 << 4) + odd_bin3; - pdata->histogram_config__mid_amb_odd_bin_5 = odd_bin5; - - pdata->histogram_config__user_bin_offset = 0x00; - - pdata->histogram_config__high_amb_even_bin_0_1 = (odd_bin1 << 4) + odd_bin0; - pdata->histogram_config__high_amb_even_bin_2_3 = (odd_bin3 << 4) + odd_bin2; - pdata->histogram_config__high_amb_even_bin_4_5 = (odd_bin5 << 4) + odd_bin4; - - pdata->histogram_config__high_amb_odd_bin_0_1 - = pdata->histogram_config__high_amb_even_bin_0_1; - pdata->histogram_config__high_amb_odd_bin_2_3 - = pdata->histogram_config__high_amb_even_bin_2_3; - pdata->histogram_config__high_amb_odd_bin_4_5 - = pdata->histogram_config__high_amb_even_bin_4_5; - - - - - pdata->histogram_config__amb_thresh_low = 0xFFFF; - pdata->histogram_config__amb_thresh_high = 0xFFFF; - - - - - pdata->histogram_config__spad_array_selection = 0x00; -} - - -void VL53L1_init_xtalk_bin_data_struct( - uint32_t bin_value, - uint16_t VL53L1_PRM_00017, - VL53L1_xtalk_histogram_shape_t *pdata) -{ - - - - - - - uint16_t i = 0; - - pdata->zone_id = 0; - pdata->time_stamp = 0; - - pdata->VL53L1_PRM_00015 = 0; - pdata->VL53L1_PRM_00016 = VL53L1_XTALK_HISTO_BINS; - pdata->VL53L1_PRM_00017 = (uint8_t)VL53L1_PRM_00017; - - pdata->phasecal_result__reference_phase = 0; - pdata->phasecal_result__vcsel_start = 0; - pdata->cal_config__vcsel_start = 0; - - pdata->vcsel_width = 0; - pdata->VL53L1_PRM_00018 = 0; - - pdata->zero_distance_phase = 0; - - for (i = 0 ; i < VL53L1_XTALK_HISTO_BINS; i++) { - if (i < VL53L1_PRM_00017) { - pdata->bin_data[i] = bin_value; - } else { - pdata->bin_data[i] = 0; - } - } -} - - -void VL53L1_i2c_encode_uint16_t( - uint16_t ip_value, - uint16_t count, - uint8_t *pbuffer) -{ - - - - - - - uint16_t i = 0; - uint16_t VL53L1_PRM_00005 = 0; - - VL53L1_PRM_00005 = ip_value; - - for (i = 0; i < count ; i++) { - pbuffer[count-i-1] = (uint8_t)(VL53L1_PRM_00005 & 0x00FF); - VL53L1_PRM_00005 = VL53L1_PRM_00005 >> 8; - } -} - -uint16_t VL53L1_i2c_decode_uint16_t( - uint16_t count, - uint8_t *pbuffer) -{ - - - - - - - uint16_t value = 0x00; - - while (count-- > 0) { - value = (value << 8) | (uint16_t)*pbuffer++; - } - - return value; -} - - -void VL53L1_i2c_encode_int16_t( - int16_t ip_value, - uint16_t count, - uint8_t *pbuffer) -{ - - - - - - - uint16_t i = 0; - int16_t VL53L1_PRM_00005 = 0; - - VL53L1_PRM_00005 = ip_value; - - for (i = 0; i < count ; i++) { - pbuffer[count-i-1] = (uint8_t)(VL53L1_PRM_00005 & 0x00FF); - VL53L1_PRM_00005 = VL53L1_PRM_00005 >> 8; - } -} - -int16_t VL53L1_i2c_decode_int16_t( - uint16_t count, - uint8_t *pbuffer) -{ - - - - - - - int16_t value = 0x00; - - - - if (*pbuffer >= 0x80) { - value = 0xFFFF; - } - - while (count-- > 0) { - value = (value << 8) | (int16_t)*pbuffer++; - } - - return value; -} - -void VL53L1_i2c_encode_uint32_t( - uint32_t ip_value, - uint16_t count, - uint8_t *pbuffer) -{ - - - - - - - uint16_t i = 0; - uint32_t VL53L1_PRM_00005 = 0; - - VL53L1_PRM_00005 = ip_value; - - for (i = 0; i < count ; i++) { - pbuffer[count-i-1] = (uint8_t)(VL53L1_PRM_00005 & 0x00FF); - VL53L1_PRM_00005 = VL53L1_PRM_00005 >> 8; - } -} - -uint32_t VL53L1_i2c_decode_uint32_t( - uint16_t count, - uint8_t *pbuffer) -{ - - - - - - - uint32_t value = 0x00; - - while (count-- > 0) { - value = (value << 8) | (uint32_t)*pbuffer++; - } - - return value; -} - - -uint32_t VL53L1_i2c_decode_with_mask( - uint16_t count, - uint8_t *pbuffer, - uint32_t bit_mask, - uint32_t down_shift, - uint32_t offset) -{ - - - - - - - uint32_t value = 0x00; - - - - while (count-- > 0) { - value = (value << 8) | (uint32_t)*pbuffer++; - } - - - - value = value & bit_mask; - if (down_shift > 0) { - value = value >> down_shift; - } - - - - value = value + offset; - - return value; -} - - -void VL53L1_i2c_encode_int32_t( - int32_t ip_value, - uint16_t count, - uint8_t *pbuffer) -{ - - - - - - - uint16_t i = 0; - int32_t VL53L1_PRM_00005 = 0; - - VL53L1_PRM_00005 = ip_value; - - for (i = 0; i < count ; i++) { - pbuffer[count-i-1] = (uint8_t)(VL53L1_PRM_00005 & 0x00FF); - VL53L1_PRM_00005 = VL53L1_PRM_00005 >> 8; - } -} - -int32_t VL53L1_i2c_decode_int32_t( - uint16_t count, - uint8_t *pbuffer) -{ - - - - - - - int32_t value = 0x00; - - - - if (*pbuffer >= 0x80) { - value = 0xFFFFFFFF; - } - - while (count-- > 0) { - value = (value << 8) | (int32_t)*pbuffer++; - } - - return value; -} - - -VL53L1_Error VL53L1_start_test( - VL53L1_DEV Dev, - uint8_t test_mode__ctrl) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) { - - status = VL53L1_WrByte( - Dev, - VL53L1_TEST_MODE__CTRL, - test_mode__ctrl); - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_firmware_enable_register( - VL53L1_DEV Dev, - uint8_t value) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - pdev->sys_ctrl.firmware__enable = value; - - status = VL53L1_WrByte( - Dev, - VL53L1_FIRMWARE__ENABLE, - pdev->sys_ctrl.firmware__enable); - - return status; -} - -VL53L1_Error VL53L1_enable_firmware( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - status = VL53L1_set_firmware_enable_register(Dev, 0x01); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_disable_firmware( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - status = VL53L1_set_firmware_enable_register(Dev, 0x00); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_powerforce_register( - VL53L1_DEV Dev, - uint8_t value) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - pdev->sys_ctrl.power_management__go1_power_force = value; - - status = VL53L1_WrByte( - Dev, - VL53L1_POWER_MANAGEMENT__GO1_POWER_FORCE, - pdev->sys_ctrl.power_management__go1_power_force); - - return status; -} - - -VL53L1_Error VL53L1_enable_powerforce( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - status = VL53L1_set_powerforce_register(Dev, 0x01); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_disable_powerforce( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - status = VL53L1_set_powerforce_register(Dev, 0x00); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_clear_interrupt( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->sys_ctrl.system__interrupt_clear = VL53L1_CLEAR_RANGE_INT; - - status = VL53L1_WrByte( - Dev, - VL53L1_SYSTEM__INTERRUPT_CLEAR, - pdev->sys_ctrl.system__interrupt_clear); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_force_shadow_stream_count_to_zero( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - if (status == VL53L1_ERROR_NONE) { - - status = VL53L1_disable_firmware(Dev); - } - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_WrByte( - Dev, - VL53L1_SHADOW_RESULT__STREAM_COUNT, - 0x00); - } - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_enable_firmware(Dev); - } - - return status; -} - - -uint32_t VL53L1_calc_macro_period_us( - uint16_t fast_osc_frequency, - uint8_t VL53L1_PRM_00007) -{ - - - - - - - - - uint32_t pll_period_us = 0; - uint8_t VL53L1_PRM_00028 = 0; - uint32_t macro_period_us = 0; - - LOG_FUNCTION_START(""); - - - - - - - pll_period_us = VL53L1_calc_pll_period_us(fast_osc_frequency); - - - - - - - VL53L1_PRM_00028 = VL53L1_decode_vcsel_period(VL53L1_PRM_00007); - - - - - - - - - - - - - - - macro_period_us = - (uint32_t)VL53L1_MACRO_PERIOD_VCSEL_PERIODS * - pll_period_us; - macro_period_us = macro_period_us >> 6; - - macro_period_us = macro_period_us * (uint32_t)VL53L1_PRM_00028; - macro_period_us = macro_period_us >> 6; - - - - - - - - - - - - - - LOG_FUNCTION_END(0); - - return macro_period_us; -} - - -uint16_t VL53L1_calc_range_ignore_threshold( - uint16_t central_rate, - int16_t x_gradient, - int16_t y_gradient, - uint8_t rate_mult) -{ - - - - - - - - - - - - - - - - int32_t range_ignore_thresh_int = 0; - uint16_t range_ignore_thresh_kcps = 0; - int32_t central_rate_int = 0; - int16_t x_gradient_int = 0; - int16_t y_gradient_int = 0; - - LOG_FUNCTION_START(""); - - - - - central_rate_int = ((int32_t)central_rate * (1 << 4)) / (1000); - - if (x_gradient < 0) { - x_gradient_int = x_gradient * -1; - } - - if (y_gradient < 0) { - y_gradient_int = y_gradient * -1; - } - - - - - - - - - range_ignore_thresh_int = (8 * x_gradient_int * 4) + (8 * y_gradient_int * 4); - - - - - range_ignore_thresh_int = range_ignore_thresh_int / 1000; - - - - - range_ignore_thresh_int = range_ignore_thresh_int + central_rate_int; - - - - - range_ignore_thresh_int = (int32_t)rate_mult * range_ignore_thresh_int; - - range_ignore_thresh_int = (range_ignore_thresh_int + (1<<4)) / (1<<5); - - - - - if (range_ignore_thresh_int > 0xFFFF) { - range_ignore_thresh_kcps = 0xFFFF; - } else { - range_ignore_thresh_kcps = (uint16_t)range_ignore_thresh_int; - } - - - - - - - - LOG_FUNCTION_END(0); - - return range_ignore_thresh_kcps; -} - - -uint32_t VL53L1_calc_timeout_mclks( - uint32_t timeout_us, - uint32_t macro_period_us) -{ - - - - - - - - - - - uint32_t timeout_mclks = 0; - - LOG_FUNCTION_START(""); - - timeout_mclks = - ((timeout_us << 12) + (macro_period_us>>1)) / - macro_period_us; - - LOG_FUNCTION_END(0); - - return timeout_mclks; -} - - -uint16_t VL53L1_calc_encoded_timeout( - uint32_t timeout_us, - uint32_t macro_period_us) -{ - - - - - - - - - - - uint32_t timeout_mclks = 0; - uint16_t timeout_encoded = 0; - - LOG_FUNCTION_START(""); - - timeout_mclks = - VL53L1_calc_timeout_mclks(timeout_us, macro_period_us); - - timeout_encoded = - VL53L1_encode_timeout(timeout_mclks); - - - - - - - - - - - LOG_FUNCTION_END(0); - - return timeout_encoded; -} - - -uint32_t VL53L1_calc_timeout_us( - uint32_t timeout_mclks, - uint32_t macro_period_us) -{ - - - - - - - - - - - uint32_t timeout_us = 0; - uint64_t tmp = 0; - - LOG_FUNCTION_START(""); - - tmp = (uint64_t)timeout_mclks * (uint64_t)macro_period_us; - tmp += 0x00800; - tmp = tmp >> 12; - - timeout_us = (uint32_t)tmp; - - - - - - - - - - - - LOG_FUNCTION_END(0); - - return timeout_us; -} - -uint16_t VL53L1_calc_crosstalk_plane_offset_with_margin( - uint16_t plane_offset_kcps, - int16_t margin_offset_kcps) -{ - uint16_t plane_offset_with_margin = 0; - int32_t plane_offset_kcps_temp = 0; - - LOG_FUNCTION_START(""); - - plane_offset_kcps_temp = - (int32_t)plane_offset_kcps + - (int32_t)margin_offset_kcps; - - if (plane_offset_kcps_temp < 0) { - plane_offset_kcps_temp = 0; - } else { - if (plane_offset_kcps_temp > 0xFFFF) { - plane_offset_kcps_temp = 0xFFFF; - } - } - - plane_offset_with_margin = (uint16_t) plane_offset_kcps_temp; - - LOG_FUNCTION_END(0); - - return plane_offset_with_margin; - -} - -uint32_t VL53L1_calc_decoded_timeout_us( - uint16_t timeout_encoded, - uint32_t macro_period_us) -{ - - - - - - - - - - - uint32_t timeout_mclks = 0; - uint32_t timeout_us = 0; - - LOG_FUNCTION_START(""); - - timeout_mclks = - VL53L1_decode_timeout(timeout_encoded); - - timeout_us = - VL53L1_calc_timeout_us(timeout_mclks, macro_period_us); - - LOG_FUNCTION_END(0); - - return timeout_us; -} - - -uint16_t VL53L1_encode_timeout(uint32_t timeout_mclks) -{ - - - - - - uint16_t encoded_timeout = 0; - uint32_t ls_byte = 0; - uint16_t ms_byte = 0; - - if (timeout_mclks > 0) { - ls_byte = timeout_mclks - 1; - - while ((ls_byte & 0xFFFFFF00) > 0) { - ls_byte = ls_byte >> 1; - ms_byte++; - } - - encoded_timeout = (ms_byte << 8) - + (uint16_t) (ls_byte & 0x000000FF); - } - - return encoded_timeout; -} - - -uint32_t VL53L1_decode_timeout(uint16_t encoded_timeout) -{ - - - - - - - uint32_t timeout_macro_clks = 0; - - timeout_macro_clks = ((uint32_t) (encoded_timeout & 0x00FF) - << (uint32_t) ((encoded_timeout & 0xFF00) >> 8)) + 1; - - return timeout_macro_clks; -} - - -VL53L1_Error VL53L1_calc_timeout_register_values( - uint32_t phasecal_config_timeout_us, - uint32_t mm_config_timeout_us, - uint32_t range_config_timeout_us, - uint16_t fast_osc_frequency, - VL53L1_general_config_t *pgeneral, - VL53L1_timing_config_t *ptiming) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - uint32_t macro_period_us = 0; - uint32_t timeout_mclks = 0; - uint16_t timeout_encoded = 0; - - LOG_FUNCTION_START(""); - - if (fast_osc_frequency == 0) { - status = VL53L1_ERROR_DIVISION_BY_ZERO; - } else { - - - macro_period_us = - VL53L1_calc_macro_period_us( - fast_osc_frequency, - ptiming->range_config__vcsel_period_a); - - - - timeout_mclks = - VL53L1_calc_timeout_mclks( - phasecal_config_timeout_us, - macro_period_us); - - - - if (timeout_mclks > 0xFF) - timeout_mclks = 0xFF; - - pgeneral->phasecal_config__timeout_macrop = - (uint8_t)timeout_mclks; - - - - timeout_encoded = - VL53L1_calc_encoded_timeout( - mm_config_timeout_us, - macro_period_us); - - ptiming->mm_config__timeout_macrop_a_hi = - (uint8_t)((timeout_encoded & 0xFF00) >> 8); - ptiming->mm_config__timeout_macrop_a_lo = - (uint8_t) (timeout_encoded & 0x00FF); - - - - timeout_encoded = - VL53L1_calc_encoded_timeout( - range_config_timeout_us, - macro_period_us); - - ptiming->range_config__timeout_macrop_a_hi = - (uint8_t)((timeout_encoded & 0xFF00) >> 8); - ptiming->range_config__timeout_macrop_a_lo = - (uint8_t) (timeout_encoded & 0x00FF); - - - - macro_period_us = - VL53L1_calc_macro_period_us( - fast_osc_frequency, - ptiming->range_config__vcsel_period_b); - - - - timeout_encoded = - VL53L1_calc_encoded_timeout( - mm_config_timeout_us, - macro_period_us); - - ptiming->mm_config__timeout_macrop_b_hi = - (uint8_t)((timeout_encoded & 0xFF00) >> 8); - ptiming->mm_config__timeout_macrop_b_lo = - (uint8_t) (timeout_encoded & 0x00FF); - - - - timeout_encoded = VL53L1_calc_encoded_timeout( - range_config_timeout_us, - macro_period_us); - - ptiming->range_config__timeout_macrop_b_hi = - (uint8_t)((timeout_encoded & 0xFF00) >> 8); - ptiming->range_config__timeout_macrop_b_lo = - (uint8_t) (timeout_encoded & 0x00FF); - } - - LOG_FUNCTION_END(0); - - return status; - -} - - -uint8_t VL53L1_encode_vcsel_period(uint8_t VL53L1_PRM_00028) -{ - - - - - - - uint8_t vcsel_period_reg = 0; - - vcsel_period_reg = (VL53L1_PRM_00028 >> 1) - 1; - - return vcsel_period_reg; -} - - -uint32_t VL53L1_decode_unsigned_integer( - uint8_t *pbuffer, - uint8_t no_of_bytes) -{ - - - - - - uint8_t i = 0; - uint32_t decoded_value = 0; - - for (i = 0 ; i < no_of_bytes ; i++) { - decoded_value = (decoded_value << 8) + (uint32_t)pbuffer[i]; - } - - return decoded_value; -} - - -void VL53L1_encode_unsigned_integer( - uint32_t ip_value, - uint8_t no_of_bytes, - uint8_t *pbuffer) -{ - - - - - - uint8_t i = 0; - uint32_t VL53L1_PRM_00005 = 0; - - VL53L1_PRM_00005 = ip_value; - for (i = 0; i < no_of_bytes ; i++) { - pbuffer[no_of_bytes-i-1] = VL53L1_PRM_00005 & 0x00FF; - VL53L1_PRM_00005 = VL53L1_PRM_00005 >> 8; - } -} - - -VL53L1_Error VL53L1_hist_copy_and_scale_ambient_info( - VL53L1_zone_hist_info_t *pidata, - VL53L1_histogram_bin_data_t *podata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - int64_t VL53L1_PRM_00006 = 0; - int64_t tmpi = 0; - int64_t tmpo = 0; - - LOG_FUNCTION_START(""); - - - if (pidata->result__dss_actual_effective_spads == 0) { - status = VL53L1_ERROR_DIVISION_BY_ZERO; - } else { - if (pidata->number_of_ambient_bins > 0 && - podata->number_of_ambient_bins == 0) { - - - - - - - - - - - tmpo = 1 + (int64_t)podata->total_periods_elapsed; - tmpo *= (int64_t)podata->result__dss_actual_effective_spads; - - tmpi = 1 + (int64_t)pidata->total_periods_elapsed; - tmpi *= (int64_t)pidata->result__dss_actual_effective_spads; - - VL53L1_PRM_00006 = tmpo * (int64_t)pidata->ambient_events_sum; - VL53L1_PRM_00006 += (tmpi/2); - - - - - VL53L1_PRM_00006 = do_division_s(VL53L1_PRM_00006, tmpi); - - podata->ambient_events_sum = (int32_t)VL53L1_PRM_00006; - - - - - - - podata->VL53L1_PRM_00026 = podata->ambient_events_sum; - podata->VL53L1_PRM_00026 += - ((int32_t)pidata->number_of_ambient_bins / 2); - podata->VL53L1_PRM_00026 /= - (int32_t)pidata->number_of_ambient_bins; - } - } - - LOG_FUNCTION_END(0); - - return status; -} - - -void VL53L1_hist_get_bin_sequence_config( - VL53L1_DEV Dev, - VL53L1_histogram_bin_data_t *pdata) -{ - - - - - - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - int32_t amb_thresh_low = 0; - int32_t amb_thresh_high = 0; - - uint8_t i = 0; - - LOG_FUNCTION_START(""); - - - - - amb_thresh_low = 1024 * - (int32_t)pdev->hist_cfg.histogram_config__amb_thresh_low; - amb_thresh_high = 1024 * - (int32_t)pdev->hist_cfg.histogram_config__amb_thresh_high; - - - - - - - - - - - if ((pdev->ll_state.rd_stream_count & 0x01) == 0) { - - pdata->bin_seq[5] = - pdev->hist_cfg.histogram_config__mid_amb_even_bin_4_5 >> 4; - pdata->bin_seq[4] = - pdev->hist_cfg.histogram_config__mid_amb_even_bin_4_5 & 0x0F; - pdata->bin_seq[3] = - pdev->hist_cfg.histogram_config__mid_amb_even_bin_2_3 >> 4; - pdata->bin_seq[2] = - pdev->hist_cfg.histogram_config__mid_amb_even_bin_2_3 & 0x0F; - pdata->bin_seq[1] = - pdev->hist_cfg.histogram_config__mid_amb_even_bin_0_1 >> 4; - pdata->bin_seq[0] = - pdev->hist_cfg.histogram_config__mid_amb_even_bin_0_1 & 0x0F; - - if (pdata->ambient_events_sum > amb_thresh_high) { - pdata->bin_seq[5] = - pdev->hist_cfg.histogram_config__high_amb_even_bin_4_5 >> 4; - pdata->bin_seq[4] = - pdev->hist_cfg.histogram_config__high_amb_even_bin_4_5 & 0x0F; - pdata->bin_seq[3] = - pdev->hist_cfg.histogram_config__high_amb_even_bin_2_3 >> 4; - pdata->bin_seq[2] = - pdev->hist_cfg.histogram_config__high_amb_even_bin_2_3 & 0x0F; - pdata->bin_seq[1] = - pdev->hist_cfg.histogram_config__high_amb_even_bin_0_1 >> 4; - pdata->bin_seq[0] = - pdev->hist_cfg.histogram_config__high_amb_even_bin_0_1 & 0x0F; - } - - if (pdata->ambient_events_sum < amb_thresh_low) { - pdata->bin_seq[5] = - pdev->hist_cfg.histogram_config__low_amb_even_bin_4_5 >> 4; - pdata->bin_seq[4] = - pdev->hist_cfg.histogram_config__low_amb_even_bin_4_5 & 0x0F; - pdata->bin_seq[3] = - pdev->hist_cfg.histogram_config__low_amb_even_bin_2_3 >> 4; - pdata->bin_seq[2] = - pdev->hist_cfg.histogram_config__low_amb_even_bin_2_3 & 0x0F; - pdata->bin_seq[1] = - pdev->hist_cfg.histogram_config__low_amb_even_bin_0_1 >> 4; - pdata->bin_seq[0] = - pdev->hist_cfg.histogram_config__low_amb_even_bin_0_1 & 0x0F; - } - - } else { - pdata->bin_seq[5] = - pdev->hist_cfg.histogram_config__mid_amb_odd_bin_5 & 0x0F; - pdata->bin_seq[4] = - pdev->hist_cfg.histogram_config__mid_amb_odd_bin_3_4 & 0x0F; - pdata->bin_seq[3] = - pdev->hist_cfg.histogram_config__mid_amb_odd_bin_3_4 >> 4; - pdata->bin_seq[2] = - pdev->hist_cfg.histogram_config__mid_amb_odd_bin_2 & 0x0F; - pdata->bin_seq[1] = - pdev->hist_cfg.histogram_config__mid_amb_odd_bin_0_1 >> 4; - pdata->bin_seq[0] = - pdev->hist_cfg.histogram_config__mid_amb_odd_bin_0_1 & 0x0F; - - if (pdata->ambient_events_sum > amb_thresh_high) { - pdata->bin_seq[5] = - pdev->hist_cfg.histogram_config__high_amb_odd_bin_4_5 >> 4; - pdata->bin_seq[4] = - pdev->hist_cfg.histogram_config__high_amb_odd_bin_4_5 & 0x0F; - pdata->bin_seq[3] = - pdev->hist_cfg.histogram_config__high_amb_odd_bin_2_3 >> 4; - pdata->bin_seq[2] = - pdev->hist_cfg.histogram_config__high_amb_odd_bin_2_3 & 0x0F; - pdata->bin_seq[1] = - pdev->hist_cfg.histogram_config__high_amb_odd_bin_0_1 >> 4; - pdata->bin_seq[0] = - pdev->hist_cfg.histogram_config__high_amb_odd_bin_0_1 & 0x0F; - } - - if (pdata->ambient_events_sum < amb_thresh_low) { - pdata->bin_seq[5] = - pdev->hist_cfg.histogram_config__low_amb_odd_bin_4_5 >> 4; - pdata->bin_seq[4] = - pdev->hist_cfg.histogram_config__low_amb_odd_bin_4_5 & 0x0F; - pdata->bin_seq[3] = - pdev->hist_cfg.histogram_config__low_amb_odd_bin_2_3 >> 4; - pdata->bin_seq[2] = - pdev->hist_cfg.histogram_config__low_amb_odd_bin_2_3 & 0x0F; - pdata->bin_seq[1] = - pdev->hist_cfg.histogram_config__low_amb_odd_bin_0_1 >> 4; - pdata->bin_seq[0] = - pdev->hist_cfg.histogram_config__low_amb_odd_bin_0_1 & 0x0F; - } - } - - - - - for (i = 0 ; i < VL53L1_MAX_BIN_SEQUENCE_LENGTH ; i++) { - pdata->bin_rep[i] = 1; - } - - LOG_FUNCTION_END(0); - -} - - -VL53L1_Error VL53L1_hist_phase_consistency_check( - VL53L1_DEV Dev, - VL53L1_zone_hist_info_t *phist_prev, - VL53L1_histogram_bin_data_t *phist_curr, - VL53L1_zone_objects_t *prange_prev, - VL53L1_range_results_t *prange_curr) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t VL53L1_PRM_00001 = 0; - uint8_t p = 0; - - uint16_t phase_delta = 0; - uint16_t phase_tolerance = 0; - - int32_t events_delta = 0; - int32_t events_tolerance = 0; - - VL53L1_DeviceError range_status = 0; - - LOG_FUNCTION_START(""); - - - - - phase_tolerance = - (uint16_t)pdev->histpostprocess.algo__consistency_check__phase_tolerance; - phase_tolerance = phase_tolerance << 8; - - - - - if (prange_prev->rd_device_state != VL53L1_DEVICESTATE_RANGING_GATHER_DATA && - prange_prev->rd_device_state != VL53L1_DEVICESTATE_RANGING_OUTPUT_DATA) { - return status; - } - - - - - if (phase_tolerance == 0) { - return status; - } - - for (VL53L1_PRM_00001 = 0 ; VL53L1_PRM_00001 < prange_curr->active_results ; VL53L1_PRM_00001++) { - - if ((prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].range_status == - VL53L1_DEVICEERROR_RANGECOMPLETE) || - (prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].range_status == - VL53L1_DEVICEERROR_RANGECOMPLETE_NO_WRAP_CHECK)) { - - - - - prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].range_status = - VL53L1_DEVICEERROR_PHASECONSISTENCY; - - - - - - - - for (p = 0 ; p < prange_prev->active_objects ; p++) { - - if (prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].VL53L1_PRM_00014 > - prange_prev->VL53L1_PRM_00005[p].VL53L1_PRM_00014) { - phase_delta = - prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].VL53L1_PRM_00014 - - prange_prev->VL53L1_PRM_00005[p].VL53L1_PRM_00014; - } else { - phase_delta = - prange_prev->VL53L1_PRM_00005[p].VL53L1_PRM_00014 - - prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].VL53L1_PRM_00014; - } - - if (phase_delta < phase_tolerance) { - - - - - - - status = - VL53L1_hist_events_consistency_check( - Dev, - VL53L1_PRM_00001, - p, - phist_prev, - phist_curr, - prange_prev, - prange_curr, - &events_tolerance, - &events_delta, - &range_status); - - prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].range_status = - range_status; - } - } - } - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_hist_events_consistency_check( - VL53L1_DEV Dev, - uint8_t VL53L1_PRM_00001, - uint8_t p, - VL53L1_zone_hist_info_t *phist_prev, - VL53L1_histogram_bin_data_t *phist_curr, - VL53L1_zone_objects_t *prange_prev, - VL53L1_range_results_t *prange_curr, - int32_t *pevents_tolerance, - int32_t *pevents_delta, - VL53L1_DeviceError *prange_status) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t event_sigma = 0; - - int64_t tmpp = 0; - int64_t tmpc = 0; - int64_t events_scaler = 0; - int64_t events_scaler_sq = 0; - int64_t c_signal_events = 0; - int64_t c_sig_noise_sq = 0; - int64_t c_amb_noise_sq = 0; - int64_t p_amb_noise_sq = 0; - - int32_t p_signal_events = 0; - uint32_t noise_sq_sum = 0; - - SUPPRESS_UNUSED_WARNING(phist_curr); - - - - - event_sigma = - pdev->histpostprocess.algo__consistency_check__event_sigma; - - if (event_sigma == 0) { - *prange_status = VL53L1_DEVICEERROR_RANGECOMPLETE; - return status; - } - - - - - tmpp = 1 + (int64_t)phist_prev->total_periods_elapsed; - tmpp *= (int64_t)phist_prev->result__dss_actual_effective_spads; - - - - - tmpc = 1 + (int64_t)prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].total_periods_elapsed; - tmpc *= (int64_t)prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].VL53L1_PRM_00003; - - - - - events_scaler = tmpp * 4096; - events_scaler += (tmpc/2); - events_scaler = do_division_s(events_scaler, tmpc); - - events_scaler_sq = events_scaler * events_scaler; - events_scaler_sq += 2048; - events_scaler_sq /= 4096; - - - - - c_signal_events = (int64_t)prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].VL53L1_PRM_00022; - c_signal_events -= (int64_t)prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].VL53L1_PRM_00023; - c_signal_events *= (int64_t)events_scaler; - c_signal_events += 2048; - c_signal_events /= 4096; - - c_sig_noise_sq = (int64_t)events_scaler_sq; - c_sig_noise_sq *= (int64_t)prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].VL53L1_PRM_00022; - c_sig_noise_sq += 2048; - c_sig_noise_sq /= 4096; - - c_amb_noise_sq = (int64_t)events_scaler_sq; - c_amb_noise_sq *= (int64_t)prange_curr->VL53L1_PRM_00005[VL53L1_PRM_00001].VL53L1_PRM_00023; - c_amb_noise_sq += 2048; - c_amb_noise_sq /= 4096; - - - - c_amb_noise_sq += 2; - c_amb_noise_sq /= 4; - - - - - - - - p_amb_noise_sq = - (int64_t)prange_prev->VL53L1_PRM_00005[p].VL53L1_PRM_00023; - - - - p_amb_noise_sq += 2; - p_amb_noise_sq /= 4; - - noise_sq_sum = - (uint32_t)prange_prev->VL53L1_PRM_00005[p].VL53L1_PRM_00022 + - (uint32_t)c_sig_noise_sq + - (uint32_t)p_amb_noise_sq + - (uint32_t)c_amb_noise_sq; - - *pevents_tolerance = - (int32_t)VL53L1_isqrt(noise_sq_sum * 16); - - *pevents_tolerance *= (int32_t)event_sigma; - *pevents_tolerance += 32; - *pevents_tolerance /= 64; - - p_signal_events = (int32_t)prange_prev->VL53L1_PRM_00005[p].VL53L1_PRM_00022; - p_signal_events -= (int32_t)prange_prev->VL53L1_PRM_00005[p].VL53L1_PRM_00023; - - if ((int32_t)c_signal_events > p_signal_events) { - *pevents_delta = - (int32_t)c_signal_events - p_signal_events; - } else { - *pevents_delta = - p_signal_events - (int32_t)c_signal_events; - } - - if (*pevents_delta > *pevents_tolerance) - *prange_status = VL53L1_DEVICEERROR_EVENTCONSISTENCY; - else - *prange_status = VL53L1_DEVICEERROR_RANGECOMPLETE; - - - - - - - - - - - - - - - - return status; -} - - -VL53L1_Error VL53L1_hist_wrap_dmax( - VL53L1_hist_post_process_config_t *phistpostprocess, - VL53L1_histogram_bin_data_t *pcurrent, - int16_t *pwrap_dmax_mm) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - uint32_t pll_period_mm = 0; - uint32_t wrap_dmax_phase = 0; - uint32_t range_mm = 0; - - LOG_FUNCTION_START(""); - - *pwrap_dmax_mm = 0; - - - if (pcurrent->VL53L1_PRM_00018 != 0) { - - - - - pll_period_mm = - VL53L1_calc_pll_period_mm( - pcurrent->VL53L1_PRM_00018); - - - - - wrap_dmax_phase = - (uint32_t)phistpostprocess->valid_phase_high << 8; - - - - - - range_mm = wrap_dmax_phase * pll_period_mm; - range_mm = (range_mm + (1<<14)) >> 15; - - *pwrap_dmax_mm = (int16_t)range_mm; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -void VL53L1_hist_combine_mm1_mm2_offsets( - int16_t mm1_offset_mm, - int16_t mm2_offset_mm, - uint8_t encoded_mm_roi_centre, - uint8_t encoded_mm_roi_size, - uint8_t encoded_zone_centre, - uint8_t encoded_zone_size, - VL53L1_additional_offset_cal_data_t *pcal_data, - uint8_t *pgood_spads, - uint16_t aperture_attenuation, - int16_t *prange_offset_mm) -{ - - - - - - - - - - - - - - - - uint16_t max_mm_inner_effective_spads = 0; - uint16_t max_mm_outer_effective_spads = 0; - uint16_t mm_inner_effective_spads = 0; - uint16_t mm_outer_effective_spads = 0; - - uint32_t scaled_mm1_peak_rate_mcps = 0; - uint32_t scaled_mm2_peak_rate_mcps = 0; - - int32_t tmp0 = 0; - int32_t tmp1 = 0; - - - - - VL53L1_calc_mm_effective_spads( - encoded_mm_roi_centre, - encoded_mm_roi_size, - 0xC7, - - 0xFF, - pgood_spads, - aperture_attenuation, - &max_mm_inner_effective_spads, - &max_mm_outer_effective_spads); - - - - - VL53L1_calc_mm_effective_spads( - encoded_mm_roi_centre, - encoded_mm_roi_size, - encoded_zone_centre, - encoded_zone_size, - pgood_spads, - aperture_attenuation, - &mm_inner_effective_spads, - &mm_outer_effective_spads); - - - - - scaled_mm1_peak_rate_mcps = (uint32_t)pcal_data->result__mm_inner_peak_signal_count_rtn_mcps; - scaled_mm1_peak_rate_mcps *= (uint32_t)mm_inner_effective_spads; - scaled_mm1_peak_rate_mcps /= (uint32_t)max_mm_inner_effective_spads; - - scaled_mm2_peak_rate_mcps = (uint32_t)pcal_data->result__mm_outer_peak_signal_count_rtn_mcps; - scaled_mm2_peak_rate_mcps *= (uint32_t)mm_outer_effective_spads; - scaled_mm2_peak_rate_mcps /= (uint32_t)max_mm_outer_effective_spads; - - - - - tmp0 = ((int32_t)mm1_offset_mm * (int32_t)scaled_mm1_peak_rate_mcps); - tmp0 += ((int32_t)mm2_offset_mm * (int32_t)scaled_mm2_peak_rate_mcps); - - tmp1 = (int32_t)scaled_mm1_peak_rate_mcps + - (int32_t)scaled_mm2_peak_rate_mcps; - - - - - - - if (tmp1 != 0) { - tmp0 = (tmp0 * 4) / tmp1; - } - - *prange_offset_mm = (int16_t)tmp0; - -} - - -void VL53L1_spad_number_to_byte_bit_index( - uint8_t spad_number, - uint8_t *pbyte_index, - uint8_t *pbit_index, - uint8_t *pbit_mask) -{ - - - - - - - - - - - *pbyte_index = spad_number >> 3; - *pbit_index = spad_number & 0x07; - *pbit_mask = 0x01 << *pbit_index; - -} - - -void VL53L1_encode_row_col( - uint8_t row, - uint8_t col, - uint8_t *pspad_number) -{ - - - - - - if (row > 7) { - *pspad_number = 128 + (col << 3) + (15-row); - } else { - *pspad_number = ((15-col) << 3) + row; - } -} - - -void VL53L1_decode_zone_size( - uint8_t encoded_xy_size, - uint8_t *pwidth, - uint8_t *pheight) -{ - - - - - - - - - - - - *pheight = encoded_xy_size >> 4; - *pwidth = encoded_xy_size & 0x0F; - -} - - -void VL53L1_encode_zone_size( - uint8_t width, - uint8_t height, - uint8_t *pencoded_xy_size) -{ - - - - - - - - - - - *pencoded_xy_size = (height << 4) + width; - -} - - -void VL53L1_decode_zone_limits( - uint8_t encoded_xy_centre, - uint8_t encoded_xy_size, - int16_t *px_ll, - int16_t *py_ll, - int16_t *px_ur, - int16_t *py_ur) -{ - - - - - - - - - - uint8_t x_centre = 0; - uint8_t y_centre = 0; - uint8_t width = 0; - uint8_t height = 0; - - - - - VL53L1_decode_row_col( - encoded_xy_centre, - &y_centre, - &x_centre); - - VL53L1_decode_zone_size( - encoded_xy_size, - &width, - &height); - - - - - *px_ll = (int16_t)x_centre - ((int16_t)width + 1) / 2; - if (*px_ll < 0) - *px_ll = 0; - - *px_ur = *px_ll + (int16_t)width; - if (*px_ur > (VL53L1_SPAD_ARRAY_WIDTH-1)) - *px_ur = VL53L1_SPAD_ARRAY_WIDTH-1; - - *py_ll = (int16_t)y_centre - ((int16_t)height + 1) / 2; - if (*py_ll < 0) - *py_ll = 0; - - *py_ur = *py_ll + (int16_t)height; - if (*py_ur > (VL53L1_SPAD_ARRAY_HEIGHT-1)) - *py_ur = VL53L1_SPAD_ARRAY_HEIGHT-1; -} - - -uint8_t VL53L1_is_aperture_location( - uint8_t row, - uint8_t col) -{ - - - - - - uint8_t is_aperture = 0; - uint8_t mod_row = row % 4; - uint8_t mod_col = col % 4; - - if (mod_row == 0 && mod_col == 2) - is_aperture = 1; - - if (mod_row == 2 && mod_col == 0) - is_aperture = 1; - - return is_aperture; -} - - -void VL53L1_calc_mm_effective_spads( - uint8_t encoded_mm_roi_centre, - uint8_t encoded_mm_roi_size, - uint8_t encoded_zone_centre, - uint8_t encoded_zone_size, - uint8_t *pgood_spads, - uint16_t aperture_attenuation, - uint16_t *pmm_inner_effective_spads, - uint16_t *pmm_outer_effective_spads) -{ - - - - - - - - int16_t x = 0; - int16_t y = 0; - - int16_t mm_x_ll = 0; - int16_t mm_y_ll = 0; - int16_t mm_x_ur = 0; - int16_t mm_y_ur = 0; - - int16_t zone_x_ll = 0; - int16_t zone_y_ll = 0; - int16_t zone_x_ur = 0; - int16_t zone_y_ur = 0; - - uint8_t spad_number = 0; - uint8_t byte_index = 0; - uint8_t bit_index = 0; - uint8_t bit_mask = 0; - - uint8_t is_aperture = 0; - uint16_t spad_attenuation = 0; - - - - - VL53L1_decode_zone_limits( - encoded_mm_roi_centre, - encoded_mm_roi_size, - &mm_x_ll, - &mm_y_ll, - &mm_x_ur, - &mm_y_ur); - - VL53L1_decode_zone_limits( - encoded_zone_centre, - encoded_zone_size, - &zone_x_ll, - &zone_y_ll, - &zone_x_ur, - &zone_y_ur); - - - - - - - - - - *pmm_inner_effective_spads = 0; - *pmm_outer_effective_spads = 0; - - for (y = zone_y_ll ; y <= zone_y_ur ; y++) { - for (x = zone_x_ll ; x <= zone_x_ur ; x++) { - - - - - VL53L1_encode_row_col( - (uint8_t)y, - (uint8_t)x, - &spad_number); - - - - - - - - - VL53L1_spad_number_to_byte_bit_index( - spad_number, - &byte_index, - &bit_index, - &bit_mask); - - - - - if ((pgood_spads[byte_index] & bit_mask) > 0) { - - - - is_aperture = VL53L1_is_aperture_location( - (uint8_t)y, - (uint8_t)x); - - if (is_aperture > 0) - spad_attenuation = aperture_attenuation; - else - spad_attenuation = 0x0100; - - - - - - - - if (x >= mm_x_ll && x <= mm_x_ur && - y >= mm_y_ll && y <= mm_y_ur) - *pmm_inner_effective_spads += - spad_attenuation; - else - *pmm_outer_effective_spads += - spad_attenuation; - } - } - } -} - - -void VL53L1_hist_copy_results_to_sys_and_core( - VL53L1_histogram_bin_data_t *pbins, - VL53L1_range_results_t *phist, - VL53L1_system_results_t *psys, - VL53L1_core_results_t *pcore) -{ - - - - - - uint8_t i = 0; - - VL53L1_range_data_t *pdata; - - LOG_FUNCTION_START(""); - - - - - VL53L1_init_system_results(psys); - - - - - psys->result__interrupt_status = pbins->result__interrupt_status; - psys->result__range_status = phist->active_results; - psys->result__report_status = pbins->result__report_status; - psys->result__stream_count = pbins->result__stream_count; - - pdata = &(phist->VL53L1_PRM_00005[0]); - - for (i = 0 ; i < phist->active_results ; i++) { - - switch (i) { - case 0: - psys->result__dss_actual_effective_spads_sd0 = \ - pdata->VL53L1_PRM_00003; - psys->result__peak_signal_count_rate_mcps_sd0 = \ - pdata->peak_signal_count_rate_mcps; - psys->result__avg_signal_count_rate_mcps_sd0 = \ - pdata->avg_signal_count_rate_mcps; - psys->result__ambient_count_rate_mcps_sd0 = \ - pdata->ambient_count_rate_mcps; - - psys->result__sigma_sd0 = pdata->VL53L1_PRM_00004; - psys->result__phase_sd0 = pdata->VL53L1_PRM_00014; - - psys->result__final_crosstalk_corrected_range_mm_sd0 = \ - (uint16_t)pdata->median_range_mm; - - psys->result__phase_sd1 = pdata->zero_distance_phase; - - pcore->result_core__ranging_total_events_sd0 = \ - pdata->VL53L1_PRM_00022; - pcore->result_core__signal_total_events_sd0 = \ - pdata->VL53L1_PRM_00009; - pcore->result_core__total_periods_elapsed_sd0 = \ - pdata->total_periods_elapsed; - pcore->result_core__ambient_window_events_sd0 = \ - pdata->VL53L1_PRM_00023; - - break; - case 1: - psys->result__dss_actual_effective_spads_sd1 = \ - pdata->VL53L1_PRM_00003; - psys->result__peak_signal_count_rate_mcps_sd1 = \ - pdata->peak_signal_count_rate_mcps; - psys->result__ambient_count_rate_mcps_sd1 = \ - pdata->ambient_count_rate_mcps; - - psys->result__sigma_sd1 = pdata->VL53L1_PRM_00004; - psys->result__phase_sd1 = pdata->VL53L1_PRM_00014; - - psys->result__final_crosstalk_corrected_range_mm_sd1 = \ - (uint16_t)pdata->median_range_mm; - - pcore->result_core__ranging_total_events_sd1 = \ - pdata->VL53L1_PRM_00022; - pcore->result_core__signal_total_events_sd1 = \ - pdata->VL53L1_PRM_00009; - pcore->result_core__total_periods_elapsed_sd1 = \ - pdata->total_periods_elapsed; - pcore->result_core__ambient_window_events_sd1 = \ - pdata->VL53L1_PRM_00023; - break; - } - - pdata++; - } - - LOG_FUNCTION_END(0); - -} - - -VL53L1_Error VL53L1_sum_histogram_data ( - VL53L1_histogram_bin_data_t *phist_input, - VL53L1_histogram_bin_data_t *phist_output) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - uint8_t i = 0; - uint8_t smallest_bin_num = 0; - - LOG_FUNCTION_START(""); - - - - - if (status == VL53L1_ERROR_NONE) { - - if (phist_output->VL53L1_PRM_00017 >= phist_input->VL53L1_PRM_00017) { - smallest_bin_num = phist_input->VL53L1_PRM_00017; - } else { - smallest_bin_num = phist_output->VL53L1_PRM_00017; - } - } - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - - for (i = 0 ; i < smallest_bin_num ; i++) { - - - - - phist_output->bin_data[i] += phist_input->bin_data[i]; - } - } - - if (status == VL53L1_ERROR_NONE) { - - phist_output->VL53L1_PRM_00026 += - phist_input->VL53L1_PRM_00026; - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_avg_histogram_data( - uint8_t no_of_samples, - VL53L1_histogram_bin_data_t *phist_sum, - VL53L1_histogram_bin_data_t *phist_avg) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - uint8_t i = 0; - - LOG_FUNCTION_START(""); - - - - - - - - - if (status == VL53L1_ERROR_NONE) { - - for (i = 0 ; i < phist_sum->VL53L1_PRM_00017 ; i++) { - - - - - if (no_of_samples > 0) { - phist_avg->bin_data[i] = phist_sum->bin_data[i] / - (int32_t)no_of_samples; - } else { - phist_avg->bin_data[i] = phist_sum->bin_data[i]; - } - } - } - - if (status == VL53L1_ERROR_NONE) { - - if (no_of_samples > 0) { - phist_avg->VL53L1_PRM_00026 = - phist_sum->VL53L1_PRM_00026 / (int32_t)no_of_samples; - } else { - phist_avg->VL53L1_PRM_00026 = - phist_sum->VL53L1_PRM_00026; - } - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_save_cfg_data( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - - VL53L1_zone_private_dyn_cfg_t *pzone_dyn_cfg; - VL53L1_dynamic_config_t *pdynamic = &(pdev->dyn_cfg); - - LOG_FUNCTION_START(""); - - pzone_dyn_cfg = &(pres->zone_dyn_cfgs.VL53L1_PRM_00005[pdev->ll_state.cfg_zone_id]); - - pzone_dyn_cfg->expected_stream_count = - pdev->ll_state.cfg_stream_count; - - pzone_dyn_cfg->expected_gph_id = - pdev->ll_state.cfg_gph_id; - - pzone_dyn_cfg->roi_config__user_roi_centre_spad = - pdynamic->roi_config__user_roi_centre_spad; - - pzone_dyn_cfg->roi_config__user_roi_requested_global_xy_size = - pdynamic->roi_config__user_roi_requested_global_xy_size; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_dynamic_zone_update( - VL53L1_DEV Dev, - VL53L1_range_results_t *presults) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_LLDriverResults_t *pres = - VL53L1DevStructGetLLResultsHandle(Dev); - VL53L1_ll_driver_state_t *pstate = &(pdev->ll_state); -#if 0 //Feb 24 - Local change to prevent compilation warning - VL53L1_zone_config_t *pzone_cfg; -#endif - uint8_t zone_id = pdev->ll_state.rd_zone_id; - uint8_t i; - uint16_t max_total_rate_per_spads; - uint16_t target_rate = pdev->stat_cfg.dss_config__target_total_rate_mcps; - uint32_t temp = 0xFFFF; - - LOG_FUNCTION_START(""); - - - - - - - - - - - - if (pstate->cfg_device_state == - VL53L1_DEVICESTATE_RANGING_DSS_MANUAL) { - - - - - - - - pres->zone_dyn_cfgs.VL53L1_PRM_00005[zone_id].dss_requested_effective_spad_count = 0; - - trace_print(VL53L1_TRACE_LEVEL_DEBUG, - " DYNZONEUPDATE: peak signal count rate mcps:\ - %u actual effective spads: %u\n", - presults->VL53L1_PRM_00005[0].peak_signal_count_rate_mcps, - presults->VL53L1_PRM_00005[0].VL53L1_PRM_00003); - - trace_print(VL53L1_TRACE_LEVEL_DEBUG, - " DYNZONEUPDATE: active results: %u\n", - presults->active_results); - - max_total_rate_per_spads = presults->VL53L1_PRM_00005[0].total_rate_per_spad_mcps; - - trace_print(VL53L1_TRACE_LEVEL_DEBUG, - " DYNZONEUPDATE: max total rate per spad at start: %u\n", - max_total_rate_per_spads); - - for (i = 1; i < presults->active_results; i++) { - trace_print(VL53L1_TRACE_LEVEL_DEBUG, - " DYNZONEUPDATE: zone total rate per spad: zone_id: %u,\ - total rate per spad: %u\n", - i, - presults->VL53L1_PRM_00005[i].total_rate_per_spad_mcps); - - if (presults->VL53L1_PRM_00005[i].total_rate_per_spad_mcps > - max_total_rate_per_spads) { - max_total_rate_per_spads = - presults->VL53L1_PRM_00005[i].total_rate_per_spad_mcps; - } - } - - if (max_total_rate_per_spads == 0) { - - - - - - temp = 0xFFFF; - } else { - - - - - - temp = target_rate << 14; - trace_print(VL53L1_TRACE_LEVEL_DEBUG, - " DYNZONEUPDATE: 1: temp: %u\n", - temp); - - - - - - temp = temp / max_total_rate_per_spads; - - trace_print(VL53L1_TRACE_LEVEL_DEBUG, - " DYNZONEUPDATE: 2: temp: %u\n", - temp); - - - - - - if (temp > 0xFFFF) { - temp = 0xFFFF; - } - - trace_print(VL53L1_TRACE_LEVEL_DEBUG, - " DYNZONEUPDATE: 3: temp: %u\n", - temp); - } - - pres->zone_dyn_cfgs.VL53L1_PRM_00005[zone_id].dss_requested_effective_spad_count = - (uint16_t)temp; - - trace_print(VL53L1_TRACE_LEVEL_DEBUG, - " DYNZONEUPDATE: zone_id: %u, target_rate: %u,\ - max_total_rate_per_spads: %u, requested_spads: %u\n", - zone_id, - target_rate, - max_total_rate_per_spads, - pres->zone_dyn_cfgs.VL53L1_PRM_00005[zone_id].dss_requested_effective_spad_count); - } - - LOG_FUNCTION_END(status); - - return status; -} - -VL53L1_Error VL53L1_multizone_hist_bins_update( - VL53L1_DEV Dev) -{ - - - - - - - - - - - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - VL53L1_ll_driver_state_t *pstate = &(pdev->ll_state); - VL53L1_zone_config_t *pzone_cfg = &(pdev->zone_cfg); - VL53L1_histogram_config_t *phist_cfg = &(pdev->hist_cfg); - VL53L1_histogram_config_t *pmulti_hist = &(pzone_cfg->multizone_hist_cfg); - - uint8_t next_range_is_odd_timing = (pstate->cfg_stream_count) % 2; - - LOG_FUNCTION_START(""); - - - - - - if (pzone_cfg->bin_config[pdev->ll_state.cfg_zone_id] == - VL53L1_ZONECONFIG_BINCONFIG__LOWAMB) { - if (!next_range_is_odd_timing) { - trace_print (VL53L1_TRACE_LEVEL_DEBUG, - " HISTBINCONFIGUPDATE: Setting LOWAMB EVEN timing\n"); - phist_cfg->histogram_config__low_amb_even_bin_0_1 = - pmulti_hist->histogram_config__low_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_even_bin_2_3 = - pmulti_hist->histogram_config__low_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_even_bin_4_5 = - pmulti_hist->histogram_config__low_amb_even_bin_4_5; - } - - if (next_range_is_odd_timing) { - trace_print (VL53L1_TRACE_LEVEL_DEBUG, - " HISTBINCONFIGUPDATE: Setting LOWAMB ODD timing\n"); - phist_cfg->histogram_config__low_amb_odd_bin_0_1 = - pmulti_hist->histogram_config__low_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_odd_bin_2_3 = - pmulti_hist->histogram_config__low_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_odd_bin_4_5 = - pmulti_hist->histogram_config__low_amb_even_bin_4_5; - } - } else if (pzone_cfg->bin_config[pdev->ll_state.cfg_zone_id] == - VL53L1_ZONECONFIG_BINCONFIG__MIDAMB) { - - trace_print (VL53L1_TRACE_LEVEL_DEBUG, - " HISTBINCONFIGUPDATE: Setting MIDAMB timing\n"); - if (!next_range_is_odd_timing) { - trace_print(VL53L1_TRACE_LEVEL_DEBUG, - " HISTBINCONFIGUPDATE: Setting MIDAMB EVEN timing\n"); - phist_cfg->histogram_config__low_amb_even_bin_0_1 = - pmulti_hist->histogram_config__mid_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_even_bin_2_3 = - pmulti_hist->histogram_config__mid_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_even_bin_4_5 = - pmulti_hist->histogram_config__mid_amb_even_bin_4_5; - } - - if (next_range_is_odd_timing) { - trace_print (VL53L1_TRACE_LEVEL_DEBUG, - " HISTBINCONFIGUPDATE: Setting MIDAMB ODD timing\n"); - phist_cfg->histogram_config__low_amb_odd_bin_0_1 = - pmulti_hist->histogram_config__mid_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_odd_bin_2_3 = - pmulti_hist->histogram_config__mid_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_odd_bin_4_5 = - pmulti_hist->histogram_config__mid_amb_even_bin_4_5; - } - } else if (pzone_cfg->bin_config[pdev->ll_state.cfg_zone_id] == - VL53L1_ZONECONFIG_BINCONFIG__HIGHAMB) { - if (!next_range_is_odd_timing) { - trace_print (VL53L1_TRACE_LEVEL_DEBUG, - " HISTBINCONFIGUPDATE: Setting HIGHAMB EVEN timing\n"); - phist_cfg->histogram_config__low_amb_even_bin_0_1 = - pmulti_hist->histogram_config__high_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_even_bin_2_3 = - pmulti_hist->histogram_config__high_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_even_bin_4_5 = - pmulti_hist->histogram_config__high_amb_even_bin_4_5; - } - - if (next_range_is_odd_timing) { - trace_print (VL53L1_TRACE_LEVEL_DEBUG, - " HISTBINCONFIGUPDATE: Setting HIGHAMB ODD timing\n"); - phist_cfg->histogram_config__low_amb_odd_bin_0_1 = - pmulti_hist->histogram_config__high_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_odd_bin_2_3 = - pmulti_hist->histogram_config__high_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_odd_bin_4_5 = - pmulti_hist->histogram_config__high_amb_even_bin_4_5; - } - } - - - - - - - if (status == VL53L1_ERROR_NONE) { - - VL53L1_copy_hist_bins_to_static_cfg( - phist_cfg, - &(pdev->stat_cfg), - &(pdev->tim_cfg)); - } - - LOG_FUNCTION_END(status); - - return status; -} - - - - - - - - - - - - - - - - -VL53L1_Error VL53L1_update_internal_stream_counters( - VL53L1_DEV Dev, - uint8_t external_stream_count, - uint8_t *pinternal_stream_count, - uint8_t *pinternal_stream_count_val) -{ - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t stream_divider; - - VL53L1_LLDriverData_t *pdev = - VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - stream_divider = pdev->gen_cfg.global_config__stream_divider; - - if (stream_divider == 0) { - - - - - - - *pinternal_stream_count = external_stream_count; - - } else if (*pinternal_stream_count_val == (stream_divider-1)) { - - - - - - if (*pinternal_stream_count == 0xFF) { - *pinternal_stream_count = 0x80; - } else { - *pinternal_stream_count = *pinternal_stream_count + 1; - } - - - - - - *pinternal_stream_count_val = 0; - - } else { - - - - - - *pinternal_stream_count_val = *pinternal_stream_count_val + 1; - } - - trace_print(VL53L1_TRACE_LEVEL_DEBUG, - "UPDINTSTREAMCOUNT internal_steam_count: %d,\ - internal_stream_count_val: %d, divider: %d\n", - *pinternal_stream_count, - *pinternal_stream_count_val, - stream_divider); - - LOG_FUNCTION_END(status); - - return status; -} - - - - - - - -VL53L1_Error VL53L1_set_histogram_multizone_initial_bin_config( - VL53L1_zone_config_t *pzone_cfg, - VL53L1_histogram_config_t *phist_cfg, - VL53L1_histogram_config_t *pmulti_hist - ) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - if (pzone_cfg->bin_config[0] == - VL53L1_ZONECONFIG_BINCONFIG__LOWAMB) { - phist_cfg->histogram_config__low_amb_even_bin_0_1 = - pmulti_hist->histogram_config__low_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_even_bin_2_3 = - pmulti_hist->histogram_config__low_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_even_bin_4_5 = - pmulti_hist->histogram_config__low_amb_even_bin_4_5; - - phist_cfg->histogram_config__low_amb_odd_bin_0_1 = - pmulti_hist->histogram_config__low_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_odd_bin_2_3 = - pmulti_hist->histogram_config__low_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_odd_bin_4_5 = - pmulti_hist->histogram_config__low_amb_even_bin_4_5; - } else if (pzone_cfg->bin_config[0] == - VL53L1_ZONECONFIG_BINCONFIG__MIDAMB) { - - phist_cfg->histogram_config__low_amb_even_bin_0_1 = - pmulti_hist->histogram_config__mid_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_even_bin_2_3 = - pmulti_hist->histogram_config__mid_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_even_bin_4_5 = - pmulti_hist->histogram_config__mid_amb_even_bin_4_5; - - phist_cfg->histogram_config__low_amb_odd_bin_0_1 = - pmulti_hist->histogram_config__mid_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_odd_bin_2_3 = - pmulti_hist->histogram_config__mid_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_odd_bin_4_5 = - pmulti_hist->histogram_config__mid_amb_even_bin_4_5; - } else if (pzone_cfg->bin_config[0] == - VL53L1_ZONECONFIG_BINCONFIG__HIGHAMB) { - phist_cfg->histogram_config__low_amb_even_bin_0_1 = - pmulti_hist->histogram_config__high_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_even_bin_2_3 = - pmulti_hist->histogram_config__high_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_even_bin_4_5 = - pmulti_hist->histogram_config__high_amb_even_bin_4_5; - phist_cfg->histogram_config__low_amb_odd_bin_0_1 = - pmulti_hist->histogram_config__high_amb_even_bin_0_1; - phist_cfg->histogram_config__low_amb_odd_bin_2_3 = - pmulti_hist->histogram_config__high_amb_even_bin_2_3; - phist_cfg->histogram_config__low_amb_odd_bin_4_5 = - pmulti_hist->histogram_config__high_amb_even_bin_4_5; - } - - LOG_FUNCTION_END(status); - return status; -} - - - - - - -uint8_t VL53L1_encode_GPIO_interrupt_config( - VL53L1_GPIO_interrupt_config_t *pintconf) -{ - uint8_t system__interrupt_config; - - system__interrupt_config = pintconf->intr_mode_distance; - system__interrupt_config |= ((pintconf->intr_mode_rate) << 2); - system__interrupt_config |= ((pintconf->intr_new_measure_ready) << 5); - system__interrupt_config |= ((pintconf->intr_no_target) << 6); - system__interrupt_config |= ((pintconf->intr_combined_mode) << 7); - - return system__interrupt_config; -} - - - - - - -VL53L1_GPIO_interrupt_config_t VL53L1_decode_GPIO_interrupt_config( - uint8_t system__interrupt_config) -{ - VL53L1_GPIO_interrupt_config_t intconf; - - intconf.intr_mode_distance = system__interrupt_config & 0x03; - intconf.intr_mode_rate = (system__interrupt_config >> 2) & 0x03; - intconf.intr_new_measure_ready = (system__interrupt_config >> 5) & 0x01; - intconf.intr_no_target = (system__interrupt_config >> 6) & 0x01; - intconf.intr_combined_mode = (system__interrupt_config >> 7) & 0x01; - - return intconf; -} - - - - - - -VL53L1_Error VL53L1_set_GPIO_distance_threshold( - VL53L1_DEV Dev, - uint16_t threshold_high, - uint16_t threshold_low) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->dyn_cfg.system__thresh_high = threshold_high; - pdev->dyn_cfg.system__thresh_low = threshold_low; - - LOG_FUNCTION_END(status); - return status; -} - - - - - - -VL53L1_Error VL53L1_set_GPIO_rate_threshold( - VL53L1_DEV Dev, - uint16_t threshold_high, - uint16_t threshold_low) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - pdev->gen_cfg.system__thresh_rate_high = threshold_high; - pdev->gen_cfg.system__thresh_rate_low = threshold_low; - - LOG_FUNCTION_END(status); - return status; -} - - - - - - -VL53L1_Error VL53L1_set_GPIO_thresholds_from_struct( - VL53L1_DEV Dev, - VL53L1_GPIO_interrupt_config_t *pintconf) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - status = VL53L1_set_GPIO_distance_threshold( - Dev, - pintconf->threshold_distance_high, - pintconf->threshold_distance_low); - - if (status == VL53L1_ERROR_NONE) { - status = - VL53L1_set_GPIO_rate_threshold( - Dev, - pintconf->threshold_rate_high, - pintconf->threshold_rate_low); - } - - LOG_FUNCTION_END(status); - return status; -} - - -VL53L1_Error VL53L1_set_ref_spad_char_config( - VL53L1_DEV Dev, - uint8_t vcsel_period_a, - uint32_t phasecal_timeout_us, - uint16_t total_rate_target_mcps, - uint16_t max_count_rate_rtn_limit_mcps, - uint16_t min_count_rate_rtn_limit_mcps, - uint16_t fast_osc_frequency) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t buffer[2]; - - uint32_t macro_period_us = 0; - uint32_t timeout_mclks = 0; - - LOG_FUNCTION_START(""); - - - - - - macro_period_us = - VL53L1_calc_macro_period_us( - fast_osc_frequency, - vcsel_period_a); - - - - - - - timeout_mclks = phasecal_timeout_us << 12; - timeout_mclks = timeout_mclks + (macro_period_us>>1); - timeout_mclks = timeout_mclks / macro_period_us; - - if (timeout_mclks > 0xFF) - pdev->gen_cfg.phasecal_config__timeout_macrop = 0xFF; - else - pdev->gen_cfg.phasecal_config__timeout_macrop = - (uint8_t)timeout_mclks; - - pdev->tim_cfg.range_config__vcsel_period_a = vcsel_period_a; - - - - - - - if (status == VL53L1_ERROR_NONE) - - status = - VL53L1_WrByte( - Dev, - VL53L1_PHASECAL_CONFIG__TIMEOUT_MACROP, - pdev->gen_cfg.phasecal_config__timeout_macrop); - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WrByte( - Dev, - VL53L1_RANGE_CONFIG__VCSEL_PERIOD_A, - pdev->tim_cfg.range_config__vcsel_period_a); - - - - - - - - buffer[0] = pdev->tim_cfg.range_config__vcsel_period_a; - buffer[1] = pdev->tim_cfg.range_config__vcsel_period_a; - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WriteMulti( - Dev, - VL53L1_SD_CONFIG__WOI_SD0, - buffer, - 2); - - - - - - - - pdev->customer.ref_spad_char__total_rate_target_mcps = - total_rate_target_mcps; - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WrWord( - Dev, - VL53L1_REF_SPAD_CHAR__TOTAL_RATE_TARGET_MCPS, - total_rate_target_mcps); - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WrWord( - Dev, - VL53L1_RANGE_CONFIG__SIGMA_THRESH, - max_count_rate_rtn_limit_mcps); - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WrWord( - Dev, - VL53L1_RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS, - min_count_rate_rtn_limit_mcps); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_ssc_config( - VL53L1_DEV Dev, - VL53L1_ssc_config_t *pssc_cfg, - uint16_t fast_osc_frequency) -{ - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t buffer[5]; - - uint32_t macro_period_us = 0; - uint16_t timeout_encoded = 0; - - LOG_FUNCTION_START(""); - - - - - - macro_period_us = - VL53L1_calc_macro_period_us( - fast_osc_frequency, - pssc_cfg->VL53L1_PRM_00007); - - - - - - timeout_encoded = - VL53L1_calc_encoded_timeout( - pssc_cfg->timeout_us, - macro_period_us); - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WrByte( - Dev, - VL53L1_CAL_CONFIG__VCSEL_START, - pssc_cfg->vcsel_start); - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WrByte( - Dev, - VL53L1_GLOBAL_CONFIG__VCSEL_WIDTH, - pssc_cfg->vcsel_width); - - - - - buffer[0] = (uint8_t)((timeout_encoded & 0x0000FF00) >> 8); - buffer[1] = (uint8_t) (timeout_encoded & 0x000000FF); - buffer[2] = pssc_cfg->VL53L1_PRM_00007; - buffer[3] = (uint8_t)((pssc_cfg->rate_limit_mcps & 0x0000FF00) >> 8); - buffer[4] = (uint8_t) (pssc_cfg->rate_limit_mcps & 0x000000FF); - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WriteMulti( - Dev, - VL53L1_RANGE_CONFIG__TIMEOUT_MACROP_B_HI, - buffer, - 5); - - - - - - - - buffer[0] = pssc_cfg->VL53L1_PRM_00007; - buffer[1] = pssc_cfg->VL53L1_PRM_00007; - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WriteMulti( - Dev, - VL53L1_SD_CONFIG__WOI_SD0, - buffer, - 2); - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WrByte( - Dev, - VL53L1_NVM_BIST__CTRL, - pssc_cfg->array_select); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_spad_rate_data( - VL53L1_DEV Dev, - VL53L1_spad_rate_data_t *pspad_rates) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - int i = 0; - - uint8_t VL53L1_PRM_00005[512]; - uint8_t *pdata = &VL53L1_PRM_00005[0]; - - LOG_FUNCTION_START(""); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_ReadMulti( - Dev, - VL53L1_PRIVATE__PATCH_BASE_ADDR_RSLV, - pdata, - 512); - - - - pdata = &VL53L1_PRM_00005[0]; - for (i = 0 ; i < VL53L1_NO_OF_SPAD_ENABLES ; i++) { - pspad_rates->rate_data[i] = - (uint16_t)VL53L1_decode_unsigned_integer(pdata, 2); - pdata += 2; - } - - - - - pspad_rates->VL53L1_PRM_00016 = VL53L1_NO_OF_SPAD_ENABLES; - pspad_rates->no_of_values = VL53L1_NO_OF_SPAD_ENABLES; - pspad_rates->fractional_bits = 15; - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_core_support.c b/drivers/input/misc/vl53L1/src/vl53l1_core_support.c deleted file mode 100644 index 3176e424d4c0..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_core_support.c +++ /dev/null @@ -1,931 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_ll_device.h" -#include "vl53l1_platform_log.h" -#include "vl53l1_core_support.h" -#include "vl53l1_platform_user_data.h" -#include "vl53l1_platform_user_defines.h" - - - - - - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_CORE, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_CORE, \ - status, fmt, ##__VA_ARGS__) - -#define trace_print(level, ...) \ - _LOG_TRACE_PRINT(VL53L1_TRACE_MODULE_CORE, \ - level, VL53L1_TRACE_FUNCTION_NONE, ##__VA_ARGS__) - - -uint32_t VL53L1_calc_pll_period_us( - uint16_t fast_osc_frequency) -{ - - - - - - - - - - - - - - - uint32_t pll_period_us = 0; - - LOG_FUNCTION_START(""); - - pll_period_us = (0x01 << 30) / fast_osc_frequency; - - - - - - - - LOG_FUNCTION_END(0); - - return pll_period_us; -} - - -uint32_t VL53L1_duration_maths( - uint32_t pll_period_us, - uint32_t vcsel_parm_pclks, - uint32_t window_vclks, - uint32_t elapsed_mclks) -{ - - - - - - - - - - - uint64_t tmp_long_int = 0; - uint32_t duration_us = 0; - - - - - - - duration_us = window_vclks * pll_period_us; - - - - - - duration_us = duration_us >> 12; - - - - tmp_long_int = (uint64_t)duration_us; - - - - - - - duration_us = elapsed_mclks * vcsel_parm_pclks; - - - - - - duration_us = duration_us >> 4; - - - - - - tmp_long_int = tmp_long_int * (uint64_t)duration_us; - - - - - - tmp_long_int = tmp_long_int >> 12; - - - - if (tmp_long_int > 0xFFFFFFFF) { - tmp_long_int = 0xFFFFFFFF; - } - - duration_us = (uint32_t)tmp_long_int; - - return duration_us; -} - - -uint32_t VL53L1_events_per_spad_maths( - int32_t VL53L1_PRM_00009, - uint16_t num_spads, - uint32_t duration) -{ - uint64_t total_hist_counts = 0; - uint64_t xtalk_per_spad = 0; - uint32_t rate_per_spad_kcps = 0; - - - - - - - - - - - - - - - - - - uint64_t dividend = ((uint64_t)VL53L1_PRM_00009 - * 1000 * 256); - - total_hist_counts = do_division_u(dividend, (uint64_t)num_spads); - - - - - if (duration > 0) { - - - - - - - - - uint64_t dividend = (((uint64_t)(total_hist_counts << 11)) - + ((uint64_t)duration / 2)); - - xtalk_per_spad = do_division_u(dividend, (uint64_t)duration); - } else { - xtalk_per_spad = (uint64_t)(total_hist_counts << 11); - } - - rate_per_spad_kcps = (uint32_t)xtalk_per_spad; - - return rate_per_spad_kcps; -} - - -uint32_t VL53L1_isqrt(uint32_t num) -{ - - - - - - - - - uint32_t res = 0; - uint32_t bit = 1 << 30; - - - - - while (bit > num) { - bit >>= 2; - } - - while (bit != 0) { - if (num >= res + bit) { - num -= res + bit; - res = (res >> 1) + bit; - } else { - res >>= 1; - } - bit >>= 2; - } - - return res; -} - - -void VL53L1_hist_calc_zero_distance_phase( - VL53L1_histogram_bin_data_t *pdata) -{ - - - - - - - uint32_t period = 0; - uint32_t VL53L1_PRM_00013 = 0; - - LOG_FUNCTION_START(""); - - period = 2048 * - (uint32_t)VL53L1_decode_vcsel_period(pdata->VL53L1_PRM_00007); - - VL53L1_PRM_00013 = period; - VL53L1_PRM_00013 += (uint32_t)pdata->phasecal_result__reference_phase; - VL53L1_PRM_00013 += (2048 * (uint32_t)pdata->phasecal_result__vcsel_start); - VL53L1_PRM_00013 -= (2048 * (uint32_t)pdata->cal_config__vcsel_start); - - VL53L1_PRM_00013 = VL53L1_PRM_00013 % period; - - pdata->zero_distance_phase = (uint16_t)VL53L1_PRM_00013; - - LOG_FUNCTION_END(0); -} - - -void VL53L1_hist_estimate_ambient_from_thresholded_bins( - int32_t ambient_threshold_sigma, - VL53L1_histogram_bin_data_t *pdata) -{ - - - - - - - - - - uint8_t bin = 0; - int32_t VL53L1_PRM_00029 = 0; - - LOG_FUNCTION_START(""); - - - - - - - VL53L1_hist_find_min_max_bin_values(pdata); - - - - - - - - VL53L1_PRM_00029 = (int32_t)VL53L1_isqrt((uint32_t)pdata->min_bin_value); - VL53L1_PRM_00029 *= ambient_threshold_sigma; - VL53L1_PRM_00029 += 0x07; - VL53L1_PRM_00029 = VL53L1_PRM_00029 >> 4; - VL53L1_PRM_00029 += pdata->min_bin_value; - - - - - - - pdata->number_of_ambient_samples = 0; - pdata->ambient_events_sum = 0; - - for (bin = 0 ; bin < pdata->VL53L1_PRM_00017 ; bin++) { - if (pdata->bin_data[bin] < VL53L1_PRM_00029) { - pdata->ambient_events_sum += pdata->bin_data[bin]; - pdata->number_of_ambient_samples++; - } - } - - - - - - - if (pdata->number_of_ambient_samples > 0) { - pdata->VL53L1_PRM_00026 = pdata->ambient_events_sum; - pdata->VL53L1_PRM_00026 += ((int32_t)pdata->number_of_ambient_samples/2); - pdata->VL53L1_PRM_00026 /= (int32_t)pdata->number_of_ambient_samples; - } - - LOG_FUNCTION_END(0); -} - - -void VL53L1_hist_remove_ambient_bins( - VL53L1_histogram_bin_data_t *pdata) -{ - - - - - - - - uint8_t bin = 0; - uint8_t VL53L1_PRM_00001 = 0; - uint8_t i = 0; - - - - - if ((pdata->bin_seq[0] & 0x07) == 0x07) { - - i = 0; - for (VL53L1_PRM_00001 = 0 ; VL53L1_PRM_00001 < VL53L1_MAX_BIN_SEQUENCE_LENGTH ; VL53L1_PRM_00001++) { - if ((pdata->bin_seq[VL53L1_PRM_00001] & 0x07) != 0x07) { - pdata->bin_seq[i] = pdata->bin_seq[VL53L1_PRM_00001]; - pdata->bin_rep[i] = pdata->bin_rep[VL53L1_PRM_00001]; - i++; - } - } - - - - - - - for (VL53L1_PRM_00001 = i ; VL53L1_PRM_00001 < VL53L1_MAX_BIN_SEQUENCE_LENGTH ; VL53L1_PRM_00001++) { - pdata->bin_seq[VL53L1_PRM_00001] = VL53L1_MAX_BIN_SEQUENCE_CODE + 1; - pdata->bin_rep[VL53L1_PRM_00001] = 0; - } - } - - if (pdata->number_of_ambient_bins > 0) { - - - - for (bin = pdata->number_of_ambient_bins ; - bin < pdata->VL53L1_PRM_00016 ; bin++) { - pdata->bin_data[bin-pdata->number_of_ambient_bins] = - pdata->bin_data[bin]; - } - - - - pdata->VL53L1_PRM_00017 = - pdata->VL53L1_PRM_00017 - - pdata->number_of_ambient_bins; - pdata->number_of_ambient_bins = 0; - } -} - - -uint32_t VL53L1_calc_pll_period_mm( - uint16_t fast_osc_frequency) -{ - - - - - - - uint32_t pll_period_us = 0; - uint32_t pll_period_mm = 0; - - LOG_FUNCTION_START(""); - - - - - - - pll_period_us = VL53L1_calc_pll_period_us(fast_osc_frequency); - - - - - - - - - - - - - pll_period_mm = - VL53L1_SPEED_OF_LIGHT_IN_AIR_DIV_8 * - (pll_period_us >> 2); - - - - pll_period_mm = (pll_period_mm + (0x01<<15)) >> 16; - - LOG_FUNCTION_END(0); - - return pll_period_mm; -} - - -uint16_t VL53L1_rate_maths( - int32_t VL53L1_PRM_00006, - uint32_t time_us) -{ - - - - - - - - - - - - - uint32_t tmp_int = 0; - uint32_t frac_bits = 7; - uint16_t rate_mcps = 0; - - - - - - - - if (VL53L1_PRM_00006 > VL53L1_SPAD_TOTAL_COUNT_MAX) { - tmp_int = VL53L1_SPAD_TOTAL_COUNT_MAX; - } else if (VL53L1_PRM_00006 > 0) { - tmp_int = (uint32_t)VL53L1_PRM_00006; - } - - - - - - - - if (VL53L1_PRM_00006 > VL53L1_SPAD_TOTAL_COUNT_RES_THRES) { - frac_bits = 3; - } else { - frac_bits = 7; - } - - - - - - - - if (time_us > 0) { - tmp_int = ((tmp_int << frac_bits) + (time_us / 2)) / time_us; - } - - - - - - if (VL53L1_PRM_00006 > VL53L1_SPAD_TOTAL_COUNT_RES_THRES) { - tmp_int = tmp_int << 4; - } - - - - - - - - if (tmp_int > 0xFFFF) { - tmp_int = 0xFFFF; - } - - rate_mcps = (uint16_t)tmp_int; - - return rate_mcps; -} - - -uint16_t VL53L1_rate_per_spad_maths( - uint32_t frac_bits, - uint32_t peak_count_rate, - uint16_t num_spads, - uint32_t max_output_value) -{ - - uint32_t tmp_int = 0; - - - - uint16_t rate_per_spad = 0; - - - - - - - - - - if (num_spads > 0) { - tmp_int = (peak_count_rate << 8) << frac_bits; - tmp_int = (tmp_int + ((uint32_t)num_spads / 2)) / (uint32_t)num_spads; - } else { - tmp_int = ((peak_count_rate) << frac_bits); - } - - - - - if (tmp_int > max_output_value) { - tmp_int = max_output_value; - } - - rate_per_spad = (uint16_t)tmp_int; - - return rate_per_spad; -} - - -int32_t VL53L1_range_maths( - uint16_t fast_osc_frequency, - uint16_t VL53L1_PRM_00013, - uint16_t zero_distance_phase, - int32_t gain_factor, - int32_t range_offset_mm) -{ - - - - - - uint32_t pll_period_us = 0; - - int64_t tmp_long_int = 0; - int32_t range_mm = 0; - - - - - pll_period_us = VL53L1_calc_pll_period_us(fast_osc_frequency); - - - - - - - - - - - tmp_long_int = (int64_t)VL53L1_PRM_00013 - (int64_t)zero_distance_phase; - - - - - - - - - - - tmp_long_int = tmp_long_int * (int64_t)pll_period_us; - - - - - - - tmp_long_int = tmp_long_int / (0x01 << 9); - - - - - - - - - - - - tmp_long_int = tmp_long_int * VL53L1_SPEED_OF_LIGHT_IN_AIR_DIV_8; - - - - - - - tmp_long_int = tmp_long_int / (0x01 << 22); - - - - range_mm = (int32_t)tmp_long_int + range_offset_mm; - - - - range_mm *= gain_factor; - range_mm += 0x0400; - range_mm /= 0x0800; - - - - range_mm = range_mm / (0x01 << 2); - - return range_mm; -} - - -uint8_t VL53L1_decode_vcsel_period(uint8_t vcsel_period_reg) -{ - - - - - - - uint8_t VL53L1_PRM_00028 = 0; - - VL53L1_PRM_00028 = (vcsel_period_reg + 1) << 1; - - return VL53L1_PRM_00028; -} - - -void VL53L1_copy_xtalk_bin_data_to_histogram_data_struct( - VL53L1_xtalk_histogram_shape_t *pxtalk, - VL53L1_histogram_bin_data_t *phist) -{ - - - - - - - phist->cal_config__vcsel_start = - pxtalk->cal_config__vcsel_start; - phist->VL53L1_PRM_00018 = - pxtalk->VL53L1_PRM_00018; - phist->VL53L1_PRM_00015 = - pxtalk->VL53L1_PRM_00015; - - phist->phasecal_result__reference_phase = - pxtalk->phasecal_result__reference_phase; - phist->phasecal_result__vcsel_start = - pxtalk->phasecal_result__vcsel_start; - - phist->vcsel_width = - pxtalk->vcsel_width; - phist->zero_distance_phase = - pxtalk->zero_distance_phase; - - phist->zone_id = pxtalk->zone_id; - phist->VL53L1_PRM_00016 = pxtalk->VL53L1_PRM_00016; - phist->time_stamp = pxtalk->time_stamp; -} - - -void VL53L1_init_histogram_bin_data_struct( - int32_t bin_value, - uint16_t VL53L1_PRM_00017, - VL53L1_histogram_bin_data_t *pdata) -{ - - - - - - - uint16_t i = 0; - - pdata->cfg_device_state = VL53L1_DEVICESTATE_SW_STANDBY; - pdata->rd_device_state = VL53L1_DEVICESTATE_SW_STANDBY; - - pdata->zone_id = 0; - pdata->time_stamp = 0; - - pdata->VL53L1_PRM_00015 = 0; - pdata->VL53L1_PRM_00016 = VL53L1_HISTOGRAM_BUFFER_SIZE; - pdata->VL53L1_PRM_00017 = (uint8_t)VL53L1_PRM_00017; - pdata->number_of_ambient_bins = 0; - - pdata->result__interrupt_status = 0; - pdata->result__range_status = 0; - pdata->result__report_status = 0; - pdata->result__stream_count = 0; - - pdata->result__dss_actual_effective_spads = 0; - pdata->phasecal_result__reference_phase = 0; - pdata->phasecal_result__vcsel_start = 0; - pdata->cal_config__vcsel_start = 0; - - pdata->vcsel_width = 0; - pdata->VL53L1_PRM_00007 = 0; - pdata->VL53L1_PRM_00018 = 0; - pdata->total_periods_elapsed = 0; - - pdata->min_bin_value = 0; - pdata->max_bin_value = 0; - - pdata->zero_distance_phase = 0; - pdata->number_of_ambient_samples = 0; - pdata->ambient_events_sum = 0; - pdata->VL53L1_PRM_00026 = 0; - - for (i = 0 ; i < VL53L1_MAX_BIN_SEQUENCE_LENGTH ; i++) { - pdata->bin_seq[i] = (uint8_t)i; - } - for (i = 0 ; i < VL53L1_MAX_BIN_SEQUENCE_LENGTH ; i++) { - pdata->bin_rep[i] = 1; - } - - for (i = 0 ; i < VL53L1_HISTOGRAM_BUFFER_SIZE ; i++) { - if (i < VL53L1_PRM_00017) { - pdata->bin_data[i] = bin_value; - } else { - pdata->bin_data[i] = 0; - } - } -} - - -void VL53L1_decode_row_col( - uint8_t spad_number, - uint8_t *prow, - uint8_t *pcol) -{ - - - - - - - - if (spad_number > 127) { - *prow = 8 + ((255-spad_number) & 0x07); - *pcol = (spad_number-128) >> 3; - } else { - *prow = spad_number & 0x07; - *pcol = (127-spad_number) >> 3; - } -} - - -void VL53L1_hist_find_min_max_bin_values( - VL53L1_histogram_bin_data_t *pdata) -{ - - - - - - uint8_t bin = 0; - - LOG_FUNCTION_START(""); - - for (bin = 0 ; bin < pdata->VL53L1_PRM_00017 ; bin++) { - - if (bin == 0 || pdata->min_bin_value >= pdata->bin_data[bin]) { - pdata->min_bin_value = pdata->bin_data[bin]; - } - - if (bin == 0 || pdata->max_bin_value <= pdata->bin_data[bin]) { - pdata->max_bin_value = pdata->bin_data[bin]; - } - } - - LOG_FUNCTION_END(0); - -} - - -void VL53L1_hist_estimate_ambient_from_ambient_bins( - VL53L1_histogram_bin_data_t *pdata) -{ - - - - - - - uint8_t bin = 0; - - LOG_FUNCTION_START(""); - - if (pdata->number_of_ambient_bins > 0) { - - pdata->number_of_ambient_samples = - pdata->number_of_ambient_bins; - - - - - pdata->ambient_events_sum = 0; - for (bin = 0 ; bin < pdata->number_of_ambient_bins ; bin++) { - pdata->ambient_events_sum += pdata->bin_data[bin]; - } - - pdata->VL53L1_PRM_00026 = pdata->ambient_events_sum; - pdata->VL53L1_PRM_00026 += - ((int32_t)pdata->number_of_ambient_bins / 2); - pdata->VL53L1_PRM_00026 /= - (int32_t)pdata->number_of_ambient_bins; - - } - - LOG_FUNCTION_END(0); -} - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_error_strings.c b/drivers/input/misc/vl53L1/src/vl53l1_error_strings.c deleted file mode 100644 index 716ef9ba3607..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_error_strings.c +++ /dev/null @@ -1,327 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_error_codes.h" -#include "vl53l1_error_strings.h" -#include "vl53l1_platform_log.h" -#include "vl53l1_ll_def.h" - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_API, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_API, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_API, \ - status, fmt, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_get_pal_error_string( - VL53L1_Error PalErrorCode, - char *pPalErrorString) -{ - VL53L1_Error Status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - -#ifdef VL53L1_USE_EMPTY_STRING - VL53L1_COPYSTRING(pPalErrorString, ""); -#else - - switch (PalErrorCode) { - case VL53L1_ERROR_NONE: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_NONE); - break; - case VL53L1_ERROR_CALIBRATION_WARNING: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_CALIBRATION_WARNING); - break; - case VL53L1_ERROR_MIN_CLIPPED: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_MIN_CLIPPED); - break; - case VL53L1_ERROR_UNDEFINED: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_UNDEFINED); - break; - case VL53L1_ERROR_INVALID_PARAMS: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_INVALID_PARAMS); - break; - case VL53L1_ERROR_NOT_SUPPORTED: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_NOT_SUPPORTED); - break; - case VL53L1_ERROR_RANGE_ERROR: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_RANGE_ERROR); - break; - case VL53L1_ERROR_TIME_OUT: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_TIME_OUT); - break; - case VL53L1_ERROR_MODE_NOT_SUPPORTED: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_MODE_NOT_SUPPORTED); - break; - case VL53L1_ERROR_BUFFER_TOO_SMALL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_BUFFER_TOO_SMALL); - break; - case VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_COMMS_BUFFER_TOO_SMALL); - break; - case VL53L1_ERROR_GPIO_NOT_EXISTING: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_GPIO_NOT_EXISTING); - break; - case VL53L1_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED); - break; - case VL53L1_ERROR_CONTROL_INTERFACE: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_CONTROL_INTERFACE); - break; - case VL53L1_ERROR_INVALID_COMMAND: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_INVALID_COMMAND); - break; - case VL53L1_ERROR_DIVISION_BY_ZERO: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_DIVISION_BY_ZERO); - break; - case VL53L1_ERROR_REF_SPAD_INIT: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_REF_SPAD_INIT); - break; - case VL53L1_ERROR_GPH_SYNC_CHECK_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_GPH_SYNC_CHECK_FAIL); - break; - case VL53L1_ERROR_STREAM_COUNT_CHECK_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_STREAM_COUNT_CHECK_FAIL); - break; - case VL53L1_ERROR_GPH_ID_CHECK_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_GPH_ID_CHECK_FAIL); - break; - case VL53L1_ERROR_ZONE_STREAM_COUNT_CHECK_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_ZONE_STREAM_COUNT_CHECK_FAIL); - break; - case VL53L1_ERROR_ZONE_GPH_ID_CHECK_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_ZONE_GPH_ID_CHECK_FAIL); - break; - - case VL53L1_ERROR_XTALK_EXTRACTION_NO_SAMPLE_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_XTALK_EXTRACTION_NO_SAMPLES_FAIL); - break; - case VL53L1_ERROR_XTALK_EXTRACTION_SIGMA_LIMIT_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_XTALK_EXTRACTION_SIGMA_LIMIT_FAIL); - break; - - case VL53L1_ERROR_OFFSET_CAL_NO_SAMPLE_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_OFFSET_CAL_NO_SAMPLE_FAIL); - break; - case VL53L1_ERROR_OFFSET_CAL_NO_SPADS_ENABLED_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_OFFSET_CAL_NO_SPADS_ENABLED_FAIL); - break; - case VL53L1_ERROR_ZONE_CAL_NO_SAMPLE_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_ZONE_CAL_NO_SAMPLE_FAIL); - break; - - case VL53L1_WARNING_OFFSET_CAL_MISSING_SAMPLES: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_OFFSET_CAL_MISSING_SAMPLES); - break; - case VL53L1_WARNING_OFFSET_CAL_SIGMA_TOO_HIGH: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_OFFSET_CAL_SIGMA_TOO_HIGH); - break; - case VL53L1_WARNING_OFFSET_CAL_RATE_TOO_HIGH: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_OFFSET_CAL_RATE_TOO_HIGH); - break; - case VL53L1_WARNING_OFFSET_CAL_SPAD_COUNT_TOO_LOW: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_OFFSET_CAL_SPAD_COUNT_TOO_LOW); - break; - - case VL53L1_WARNING_ZONE_CAL_MISSING_SAMPLES: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_ZONE_CAL_MISSING_SAMPLES); - break; - case VL53L1_WARNING_ZONE_CAL_SIGMA_TOO_HIGH: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_ZONE_CAL_SIGMA_TOO_HIGH); - break; - case VL53L1_WARNING_ZONE_CAL_RATE_TOO_HIGH: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_ZONE_CAL_RATE_TOO_HIGH); - break; - - case VL53L1_WARNING_REF_SPAD_CHAR_NOT_ENOUGH_SPADS: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_REF_SPAD_CHAR_NOT_ENOUGH_SPADS); - break; - case VL53L1_WARNING_REF_SPAD_CHAR_RATE_TOO_HIGH: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_REF_SPAD_CHAR_RATE_TOO_HIGH); - break; - case VL53L1_WARNING_REF_SPAD_CHAR_RATE_TOO_LOW: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_REF_SPAD_CHAR_RATE_TOO_LOW); - break; - - case VL53L1_WARNING_XTALK_MISSING_SAMPLES: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_XTALK_MISSING_SAMPLES); - break; - case VL53L1_WARNING_XTALK_NO_SAMPLES_FOR_GRADIENT: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_XTALK_NO_SAMPLES_FOR_GRADIENT); - break; - case VL53L1_WARNING_XTALK_SIGMA_LIMIT_FOR_GRADIENT: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_WARNING_XTALK_SIGMA_LIMIT_FOR_GRADIENT); - break; - - case VL53L1_ERROR_DEVICE_FIRMWARE_TOO_OLD: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_DEVICE_FIRMWARE_TOO_OLD); - break; - case VL53L1_ERROR_DEVICE_FIRMWARE_TOO_NEW: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_DEVICE_FIRMWARE_TOO_NEW); - break; - case VL53L1_ERROR_UNIT_TEST_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_UNIT_TEST_FAIL); - break; - case VL53L1_ERROR_FILE_READ_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_FILE_READ_FAIL); - break; - case VL53L1_ERROR_FILE_WRITE_FAIL: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_FILE_WRITE_FAIL); - break; - case VL53L1_ERROR_NOT_IMPLEMENTED: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_ERROR_NOT_IMPLEMENTED); - break; - default: - VL53L1_COPYSTRING(pPalErrorString, - VL53L1_STRING_UNKNOW_ERROR_CODE); - } - -#endif - - LOG_FUNCTION_END(Status); - - return Status; -} - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_fpga_core.c b/drivers/input/misc/vl53L1/src/vl53l1_fpga_core.c deleted file mode 100644 index 194eb570c306..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_fpga_core.c +++ /dev/null @@ -1,167 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_platform.h" -#include "vl53l1_register_map.h" -#include "vl53l1_core.h" -#include "vl53l1_fpga_core.h" - - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_CORE, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_CORE, status, fmt, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_is_firmware_ready_fpga( - VL53L1_DEV Dev, - uint8_t *pready) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t comms_buffer[5]; - - LOG_FUNCTION_START(""); - - - - - status = VL53L1_ReadMulti( - Dev, - VL53L1_INTERRUPT_MANAGER__ENABLES, - comms_buffer, - 5); - - if (status == VL53L1_ERROR_NONE) { - - pdev->dbg_results.interrupt_manager__enables = - comms_buffer[0]; - pdev->dbg_results.interrupt_manager__clear = - comms_buffer[1]; - pdev->dbg_results.interrupt_manager__status = - comms_buffer[2]; - pdev->dbg_results.mcu_to_host_bank__wr_access_en = - comms_buffer[3]; - pdev->dbg_results.power_management__go1_reset_status = - comms_buffer[4]; - - if (((pdev->dbg_results.interrupt_manager__enables & 0x1F) == 0x1F) && - ((pdev->dbg_results.interrupt_manager__clear & 0x1F) == 0x1F)) - *pready = 0x01; - else - *pready = 0x00; - } - - LOG_FUNCTION_END(status); - - return status; -} - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_hist_char.c b/drivers/input/misc/vl53L1/src/vl53l1_hist_char.c deleted file mode 100644 index 0570d90dd969..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_hist_char.c +++ /dev/null @@ -1,282 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include - -#include - - - - - - - -#include "vl53l1_core.h" -#include "vl53l1_register_settings.h" -#include "vl53l1_hist_char.h" - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_HISTOGRAM, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_HISTOGRAM, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_HISTOGRAM, status, fmt, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_set_calib_config( - VL53L1_DEV Dev, - uint8_t vcsel_delay__a0, - uint8_t calib_1, - uint8_t calib_2, - uint8_t calib_3, - uint8_t calib_2__a0, - uint8_t spad_readout) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[3]; - - LOG_FUNCTION_START(""); - - - - - if (status == VL53L1_ERROR_NONE) { - - status = VL53L1_enable_powerforce(Dev); - } - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_disable_firmware(Dev); - } - - - - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__VCSEL_DELAY__A0, - vcsel_delay__a0); - } - - - - - if (status == VL53L1_ERROR_NONE) { - - - - - - - - comms_buffer[0] = calib_1; - comms_buffer[1] = calib_2; - comms_buffer[2] = calib_3; - - status = VL53L1_WriteMulti( - Dev, - VL53L1_RANGING_CORE__CALIB_1, - comms_buffer, - 3); - } - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__CALIB_2__A0, - calib_2__a0); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__SPAD_READOUT, - spad_readout); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - - -VL53L1_Error VL53L1_set_hist_calib_pulse_delay( - VL53L1_DEV Dev, - uint8_t calib_delay) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - status = - VL53L1_set_calib_config( - Dev, - 0x01, - - calib_delay, - - 0x04, - - 0x08, - - 0x14, - - VL53L1_RANGING_CORE__SPAD_READOUT__CALIB_PULSES); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_disable_calib_pulse_delay( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - status = - VL53L1_set_calib_config( - Dev, - 0x00, - - 0x00, - - 0x00, - - 0x00, - - 0x00, - - VL53L1_RANGING_CORE__SPAD_READOUT__STANDARD); - - LOG_FUNCTION_END(status); - - return status; -} - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_nvm.c b/drivers/input/misc/vl53L1/src/vl53l1_nvm.c deleted file mode 100644 index f595257aceaa..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_nvm.c +++ /dev/null @@ -1,1639 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#ifdef _MSC_VER -#define snprintf _snprintf -#endif - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_platform.h" -#include "vl53l1_platform_log.h" -#include "vl53l1_register_map.h" -#include "vl53l1_core.h" -#include "vl53l1_nvm_structs.h" -#include "vl53l1_nvm_map.h" -#include "vl53l1_nvm.h" - - - - - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_NVM, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_NVM, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_NVM, status, fmt, ##__VA_ARGS__) - -#define trace_print(level, ...) \ - _LOG_TRACE_PRINT(VL53L1_TRACE_MODULE_NVM, \ - level, VL53L1_TRACE_FUNCTION_NONE, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_nvm_enable( - VL53L1_DEV Dev, - uint16_t nvm_ctrl_pulse_width, - int32_t nvm_power_up_delay_us) -{ - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_powerforce(Dev); - - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WaitUs( - Dev, - VL53L1_ENABLE_POWERFORCE_SETTLING_TIME_US); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__NVM_CTRL__PDN, - 0x01); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__CLK_CTRL1, - 0x05); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WaitUs( - Dev, - nvm_power_up_delay_us); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__NVM_CTRL__MODE, - 0x01); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrWord( - Dev, - VL53L1_RANGING_CORE__NVM_CTRL__PULSE_WIDTH_MSB, - nvm_ctrl_pulse_width); - - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_nvm_read( - VL53L1_DEV Dev, - uint8_t start_address, - uint8_t count, - uint8_t *pdata) -{ - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t nvm_addr = 0; - - LOG_FUNCTION_START(""); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%-12s = 0x%02X (%3u)\n", - "nvm_addr", nvm_addr, nvm_addr); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%-12s = 0x%02X (%3u)\n", - "count", count, count); - - for (nvm_addr = start_address; nvm_addr < (start_address+count) ; nvm_addr++) { - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__NVM_CTRL__ADDR, - nvm_addr); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__NVM_CTRL__READN, - 0x00); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WaitUs( - Dev, - VL53L1_NVM_READ_TRIGGER_DELAY_US); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__NVM_CTRL__READN, - 0x01); - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_RANGING_CORE__NVM_CTRL__DATAOUT_MMM, - pdata, - 4); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "NVM address : 0x%02X = 0x%02X%02X%02X%02X\n", - nvm_addr, *pdata, *(pdata+1), *(pdata+2), *(pdata+3)); - - - - - pdata = pdata + 4; - - - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_nvm_disable( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__NVM_CTRL__READN, - 0x01); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WrByte( - Dev, - VL53L1_RANGING_CORE__NVM_CTRL__PDN, - 0x00); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_powerforce(Dev); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_nvm_format_decode( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_decoded_nvm_data_t *pdata) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - uint8_t i = 0; - uint8_t *ptmp = NULL; - int pptmp[VL53L1_NVM_MAX_FMT_RANGE_DATA]; - - LOG_FUNCTION_START(""); - - if (VL53L1_NVM_SIZE_IN_BYTES > buf_size) - return VL53L1_ERROR_BUFFER_TOO_SMALL; - - pdata->nvm__identification_model_id = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__IDENTIFICATION__MODEL_ID, - 0x000000FF, - 0, - 0); - pdata->nvm__identification_module_type = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__IDENTIFICATION__MODULE_TYPE, - 0x000000FF, - 0, - 0); - pdata->nvm__identification_revision_id = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__IDENTIFICATION__REVISION_ID, - 0x0000000F, - 0, - 0); - pdata->nvm__identification_module_id = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__IDENTIFICATION__MODULE_ID, - 0x0000FFFF, - 0, - 0); - pdata->nvm__i2c_valid = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__I2C_VALID, - 0x000000FF, - 0, - 0); - pdata->nvm__i2c_device_address_ews = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__I2C_SLAVE__DEVICE_ADDRESS, - 0x000000FF, - 0, - 0); - pdata->nvm__ews__fast_osc_frequency = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__EWS__OSC_MEASURED__FAST_OSC_FREQUENCY, - 0x0000FFFF, - 0, - 0); - pdata->nvm__ews__fast_osc_trim_max = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__FAST_OSC_TRIM_MAX, - 0x0000007F, - 0, - 0); - pdata->nvm__ews__fast_osc_freq_set = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__FAST_OSC_FREQ_SET, - 0x00000007, - 0, - 0); - pdata->nvm__ews__slow_osc_calibration = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__EWS__SLOW_OSC_CALIBRATION, - 0x000003FF, - 0, - 0); - pdata->nvm__fmt__fast_osc_frequency = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__FMT__OSC_MEASURED__FAST_OSC_FREQUENCY, - 0x0000FFFF, - 0, - 0); - pdata->nvm__fmt__fast_osc_trim_max = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FAST_OSC_TRIM_MAX, - 0x0000007F, - 0, - 0); - pdata->nvm__fmt__fast_osc_freq_set = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FAST_OSC_FREQ_SET, - 0x00000007, - 0, - 0); - pdata->nvm__fmt__slow_osc_calibration = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__FMT__SLOW_OSC_CALIBRATION, - 0x000003FF, - 0, - 0); - pdata->nvm__vhv_config_unlock = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__VHV_CONFIG_UNLOCK, - 0x000000FF, - 0, - 0); - pdata->nvm__ref_selvddpix = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__REF_SELVDDPIX, - 0x0000000F, - 0, - 0); - pdata->nvm__ref_selvquench = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__REF_SELVQUENCH, - 0x00000078, - 3, - 0); - pdata->nvm__regavdd1v2_sel = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__REGAVDD1V2_SEL_REGDVDD1V2_SEL, - 0x0000000C, - 2, - 0); - pdata->nvm__regdvdd1v2_sel = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__REGAVDD1V2_SEL_REGDVDD1V2_SEL, - 0x00000003, - 0, - 0); - pdata->nvm__vhv_timeout__macrop = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND, - 0x00000003, - 0, - 0); - pdata->nvm__vhv_loop_bound = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND, - 0x000000FC, - 2, - 0); - pdata->nvm__vhv_count_threshold = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__VHV_CONFIG__COUNT_THRESH, - 0x000000FF, - 0, - 0); - pdata->nvm__vhv_offset = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__VHV_CONFIG__OFFSET, - 0x0000003F, - 0, - 0); - pdata->nvm__vhv_init_enable = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__VHV_CONFIG__INIT, - 0x00000080, - 7, - 0); - pdata->nvm__vhv_init_value = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__VHV_CONFIG__INIT, - 0x0000003F, - 0, - 0); - pdata->nvm__laser_safety_vcsel_trim_ll = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY__VCSEL_TRIM_LL, - 0x00000007, - 0, - 0); - pdata->nvm__laser_safety_vcsel_selion_ll = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY__VCSEL_SELION_LL, - 0x0000003F, - 0, - 0); - pdata->nvm__laser_safety_vcsel_selion_max_ll = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY__VCSEL_SELION_MAX_LL, - 0x0000003F, - 0, - 0); - pdata->nvm__laser_safety_mult_ll = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY__MULT_LL, - 0x0000003F, - 0, - 0); - pdata->nvm__laser_safety_clip_ll = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY__CLIP_LL, - 0x0000003F, - 0, - 0); - pdata->nvm__laser_safety_vcsel_trim_ld = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY__VCSEL_TRIM_LD, - 0x00000007, - 0, - 0); - pdata->nvm__laser_safety_vcsel_selion_ld = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY__VCSEL_SELION_LD, - 0x0000003F, - 0, - 0); - pdata->nvm__laser_safety_vcsel_selion_max_ld = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY__VCSEL_SELION_MAX_LD, - 0x0000003F, - 0, - 0); - pdata->nvm__laser_safety_mult_ld = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY__MULT_LD, - 0x0000003F, - 0, - 0); - pdata->nvm__laser_safety_clip_ld = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY__CLIP_LD, - 0x0000003F, - 0, - 0); - pdata->nvm__laser_safety_lock_byte = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY_LOCK_BYTE, - 0x000000FF, - 0, - 0); - pdata->nvm__laser_safety_unlock_byte = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__LASER_SAFETY_UNLOCK_BYTE, - 0x000000FF, - 0, - 0); - - - - - ptmp = pbuffer + VL53L1_NVM__EWS__SPAD_ENABLES_RTN_0_; - for (i = 0 ; i < VL53L1_RTN_SPAD_BUFFER_SIZE ; i++) - pdata->nvm__ews__spad_enables_rtn[i] = *ptmp++; - - ptmp = pbuffer + VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC1_0_; - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) - pdata->nvm__ews__spad_enables_ref__loc1[i] = *ptmp++; - - ptmp = pbuffer + VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC2_0_; - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) - pdata->nvm__ews__spad_enables_ref__loc2[i] = *ptmp++; - - ptmp = pbuffer + VL53L1_NVM__EWS__SPAD_ENABLES_REF__LOC3_0_; - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) - pdata->nvm__ews__spad_enables_ref__loc3[i] = *ptmp++; - - - - - ptmp = pbuffer + VL53L1_NVM__FMT__SPAD_ENABLES_RTN_0_; - for (i = 0 ; i < VL53L1_RTN_SPAD_BUFFER_SIZE ; i++) - pdata->nvm__fmt__spad_enables_rtn[i] = *ptmp++; - - ptmp = pbuffer + VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC1_0_; - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) - pdata->nvm__fmt__spad_enables_ref__loc1[i] = *ptmp++; - - ptmp = pbuffer + VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC2_0_; - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) - pdata->nvm__fmt__spad_enables_ref__loc2[i] = *ptmp++; - - ptmp = pbuffer + VL53L1_NVM__FMT__SPAD_ENABLES_REF__LOC3_0_; - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) - pdata->nvm__fmt__spad_enables_ref__loc3[i] = *ptmp++; - - - pdata->nvm__fmt__roi_config__mode_roi_centre_spad = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__ROI_CONFIG__MODE_ROI_CENTRE_SPAD, - 0x000000FF, - 0, - 0); - pdata->nvm__fmt__roi_config__mode_roi_x_size = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__ROI_CONFIG__MODE_ROI_XY_SIZE, - 0x000000F0, - 4, - 0); - pdata->nvm__fmt__roi_config__mode_roi_y_size = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__ROI_CONFIG__MODE_ROI_XY_SIZE, - 0x0000000F, - 0, - 0); - pdata->nvm__fmt__ref_spad_apply__num_requested_ref_spad = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__REF_SPAD_APPLY__NUM_REQUESTED_REF_SPAD, - 0x000000FF, - 0, - 0); - pdata->nvm__fmt__ref_spad_man__ref_location = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__REF_SPAD_MAN__REF_LOCATION, - 0x00000003, - 0, - 0); - pdata->nvm__fmt__mm_config__inner_offset_mm = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__FMT__MM_CONFIG__INNER_OFFSET_MM, - 0x0000FFFF, - 0, - 0); - pdata->nvm__fmt__mm_config__outer_offset_mm = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__FMT__MM_CONFIG__OUTER_OFFSET_MM, - 0x0000FFFF, - 0, - 0); - pdata->nvm__fmt__algo_part_to_part_range_offset_mm = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__FMT__ALGO__PART_TO_PART_RANGE_OFFSET_MM, - 0x00000FFF, - 0, - 0); - pdata->nvm__fmt__algo__crosstalk_compensation_plane_offset_kcps = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__FMT__ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS, - 0x0000FFFF, - 0, - 0); - pdata->nvm__fmt__algo__crosstalk_compensation_x_plane_gradient_kcps = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__FMT__ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS, - 0x0000FFFF, - 0, - 0); - pdata->nvm__fmt__algo__crosstalk_compensation_y_plane_gradient_kcps = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__FMT__ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS, - 0x0000FFFF, - 0, - 0); - pdata->nvm__fmt__spare__host_config__nvm_config_spare_0 = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__SPARE_HOST_CONFIG__NVM_CONFIG_SPARE_0, - 0x000000FF, - 0, - 0); - pdata->nvm__fmt__spare__host_config__nvm_config_spare_1 = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__SPARE_HOST_CONFIG__NVM_CONFIG_SPARE_1, - 0x000000FF, - 0, - 0); - pdata->nvm__customer_space_programmed = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__CUSTOMER_NVM_SPACE_PROGRAMMED, - 0x000000FF, - 0, - 0); - pdata->nvm__cust__i2c_device_address = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__CUST__I2C_SLAVE__DEVICE_ADDRESS, - 0x000000FF, - 0, - 0); - pdata->nvm__cust__ref_spad_apply__num_requested_ref_spad = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__CUST__REF_SPAD_APPLY__NUM_REQUESTED_REF_SPAD, - 0x000000FF, - 0, - 0); - pdata->nvm__cust__ref_spad_man__ref_location = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__CUST__REF_SPAD_MAN__REF_LOCATION, - 0x00000003, - 0, - 0); - pdata->nvm__cust__mm_config__inner_offset_mm = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__CUST__MM_CONFIG__INNER_OFFSET_MM, - 0x0000FFFF, - 0, - 0); - pdata->nvm__cust__mm_config__outer_offset_mm = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__CUST__MM_CONFIG__OUTER_OFFSET_MM, - 0x0000FFFF, - 0, - 0); - pdata->nvm__cust__algo_part_to_part_range_offset_mm = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__CUST__ALGO__PART_TO_PART_RANGE_OFFSET_MM, - 0x00000FFF, - 0, - 0); - pdata->nvm__cust__algo__crosstalk_compensation_plane_offset_kcps = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__CUST__ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS, - 0x0000FFFF, - 0, - 0); - pdata->nvm__cust__algo__crosstalk_compensation_x_plane_gradient_kcps = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__CUST__ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS, - 0x0000FFFF, - 0, - 0); - pdata->nvm__cust__algo__crosstalk_compensation_y_plane_gradient_kcps = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__CUST__ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS, - 0x0000FFFF, - 0, - 0); - pdata->nvm__cust__spare__host_config__nvm_config_spare_0 = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__CUST__SPARE_HOST_CONFIG__NVM_CONFIG_SPARE_0, - 0x000000FF, - 0, - 0); - pdata->nvm__cust__spare__host_config__nvm_config_spare_1 = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__CUST__SPARE_HOST_CONFIG__NVM_CONFIG_SPARE_1, - 0x000000FF, - 0, - 0); - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_nvm_decode_cal_peak_rate_map( - buf_size, - pbuffer + VL53L1_NVM__FMT__CAL_PEAK_RATE_MAP_DATA_INDEX, - &(pdata->fmt_peak_rate_map)); - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_nvm_decode_additional_offset_cal_data( - buf_size, - pbuffer + VL53L1_NVM__FMT__ADDITIONAL_OFFSET_CAL_DATA_INDEX, - &(pdata->fmt_add_offset_data)); - - - - - pptmp[0] = VL53L1_NVM__FMT__RANGE_RESULTS__140MM_MM_PRE_RANGE; - pptmp[1] = VL53L1_NVM__FMT__RANGE_RESULTS__140MM_DARK; - pptmp[2] = VL53L1_NVM__FMT__RANGE_RESULTS__400MM_DARK; - pptmp[3] = VL53L1_NVM__FMT__RANGE_RESULTS__400MM_AMBIENT; - - for (i = 0 ; i < VL53L1_NVM_MAX_FMT_RANGE_DATA ; i++) { - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_nvm_decode_fmt_range_results_data( - buf_size, - pbuffer + pptmp[i], - &(pdata->fmt_range_data[i])); - } - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_nvm_decode_fmt_info( - buf_size, - pbuffer, - &(pdata->fmt_info)); - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_nvm_decode_ews_info( - buf_size, - pbuffer, - &(pdata->ews_info)); - - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_nvm_decode_cal_peak_rate_map( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_cal_peak_rate_map_t *pdata) -{ - - VL53L1_Error status = VL53L1_ERROR_NONE; - - uint8_t *ptmp = NULL; - uint8_t i = 0; - - if (VL53L1_NVM__FMT__CAL_PEAK_RATE_MAP_DATA_SIZE > buf_size) - return VL53L1_ERROR_BUFFER_TOO_SMALL; - - pdata->cal_distance_mm = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer); - - pdata->cal_reflectance_pc = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer + 2); - pdata->cal_reflectance_pc = - pdata->cal_reflectance_pc >> 6; - - pdata->max_samples = VL53L1_NVM_PEAK_RATE_MAP_SAMPLES; - pdata->width = VL53L1_NVM_PEAK_RATE_MAP_WIDTH; - pdata->height = VL53L1_NVM_PEAK_RATE_MAP_HEIGHT; - - ptmp = pbuffer + 4; - for (i = 0 ; i < VL53L1_NVM_PEAK_RATE_MAP_SAMPLES ; i++) { - pdata->peak_rate_mcps[i] = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, ptmp); - ptmp += 2; - } - - return status; -} - - -VL53L1_Error VL53L1_nvm_decode_additional_offset_cal_data( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_additional_offset_cal_data_t *pdata) -{ - - VL53L1_Error status = VL53L1_ERROR_NONE; - - if (VL53L1_NVM__FMT__ADDITIONAL_OFFSET_CAL_DATA_SIZE > buf_size) - return VL53L1_ERROR_BUFFER_TOO_SMALL; - - pdata->result__mm_inner_actual_effective_spads = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer); - - pdata->result__mm_outer_actual_effective_spads = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer + 2); - - pdata->result__mm_inner_peak_signal_count_rtn_mcps = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer + 4); - - pdata->result__mm_outer_peak_signal_count_rtn_mcps = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer + 6); - - return status; -} - - -VL53L1_Error VL53L1_nvm_decode_fmt_range_results_data( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_decoded_nvm_fmt_range_data_t *pdata) -{ - - VL53L1_Error status = VL53L1_ERROR_NONE; - - if (VL53L1_NVM__FMT__RANGE_RESULTS__SIZE_BYTES > buf_size) - return VL53L1_ERROR_BUFFER_TOO_SMALL; - - pdata->result__actual_effective_rtn_spads = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer); - - pdata->ref_spad_array__num_requested_ref_spads = - *(pbuffer+2); - - pdata->ref_spad_array__ref_location = - *(pbuffer+3); - - pdata->result__peak_signal_count_rate_rtn_mcps = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer + 4); - - pdata->result__ambient_count_rate_rtn_mcps = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer + 6); - - pdata->result__peak_signal_count_rate_ref_mcps = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer + 8); - - pdata->result__ambient_count_rate_ref_mcps = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer + 10); - - pdata->measured_distance_mm = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer + 12); - - pdata->measured_distance_stdev_mm = - (uint16_t)VL53L1_i2c_decode_uint16_t(2, pbuffer + 14); - - return status; -} - - -VL53L1_Error VL53L1_nvm_decode_fmt_info( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_decoded_nvm_fmt_info_t *pdata) -{ - - VL53L1_Error status = VL53L1_ERROR_NONE; - - if (VL53L1_NVM_SIZE_IN_BYTES > buf_size) - return VL53L1_ERROR_BUFFER_TOO_SMALL; - - pdata->nvm__fmt__fgc[0] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_0, - 0x000000FE, - 1, - 0); - pdata->nvm__fmt__fgc[1] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_1, - 0x000001FC, - 2, - 0); - pdata->nvm__fmt__fgc[2] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_2 - 1, - 0x000003F8, - 3, - 0); - pdata->nvm__fmt__fgc[3] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_3 - 1, - 0x000007F0, - 4, - 0); - pdata->nvm__fmt__fgc[4] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_4 - 1, - 0x00000FE0, - 5, - 0); - pdata->nvm__fmt__fgc[5] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_5 - 1, - 0x00001FC0, - 6, - 0); - pdata->nvm__fmt__fgc[6] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_6 - 1, - 0x00003F80, - 7, - 0); - pdata->nvm__fmt__fgc[7] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_6, - 0x0000007F, - 0, - 0); - pdata->nvm__fmt__fgc[8] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_7, - 0x000000FE, - 1, - 0); - pdata->nvm__fmt__fgc[9] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_8, - 0x000001FC, - 2, - 0); - pdata->nvm__fmt__fgc[10] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_9 - 1, - 0x000003F8, - 3, - 0); - pdata->nvm__fmt__fgc[11] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_10 - 1, - 0x000007F0, - 4, - 0); - pdata->nvm__fmt__fgc[12] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_11 - 1, - 0x00000FE0, - 5, - 0); - pdata->nvm__fmt__fgc[13] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_12 - 1, - 0x00001FC0, - 6, - 0); - pdata->nvm__fmt__fgc[14] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_13 - 1, - 0x00003F80, - 7, - 0); - pdata->nvm__fmt__fgc[15] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_13, - 0x0000007F, - 0, - 0); - pdata->nvm__fmt__fgc[16] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_14, - 0x000000FE, - 1, - 0); - pdata->nvm__fmt__fgc[17] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__FGC__BYTE_15, - 0x000001FC, - 2, - 0); - pdata->nvm__fmt__fgc[18] = 0x00; - - pdata->nvm__fmt__test_program_major = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__TEST_PROGRAM_MAJOR_MINOR, - 0x000000E0, - 5, - 0); - pdata->nvm__fmt__test_program_minor = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__TEST_PROGRAM_MAJOR_MINOR, - 0x0000001F, - 0, - 0); - pdata->nvm__fmt__map_major = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__MAP_MAJOR_MINOR, - 0x000000E0, - 5, - 0); - pdata->nvm__fmt__map_minor = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__MAP_MAJOR_MINOR, - 0x0000001F, - 0, - 0); - pdata->nvm__fmt__year = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__YEAR_MONTH, - 0x000000F0, - 4, - 0); - pdata->nvm__fmt__month = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__YEAR_MONTH, - 0x0000000F, - 0, - 0); - pdata->nvm__fmt__day = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__DAY_MODULE_DATE_PHASE, - 0x000000F8, - 3, - 0); - pdata->nvm__fmt__module_date_phase = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__DAY_MODULE_DATE_PHASE, - 0x00000007, - 0, - 0); - pdata->nvm__fmt__time = - (uint16_t)VL53L1_i2c_decode_with_mask( - 2, - pbuffer + VL53L1_NVM__FMT__TIME, - 0x0000FFFF, - 0, - 0); - pdata->nvm__fmt__tester_id = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__TESTER_ID, - 0x000000FF, - 0, - 0); - pdata->nvm__fmt__site_id = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__FMT__SITE_ID, - 0x000000FF, - 0, - 0); - - return status; -} - - -VL53L1_Error VL53L1_nvm_decode_ews_info( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_decoded_nvm_ews_info_t *pdata) -{ - - VL53L1_Error status = VL53L1_ERROR_NONE; - - if (VL53L1_NVM_SIZE_IN_BYTES > buf_size) - return VL53L1_ERROR_BUFFER_TOO_SMALL; - - pdata->nvm__ews__test_program_major = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__TEST_PROGRAM_MAJOR_MINOR, - 0x000000E0, - 5, - 0); - pdata->nvm__ews__test_program_minor = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__TEST_PROGRAM_MAJOR_MINOR, - 0x0000001F, - 0, - 0); - pdata->nvm__ews__probe_card_major = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__PROBE_CARD_MAJOR_MINOR, - 0x000000F0, - 4, - 0); - pdata->nvm__ews__probe_card_minor = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__PROBE_CARD_MAJOR_MINOR, - 0x0000000F, - 0, - 0); - pdata->nvm__ews__tester_id = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__TESTER_ID, - 0x000000FF, - 0, - 0); - pdata->nvm__ews__lot[6] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__LOT__BYTE_0, - 0x000000FC, - 2, - 32); - pdata->nvm__ews__lot[5] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__LOT__BYTE_1 - 1, - 0x000003F0, - 4, - 32); - pdata->nvm__ews__lot[4] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__LOT__BYTE_2 - 1, - 0x00000FC0, - 6, - 32); - pdata->nvm__ews__lot[3] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__LOT__BYTE_2, - 0x0000003F, - 0, - 32); - pdata->nvm__ews__lot[2] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__LOT__BYTE_3, - 0x000000FC, - 2, - 32); - pdata->nvm__ews__lot[1] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__LOT__BYTE_4 - 1, - 0x000003F0, - 4, - 32); - pdata->nvm__ews__lot[0] = - (char)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__LOT__BYTE_5 - 1, - 0x00000FC0, - 6, - 32); - - pdata->nvm__ews__lot[7] = 0x00; - - pdata->nvm__ews__wafer = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__WAFER, - 0x0000001F, - 0, - 0); - pdata->nvm__ews__xcoord = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__XCOORD, - 0x000000FF, - 0, - 0); - pdata->nvm__ews__ycoord = - (uint8_t)VL53L1_i2c_decode_with_mask( - 1, - pbuffer + VL53L1_NVM__EWS__YCOORD, - 0x000000FF, - 0, - 0); - - return status; - -} - - -void VL53L1_nvm_format_encode( - VL53L1_decoded_nvm_data_t *pnvm_info, - uint8_t *pnvm_data) -{ - SUPPRESS_UNUSED_WARNING(pnvm_info); - SUPPRESS_UNUSED_WARNING(pnvm_data); -} - - -VL53L1_Error VL53L1_read_nvm_raw_data( - VL53L1_DEV Dev, - uint8_t start_address, - uint8_t count, - uint8_t *pnvm_raw_data) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_nvm_enable( - Dev, - 0x0004, - VL53L1_NVM_POWER_UP_DELAY_US); - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_nvm_read( - Dev, - start_address, - count, - pnvm_raw_data); - - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_nvm_disable(Dev); - - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_read_nvm( - VL53L1_DEV Dev, - uint8_t nvm_format, - VL53L1_decoded_nvm_data_t *pnvm_info) -{ - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - - - uint8_t nvm_data[2*VL53L1_NVM_SIZE_IN_BYTES]; - - LOG_FUNCTION_START(""); - - SUPPRESS_UNUSED_WARNING(nvm_format); - - - - - status = VL53L1_read_nvm_raw_data( - Dev, - 0, - VL53L1_NVM_SIZE_IN_BYTES >> 2, - nvm_data); - - - - - - - - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_nvm_format_decode( - VL53L1_NVM_SIZE_IN_BYTES, - nvm_data, - pnvm_info); - - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_read_nvm_cal_peak_rate_map( - VL53L1_DEV Dev, - VL53L1_cal_peak_rate_map_t *pcal_data) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - - - uint8_t nvm_data[2*VL53L1_NVM__FMT__CAL_PEAK_RATE_MAP_DATA_SIZE]; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_read_nvm_raw_data( - Dev, - (uint8_t)(VL53L1_NVM__FMT__CAL_PEAK_RATE_MAP_DATA_INDEX >> 2), - (uint8_t)(VL53L1_NVM__FMT__CAL_PEAK_RATE_MAP_DATA_SIZE >> 2), - nvm_data); - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_nvm_decode_cal_peak_rate_map( - VL53L1_NVM__FMT__CAL_PEAK_RATE_MAP_DATA_SIZE, - nvm_data, - pcal_data); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_read_nvm_additional_offset_cal_data( - VL53L1_DEV Dev, - VL53L1_additional_offset_cal_data_t *pcal_data) -{ - - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - - - uint8_t nvm_data[2*VL53L1_NVM__FMT__ADDITIONAL_OFFSET_CAL_DATA_SIZE]; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_read_nvm_raw_data( - Dev, - (uint8_t)(VL53L1_NVM__FMT__ADDITIONAL_OFFSET_CAL_DATA_INDEX >> 2), - (uint8_t)(VL53L1_NVM__FMT__ADDITIONAL_OFFSET_CAL_DATA_SIZE >> 2), - nvm_data); - - - - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_nvm_decode_additional_offset_cal_data( - VL53L1_NVM__FMT__ADDITIONAL_OFFSET_CAL_DATA_SIZE, - nvm_data, - pcal_data); - - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_read_nvm_fmt_range_results_data( - VL53L1_DEV Dev, - uint16_t range_results_select, - VL53L1_decoded_nvm_fmt_range_data_t *prange_data) -{ - - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - - - uint8_t nvm_data[2*VL53L1_NVM__FMT__RANGE_RESULTS__SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - - - - status = VL53L1_read_nvm_raw_data( - Dev, - (uint8_t)(range_results_select >> 2), - (uint8_t)(VL53L1_NVM__FMT__RANGE_RESULTS__SIZE_BYTES >> 2), - nvm_data); - - - - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_nvm_decode_fmt_range_results_data( - VL53L1_NVM__FMT__RANGE_RESULTS__SIZE_BYTES, - nvm_data, - prange_data); - - LOG_FUNCTION_END(status); - - return status; - -} - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_nvm_debug.c b/drivers/input/misc/vl53L1/src/vl53l1_nvm_debug.c deleted file mode 100644 index fcf9ce51f5cf..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_nvm_debug.c +++ /dev/null @@ -1,1103 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_platform.h" -#include "vl53l1_platform_log.h" -#include "vl53l1_register_map.h" -#include "vl53l1_api_debug.h" -#include "vl53l1_nvm_structs.h" -#include "vl53l1_nvm_debug.h" - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_NVM, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_NVM, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_NVM, status, fmt, ##__VA_ARGS__) - -#define trace_print(level, ...) \ - _LOG_TRACE_PRINT(trace_flags, \ - level, VL53L1_TRACE_FUNCTION_NONE, ##__VA_ARGS__) - -#ifdef VL53L1_LOG_ENABLE - -void VL53L1_print_nvm_raw_data( - uint8_t *pnvm_raw_data, - uint32_t trace_flags) -{ - - - - - - int i = 0; - - LOG_FUNCTION_START(""); - - for (i = 0 ; i < VL53L1_NVM_SIZE_IN_BYTES ; i++) { - if (i % 4 == 0) - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "\n NVM Addr 0x%02X : 0x", - i/4); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%02X", - *pnvm_raw_data++); - } - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "\n"); - - LOG_FUNCTION_END(0); -} - - -void VL53L1_print_decoded_nvm_data( - VL53L1_decoded_nvm_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - char fp_text[VL53L1_MAX_STRING_LENGTH]; - char pre_text[VL53L1_MAX_STRING_LENGTH]; - char *ppre_text = &(pre_text[0]); - - uint8_t i = 0; - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__identification_model_id", - pdata->nvm__identification_model_id); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__identification_module_type", - pdata->nvm__identification_module_type); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__identification_revision_id", - pdata->nvm__identification_revision_id); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__identification_module_id", - pdata->nvm__identification_module_id); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__i2c_valid", - pdata->nvm__i2c_valid); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__i2c_device_address_ews", - pdata->nvm__i2c_device_address_ews); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->nvm__ews__fast_osc_frequency, - 12, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "nvm__ews__fast_osc_frequency", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__fast_osc_trim_max", - pdata->nvm__ews__fast_osc_trim_max); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__fast_osc_freq_set", - pdata->nvm__ews__fast_osc_freq_set); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__slow_osc_calibration", - pdata->nvm__ews__slow_osc_calibration); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->nvm__fmt__fast_osc_frequency, - 12, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "nvm__fmt__fast_osc_frequency", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__fast_osc_trim_max", - pdata->nvm__fmt__fast_osc_trim_max); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__fast_osc_freq_set", - pdata->nvm__fmt__fast_osc_freq_set); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__slow_osc_calibration", - pdata->nvm__fmt__slow_osc_calibration); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__vhv_config_unlock", - pdata->nvm__vhv_config_unlock); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ref_selvddpix", - pdata->nvm__ref_selvddpix); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ref_selvquench", - pdata->nvm__ref_selvquench); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__regavdd1v2_sel", - pdata->nvm__regavdd1v2_sel); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__regdvdd1v2_sel", - pdata->nvm__regdvdd1v2_sel); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__vhv_timeout__macrop", - pdata->nvm__vhv_timeout__macrop); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__vhv_loop_bound", - pdata->nvm__vhv_loop_bound); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__vhv_count_threshold", - pdata->nvm__vhv_count_threshold); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__vhv_offset", - pdata->nvm__vhv_offset); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__vhv_init_enable", - pdata->nvm__vhv_init_enable); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__vhv_init_value", - pdata->nvm__vhv_init_value); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_vcsel_trim_ll", - pdata->nvm__laser_safety_vcsel_trim_ll); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_vcsel_selion_ll", - pdata->nvm__laser_safety_vcsel_selion_ll); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_vcsel_selion_max_ll", - pdata->nvm__laser_safety_vcsel_selion_max_ll); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_mult_ll", - pdata->nvm__laser_safety_mult_ll); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_clip_ll", - pdata->nvm__laser_safety_clip_ll); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_vcsel_trim_ld", - pdata->nvm__laser_safety_vcsel_trim_ld); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_vcsel_selion_ld", - pdata->nvm__laser_safety_vcsel_selion_ld); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_vcsel_selion_max_ld", - pdata->nvm__laser_safety_vcsel_selion_max_ld); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_mult_ld", - pdata->nvm__laser_safety_mult_ld); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_clip_ld", - pdata->nvm__laser_safety_clip_ld); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_lock_byte", - pdata->nvm__laser_safety_lock_byte); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__laser_safety_unlock_byte", - pdata->nvm__laser_safety_unlock_byte); - - - - - for (i = 0 ; i < VL53L1_RTN_SPAD_BUFFER_SIZE ; i++) { - sprintf( - ppre_text, - "%snvm__ews__spad_enables_rtn[%u]", - pprefix, i); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->nvm__ews__spad_enables_rtn[i]); - } - - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) { - sprintf( - ppre_text, - "%snvm__ews__spad_enables_ref__loc1[%u]", - pprefix, i); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->nvm__ews__spad_enables_ref__loc1[i]); - } - - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) { - sprintf( - ppre_text, - "%snvm__ews__spad_enables_ref__loc2[%u]", - pprefix, i); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->nvm__ews__spad_enables_ref__loc2[i]); - } - - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) { - sprintf( - ppre_text, - "%snvm__ews__spad_enables_ref__loc3[%u]", - pprefix, i); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->nvm__ews__spad_enables_ref__loc3[i]); - } - - - - - - for (i = 0 ; i < VL53L1_RTN_SPAD_BUFFER_SIZE ; i++) { - sprintf( - ppre_text, - "%snvm__fmt__spad_enables_rtn[%u]", - pprefix, i); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->nvm__fmt__spad_enables_rtn[i]); - } - - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) { - sprintf( - ppre_text, - "%snvm__fmt__spad_enables_ref__loc1[%u]", - pprefix, i); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->nvm__fmt__spad_enables_ref__loc1[i]); - } - - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) { - sprintf( - ppre_text, - "%snvm__fmt__spad_enables_ref__loc2[%u]", - pprefix, i); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->nvm__fmt__spad_enables_ref__loc2[i]); - } - - for (i = 0 ; i < VL53L1_REF_SPAD_BUFFER_SIZE ; i++) { - sprintf( - ppre_text, - "%snvm__fmt__spad_enables_ref__loc3[%u]", - pprefix, i); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s = %u\n", - ppre_text, - pdata->nvm__fmt__spad_enables_ref__loc3[i]); - } - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__roi_config__mode_roi_centre_spad", - pdata->nvm__fmt__roi_config__mode_roi_centre_spad); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__roi_config__mode_roi_x_size", - pdata->nvm__fmt__roi_config__mode_roi_x_size); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__roi_config__mode_roi_y_size", - pdata->nvm__fmt__roi_config__mode_roi_y_size); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__ref_spad_apply__num_requested_ref_spad", - pdata->nvm__fmt__ref_spad_apply__num_requested_ref_spad); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__ref_spad_man__ref_location", - pdata->nvm__fmt__ref_spad_man__ref_location); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "nvm__fmt__mm_config__inner_offset_mm", - pdata->nvm__fmt__mm_config__inner_offset_mm); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "nvm__fmt__mm_config__outer_offset_mm", - pdata->nvm__fmt__mm_config__outer_offset_mm); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->nvm__fmt__algo_part_to_part_range_offset_mm, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "nvm__fmt__algo_part_to_part_range_offset_mm", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->nvm__fmt__algo__crosstalk_compensation_plane_offset_kcps, - 9, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "nvm__fmt__algo__crosstalk_compensation_plane_offset_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->nvm__fmt__algo__crosstalk_compensation_x_plane_gradient_kcps, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "nvm__fmt__algo__crosstalk_compensation_x_plane_gradient_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->nvm__fmt__algo__crosstalk_compensation_y_plane_gradient_kcps, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "nvm__fmt__algo__crosstalk_compensation_y_plane_gradient_kcps", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__spare__host_config__nvm_config_spare_0", - pdata->nvm__fmt__spare__host_config__nvm_config_spare_0); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__spare__host_config__nvm_config_spare_1", - pdata->nvm__fmt__spare__host_config__nvm_config_spare_1); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__customer_space_programmed", - pdata->nvm__customer_space_programmed); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__cust__i2c_device_address", - pdata->nvm__cust__i2c_device_address); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__cust__ref_spad_apply__num_requested_ref_spad", - pdata->nvm__cust__ref_spad_apply__num_requested_ref_spad); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__cust__ref_spad_man__ref_location", - pdata->nvm__cust__ref_spad_man__ref_location); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "nvm__cust__mm_config__inner_offset_mm", - pdata->nvm__cust__mm_config__inner_offset_mm); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %d\n", - pprefix, - "nvm__cust__mm_config__outer_offset_mm", - pdata->nvm__cust__mm_config__outer_offset_mm); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->nvm__cust__algo_part_to_part_range_offset_mm, - 2, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "nvm__cust__algo_part_to_part_range_offset_mm", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (uint32_t)pdata->nvm__cust__algo__crosstalk_compensation_plane_offset_kcps, - 9, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "nvm__cust__algo__crosstalk_compensation_plane_offset_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->nvm__cust__algo__crosstalk_compensation_x_plane_gradient_kcps, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "nvm__cust__algo__crosstalk_compensation_x_plane_gradient_kcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->nvm__cust__algo__crosstalk_compensation_y_plane_gradient_kcps, - 11, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "nvm__cust__algo__crosstalk_compensation_y_plane_gradient_kcps", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__cust__spare__host_config__nvm_config_spare_0", - pdata->nvm__cust__spare__host_config__nvm_config_spare_0); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__cust__spare__host_config__nvm_config_spare_1", - pdata->nvm__cust__spare__host_config__nvm_config_spare_1); - - - - - sprintf( - ppre_text, - "%sfmt_peak_rate_map.", pprefix); - - VL53L1_print_cal_peak_rate_map( - &(pdata->fmt_peak_rate_map), - ppre_text, - VL53L1_TRACE_MODULE_NVM_DATA); - - sprintf( - ppre_text, - "%sfmt_add_offset_data.", - pprefix); - - VL53L1_print_additional_offset_cal_data( - &(pdata->fmt_add_offset_data), - ppre_text, - VL53L1_TRACE_MODULE_NVM_DATA); - - - - - for (i = 0 ; i < VL53L1_NVM_MAX_FMT_RANGE_DATA ; i++) { - sprintf( - ppre_text, - "%sfmt_range_data[%u].", - pprefix, i); - - VL53L1_print_decoded_nvm_fmt_range_data( - &(pdata->fmt_range_data[i]), - ppre_text, - trace_flags); - } - - sprintf( - ppre_text, - "%sfmt_info.", - pprefix); - - VL53L1_print_decoded_nvm_fmt_info( - &(pdata->fmt_info), - ppre_text, - trace_flags); - - sprintf( - ppre_text, - "%sews_info.", - pprefix); - - VL53L1_print_decoded_nvm_ews_info( - &(pdata->ews_info), - ppre_text, - trace_flags); -} - - -void VL53L1_print_decoded_nvm_fmt_range_data( - VL53L1_decoded_nvm_fmt_range_data_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - char fp_text[VL53L1_MAX_STRING_LENGTH]; - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->result__actual_effective_rtn_spads, - 8, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "result__actual_effective_rtn_spads", - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ref_spad_array__num_requested_ref_spads", - pdata->ref_spad_array__num_requested_ref_spads); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "ref_spad_array__ref_location", - pdata->ref_spad_array__ref_location); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->result__peak_signal_count_rate_rtn_mcps, - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "result__peak_signal_count_rate_rtn_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->result__ambient_count_rate_rtn_mcps, - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "result__ambient_count_rate_rtn_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->result__peak_signal_count_rate_ref_mcps, - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "result__peak_signal_count_rate_ref_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->result__ambient_count_rate_ref_mcps, - 7, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "result__ambient_count_rate_ref_mcps", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (int32_t)pdata->measured_distance_mm, - 4, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "measured_distance_mm", - fp_text); - - VL53L1_signed_fixed_point_sprintf( - (uint32_t)pdata->measured_distance_stdev_mm, - 4, - VL53L1_MAX_STRING_LENGTH, - fp_text); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %s\n", - pprefix, - "measured_distance_stdev_mm", - fp_text); -} - - -void VL53L1_print_decoded_nvm_fmt_info( - VL53L1_decoded_nvm_fmt_info_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = \"%s\"\n", - pprefix, - "nvm__fmt__fgc", - pdata->nvm__fmt__fgc); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__test_program_major", - pdata->nvm__fmt__test_program_major); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__test_program_minor", - pdata->nvm__fmt__test_program_minor); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__map_major", - pdata->nvm__fmt__map_major); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__map_minor", - pdata->nvm__fmt__map_minor); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__year", - pdata->nvm__fmt__year); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__month", - pdata->nvm__fmt__month); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__day", - pdata->nvm__fmt__day); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__module_date_phase", - pdata->nvm__fmt__module_date_phase); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__time", - pdata->nvm__fmt__time); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__tester_id", - pdata->nvm__fmt__tester_id); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__fmt__site_id", - pdata->nvm__fmt__site_id); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__test_program_major", - pdata->nvm__ews__test_program_major); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__test_program_minor", - pdata->nvm__ews__test_program_minor); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__probe_card_major", - pdata->nvm__ews__probe_card_major); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__probe_card_minor", - pdata->nvm__ews__probe_card_minor); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__tester_id", - pdata->nvm__ews__tester_id); -} - - -void VL53L1_print_decoded_nvm_ews_info( - VL53L1_decoded_nvm_ews_info_t *pdata, - char *pprefix, - uint32_t trace_flags) -{ - trace_print(VL53L1_TRACE_LEVEL_INFO, - "%s%s = \"%s\"\n", - pprefix, - "nvm__ews__lot", - pdata->nvm__ews__lot); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__wafer", - pdata->nvm__ews__wafer); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__xcoord", - pdata->nvm__ews__xcoord); - - trace_print( - VL53L1_TRACE_LEVEL_INFO, - "%s%s = %u\n", - pprefix, - "nvm__ews__ycoord", - pdata->nvm__ews__ycoord); -} - -#endif - - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_register_funcs.c b/drivers/input/misc/vl53L1/src/vl53l1_register_funcs.c deleted file mode 100644 index 2651c4b37384..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_register_funcs.c +++ /dev/null @@ -1,4594 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_platform.h" -#include "vl53l1_platform_log.h" -#include "vl53l1_core.h" -#include "vl53l1_register_map.h" -#include "vl53l1_register_structs.h" -#include "vl53l1_register_funcs.h" - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_REGISTERS, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_REGISTERS, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_REGISTERS, status, fmt, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_i2c_encode_static_nvm_managed( - VL53L1_static_nvm_managed_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_STATIC_NVM_MANAGED_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->i2c_slave__device_address & 0x7F; - *(pbuffer + 1) = - pdata->ana_config__vhv_ref_sel_vddpix & 0xF; - *(pbuffer + 2) = - pdata->ana_config__vhv_ref_sel_vquench & 0x7F; - *(pbuffer + 3) = - pdata->ana_config__reg_avdd1v2_sel & 0x3; - *(pbuffer + 4) = - pdata->ana_config__fast_osc__trim & 0x7F; - VL53L1_i2c_encode_uint16_t( - pdata->osc_measured__fast_osc__frequency, - 2, - pbuffer + 5); - *(pbuffer + 7) = - pdata->vhv_config__timeout_macrop_loop_bound; - *(pbuffer + 8) = - pdata->vhv_config__count_thresh; - *(pbuffer + 9) = - pdata->vhv_config__offset & 0x3F; - *(pbuffer + 10) = - pdata->vhv_config__init; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_static_nvm_managed( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_static_nvm_managed_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_STATIC_NVM_MANAGED_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->i2c_slave__device_address = - (*(pbuffer + 0)) & 0x7F; - pdata->ana_config__vhv_ref_sel_vddpix = - (*(pbuffer + 1)) & 0xF; - pdata->ana_config__vhv_ref_sel_vquench = - (*(pbuffer + 2)) & 0x7F; - pdata->ana_config__reg_avdd1v2_sel = - (*(pbuffer + 3)) & 0x3; - pdata->ana_config__fast_osc__trim = - (*(pbuffer + 4)) & 0x7F; - pdata->osc_measured__fast_osc__frequency = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 5)); - pdata->vhv_config__timeout_macrop_loop_bound = - (*(pbuffer + 7)); - pdata->vhv_config__count_thresh = - (*(pbuffer + 8)); - pdata->vhv_config__offset = - (*(pbuffer + 9)) & 0x3F; - pdata->vhv_config__init = - (*(pbuffer + 10)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_static_nvm_managed( - VL53L1_DEV Dev, - VL53L1_static_nvm_managed_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_STATIC_NVM_MANAGED_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_static_nvm_managed( - pdata, - VL53L1_STATIC_NVM_MANAGED_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_I2C_SLAVE__DEVICE_ADDRESS, - comms_buffer, - VL53L1_STATIC_NVM_MANAGED_I2C_SIZE_BYTES); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_static_nvm_managed( - VL53L1_DEV Dev, - VL53L1_static_nvm_managed_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_STATIC_NVM_MANAGED_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_I2C_SLAVE__DEVICE_ADDRESS, - comms_buffer, - VL53L1_STATIC_NVM_MANAGED_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_static_nvm_managed( - VL53L1_STATIC_NVM_MANAGED_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_customer_nvm_managed( - VL53L1_customer_nvm_managed_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_CUSTOMER_NVM_MANAGED_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->global_config__spad_enables_ref_0; - *(pbuffer + 1) = - pdata->global_config__spad_enables_ref_1; - *(pbuffer + 2) = - pdata->global_config__spad_enables_ref_2; - *(pbuffer + 3) = - pdata->global_config__spad_enables_ref_3; - *(pbuffer + 4) = - pdata->global_config__spad_enables_ref_4; - *(pbuffer + 5) = - pdata->global_config__spad_enables_ref_5 & 0xF; - *(pbuffer + 6) = - pdata->global_config__ref_en_start_select; - *(pbuffer + 7) = - pdata->ref_spad_man__num_requested_ref_spads & 0x3F; - *(pbuffer + 8) = - pdata->ref_spad_man__ref_location & 0x3; - VL53L1_i2c_encode_uint16_t( - pdata->algo__crosstalk_compensation_plane_offset_kcps, - 2, - pbuffer + 9); - VL53L1_i2c_encode_int16_t( - pdata->algo__crosstalk_compensation_x_plane_gradient_kcps, - 2, - pbuffer + 11); - VL53L1_i2c_encode_int16_t( - pdata->algo__crosstalk_compensation_y_plane_gradient_kcps, - 2, - pbuffer + 13); - VL53L1_i2c_encode_uint16_t( - pdata->ref_spad_char__total_rate_target_mcps, - 2, - pbuffer + 15); - VL53L1_i2c_encode_int16_t( - pdata->algo__part_to_part_range_offset_mm & 0x1FFF, - 2, - pbuffer + 17); - VL53L1_i2c_encode_int16_t( - pdata->mm_config__inner_offset_mm, - 2, - pbuffer + 19); - VL53L1_i2c_encode_int16_t( - pdata->mm_config__outer_offset_mm, - 2, - pbuffer + 21); - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_customer_nvm_managed( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_customer_nvm_managed_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_CUSTOMER_NVM_MANAGED_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->global_config__spad_enables_ref_0 = - (*(pbuffer + 0)); - pdata->global_config__spad_enables_ref_1 = - (*(pbuffer + 1)); - pdata->global_config__spad_enables_ref_2 = - (*(pbuffer + 2)); - pdata->global_config__spad_enables_ref_3 = - (*(pbuffer + 3)); - pdata->global_config__spad_enables_ref_4 = - (*(pbuffer + 4)); - pdata->global_config__spad_enables_ref_5 = - (*(pbuffer + 5)) & 0xF; - pdata->global_config__ref_en_start_select = - (*(pbuffer + 6)); - pdata->ref_spad_man__num_requested_ref_spads = - (*(pbuffer + 7)) & 0x3F; - pdata->ref_spad_man__ref_location = - (*(pbuffer + 8)) & 0x3; - pdata->algo__crosstalk_compensation_plane_offset_kcps = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 9)); - pdata->algo__crosstalk_compensation_x_plane_gradient_kcps = - (VL53L1_i2c_decode_int16_t(2, pbuffer + 11)); - pdata->algo__crosstalk_compensation_y_plane_gradient_kcps = - (VL53L1_i2c_decode_int16_t(2, pbuffer + 13)); - pdata->ref_spad_char__total_rate_target_mcps = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 15)); - pdata->algo__part_to_part_range_offset_mm = - (VL53L1_i2c_decode_int16_t(2, pbuffer + 17)) & 0x1FFF; - pdata->mm_config__inner_offset_mm = - (VL53L1_i2c_decode_int16_t(2, pbuffer + 19)); - pdata->mm_config__outer_offset_mm = - (VL53L1_i2c_decode_int16_t(2, pbuffer + 21)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_customer_nvm_managed( - VL53L1_DEV Dev, - VL53L1_customer_nvm_managed_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_CUSTOMER_NVM_MANAGED_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_customer_nvm_managed( - pdata, - VL53L1_CUSTOMER_NVM_MANAGED_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_REF_0, - comms_buffer, - VL53L1_CUSTOMER_NVM_MANAGED_I2C_SIZE_BYTES); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_customer_nvm_managed( - VL53L1_DEV Dev, - VL53L1_customer_nvm_managed_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_CUSTOMER_NVM_MANAGED_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_GLOBAL_CONFIG__SPAD_ENABLES_REF_0, - comms_buffer, - VL53L1_CUSTOMER_NVM_MANAGED_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_customer_nvm_managed( - VL53L1_CUSTOMER_NVM_MANAGED_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_static_config( - VL53L1_static_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_STATIC_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - VL53L1_i2c_encode_uint16_t( - pdata->dss_config__target_total_rate_mcps, - 2, - pbuffer + 0); - *(pbuffer + 2) = - pdata->debug__ctrl & 0x1; - *(pbuffer + 3) = - pdata->test_mode__ctrl & 0xF; - *(pbuffer + 4) = - pdata->clk_gating__ctrl & 0xF; - *(pbuffer + 5) = - pdata->nvm_bist__ctrl & 0x1F; - *(pbuffer + 6) = - pdata->nvm_bist__num_nvm_words & 0x7F; - *(pbuffer + 7) = - pdata->nvm_bist__start_address & 0x7F; - *(pbuffer + 8) = - pdata->host_if__status & 0x1; - *(pbuffer + 9) = - pdata->pad_i2c_hv__config; - *(pbuffer + 10) = - pdata->pad_i2c_hv__extsup_config & 0x1; - *(pbuffer + 11) = - pdata->gpio_hv_pad__ctrl & 0x3; - *(pbuffer + 12) = - pdata->gpio_hv_mux__ctrl & 0x1F; - *(pbuffer + 13) = - pdata->gpio__tio_hv_status & 0x3; - *(pbuffer + 14) = - pdata->gpio__fio_hv_status & 0x3; - *(pbuffer + 15) = - pdata->ana_config__spad_sel_pswidth & 0x7; - *(pbuffer + 16) = - pdata->ana_config__vcsel_pulse_width_offset & 0x1F; - *(pbuffer + 17) = - pdata->ana_config__fast_osc__config_ctrl & 0x1; - *(pbuffer + 18) = - pdata->sigma_estimator__effective_pulse_width_ns; - *(pbuffer + 19) = - pdata->sigma_estimator__effective_ambient_width_ns; - *(pbuffer + 20) = - pdata->sigma_estimator__sigma_ref_mm; - *(pbuffer + 21) = - pdata->algo__crosstalk_compensation_valid_height_mm; - *(pbuffer + 22) = - pdata->spare_host_config__static_config_spare_0; - *(pbuffer + 23) = - pdata->spare_host_config__static_config_spare_1; - VL53L1_i2c_encode_uint16_t( - pdata->algo__range_ignore_threshold_mcps, - 2, - pbuffer + 24); - *(pbuffer + 26) = - pdata->algo__range_ignore_valid_height_mm; - *(pbuffer + 27) = - pdata->algo__range_min_clip; - *(pbuffer + 28) = - pdata->algo__consistency_check__tolerance & 0xF; - *(pbuffer + 29) = - pdata->spare_host_config__static_config_spare_2; - *(pbuffer + 30) = - pdata->sd_config__reset_stages_msb & 0xF; - *(pbuffer + 31) = - pdata->sd_config__reset_stages_lsb; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_static_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_static_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_STATIC_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->dss_config__target_total_rate_mcps = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 0)); - pdata->debug__ctrl = - (*(pbuffer + 2)) & 0x1; - pdata->test_mode__ctrl = - (*(pbuffer + 3)) & 0xF; - pdata->clk_gating__ctrl = - (*(pbuffer + 4)) & 0xF; - pdata->nvm_bist__ctrl = - (*(pbuffer + 5)) & 0x1F; - pdata->nvm_bist__num_nvm_words = - (*(pbuffer + 6)) & 0x7F; - pdata->nvm_bist__start_address = - (*(pbuffer + 7)) & 0x7F; - pdata->host_if__status = - (*(pbuffer + 8)) & 0x1; - pdata->pad_i2c_hv__config = - (*(pbuffer + 9)); - pdata->pad_i2c_hv__extsup_config = - (*(pbuffer + 10)) & 0x1; - pdata->gpio_hv_pad__ctrl = - (*(pbuffer + 11)) & 0x3; - pdata->gpio_hv_mux__ctrl = - (*(pbuffer + 12)) & 0x1F; - pdata->gpio__tio_hv_status = - (*(pbuffer + 13)) & 0x3; - pdata->gpio__fio_hv_status = - (*(pbuffer + 14)) & 0x3; - pdata->ana_config__spad_sel_pswidth = - (*(pbuffer + 15)) & 0x7; - pdata->ana_config__vcsel_pulse_width_offset = - (*(pbuffer + 16)) & 0x1F; - pdata->ana_config__fast_osc__config_ctrl = - (*(pbuffer + 17)) & 0x1; - pdata->sigma_estimator__effective_pulse_width_ns = - (*(pbuffer + 18)); - pdata->sigma_estimator__effective_ambient_width_ns = - (*(pbuffer + 19)); - pdata->sigma_estimator__sigma_ref_mm = - (*(pbuffer + 20)); - pdata->algo__crosstalk_compensation_valid_height_mm = - (*(pbuffer + 21)); - pdata->spare_host_config__static_config_spare_0 = - (*(pbuffer + 22)); - pdata->spare_host_config__static_config_spare_1 = - (*(pbuffer + 23)); - pdata->algo__range_ignore_threshold_mcps = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 24)); - pdata->algo__range_ignore_valid_height_mm = - (*(pbuffer + 26)); - pdata->algo__range_min_clip = - (*(pbuffer + 27)); - pdata->algo__consistency_check__tolerance = - (*(pbuffer + 28)) & 0xF; - pdata->spare_host_config__static_config_spare_2 = - (*(pbuffer + 29)); - pdata->sd_config__reset_stages_msb = - (*(pbuffer + 30)) & 0xF; - pdata->sd_config__reset_stages_lsb = - (*(pbuffer + 31)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_static_config( - VL53L1_DEV Dev, - VL53L1_static_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_STATIC_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_static_config( - pdata, - VL53L1_STATIC_CONFIG_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_DSS_CONFIG__TARGET_TOTAL_RATE_MCPS, - comms_buffer, - VL53L1_STATIC_CONFIG_I2C_SIZE_BYTES); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_static_config( - VL53L1_DEV Dev, - VL53L1_static_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_STATIC_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_DSS_CONFIG__TARGET_TOTAL_RATE_MCPS, - comms_buffer, - VL53L1_STATIC_CONFIG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_static_config( - VL53L1_STATIC_CONFIG_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_general_config( - VL53L1_general_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_GENERAL_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->gph_config__stream_count_update_value; - *(pbuffer + 1) = - pdata->global_config__stream_divider; - *(pbuffer + 2) = - pdata->system__interrupt_config_gpio; - *(pbuffer + 3) = - pdata->cal_config__vcsel_start & 0x7F; - VL53L1_i2c_encode_uint16_t( - pdata->cal_config__repeat_rate & 0xFFF, - 2, - pbuffer + 4); - *(pbuffer + 6) = - pdata->global_config__vcsel_width & 0x7F; - *(pbuffer + 7) = - pdata->phasecal_config__timeout_macrop; - *(pbuffer + 8) = - pdata->phasecal_config__target; - *(pbuffer + 9) = - pdata->phasecal_config__override & 0x1; - *(pbuffer + 11) = - pdata->dss_config__roi_mode_control & 0x7; - VL53L1_i2c_encode_uint16_t( - pdata->system__thresh_rate_high, - 2, - pbuffer + 12); - VL53L1_i2c_encode_uint16_t( - pdata->system__thresh_rate_low, - 2, - pbuffer + 14); - VL53L1_i2c_encode_uint16_t( - pdata->dss_config__manual_effective_spads_select, - 2, - pbuffer + 16); - *(pbuffer + 18) = - pdata->dss_config__manual_block_select; - *(pbuffer + 19) = - pdata->dss_config__aperture_attenuation; - *(pbuffer + 20) = - pdata->dss_config__max_spads_limit; - *(pbuffer + 21) = - pdata->dss_config__min_spads_limit; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_general_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_general_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_GENERAL_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->gph_config__stream_count_update_value = - (*(pbuffer + 0)); - pdata->global_config__stream_divider = - (*(pbuffer + 1)); - pdata->system__interrupt_config_gpio = - (*(pbuffer + 2)); - pdata->cal_config__vcsel_start = - (*(pbuffer + 3)) & 0x7F; - pdata->cal_config__repeat_rate = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 4)) & 0xFFF; - pdata->global_config__vcsel_width = - (*(pbuffer + 6)) & 0x7F; - pdata->phasecal_config__timeout_macrop = - (*(pbuffer + 7)); - pdata->phasecal_config__target = - (*(pbuffer + 8)); - pdata->phasecal_config__override = - (*(pbuffer + 9)) & 0x1; - pdata->dss_config__roi_mode_control = - (*(pbuffer + 11)) & 0x7; - pdata->system__thresh_rate_high = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 12)); - pdata->system__thresh_rate_low = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 14)); - pdata->dss_config__manual_effective_spads_select = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 16)); - pdata->dss_config__manual_block_select = - (*(pbuffer + 18)); - pdata->dss_config__aperture_attenuation = - (*(pbuffer + 19)); - pdata->dss_config__max_spads_limit = - (*(pbuffer + 20)); - pdata->dss_config__min_spads_limit = - (*(pbuffer + 21)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_general_config( - VL53L1_DEV Dev, - VL53L1_general_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_GENERAL_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_general_config( - pdata, - VL53L1_GENERAL_CONFIG_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_GPH_CONFIG__STREAM_COUNT_UPDATE_VALUE, - comms_buffer, - VL53L1_GENERAL_CONFIG_I2C_SIZE_BYTES); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_general_config( - VL53L1_DEV Dev, - VL53L1_general_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_GENERAL_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_GPH_CONFIG__STREAM_COUNT_UPDATE_VALUE, - comms_buffer, - VL53L1_GENERAL_CONFIG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_general_config( - VL53L1_GENERAL_CONFIG_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_timing_config( - VL53L1_timing_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_TIMING_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->mm_config__timeout_macrop_a_hi & 0xF; - *(pbuffer + 1) = - pdata->mm_config__timeout_macrop_a_lo; - *(pbuffer + 2) = - pdata->mm_config__timeout_macrop_b_hi & 0xF; - *(pbuffer + 3) = - pdata->mm_config__timeout_macrop_b_lo; - *(pbuffer + 4) = - pdata->range_config__timeout_macrop_a_hi & 0xF; - *(pbuffer + 5) = - pdata->range_config__timeout_macrop_a_lo; - *(pbuffer + 6) = - pdata->range_config__vcsel_period_a & 0x3F; - *(pbuffer + 7) = - pdata->range_config__timeout_macrop_b_hi & 0xF; - *(pbuffer + 8) = - pdata->range_config__timeout_macrop_b_lo; - *(pbuffer + 9) = - pdata->range_config__vcsel_period_b & 0x3F; - VL53L1_i2c_encode_uint16_t( - pdata->range_config__sigma_thresh, - 2, - pbuffer + 10); - VL53L1_i2c_encode_uint16_t( - pdata->range_config__min_count_rate_rtn_limit_mcps, - 2, - pbuffer + 12); - *(pbuffer + 14) = - pdata->range_config__valid_phase_low; - *(pbuffer + 15) = - pdata->range_config__valid_phase_high; - VL53L1_i2c_encode_uint32_t( - pdata->system__intermeasurement_period, - 4, - pbuffer + 18); - *(pbuffer + 22) = - pdata->system__fractional_enable & 0x1; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_timing_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_timing_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_TIMING_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->mm_config__timeout_macrop_a_hi = - (*(pbuffer + 0)) & 0xF; - pdata->mm_config__timeout_macrop_a_lo = - (*(pbuffer + 1)); - pdata->mm_config__timeout_macrop_b_hi = - (*(pbuffer + 2)) & 0xF; - pdata->mm_config__timeout_macrop_b_lo = - (*(pbuffer + 3)); - pdata->range_config__timeout_macrop_a_hi = - (*(pbuffer + 4)) & 0xF; - pdata->range_config__timeout_macrop_a_lo = - (*(pbuffer + 5)); - pdata->range_config__vcsel_period_a = - (*(pbuffer + 6)) & 0x3F; - pdata->range_config__timeout_macrop_b_hi = - (*(pbuffer + 7)) & 0xF; - pdata->range_config__timeout_macrop_b_lo = - (*(pbuffer + 8)); - pdata->range_config__vcsel_period_b = - (*(pbuffer + 9)) & 0x3F; - pdata->range_config__sigma_thresh = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 10)); - pdata->range_config__min_count_rate_rtn_limit_mcps = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 12)); - pdata->range_config__valid_phase_low = - (*(pbuffer + 14)); - pdata->range_config__valid_phase_high = - (*(pbuffer + 15)); - pdata->system__intermeasurement_period = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 18)); - pdata->system__fractional_enable = - (*(pbuffer + 22)) & 0x1; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_timing_config( - VL53L1_DEV Dev, - VL53L1_timing_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_TIMING_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_timing_config( - pdata, - VL53L1_TIMING_CONFIG_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_MM_CONFIG__TIMEOUT_MACROP_A_HI, - comms_buffer, - VL53L1_TIMING_CONFIG_I2C_SIZE_BYTES); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_timing_config( - VL53L1_DEV Dev, - VL53L1_timing_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_TIMING_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_MM_CONFIG__TIMEOUT_MACROP_A_HI, - comms_buffer, - VL53L1_TIMING_CONFIG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_timing_config( - VL53L1_TIMING_CONFIG_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_dynamic_config( - VL53L1_dynamic_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_DYNAMIC_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->system__grouped_parameter_hold_0 & 0x3; - VL53L1_i2c_encode_uint16_t( - pdata->system__thresh_high, - 2, - pbuffer + 1); - VL53L1_i2c_encode_uint16_t( - pdata->system__thresh_low, - 2, - pbuffer + 3); - *(pbuffer + 5) = - pdata->system__enable_xtalk_per_quadrant & 0x1; - *(pbuffer + 6) = - pdata->system__seed_config & 0x7; - *(pbuffer + 7) = - pdata->sd_config__woi_sd0; - *(pbuffer + 8) = - pdata->sd_config__woi_sd1; - *(pbuffer + 9) = - pdata->sd_config__initial_phase_sd0 & 0x7F; - *(pbuffer + 10) = - pdata->sd_config__initial_phase_sd1 & 0x7F; - *(pbuffer + 11) = - pdata->system__grouped_parameter_hold_1 & 0x3; - *(pbuffer + 12) = - pdata->sd_config__first_order_select & 0x3; - *(pbuffer + 13) = - pdata->sd_config__quantifier & 0xF; - *(pbuffer + 14) = - pdata->roi_config__user_roi_centre_spad; - *(pbuffer + 15) = - pdata->roi_config__user_roi_requested_global_xy_size; - *(pbuffer + 16) = - pdata->system__sequence_config; - *(pbuffer + 17) = - pdata->system__grouped_parameter_hold & 0x3; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_dynamic_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_dynamic_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_DYNAMIC_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->system__grouped_parameter_hold_0 = - (*(pbuffer + 0)) & 0x3; - pdata->system__thresh_high = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 1)); - pdata->system__thresh_low = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 3)); - pdata->system__enable_xtalk_per_quadrant = - (*(pbuffer + 5)) & 0x1; - pdata->system__seed_config = - (*(pbuffer + 6)) & 0x7; - pdata->sd_config__woi_sd0 = - (*(pbuffer + 7)); - pdata->sd_config__woi_sd1 = - (*(pbuffer + 8)); - pdata->sd_config__initial_phase_sd0 = - (*(pbuffer + 9)) & 0x7F; - pdata->sd_config__initial_phase_sd1 = - (*(pbuffer + 10)) & 0x7F; - pdata->system__grouped_parameter_hold_1 = - (*(pbuffer + 11)) & 0x3; - pdata->sd_config__first_order_select = - (*(pbuffer + 12)) & 0x3; - pdata->sd_config__quantifier = - (*(pbuffer + 13)) & 0xF; - pdata->roi_config__user_roi_centre_spad = - (*(pbuffer + 14)); - pdata->roi_config__user_roi_requested_global_xy_size = - (*(pbuffer + 15)); - pdata->system__sequence_config = - (*(pbuffer + 16)); - pdata->system__grouped_parameter_hold = - (*(pbuffer + 17)) & 0x3; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_dynamic_config( - VL53L1_DEV Dev, - VL53L1_dynamic_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_DYNAMIC_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_dynamic_config( - pdata, - VL53L1_DYNAMIC_CONFIG_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_SYSTEM__GROUPED_PARAMETER_HOLD_0, - comms_buffer, - VL53L1_DYNAMIC_CONFIG_I2C_SIZE_BYTES); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_dynamic_config( - VL53L1_DEV Dev, - VL53L1_dynamic_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_DYNAMIC_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_SYSTEM__GROUPED_PARAMETER_HOLD_0, - comms_buffer, - VL53L1_DYNAMIC_CONFIG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_dynamic_config( - VL53L1_DYNAMIC_CONFIG_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_system_control( - VL53L1_system_control_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->power_management__go1_power_force & 0x1; - *(pbuffer + 1) = - pdata->system__stream_count_ctrl & 0x1; - *(pbuffer + 2) = - pdata->firmware__enable & 0x1; - *(pbuffer + 3) = - pdata->system__interrupt_clear & 0x3; - *(pbuffer + 4) = - pdata->system__mode_start; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_system_control( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_system_control_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->power_management__go1_power_force = - (*(pbuffer + 0)) & 0x1; - pdata->system__stream_count_ctrl = - (*(pbuffer + 1)) & 0x1; - pdata->firmware__enable = - (*(pbuffer + 2)) & 0x1; - pdata->system__interrupt_clear = - (*(pbuffer + 3)) & 0x3; - pdata->system__mode_start = - (*(pbuffer + 4)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_system_control( - VL53L1_DEV Dev, - VL53L1_system_control_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_system_control( - pdata, - VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_POWER_MANAGEMENT__GO1_POWER_FORCE, - comms_buffer, - VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_system_control( - VL53L1_DEV Dev, - VL53L1_system_control_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_POWER_MANAGEMENT__GO1_POWER_FORCE, - comms_buffer, - VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_system_control( - VL53L1_SYSTEM_CONTROL_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_system_results( - VL53L1_system_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->result__interrupt_status & 0x3F; - *(pbuffer + 1) = - pdata->result__range_status; - *(pbuffer + 2) = - pdata->result__report_status & 0xF; - *(pbuffer + 3) = - pdata->result__stream_count; - VL53L1_i2c_encode_uint16_t( - pdata->result__dss_actual_effective_spads_sd0, - 2, - pbuffer + 4); - VL53L1_i2c_encode_uint16_t( - pdata->result__peak_signal_count_rate_mcps_sd0, - 2, - pbuffer + 6); - VL53L1_i2c_encode_uint16_t( - pdata->result__ambient_count_rate_mcps_sd0, - 2, - pbuffer + 8); - VL53L1_i2c_encode_uint16_t( - pdata->result__sigma_sd0, - 2, - pbuffer + 10); - VL53L1_i2c_encode_uint16_t( - pdata->result__phase_sd0, - 2, - pbuffer + 12); - VL53L1_i2c_encode_uint16_t( - pdata->result__final_crosstalk_corrected_range_mm_sd0, - 2, - pbuffer + 14); - VL53L1_i2c_encode_uint16_t( - pdata->result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0, - 2, - pbuffer + 16); - VL53L1_i2c_encode_uint16_t( - pdata->result__mm_inner_actual_effective_spads_sd0, - 2, - pbuffer + 18); - VL53L1_i2c_encode_uint16_t( - pdata->result__mm_outer_actual_effective_spads_sd0, - 2, - pbuffer + 20); - VL53L1_i2c_encode_uint16_t( - pdata->result__avg_signal_count_rate_mcps_sd0, - 2, - pbuffer + 22); - VL53L1_i2c_encode_uint16_t( - pdata->result__dss_actual_effective_spads_sd1, - 2, - pbuffer + 24); - VL53L1_i2c_encode_uint16_t( - pdata->result__peak_signal_count_rate_mcps_sd1, - 2, - pbuffer + 26); - VL53L1_i2c_encode_uint16_t( - pdata->result__ambient_count_rate_mcps_sd1, - 2, - pbuffer + 28); - VL53L1_i2c_encode_uint16_t( - pdata->result__sigma_sd1, - 2, - pbuffer + 30); - VL53L1_i2c_encode_uint16_t( - pdata->result__phase_sd1, - 2, - pbuffer + 32); - VL53L1_i2c_encode_uint16_t( - pdata->result__final_crosstalk_corrected_range_mm_sd1, - 2, - pbuffer + 34); - VL53L1_i2c_encode_uint16_t( - pdata->result__spare_0_sd1, - 2, - pbuffer + 36); - VL53L1_i2c_encode_uint16_t( - pdata->result__spare_1_sd1, - 2, - pbuffer + 38); - VL53L1_i2c_encode_uint16_t( - pdata->result__spare_2_sd1, - 2, - pbuffer + 40); - *(pbuffer + 42) = - pdata->result__spare_3_sd1; - *(pbuffer + 43) = - pdata->result__thresh_info; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_system_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_system_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->result__interrupt_status = - (*(pbuffer + 0)) & 0x3F; - pdata->result__range_status = - (*(pbuffer + 1)); - pdata->result__report_status = - (*(pbuffer + 2)) & 0xF; - pdata->result__stream_count = - (*(pbuffer + 3)); - pdata->result__dss_actual_effective_spads_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 4)); - pdata->result__peak_signal_count_rate_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 6)); - pdata->result__ambient_count_rate_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 8)); - pdata->result__sigma_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 10)); - pdata->result__phase_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 12)); - pdata->result__final_crosstalk_corrected_range_mm_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 14)); - pdata->result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 16)); - pdata->result__mm_inner_actual_effective_spads_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 18)); - pdata->result__mm_outer_actual_effective_spads_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 20)); - pdata->result__avg_signal_count_rate_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 22)); - pdata->result__dss_actual_effective_spads_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 24)); - pdata->result__peak_signal_count_rate_mcps_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 26)); - pdata->result__ambient_count_rate_mcps_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 28)); - pdata->result__sigma_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 30)); - pdata->result__phase_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 32)); - pdata->result__final_crosstalk_corrected_range_mm_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 34)); - pdata->result__spare_0_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 36)); - pdata->result__spare_1_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 38)); - pdata->result__spare_2_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 40)); - pdata->result__spare_3_sd1 = - (*(pbuffer + 42)); - pdata->result__thresh_info = - (*(pbuffer + 43)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_system_results( - VL53L1_DEV Dev, - VL53L1_system_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_system_results( - pdata, - VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_RESULT__INTERRUPT_STATUS, - comms_buffer, - VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_system_results( - VL53L1_DEV Dev, - VL53L1_system_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_RESULT__INTERRUPT_STATUS, - comms_buffer, - VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_system_results( - VL53L1_SYSTEM_RESULTS_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_core_results( - VL53L1_core_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_CORE_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - VL53L1_i2c_encode_uint32_t( - pdata->result_core__ambient_window_events_sd0, - 4, - pbuffer + 0); - VL53L1_i2c_encode_uint32_t( - pdata->result_core__ranging_total_events_sd0, - 4, - pbuffer + 4); - VL53L1_i2c_encode_int32_t( - pdata->result_core__signal_total_events_sd0, - 4, - pbuffer + 8); - VL53L1_i2c_encode_uint32_t( - pdata->result_core__total_periods_elapsed_sd0, - 4, - pbuffer + 12); - VL53L1_i2c_encode_uint32_t( - pdata->result_core__ambient_window_events_sd1, - 4, - pbuffer + 16); - VL53L1_i2c_encode_uint32_t( - pdata->result_core__ranging_total_events_sd1, - 4, - pbuffer + 20); - VL53L1_i2c_encode_int32_t( - pdata->result_core__signal_total_events_sd1, - 4, - pbuffer + 24); - VL53L1_i2c_encode_uint32_t( - pdata->result_core__total_periods_elapsed_sd1, - 4, - pbuffer + 28); - *(pbuffer + 32) = - pdata->result_core__spare_0; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_core_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_core_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_CORE_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->result_core__ambient_window_events_sd0 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 0)); - pdata->result_core__ranging_total_events_sd0 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 4)); - pdata->result_core__signal_total_events_sd0 = - (VL53L1_i2c_decode_int32_t(4, pbuffer + 8)); - pdata->result_core__total_periods_elapsed_sd0 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 12)); - pdata->result_core__ambient_window_events_sd1 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 16)); - pdata->result_core__ranging_total_events_sd1 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 20)); - pdata->result_core__signal_total_events_sd1 = - (VL53L1_i2c_decode_int32_t(4, pbuffer + 24)); - pdata->result_core__total_periods_elapsed_sd1 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 28)); - pdata->result_core__spare_0 = - (*(pbuffer + 32)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_core_results( - VL53L1_DEV Dev, - VL53L1_core_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_CORE_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_core_results( - pdata, - VL53L1_CORE_RESULTS_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0, - comms_buffer, - VL53L1_CORE_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_core_results( - VL53L1_DEV Dev, - VL53L1_core_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_CORE_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0, - comms_buffer, - VL53L1_CORE_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_core_results( - VL53L1_CORE_RESULTS_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_debug_results( - VL53L1_debug_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - VL53L1_i2c_encode_uint16_t( - pdata->phasecal_result__reference_phase, - 2, - pbuffer + 0); - *(pbuffer + 2) = - pdata->phasecal_result__vcsel_start & 0x7F; - *(pbuffer + 3) = - pdata->ref_spad_char_result__num_actual_ref_spads & 0x3F; - *(pbuffer + 4) = - pdata->ref_spad_char_result__ref_location & 0x3; - *(pbuffer + 5) = - pdata->vhv_result__coldboot_status & 0x1; - *(pbuffer + 6) = - pdata->vhv_result__search_result & 0x3F; - *(pbuffer + 7) = - pdata->vhv_result__latest_setting & 0x3F; - VL53L1_i2c_encode_uint16_t( - pdata->result__osc_calibrate_val & 0x3FF, - 2, - pbuffer + 8); - *(pbuffer + 10) = - pdata->ana_config__powerdown_go1 & 0x3; - *(pbuffer + 11) = - pdata->ana_config__ref_bg_ctrl & 0x3; - *(pbuffer + 12) = - pdata->ana_config__regdvdd1v2_ctrl & 0xF; - *(pbuffer + 13) = - pdata->ana_config__osc_slow_ctrl & 0x7; - *(pbuffer + 14) = - pdata->test_mode__status & 0x1; - *(pbuffer + 15) = - pdata->firmware__system_status & 0x3; - *(pbuffer + 16) = - pdata->firmware__mode_status; - *(pbuffer + 17) = - pdata->firmware__secondary_mode_status; - VL53L1_i2c_encode_uint16_t( - pdata->firmware__cal_repeat_rate_counter & 0xFFF, - 2, - pbuffer + 18); - VL53L1_i2c_encode_uint16_t( - pdata->gph__system__thresh_high, - 2, - pbuffer + 22); - VL53L1_i2c_encode_uint16_t( - pdata->gph__system__thresh_low, - 2, - pbuffer + 24); - *(pbuffer + 26) = - pdata->gph__system__enable_xtalk_per_quadrant & 0x1; - *(pbuffer + 27) = - pdata->gph__spare_0 & 0x7; - *(pbuffer + 28) = - pdata->gph__sd_config__woi_sd0; - *(pbuffer + 29) = - pdata->gph__sd_config__woi_sd1; - *(pbuffer + 30) = - pdata->gph__sd_config__initial_phase_sd0 & 0x7F; - *(pbuffer + 31) = - pdata->gph__sd_config__initial_phase_sd1 & 0x7F; - *(pbuffer + 32) = - pdata->gph__sd_config__first_order_select & 0x3; - *(pbuffer + 33) = - pdata->gph__sd_config__quantifier & 0xF; - *(pbuffer + 34) = - pdata->gph__roi_config__user_roi_centre_spad; - *(pbuffer + 35) = - pdata->gph__roi_config__user_roi_requested_global_xy_size; - *(pbuffer + 36) = - pdata->gph__system__sequence_config; - *(pbuffer + 37) = - pdata->gph__gph_id & 0x1; - *(pbuffer + 38) = - pdata->system__interrupt_set & 0x3; - *(pbuffer + 39) = - pdata->interrupt_manager__enables & 0x1F; - *(pbuffer + 40) = - pdata->interrupt_manager__clear & 0x1F; - *(pbuffer + 41) = - pdata->interrupt_manager__status & 0x1F; - *(pbuffer + 42) = - pdata->mcu_to_host_bank__wr_access_en & 0x1; - *(pbuffer + 43) = - pdata->power_management__go1_reset_status & 0x1; - *(pbuffer + 44) = - pdata->pad_startup_mode__value_ro & 0x3; - *(pbuffer + 45) = - pdata->pad_startup_mode__value_ctrl & 0x3F; - VL53L1_i2c_encode_uint32_t( - pdata->pll_period_us & 0x3FFFF, - 4, - pbuffer + 46); - VL53L1_i2c_encode_uint32_t( - pdata->interrupt_scheduler__data_out, - 4, - pbuffer + 50); - *(pbuffer + 54) = - pdata->nvm_bist__complete & 0x1; - *(pbuffer + 55) = - pdata->nvm_bist__status & 0x1; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_debug_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_debug_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->phasecal_result__reference_phase = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 0)); - pdata->phasecal_result__vcsel_start = - (*(pbuffer + 2)) & 0x7F; - pdata->ref_spad_char_result__num_actual_ref_spads = - (*(pbuffer + 3)) & 0x3F; - pdata->ref_spad_char_result__ref_location = - (*(pbuffer + 4)) & 0x3; - pdata->vhv_result__coldboot_status = - (*(pbuffer + 5)) & 0x1; - pdata->vhv_result__search_result = - (*(pbuffer + 6)) & 0x3F; - pdata->vhv_result__latest_setting = - (*(pbuffer + 7)) & 0x3F; - pdata->result__osc_calibrate_val = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 8)) & 0x3FF; - pdata->ana_config__powerdown_go1 = - (*(pbuffer + 10)) & 0x3; - pdata->ana_config__ref_bg_ctrl = - (*(pbuffer + 11)) & 0x3; - pdata->ana_config__regdvdd1v2_ctrl = - (*(pbuffer + 12)) & 0xF; - pdata->ana_config__osc_slow_ctrl = - (*(pbuffer + 13)) & 0x7; - pdata->test_mode__status = - (*(pbuffer + 14)) & 0x1; - pdata->firmware__system_status = - (*(pbuffer + 15)) & 0x3; - pdata->firmware__mode_status = - (*(pbuffer + 16)); - pdata->firmware__secondary_mode_status = - (*(pbuffer + 17)); - pdata->firmware__cal_repeat_rate_counter = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 18)) & 0xFFF; - pdata->gph__system__thresh_high = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 22)); - pdata->gph__system__thresh_low = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 24)); - pdata->gph__system__enable_xtalk_per_quadrant = - (*(pbuffer + 26)) & 0x1; - pdata->gph__spare_0 = - (*(pbuffer + 27)) & 0x7; - pdata->gph__sd_config__woi_sd0 = - (*(pbuffer + 28)); - pdata->gph__sd_config__woi_sd1 = - (*(pbuffer + 29)); - pdata->gph__sd_config__initial_phase_sd0 = - (*(pbuffer + 30)) & 0x7F; - pdata->gph__sd_config__initial_phase_sd1 = - (*(pbuffer + 31)) & 0x7F; - pdata->gph__sd_config__first_order_select = - (*(pbuffer + 32)) & 0x3; - pdata->gph__sd_config__quantifier = - (*(pbuffer + 33)) & 0xF; - pdata->gph__roi_config__user_roi_centre_spad = - (*(pbuffer + 34)); - pdata->gph__roi_config__user_roi_requested_global_xy_size = - (*(pbuffer + 35)); - pdata->gph__system__sequence_config = - (*(pbuffer + 36)); - pdata->gph__gph_id = - (*(pbuffer + 37)) & 0x1; - pdata->system__interrupt_set = - (*(pbuffer + 38)) & 0x3; - pdata->interrupt_manager__enables = - (*(pbuffer + 39)) & 0x1F; - pdata->interrupt_manager__clear = - (*(pbuffer + 40)) & 0x1F; - pdata->interrupt_manager__status = - (*(pbuffer + 41)) & 0x1F; - pdata->mcu_to_host_bank__wr_access_en = - (*(pbuffer + 42)) & 0x1; - pdata->power_management__go1_reset_status = - (*(pbuffer + 43)) & 0x1; - pdata->pad_startup_mode__value_ro = - (*(pbuffer + 44)) & 0x3; - pdata->pad_startup_mode__value_ctrl = - (*(pbuffer + 45)) & 0x3F; - pdata->pll_period_us = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 46)) & 0x3FFFF; - pdata->interrupt_scheduler__data_out = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 50)); - pdata->nvm_bist__complete = - (*(pbuffer + 54)) & 0x1; - pdata->nvm_bist__status = - (*(pbuffer + 55)) & 0x1; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_debug_results( - VL53L1_DEV Dev, - VL53L1_debug_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_debug_results( - pdata, - VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_PHASECAL_RESULT__REFERENCE_PHASE, - comms_buffer, - VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_debug_results( - VL53L1_DEV Dev, - VL53L1_debug_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_PHASECAL_RESULT__REFERENCE_PHASE, - comms_buffer, - VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_debug_results( - VL53L1_DEBUG_RESULTS_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_nvm_copy_data( - VL53L1_nvm_copy_data_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_NVM_COPY_DATA_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->identification__model_id; - *(pbuffer + 1) = - pdata->identification__module_type; - *(pbuffer + 2) = - pdata->identification__revision_id; - VL53L1_i2c_encode_uint16_t( - pdata->identification__module_id, - 2, - pbuffer + 3); - *(pbuffer + 5) = - pdata->ana_config__fast_osc__trim_max & 0x7F; - *(pbuffer + 6) = - pdata->ana_config__fast_osc__freq_set & 0x7; - *(pbuffer + 7) = - pdata->ana_config__vcsel_trim & 0x7; - *(pbuffer + 8) = - pdata->ana_config__vcsel_selion & 0x3F; - *(pbuffer + 9) = - pdata->ana_config__vcsel_selion_max & 0x3F; - *(pbuffer + 10) = - pdata->protected_laser_safety__lock_bit & 0x1; - *(pbuffer + 11) = - pdata->laser_safety__key & 0x7F; - *(pbuffer + 12) = - pdata->laser_safety__key_ro & 0x1; - *(pbuffer + 13) = - pdata->laser_safety__clip & 0x3F; - *(pbuffer + 14) = - pdata->laser_safety__mult & 0x3F; - *(pbuffer + 15) = - pdata->global_config__spad_enables_rtn_0; - *(pbuffer + 16) = - pdata->global_config__spad_enables_rtn_1; - *(pbuffer + 17) = - pdata->global_config__spad_enables_rtn_2; - *(pbuffer + 18) = - pdata->global_config__spad_enables_rtn_3; - *(pbuffer + 19) = - pdata->global_config__spad_enables_rtn_4; - *(pbuffer + 20) = - pdata->global_config__spad_enables_rtn_5; - *(pbuffer + 21) = - pdata->global_config__spad_enables_rtn_6; - *(pbuffer + 22) = - pdata->global_config__spad_enables_rtn_7; - *(pbuffer + 23) = - pdata->global_config__spad_enables_rtn_8; - *(pbuffer + 24) = - pdata->global_config__spad_enables_rtn_9; - *(pbuffer + 25) = - pdata->global_config__spad_enables_rtn_10; - *(pbuffer + 26) = - pdata->global_config__spad_enables_rtn_11; - *(pbuffer + 27) = - pdata->global_config__spad_enables_rtn_12; - *(pbuffer + 28) = - pdata->global_config__spad_enables_rtn_13; - *(pbuffer + 29) = - pdata->global_config__spad_enables_rtn_14; - *(pbuffer + 30) = - pdata->global_config__spad_enables_rtn_15; - *(pbuffer + 31) = - pdata->global_config__spad_enables_rtn_16; - *(pbuffer + 32) = - pdata->global_config__spad_enables_rtn_17; - *(pbuffer + 33) = - pdata->global_config__spad_enables_rtn_18; - *(pbuffer + 34) = - pdata->global_config__spad_enables_rtn_19; - *(pbuffer + 35) = - pdata->global_config__spad_enables_rtn_20; - *(pbuffer + 36) = - pdata->global_config__spad_enables_rtn_21; - *(pbuffer + 37) = - pdata->global_config__spad_enables_rtn_22; - *(pbuffer + 38) = - pdata->global_config__spad_enables_rtn_23; - *(pbuffer + 39) = - pdata->global_config__spad_enables_rtn_24; - *(pbuffer + 40) = - pdata->global_config__spad_enables_rtn_25; - *(pbuffer + 41) = - pdata->global_config__spad_enables_rtn_26; - *(pbuffer + 42) = - pdata->global_config__spad_enables_rtn_27; - *(pbuffer + 43) = - pdata->global_config__spad_enables_rtn_28; - *(pbuffer + 44) = - pdata->global_config__spad_enables_rtn_29; - *(pbuffer + 45) = - pdata->global_config__spad_enables_rtn_30; - *(pbuffer + 46) = - pdata->global_config__spad_enables_rtn_31; - *(pbuffer + 47) = - pdata->roi_config__mode_roi_centre_spad; - *(pbuffer + 48) = - pdata->roi_config__mode_roi_xy_size; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_nvm_copy_data( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_nvm_copy_data_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_NVM_COPY_DATA_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->identification__model_id = - (*(pbuffer + 0)); - pdata->identification__module_type = - (*(pbuffer + 1)); - pdata->identification__revision_id = - (*(pbuffer + 2)); - pdata->identification__module_id = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 3)); - pdata->ana_config__fast_osc__trim_max = - (*(pbuffer + 5)) & 0x7F; - pdata->ana_config__fast_osc__freq_set = - (*(pbuffer + 6)) & 0x7; - pdata->ana_config__vcsel_trim = - (*(pbuffer + 7)) & 0x7; - pdata->ana_config__vcsel_selion = - (*(pbuffer + 8)) & 0x3F; - pdata->ana_config__vcsel_selion_max = - (*(pbuffer + 9)) & 0x3F; - pdata->protected_laser_safety__lock_bit = - (*(pbuffer + 10)) & 0x1; - pdata->laser_safety__key = - (*(pbuffer + 11)) & 0x7F; - pdata->laser_safety__key_ro = - (*(pbuffer + 12)) & 0x1; - pdata->laser_safety__clip = - (*(pbuffer + 13)) & 0x3F; - pdata->laser_safety__mult = - (*(pbuffer + 14)) & 0x3F; - pdata->global_config__spad_enables_rtn_0 = - (*(pbuffer + 15)); - pdata->global_config__spad_enables_rtn_1 = - (*(pbuffer + 16)); - pdata->global_config__spad_enables_rtn_2 = - (*(pbuffer + 17)); - pdata->global_config__spad_enables_rtn_3 = - (*(pbuffer + 18)); - pdata->global_config__spad_enables_rtn_4 = - (*(pbuffer + 19)); - pdata->global_config__spad_enables_rtn_5 = - (*(pbuffer + 20)); - pdata->global_config__spad_enables_rtn_6 = - (*(pbuffer + 21)); - pdata->global_config__spad_enables_rtn_7 = - (*(pbuffer + 22)); - pdata->global_config__spad_enables_rtn_8 = - (*(pbuffer + 23)); - pdata->global_config__spad_enables_rtn_9 = - (*(pbuffer + 24)); - pdata->global_config__spad_enables_rtn_10 = - (*(pbuffer + 25)); - pdata->global_config__spad_enables_rtn_11 = - (*(pbuffer + 26)); - pdata->global_config__spad_enables_rtn_12 = - (*(pbuffer + 27)); - pdata->global_config__spad_enables_rtn_13 = - (*(pbuffer + 28)); - pdata->global_config__spad_enables_rtn_14 = - (*(pbuffer + 29)); - pdata->global_config__spad_enables_rtn_15 = - (*(pbuffer + 30)); - pdata->global_config__spad_enables_rtn_16 = - (*(pbuffer + 31)); - pdata->global_config__spad_enables_rtn_17 = - (*(pbuffer + 32)); - pdata->global_config__spad_enables_rtn_18 = - (*(pbuffer + 33)); - pdata->global_config__spad_enables_rtn_19 = - (*(pbuffer + 34)); - pdata->global_config__spad_enables_rtn_20 = - (*(pbuffer + 35)); - pdata->global_config__spad_enables_rtn_21 = - (*(pbuffer + 36)); - pdata->global_config__spad_enables_rtn_22 = - (*(pbuffer + 37)); - pdata->global_config__spad_enables_rtn_23 = - (*(pbuffer + 38)); - pdata->global_config__spad_enables_rtn_24 = - (*(pbuffer + 39)); - pdata->global_config__spad_enables_rtn_25 = - (*(pbuffer + 40)); - pdata->global_config__spad_enables_rtn_26 = - (*(pbuffer + 41)); - pdata->global_config__spad_enables_rtn_27 = - (*(pbuffer + 42)); - pdata->global_config__spad_enables_rtn_28 = - (*(pbuffer + 43)); - pdata->global_config__spad_enables_rtn_29 = - (*(pbuffer + 44)); - pdata->global_config__spad_enables_rtn_30 = - (*(pbuffer + 45)); - pdata->global_config__spad_enables_rtn_31 = - (*(pbuffer + 46)); - pdata->roi_config__mode_roi_centre_spad = - (*(pbuffer + 47)); - pdata->roi_config__mode_roi_xy_size = - (*(pbuffer + 48)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_nvm_copy_data( - VL53L1_DEV Dev, - VL53L1_nvm_copy_data_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_NVM_COPY_DATA_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_nvm_copy_data( - pdata, - VL53L1_NVM_COPY_DATA_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_IDENTIFICATION__MODEL_ID, - comms_buffer, - VL53L1_NVM_COPY_DATA_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_nvm_copy_data( - VL53L1_DEV Dev, - VL53L1_nvm_copy_data_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_NVM_COPY_DATA_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_ReadMulti( - Dev, - VL53L1_IDENTIFICATION__MODEL_ID, - comms_buffer, - VL53L1_NVM_COPY_DATA_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_nvm_copy_data( - VL53L1_NVM_COPY_DATA_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_prev_shadow_system_results( - VL53L1_prev_shadow_system_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_PREV_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->prev_shadow_result__interrupt_status & 0x3F; - *(pbuffer + 1) = - pdata->prev_shadow_result__range_status; - *(pbuffer + 2) = - pdata->prev_shadow_result__report_status & 0xF; - *(pbuffer + 3) = - pdata->prev_shadow_result__stream_count; - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__dss_actual_effective_spads_sd0, - 2, - pbuffer + 4); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__peak_signal_count_rate_mcps_sd0, - 2, - pbuffer + 6); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__ambient_count_rate_mcps_sd0, - 2, - pbuffer + 8); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__sigma_sd0, - 2, - pbuffer + 10); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__phase_sd0, - 2, - pbuffer + 12); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__final_crosstalk_corrected_range_mm_sd0, - 2, - pbuffer + 14); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0, - 2, - pbuffer + 16); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__mm_inner_actual_effective_spads_sd0, - 2, - pbuffer + 18); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__mm_outer_actual_effective_spads_sd0, - 2, - pbuffer + 20); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__avg_signal_count_rate_mcps_sd0, - 2, - pbuffer + 22); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__dss_actual_effective_spads_sd1, - 2, - pbuffer + 24); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__peak_signal_count_rate_mcps_sd1, - 2, - pbuffer + 26); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__ambient_count_rate_mcps_sd1, - 2, - pbuffer + 28); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__sigma_sd1, - 2, - pbuffer + 30); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__phase_sd1, - 2, - pbuffer + 32); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__final_crosstalk_corrected_range_mm_sd1, - 2, - pbuffer + 34); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__spare_0_sd1, - 2, - pbuffer + 36); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__spare_1_sd1, - 2, - pbuffer + 38); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__spare_2_sd1, - 2, - pbuffer + 40); - VL53L1_i2c_encode_uint16_t( - pdata->prev_shadow_result__spare_3_sd1, - 2, - pbuffer + 42); - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_prev_shadow_system_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_prev_shadow_system_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_PREV_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->prev_shadow_result__interrupt_status = - (*(pbuffer + 0)) & 0x3F; - pdata->prev_shadow_result__range_status = - (*(pbuffer + 1)); - pdata->prev_shadow_result__report_status = - (*(pbuffer + 2)) & 0xF; - pdata->prev_shadow_result__stream_count = - (*(pbuffer + 3)); - pdata->prev_shadow_result__dss_actual_effective_spads_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 4)); - pdata->prev_shadow_result__peak_signal_count_rate_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 6)); - pdata->prev_shadow_result__ambient_count_rate_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 8)); - pdata->prev_shadow_result__sigma_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 10)); - pdata->prev_shadow_result__phase_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 12)); - pdata->prev_shadow_result__final_crosstalk_corrected_range_mm_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 14)); - pdata->prev_shadow_result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 16)); - pdata->prev_shadow_result__mm_inner_actual_effective_spads_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 18)); - pdata->prev_shadow_result__mm_outer_actual_effective_spads_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 20)); - pdata->prev_shadow_result__avg_signal_count_rate_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 22)); - pdata->prev_shadow_result__dss_actual_effective_spads_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 24)); - pdata->prev_shadow_result__peak_signal_count_rate_mcps_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 26)); - pdata->prev_shadow_result__ambient_count_rate_mcps_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 28)); - pdata->prev_shadow_result__sigma_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 30)); - pdata->prev_shadow_result__phase_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 32)); - pdata->prev_shadow_result__final_crosstalk_corrected_range_mm_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 34)); - pdata->prev_shadow_result__spare_0_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 36)); - pdata->prev_shadow_result__spare_1_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 38)); - pdata->prev_shadow_result__spare_2_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 40)); - pdata->prev_shadow_result__spare_3_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 42)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_prev_shadow_system_results( - VL53L1_DEV Dev, - VL53L1_prev_shadow_system_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_PREV_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_prev_shadow_system_results( - pdata, - VL53L1_PREV_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_PREV_SHADOW_RESULT__INTERRUPT_STATUS, - comms_buffer, - VL53L1_PREV_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_prev_shadow_system_results( - VL53L1_DEV Dev, - VL53L1_prev_shadow_system_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_PREV_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_PREV_SHADOW_RESULT__INTERRUPT_STATUS, - comms_buffer, - VL53L1_PREV_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_prev_shadow_system_results( - VL53L1_PREV_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_prev_shadow_core_results( - VL53L1_prev_shadow_core_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_PREV_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - VL53L1_i2c_encode_uint32_t( - pdata->prev_shadow_result_core__ambient_window_events_sd0, - 4, - pbuffer + 0); - VL53L1_i2c_encode_uint32_t( - pdata->prev_shadow_result_core__ranging_total_events_sd0, - 4, - pbuffer + 4); - VL53L1_i2c_encode_int32_t( - pdata->prev_shadow_result_core__signal_total_events_sd0, - 4, - pbuffer + 8); - VL53L1_i2c_encode_uint32_t( - pdata->prev_shadow_result_core__total_periods_elapsed_sd0, - 4, - pbuffer + 12); - VL53L1_i2c_encode_uint32_t( - pdata->prev_shadow_result_core__ambient_window_events_sd1, - 4, - pbuffer + 16); - VL53L1_i2c_encode_uint32_t( - pdata->prev_shadow_result_core__ranging_total_events_sd1, - 4, - pbuffer + 20); - VL53L1_i2c_encode_int32_t( - pdata->prev_shadow_result_core__signal_total_events_sd1, - 4, - pbuffer + 24); - VL53L1_i2c_encode_uint32_t( - pdata->prev_shadow_result_core__total_periods_elapsed_sd1, - 4, - pbuffer + 28); - *(pbuffer + 32) = - pdata->prev_shadow_result_core__spare_0; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_prev_shadow_core_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_prev_shadow_core_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_PREV_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->prev_shadow_result_core__ambient_window_events_sd0 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 0)); - pdata->prev_shadow_result_core__ranging_total_events_sd0 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 4)); - pdata->prev_shadow_result_core__signal_total_events_sd0 = - (VL53L1_i2c_decode_int32_t(4, pbuffer + 8)); - pdata->prev_shadow_result_core__total_periods_elapsed_sd0 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 12)); - pdata->prev_shadow_result_core__ambient_window_events_sd1 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 16)); - pdata->prev_shadow_result_core__ranging_total_events_sd1 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 20)); - pdata->prev_shadow_result_core__signal_total_events_sd1 = - (VL53L1_i2c_decode_int32_t(4, pbuffer + 24)); - pdata->prev_shadow_result_core__total_periods_elapsed_sd1 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 28)); - pdata->prev_shadow_result_core__spare_0 = - (*(pbuffer + 32)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_prev_shadow_core_results( - VL53L1_DEV Dev, - VL53L1_prev_shadow_core_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_PREV_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_prev_shadow_core_results( - pdata, - VL53L1_PREV_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0, - comms_buffer, - VL53L1_PREV_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_prev_shadow_core_results( - VL53L1_DEV Dev, - VL53L1_prev_shadow_core_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_PREV_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0, - comms_buffer, - VL53L1_PREV_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_prev_shadow_core_results( - VL53L1_PREV_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_patch_debug( - VL53L1_patch_debug_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_PATCH_DEBUG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->result__debug_status; - *(pbuffer + 1) = - pdata->result__debug_stage; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_patch_debug( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_patch_debug_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_PATCH_DEBUG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->result__debug_status = - (*(pbuffer + 0)); - pdata->result__debug_stage = - (*(pbuffer + 1)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_patch_debug( - VL53L1_DEV Dev, - VL53L1_patch_debug_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_PATCH_DEBUG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_patch_debug( - pdata, - VL53L1_PATCH_DEBUG_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_RESULT__DEBUG_STATUS, - comms_buffer, - VL53L1_PATCH_DEBUG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_patch_debug( - VL53L1_DEV Dev, - VL53L1_patch_debug_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_PATCH_DEBUG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_RESULT__DEBUG_STATUS, - comms_buffer, - VL53L1_PATCH_DEBUG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_patch_debug( - VL53L1_PATCH_DEBUG_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_gph_general_config( - VL53L1_gph_general_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_GPH_GENERAL_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - VL53L1_i2c_encode_uint16_t( - pdata->gph__system__thresh_rate_high, - 2, - pbuffer + 0); - VL53L1_i2c_encode_uint16_t( - pdata->gph__system__thresh_rate_low, - 2, - pbuffer + 2); - *(pbuffer + 4) = - pdata->gph__system__interrupt_config_gpio; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_gph_general_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_gph_general_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_GPH_GENERAL_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->gph__system__thresh_rate_high = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 0)); - pdata->gph__system__thresh_rate_low = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 2)); - pdata->gph__system__interrupt_config_gpio = - (*(pbuffer + 4)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_gph_general_config( - VL53L1_DEV Dev, - VL53L1_gph_general_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_GPH_GENERAL_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_gph_general_config( - pdata, - VL53L1_GPH_GENERAL_CONFIG_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_GPH__SYSTEM__THRESH_RATE_HIGH, - comms_buffer, - VL53L1_GPH_GENERAL_CONFIG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_gph_general_config( - VL53L1_DEV Dev, - VL53L1_gph_general_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_GPH_GENERAL_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_GPH__SYSTEM__THRESH_RATE_HIGH, - comms_buffer, - VL53L1_GPH_GENERAL_CONFIG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_gph_general_config( - VL53L1_GPH_GENERAL_CONFIG_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_gph_static_config( - VL53L1_gph_static_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_GPH_STATIC_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->gph__dss_config__roi_mode_control & 0x7; - VL53L1_i2c_encode_uint16_t( - pdata->gph__dss_config__manual_effective_spads_select, - 2, - pbuffer + 1); - *(pbuffer + 3) = - pdata->gph__dss_config__manual_block_select; - *(pbuffer + 4) = - pdata->gph__dss_config__max_spads_limit; - *(pbuffer + 5) = - pdata->gph__dss_config__min_spads_limit; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_gph_static_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_gph_static_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_GPH_STATIC_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->gph__dss_config__roi_mode_control = - (*(pbuffer + 0)) & 0x7; - pdata->gph__dss_config__manual_effective_spads_select = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 1)); - pdata->gph__dss_config__manual_block_select = - (*(pbuffer + 3)); - pdata->gph__dss_config__max_spads_limit = - (*(pbuffer + 4)); - pdata->gph__dss_config__min_spads_limit = - (*(pbuffer + 5)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_gph_static_config( - VL53L1_DEV Dev, - VL53L1_gph_static_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_GPH_STATIC_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_gph_static_config( - pdata, - VL53L1_GPH_STATIC_CONFIG_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_GPH__DSS_CONFIG__ROI_MODE_CONTROL, - comms_buffer, - VL53L1_GPH_STATIC_CONFIG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_gph_static_config( - VL53L1_DEV Dev, - VL53L1_gph_static_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_GPH_STATIC_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_GPH__DSS_CONFIG__ROI_MODE_CONTROL, - comms_buffer, - VL53L1_GPH_STATIC_CONFIG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_gph_static_config( - VL53L1_GPH_STATIC_CONFIG_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_gph_timing_config( - VL53L1_gph_timing_config_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_GPH_TIMING_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->gph__mm_config__timeout_macrop_a_hi & 0xF; - *(pbuffer + 1) = - pdata->gph__mm_config__timeout_macrop_a_lo; - *(pbuffer + 2) = - pdata->gph__mm_config__timeout_macrop_b_hi & 0xF; - *(pbuffer + 3) = - pdata->gph__mm_config__timeout_macrop_b_lo; - *(pbuffer + 4) = - pdata->gph__range_config__timeout_macrop_a_hi & 0xF; - *(pbuffer + 5) = - pdata->gph__range_config__timeout_macrop_a_lo; - *(pbuffer + 6) = - pdata->gph__range_config__vcsel_period_a & 0x3F; - *(pbuffer + 7) = - pdata->gph__range_config__vcsel_period_b & 0x3F; - *(pbuffer + 8) = - pdata->gph__range_config__timeout_macrop_b_hi & 0xF; - *(pbuffer + 9) = - pdata->gph__range_config__timeout_macrop_b_lo; - VL53L1_i2c_encode_uint16_t( - pdata->gph__range_config__sigma_thresh, - 2, - pbuffer + 10); - VL53L1_i2c_encode_uint16_t( - pdata->gph__range_config__min_count_rate_rtn_limit_mcps, - 2, - pbuffer + 12); - *(pbuffer + 14) = - pdata->gph__range_config__valid_phase_low; - *(pbuffer + 15) = - pdata->gph__range_config__valid_phase_high; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_gph_timing_config( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_gph_timing_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_GPH_TIMING_CONFIG_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->gph__mm_config__timeout_macrop_a_hi = - (*(pbuffer + 0)) & 0xF; - pdata->gph__mm_config__timeout_macrop_a_lo = - (*(pbuffer + 1)); - pdata->gph__mm_config__timeout_macrop_b_hi = - (*(pbuffer + 2)) & 0xF; - pdata->gph__mm_config__timeout_macrop_b_lo = - (*(pbuffer + 3)); - pdata->gph__range_config__timeout_macrop_a_hi = - (*(pbuffer + 4)) & 0xF; - pdata->gph__range_config__timeout_macrop_a_lo = - (*(pbuffer + 5)); - pdata->gph__range_config__vcsel_period_a = - (*(pbuffer + 6)) & 0x3F; - pdata->gph__range_config__vcsel_period_b = - (*(pbuffer + 7)) & 0x3F; - pdata->gph__range_config__timeout_macrop_b_hi = - (*(pbuffer + 8)) & 0xF; - pdata->gph__range_config__timeout_macrop_b_lo = - (*(pbuffer + 9)); - pdata->gph__range_config__sigma_thresh = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 10)); - pdata->gph__range_config__min_count_rate_rtn_limit_mcps = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 12)); - pdata->gph__range_config__valid_phase_low = - (*(pbuffer + 14)); - pdata->gph__range_config__valid_phase_high = - (*(pbuffer + 15)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_gph_timing_config( - VL53L1_DEV Dev, - VL53L1_gph_timing_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_GPH_TIMING_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_gph_timing_config( - pdata, - VL53L1_GPH_TIMING_CONFIG_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_GPH__MM_CONFIG__TIMEOUT_MACROP_A_HI, - comms_buffer, - VL53L1_GPH_TIMING_CONFIG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_gph_timing_config( - VL53L1_DEV Dev, - VL53L1_gph_timing_config_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_GPH_TIMING_CONFIG_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_GPH__MM_CONFIG__TIMEOUT_MACROP_A_HI, - comms_buffer, - VL53L1_GPH_TIMING_CONFIG_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_gph_timing_config( - VL53L1_GPH_TIMING_CONFIG_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_fw_internal( - VL53L1_fw_internal_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_FW_INTERNAL_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->firmware__internal_stream_count_div; - *(pbuffer + 1) = - pdata->firmware__internal_stream_counter_val; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_fw_internal( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_fw_internal_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_FW_INTERNAL_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->firmware__internal_stream_count_div = - (*(pbuffer + 0)); - pdata->firmware__internal_stream_counter_val = - (*(pbuffer + 1)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_fw_internal( - VL53L1_DEV Dev, - VL53L1_fw_internal_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_FW_INTERNAL_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_fw_internal( - pdata, - VL53L1_FW_INTERNAL_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_FIRMWARE__INTERNAL_STREAM_COUNT_DIV, - comms_buffer, - VL53L1_FW_INTERNAL_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_fw_internal( - VL53L1_DEV Dev, - VL53L1_fw_internal_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_FW_INTERNAL_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_FIRMWARE__INTERNAL_STREAM_COUNT_DIV, - comms_buffer, - VL53L1_FW_INTERNAL_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_fw_internal( - VL53L1_FW_INTERNAL_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_patch_results( - VL53L1_patch_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_PATCH_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->dss_calc__roi_ctrl & 0x3; - *(pbuffer + 1) = - pdata->dss_calc__spare_1; - *(pbuffer + 2) = - pdata->dss_calc__spare_2; - *(pbuffer + 3) = - pdata->dss_calc__spare_3; - *(pbuffer + 4) = - pdata->dss_calc__spare_4; - *(pbuffer + 5) = - pdata->dss_calc__spare_5; - *(pbuffer + 6) = - pdata->dss_calc__spare_6; - *(pbuffer + 7) = - pdata->dss_calc__spare_7; - *(pbuffer + 8) = - pdata->dss_calc__user_roi_spad_en_0; - *(pbuffer + 9) = - pdata->dss_calc__user_roi_spad_en_1; - *(pbuffer + 10) = - pdata->dss_calc__user_roi_spad_en_2; - *(pbuffer + 11) = - pdata->dss_calc__user_roi_spad_en_3; - *(pbuffer + 12) = - pdata->dss_calc__user_roi_spad_en_4; - *(pbuffer + 13) = - pdata->dss_calc__user_roi_spad_en_5; - *(pbuffer + 14) = - pdata->dss_calc__user_roi_spad_en_6; - *(pbuffer + 15) = - pdata->dss_calc__user_roi_spad_en_7; - *(pbuffer + 16) = - pdata->dss_calc__user_roi_spad_en_8; - *(pbuffer + 17) = - pdata->dss_calc__user_roi_spad_en_9; - *(pbuffer + 18) = - pdata->dss_calc__user_roi_spad_en_10; - *(pbuffer + 19) = - pdata->dss_calc__user_roi_spad_en_11; - *(pbuffer + 20) = - pdata->dss_calc__user_roi_spad_en_12; - *(pbuffer + 21) = - pdata->dss_calc__user_roi_spad_en_13; - *(pbuffer + 22) = - pdata->dss_calc__user_roi_spad_en_14; - *(pbuffer + 23) = - pdata->dss_calc__user_roi_spad_en_15; - *(pbuffer + 24) = - pdata->dss_calc__user_roi_spad_en_16; - *(pbuffer + 25) = - pdata->dss_calc__user_roi_spad_en_17; - *(pbuffer + 26) = - pdata->dss_calc__user_roi_spad_en_18; - *(pbuffer + 27) = - pdata->dss_calc__user_roi_spad_en_19; - *(pbuffer + 28) = - pdata->dss_calc__user_roi_spad_en_20; - *(pbuffer + 29) = - pdata->dss_calc__user_roi_spad_en_21; - *(pbuffer + 30) = - pdata->dss_calc__user_roi_spad_en_22; - *(pbuffer + 31) = - pdata->dss_calc__user_roi_spad_en_23; - *(pbuffer + 32) = - pdata->dss_calc__user_roi_spad_en_24; - *(pbuffer + 33) = - pdata->dss_calc__user_roi_spad_en_25; - *(pbuffer + 34) = - pdata->dss_calc__user_roi_spad_en_26; - *(pbuffer + 35) = - pdata->dss_calc__user_roi_spad_en_27; - *(pbuffer + 36) = - pdata->dss_calc__user_roi_spad_en_28; - *(pbuffer + 37) = - pdata->dss_calc__user_roi_spad_en_29; - *(pbuffer + 38) = - pdata->dss_calc__user_roi_spad_en_30; - *(pbuffer + 39) = - pdata->dss_calc__user_roi_spad_en_31; - *(pbuffer + 40) = - pdata->dss_calc__user_roi_0; - *(pbuffer + 41) = - pdata->dss_calc__user_roi_1; - *(pbuffer + 42) = - pdata->dss_calc__mode_roi_0; - *(pbuffer + 43) = - pdata->dss_calc__mode_roi_1; - *(pbuffer + 44) = - pdata->sigma_estimator_calc__spare_0; - VL53L1_i2c_encode_uint16_t( - pdata->vhv_result__peak_signal_rate_mcps, - 2, - pbuffer + 46); - VL53L1_i2c_encode_uint32_t( - pdata->vhv_result__signal_total_events_ref, - 4, - pbuffer + 48); - VL53L1_i2c_encode_uint16_t( - pdata->phasecal_result__phase_output_ref, - 2, - pbuffer + 52); - VL53L1_i2c_encode_uint16_t( - pdata->dss_result__total_rate_per_spad, - 2, - pbuffer + 54); - *(pbuffer + 56) = - pdata->dss_result__enabled_blocks; - VL53L1_i2c_encode_uint16_t( - pdata->dss_result__num_requested_spads, - 2, - pbuffer + 58); - VL53L1_i2c_encode_uint16_t( - pdata->mm_result__inner_intersection_rate, - 2, - pbuffer + 62); - VL53L1_i2c_encode_uint16_t( - pdata->mm_result__outer_complement_rate, - 2, - pbuffer + 64); - VL53L1_i2c_encode_uint16_t( - pdata->mm_result__total_offset, - 2, - pbuffer + 66); - VL53L1_i2c_encode_uint32_t( - pdata->xtalk_calc__xtalk_for_enabled_spads & 0xFFFFFF, - 4, - pbuffer + 68); - VL53L1_i2c_encode_uint32_t( - pdata->xtalk_result__avg_xtalk_user_roi_kcps & 0xFFFFFF, - 4, - pbuffer + 72); - VL53L1_i2c_encode_uint32_t( - pdata->xtalk_result__avg_xtalk_mm_inner_roi_kcps & 0xFFFFFF, - 4, - pbuffer + 76); - VL53L1_i2c_encode_uint32_t( - pdata->xtalk_result__avg_xtalk_mm_outer_roi_kcps & 0xFFFFFF, - 4, - pbuffer + 80); - VL53L1_i2c_encode_uint32_t( - pdata->range_result__accum_phase, - 4, - pbuffer + 84); - VL53L1_i2c_encode_uint16_t( - pdata->range_result__offset_corrected_range, - 2, - pbuffer + 88); - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_patch_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_patch_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_PATCH_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->dss_calc__roi_ctrl = - (*(pbuffer + 0)) & 0x3; - pdata->dss_calc__spare_1 = - (*(pbuffer + 1)); - pdata->dss_calc__spare_2 = - (*(pbuffer + 2)); - pdata->dss_calc__spare_3 = - (*(pbuffer + 3)); - pdata->dss_calc__spare_4 = - (*(pbuffer + 4)); - pdata->dss_calc__spare_5 = - (*(pbuffer + 5)); - pdata->dss_calc__spare_6 = - (*(pbuffer + 6)); - pdata->dss_calc__spare_7 = - (*(pbuffer + 7)); - pdata->dss_calc__user_roi_spad_en_0 = - (*(pbuffer + 8)); - pdata->dss_calc__user_roi_spad_en_1 = - (*(pbuffer + 9)); - pdata->dss_calc__user_roi_spad_en_2 = - (*(pbuffer + 10)); - pdata->dss_calc__user_roi_spad_en_3 = - (*(pbuffer + 11)); - pdata->dss_calc__user_roi_spad_en_4 = - (*(pbuffer + 12)); - pdata->dss_calc__user_roi_spad_en_5 = - (*(pbuffer + 13)); - pdata->dss_calc__user_roi_spad_en_6 = - (*(pbuffer + 14)); - pdata->dss_calc__user_roi_spad_en_7 = - (*(pbuffer + 15)); - pdata->dss_calc__user_roi_spad_en_8 = - (*(pbuffer + 16)); - pdata->dss_calc__user_roi_spad_en_9 = - (*(pbuffer + 17)); - pdata->dss_calc__user_roi_spad_en_10 = - (*(pbuffer + 18)); - pdata->dss_calc__user_roi_spad_en_11 = - (*(pbuffer + 19)); - pdata->dss_calc__user_roi_spad_en_12 = - (*(pbuffer + 20)); - pdata->dss_calc__user_roi_spad_en_13 = - (*(pbuffer + 21)); - pdata->dss_calc__user_roi_spad_en_14 = - (*(pbuffer + 22)); - pdata->dss_calc__user_roi_spad_en_15 = - (*(pbuffer + 23)); - pdata->dss_calc__user_roi_spad_en_16 = - (*(pbuffer + 24)); - pdata->dss_calc__user_roi_spad_en_17 = - (*(pbuffer + 25)); - pdata->dss_calc__user_roi_spad_en_18 = - (*(pbuffer + 26)); - pdata->dss_calc__user_roi_spad_en_19 = - (*(pbuffer + 27)); - pdata->dss_calc__user_roi_spad_en_20 = - (*(pbuffer + 28)); - pdata->dss_calc__user_roi_spad_en_21 = - (*(pbuffer + 29)); - pdata->dss_calc__user_roi_spad_en_22 = - (*(pbuffer + 30)); - pdata->dss_calc__user_roi_spad_en_23 = - (*(pbuffer + 31)); - pdata->dss_calc__user_roi_spad_en_24 = - (*(pbuffer + 32)); - pdata->dss_calc__user_roi_spad_en_25 = - (*(pbuffer + 33)); - pdata->dss_calc__user_roi_spad_en_26 = - (*(pbuffer + 34)); - pdata->dss_calc__user_roi_spad_en_27 = - (*(pbuffer + 35)); - pdata->dss_calc__user_roi_spad_en_28 = - (*(pbuffer + 36)); - pdata->dss_calc__user_roi_spad_en_29 = - (*(pbuffer + 37)); - pdata->dss_calc__user_roi_spad_en_30 = - (*(pbuffer + 38)); - pdata->dss_calc__user_roi_spad_en_31 = - (*(pbuffer + 39)); - pdata->dss_calc__user_roi_0 = - (*(pbuffer + 40)); - pdata->dss_calc__user_roi_1 = - (*(pbuffer + 41)); - pdata->dss_calc__mode_roi_0 = - (*(pbuffer + 42)); - pdata->dss_calc__mode_roi_1 = - (*(pbuffer + 43)); - pdata->sigma_estimator_calc__spare_0 = - (*(pbuffer + 44)); - pdata->vhv_result__peak_signal_rate_mcps = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 46)); - pdata->vhv_result__signal_total_events_ref = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 48)); - pdata->phasecal_result__phase_output_ref = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 52)); - pdata->dss_result__total_rate_per_spad = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 54)); - pdata->dss_result__enabled_blocks = - (*(pbuffer + 56)); - pdata->dss_result__num_requested_spads = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 58)); - pdata->mm_result__inner_intersection_rate = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 62)); - pdata->mm_result__outer_complement_rate = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 64)); - pdata->mm_result__total_offset = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 66)); - pdata->xtalk_calc__xtalk_for_enabled_spads = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 68)) & 0xFFFFFF; - pdata->xtalk_result__avg_xtalk_user_roi_kcps = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 72)) & 0xFFFFFF; - pdata->xtalk_result__avg_xtalk_mm_inner_roi_kcps = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 76)) & 0xFFFFFF; - pdata->xtalk_result__avg_xtalk_mm_outer_roi_kcps = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 80)) & 0xFFFFFF; - pdata->range_result__accum_phase = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 84)); - pdata->range_result__offset_corrected_range = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 88)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_patch_results( - VL53L1_DEV Dev, - VL53L1_patch_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_PATCH_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_patch_results( - pdata, - VL53L1_PATCH_RESULTS_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_DSS_CALC__ROI_CTRL, - comms_buffer, - VL53L1_PATCH_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_patch_results( - VL53L1_DEV Dev, - VL53L1_patch_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_PATCH_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_DSS_CALC__ROI_CTRL, - comms_buffer, - VL53L1_PATCH_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_patch_results( - VL53L1_PATCH_RESULTS_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_shadow_system_results( - VL53L1_shadow_system_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - *(pbuffer + 0) = - pdata->shadow_phasecal_result__vcsel_start; - *(pbuffer + 2) = - pdata->shadow_result__interrupt_status & 0x3F; - *(pbuffer + 3) = - pdata->shadow_result__range_status; - *(pbuffer + 4) = - pdata->shadow_result__report_status & 0xF; - *(pbuffer + 5) = - pdata->shadow_result__stream_count; - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__dss_actual_effective_spads_sd0, - 2, - pbuffer + 6); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__peak_signal_count_rate_mcps_sd0, - 2, - pbuffer + 8); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__ambient_count_rate_mcps_sd0, - 2, - pbuffer + 10); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__sigma_sd0, - 2, - pbuffer + 12); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__phase_sd0, - 2, - pbuffer + 14); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__final_crosstalk_corrected_range_mm_sd0, - 2, - pbuffer + 16); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0, - 2, - pbuffer + 18); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__mm_inner_actual_effective_spads_sd0, - 2, - pbuffer + 20); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__mm_outer_actual_effective_spads_sd0, - 2, - pbuffer + 22); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__avg_signal_count_rate_mcps_sd0, - 2, - pbuffer + 24); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__dss_actual_effective_spads_sd1, - 2, - pbuffer + 26); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__peak_signal_count_rate_mcps_sd1, - 2, - pbuffer + 28); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__ambient_count_rate_mcps_sd1, - 2, - pbuffer + 30); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__sigma_sd1, - 2, - pbuffer + 32); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__phase_sd1, - 2, - pbuffer + 34); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__final_crosstalk_corrected_range_mm_sd1, - 2, - pbuffer + 36); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__spare_0_sd1, - 2, - pbuffer + 38); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__spare_1_sd1, - 2, - pbuffer + 40); - VL53L1_i2c_encode_uint16_t( - pdata->shadow_result__spare_2_sd1, - 2, - pbuffer + 42); - *(pbuffer + 44) = - pdata->shadow_result__spare_3_sd1; - *(pbuffer + 45) = - pdata->shadow_result__thresh_info; - *(pbuffer + 80) = - pdata->shadow_phasecal_result__reference_phase_hi; - *(pbuffer + 81) = - pdata->shadow_phasecal_result__reference_phase_lo; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_shadow_system_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_shadow_system_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->shadow_phasecal_result__vcsel_start = - (*(pbuffer + 0)); - pdata->shadow_result__interrupt_status = - (*(pbuffer + 2)) & 0x3F; - pdata->shadow_result__range_status = - (*(pbuffer + 3)); - pdata->shadow_result__report_status = - (*(pbuffer + 4)) & 0xF; - pdata->shadow_result__stream_count = - (*(pbuffer + 5)); - pdata->shadow_result__dss_actual_effective_spads_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 6)); - pdata->shadow_result__peak_signal_count_rate_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 8)); - pdata->shadow_result__ambient_count_rate_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 10)); - pdata->shadow_result__sigma_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 12)); - pdata->shadow_result__phase_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 14)); - pdata->shadow_result__final_crosstalk_corrected_range_mm_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 16)); - pdata->shadow_result__peak_signal_count_rate_crosstalk_corrected_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 18)); - pdata->shadow_result__mm_inner_actual_effective_spads_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 20)); - pdata->shadow_result__mm_outer_actual_effective_spads_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 22)); - pdata->shadow_result__avg_signal_count_rate_mcps_sd0 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 24)); - pdata->shadow_result__dss_actual_effective_spads_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 26)); - pdata->shadow_result__peak_signal_count_rate_mcps_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 28)); - pdata->shadow_result__ambient_count_rate_mcps_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 30)); - pdata->shadow_result__sigma_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 32)); - pdata->shadow_result__phase_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 34)); - pdata->shadow_result__final_crosstalk_corrected_range_mm_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 36)); - pdata->shadow_result__spare_0_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 38)); - pdata->shadow_result__spare_1_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 40)); - pdata->shadow_result__spare_2_sd1 = - (VL53L1_i2c_decode_uint16_t(2, pbuffer + 42)); - pdata->shadow_result__spare_3_sd1 = - (*(pbuffer + 44)); - pdata->shadow_result__thresh_info = - (*(pbuffer + 45)); - pdata->shadow_phasecal_result__reference_phase_hi = - (*(pbuffer + 80)); - pdata->shadow_phasecal_result__reference_phase_lo = - (*(pbuffer + 81)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_shadow_system_results( - VL53L1_DEV Dev, - VL53L1_shadow_system_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_shadow_system_results( - pdata, - VL53L1_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_SHADOW_PHASECAL_RESULT__VCSEL_START, - comms_buffer, - VL53L1_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_shadow_system_results( - VL53L1_DEV Dev, - VL53L1_shadow_system_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_SHADOW_PHASECAL_RESULT__VCSEL_START, - comms_buffer, - VL53L1_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_shadow_system_results( - VL53L1_SHADOW_SYSTEM_RESULTS_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_i2c_encode_shadow_core_results( - VL53L1_shadow_core_results_t *pdata, - uint16_t buf_size, - uint8_t *pbuffer) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - VL53L1_i2c_encode_uint32_t( - pdata->shadow_result_core__ambient_window_events_sd0, - 4, - pbuffer + 0); - VL53L1_i2c_encode_uint32_t( - pdata->shadow_result_core__ranging_total_events_sd0, - 4, - pbuffer + 4); - VL53L1_i2c_encode_int32_t( - pdata->shadow_result_core__signal_total_events_sd0, - 4, - pbuffer + 8); - VL53L1_i2c_encode_uint32_t( - pdata->shadow_result_core__total_periods_elapsed_sd0, - 4, - pbuffer + 12); - VL53L1_i2c_encode_uint32_t( - pdata->shadow_result_core__ambient_window_events_sd1, - 4, - pbuffer + 16); - VL53L1_i2c_encode_uint32_t( - pdata->shadow_result_core__ranging_total_events_sd1, - 4, - pbuffer + 20); - VL53L1_i2c_encode_int32_t( - pdata->shadow_result_core__signal_total_events_sd1, - 4, - pbuffer + 24); - VL53L1_i2c_encode_uint32_t( - pdata->shadow_result_core__total_periods_elapsed_sd1, - 4, - pbuffer + 28); - *(pbuffer + 32) = - pdata->shadow_result_core__spare_0; - LOG_FUNCTION_END(status); - - - return status; -} - - -VL53L1_Error VL53L1_i2c_decode_shadow_core_results( - uint16_t buf_size, - uint8_t *pbuffer, - VL53L1_shadow_core_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - if (VL53L1_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES > buf_size) - return VL53L1_ERROR_COMMS_BUFFER_TOO_SMALL; - - pdata->shadow_result_core__ambient_window_events_sd0 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 0)); - pdata->shadow_result_core__ranging_total_events_sd0 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 4)); - pdata->shadow_result_core__signal_total_events_sd0 = - (VL53L1_i2c_decode_int32_t(4, pbuffer + 8)); - pdata->shadow_result_core__total_periods_elapsed_sd0 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 12)); - pdata->shadow_result_core__ambient_window_events_sd1 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 16)); - pdata->shadow_result_core__ranging_total_events_sd1 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 20)); - pdata->shadow_result_core__signal_total_events_sd1 = - (VL53L1_i2c_decode_int32_t(4, pbuffer + 24)); - pdata->shadow_result_core__total_periods_elapsed_sd1 = - (VL53L1_i2c_decode_uint32_t(4, pbuffer + 28)); - pdata->shadow_result_core__spare_0 = - (*(pbuffer + 32)); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_set_shadow_core_results( - VL53L1_DEV Dev, - VL53L1_shadow_core_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_i2c_encode_shadow_core_results( - pdata, - VL53L1_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES, - comms_buffer); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_WriteMulti( - Dev, - VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0, - comms_buffer, - VL53L1_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_get_shadow_core_results( - VL53L1_DEV Dev, - VL53L1_shadow_core_results_t *pdata) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t comms_buffer[VL53L1_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES]; - - LOG_FUNCTION_START(""); - - if (status == VL53L1_ERROR_NONE) - - status = VL53L1_disable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_ReadMulti( - Dev, - VL53L1_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0, - comms_buffer, - VL53L1_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_enable_firmware(Dev); - - if (status == VL53L1_ERROR_NONE) - status = VL53L1_i2c_decode_shadow_core_results( - VL53L1_SHADOW_CORE_RESULTS_I2C_SIZE_BYTES, - comms_buffer, - pdata); - - LOG_FUNCTION_END(status); - - return status; -} - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_silicon_core.c b/drivers/input/misc/vl53L1/src/vl53l1_silicon_core.c deleted file mode 100644 index acd5c1769eb9..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_silicon_core.c +++ /dev/null @@ -1,180 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_platform.h" -#include "vl53l1_register_map.h" -#include "vl53l1_core.h" -#include "vl53l1_silicon_core.h" - - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_CORE, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_CORE, status, fmt, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_is_firmware_ready_silicon( - VL53L1_DEV Dev, - uint8_t *pready) -{ - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t comms_buffer[5]; - - LOG_FUNCTION_START(""); - - - - - status = VL53L1_ReadMulti( - Dev, - VL53L1_INTERRUPT_MANAGER__ENABLES, - comms_buffer, - 5); - - if (status == VL53L1_ERROR_NONE) { - - pdev->dbg_results.interrupt_manager__enables = - comms_buffer[0]; - pdev->dbg_results.interrupt_manager__clear = - comms_buffer[1]; - pdev->dbg_results.interrupt_manager__status = - comms_buffer[2]; - pdev->dbg_results.mcu_to_host_bank__wr_access_en = - comms_buffer[3]; - pdev->dbg_results.power_management__go1_reset_status = - comms_buffer[4]; - - if ((pdev->sys_ctrl.power_management__go1_power_force & 0x01) == 0x01) { - - if (((pdev->dbg_results.interrupt_manager__enables & 0x1F) == 0x1F) && - ((pdev->dbg_results.interrupt_manager__clear & 0x1F) == 0x1F)) - *pready = 0x01; - else - *pready = 0x00; - - } else { - - - - if ((pdev->dbg_results.power_management__go1_reset_status & 0x01) == 0x00) - *pready = 0x01; - else - *pready = 0x00; - } - - } - - LOG_FUNCTION_END(status); - - return status; -} - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_wait.c b/drivers/input/misc/vl53L1/src/vl53l1_wait.c deleted file mode 100644 index a04854961bbb..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_wait.c +++ /dev/null @@ -1,627 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_ll_device.h" -#include "vl53l1_platform.h" -#include "vl53l1_core.h" -#include "vl53l1_fpga_core.h" -#include "vl53l1_silicon_core.h" -#include "vl53l1_wait.h" -#include "vl53l1_register_settings.h" - - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_CORE, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_CORE, status, \ - fmt, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_wait_for_boot_completion( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t fw_ready = 0; - - LOG_FUNCTION_START(""); - - if (pdev->wait_method == VL53L1_WAIT_METHOD_BLOCKING) { - - - - - status = - VL53L1_poll_for_boot_completion( - Dev, - VL53L1_BOOT_COMPLETION_POLLING_TIMEOUT_MS); - - } else { - - - - - fw_ready = 0; - while (fw_ready == 0x00 && status == VL53L1_ERROR_NONE) { - status = VL53L1_is_boot_complete( - Dev, - &fw_ready); - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_WaitMs( - Dev, - VL53L1_POLLING_DELAY_MS); - } - } - } - - LOG_FUNCTION_END(status); - - return status; - -} - - -VL53L1_Error VL53L1_wait_for_firmware_ready( - VL53L1_DEV Dev) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t fw_ready = 0; - uint8_t mode_start = 0; - - LOG_FUNCTION_START(""); - - - - - - mode_start = - pdev->sys_ctrl.system__mode_start & - VL53L1_DEVICEMEASUREMENTMODE_MODE_MASK; - - - - - - - - if ((mode_start == VL53L1_DEVICEMEASUREMENTMODE_TIMED) || - (mode_start == VL53L1_DEVICEMEASUREMENTMODE_SINGLESHOT)) { - - if (pdev->wait_method == VL53L1_WAIT_METHOD_BLOCKING) { - - - - - status = - VL53L1_poll_for_firmware_ready( - Dev, - VL53L1_RANGE_COMPLETION_POLLING_TIMEOUT_MS); - - } else { - - - - - fw_ready = 0; - while (fw_ready == 0x00 && status == VL53L1_ERROR_NONE) { - status = VL53L1_is_firmware_ready( - Dev, - &fw_ready); - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_WaitMs( - Dev, - VL53L1_POLLING_DELAY_MS); - } - } - } - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_wait_for_range_completion( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t data_ready = 0; - - LOG_FUNCTION_START(""); - - if (pdev->wait_method == VL53L1_WAIT_METHOD_BLOCKING) { - - - - - status = - VL53L1_poll_for_range_completion( - Dev, - VL53L1_RANGE_COMPLETION_POLLING_TIMEOUT_MS); - - } else { - - - - - data_ready = 0; - while (data_ready == 0x00 && status == VL53L1_ERROR_NONE) { - status = VL53L1_is_new_data_ready( - Dev, - &data_ready); - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_WaitMs( - Dev, - VL53L1_POLLING_DELAY_MS); - } - } - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_wait_for_test_completion( - VL53L1_DEV Dev) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t data_ready = 0; - - LOG_FUNCTION_START(""); - - if (pdev->wait_method == VL53L1_WAIT_METHOD_BLOCKING) { - - - - - status = - VL53L1_poll_for_range_completion( - Dev, - VL53L1_TEST_COMPLETION_POLLING_TIMEOUT_MS); - - } else { - - - - - data_ready = 0; - while (data_ready == 0x00 && status == VL53L1_ERROR_NONE) { - status = VL53L1_is_new_data_ready( - Dev, - &data_ready); - - if (status == VL53L1_ERROR_NONE) { - status = VL53L1_WaitMs( - Dev, - VL53L1_POLLING_DELAY_MS); - } - } - } - - LOG_FUNCTION_END(status); - - return status; -} - - - - -VL53L1_Error VL53L1_is_boot_complete( - VL53L1_DEV Dev, - uint8_t *pready) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t firmware__system_status = 0; - - LOG_FUNCTION_START(""); - - - - - status = - VL53L1_RdByte( - Dev, - VL53L1_FIRMWARE__SYSTEM_STATUS, - &firmware__system_status); - - - - - - - if ((firmware__system_status & 0x01) == 0x01) { - *pready = 0x01; - VL53L1_init_ll_driver_state( - Dev, - VL53L1_DEVICESTATE_SW_STANDBY); - } else { - *pready = 0x00; - VL53L1_init_ll_driver_state( - Dev, - VL53L1_DEVICESTATE_FW_COLDBOOT); - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_is_firmware_ready( - VL53L1_DEV Dev, - uint8_t *pready) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - LOG_FUNCTION_START(""); - - if (pdev->fpga_system > 0) - status = VL53L1_is_firmware_ready_fpga( - Dev, - pready); - else - status = VL53L1_is_firmware_ready_silicon( - Dev, - pready); - - pdev->fw_ready = *pready; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_is_new_data_ready( - VL53L1_DEV Dev, - uint8_t *pready) -{ - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t gpio__mux_active_high_hv = 0; - uint8_t gpio__tio_hv_status = 0; - uint8_t interrupt_ready = 0; - - LOG_FUNCTION_START(""); - - gpio__mux_active_high_hv = - pdev->stat_cfg.gpio_hv_mux__ctrl & - VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_MASK; - - if (gpio__mux_active_high_hv == VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_HIGH) - interrupt_ready = 0x01; - else - interrupt_ready = 0x00; - - - - - status = VL53L1_RdByte( - Dev, - VL53L1_GPIO__TIO_HV_STATUS, - &gpio__tio_hv_status); - - - - - if ((gpio__tio_hv_status & 0x01) == interrupt_ready) - *pready = 0x01; - else - *pready = 0x00; - - LOG_FUNCTION_END(status); - - return status; -} - - - - -VL53L1_Error VL53L1_poll_for_boot_completion( - VL53L1_DEV Dev, - uint32_t timeout_ms) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - - - status = VL53L1_WaitUs( - Dev, - VL53L1_FIRMWARE_BOOT_TIME_US); - - if (status == VL53L1_ERROR_NONE) - status = - VL53L1_WaitValueMaskEx( - Dev, - timeout_ms, - VL53L1_FIRMWARE__SYSTEM_STATUS, - 0x01, - 0x01, - VL53L1_POLLING_DELAY_MS); - - if (status == VL53L1_ERROR_NONE) - VL53L1_init_ll_driver_state(Dev, VL53L1_DEVICESTATE_SW_STANDBY); - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_poll_for_firmware_ready( - VL53L1_DEV Dev, - uint32_t timeout_ms) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint32_t start_time_ms = 0; - uint32_t current_time_ms = 0; - int32_t poll_delay_ms = VL53L1_POLLING_DELAY_MS; - uint8_t fw_ready = 0; - - - - - VL53L1_GetTickCount(&start_time_ms); - - pdev->fw_ready_poll_duration_ms = 0; - - - - - while ((status == VL53L1_ERROR_NONE) && - (pdev->fw_ready_poll_duration_ms < timeout_ms) && - (fw_ready == 0)) { - - status = VL53L1_is_firmware_ready( - Dev, - &fw_ready); - - if (status == VL53L1_ERROR_NONE && - fw_ready == 0 && - poll_delay_ms > 0) { - status = VL53L1_WaitMs( - Dev, - poll_delay_ms); - } - - - - - - - VL53L1_GetTickCount(¤t_time_ms); - - pdev->fw_ready_poll_duration_ms = - current_time_ms - start_time_ms; - } - - if (fw_ready == 0 && status == VL53L1_ERROR_NONE) - status = VL53L1_ERROR_TIME_OUT; - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_poll_for_range_completion( - VL53L1_DEV Dev, - uint32_t timeout_ms) -{ - - - - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); - - uint8_t gpio__mux_active_high_hv = 0; - uint8_t interrupt_ready = 0; - - LOG_FUNCTION_START(""); - - gpio__mux_active_high_hv = - pdev->stat_cfg.gpio_hv_mux__ctrl & - VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_MASK; - - if (gpio__mux_active_high_hv == VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_HIGH) - interrupt_ready = 0x01; - else - interrupt_ready = 0x00; - - status = - VL53L1_WaitValueMaskEx( - Dev, - timeout_ms, - VL53L1_GPIO__TIO_HV_STATUS, - interrupt_ready, - 0x01, - VL53L1_POLLING_DELAY_MS); - - LOG_FUNCTION_END(status); - - return status; -} - - diff --git a/drivers/input/misc/vl53L1/src/vl53l1_zone_presets.c b/drivers/input/misc/vl53L1/src/vl53l1_zone_presets.c deleted file mode 100644 index de75b9211b2c..000000000000 --- a/drivers/input/misc/vl53L1/src/vl53l1_zone_presets.c +++ /dev/null @@ -1,253 +0,0 @@ - -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* This file is part of VL53L1 Core and is dual licensed, either 'STMicroelectronics -* Proprietary license' -* or 'BSD 3-clause "New" or "Revised" License' , at your option. -* -******************************************************************************** -* -* 'STMicroelectronics Proprietary license' -* -******************************************************************************** -* -* License terms: STMicroelectronics Proprietary in accordance with licensing -* terms at www.st.com/sla0044 -* -* STMicroelectronics confidential -* Reproduction and Communication of this document is strictly prohibited unless -* specifically authorized in writing by STMicroelectronics. -* -* -******************************************************************************** -* -* Alternatively, VL53L1 Core may be distributed under the terms of -* 'BSD 3-clause "New" or "Revised" License', in which case the following -* provisions apply instead of the ones -* mentioned above : -* -******************************************************************************** -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -******************************************************************************** -* -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "vl53l1_ll_def.h" -#include "vl53l1_ll_device.h" -#include "vl53l1_platform_log.h" -#include "vl53l1_zone_presets.h" - - -#define LOG_FUNCTION_START(fmt, ...) \ - _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__) -#define LOG_FUNCTION_END(status, ...) \ - _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_CORE, status, ##__VA_ARGS__) -#define LOG_FUNCTION_END_FMT(status, fmt, ...) \ - _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_CORE, status, fmt, ##__VA_ARGS__) - - -VL53L1_Error VL53L1_init_zone_config_structure( - uint8_t x_off, - uint8_t x_inc, - uint8_t x_zones, - uint8_t y_off, - uint8_t y_inc, - uint8_t y_zones, - uint8_t width, - uint8_t height, - VL53L1_zone_config_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - uint8_t x = 0; - uint8_t y = 0; - uint16_t i = 0; - - LOG_FUNCTION_START(""); - - pdata->max_zones = VL53L1_MAX_USER_ZONES; - - i = 0; - - for (x = 0 ; x < x_zones ; x++) { - for (y = 0 ; y < y_zones ; y++) { - - if (i < VL53L1_MAX_USER_ZONES) { - - pdata->active_zones = (uint8_t)i; - pdata->user_zones[i].height = height; - pdata->user_zones[i].width = width; - pdata->user_zones[i].x_centre = x_off + (x * x_inc); - pdata->user_zones[i].y_centre = y_off + (y * y_inc); - } - - i++; - } - } - - if (status == VL53L1_ERROR_NONE) { - - status = VL53L1_init_zone_config_histogram_bins(pdata); - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_zone_preset_xtalk_planar( - VL53L1_general_config_t *pgeneral, - VL53L1_zone_config_t *pzone_cfg) -{ - - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - LOG_FUNCTION_START(""); - - - - - - - pgeneral->global_config__stream_divider = 0x05; - - - - pzone_cfg->active_zones = 0x04; - - pzone_cfg->user_zones[0].height = 15; - pzone_cfg->user_zones[0].width = 7; - pzone_cfg->user_zones[0].x_centre = 4; - pzone_cfg->user_zones[0].y_centre = 8; - - pzone_cfg->user_zones[1].height = 15; - pzone_cfg->user_zones[1].width = 7; - pzone_cfg->user_zones[1].x_centre = 12; - pzone_cfg->user_zones[1].y_centre = 8; - - pzone_cfg->user_zones[2].height = 7; - pzone_cfg->user_zones[2].width = 15; - pzone_cfg->user_zones[2].x_centre = 8; - pzone_cfg->user_zones[2].y_centre = 4; - - pzone_cfg->user_zones[3].height = 7; - pzone_cfg->user_zones[3].width = 15; - pzone_cfg->user_zones[3].x_centre = 8; - pzone_cfg->user_zones[3].y_centre = 12; - - - - - pzone_cfg->user_zones[4].height = 15; - pzone_cfg->user_zones[4].width = 15; - pzone_cfg->user_zones[4].x_centre = 8; - pzone_cfg->user_zones[4].y_centre = 8; - - if (status == VL53L1_ERROR_NONE) { - - status = VL53L1_init_zone_config_histogram_bins(pzone_cfg); - } - - LOG_FUNCTION_END(status); - - return status; -} - - -VL53L1_Error VL53L1_init_zone_config_histogram_bins( - VL53L1_zone_config_t *pdata) -{ - - - - - - VL53L1_Error status = VL53L1_ERROR_NONE; - - uint8_t i; - - LOG_FUNCTION_START(""); - - for (i = 0; i < pdata->max_zones; i++) - pdata->bin_config[i] = VL53L1_ZONECONFIG_BINCONFIG__LOWAMB; - - LOG_FUNCTION_END(status); - - return status; -} - diff --git a/drivers/input/misc/vl53L1/stmvl53l1-i2c.h b/drivers/input/misc/vl53L1/stmvl53l1-i2c.h deleted file mode 100644 index e68ca420783d..000000000000 --- a/drivers/input/misc/vl53L1/stmvl53l1-i2c.h +++ /dev/null @@ -1,109 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/** @file stmvl53l1-i2c.h - * Linux kernel i2c/cci wrapper for ST VL53L1 sensor i2c interface - **/ - -#ifndef STMVL53L1_I2C_H -#define STMVL53L1_I2C_H -#include -#include "stmvl53l1.h" - -struct i2c_data { - struct i2c_client *client; - /** back link to driver for interrupt and clean-up */ - struct stmvl53l1_data *vl53l1_data; - - /* reference counter */ - struct kref ref; - - /*!< if null no regulator use for power ctrl */ - struct regulator *vdd; - - /*!< power enable gpio number - * - * if -1 no gpio if vdd not avl pwr is not controllable - */ - int pwren_gpio; - - /*!< xsdn reset (low active) gpio number to device - * - * -1 mean none assume no "resetable" - */ - int xsdn_gpio; - - /*!< intr gpio number to device - * - * intr is active/low negative edge by default - * - * -1 mean none assume use polling - * @warning if the dev tree and intr gpio is require please adapt code - */ - int intr_gpio; - - /*!< device boot i2c register address - * - * boot_reg is the value of device i2c address after it is bring out - * of reset. - */ - int boot_reg; - - /*!< is set if above irq gpio got acquired */ - struct i2d_data_flags_t { - unsigned pwr_owned:1; /*!< set if pwren gpio is owned*/ - unsigned xsdn_owned:1; /*!< set if sxdn gpio is owned*/ - unsigned intr_owned:1; /*!< set if intr gpio is owned*/ - unsigned intr_started:1; /*!< set if irq is hanlde */ - } io_flag; - - /** the irq vectore assigned to gpio - * -1 if no irq hanled - */ - int irq; - - struct msgtctrl_t { - unsigned unhandled_irq_vec:1; - } msg_flag; -}; - -int stmvl53l1_init_i2c(void); -void __exit stmvl53l1_exit_i2c(void *); -int stmvl53l1_power_up_i2c(void *); -int stmvl53l1_power_down_i2c(void *); -int stmvl53l1_reset_release_i2c(void *); -int stmvl53l1_reset_hold_i2c(void *); -void stmvl53l1_clean_up_i2c(void); -int stmvl53l1_start_intr(void *object, int *poll_mode); -void *stmvl53l1_get(void *); -void stmvl53l1_put(void *); - -#endif /* STMVL53L1_I2C_H */ diff --git a/drivers/input/misc/vl53L1/stmvl53l1.h b/drivers/input/misc/vl53L1/stmvl53l1.h deleted file mode 100644 index 04cba5d04617..000000000000 --- a/drivers/input/misc/vl53L1/stmvl53l1.h +++ /dev/null @@ -1,379 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -*License terms : BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/** - * @file stmvl53l1.h header for vl53l1 sensor driver - */ -#ifndef STMVL53L1_H -#define STMVL53L1_H - -#include -#include -#include -#include -#include - -#include "vl53l1_api.h" - -/** - * IPP adapt - */ -#ifdef DEBUG -# define IPP_PRINT(...) printk(__VA_ARGS__) -#else -# define IPP_PRINT(...) (void)0 -#endif - -#include "stmvl53l1_ipp.h" -#include "stmvl53l1_if.h" - -/** - * Configure the Netlink-id use - */ -#define STMVL531_CFG_NETLINK_USER 23 - -#define STMVL53L1_MAX_CCI_XFER_SZ 256 -#define STMVL53L1_DRV_NAME "stmvl53l1" - -/** - * configure usage of regulator device from device tree info - * to enable/disable sensor power - * see module-i2c or module-cci file - */ -/* define CFG_STMVL53L1_HAVE_REGULATOR */ - -#define DRIVER_VERSION "8.0.0_b4.1._1268" - -/** @ingroup vl53l1_config - * @{ - */ -/** - * Configure max number of device the driver can support - */ -#define STMVL53L1_CFG_MAX_DEV 2 -/** @ingroup vl53l1_mod_dbg - * @{ - */ -#if 1 -#define DEBUG 1 -#endif -#if 0 -#define FORCE_CONSOLE_DEBUG -#endif - -extern int stmvl53l1_enable_debug; - -#ifdef DEBUG -# ifdef FORCE_CONSOLE_DEBUG -#define vl53l1_dbgmsg(str, ...) do { \ - if (stmvl53l1_enable_debug) \ - pr_info("%s: " str, __func__, ##__VA_ARGS__); \ - } while (0) -# else -#define vl53l1_dbgmsg(str, ...) do { \ - if (stmvl53l1_enable_debug) \ - pr_debug("%s: " str, __func__, ##__VA_ARGS__); \ - } while (0) -# endif -#else -# define vl53l1_dbgmsg(...) (void)0 -#endif - -/** - * set to 0 1 activate or not debug from work (data interrupt/polling) - */ -#define WORK_DEBUG 0 -#if WORK_DEBUG -# define work_dbg(msg, ...)\ - printk("[D WK53L1] :" msg "\n", ##__VA_ARGS__) -#else -# define work_dbg(...) (void)0 -#endif - -#define vl53l1_info(str, args...) \ - pr_info("%s: " str, __func__, ##args) - -#define vl53l1_errmsg(str, args...) \ - pr_err("%s: " str, __func__, ##args) - -#define vl53l1_wanrmsg(str, args...) \ - pr_warn("%s: " str, __func__, ##args) - -/* turn off poll log if not defined */ -#ifndef STMVL53L1_LOG_POLL_TIMING -# define STMVL53L1_LOG_POLL_TIMING 0 -#endif -/* turn off cci log timing if not defined */ -#ifndef STMVL53L1_LOG_CCI_TIMING -# define STMVL53L1_LOG_CCI_TIMING 0 -#endif - -/**@} */ /* ingroup mod_dbg*/ - -#include -#include -#include - -/** if set to 1 enable ipp execution timing (if debug enabled) - * @ingroup vl53l1_mod_dbg - */ -#define IPP_LOG_TIMING 1 - -struct ipp_data_t { - struct ipp_work_t work; - struct ipp_work_t work_out; - int test_n; - int buzy; /*!< buzy state 0 is idle - * any other value do not try to use (state value defined in source) - */ - int waited_xfer_id; - /*!< when buzy is set that is the id we are expecting - * note that value 0 is reserved and stand for "not waiting" - * as such never id 0 will be in any round trip exchange - * it's ok for daemon to use 0 in "ping" when it identify himself - */ - int status; /** if that is not 0 do not look at out work data */ - wait_queue_head_t waitq; - /*!< ipp caller are put in that queue wait while job is posted to user - * @warning ipp and dev mutex will be released before waiting - * see @ref ipp_abort - */ -#if IPP_LOG_TIMING - struct timeval start_tv, stop_tv; -#endif -}; - -struct stmvl53l1_waiters { - struct list_head list; - pid_t pid; -}; - -/* - * driver data structs - */ -struct stmvl53l1_data { - int id; /*!< multiple device id 0 based*/ - char name[64]; /*!< misc device name */ - int32_t hw_rev; /*!< hardware revision number*/ - - VL53L1_DevData_t stdev; /*!ipp.stop_tv) -# define stmvl531_ipp_tim_start(data)\ - do_gettimeofday(&data->ipp.start_tv) -# define stmvl531_ipp_time(data)\ - stmvl53l1_tv_dif(&data->ipp.start_tv, &data->ipp.stop_tv) -# define stmvl531_ipp_stat(data, fmt, ...)\ - vl53l1_dbgmsg("IPPSTAT " fmt "\n", ##__VA_ARGS__) -#else -# define stmvl531_ipp_tim_stop(data) (void)0 -# define stmvl531_ipp_tim_start(data) (void)0 -# define stmvl531_ipp_stat(...) (void)0 -#endif -}; - - -/** - * timeval diff in us - * - * @param pstart_tv - * @param pstop_tv - */ -long stmvl53l1_tv_dif(struct timeval *pstart_tv, struct timeval *pstop_tv); - - -/** - * The device table list table is update as device get added - * we do not support adding removing device mutiple time ! - * use for clean "unload" purpose - */ -extern struct stmvl53l1_data *stmvl53l1_dev_table[]; - -int stmvl53l1_setup(struct stmvl53l1_data *data); -void stmvl53l1_cleanup(struct stmvl53l1_data *data); -int stmvl53l1_intr_handler(struct stmvl53l1_data *data); - -int stmvl53l1_sysfs_laser(struct stmvl53l1_data *data, bool create); - -/** - * request ipp to abort or stop - * - * require dev work_mutex held - * - * @warning because the "waiting" work can't be aborted we must wake it up - * it will happen and at some later time not earlier than release of lock - * if after lock release we have a new request to start the race may not be - * handled correctly - * - * @param data the device - * @return 0 if no ipp got canceled, @warning this is maybe not grant we - * can't re-sched "dev work" and re-run the worker back - */ -int stmvl53l1_ipp_stop(struct stmvl53l1_data *data); - -int stmvl53l1_ipp_do(struct stmvl53l1_data *data, struct ipp_work_t *work_in, - struct ipp_work_t *work_out); - -/** - * per device netlink init - * @param data - * @return - */ -int stmvl53l1_ipp_setup(struct stmvl53l1_data *data); -/** - * per device ipp netlink cleaning - * @param data - * @return - */ -void stmvl53l1_ipp_cleanup(struct stmvl53l1_data *data); - -/** - * Module init for netlink - * @return 0 on success - */ -int stmvl53l1_ipp_init(void); - -/** - * Module exit for netlink - * @return 0 on success - */ -void __exit stmvl53l1_ipp_exit(void); - -/** - * enable and start ipp exhange - * @param n_dev number of device to run on - * @param data dev struct - * @return 0 on success - */ -int stmvl53l1_ipp_enable(int n_dev, struct stmvl53l1_data *data); - - -/* - * function pointer structs - */ - - - -#endif /* STMVL53L1_H */ diff --git a/drivers/input/misc/vl53L1/stmvl53l1_i2c.c b/drivers/input/misc/vl53L1/stmvl53l1_i2c.c deleted file mode 100644 index fb63b07e49d8..000000000000 --- a/drivers/input/misc/vl53L1/stmvl53l1_i2c.c +++ /dev/null @@ -1,366 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/** - * @file stmvl53l1_i2c.c vl53l1 linux native i2c interface - * - */ -#include "stmvl53l1.h" -#include "stmvl53l1-i2c.h" -#include - - - -#if STMVL53L1_LOG_POLL_TIMING -/** - * helper to elapse time in polling - * @param ptv pointer to start time_val - - */ -# define poll_timing_log(ptv) \ - vl53l1_dbgmsg("poll in %d us\n", tv_elapsed_us(ptv)) -#else -# define poll_timing_log(...) (void)0 -#endif - -#if STMVL53L1_LOG_CCI_TIMING -/** - * compute elapsed time in in micro sec based on do_gettimeofday - * @param tv pointer to start time_val - * @return time elapsed in micro seconde - */ - -/** - * compute elapsed time in in micro sec based on do_gettimeofday - * @param tv pointer to start time_val - * @return time elapsed in micro seconde - */ -static uint32_t tv_elapsed_us(struct timeval *tv) -{ - struct timeval now; - - do_gettimeofday(&now); - return (now.tv_sec - tv->tv_sec)*1000000 + (now.tv_usec - tv->tv_usec); -} - -# define cci_access_var struct timeval cci_log_start_tv -# define cci_access_start()\ - do_gettimeofday(&cci_log_start_tv) -# define cci_access_over(fmt, ...) \ - vl53l1_dbgmsg("cci_timing %d us" fmt "\n", \ - tv_elapsed_us(&cci_log_start_tv), ##__VA_ARGS__) -#else -# define cci_access_var -# define cci_access_start(...) (void)0 -# define cci_access_over(...) (void)0 -#endif - -#ifdef STMVL53L1_DEBUG_I2C -# define i2c_debug(fmt, ...) vl53l1_dbgmsg(fmt, ##__VA_ARGS__) -#else -# define i2c_debug(fmt, ...) (void)0 -#endif - - -VL53L1_Error VL53L1_GetTickCount(uint32_t *ptime_ms) -{ - (void)ptime_ms; - BUG_ON(1); -} -/** - * compute elapsed time in in milli sec based on do_gettimeofday - * @param tv pointer to start time_val - * @return time elapsed in milli seconde - */ -static uint32_t tv_elapsed_ms(struct timeval *tv) -{ - struct timeval now; - - do_gettimeofday(&now); - return (now.tv_sec - tv->tv_sec) * 1000 + - (now.tv_usec - tv->tv_usec) / 1000; -} - -static int cci_write(struct stmvl53l1_data *dev, int index, - uint8_t *data, uint16_t len){ - uint8_t buffer[STMVL53L1_MAX_CCI_XFER_SZ+2]; - struct i2c_msg msg; - struct i2c_data *i2c_client_obj = - (struct i2c_data *) dev->client_object; - struct i2c_client *client = - (struct i2c_client *) i2c_client_obj->client; - int rc; - - cci_access_var; - if (len > STMVL53L1_MAX_CCI_XFER_SZ || len == 0) { - vl53l1_errmsg("invalid len %d\n", len); - return -1; - } - cci_access_start(); - /* build up little endian index in buffer */ - buffer[0] = (index >> 8) & 0xFF; - buffer[1] = (index >> 0) & 0xFF; - /* copy write data to buffer after index */ - memcpy(buffer+2, data, len); - /* set i2c msg */ - msg.addr = client->addr; - msg.flags = client->flags; - msg.buf = buffer; - msg.len = len+2; - - rc = i2c_transfer(client->adapter, &msg, 1); - if (rc != 1) { - vl53l1_errmsg("wr i2c_transfer err:%d, index 0x%x len %d\n", - rc, index, len); - } - cci_access_over("rd status %d long %d ", rc != 1, len); - return rc != 1; -} - -static int cci_read(struct stmvl53l1_data *dev, int index, - uint8_t *data, uint16_t len) -{ - uint8_t buffer[2]; - struct i2c_msg msg[2]; - struct i2c_data *i2c_client_obj = - (struct i2c_data *) dev->client_object; - struct i2c_client *client = - (struct i2c_client *) i2c_client_obj->client; - int rc; - - cci_access_var; - if (len > STMVL53L1_MAX_CCI_XFER_SZ || len == 0) { - vl53l1_errmsg("invalid len %d\n", len); - return -1; - } - cci_access_start(); - - /* build up little endian index in buffer */ - buffer[0] = (index >> 8) & 0xFF; - buffer[1] = (index >> 0) & 0xFF; - - msg[0].addr = client->addr; - msg[0].flags = client->flags;/* Write */ - msg[0].buf = buffer; - msg[0].len = 2; - /* read part of the i2c transaction */ - msg[1].addr = client->addr; - msg[1].flags = I2C_M_RD|client->flags; - msg[1].buf = data; - msg[1].len = len; - - rc = i2c_transfer(client->adapter, msg, 2); - if (rc != 2) { - pr_err("%s: i2c_transfer :%d, @%x index 0x%x len %d\n", - __func__, rc, client->addr, index, len); - - } - cci_access_over(" wr len %d status %d", rc != 2, len); - return rc != 2; -} - - -VL53L1_Error VL53L1_WrByte(VL53L1_DEV pdev, - uint16_t index, - uint8_t data) -{ - struct stmvl53l1_data *dev; - - dev = (struct stmvl53l1_data *)container_of(pdev, - struct stmvl53l1_data, stdev); - - return cci_write(dev, index, &data, 1); - -} - - -VL53L1_Error VL53L1_RdByte( - VL53L1_DEV pdev, - uint16_t index, - uint8_t *pdata) -{ - struct stmvl53l1_data *dev; - - dev = (struct stmvl53l1_data *) container_of(pdev, - struct stmvl53l1_data, stdev); - - return cci_read(dev, index, pdata, 1) ? - VL53L1_ERROR_CONTROL_INTERFACE : VL53L1_ERROR_NONE; -} - -VL53L1_Error VL53L1_WrWord(VL53L1_DEV pdev, uint16_t index, uint16_t data) -{ - VL53L1_Error status; - uint8_t buffer[2]; - - /* Split 16-bit word into MS and L* stmvl53l1 FlightSense sensor */ - - buffer[0] = (uint8_t) (data >> 8); - buffer[1] = (uint8_t) (data & 0x00FF); - i2c_debug(" @%x d= %x => [ %x , %x ] ", index, data, buffer[0], - buffer[1]); - status = VL53L1_WriteMulti(pdev, index, buffer, 2); - - return status; -} - - -VL53L1_Error VL53L1_RdWord(VL53L1_DEV pdev, uint16_t index, uint16_t *pdata) -{ - VL53L1_Error status; - uint8_t buffer[2]; - - status = VL53L1_ReadMulti(pdev, index, buffer, 2); - - *pdata = ((uint16_t) buffer[0] << 8) + (uint16_t) buffer[1]; - - return status; -} - - -VL53L1_Error VL53L1_WrDWord(VL53L1_DEV pdev, uint16_t index, uint32_t data) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t buffer[4]; - - /* Split 32-bit word into MS ... LS bytes */ - buffer[0] = (uint8_t) (data >> 24); - buffer[1] = (uint8_t) ((data & 0x00FF0000) >> 16); - buffer[2] = (uint8_t) ((data & 0x0000FF00) >> 8); - buffer[3] = (uint8_t) (data & 0x000000FF); - - status = VL53L1_WriteMulti(pdev, index, buffer, 4); - - return status; -} - -VL53L1_Error VL53L1_RdDWord(VL53L1_DEV pdev, uint16_t index, uint32_t *pdata) -{ - VL53L1_Error status = VL53L1_ERROR_NONE; - uint8_t buffer[4]; - - status = VL53L1_ReadMulti(pdev, index, buffer, 4); - - *pdata = ((uint32_t) buffer[0] << 24) + ((uint32_t) buffer[1] << 16) - + ((uint32_t) buffer[2] << 8) + (uint32_t) buffer[3]; - - return status; -} - -VL53L1_Error VL53L1_WriteMulti(VL53L1_DEV pdev, uint16_t index, - uint8_t *pdata, uint32_t count) -{ - struct stmvl53l1_data *dev; - - dev = (struct stmvl53l1_data *) container_of(pdev, - struct stmvl53l1_data, stdev); - - return cci_write(dev, index, pdata, count) ? - VL53L1_ERROR_CONTROL_INTERFACE : VL53L1_ERROR_NONE; -} - -VL53L1_Error VL53L1_ReadMulti(VL53L1_DEV pdev, uint16_t index, - uint8_t *pdata, uint32_t count) -{ - struct stmvl53l1_data *dev; - - dev = (struct stmvl53l1_data *) container_of(pdev, - struct stmvl53l1_data, stdev); - - return cci_read(dev, index, pdata, count) ? - VL53L1_ERROR_CONTROL_INTERFACE : VL53L1_ERROR_NONE; -} - -static int is_time_over(struct timeval *tv, uint32_t msec) -{ - return tv_elapsed_ms(tv) >= msec; -} - -VL53L1_Error VL53L1_WaitValueMaskEx( - VL53L1_DEV pdev, - uint32_t timeout_ms, - uint16_t index, - uint8_t value, - uint8_t mask, - uint32_t poll_delay_ms) -{ - struct timeval start_tv; - struct stmvl53l1_data *dev; - int rc, time_over; - uint8_t rd_val; - - dev = (struct stmvl53l1_data *) container_of(pdev, - struct stmvl53l1_data, stdev); - - do_gettimeofday(&start_tv); - do { - rc = cci_read(dev, index, &rd_val, 1); - if (rc) - return VL53L1_ERROR_CONTROL_INTERFACE; - if ((rd_val & mask) == value) { - poll_timing_log(&start_tv); - return VL53L1_ERROR_NONE; - } - vl53l1_dbgmsg("poll @%x %x & %d != %x", index, - rd_val, mask, value); - time_over = is_time_over(&start_tv, timeout_ms); - if (!time_over) - msleep(poll_delay_ms); - } while (!time_over); - vl53l1_errmsg("time over %d ms", timeout_ms); - return VL53L1_ERROR_TIME_OUT; -} - -VL53L1_Error VL53L1_WaitUs(VL53L1_DEV pdev, int32_t wait_us) -{ - struct stmvl53l1_data *data; - - data = (struct stmvl53l1_data *) container_of(pdev, - struct stmvl53l1_data, stdev); - - if (!data->is_delay_allowed) - return VL53L1_ERROR_PLATFORM_SPECIFIC_START; - - /* follow Documentation/timers/timers-howto.txt recommendations */ - if (wait_us < 10) - udelay(wait_us); - else if (wait_us < 20000) - usleep_range(wait_us, wait_us + 1); - else - msleep(wait_us / 1000); - - return VL53L1_ERROR_NONE; -} - -VL53L1_Error VL53L1_WaitMs(VL53L1_DEV pdev, int32_t wait_ms) -{ - return VL53L1_WaitUs(pdev, wait_ms * 1000); -} diff --git a/drivers/input/misc/vl53L1/stmvl53l1_if.h b/drivers/input/misc/vl53L1/stmvl53l1_if.h deleted file mode 100644 index ecc29290ce3f..000000000000 --- a/drivers/input/misc/vl53L1/stmvl53l1_if.h +++ /dev/null @@ -1,564 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -*License terms : BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -/** - * @file stmvl53l1_if.h vl53l1 kernel driver user interface - * - * @note to use this header in a user space application it requires - * all st bare/ll driver platform wrapper files (for data struct def) - * this files (types etc ..) shall be same or compliant with bar driver version - * used in the kernel module - */ - -#ifndef STMVL53L1_IF_H -#define STMVL53L1_IF_H - - -#include "vl53l1_def.h" -/** - * @addtogroup vl53l1_ioctl - * @{ - */ - -/** - * misc device name for ioctl device - * - * for mutli instance all device 2nd and next instance are basic name +"1"+"2" - * @li stmvl53l1_ranging - * @li stmvl53l1_ranging1 - * @li stmvl53l1_ranging2 - */ -#define VL53L1_MISC_DEV_NAME "laser" -/** - * register data use for simple/single ranging data @ref VL53L1_IOCTL_GETDATAS - * - * @warning this definition is subject to change ! - */ -#define stmvl531_range_data_t VL53L1_RangingMeasurementData_t - -/** - * parameter name in @ref stmvl53l1_parameter when using - * @ref VL53L1_IOCTL_PARAMETER - */ -enum __stmv53l1_parameter_name_e { - VL53L1_XTALKENABLE_PAR = 2, - /*!< VL53L1_XTALKENABLE_PAR enable/disable crosstalk compensation\n - * valid value : - * @li 0 disable crosstalk compensation - * @li 1 enable crosstalk compensation - * - * @warning mode can only be set while not ranging - */ - - VL53L1_DEVICEMODE_PAR = 6, - /*!< DEVICEMODE_PAR set ranging mode  \n - * valid mode value : - * @li 1 @a VL53L1_PRESETMODE_RANGING default ranging - * @li 2 @a VL53L1_PRESETMODE_MULTIZONES_SCANNING multiple zone - * @li 3 @a VL53L1_PRESETMODE_AUTONOMOUS autonomous mode - * @li 4 @a VL53L1_PRESETMODE_LITE_RANGING low mips ranging mode - * - * @warning mode can only be set while not ranging - */ - - VL53L1_POLLDELAY_PAR = 10, - /*!< set the polling delay (msec)\n - * - * @note apply only when operates in polling mode as no effect - * otherwise - */ - VL53L1_TIMINGBUDGET_PAR = 11, - /*!< VL53L1_TIMINGBUDGET_PAR - * @ref stmvl53l1_parameter.value field is timing budget in micro second - * - * @note the value cannot be set while ranging will set ebusy errno, - * value set is absorbed at next range start @ref VL53L1_IOCTL_START - */ - - VL53L1_DISTANCEMODE_PAR = 12, - /*!< VL53L1_DISTANCEMODE_PAR - * valid distance mode value : - * @li 1 @a VL53L1_DISTANCEMODE_SHORT - * @li 2 @a VL53L1_DISTANCEMODE_MEDIUM - * @li 3 @a VL53L1_DISTANCEMODE_LONG - * @li 4 @a VL53L1_DISTANCEMODE_AUTO_LITE - * @li 5 @a VL53L1_DISTANCEMODE_AUTO - * - * @warning distance mode can only be set while not ranging - */ - - VL53L1_OUTPUTMODE_PAR = 13, - /*!< VL53L1_OUTPUTMODE_PAR - * valid output mode value : - * @li 1 @a VL53L1_OUTPUTMODE_NEAREST - * @li 2 @a VL53L1_OUTPUTMODE_STRONGEST - * - * @warning distance mode can only be set while not ranging - */ - - VL53L1_FORCEDEVICEONEN_PAR = 14, - /*!< VL53L1_FORCEDEVICEONEN_PAR - * This parameter will control if device is put under reset when - * stopped. - * valid force device on value : - * @li 0 feature is disable. Device is put under reset when stopped. - * @li 1 feature is enable. Device is not put under reset when stopped. - */ - - VL53L1_LASTERROR_PAR = 15, - /*!< VL53L1_LASTERROR_PAR - * This is a read only parameter. It will return last device internal - * error. It's valid only after an ioctl/sysfs return an -EIO error. - */ - - VL53L1_CAMERAMODE_PAR = 16, - /*!< VL53L1_CAMERAMODE_PAR - * valid camera mode value : - * @li 0 device is out of camera mode. - * @li 1 device is in camera mode. - */ - - VL53L1_HWREV_PAR = 17, - /*!< VL53L1_HWREV_PAR - * This is a read only parameter. It will return HW revision number - */ -}; -#define stmv53l1_parameter_name_e enum __stmv53l1_parameter_name_e - -/** - * parameter structure use in @ref VL53L1_IOCTL_PARAMETER - */ -struct stmvl53l1_parameter { - uint32_t is_read; /*!< [in] 1: Get 0: Set*/ - stmv53l1_parameter_name_e name; /*!< [in] parameter to set/get - * see @ref stmv53l1_parameter_name_e - */ - - int32_t value; /*!< [in/out] value to set /get */ - int32_t value2; /*!< [in/out] optional 2nd value */ - int32_t status; /*!< [out] status of the operation */ -}; - - -/** - * roi structure use as @ref VL53L1_IOCTL_ROI arg - * - * see @ref stmvl53l1_roi_full_t for easy to use type variable declaration - * required - */ -struct stmvl53l1_roi_t { - int32_t is_read; - /*!< specify roi transfer direction \n - * @li 0 to get roi - * @li !0 to set roi - */ - /*! roi data and count type use in @ VL53L1_IOCTL_ROI */ - struct roi_cfg_t { - uint8_t NumberOfRoi; - /*!< [in/out] Number of Rois to set/get - * - * on set :\n - * [in] number of roi to set - * @note 0 set can be used to return to device default roi usage - * - * on get :\n - * [in] max number provided\n - * [out] number of ROI copied back to user\n - * @warning 0 will not return any roi datas! - */ - VL53L1_UserRoi_t UserRois[1]; - /*!< roi data array length definition is 1 but - * NumberOfRoi+ FirstRoiToScan in array are required - * and will be effectively copy to/from user space - * - * @sa stmvl53l1_roi_full_t - */ - } roi_cfg /*! [in/out] roi data and count */; -}; - -/** - * full roi struct use in @ref VL53L1_IOCTL_ROI arg - * - * this definition make easier variable declaration with the max roi storage - * capabilities. - * - * @sa stmvl53l1_roi_t for field details - */ -struct stmvl53l1_roi_full_t { - int32_t is_read; - /*!< specify roi transfer direction \n - * @li 0 to get roi - * @li !0 to set roi - */ - VL53L1_RoiConfig_t roi_cfg; - /*!< roi data array of max length but only requested copy to/from user - * space effectively used - * see @a stmvl53l1_roi_t::roi_cfg for details - */ -}; - -/** - * parameter structure use in @ref VL53L1_IOCTL_CALIBRATION_DATA - */ -struct stmvl53l1_ioctl_calibration_data_t { - int32_t is_read; /*!< [in] 1: Get 0: Set*/ - VL53L1_CalibrationData_t data; - /*!< [in/out] data to set /get. Caller - * should consider this structure as an opaque one - */ -}; - -/** Select reference spad calibration in @ref VL53L1_IOCTL_PERFORM_CALIBRATION. - * - * param1, param2 and param3 not use - */ -#define VL53L1_CALIBRATION_REF_SPAD 0 - -/** Select crosstalk calibration in @ref VL53L1_IOCTL_PERFORM_CALIBRATION. - * - * param1 is calibration method. param2 and param3 not use. - */ -#define VL53L1_CALIBRATION_CROSSTALK 1 - -/** Select offset calibration @ref VL53L1_IOCTL_PERFORM_CALIBRATION. - * param1 is target distance in mm. param2 and - * param3 not use. - */ -#define VL53L1_CALIBRATION_OFFSET 2 - -/** - * parameter structure use in @ref VL53L1_IOCTL_PERFORM_CALIBRATION - */ -struct stmvl53l1_ioctl_perform_calibration_t { - uint32_t calibration_type; - /*!< [in] select which calibration to do : - * @li @ref VL53L1_CALIBRATION_REF_SPAD - * @li @ref VL53L1_CALIBRATION_CROSSTALK - * @li @ref VL53L1_CALIBRATION_OFFSET - */ - uint32_t param1; - /*!< [in] first param. Usage depends on calibration_type */ - uint32_t param2; - /*!< [in] second param. Usage depends on calibration_type */ - uint32_t param3; - /*!< [in] third param. Usage depends on calibration_type */ -}; - -/** - * parameter structure use in @ref VL53L1_IOCTL_AUTONOMOUS_CONFIG - */ -struct stmvl53l1_autonomous_config_t { - int32_t is_read; - /*!< [in] 1: Get 0: Set*/ - uint32_t pollingTimeInMs; - /*!< [in/out] interval between two measure in ms */ - VL53L1_DetectionConfig_t config; - /*!< [int/out] autonomous mode configuration structure */ -}; - -/* - * IOCTL definitions - */ - - -/** - * Start ranging (no argument) - * - * @note sysfs and ioctl control are assumed mutual exclusive use - * control from ioctl execute with no consideration of sysfs path. - * - * @return : - * @li 0 on success - * @li -EBUSY if already started - * @li other any possible over "st bare driver error code" - * (shall be positive) - * - * example user land : - @code - int smtvl53l1_start(int fd){error - int rc; - rc = ioctl(fd, VL53L1_IOCTL_START, NULL); - if( rc ){ - if( errno == EBUSY){ - //the device is already started - ioctl_warn("already started"); - return EBUSY; - } - } - if( rc ){ - ioctl_error("%d %s", rc,strerror(errno)); - } - return rc; -} - @endcode -*/ - -#define VL53L1_IOCTL_START _IO('p', 0x01) - -/* Alias for VL53L1_IOCTL_START. Still present for legacy support but usage is - * deprecated. Consider using VL53L1_IOCTL_START instead. May be removed without - * further notice. - */ -#define VL53L1_IOCTL_INIT VL53L1_IOCTL_START - -/** - * stop ranging (no argument) - - * @note sysfs and ioctl control are assumed mutual exclusive use - * control from ioctl execute action with no consideration of sysfs path. - * - * @return - * @li 0 on success - * @li -EBUSY if it was already - * @li other specific error code shall be >0 - * - * c example userland : - @code -int smtvl53l1_stop(int fd){ - int rc; - rc= ioctl(fd, VL53L1_IOCTL_STOP,NULL); - if( rc ){ - if( errno == EBUSY ){ - ioctl_warn("already stopped"); - return errno; - } - ioctl_error("%d %s", rc,strerror(errno)); - } - return rc; -} -@endcode - */ -#define VL53L1_IOCTL_STOP _IO('p', 0x05) - -/** - * get single ranging data @sa for multi zone/objet - * - * retrieve the last range data available form the device - * - * @param in/out data struct ptr of type @ref stmvl531_range_data_t - * it may come in but is out as of now - * - * @return 0 on success else o, error check errno - * @li -EFAULT fault in cpy to f/m user out range data not copied - * - * @warning this ioctl will not wait for a new range sample acquisition - * it will return what available at time it get called . Hence same data maybe - * returned many time when doing fast polling.\n - * End user must inspect the data structure (time stamp etc )to find about it\n - * Despite it's non "waiting" nature this ioctl may still block/sleep shortly - * to ensure race free usage acquiring mutex and/or locks. - */ -#define VL53L1_IOCTL_GETDATAS \ - _IOWR('p', 0x0b, stmvl531_range_data_t) - -/** - * set or get parameter - * - * @param parameter in/out @ref stmvl53l1_parameter - * @sa stmv53l1_parameter_name_e - * - * for get if ioctl fail do not check for out params it is not valid - * for set theirs not copy back only see ioctl status, errno to get error case - * - * @note a set parameter may not be absorbed straight aways ! - */ -#define VL53L1_IOCTL_PARAMETER \ - _IOWR('p', 0x0d, struct stmvl53l1_parameter) - - -/** - * set/get roi - * - * shall only be use while device is stopped (EBUSY error otherwise) - * setting 0 rois stand for "disable user define roi usage, use device default" - * - * @param roi_cfg [in/out] type @ref stmvl53l1_roi_t and - * @ref stmvl53l1_roi_full_t - * @note when getting roi the returned roi cnt is set to available number - * of roi in driver but at most requested number or available one - * will be set in returned structure - * @warning the coordinate system is not usual image x,y (y down)but traditional - * ecludian x,y (y up) - * - * @warning once defined the user roi is kept alive until unset by user . - * User shall update roi when required (mode change etc ..)\n - * To return to default unset roi by setting none, device will return to default - * at next start - * - * @note roi validity is only checked at start ranging , as such invalid roi set - * can make start to fail - * - * @return 0 on success , see errno for error detail - * @li EBUSY when trying to set roi while ranging - * @li ENODEV never device get started and trying to get more rois than set - * @li other errno code could be ll driver specific - */ -#define VL53L1_IOCTL_ROI\ - _IOWR('p', 0x0e, struct stmvl53l1_roi_t) - -/** - * Get multi object/zone ranging data - * - * this call is non blocking and will return what available internally - * in all case (veen error) - * - * @param [out] multi zone range @ref VL53L1_MultiRangingData_t always update - * but -EFAULT error case - * - * @return 0 on success else o, error check errno - * @li -EFAULT fault in cpy to f/m user out range data not copyed - * @li -ENOEXEC active mode is not mutli-zone - * @li -ENODEV device is not ranging - * as in that case MZ data may not be fully valid - */ -#define VL53L1_IOCTL_MZ_DATA\ - _IOR('p', 0x0f, VL53L1_MultiRangingData_t) - -/** - * get single ranging data @sa for multi zone/objet - * - * this call is equivalent to VL53L1_IOCTL_GETDATAS but will block until - * new data are available since previous call. - * - * @param in/out data struct ptr of type @ref stmvl531_range_data_t - * it may come in but is out as of now - * - * @return 0 on success else o, error check errno - * @li -EFAULT fault in cpy to f/m user out range data not copied - * @li -ENODEV device is not ranging. - * @li -ERESTARTSYS interrupt while sleeping. - */ -#define VL53L1_IOCTL_GETDATAS_BLOCKING\ - _IOWR('p', 0x10, stmvl531_range_data_t) - -/** - * Get multi object/zone ranging data - * - * this call is equivalent to VL53L1_IOCTL_MZ_DATA but will block until - * new data are available since previous call. - * - * @param [out] multi zone range @ref VL53L1_MultiRangingData_t always update - * but -EFAULT error case - * - * @return 0 on success else o, error check errno - * @li -EFAULT fault in cpy to f/m user out range data not copyed - * @li -ENOEXEC active mode is not mutli-zone - * @li -ENODEV device is not ranging. - * @li -ERESTARTSYS interrupt while sleeping. - * as in that case MZ data may not be fully valid - */ -#define VL53L1_IOCTL_MZ_DATA_BLOCKING\ - _IOR('p', 0x11, VL53L1_MultiRangingData_t) - -/** - * Get / set calibration data - * - * this call allow client to either read calibration data after calibration - * has been performed to store them in the host filesystem or push calibration - * data before ranging at each start-up. - * - * @param [in/out] data struct ptr of type - * @ref stmvl53l1_ioctl_calibration_data_t. Caller should consider it as an - * opaque structure. - * - * @return 0 on success else o, error check errno - * @li -EFAULT fault in cpy to f/m user out range data not copied - * @li -EBUSY when trying to set calibration data while ranging - */ -#define VL53L1_IOCTL_CALIBRATION_DATA\ - _IOWR('p', 0x12, struct stmvl53l1_ioctl_calibration_data_t) - -/** - * perform calibration squence according to calibration_type - * - * this call is attended to be used during factory calibration. You select - * calibration to issue using calibration_type. - * - * @param [in] data struct ptr of type - * @ref stmvl53l1_ioctl_perform_calibration_t. - * - * @return 0 on success else o, error check errno - * @li -EFAULT fault in cpy to f/m user out range data not copied - * @li -EBUSY when trying to perform calibration data while ranging - */ -#define VL53L1_IOCTL_PERFORM_CALIBRATION\ - _IOW('p', 0x13, struct stmvl53l1_ioctl_perform_calibration_t) - -/** - * set/get configure autonomous mode parameters - * - * Allow to get or set autonomous configuration. Change it only when device - * is stopped otherwise you will receive an EBUSY error. - * - * @param stmvl53l1_autonomous_config_t [in/out] - * - * @note autonomous config validity is only checked at start ranging , as such - * invalid autonomous config set can make start to fail. - * - * @return 0 on success , see errno for error detail - * @li -EFAULT failed to copy from/to configuration. - * @li -EBUSY when trying to change configuration while ranging. - */ -#define VL53L1_IOCTL_AUTONOMOUS_CONFIG\ - _IOWR('p', 0x14, struct stmvl53l1_autonomous_config_t) - -/** - * suspend ranging (no argument) - - * @note sysfs and ioctl control are assumed mutual exclusive use - * control from ioctl execute action with no consideration of sysfs path. - * - * @return - * @li 0 on success - * @li -EBUSY if it was already - * @li other specific error code shall be >0 - * - * c example userland : - @code -int smtvl53l1_stop(int fd){ - int rc; - rc= ioctl(fd, VL53L1_IOCTL_SUSPEND,NULL); - if( rc ){ - if( errno == EBUSY ){ - ioctl_warn("already suspended"); - return errno; - } - ioctl_error("%d %s", rc,strerror(errno)); - } - return rc; -} -@endcode - */ -#define VL53L1_IOCTL_SUSPEND _IO('p', 0x15) - -/** @} */ /* ioctl group */ -#endif /* STMVL53L1_IF_H */ diff --git a/drivers/input/misc/vl53L1/stmvl53l1_internal_if.h b/drivers/input/misc/vl53L1/stmvl53l1_internal_if.h deleted file mode 100644 index e3ba0cccd24c..000000000000 --- a/drivers/input/misc/vl53L1/stmvl53l1_internal_if.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef STMVL53L1_INTERNAL_IF_H -#define STMVL53L1_INTERNAL_IF_H - -#include "vl53l1_def.h" - -/* interface definition move in this file is not supposed to be use by a normal - * client. It's only here for internal testing purpose. - */ - -/* structure and ioctl that allow raw access to vl53l1 register */ -struct stmvl53l1_register { - uint32_t is_read; /*!< type of the access 1: read 0: write*/ - uint32_t index; /*!< register index */ - uint32_t cnt; /*!< register size shall be 1 to n */ - int32_t status; /*!< operation status 0 ok else error */ - - union reg_data_t { - uint8_t b; /*!< single data byte*/ - uint16_t w; /*!< single data word (16 bits)*/ - uint32_t dw; /*!< single data dword (32 bits)*/ - uint8_t bytes[256]; /*!< any size byte array - * @note only effectively used array size is needed and will be - * set/used another possible register definition is - * @ref stmvl53l1_register_flexi - */ - } data; /*!< data only *@warning device is big endian and - * no endianess adaptation is performed by @ref VL53L1_IOCTL_REGISTER - */ -}; - -struct stmvl53l1_register_flexi { - uint32_t is_read; /*!< [in] type of the access 1: read 0: write*/ - uint32_t index; /*!< [in] register index */ - uint32_t cnt; /*!< [în] register size shall be 1 to n */ - int32_t status; /*!< [out] operation status 0 ok else error */ - uint8_t data[]; /*!< [in/out] flexible array size data */ - /*!< data only *@warning device is big endian and - * no endianess adaptation is performed by @ref VL53L1_IOCTL_REGISTER - */ -}; - -#define VL53L1_IOCTL_REGISTER _IOWR('p', 0x0c, struct stmvl53l1_register) - -#endif diff --git a/drivers/input/misc/vl53L1/stmvl53l1_ipp.h b/drivers/input/misc/vl53L1/stmvl53l1_ipp.h deleted file mode 100644 index cd8bc0b48b78..000000000000 --- a/drivers/input/misc/vl53L1/stmvl53l1_ipp.h +++ /dev/null @@ -1,386 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/** - * @file stmvl53l1_ipp.h - * - * helper to serialize de-serialize data in ipp exchange between user/kernel - * - * @date Sep 2, 2016 - * @author imaging - */ - -#ifndef _STMVL53L1_IPP_H_ -#define _STMVL53L1_IPP_H_ - -#include "vl53l1_types.h" - - -/** @ingroup ipp_dev - * @{ - */ - -/** - * @defgroup ipp_serialize ST IPP serialization helper - * - * to use the dump help you lust define first a few extra "specific" - * - * @li IPP_PRINT(fmt,..) with typical printf/printk interface - */ - /** @{ */ -/** - * generic data type to serialized scalar and offset for pointer - * - * serialized data can be seen as a first array of n ipp_art_t - * where each input are arg value for scaler type - * and an offset with respect to the ipp_arg base array where the data - * - * @note if all ipp argument can fit on 32 bit then ipp_arg_t is best set as - * a 32 bit base type '(i e uint32_t) to save space - * on 64 bit cpu it can remain 64 bit type to get better alignment - */ -typedef uint64_t ipp_arg_t; - -/** - * set to the cpu structure alignment and packing constrain - * - * all serialized argument passed by pointer will be stored with - * this memory align constrain - * - * - * @note if target cpu is ok to access unaligned data or less constrain ie 64 - * bit data align 32 are ok then it can be set to 4 to save space in data - * packing and copy\n - * We may be over constraining in many cases as a struct is only required to - * be aligned on i'st biggest item size - * - * @warning it must be a 2 power of 2 (& operation instead of mudulo used in - * align calculation) - * @warning using 8 byte constrain require that the @a ipp_arg_t is already - * aligned on that constrain - */ -#define IPP_ALIGN_REQ 8 - -/** - * set x to it's nearest aligned offset (not that 0 is fine as a valid offset - * than will not be up aligned to next align chunk ) - */ -#define IPP_ALIGN_OFFSET(x) (((x)+(IPP_ALIGN_REQ-1)) & (~(IPP_ALIGN_REQ-1))) - -/** - * declare variable needed for ipp serialization - */ -#define IPP_SERIALIZE_VAR int ipp_offset -/** - * Put in function start to init the serialization coding - * - * @param ipp_args buffer for data serialization - * @param n_args is the total number of argument scalar and ptr to serialized - * dot not count out only arg that will be returned - * - * it define local var "ipp_offset" used to accumulate all input args that must - * be serialize. It reserve header room in the buffer to place for scalar args - * and offset for args ptr copy - * - * args pass by pointer must be serialized by @ref IPP_SET_ARG_PTR in order they - * are declare\n - * scalar args can be serialized in any order with @ref IPP_SET_ARG - * - * scalar args that can't be cast to basic @ref ipp_arg_t shall be serialized - * Manually or using a macro similar to ptr that can be pass by copy - * - *@note @ref IPP_SERIALIZE_VAR must be use first - * @code - * int ipp_to _ser(int arg0, struct st_t *pdata1){ - * char *local var; - * ipp_arg_t args[256]; - * IPP_SERIALIZE_START(2); - * IPP_SET_ARG(args, 0, arg0); - * IPP_SET_ARG_PTR(args, 1, pdata); - * do_one_ipp(args); - * } - * @endcode - * - */ -#define IPP_SERIALIZE_START(ipp_args, n_args)\ - (ipp_offset = IPP_ALIGN_OFFSET((char *)(&ipp_args[n_args]) - \ - (char *)ipp_args)) - -/** - * @brief Serialize scalar argument - * - * serialized arg number n into ipp_args\n - * can be used in any order - * - * @param ipp_args the args buffer - * @param n 0 base arg number - * @param v the scalar argument variable - * @warning usable only for scalar type that can be copy on a ipp_arg_t - */ -#define IPP_SET_ARG(ipp_args, n, v) memcpy(&ipp_args[n], &v, sizeof(v)) - -/** - * @brief Serialize an arg passed by pointer - * - * @param ipp_args the arg ptr array - * @param n the arg number to serialize - * @param pdata argument it must be a type like struct x_t * int [n] etc ... - * that size is given by size of and and be copied by a single memcpy - */ -#define IPP_SET_ARG_PTR(ipp_args, n, pdata)\ - do {\ - ipp_args[n] = ipp_offset;\ - memcpy(((char *)ipp_args) + ipp_offset, pdata, sizeof(*pdata));\ - ipp_offset = IPP_ALIGN_OFFSET(ipp_offset + sizeof(*pdata));\ - } while (0) - -/** - * serialize out get ptr for pdata - * - * @note it does not cpy data just set ptr and update the offset - * @warning to be use in order - * - * @param ipp_args the arg ptr array - * @param n the arg number to serialize (unused) - * @param pdata init to ptr in ipp_args type is used for offset computation - * @warning to use sequential in order agr are serialized - */ -#define IPP_OUT_ARG_PTR(ipp_args, n, pdata)\ - do {\ - pdata = (void *)(((char *)ipp_args) + ipp_offset);\ - ipp_offset = IPP_ALIGN_OFFSET(ipp_offset + \ - (int)sizeof(*pdata));\ - } while (0) - - -/** - * @brief ipp get payload - * - * @return paylaod at time used \n - * when all done it's overall out payload - * - * require @ref IPP_SERIALIZE_VAR and @ref IPP_SERIALIZE_START used first\n - * best use after all @ref IPP_OUT_ARG_PTR or @ref IPP_SET_ARG_PTR done to get - * full payload - **/ -#define IPP_SERIALIZE_PAYLAOD() (ipp_offset + IPP_WORK_HDR_SIZE) - -/** - * de-serialize and argument that was passed by value - * @param ipp_args the args array - * @param n the 0 base argument number - * @param v argument it must be exact type - * - * - * @code - * f_deserialize(ipp_arg_t args[]) - * { - * // f_ser is like (uint16_t arg0, struct s_arg_t * arg1, int arg2) - * uint16_t arg0; - * void * parg1; - * int arg2; - * - * IPP_GET_ARG( args, 0, arg0) - * IPP_GET_ARG( args, 2, arg2) - * } - * @endcode - */ -#define IPP_GET_ARG(ipp_args, n, v) memcpy(&v, &ipp_args[n], sizeof(v)) - - -/** - * de-serialize an argument passed by pointer - * - * @param ipp_args the serialized argument array - * @param n 0 base argument number - * @param p ptr to arg to be set - * - * @note unlike serializing de-serializing pointer args data can be done in any - * order - * - * @code - * struct some_struct_t *parg2; - * IPP_GET_ARG_PTR(args,2,parg2); - * @endcode - */ -#define IPP_GET_ARG_PTR(ipp_args, n, p) (p = (void *)((char *)ipp_args + \ - ipp_args[n])) - - - - -/** - * debug macro to pint out all serialized args - * - * Implementation shall define IPP_PRINT_FUNC function to use - */ -#define IPP_PRINT_ARGS(ipp_args, n) \ - do {\ - int i;\ - for (i = 0; i < n; i++)\ - IPP_PRINT("arg#%d/%d is %8d 0x%08x\n", i, n,\ - ipp_args[i], ipp_args[i]);\ - IPP_PRINT("used data size %d\n", ipp_offset);\ - } while (0) - - -/** - * processing code type of proccesing - * - * used in @a ipp_work_t::process_no - */ -enum stmvl53l1_ipp_proccesing_e { - stmvl53l1_ipp_ping = 0, - /*!< stmvl53l1_ipp_ping - * @li can be sent by driver to check client is alive - * @li daemon sent it to identify and register himself to the driver - */ - stmvl53l1_ipp_cal_hist = 1, - /*!< stmvl53l1_ipp_cal_hist process cal hist*/ - - stmvl53l1_ipp_xtalk_calibration = 2, - /*!< stmvl53l1_ipp_xtalk_calibration process crosstalk calibration data - */ - - stmvl53l1_ipp_hist_ambient_dmax = 3, - /*!< stmvl53l1_ipp_hist_ambient_dmax process ambient dmac calculation - * from histogram - */ - - stmvl53l1_ipp_generate_dual_reflectance_xtalk_samples = 4, - /*!< stmvl53l1_ipp_generate_dual_reflectance_xtalk_samples process - * Xtalk data from dual reflectance histogram data - */ - - /** keep last*/ - stmvl53l1_ipp_max /*!< stmvl53l1_ipp_max */ -}; - -/** - * status use on @a ipp_work_t::status - */ -enum stmvl53l1_ipp_status_e { - stmvl53l1_ipp_status_ok = 0, /*!< ok work done */ - stmvl53l1_ipp_status_inv_id, /*!< dev id not supported or invalid */ - stmvl53l1_ipp_status_inv_proc, - /*!< process_no asked not supported or not implemented */ - stmvl53l1_ipp_status_inv_payload, - /*!< data payload for asked processing incorrect*/ - - stmvl53l1_ipp_status_proc_code = 0x100, - /*!< the lowest 8 bit is the error code form the processing */ -}; - -/** - * Ipp work (job) struct - * - * containing header with sequenc control information plus serialized data - */ -struct ipp_work_t { - int8_t dev_id; /*!< [in]/[out] device id */ - /*!< Identify the work do be run see @a stmvl53l1_ipp_proccesing_e */ - uint8_t process_no; - /*!< [out] status from daemon */ - int16_t status; - /*!< [in/out] unique xfer id */ - uint32_t xfer_id; - /*!< [in/out] effective data length including header*/ - uint32_t payload; - -/** max IPP data payload (not including header) - * - * we substract size of of item above - * must be lesss than one netlink packet -*/ -#define MAX_IPP_DATA ((4096-4*3)/8) - ipp_arg_t data[MAX_IPP_DATA]; /*!< [in][out] */ -}; - -/** - * size of header only message ( no payload) - * require \#include in user land -*/ -#define IPP_WORK_HDR_SIZE (offsetof(struct ipp_work_t, data[0])) -/** - * max payload per ipp transfer - */ -#define IPP_WORK_MAX_PAYLOAD sizeof(struct ipp_work_t) - -/** copy ipp header from src to dest - * - * used to prepare return work using incoming work header - * @param dest dest work ptr - * @param src src work ptr - */ -#define IPP_CPY_HEADER(dest, src) memcpy(dest, src, IPP_WORK_HDR_SIZE) - -/** - * dump in human readble way ipp struct - * - * @note require IPP_PRINT macro - * - * @param pw ipp_work struct to dump - * @param max_data max amount of data to be dump - * @param max_dev max number of dev (for check) - */ -static inline void ipp_dump_work(struct ipp_work_t *pw, uint32_t max_data, - int max_dev) -{ - uint32_t data_cnt; - uint32_t i; - uint8_t *pbdata; - - (void)max_dev; /* avoid warning when not used */ - (void)pbdata; /*avoid warning in case no print no use*/ - - IPP_PRINT("dev #%d (%s)\n", pw->dev_id, pw->dev_id < max_dev ? - "ok" : "bad"); - IPP_PRINT("process #%d (%s)\n", pw->process_no, - pw->process_no < stmvl53l1_ipp_max ? "ok" : "bad"); - IPP_PRINT("status %d\n", pw->status); - IPP_PRINT("Xfer id 0x%08X payload %d bytes (%s)\n", pw->xfer_id, - pw->payload, - pw->payload > IPP_WORK_MAX_PAYLOAD ? "invalid" : "ok"); - data_cnt = pw->payload > IPP_WORK_MAX_PAYLOAD ? - IPP_WORK_MAX_PAYLOAD : pw->payload; - data_cnt = data_cnt > max_data ? max_data : data_cnt; - for (i = 0, pbdata = (uint8_t *)pw->data; i < data_cnt; i++) { - if (i%16 == 0) - IPP_PRINT("\n%4X\t", i); - IPP_PRINT("%02X ", pbdata[i]); - } - IPP_PRINT("\n"); -} - -/** @} */ /* ingroup helper */ - -/** @} */ /* ingroup ipp_dev */ -#endif /* _STMVL53L1_IPP_H_ */ diff --git a/drivers/input/misc/vl53L1/stmvl53l1_ipp_nl.c b/drivers/input/misc/vl53L1/stmvl53l1_ipp_nl.c deleted file mode 100644 index 74e05fa058eb..000000000000 --- a/drivers/input/misc/vl53L1/stmvl53l1_ipp_nl.c +++ /dev/null @@ -1,378 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -*License terms : BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/** - * @file stmvl53l1_ipp_nl.c vl53l1 ipp proxy over netlink kernel side - */ -#include -#include -#include -#include -#include - -#include "stmvl53l1.h" - -#include "vl53l1_platform_ipp.h" -#include "stmvl53l1_ipp.h" - -#define IPP_DEBUG 1 -#ifndef IPP_DEBUG -# define _ipp_dump_work(...) (void)0 -#else -# define _ipp_dump_work(...) ipp_dump_work(__VA_ARGS__) -#endif - -#define IPP_STATE_PENDING 1 -#define IPP_STATE_COMPLETED 2 -#define IPP_STATE_CANCELED 4 - -#define IPP_TIMEOUT_MS 100 - -/** the single netlink strut use by all instance - * @note is NULL until set - */ -static struct sock *nl_sk; - -static DEFINE_MUTEX(ipp_mutex); - -/** - * current registered daemon pid - * @note default value 0 or later 1 is kind of invalid and will require - * user space to connect before we can send any packet - */ -static int daemon_pid; - -/** - * next xfer_id (shared other all dev) - * no direct us used @@ref get_next_xfer_id (will get lock) - * @note default to 0 what is "reserved" - */ -static int next_xfer_id; - - -#define ipp_err(fmt, ...) pr_err("STMVL53L1 IPP Err in %s %d :" fmt "\n", \ - __func__, __LINE__, ##__VA_ARGS__) - -#define ipp_warn(fmt, ...) pr_warn("STMVL53L1 IPP wng in %s %d : "fmt"\n",\ - __func__, __LINE__, ##__VA_ARGS__) - -#if 0 -# define ipp_dbg(fmt, ...) pr_info("IPP %s %d " fmt "\n",\ - __func__, __LINE__, ##__VA_ARGS__) -#else -# define ipp_dbg(...) (void)0 -#endif - -/** - * get and managed increment of next xfer_id - * @note will get ipp_mutex - * @return the xfer_id to be used - */ -static int get_next_xfer_id(void) -{ - mutex_lock(&ipp_mutex); - next_xfer_id++; - /*0 is reserved skip it*/ - if (next_xfer_id == 0) - next_xfer_id = 1; - mutex_unlock(&ipp_mutex); - - return next_xfer_id; -} - -static int send_client_msg(void *msg_data, int msg_size) -{ - int rc; - struct sk_buff *skb_out; - struct nlmsghdr *nlh; - void *nl_data; - - ipp_dbg("to send %d byte", msg_size); - skb_out = nlmsg_new(msg_size, 0); - if (!skb_out) { - ipp_err("nlmsg_new fail\n"); - return -1; - } - - nlh = nlmsg_put(skb_out, 0, 0, NLMSG_DONE, msg_size, 0); - NETLINK_CB(skb_out).dst_group = 0; /* not in mcast group */ - - nl_data = nlmsg_data(nlh); /*get data ptr from header*/ - memcpy(nl_data, msg_data, msg_size); - - /* FIXME do we real need to lock to send a data other nl_sk ? */ - mutex_lock(&ipp_mutex); - rc = nlmsg_unicast(nl_sk, skb_out, daemon_pid); - if (rc < 0) - ipp_err("fail to send data size %d to pid %d\n", - msg_size, daemon_pid); - /* stat can be done here in else case */ - mutex_unlock(&ipp_mutex); - - return rc; -} - -/* - * ipp lock is held ping already handled - */ -int ipp_in_process(struct ipp_work_t *pwork) -{ - struct stmvl53l1_data *data; - - ipp_dbg("enter"); - _ipp_dump_work(pwork, IPP_WORK_MAX_PAYLOAD, STMVL53L1_CFG_MAX_DEV); - - /* work id check already done */ - data = stmvl53l1_dev_table[pwork->dev_id]; - ipp_dbg("to lock "); - mutex_lock(&data->work_mutex); - if (data->ipp.buzy == IPP_STATE_PENDING) { - /* if it was already handled ignore it */ - if (data->ipp.waited_xfer_id == pwork->xfer_id) { - /* ok that is what we are expecting back */ - memcpy(&data->ipp.work_out, pwork, pwork->payload); - data->ipp.buzy |= IPP_STATE_COMPLETED; - ipp_dbg("to wake ipp waiter as buzy state %d", - data->ipp.buzy); - wake_up(&data->ipp.waitq); - goto done_lock; - } - } - /* either not waiting any more or not the expected id drop it */ - ipp_err("dev #%d ippp buzy %d xfer id %d rcv id %d droping it", - data->id, data->ipp.buzy, data->ipp.waited_xfer_id, - pwork->xfer_id); -done_lock: - mutex_unlock(&data->work_mutex); - - return 0; -} - -int stmvl53l1_ipp_stop(struct stmvl53l1_data *data) -{ - int rc; - - rc = data->ipp.buzy; - ipp_dbg("#%d to stop buzy %d", data->id, data->ipp.buzy); - if (data->ipp.buzy) { - /* set invalid wait id to discard canceled job when back */ - data->ipp.waited_xfer_id = 0; - data->ipp.buzy |= IPP_STATE_CANCELED|IPP_STATE_COMPLETED; - ipp_dbg("#%dto wake up worker", data->id); - /* wake up worker or abort the thread */ - wake_up(&data->ipp.waitq); - } - - return rc; -} - -/* - * ipp and dev lock are held - * release and re-grabbed here - */ -int stmvl53l1_ipp_do(struct stmvl53l1_data *data, - struct ipp_work_t *pin, struct ipp_work_t *pout) -{ - int xfer_id; - int rc; - bool has_timeout; - - ipp_dbg("enter"); - - xfer_id = get_next_xfer_id(); - /* set xfer and device dependent part of the work */ - pin->dev_id = data->id; - pin->xfer_id = xfer_id; - data->ipp.waited_xfer_id = xfer_id; - /* try to do it */ - rc = send_client_msg(pin, pin->payload); - /* shall we retry if fail to send for some time or number of try ? */ - if (rc < 0) { - rc = -1; - ipp_err("fail to send msg %d", rc); - } else if (data->ipp.buzy == 0) { - /* send ok put the ipp on buzy state while locked */ - data->ipp.buzy = IPP_STATE_PENDING; - /* unlock now that state is marked buzy */ - mutex_unlock(&data->work_mutex); - - /* put task to wait for completion */ - ipp_dbg("to wait"); - has_timeout = !wait_event_timeout(data->ipp.waitq, - (data->ipp.buzy != IPP_STATE_PENDING), - msecs_to_jiffies(IPP_TIMEOUT_MS)); - - /* relock the main lock */ - mutex_lock(&data->work_mutex); - - rc = (data->ipp.buzy & IPP_STATE_CANCELED) || has_timeout ? - -1 : 0; - if (rc) { - ipp_dbg("waking up with from canceled/timeout ipp"); - } else { - /* return status from the ipp itself */ - ipp_dbg("ip back with status %d", data->ipp.status); - rc = data->ipp.status; - } - data->ipp.buzy = 0;/* buzy clear but locked so safe */ - } else { - ipp_dbg("buzy still not zero %d", data->ipp.buzy); - rc = -1; - } - - -/* done_lock: */ - return rc; -} - - -static void stmvl53l1_nl_recv_msg(struct sk_buff *skb_in) -{ - int pid_chg = 0; - int pid; - struct nlmsghdr *nlh; - struct ipp_work_t *pwork; - - ipp_dbg("Entering"); - - nlh = (struct nlmsghdr *)skb_in->data; - pid = nlh->nlmsg_pid; /*pid of sending process */ - - pwork = nlmsg_data(nlh); - if (pwork->payload < IPP_WORK_HDR_SIZE || - pwork->payload > IPP_WORK_MAX_PAYLOAD){ - /* invalid header size */ - ipp_err("invalid msg header size %d", pwork->payload); - _ipp_dump_work(pwork, IPP_WORK_MAX_PAYLOAD, - STMVL53L1_CFG_MAX_DEV); - return; - } - - mutex_lock(&ipp_mutex); - - if (pwork->dev_id >= STMVL53L1_CFG_MAX_DEV) { - ipp_err("invalid dev id on msg %d", pwork->dev_id); - _ipp_dump_work(pwork, IPP_WORK_MAX_PAYLOAD, - STMVL53L1_CFG_MAX_DEV); - goto done_locked; - } - - if (pwork->process_no == stmvl53l1_ipp_ping) { - /* in that case the payload must be exact status size only - * if not it is a badly format message or bad message - */ - if (pwork->payload != IPP_WORK_HDR_SIZE) { - ipp_err("invalid ping msg size %d!=%zu ", - pwork->payload, IPP_WORK_HDR_SIZE); - _ipp_dump_work(pwork, IPP_WORK_MAX_PAYLOAD, - STMVL53L1_CFG_MAX_DEV); - goto done_locked; - } - /* if pid was not set or change resent all ongoing ipp */ - if (pid != daemon_pid) - ipp_warn("pid chg %d => %d\n", daemon_pid, pid); - else - ipp_dbg("got ping fm pid %d\n", daemon_pid); - daemon_pid = pid; - pid_chg = 1; - } else { - ipp_in_process(pwork); - } - done_locked: - mutex_unlock(&ipp_mutex); -} - -int stmvl53l1_ipp_setup(struct stmvl53l1_data *data) -{ - int rc; - - mutex_lock(&ipp_mutex); - - data->ipp.buzy = 0; - init_waitqueue_head(&data->ipp.waitq); - ipp_dbg("now %d dev daemon pid is %d", STMVL53L1_CFG_MAX_DEV, - daemon_pid); - rc = 0; - - mutex_unlock(&ipp_mutex); - - return rc; -} - -void stmvl53l1_ipp_cleanup(struct stmvl53l1_data *data) -{ - /* nothink to do */ -} - -#if !defined(OLD_NETLINK_API) -struct netlink_kernel_cfg cfg = { - .input = stmvl53l1_nl_recv_msg -}; -#endif - -static int netlink_protocol_type = STMVL531_CFG_NETLINK_USER; - -module_param(netlink_protocol_type, int, 0444); -MODULE_PARM_DESC(netlink_protocol_type, - "select netlink protocol type for ipp communications"); - -int stmvl53l1_ipp_init(void) -{ - mutex_init(&ipp_mutex); - daemon_pid = 1; /* pid 1 is safe should not be use for user space */ - -#if defined(OLD_NETLINK_API) - nl_sk = netlink_kernel_create(&init_net, - netlink_protocol_type, - 0, - stmvl53l1_nl_recv_msg, - NULL, - THIS_MODULE); -#else - nl_sk = netlink_kernel_create(&init_net, - netlink_protocol_type, - &cfg); -#endif - - return nl_sk ? 0 : -1; -} - - -void __exit stmvl53l1_ipp_exit(void) -{ - if (nl_sk != NULL) { - vl53l1_dbgmsg("releasing netlink socket"); - netlink_kernel_release(nl_sk); - nl_sk = NULL; - } -} - - diff --git a/drivers/input/misc/vl53L1/stmvl53l1_log.c b/drivers/input/misc/vl53L1/stmvl53l1_log.c deleted file mode 100644 index 6a10fe3cf289..000000000000 --- a/drivers/input/misc/vl53L1/stmvl53l1_log.c +++ /dev/null @@ -1,78 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/** - * @file /stmvl53l1_module.c vl53l1_module ST VL53L1 linux kernel module - * - * This is implementation of low level driver trace support - */ -#include -#include - -#include "stmvl53l1.h" - -#ifdef VL53L1_LOG_ENABLE - -static bool trace_function; -static int trace_module; -static int trace_level; - -module_param(trace_function, bool, 0644); -MODULE_PARM_DESC(trace_function, - "allow tracing of low level function entry and exit"); - -module_param(trace_module, int, 0644); -MODULE_PARM_DESC(trace_module, - "control tracing of low level per module"); - -module_param(trace_level, int, 0644); -MODULE_PARM_DESC(trace_level, - "control tracing of low level per level"); - -void log_trace_print(uint32_t module, uint32_t level, uint32_t function, - const char *format, ...) -{ - va_list args; - - if (function && !trace_function) - return; - - if (!(module & trace_module)) - return; - - if (level > trace_level) - return; - - va_start(args, format); - vprintk(format, args); - va_end(args); -} - -#endif diff --git a/drivers/input/misc/vl53L1/stmvl53l1_module-i2c.c b/drivers/input/misc/vl53L1/stmvl53l1_module-i2c.c deleted file mode 100644 index e2f63cbe391e..000000000000 --- a/drivers/input/misc/vl53L1/stmvl53l1_module-i2c.c +++ /dev/null @@ -1,890 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -*License terms : BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/** - * @file stmvl53l1_module-i2c.c - * - * implement STM VL53L1 module interface i2c wrapper + control - * using linux native i2c + gpio + reg api - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* - * power specific includes - */ -#include -#include -#include -#include -#include -#include - -#include "stmvl53l1-i2c.h" -#include "stmvl53l1.h" - -#define STMVL53L1_SLAVE_ADDR (0x52>>1) - -/** @ingroup drv_port - * @{ - */ - -/** - * control specific debug message echo - * - * Set to 0/1 do not remove - * - * most dbg warn err messages goes true main driver macro - * this one permit some specific debug without activating all main dbg - */ -#define MODI2C_DEBUG 0 - -/* - * mutex to handle device i2c address changes. It allow to avoid multiple - * device active with same i2c addresses at the same time. Note that we don't - * support case where boot_reg has the same value as a final i2c address of - * another device. - */ -static DEFINE_MUTEX(dev_addr_change_mutex); - -struct vl53l1_pinctrl_info { - struct pinctrl *pinctrl; - struct pinctrl_state *gpio_state_active; - struct pinctrl_state *gpio_state_suspend; -} g_pinctrl_info; - -/** - * i2c client assigned to our driver - * - * this is use for stm test purpose as we fake client create and regstration - * we stores the i2c client for release in clean-up overwise we wan't reload - * the module multiple time - * - * in a normal dev tree prod system this is not required - */ -static struct i2c_client *stm_test_i2c_client; - -/* - * pi3: - * insmod stmvl53l1.ko force_device=1 adapter_nb=1 xsdn_gpio_nb=19 - * intr_gpio_nb=16 pwren_gpio_nb=12 - * - * panda - * insmod stmvl53l1.ko force_device=1 adapter_nb=4 xsdn_gpio_nb=56 - * intr_gpio_nb=59 pwren_gpio_nb=55 -*/ - -static int force_device; -static int adapter_nb = -1; -static int xsdn_gpio_nb = -1; -static int pwren_gpio_nb = -1; -static int intr_gpio_nb = -1; - -module_param(force_device, int, 0); -MODULE_PARM_DESC(force_device, "force device insertion at module init"); - -module_param(adapter_nb, int, 0); -MODULE_PARM_DESC(adapter_nb, "i2c adapter to use"); - -module_param(xsdn_gpio_nb, int, 0); -MODULE_PARM_DESC(xsdn_gpio_nb, "select gpio numer to use for vl53l1 reset"); - -module_param(pwren_gpio_nb, int, 0); -MODULE_PARM_DESC(pwren_gpio_nb, "select gpio numer to use for vl53l1 power"); - -module_param(intr_gpio_nb, int, 0); -MODULE_PARM_DESC(intr_gpio_nb, "select gpio numer to use for vl53l1 interrupt"); - -/** - * warn message - * - * @warning use only in scope where i2c_data ptr is present - **/ -#define modi2c_warn(fmt, ...)\ - dev_WARN(&i2c_data->client->dev, fmt, ##__VA_ARGS__) - -/** - * err message - * - * @warning use only in scope where i2c_data ptr is present - */ -#define modi2c_err(fmt, ...)\ - dev_err(&i2c_data->client->dev, fmt, ##__VA_ARGS__) - - - -#if MODI2C_DEBUG -# define modi2c_dbg(fmt, ...)\ - pr_devel("%s "fmt"\n", __func__, ##__VA_ARGS__) -#else -# define modi2c_dbg(...) (void)0 -#endif - -static int insert_device(void) -{ - int ret = 0; - struct i2c_adapter *adapter; - struct i2c_board_info info = { - .type = "stmvl53l1", - .addr = STMVL53L1_SLAVE_ADDR, - }; - - adapter = i2c_get_adapter(adapter_nb); - if (!adapter) - ret = -EINVAL; - stm_test_i2c_client = i2c_new_device(adapter, &info); - if (!stm_test_i2c_client) - ret = -EINVAL; - - return ret; -} - -static int get_xsdn(struct device *dev, struct i2c_data *i2c_data) -{ - int rc = 0; - - i2c_data->io_flag.xsdn_owned = 0; - if (i2c_data->xsdn_gpio == -1) { - vl53l1_errmsg("reset gpio is required"); - rc = -ENODEV; - goto no_gpio; - } - - vl53l1_dbgmsg("request xsdn_gpio %d", i2c_data->xsdn_gpio); - rc = gpio_request(i2c_data->xsdn_gpio, "vl53l1_xsdn"); - if (rc) { - vl53l1_errmsg("fail to acquire xsdn %d", rc); - goto request_failed; - } - - rc = gpio_direction_output(i2c_data->xsdn_gpio, 0); - if (rc) { - vl53l1_errmsg("fail to configure xsdn as output %d", rc); - goto direction_failed; - } - i2c_data->io_flag.xsdn_owned = 1; - - return rc; - -direction_failed: - gpio_free(i2c_data->xsdn_gpio); - -request_failed: -no_gpio: - return rc; -} - -static void put_xsdn(struct i2c_data *i2c_data) -{ - if (i2c_data->io_flag.xsdn_owned) { - vl53l1_dbgmsg("release xsdn_gpio %d", i2c_data->xsdn_gpio); - gpio_free(i2c_data->xsdn_gpio); - i2c_data->io_flag.xsdn_owned = 0; - i2c_data->xsdn_gpio = -1; - } - i2c_data->xsdn_gpio = -1; -} - -static int get_pwren(struct device *dev, struct i2c_data *i2c_data) -{ - int rc = 0; - - i2c_data->io_flag.pwr_owned = 0; - if (i2c_data->pwren_gpio == -1) { - vl53l1_wanrmsg("pwren gpio disable"); - goto no_gpio; - } - - vl53l1_dbgmsg("request pwren_gpio %d", i2c_data->pwren_gpio); - rc = gpio_request(i2c_data->pwren_gpio, "vl53l1_pwren"); - if (rc) { - vl53l1_errmsg("fail to acquire pwren %d", rc); - goto request_failed; - } - - rc = gpio_direction_output(i2c_data->pwren_gpio, 0); - if (rc) { - vl53l1_errmsg("fail to configure pwren as output %d", rc); - goto direction_failed; - } - i2c_data->io_flag.pwr_owned = 1; - - return rc; - -direction_failed: - gpio_free(i2c_data->xsdn_gpio); - -request_failed: -no_gpio: - return rc; -} - -static void put_pwren(struct i2c_data *i2c_data) -{ - if (i2c_data->io_flag.pwr_owned) { - vl53l1_dbgmsg("release pwren_gpio %d", i2c_data->pwren_gpio); - gpio_free(i2c_data->pwren_gpio); - i2c_data->io_flag.pwr_owned = 0; - i2c_data->pwren_gpio = -1; - } - i2c_data->pwren_gpio = -1; -} - -static int get_intr(struct device *dev, struct i2c_data *i2c_data) -{ - int rc = 0; - - i2c_data->io_flag.intr_owned = 0; - if (i2c_data->intr_gpio == -1) { - vl53l1_wanrmsg("no interrupt gpio"); - goto no_gpio; - } - - vl53l1_dbgmsg("request intr_gpio %d", i2c_data->intr_gpio); - rc = gpio_request(i2c_data->intr_gpio, "vl53l1_intr"); - if (rc) { - vl53l1_errmsg("fail to acquire intr %d", rc); - goto request_failed; - } - - rc = gpio_direction_input(i2c_data->intr_gpio); - if (rc) { - vl53l1_errmsg("fail to configure intr as input %d", rc); - goto direction_failed; - } - - i2c_data->irq = gpio_to_irq(i2c_data->intr_gpio); - if (i2c_data->irq < 0) { - vl53l1_errmsg("fail to map GPIO: %d to interrupt:%d\n", - i2c_data->intr_gpio, i2c_data->irq); - goto irq_failed; - } - i2c_data->io_flag.intr_owned = 1; - - return rc; - -irq_failed: -direction_failed: - gpio_free(i2c_data->intr_gpio); - -request_failed: -no_gpio: - return rc; -} - -static void put_intr(struct i2c_data *i2c_data) -{ - if (i2c_data->io_flag.intr_owned) { - if (i2c_data->io_flag.intr_started) { - free_irq(i2c_data->irq, i2c_data); - i2c_data->io_flag.intr_started = 0; - } - vl53l1_dbgmsg("release intr_gpio %d", i2c_data->intr_gpio); - gpio_free(i2c_data->intr_gpio); - i2c_data->io_flag.intr_owned = 0; - } - i2c_data->intr_gpio = -1; -} - -static int get_dt_xtalk_data(struct device_node *of_node, - struct stmvl53l1_data *vl53l1_data) -{ - int rc = 0; - uint32_t x_array[3] = {0}; - - if(of_node == NULL || vl53l1_data == NULL) - return -EINVAL; - - rc = of_property_read_u32_array(of_node, "st,xtalkval", - x_array, 3); - if (rc) { - vl53l1_errmsg("failed to read xtalk-offset\n"); - vl53l1_data->xtalk_offset = 0; - vl53l1_data->xtalk_x = 0; - vl53l1_data->xtalk_y = 0; - } else { - vl53l1_data->xtalk_offset = (uint16_t)x_array[0] & 0xFFFF; - vl53l1_data->xtalk_x = (int16_t)(x_array[1] & 0xFFFF); - vl53l1_data->xtalk_y = (int16_t)(x_array[2] & 0xFFFF); - } - - vl53l1_info("xtalk info: %u %d %d\n", - vl53l1_data->xtalk_offset, - vl53l1_data->xtalk_x, - vl53l1_data->xtalk_y); - return rc; -} - -/** - * parse dev tree for all platform specific input - */ -static int stmvl53l1_parse_tree(struct device *dev, struct i2c_data *i2c_data) -{ - int rc = 0; - - /* if force device is in use then gpio nb comes from module param else - * we use devicetree. - */ - i2c_data->vdd = NULL; - i2c_data->pwren_gpio = -1; - i2c_data->xsdn_gpio = -1; - i2c_data->intr_gpio = -1; - i2c_data->boot_reg = STMVL53L1_SLAVE_ADDR; - if (force_device) { - i2c_data->xsdn_gpio = xsdn_gpio_nb; - i2c_data->pwren_gpio = pwren_gpio_nb; - i2c_data->intr_gpio = intr_gpio_nb; - } else if (dev->of_node) { - /* power : either vdd or pwren_gpio. try reulator first */ - i2c_data->vdd = regulator_get_optional(dev, "vdd-vl53l1"); - if (IS_ERR(i2c_data->vdd) || i2c_data->vdd == NULL) { - i2c_data->vdd = NULL; - /* try gpio */ - rc = of_property_read_u32_array(dev->of_node, - "pwren-gpio", &i2c_data->pwren_gpio, 1); - if (rc) { - i2c_data->pwren_gpio = -1; - vl53l1_wanrmsg( - "no regulator, nor power gpio => power ctrl disabled"); - } - } - - g_pinctrl_info.pinctrl = devm_pinctrl_get(dev); - if (!IS_ERR_OR_NULL(g_pinctrl_info.pinctrl)) { - g_pinctrl_info.gpio_state_active = - pinctrl_lookup_state(g_pinctrl_info.pinctrl, - "laser_default"); - - g_pinctrl_info.gpio_state_suspend = - pinctrl_lookup_state(g_pinctrl_info.pinctrl, - "laser_suspend"); - } else - vl53l1_errmsg("Getting pinctrl handle failed\n"); - - rc = of_property_read_u32_array(dev->of_node, "xsdn-gpio", - &i2c_data->xsdn_gpio, 1); - if (rc) { - vl53l1_wanrmsg("Unable to find xsdn-gpio %d %d", - rc, i2c_data->xsdn_gpio); - if (of_gpio_count(dev->of_node) >= 2) - i2c_data->xsdn_gpio = of_get_gpio(dev->of_node, 0); - else - i2c_data->xsdn_gpio = -1; - } - rc = of_property_read_u32_array(dev->of_node, "intr-gpio", - &i2c_data->intr_gpio, 1); - if (rc) { - vl53l1_wanrmsg("Unable to find intr-gpio %d %d", - rc, i2c_data->intr_gpio); - - if (of_gpio_count(dev->of_node) >= 2) - i2c_data->intr_gpio = of_get_gpio(dev->of_node, 1); - else - i2c_data->intr_gpio = -1; - } - rc = of_property_read_u32_array(dev->of_node, "boot-reg", - &i2c_data->boot_reg, 1); - if (rc) { - vl53l1_wanrmsg("Unable to find boot-reg %d %d", - rc, i2c_data->boot_reg); - i2c_data->boot_reg = STMVL53L1_SLAVE_ADDR; - } - - get_dt_xtalk_data(dev->of_node, i2c_data->vl53l1_data); - } - - /* configure gpios */ - rc = get_xsdn(dev, i2c_data); - if (rc) - goto no_xsdn; - rc = get_pwren(dev, i2c_data); - if (rc) - goto no_pwren; - rc = get_intr(dev, i2c_data); - if (rc) - goto no_intr; - - return rc; - -no_intr: - if (i2c_data->vdd) { - regulator_put(i2c_data->vdd); - i2c_data->vdd = NULL; - } - put_pwren(i2c_data); -no_pwren: - put_xsdn(i2c_data); -no_xsdn: - return rc; -} - -static void stmvl53l1_release_gpios(struct i2c_data *i2c_data) -{ - put_xsdn(i2c_data); - if (i2c_data->vdd) { - regulator_put(i2c_data->vdd); - i2c_data->vdd = NULL; - } - put_pwren(i2c_data); - put_intr(i2c_data); -} - -static int stmvl53l1_probe(struct i2c_client *client, - const struct i2c_device_id *id) -{ - int rc = 0; - struct stmvl53l1_data *vl53l1_data = NULL; - struct i2c_data *i2c_data = NULL; - - vl53l1_dbgmsg("Enter %s : 0x%02x\n", client->name, client->addr); - - if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE)) { - rc = -EIO; - return rc; - } - - vl53l1_data = kzalloc(sizeof(struct stmvl53l1_data), GFP_KERNEL); - if (!vl53l1_data) { - rc = -ENOMEM; - return rc; - } - if (vl53l1_data) { - vl53l1_data->client_object = - kzalloc(sizeof(struct i2c_data), GFP_KERNEL); - if (!vl53l1_data) - goto done_freemem; - i2c_data = (struct i2c_data *)vl53l1_data->client_object; - } - i2c_data->client = client; - i2c_data->vl53l1_data = vl53l1_data; - i2c_data->irq = -1 ; /* init to no irq */ - - /* parse and configure hardware */ - rc = stmvl53l1_parse_tree(&i2c_data->client->dev, i2c_data); - if (rc) - goto done_freemem; - - /* setup device name */ - /* vl53l1_data->dev_name = dev_name(&client->dev); */ - - /* setup client data */ - i2c_set_clientdata(client, vl53l1_data); - - /* end up by core driver setup */ - rc = stmvl53l1_setup(vl53l1_data); - if (rc) - goto release_gpios; - - vl53l1_data->sysfs_base = i2c_data->client->addr; - rc = stmvl53l1_sysfs_laser(vl53l1_data, true); - if (rc) - goto release_gpios; - vl53l1_dbgmsg("End\n"); - - kref_init(&i2c_data->ref); - return rc; - -release_gpios: - stmvl53l1_release_gpios(i2c_data); - -done_freemem: - /* kfree safe against NULL */ - kfree(vl53l1_data); - kfree(i2c_data); - - return -1; -} - -static int stmvl53l1_remove(struct i2c_client *client) -{ - struct stmvl53l1_data *data = i2c_get_clientdata(client); - struct i2c_data *i2c_data = (struct i2c_data *)data->client_object; - - vl53l1_dbgmsg("Enter\n"); - mutex_lock(&data->work_mutex); - - stmvl53l1_sysfs_laser(data, false); - - /* main driver cleanup */ - stmvl53l1_cleanup(data); - - /* release gpios */ - stmvl53l1_release_gpios(i2c_data); - - mutex_unlock(&data->work_mutex); - - stmvl53l1_put(data->client_object); - - vl53l1_dbgmsg("End\n"); - - return 0; -} - -static const struct i2c_device_id stmvl53l1_id[] = { - { STMVL53L1_DRV_NAME, 0 }, - { }, -}; -MODULE_DEVICE_TABLE(i2c, stmvl53l1_id); - -static const struct of_device_id st_stmvl53l1_dt_match[] = { - { .compatible = "st,"STMVL53L1_DRV_NAME, }, - { }, -}; - -static struct i2c_driver stmvl53l1_driver = { - .driver = { - .name = STMVL53L1_DRV_NAME, - .owner = THIS_MODULE, - .of_match_table = st_stmvl53l1_dt_match, - }, - .probe = stmvl53l1_probe, - .remove = stmvl53l1_remove, - .id_table = stmvl53l1_id, - -}; - -/** - * give power to device - * - * @param object the i2c layer object - * @return - */ -int stmvl53l1_power_up_i2c(void *object) -{ - int rc = 0; - struct i2c_data *data = (struct i2c_data *) object; - - vl53l1_dbgmsg("Enter\n"); - - /* turn on power */ - if (data->vdd) { - rc = regulator_enable(data->vdd); - if (rc) { - vl53l1_errmsg("fail to turn on regulator"); - return rc; - } - } else if (data->pwren_gpio != -1) { - gpio_set_value(data->pwren_gpio, 1); - vl53l1_info("slow power on"); - } else - vl53l1_wanrmsg("no power control"); - - return rc; -} - -/** - * remove power to device (reset it) - * - * @param i2c_object the i2c layer object - * @return 0 on success - */ -int stmvl53l1_power_down_i2c(void *i2c_object) -{ - struct i2c_data *data = (struct i2c_data *) i2c_object; - int rc = 0; - - vl53l1_dbgmsg("Enter\n"); - - /* turn off power */ - if (data->vdd) { - rc = regulator_disable(data->vdd); - if (rc) - vl53l1_errmsg("reg disable failed. rc=%d\n", - rc); - } else if (data->pwren_gpio != -1) { - gpio_set_value(data->pwren_gpio, 0); - } - vl53l1_dbgmsg("power off"); - - vl53l1_dbgmsg("End\n"); - - return rc; -} - -static int handle_i2c_address_device_change_lock(struct i2c_data *data) -{ - struct i2c_client *client = (struct i2c_client *) data->client; - uint8_t buffer[3]; - struct i2c_msg msg; - int rc = 0; - - vl53l1_dbgmsg("change device i2c address from 0x%02x to 0x%02x", - data->boot_reg, client->addr); - /* no i2c-access must occur before fw boot time */ - usleep_range(VL53L1_FIRMWARE_BOOT_TIME_US, - VL53L1_FIRMWARE_BOOT_TIME_US + 1); - - /* manually send message to update i2c address */ - buffer[0] = (VL53L1_I2C_SLAVE__DEVICE_ADDRESS >> 8) & 0xFF; - buffer[1] = (VL53L1_I2C_SLAVE__DEVICE_ADDRESS >> 0) & 0xFF; - buffer[2] = client->addr; - msg.addr = data->boot_reg; - msg.flags = client->flags; - msg.buf = buffer; - msg.len = 3; - if (i2c_transfer(client->adapter, &msg, 1) != 1) { - rc = -ENXIO; - vl53l1_errmsg("Fail to change i2c address to 0x%02x", - client->addr); - } - - return rc; -} -/* reset release will also handle device address change. It will avoid state - * where multiple stm53l1 are bring out of reset at the same time with the - * same boot address. - * Note that we don't manage case where boot_reg has the same value as a final - * i2c address of another device. This case is not supported and will lead - * to unpredictable behavior. - */ -static int release_reset(struct i2c_data *data) -{ - struct i2c_client *client = (struct i2c_client *) data->client; - int rc = 0; - bool is_address_change = client->addr != data->boot_reg; - - if (is_address_change) - mutex_lock(&dev_addr_change_mutex); - - gpio_set_value(data->xsdn_gpio, 1); - if (is_address_change) { - rc = handle_i2c_address_device_change_lock(data); - if (rc) - gpio_set_value(data->xsdn_gpio, 0); - } - - if (is_address_change) - mutex_unlock(&dev_addr_change_mutex); - - return rc; -} - -/** - * release device reset - * - * @param i2c_object the i2c layer object - * @return 0 on success - */ -int stmvl53l1_reset_release_i2c(void *i2c_object) -{ - int rc; - struct i2c_data *data = (struct i2c_data *) i2c_object; - - vl53l1_dbgmsg("Enter\n"); - - rc = release_reset(data); - - pinctrl_select_state(g_pinctrl_info.pinctrl, - g_pinctrl_info.gpio_state_active); - if (rc) - goto error; - - /* and now wait for device end of boot */ - data->vl53l1_data->is_delay_allowed = true; - rc = VL53L1_WaitDeviceBooted(&data->vl53l1_data->stdev); - data->vl53l1_data->is_delay_allowed = false; - if (rc) { - gpio_set_value(data->xsdn_gpio, 0); - vl53l1_errmsg("boot fail with error %d", rc); - data->vl53l1_data->last_error = rc; - rc = -EIO; - } - -error: - vl53l1_dbgmsg("End\n"); - - return rc; -} - -/** - * put device under reset - * - * @param i2c_object the i2c layer object - * @return 0 on success - */ -int stmvl53l1_reset_hold_i2c(void *i2c_object) -{ - struct i2c_data *data = (struct i2c_data *) i2c_object; - - vl53l1_dbgmsg("Enter\n"); - - gpio_set_value(data->xsdn_gpio, 0); - - pinctrl_select_state(g_pinctrl_info.pinctrl, - g_pinctrl_info.gpio_state_suspend); - - vl53l1_dbgmsg("End\n"); - - return 0; -} - -int stmvl53l1_init_i2c(void) -{ - int ret = 0; - - vl53l1_dbgmsg("Enter\n"); - - /* register as a i2c client device */ - ret = i2c_add_driver(&stmvl53l1_driver); - if (ret) - vl53l1_errmsg("%d erro ret:%d\n", __LINE__, ret); - - if (!ret && force_device) - ret = insert_device(); - - vl53l1_dbgmsg("End with rc:%d\n", ret); - - return ret; -} - - -void stmvl53l1_clean_up_i2c(void) -{ - if (stm_test_i2c_client) { - vl53l1_dbgmsg("to unregister i2c client\n"); - i2c_unregister_device(stm_test_i2c_client); - } -} - -static irqreturn_t stmvl53l1_irq_handler_i2c(int vec, void *info) -{ - struct i2c_data *i2c_data = (struct i2c_data *)info; - - if (i2c_data->irq == vec) { - modi2c_dbg("irq"); - stmvl53l1_intr_handler(i2c_data->vl53l1_data); - modi2c_dbg("over"); - } else { - if (!i2c_data->msg_flag.unhandled_irq_vec) { - modi2c_warn("unmatching vec %d != %d\n", - vec, i2c_data->irq); - i2c_data->msg_flag.unhandled_irq_vec = 1; - } - } - - return IRQ_HANDLED; -} - -/** - * enable and start intr handling - * - * @param object our i2c_data specific object - * @param poll_mode [in/out] set to force mode clear to use irq - * @return 0 on success and set ->poll_mode if it faill ranging wan't start - */ -int stmvl53l1_start_intr(void *object, int *poll_mode) -{ - struct i2c_data *i2c_data; - int rc; - - i2c_data = (struct i2c_data *)object; - /* irq and gpio acquire config done in parse_tree */ - if (i2c_data->irq < 0) { - /* the i2c tree as no intr force polling mode */ - *poll_mode = -1; - return 0; - } - /* clear irq warning report enabe it again for this session */ - i2c_data->msg_flag.unhandled_irq_vec = 0; - /* if started do no nothing */ - if (i2c_data->io_flag.intr_started) { - /* nothing to do */ - *poll_mode = 0; - return 0; - } - - vl53l1_dbgmsg("to register_irq:%d\n", i2c_data->irq); - rc = request_threaded_irq(i2c_data->irq, NULL, - stmvl53l1_irq_handler_i2c, - IRQF_TRIGGER_FALLING|IRQF_ONESHOT, - "vl53l1_interrupt", - (void *)i2c_data); - if (rc) { - vl53l1_errmsg("fail to req threaded irq rc=%d\n", rc); - *poll_mode = 0; - } else { - vl53l1_dbgmsg("irq %d now handled\n", i2c_data->irq); - i2c_data->io_flag.intr_started = 1; - *poll_mode = 0; - } - return rc; -} - -void *stmvl53l1_get(void *object) -{ - struct i2c_data *data = (struct i2c_data *) object; - - vl53l1_dbgmsg("Enter\n"); - kref_get(&data->ref); - vl53l1_dbgmsg("End\n"); - - return object; -} - -static void memory_release(struct kref *kref) -{ - struct i2c_data *data = container_of(kref, struct i2c_data, ref); - - vl53l1_dbgmsg("Enter\n"); - kfree(data->vl53l1_data); - kfree(data); - vl53l1_dbgmsg("End\n"); -} - -void stmvl53l1_put(void *object) -{ - struct i2c_data *data = (struct i2c_data *) object; - - vl53l1_dbgmsg("Enter\n"); - kref_put(&data->ref, memory_release); - vl53l1_dbgmsg("End\n"); -} -void __exit stmvl53l1_exit_i2c(void *i2c_object) -{ - vl53l1_dbgmsg("Enter\n"); - i2c_del_driver(&stmvl53l1_driver); - vl53l1_dbgmsg("End\n"); -} diff --git a/drivers/input/misc/vl53L1/stmvl53l1_module.c b/drivers/input/misc/vl53L1/stmvl53l1_module.c deleted file mode 100644 index bdb0d8d6a4cc..000000000000 --- a/drivers/input/misc/vl53L1/stmvl53l1_module.c +++ /dev/null @@ -1,3636 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -*License terms : BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/** - * @file /stmvl53l1_module.c vl53l1_module ST VL53L1 linux kernel module - * - * main file - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* - * API includes - */ - -#include "stmvl53l1.h" -#include "stmvl53l1-i2c.h" -#include "stmvl53l1_ipp.h" - -#include "stmvl53l1_if.h" /* our device interface to user space */ -#include "stmvl53l1_internal_if.h" - -/** @ingroup vl53l1_config - * @{ - */ -/** - * default polling period delay in millisecond - * - * It can be set at run time via @ref vl53l1_ioctl or @ref sysfs_attrib - * - * @note apply only for device operating in polling mode only - */ -#define STMVL53L1_CFG_POLL_DELAY_MS 5 - -/** - * default timing budget in microsecond - * - * Can be change at run time via @ref vl53l1_ioctl or @ref sysfs_attrib - */ -#define STMVL53L1_CFG_TIMING_BUDGET_US 33000 - -/** default preset ranging mode */ -#define STMVL53L1_CFG_DEFAULT_MODE VL53L1_PRESETMODE_RANGING - -/** default distance mode */ -#define STMVL53L1_CFG_DEFAULT_DISTANCE_MODE VL53L1_DISTANCEMODE_LONG - -/** default crosstalk enable */ -#define STMVL53L1_CFG_DEFAULT_CROSSTALK_ENABLE 1 - -/** default crosstalk for autonomous mode */ -#define STMVL53L1_CFG_DEFAULT_CROSSTALK_AUTONOMOUS 1000 - -/** max distance value mm */ -#define STMVL53L1_MAX_DISTANCE 0x1FFF - -/** default output mode */ -#define STMVL53L1_CFG_DEFAULT_OUTPUT_MODE VL53L1_OUTPUTMODE_NEAREST - -/** @} */ /* ingroup vl53l1_config */ - -/** @ingroup vl53l1_mod_dbg - * @{ - */ - -/** - * activate dump of roi in roi ctrl operation - * - * @note uses @a vl53l1_dbgmsg for output so make sure to enable debug - * to get roi dump - */ -#define STMVL53L1_CFG_ROI_DEBUG 0 - -/** @} */ /* ingroup vl53l1_mod_dbg*/ - -/* #define DEBUG_TIME_LOG */ - - -#ifdef DEBUG_TIME_LOG -struct timeval start_tv, stop_tv; -#endif - -/* Set default value to 1 to allow to see module insertion debug messages */ -int stmvl53l1_enable_debug = 1; - -#define VL53L1_INPUT_DEVICE_NAME "STM VL53L1 proximity sensor" - -static long stmvl53l1_ioctl(struct file *file, - unsigned int cmd, unsigned long arg); -static int stmvl53l1_open(struct inode *inode, struct file *file); -static int stmvl53l1_release(struct inode *inode, struct file *file); -static int ctrl_start(struct stmvl53l1_data *data); -static int ctrl_stop(struct stmvl53l1_data *data); -static int ctrl_suspend(struct stmvl53l1_data *data); - -#ifdef CONFIG_COMPAT -static long stmvl53l1_compat_ioctl(struct file *file, - unsigned int cmd, unsigned long arg); -#endif -static bool force_device_on_en_default = false; - -module_param(force_device_on_en_default, bool, 0444); -MODULE_PARM_DESC(force_device_on_en_default, - "select whether force_device_on_en is true or false by default"); -/** - * module interface struct - * interface to platform speficic device handling , concern power/reset ... - */ -struct stmvl53l1_module_fn_t { - int (*init)(void); /*!< init */ - /** - * clean up job - * @param data module specific data ptr - */ - void (*deinit)(void *data); - /** - * give device power - * @param data specific module storage ptr - * @return 0 on sucess - */ - int (*power_up)(void *data); - /** - * power down TOFO also stop intr - */ - int (*power_down)(void *data); - /* - * release reset so device start. - */ - int (*reset_release)(void *data); - /* - * put device under reset. - */ - int (*reset_hold)(void *data); - - /** - * enable interrupt - * - * @param object : interface speficic ptr - * @note "module specfic ptr is data->client_object - * @return 0 on success else error then drievr wan't start ranging! - * if no interrupt or it can't be hooked but still to operated in poll - * mode then return 0 and force data->poll_mode - * might have to clear poll_mode exlplcilty if to operate in real intr - * mode as pool mode - * is the default - */ - int (*start_intr)(void *object, int *poll_mode); - - void (*clean_up)(void); /*!< optional can be void */ - - /* increment reference counter */ - void *(*get)(void *object); - - /* decrement reference counter and deallocate memory when zero */ - void (*put)(void *object); -}; - -/** i2c module interface*/ -static struct stmvl53l1_module_fn_t stmvl53l1_module_func_tbl = { - .init = stmvl53l1_init_i2c, - .deinit = stmvl53l1_exit_i2c, - .power_up = stmvl53l1_power_up_i2c, - .power_down = stmvl53l1_power_down_i2c, - .reset_release = stmvl53l1_reset_release_i2c, - .reset_hold = stmvl53l1_reset_hold_i2c, - .clean_up = stmvl53l1_clean_up_i2c, - .start_intr = stmvl53l1_start_intr, - .get = stmvl53l1_get, - .put = stmvl53l1_put, -}; - - -#ifndef MIN -# define MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif - - -/* - * INPUT Subsys interface - */ - -static void stmvl53l1_input_push_data(struct stmvl53l1_data *data); - -/* - * Global data - */ - -/* We statically inc the value on each probe/setup but it could come from - * the i2c or platform data and/or device tree - */ -static DEFINE_MUTEX(dev_table_mutex); - -/** - * in-used device LUT - * we need this as the message reception from netlink message can't - * associate directly to a device instance that is as we look up id - * to device data structure - */ -struct stmvl53l1_data *stmvl53l1_dev_table[STMVL53L1_CFG_MAX_DEV]; - -/** - * Misc device device operations - */ -static const struct file_operations stmvl53l1_ranging_fops = { - .owner = THIS_MODULE, - .unlocked_ioctl = stmvl53l1_ioctl, -#ifdef CONFIG_COMPAT - .compat_ioctl = stmvl53l1_compat_ioctl, -#endif - .open = stmvl53l1_open, - .release = stmvl53l1_release, - /* .flush = stmvl53l0_flush, */ -}; - -static int store_last_error(struct stmvl53l1_data *data, int rc) -{ - data->last_error = rc; - - return -EIO; -} - -static int allocate_dev_id(void) -{ - int i; - - mutex_lock(&dev_table_mutex); - - for (i = 0; i < STMVL53L1_CFG_MAX_DEV; i++) - if (!stmvl53l1_dev_table[i]) - break; - i = i < STMVL53L1_CFG_MAX_DEV ? i : -1; - - mutex_unlock(&dev_table_mutex); - - return i; -} - -static void deallocate_dev_id(int id) -{ - mutex_lock(&dev_table_mutex); - - stmvl53l1_dev_table[id] = NULL; - - mutex_unlock(&dev_table_mutex); -} - -/* helpers to manage reader list for blockint ioctl */ -/* call them with lock */ -static void empty_and_free_list(struct list_head *head) -{ - struct stmvl53l1_waiters *waiter; - struct stmvl53l1_waiters *tmp; - - list_for_each_entry_safe(waiter, tmp, head, list) { - list_del(&waiter->list); - kfree(waiter); - } -} - -static int add_reader(pid_t pid, struct list_head *head) -{ - struct stmvl53l1_waiters *new_waiter; - - new_waiter = kmalloc(sizeof(struct stmvl53l1_waiters), GFP_KERNEL); - if (!new_waiter) - return -ENOMEM; - new_waiter->pid = pid; - list_add(&new_waiter->list, head); - - return 0; -} - -static bool is_pid_in_list(pid_t pid, struct list_head *head) -{ - struct stmvl53l1_waiters *waiter; - - list_for_each_entry(waiter, head, list) - if (waiter->pid == pid) - return true; - - return false; -} - -static void wake_up_data_waiters(struct stmvl53l1_data *data) -{ - empty_and_free_list(&data->simple_data_reader_list); - empty_and_free_list(&data->mz_data_reader_list); - wake_up(&data->waiter_for_data); -} - -static void stmvl53l1_insert_flush_events_lock(struct stmvl53l1_data *data) -{ - while (data->flush_todo_counter) { - data->flushCount++; - input_report_abs(data->input_dev_ps, ABS_GAS, data->flushCount); - input_sync(data->input_dev_ps); - vl53l1_dbgmsg("Sensor HAL Flush Count = %u\n", - data->flushCount); - data->flush_todo_counter--; - } -} - -static int reset_release(struct stmvl53l1_data *data) -{ - int rc; - - if (!data->reset_state) - return 0; - - vl53l1_dbgmsg("turn on vdd\n"); - rc = stmvl53l1_module_func_tbl.power_up(data->client_object); - if (rc) { - vl53l1_errmsg("%d,error rc %d\n", __LINE__, rc); - return rc; - } - - rc = stmvl53l1_module_func_tbl.reset_release(data->client_object); - if (rc) - vl53l1_errmsg("reset release fail rc=%d\n", rc); - else - data->reset_state = 0; - - return rc; -} - -static int reset_hold(struct stmvl53l1_data *data) -{ - int rc; - - if (data->reset_state) - return 0; - - if (data->force_device_on_en) - return 0; - - rc = stmvl53l1_module_func_tbl.reset_hold(data->client_object); - if (!rc) - data->reset_state = 1; - - vl53l1_dbgmsg("turn off vdd\n"); - rc = stmvl53l1_module_func_tbl.power_down(data->client_object); - if (rc) { - vl53l1_errmsg("%d,error rc %d\n", __LINE__, rc); - return rc; - } - - return rc; -} - -#ifdef DEBUG_TIME_LOG -static void stmvl53l0_DebugTimeGet(struct timeval *ptv) -{ - do_gettimeofday(ptv); -} - -#endif - -/** - * - * @param pstart_tv time val starting point - * @param pstop_tv time val end point - * @return time dif in usec - */ -long stmvl53l1_tv_dif(struct timeval *pstart_tv, struct timeval *pstop_tv) -{ - long total_sec, total_usec; - - total_sec = pstop_tv->tv_sec - pstart_tv->tv_sec; - total_usec = (pstop_tv->tv_usec - pstart_tv->tv_usec); - - return total_sec*1000000+total_usec; -} - -#if STMVL53L1_CFG_ROI_DEBUG -static void dump_roi(VL53L1_UserRoi_t *rois, uint32_t n) -{ - uint32_t i; - - vl53l1_dbgmsg("roi dump %d roi:\n", n); - for (i = 0; i < n ; i++) { - vl53l1_dbgmsg("ROI#%02d %2d %2d %2d %2d\n", (int)i, - (int)rois[i].TopLeftX, (int)rois[i].TopLeftY, - (int)rois[i].BotRightX, (int)rois[i].BotRightY); - } -} -#else -# define dump_roi(...) (void)0 -#endif - -/** - * - * @param data device data - * @return non 0 if current "preset mode" is a multi zone one - */ -static int is_mz_mode(struct stmvl53l1_data *data) -{ - return data->preset_mode == VL53L1_PRESETMODE_RANGING || - data->preset_mode == VL53L1_PRESETMODE_MULTIZONES_SCANNING; -} - -static void kill_mz_data(VL53L1_MultiRangingData_t *pdata) -{ - int i; - - memset(pdata, 0, sizeof(*pdata)); - for (i = 0; i < VL53L1_MAX_RANGE_RESULTS; i++) - pdata->RangeData[i].RangeStatus = -1; - pdata->RoiStatus = VL53L1_ROISTATUS_NOT_VALID; -} - -static void stmvl53l1_setup_auto_config(struct stmvl53l1_data *data) -{ - /* default config is detect object below 300mm with 1s period */ - data->auto_pollingTimeInMs = 1000; - data->auto_config.DetectionMode = VL53L1_DETECTION_DISTANCE_ONLY; - data->auto_config.IntrNoTarget = 0; - data->auto_config.Distance.CrossMode = VL53L1_THRESHOLD_CROSSED_LOW; - data->auto_config.Distance.High = 1000; - data->auto_config.Distance.Low = 300; - data->auto_config.Rate.CrossMode = VL53L1_THRESHOLD_CROSSED_LOW; - data->auto_config.Rate.High = 0; - data->auto_config.Rate.Low = 0; -} - -/** - * start sensor - * - * @warning must be used if only stopped - * @param data device data - * @return 0 on sucess - */ -static int stmvl53l1_start(struct stmvl53l1_data *data) -{ - int rc; - VL53L1_CalibrationData_t cali; - - data->is_first_irq = true; - data->is_data_valid = false; - - rc = reset_release(data); - if (rc) - goto done; - - /* full setup when out of reset or power up */ - rc = VL53L1_StaticInit(&data->stdev); - if (rc) { - vl53l1_errmsg("VL53L1_StaticInit @%d fail %d\n", - __LINE__, rc); - rc = store_last_error(data, rc); - goto done; - } - - /* activated stored or last request defined mode */ - rc = VL53L1_SetPresetMode(&data->stdev, data->preset_mode); - if (rc) { - vl53l1_errmsg("VL53L1_SetPresetMode %d fail %d", - data->preset_mode, rc); - rc = store_last_error(data, rc); - goto done; - } - - if (data->preset_mode == VL53L1_PRESETMODE_AUTONOMOUS) { - /* disable xtalk and set short distance mode - * for autonomous mode */ - data->crosstalk_enable = 0; - data->distance_mode = VL53L1_DISTANCEMODE_SHORT; - } else { - /* restore xtalk and distance mode to default - * values for non-autonomous mode */ - data->crosstalk_enable = - STMVL53L1_CFG_DEFAULT_CROSSTALK_ENABLE; - data->distance_mode = - STMVL53L1_CFG_DEFAULT_DISTANCE_MODE; - } - - rc = VL53L1_SetXTalkCompensationEnable(&data->stdev, - data->crosstalk_enable); - if (rc) { - vl53l1_errmsg("VL53L1_SetXTalkCompensationEnable %d fail %d", - data->crosstalk_enable, rc); - rc = store_last_error(data, rc); - goto done; - } - - /* apply distance mode only in lite and standard ranging */ - rc = VL53L1_SetDistanceMode(&data->stdev, data->distance_mode); - if (rc) { - vl53l1_errmsg("VL53L1_SetDistanceMode %d fail %d", - data->distance_mode, rc); - rc = store_last_error(data, rc); - goto done; - } - - /* apply timing budget */ - rc = VL53L1_SetMeasurementTimingBudgetMicroSeconds(&data->stdev, - data->timing_budget); - if (rc) { - vl53l1_errmsg("SetTimingBudget %d fail %d", - data->timing_budget, rc); - rc = store_last_error(data, rc); - goto done; - } - vl53l1_dbgmsg("timing budget @%d\n", data->timing_budget); - - /* aplly roi if any set */ - if (data->roi_cfg.NumberOfRoi) { - rc = VL53L1_SetROI(&data->stdev, &data->roi_cfg); - if (rc) { - vl53l1_errmsg("VL53L1_SetROI fail %d\n", rc); - rc = store_last_error(data, rc); - goto done; - } - vl53l1_dbgmsg("#%d custom ROI set status\n", - data->roi_cfg.NumberOfRoi); - } else { - vl53l1_dbgmsg("using default ROI\n"); - } - - /* init the timing */ - do_gettimeofday(&data->start_tv); - data->meas.start_tv = data->start_tv; - /* init the ranging data => kill the previous ranging mz data */ - kill_mz_data(&data->meas.multi_range_data); - - memset(&cali, 0, sizeof(cali)); - rc = VL53L1_GetCalibrationData(&data->stdev, &cali); - if (rc) { - vl53l1_errmsg("VL53L1_GetCalibrationData fail\n"); - rc = store_last_error(data, rc); - goto done; - } - - /* set autonomous mode configuration */ - if (data->preset_mode == VL53L1_PRESETMODE_AUTONOMOUS) { - if (data->cam_mode == 0) { - rc = VL53L1_SetInterMeasurementPeriodMilliSeconds( - &data->stdev, - data->auto_pollingTimeInMs); - if (rc) { - vl53l1_errmsg("Fail to set auto period %d\n", - rc); - rc = store_last_error(data, rc); - goto done; - } - rc = VL53L1_SetThresholdConfig(&data->stdev, - &data->auto_config); - if (rc) { - vl53l1_errmsg("Fail to set auto config %d\n", - rc); - rc = store_last_error(data, rc); - goto done; - } - } else { - /* set camera autonomous configration */ - rc = VL53L1_SetInterMeasurementPeriodMilliSeconds( - &data->stdev, - data->auto_pollingTimeInMs_cam); - if (rc) { - vl53l1_errmsg("Fail to set auto period %d\n", - rc); - rc = store_last_error(data, rc); - goto done; - } - rc = VL53L1_SetThresholdConfig(&data->stdev, - &data->auto_config_cam); - if (rc) { - vl53l1_errmsg("Fail to set auto config %d\n", - rc); - rc = store_last_error(data, rc); - goto done; - } - } - cali.customer.algo__crosstalk_compensation_plane_offset_kcps - = STMVL53L1_CFG_DEFAULT_CROSSTALK_AUTONOMOUS; - } else { - cali.customer.algo__crosstalk_compensation_plane_offset_kcps - = data->xtalk_offset; - } - - rc = VL53L1_SetCalibrationData(&data->stdev, &cali); - if (rc) { - vl53l1_errmsg("VL53L1_SetCalibrationData fail\n"); - rc = store_last_error(data, rc); - goto done; - } - - data->allow_hidden_start_stop = - (data->distance_mode == VL53L1_DISTANCEMODE_AUTO || - data->distance_mode == VL53L1_DISTANCEMODE_AUTO_LITE); - /* kick off ranging */ - rc = VL53L1_StartMeasurement(&data->stdev); - if (rc) { - vl53l1_errmsg("VL53L1_StartMeasurement @%d fail %d", - __LINE__, rc); - rc = store_last_error(data, rc); - goto done; - } - - data->meas.cnt = 0; - data->meas.err_cnt = 0; - data->meas.err_tot = 0; - data->meas.poll_cnt = 0; - data->meas.intr = 0; - data->enable_sensor = 1; - if (data->poll_mode) { - /* kick off the periodical polling work */ - schedule_delayed_work(&data->dwork, - msecs_to_jiffies(data->poll_delay_ms)); - } -done: - return rc; -} - -/** - * stop sensor - * - * work lock must be held - * @warning to be used if only started! - */ -static int stmvl53l1_stop(struct stmvl53l1_data *data) -{ - int rc; - - rc = VL53L1_StopMeasurement(&data->stdev); - if (rc) { - vl53l1_errmsg("VL53L1_StopMeasurement @%d fail %d", - __LINE__, rc); - rc = store_last_error(data, rc); - } - /* put device under reset */ - /* do we ask explicit intr stop or just use stop */ - reset_hold(data); - - data->enable_sensor = 0; - data->timing_budget = STMVL53L1_CFG_TIMING_BUDGET_US; - if (data->poll_mode) { - /* cancel periodical polling work */ - cancel_delayed_work(&data->dwork); - } - - /* if we are in ipp waiting mode then abort it */ - stmvl53l1_ipp_stop(data); - /* wake up all waiters */ - /* they will receive -ENODEV error */ - wake_up_data_waiters(data); - - return rc; -} - -static int activate_sar_mode(struct stmvl53l1_data *data) -{ - int rc = VL53L1_ERROR_NONE; - - if (data == NULL) - return -EFAULT; - - if (data->enable_sensor == 0 && - !data->is_calibrating && - data->sar_mode == 1 && - data->cam_mode != 1) { - data->preset_mode = VL53L1_PRESETMODE_AUTONOMOUS; - rc = stmvl53l1_start(data); - if (rc == VL53L1_ERROR_NONE) - vl53l1_info("sensor in sar mode!\n"); - else - vl53l1_errmsg("fail to active sar err %d\n", rc); - } else - vl53l1_info("skip sar activation\n"); - - return rc; -} - -static int deactivate_sar_mode(struct stmvl53l1_data *data) -{ - int rc = VL53L1_ERROR_NONE; - - if (data == NULL) - return -EFAULT; - - if (data->enable_sensor == 1 && - !data->is_calibrating && - data->preset_mode == VL53L1_PRESETMODE_AUTONOMOUS && - data->cam_mode != 1) { - rc = stmvl53l1_stop(data); - if (rc == VL53L1_ERROR_NONE) { - vl53l1_info("sensor is out of sar mode!\n"); - /* set preset mode back to default ranging mode */ - data->preset_mode = VL53L1_PRESETMODE_RANGING; - } else - vl53l1_errmsg("fail to deactivate sar err %d\n", rc); - } else - vl53l1_info("sar is not actived, skip deactivation\n"); - - return rc; -} - -/* - * SysFS support - */ -static ssize_t stmvl53l1_show_enable_ps_sensor(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - return snprintf(buf, 5, "%d\n", data->enable_sensor); -} - -static ssize_t stmvl53l1_store_enable_ps_sensor(struct device *dev, - struct device_attribute *attr, const char *buf, - size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int rc; - unsigned long val; - - rc = kstrtoul(buf, 10, &val); - if (rc) { - vl53l1_errmsg("enable sensor syntax in %s\n", buf); - return -EINVAL; - } - val = val ? 1 : 0; - vl53l1_dbgmsg("enable_sensor is %d => %d\n", - data->enable_sensor, (int)val); - - rc = val == 1 ? ctrl_start(data) : ctrl_stop(data); - vl53l1_dbgmsg("End\n"); - - return rc ? rc : count; -} - -/** - * sysfs attribute "enable_ps_sensor" [rd/wr] - * - * @li read show the current enable state - * @li write set the new state value "0" put sensor off "1" put it on - * - * @return 0 on success , EINVAL if fail to start - * - * @warning their's no check and assume exclusive usage of sysfs and ioctl\n - * Sensor will be put on/off disregard of any setup done by the ioctl channel. - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(enable_ps_sensor, 0664/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_enable_ps_sensor, - stmvl53l1_store_enable_ps_sensor); - -static int stmvl53l1_set_poll_delay_ms(struct stmvl53l1_data *data, int delay) -{ - int rc = 0; - - if (delay <= 0) - rc = -EINVAL; - else - data->poll_delay_ms = delay; - - return rc; -} - -static ssize_t stmvl53l1_show_poll_delay_ms(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - return scnprintf(buf, PAGE_SIZE, "%d\n", data->poll_delay_ms); -} - -/* for work handler scheduler time */ -static ssize_t stmvl53l1_store_poll_delay_ms(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int rc; - int delay; - - mutex_lock(&data->work_mutex); - - if (kstrtoint(buf, 0, &delay)) { - vl53l1_errmsg("invalid syntax in %s", buf); - rc = -EINVAL; - } else - rc = stmvl53l1_set_poll_delay_ms(data, delay); - - mutex_unlock(&data->work_mutex); - - return rc ? rc : count; -} - -/** - * sysfs attribute "poll_delay_ms" [rd/wr] - * - * @li read show the current polling delay in millisecond - * @li write set the new polling delay in millisecond - * - * @note apply only if device is in polling mode\n - * for best performances (minimal delay and cpu load ) set it to the device - * period operating period +1 millis - - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(set_delay_ms, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_poll_delay_ms, - stmvl53l1_store_poll_delay_ms); - -/* Timing Budget */ -static int stmvl53l1_set_timing_budget(struct stmvl53l1_data *data, int timing) -{ - int rc = 0; - - if (timing <= 0) { - vl53l1_errmsg("invalid timing valid %d\n", timing); - rc = -EINVAL; - } else if (data->enable_sensor) { - rc = VL53L1_SetMeasurementTimingBudgetMicroSeconds(&data->stdev, - timing); - if (rc) { - vl53l1_errmsg("SetTimingBudget %d fail %d", timing, rc); - rc = store_last_error(data, rc); - } else - data->timing_budget = timing; - } else - data->timing_budget = timing; - - return rc; -} - -static ssize_t stmvl53l1_show_timing_budget(struct device *dev, - struct device_attribute *attr, char *buf) -{ - int n; - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - mutex_lock(&data->work_mutex); - - n = scnprintf(buf, PAGE_SIZE, "%d\n", data->timing_budget); - - mutex_unlock(&data->work_mutex); - - return n; -} - -static ssize_t stmvl53l1_store_timing_budget(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int rc; - int timing; - - mutex_lock(&data->work_mutex); - - if (kstrtoint(buf, 0, &timing)) { - vl53l1_errmsg("invalid syntax in %s", buf); - rc = -EINVAL; - } else - rc = stmvl53l1_set_timing_budget(data, timing); - - mutex_unlock(&data->work_mutex); - - return rc ? rc : count; -} - -/** - * sysfs "timing_budget" [rd/wr] - * - * set or get the ranging timing budget in microsecond - * - * @warning can only be set while not ranging , trying to set it while ranging - * is an error (EBUSY) - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(timing_budget, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_timing_budget, - stmvl53l1_store_timing_budget); - - -static ssize_t stmvl53l1_show_roi(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int i; - int n; - - - mutex_lock(&data->work_mutex); - if (data->roi_cfg.NumberOfRoi == 0) { - /* none define by user */ - /* we could get what stored but may not even be default */ - n = scnprintf(buf, PAGE_SIZE, "device default\n"); - } else { - for (i = 0, n = 0; i < data->roi_cfg.NumberOfRoi; i++) { - n += scnprintf(buf+n, PAGE_SIZE-n, "%d %d %d %d%c", - data->roi_cfg.UserRois[i].TopLeftX, - data->roi_cfg.UserRois[i].TopLeftY, - data->roi_cfg.UserRois[i].BotRightX, - data->roi_cfg.UserRois[i].BotRightY, - i == data->roi_cfg.NumberOfRoi-1 ? - '\n' : ','); - } - } - mutex_unlock(&data->work_mutex); - return n; -} - - -static const char str_roi_ranging[] = "ERROR can't set roi while ranging\n"; - -static ssize_t stmvl53l1_store_roi(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - VL53L1_UserRoi_t rois[VL53L1_MAX_USER_ZONES]; - int rc; - - mutex_lock(&data->work_mutex); - if (data->enable_sensor) { - vl53l1_errmsg(" cant set roi now\n"); - rc = -EBUSY; - } else { - int n, n_roi = 0; - const char *pc = buf; - int tlx, tly, brx, bry; - - while (n_roi < VL53L1_MAX_USER_ZONES && pc != NULL - && *pc != 0 && *pc != '\n') { - n = sscanf(pc, "%d %d %d %d", &tlx, &tly, &brx, &bry); - if (n == 4) { - rois[n_roi].TopLeftX = tlx; - rois[n_roi].TopLeftY = tly; - rois[n_roi].BotRightX = brx; - rois[n_roi].BotRightY = bry; - n_roi++; - } else { - vl53l1_errmsg( -"wrong roi #%d syntax around %s of %s", n_roi, pc, buf); - n_roi = -1; - break; - } - /* find next roi separator */ - pc = strchr(pc, ','); - if (pc) - pc++; - } - /*if any set them */ - if (n_roi >= 0) { - if (n_roi) - memcpy(data->roi_cfg.UserRois, rois, - n_roi*sizeof(rois[0])); - data->roi_cfg.NumberOfRoi = n_roi; - dump_roi(data->roi_cfg.UserRois, - data->roi_cfg.NumberOfRoi); - rc = count; - } else { - rc = -EINVAL; - } - } - mutex_unlock(&data->work_mutex); - vl53l1_dbgmsg("ret %d count %d\n", rc, (int)count); - - return rc; -} - -/** - * sysfs attribute "roi" [rd/wr] - * - * @li read show the current user customized roi setting - * @li write set user custom roi, it can only be done while not ranging. - * - * syntax for set input roi - * @li "[tlx tly brx bry,]\n" repeat n time require will set the n roi - * @li "\n" will reset - * - * @warning roi coordinate is not image x,y(down) but euclidian x,y(up) - * - * @warning roi validity is only check at next range start - * @warning user is responsible to set approriate number an roi before each mode - * change - * @note roi can be retrun to defautl by setting none "" - * - *@code - * >#to set 2x roi - * >echo "0 15 15 0, 0 8 8 0" > /sys/class/input6/roi - * >echo $? - * 0 - * >cat /sys/class/input6/roi - * "0 15 15 0,0 8 8 0" - * #to cancel user define roi" - * >echo "" > /sys/class/input1/roi - * >echo $? - * 0 - * >echo "1" > /sys/class/input6/enable_ps_senspor - * #try to set roi while ranging - * >echo "0 15 15 0, 0 8 8 0" > /sys/class/input6/roi - * [58451.912109] stmvl53l1_store_roi: cant set roi now - * >echo $? - * 1 - *@endcode - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(roi, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_roi, - stmvl53l1_store_roi); - - -static int stmvl53l1_set_mode(struct stmvl53l1_data *data, int mode) -{ - int rc = 0; - - if (data->enable_sensor) { - vl53l1_errmsg("can't change mode while ranging\n"); - rc = -EBUSY; - } else { - switch (mode) { - case VL53L1_PRESETMODE_RANGING: - case VL53L1_PRESETMODE_MULTIZONES_SCANNING: - case VL53L1_PRESETMODE_LITE_RANGING: - case VL53L1_PRESETMODE_AUTONOMOUS: - data->preset_mode = mode; - break; - default: - vl53l1_errmsg("invalid mode %d\n", mode); - rc = -EINVAL; - break; - } - } - - return rc; -} - -static ssize_t stmvl53l1_show_mode(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - return scnprintf(buf, PAGE_SIZE, "%d\n", data->preset_mode); -} - -static ssize_t stmvl53l1_store_mode(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int rc; - int mode; - - mutex_lock(&data->work_mutex); - - if (kstrtoint(buf, 0, &mode)) { - vl53l1_errmsg("invalid syntax in %s", buf); - rc = -EINVAL; - } else - rc = stmvl53l1_set_mode(data, mode); - - mutex_unlock(&data->work_mutex); - - return rc ? rc : count; -} - -/** - * sysfs attribute "mode " [rd/wr] - * - * set the mode value can only be used while: not ranging - * @li 1 @a VL53L1_PRESETMODE_RANGING default ranging - * @li 2 @a VL53L1_PRESETMODE_MULTIZONES_SCANNING multiple zone - * @li 3 @a VL53L1_PRESETMODE_AUTONOMOUS autonomous mode - * @li 4 @a VL53L1_PRESETMODE_LITE_RANGING low mips ranging mode - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(mode, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_mode, - stmvl53l1_store_mode); - -static int stmvl53l1_set_distance_mode(struct stmvl53l1_data *data, - int distance_mode) -{ - int rc = 0; - - if (data->enable_sensor) { - vl53l1_errmsg("can't change distance mode while ranging\n"); - rc = -EBUSY; - } else { - switch (distance_mode) { - case VL53L1_DISTANCEMODE_SHORT: - case VL53L1_DISTANCEMODE_MEDIUM: - case VL53L1_DISTANCEMODE_LONG: - case VL53L1_DISTANCEMODE_AUTO_LITE: - case VL53L1_DISTANCEMODE_AUTO: - data->distance_mode = distance_mode; - break; - default: - vl53l1_errmsg("invalid distance mode %d\n", - distance_mode); - rc = -EINVAL; - break; - } - } - - return rc; -} - -static ssize_t stmvl53l1_show_distance_mode(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - return scnprintf(buf, PAGE_SIZE, "%d\n", data->distance_mode); -} - -static ssize_t stmvl53l1_store_distance_mode(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int rc; - int distance_mode; - - mutex_lock(&data->work_mutex); - - if (kstrtoint(buf, 0, &distance_mode)) { - vl53l1_errmsg("invalid syntax in %s", buf); - rc = -EINVAL; - } else - rc = stmvl53l1_set_distance_mode(data, distance_mode); - - mutex_unlock(&data->work_mutex); - - return rc ? rc : count; -} - -/** - * sysfs attribute " distance mode" [rd/wr] - * - * set the distance mode value can only be used while: not ranging - * @li 1 @a VL53L1_DISTANCEMODE_SHORT - * @li 2 @a VL53L1_DISTANCEMODE_MEDIUM - * @li 3 @a VL53L1_DISTANCEMODE_LONG - * @li 4 @a VL53L1_DISTANCEMODE_AUTO_LITE - * @li 5 @a VL53L1_DISTANCEMODE_AUTO - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(distance_mode, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_distance_mode, - stmvl53l1_store_distance_mode); - -static int stmvl53l1_set_crosstalk_enable(struct stmvl53l1_data *data, - int crosstalk_enable) -{ - int rc = 0; - - if (data->enable_sensor) { - vl53l1_errmsg("can't change crosstalk enable while ranging\n"); - rc = -EBUSY; - } else if (crosstalk_enable == 0 || crosstalk_enable == 1) { - data->crosstalk_enable = crosstalk_enable; - } else { - vl53l1_errmsg("invalid crosstalk enable %d\n", - crosstalk_enable); - rc = -EINVAL; - } - - return rc; -} - -static ssize_t stmvl53l1_show_crosstalk_enable(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - return scnprintf(buf, PAGE_SIZE, "%d\n", data->crosstalk_enable); -} - -static ssize_t stmvl53l1_store_crosstalk_enable(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int rc; - int crosstalk_enable; - - mutex_lock(&data->work_mutex); - if (kstrtoint(buf, 0, &crosstalk_enable)) { - vl53l1_errmsg("invalid syntax in %s", buf); - rc = -EINVAL; - } else - rc = stmvl53l1_set_crosstalk_enable(data, crosstalk_enable); - - mutex_unlock(&data->work_mutex); - - return rc ? rc : count; -} - -/** - * sysfs attribute " crosstalk enable" [rd/wr] - * - * control if crosstalk compensation is eanble or not - * @li 0 disable crosstalk compensation - * @li 1 enable crosstalk compensation - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(crosstalk_enable, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_crosstalk_enable, - stmvl53l1_store_crosstalk_enable); - -static int stmvl53l1_set_output_mode(struct stmvl53l1_data *data, - int output_mode) -{ - int rc = 0; - - if (data->enable_sensor) { - vl53l1_errmsg("can't change output mode while ranging\n"); - rc = -EBUSY; - } else { - switch (output_mode) { - case VL53L1_OUTPUTMODE_NEAREST: - case VL53L1_OUTPUTMODE_STRONGEST: - data->output_mode = output_mode; - break; - default: - vl53l1_errmsg("invalid output mode %d\n", output_mode); - rc = -EINVAL; - break; - } - } - - return rc; -} - -static ssize_t stmvl53l1_show_output_mode(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - return scnprintf(buf, PAGE_SIZE, "%d\n", data->output_mode); -} - -static ssize_t stmvl53l1_store_output_mode(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int rc; - int output_mode; - - mutex_lock(&data->work_mutex); - - if (kstrtoint(buf, 0, &output_mode)) { - vl53l1_errmsg("invalid syntax in %s", buf); - rc = -EINVAL; - } else - rc = stmvl53l1_set_output_mode(data, output_mode); - - mutex_unlock(&data->work_mutex); - - return rc ? rc : count; -} - -/** - * sysfs attribute " output mode" [rd/wr] - * - * set the output mode value can only be used while: not ranging - * @li 1 @a VL53L1_OUTPUTMODE_NEAREST - * @li 2 @a VL53L1_OUTPUTMODE_STRONGEST - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(output_mode, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_output_mode, - stmvl53l1_store_output_mode); - - -static int stmvl53l1_set_force_device_on_en(struct stmvl53l1_data *data, - int force_device_on_en) -{ - int rc; - - if (force_device_on_en != 0 && force_device_on_en != 1) { - vl53l1_errmsg("invalid force_device_on_en mode %d\n", - force_device_on_en); - return -EINVAL; - } - - data->force_device_on_en = force_device_on_en; - - /* don't update reset if sensor is enable */ - if (data->enable_sensor) - return 0; - - /* ok update reset according force_device_on_en value */ - if (force_device_on_en) - rc = reset_release(data); - else - rc = reset_hold(data); - - return rc; -} - -static ssize_t stmvl53l1_show_force_device_on_en(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - return scnprintf(buf, PAGE_SIZE, "%d\n", data->force_device_on_en); -} - -static ssize_t stmvl53l1_store_force_device_on_en(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int rc; - int force_device_on_en; - - mutex_lock(&data->work_mutex); - - if (kstrtoint(buf, 0, &force_device_on_en)) { - vl53l1_errmsg("invalid syntax in %s", buf); - rc = -EINVAL; - } else - rc = stmvl53l1_set_force_device_on_en(data, force_device_on_en); - - mutex_unlock(&data->work_mutex); - - return rc ? rc : count; -} - -/** - * sysfs attribute " force_device_on_enable" [rd/wr] - * - * Control if device is put under reset when stopped. - * @li 0 feature is disable. Device is put under reset when stopped. - * @li 1 feature is enable. Device is not put under reset when stopped. - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(force_device_on_enable, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_force_device_on_en, - stmvl53l1_store_force_device_on_en); - -static ssize_t stmvl53l1_do_flush(struct device *dev, - struct device_attribute *attr, const char *buf, size_t count) { - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - mutex_lock(&data->work_mutex); - - data->flush_todo_counter++; - stmvl53l1_insert_flush_events_lock(data); - - mutex_unlock(&data->work_mutex); - - return count; -} - -static DEVICE_ATTR(do_flush, 0660/*S_IWUGO | S_IRUGO*/, - NULL, - stmvl53l1_do_flush); - -static ssize_t stmvl53l1_show_enable_debug(struct device *dev, - struct device_attribute *attr, char *buf) -{ - return scnprintf(buf, PAGE_SIZE, "%d\n", stmvl53l1_enable_debug); -} - -static ssize_t stmvl53l1_store_enable_debug(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - int enable_debug; - int rc = 0; - - if (kstrtoint(buf, 0, &enable_debug)) { - vl53l1_errmsg("invalid syntax in %s", buf); - rc = -EINVAL; - } else - stmvl53l1_enable_debug = enable_debug; - - return rc ? rc : count; -} - -/** - * sysfs attribute " debug enable" [rd/wr] - * - * dynamic control of vl53l1_dbgmsg messages. Note that in any case your code - * must be enable with DEBUG in stmvl53l1.h at compile time. - * @li 0 disable vl53l1_dbgmsg messages - * @li 1 enable vl53l1_dbgmsg messages - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(enable_debug, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_enable_debug, - stmvl53l1_store_enable_debug); - -static ssize_t display_FixPoint1616(char *buf, size_t size, FixPoint1616_t fix) -{ - uint32_t msb = fix >> 16; - uint32_t lsb = fix & 0xffff; - - lsb = (lsb * 1000000ULL + 32768) / 65536; - - return scnprintf(buf, size, "%d.%06d", msb, (uint32_t) lsb); -} - -static ssize_t stmvl53l1_show_autonomous_config(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - ssize_t res = 0; - - res += scnprintf(&buf[res], PAGE_SIZE, "%d %d %d %d %d %d %d ", - data->auto_pollingTimeInMs, - data->auto_config.DetectionMode, - data->auto_config.IntrNoTarget, - data->auto_config.Distance.CrossMode, - data->auto_config.Distance.High, - data->auto_config.Distance.Low, - data->auto_config.Rate.CrossMode); - - res += display_FixPoint1616(&buf[res], PAGE_SIZE - res, - data->auto_config.Rate.High); - - res += scnprintf(&buf[res], PAGE_SIZE - res, " "); - - res += display_FixPoint1616(&buf[res], PAGE_SIZE - res, - data->auto_config.Rate.Low); - - res += scnprintf(&buf[res], PAGE_SIZE - res, "\n"); - - return res; -} - -static const char *parse_integer(const char *buf, int *res) -{ - int rc; - - while (*buf == ' ') - buf++; - rc = sscanf(buf, "%d ", res); - if (!rc) - return NULL; - - return strchr(buf, ' '); -} - -static bool is_float_format(const char *buf, bool is_last) -{ - char *dot = strchr(buf, '.'); - char *space_or_new_line = strchr(buf, is_last ? '\n' : ' '); - - if (!space_or_new_line) - return !!dot; - if (!dot) - return false; - - return dot < space_or_new_line ? true : false; -} - -static int parse_FixPoint16x16_lsb(const char *lsb_char) -{ - int lsb = 0; - int digit_nb = 0; - - /* parse at most 6 digits */ - lsb_char++; - while (*lsb_char != ' ' && *lsb_char != '\n' && digit_nb < 6) { - lsb = lsb * 10 + (*lsb_char - '0'); - lsb_char++; - digit_nb++; - } - while (digit_nb++ < 6) - lsb = lsb * 10; - - return div64_s64(lsb * 65536ULL + 500000, 1000000); -} - -/* parse next fix point value and return a pointer to next blank or newline - * character according to is_last parameter. - * parse string must have digit for integer part (something like '.125' will - * return an error) or an error will be return. Only the first 6 digit of the - * decimal part will be parsed. - */ -static const char *parse_FixPoint16x16(const char *buf, FixPoint1616_t *res, - bool is_last) -{ - bool is_float; - int msb; - int lsb = 0; - int rc; - - while (*buf == ' ') - buf++; - is_float = is_float_format(buf, is_last); - - /* scan msb */ - rc = sscanf(buf, "%d ", &msb); - if (!rc) - return NULL; - /* then lsb if present */ - if (is_float) - lsb = parse_FixPoint16x16_lsb(strchr(buf, '.')); - *res = (msb << 16) + lsb; - - return strchr(buf, is_last ? '\n' : ' '); -} - -static ssize_t stmvl53l1_store_autonomous_config(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int pollingTimeInMs, DetectionMode, IntrNoTarget; - int d_CrossMode, d_High, d_Low; - int r_CrossMode; - FixPoint1616_t r_High, r_Low; - const char *buf_ori = buf; - int rc; - - mutex_lock(&data->work_mutex); - - buf = parse_integer(buf, &pollingTimeInMs); - if (!buf) - goto invalid; - buf = parse_integer(buf, &DetectionMode); - if (!buf) - goto invalid; - buf = parse_integer(buf, &IntrNoTarget); - if (!buf) - goto invalid; - buf = parse_integer(buf, &d_CrossMode); - if (!buf) - goto invalid; - buf = parse_integer(buf, &d_High); - if (!buf) - goto invalid; - buf = parse_integer(buf, &d_Low); - if (!buf) - goto invalid; - buf = parse_integer(buf, &r_CrossMode); - if (!buf) - goto invalid; - buf = parse_FixPoint16x16(buf, &r_High, false); - if (!buf) - goto invalid; - buf = parse_FixPoint16x16(buf, &r_Low, true); - if (!buf) - goto invalid; - - data->auto_pollingTimeInMs = pollingTimeInMs; - data->auto_config.DetectionMode = DetectionMode; - data->auto_config.IntrNoTarget = IntrNoTarget; - data->auto_config.Distance.CrossMode = d_CrossMode; - data->auto_config.Distance.High = d_High; - data->auto_config.Distance.Low = d_Low; - data->auto_config.Rate.CrossMode = r_CrossMode; - data->auto_config.Rate.High = r_High; - data->auto_config.Rate.Low = r_Low; - - mutex_unlock(&data->work_mutex); - - return count; - -invalid: - vl53l1_errmsg("invalid syntax in %s", buf_ori); - rc = -EINVAL; - goto error; - -error: - mutex_unlock(&data->work_mutex); - - return rc; -} - -/** - * sysfs attribute " autonomous_config" [rd/wr] - * - * Will set/get autonomous configuration using sysfs. - * - * format is the following : - * - * - * - *@code - * > echo "1000 1 0 0 1000 300 0 2.2 1.001" > autonomous_config - *@endcode - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(autonomous_config, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_autonomous_config, - stmvl53l1_store_autonomous_config); -static ssize_t stmvl53l1_show_last_error_config(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - return scnprintf(buf, PAGE_SIZE, "%d\n", data->last_error); -} - -static ssize_t stmvl53l1_show_enable_sar(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - return scnprintf(buf, PAGE_SIZE, "%d\n", data->sar_mode); -} - -static ssize_t stmvl53l1_store_enable_sar(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - int rc = 0; - int mode; - - mutex_lock(&data->work_mutex); - - if (kstrtoint(buf, 0, &mode)) { - vl53l1_errmsg("invalid syntax in %s\n", buf); - rc = -EINVAL; - } else { - data->sar_mode = mode?1:0; - vl53l1_dbgmsg("sar mode is set to %d\n", data->sar_mode); - - if (data->sar_mode == 1) { - if (mode == 1) { - /* report far distance as initial value */ - struct input_dev *input = data->input_dev_ps; - - input_report_abs(input, ABS_HAT1X, 100); - input_report_abs(input, ABS_HAT1X, 101); - input_report_abs(input, ABS_HAT1X, 100); - input_sync(input); - } - activate_sar_mode(data); - } else - deactivate_sar_mode(data); - } - - mutex_unlock(&data->work_mutex); - - return rc ? rc : count; -} - -/** - * sysfs attribute "enable_sar" [rd/wr] - * - * To enable/disable the sar mode - * @li 0 disable sar mode - * @li 1 enable sar mode - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(enable_sar, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_enable_sar, - stmvl53l1_store_enable_sar); - -static ssize_t stmvl53l1_show_offset(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - - return scnprintf(buf, PAGE_SIZE, "%d,%d\n", - data->inner_offset, data->outer_offset); -} - -static ssize_t stmvl53l1_store_offset(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct stmvl53l1_data *data = dev_get_drvdata(dev); - VL53L1_CalibrationData_t cali_data; - int rc = 0; - int n = 0; - int inner = 0; - int outer = 0; - - mutex_lock(&data->work_mutex); - - if (data->enable_sensor) { - vl53l1_errmsg("can't set offset while ranging\n"); - rc = -EBUSY; - goto finish; - } - - n = sscanf(buf, "%d,%d", &inner, &outer); - if(n != 2) { - vl53l1_errmsg("wrong offset syntax around %s\n", buf); - rc = -EINVAL; - goto finish; - } - - memset(&cali_data, 0, sizeof(cali_data)); - rc = VL53L1_GetCalibrationData(&data->stdev, &cali_data); - if (rc) { - vl53l1_errmsg("VL53L1_GetCalibrationData fail\n"); - rc = -EINVAL; - goto finish; - } - - /* update offset values */ - vl53l1_info("previous offset is %d,%d\n", - cali_data.customer.mm_config__inner_offset_mm, - cali_data.customer.mm_config__outer_offset_mm); - cali_data.customer.mm_config__inner_offset_mm = inner; - cali_data.customer.mm_config__outer_offset_mm = outer; - - rc = VL53L1_SetCalibrationData(&data->stdev, &cali_data); - if (rc) { - vl53l1_errmsg("VL53L1_SetCalibrationData fail\n"); - rc = -EINVAL; - goto finish; - } - - data->inner_offset = (int16_t)inner; - data->outer_offset = (int16_t)outer; - vl53l1_info("offset is set to %d,%d\n", inner, outer); -finish: - mutex_unlock(&data->work_mutex); - return rc ? rc : count; -} - -/** - * sysfs attribute "enable_sar" [rd/wr] - * - * To enable/disable the sar mode - * @li 0 disable sar mode - * @li 1 enable sar mode - * - * @ingroup sysfs_attrib - */ -static DEVICE_ATTR(offset, 0660/*S_IWUGO | S_IRUGO*/, - stmvl53l1_show_offset, - stmvl53l1_store_offset); -static DEVICE_ATTR(last_error, 0440/*S_IRUGO*/, - stmvl53l1_show_last_error_config, - NULL); -static struct attribute *stmvl53l1_attributes[] = { - &dev_attr_enable_ps_sensor.attr, - &dev_attr_set_delay_ms.attr, - &dev_attr_timing_budget.attr, - &dev_attr_roi.attr, - &dev_attr_mode.attr, - &dev_attr_do_flush.attr, - &dev_attr_distance_mode.attr, - &dev_attr_crosstalk_enable.attr, - &dev_attr_enable_debug.attr, - &dev_attr_output_mode.attr, - &dev_attr_force_device_on_enable.attr, - &dev_attr_autonomous_config.attr, - &dev_attr_enable_sar.attr, - &dev_attr_offset.attr, - &dev_attr_last_error.attr, - NULL -}; - -static const struct attribute_group stmvl53l1_attr_group = { - .attrs = stmvl53l1_attributes, -}; - - - -static int ctrl_reg_access(struct stmvl53l1_data *data, void *p) -{ - struct stmvl53l1_register reg; - size_t total_byte; - int rc; - - if (data->is_device_remove) - return -ENODEV; - - total_byte = offsetof(struct stmvl53l1_register, data.b); - if (copy_from_user(®, p, total_byte)) { - vl53l1_errmsg("%d, fail\n", __LINE__); - return -EFAULT; - } - - if (reg.cnt > STMVL53L1_MAX_CCI_XFER_SZ) { - vl53l1_errmsg("reg len %d > size limit\n", reg.cnt); - return -EINVAL; - } - - total_byte = offsetof(struct stmvl53l1_register, data.bytes[reg.cnt]); - /* for write get the effective data part of the structure */ - if (!reg.is_read) { - if (copy_from_user(®, p, total_byte)) { - vl53l1_errmsg(" data cpy fail\n"); - return -EFAULT; - } - } - - /* put back to user only needed amount of data */ - if (!reg.is_read) { - rc = VL53L1_WriteMulti(&data->stdev, (uint16_t)reg.index, - reg.data.bytes, reg.cnt); - reg.status = rc; - /* for write only write back status no data */ - total_byte = offsetof(struct stmvl53l1_register, data.b); - vl53l1_dbgmsg("wr %x %d bytes statu %d\n", - reg.index, reg.cnt, rc); - if (rc) - rc = store_last_error(data, rc); - } else { - rc = VL53L1_ReadMulti(&data->stdev, (uint16_t)reg.index, - reg.data.bytes, reg.cnt); - reg.status = rc; - vl53l1_dbgmsg("rd %x %d bytes status %d\n", - reg.index, reg.cnt, rc); - /* if fail do not copy back data only status */ - if (rc) { - total_byte = offsetof(struct stmvl53l1_register, - data.b); - rc = store_last_error(data, rc); - } - /* else the total byte is already the full pay-load with data */ - } - - if (copy_to_user(p, ®, total_byte)) { - vl53l1_errmsg("%d, fail\n", __LINE__); - return -EFAULT; - } - return rc; -} - - -/* - * - */ -static int ctrl_start(struct stmvl53l1_data *data) -{ - int rc; - - mutex_lock(&data->work_mutex); - - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - - vl53l1_dbgmsg(" state = %d\n", data->enable_sensor); - - /* turn on tof sensor only if it's not already started */ - if (data->enable_sensor == 0 && !data->is_calibrating) { - /* to start */ - rc = stmvl53l1_start(data); - } else{ - rc = -EBUSY; - } - vl53l1_dbgmsg(" final state = %d\n", data->enable_sensor); - -done: - mutex_unlock(&data->work_mutex); - - return rc; -} - -/** - * no lock version of ctrl_stop (mutex shall be held) - * - * @warning exist only for use in device exit to ensure "locked and started" - * may also beuse in soem erro handling when mutex is already locked - * @return 0 on success and was running >0 if already off <0 on error - */ -static int _ctrl_stop(struct stmvl53l1_data *data) -{ - int rc; - - vl53l1_dbgmsg("enter state = %d\n", data->enable_sensor); - /* be sure waiters are woken */ - data->is_data_valid = true; - /* turn on tof sensor only if it's not enabled by other client */ - if (data->enable_sensor == 1) { - /* to stop */ - rc = stmvl53l1_stop(data); - } else { - vl53l1_dbgmsg("already off did nothing\n"); - rc = 0; - } - stmvl53l1_insert_flush_events_lock(data); - vl53l1_dbgmsg(" final state = %d\n", data->enable_sensor); - - return rc; -} - -/** - * get work lock and stop sensor - * - * see @ref _ctrl_stop - * - * @param data device - * @return 0 on success EBUSY if arleady off - */ -static int ctrl_stop(struct stmvl53l1_data *data) -{ - int rc; - - mutex_lock(&data->work_mutex); - - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - - if (data->enable_sensor) { - rc = _ctrl_stop(data); - - if (data->cam_mode == 1) { - /* only restore sar mode when - it quits from camera mode */ - data->cam_mode = 0; - - if (data->sar_mode == 1) { - vl53l1_info("restore sar mode\n"); - activate_sar_mode(data); - } - } - } else - rc = -EBUSY; -done: - mutex_unlock(&data->work_mutex); - - return rc; -} - -/** - * get work lock and suspend sensor without checking sar mode - * - * @param data device - * @return 0 on success EBUSY if arleady off - */ -static int ctrl_suspend(struct stmvl53l1_data *data) -{ - int rc; - - mutex_lock(&data->work_mutex); - vl53l1_info("enter ctrl_suspend\n"); - if (data->enable_sensor) - rc = _ctrl_stop(data); - else - rc = -EBUSY; - mutex_unlock(&data->work_mutex); - - return rc; -} - -static int get_output_data_index(struct stmvl53l1_data *data) -{ - VL53L1_MultiRangingData_t *meas = &data->meas.multi_range_data; - int i; - int index = 0; - - /* multi_range_data already sort by proximity */ - if (data->output_mode == VL53L1_OUTPUTMODE_NEAREST) - return 0; - - /* else output mode is VL53L1_OUTPUTMODE_STRONGEST */ - for (i = 1; i < meas->NumberOfObjectsFound; i++) - if (meas->RangeData[i].SignalRateRtnMegaCps > - meas->RangeData[index].SignalRateRtnMegaCps) - index = i; - - return index; -} - -static int ctrl_getdata(struct stmvl53l1_data *data, void __user *p) -{ - int rc; - int index; - - mutex_lock(&data->work_mutex); - - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - index = get_output_data_index(data); - rc = copy_to_user(p, - &data->meas.multi_range_data.RangeData[index], - sizeof(stmvl531_range_data_t)); - if (rc) { - vl53l1_dbgmsg("copy to user fail %d", rc); - rc = -EFAULT; - } - -done: - mutex_unlock(&data->work_mutex); - - return rc; -} - -static bool is_new_data_for_me(struct stmvl53l1_data *data, pid_t pid, - struct list_head *head) -{ - return data->is_data_valid && !is_pid_in_list(pid, head); -} - -static bool sleep_for_data_condition(struct stmvl53l1_data *data, pid_t pid, - struct list_head *head) -{ - bool res; - - mutex_lock(&data->work_mutex); - res = is_new_data_for_me(data, pid, head); - mutex_unlock(&data->work_mutex); - - return res; -} - -static int sleep_for_data(struct stmvl53l1_data *data, pid_t pid, - struct list_head *head) -{ - int rc; - - mutex_unlock(&data->work_mutex); - rc = wait_event_killable(data->waiter_for_data, - sleep_for_data_condition(data, pid, head)); - mutex_lock(&data->work_mutex); - - return data->enable_sensor ? rc : -ENODEV; -} - -static int ctrl_getdata_blocking(struct stmvl53l1_data *data, void __user *p) -{ - int rc = 0; - pid_t pid = current->pid; - int index; - - mutex_lock(&data->work_mutex); - /* If device not ranging then exit on error */ - if (data->is_device_remove || !data->enable_sensor) { - rc = -ENODEV; - goto done; - } - /* sleep if data already read */ - if (!is_new_data_for_me(data, pid, &data->simple_data_reader_list)) - rc = sleep_for_data(data, pid, &data->simple_data_reader_list); - if (rc) - goto done; - - /* unless we got interrupted we return data to user and note read */ - index = get_output_data_index(data); - rc = copy_to_user(p, &data->meas.multi_range_data.RangeData[index], - sizeof(stmvl531_range_data_t)); - if (rc) - goto done; - rc = add_reader(pid, &data->simple_data_reader_list); - -done: - mutex_unlock(&data->work_mutex); - - return rc; -} - -/** - * Get multi zone data - * @param data - * @param p [out] user ptr to @ref VL53L1_MultiRangingData_t structure\n - * is always set but on EFAULT error - * - * @return - * @li 0 on success - * @li ENODEV if not ranging - * @li ENOEXEC not in multi zone mode - * @li EFAULT copy to user error - */ -static int ctrl_mz_data(struct stmvl53l1_data *data, void __user *p) -{ - int rc; - - mutex_lock(&data->work_mutex); - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - rc = copy_to_user(p, &data->meas.multi_range_data, - sizeof(VL53L1_MultiRangingData_t)); - if (rc) { - vl53l1_dbgmsg("copy to user fail %d", rc); - rc = -EFAULT; - } - if (!data->enable_sensor) { - rc = -ENODEV; - } else - if (!is_mz_mode(data)) - rc = -ENOEXEC; - -done: - mutex_unlock(&data->work_mutex); - - return rc; -} - -static int ctrl_mz_data_blocking(struct stmvl53l1_data *data, void __user *p) -{ - int rc = 0; - VL53L1_MultiRangingData_t *meas = &data->meas.multi_range_data; - pid_t pid = current->pid; - - mutex_lock(&data->work_mutex); - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - /* mode 2 or 3 */ - if (!is_mz_mode(data)) { - rc = -ENOEXEC; - goto done; - } - /* If device not ranging then exit on error */ - if (!data->enable_sensor) { - rc = -ENODEV; - goto done; - } - /* sleep if data already read */ - if (!is_new_data_for_me(data, pid, &data->mz_data_reader_list)) - rc = sleep_for_data(data, pid, &data->mz_data_reader_list); - if (rc) - goto done; - - /* unless we got interrupted we return data to user and note read */ - rc = copy_to_user(p, meas, sizeof(VL53L1_MultiRangingData_t)); - if (rc) - goto done; - rc = add_reader(pid, &data->mz_data_reader_list); - -done: - mutex_unlock(&data->work_mutex); - - return rc; -} - -static int ctrl_param_timing_budget(struct stmvl53l1_data *data, - struct stmvl53l1_parameter *param) -{ - int rc; - - if (param->is_read) { - /* GET */ - param->value = data->timing_budget; - param->status = 0; - rc = 0; - vl53l1_dbgmsg("TIMINGBUDGET_PAR get status %d", rc); - } else { - rc = stmvl53l1_set_timing_budget(data, param->value); - vl53l1_dbgmsg("TIMINGBUDGET_PAR set status %d is %d", rc, - data->timing_budget); - } - - return rc; -} -/** - * handle ioctl set param poll delay - * - * @param data - * @param param in/out - * @return - */ -static int ctrl_param_poll_delay(struct stmvl53l1_data *data, - struct stmvl53l1_parameter *param) -{ - int rc; - - if (param->is_read) { - param->value = data->poll_delay_ms; - param->status = 0; - vl53l1_dbgmsg("poll delay get %d ms", param->value); - rc = 0; - } else { - rc = stmvl53l1_set_poll_delay_ms(data, param->value); - vl53l1_dbgmsg("poll delay set %d ms", data->poll_delay_ms); - } - - return rc; -} - - -static int ctrl_param_mode(struct stmvl53l1_data *data, - struct stmvl53l1_parameter *param) -{ - int rc; - - if (param->is_read) { - param->value = data->preset_mode; - param->status = 0; - vl53l1_dbgmsg("get mode %d", param->value); - rc = 0; - } else { - rc = stmvl53l1_set_mode(data, param->value); - vl53l1_dbgmsg("rc %d req %d now %d", rc, - param->value, data->preset_mode); - } - return rc; -} - -static int ctrl_param_distance_mode(struct stmvl53l1_data *data, - struct stmvl53l1_parameter *param) -{ - int rc; - - if (param->is_read) { - param->value = data->distance_mode; - param->status = 0; - vl53l1_dbgmsg("get distance mode %d", param->value); - rc = 0; - } else { - rc = stmvl53l1_set_distance_mode(data, param->value); - vl53l1_dbgmsg("rc %d req %d now %d", rc, - param->value, data->distance_mode); - } - - return rc; -} - -static int ctrl_param_crosstalk_enable(struct stmvl53l1_data *data, - struct stmvl53l1_parameter *param) -{ - int rc; - - if (param->is_read) { - param->value = data->crosstalk_enable; - param->status = 0; - vl53l1_dbgmsg("get crosstalk enable mode %d", param->value); - rc = 0; - } else { - rc = stmvl53l1_set_crosstalk_enable(data, param->value); - vl53l1_dbgmsg("rc %d req %d now %d", rc, - param->value, data->crosstalk_enable); - } - - return rc; -} - -static int ctrl_param_output_mode(struct stmvl53l1_data *data, - struct stmvl53l1_parameter *param) -{ - int rc; - - if (param->is_read) { - param->value = data->output_mode; - param->status = 0; - vl53l1_dbgmsg("get output mode %d", param->value); - rc = 0; - } else { - rc = stmvl53l1_set_output_mode(data, param->value); - vl53l1_dbgmsg("rc %d req %d now %d", rc, - param->value, data->output_mode); - } - - return rc; -} - -static int ctrl_force_device_on_en(struct stmvl53l1_data *data, - struct stmvl53l1_parameter *param) -{ - int rc; - - if (param->is_read) { - param->value = data->force_device_on_en; - param->status = 0; - vl53l1_dbgmsg("get force device on %d", param->value); - rc = 0; - } else { - rc = stmvl53l1_set_force_device_on_en(data, param->value); - vl53l1_dbgmsg("rc %d req %d now %d", rc, - param->value, data->force_device_on_en); - } - - return rc; -} - -static int ctrl_param_last_error(struct stmvl53l1_data *data, - struct stmvl53l1_parameter *param) -{ - int rc; - - if (param->is_read) { - param->value = data->last_error; - param->status = 0; - vl53l1_dbgmsg("get last error %d", param->value); - rc = 0; - } else { - rc = -EINVAL; - } - - return rc; -} - -static int ctrl_param_camera_mode(struct stmvl53l1_data *data, - struct stmvl53l1_parameter *param) -{ - if (param->is_read) { - param->value = data->cam_mode; - param->status = 0; - vl53l1_dbgmsg("get camera mode %d", param->value); - } else { - data->cam_mode = param->value; - vl53l1_dbgmsg("set camera mode %d", param->value); - } - - return 0; -} - -static int ctrl_param_hw_rev(struct stmvl53l1_data *data, - struct stmvl53l1_parameter *param) -{ - int rc; - - if (param->is_read) { - param->value = data->hw_rev; - param->status = 0; - vl53l1_dbgmsg("get hw rev %d", param->value); - rc = 0; - } else { - rc = -EINVAL; - } - - return rc; -} - -/** - * handle ioctl set param mode - * - * @param data - * @param p - * @return 0 on success - */ -static int ctrl_params(struct stmvl53l1_data *data, void __user *p) -{ - int rc, rc2; - struct stmvl53l1_parameter param; - - mutex_lock(&data->work_mutex); - - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - rc = copy_from_user(¶m, p, sizeof(param)); - if (rc) { - rc = -EFAULT; - goto done; /* no need for status in user struct */ - } - switch (param.name) { - case VL53L1_POLLDELAY_PAR: - rc = ctrl_param_poll_delay(data, ¶m); - break; - case VL53L1_TIMINGBUDGET_PAR: - rc = ctrl_param_timing_budget(data, ¶m); - break; - case VL53L1_DEVICEMODE_PAR: - rc = ctrl_param_mode(data, ¶m); - break; - case VL53L1_DISTANCEMODE_PAR: - rc = ctrl_param_distance_mode(data, ¶m); - break; - case VL53L1_XTALKENABLE_PAR: - rc = ctrl_param_crosstalk_enable(data, ¶m); - break; - case VL53L1_OUTPUTMODE_PAR: - rc = ctrl_param_output_mode(data, ¶m); - break; - case VL53L1_FORCEDEVICEONEN_PAR: - rc = ctrl_force_device_on_en(data, ¶m); - break; - case VL53L1_LASTERROR_PAR: - rc = ctrl_param_last_error(data, ¶m); - break; - case VL53L1_CAMERAMODE_PAR: - rc = ctrl_param_camera_mode(data, ¶m); - break; - case VL53L1_HWREV_PAR: - rc = ctrl_param_hw_rev(data, ¶m); - break; - default: - vl53l1_errmsg("unknown or unsupported %d\n", param.name); - rc = -EINVAL; - } - /* copy back (status at least ) to user */ - if (param.is_read && rc == 0) { - rc2 = copy_to_user(p, ¶m, sizeof(param)); - if (rc2) { - rc = -EFAULT; /* kill prev status if that fail */ - vl53l1_errmsg("copy to user fail %d\n", rc); - } - } -done: - mutex_unlock(&data->work_mutex); - return rc; -} - -/** - * implement set/get roi ioctl - * @param data device - * @param p user space ioctl arg ptr - * @return 0 on success <0 errno code - * @li -EINVAL invalid number of roi - * @li -EBUSY when trying to set roi while ranging - * @li -EFAULT if cpy to/fm user fail for requested number of roi - */ -static int ctrl_roi(struct stmvl53l1_data *data, void __user *p) -{ - int rc; - int roi_cnt; - struct stmvl53l1_roi_full_t rois; - - mutex_lock(&data->work_mutex); - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - /* copy fixed part of args at first */ - rc = copy_from_user(&rois, p, - offsetof(struct stmvl53l1_roi_full_t, - roi_cfg.UserRois[0])); - if (rc) { - rc = -EFAULT; - goto done; - } - /* check no of roi limit is ok */ - roi_cnt = rois.roi_cfg.NumberOfRoi; - if (roi_cnt > VL53L1_MAX_USER_ZONES) { - vl53l1_errmsg("invalid roi spec cnt=%d > %d", - rois.roi_cfg.NumberOfRoi, - VL53L1_MAX_USER_ZONES); - rc = -EINVAL; - goto done; - } - - if (rois.is_read) { - int cpy_size; - - roi_cnt = MIN(rois.roi_cfg.NumberOfRoi, - data->roi_cfg.NumberOfRoi); - cpy_size = offsetof(VL53L1_RoiConfig_t, UserRois[roi_cnt]); - /* copy from local to user only effective part requested */ - rc = copy_to_user(&((struct stmvl53l1_roi_full_t *)p)->roi_cfg, - &data->roi_cfg, cpy_size); - vl53l1_dbgmsg("return %d of %d\n", roi_cnt, - data->roi_cfg.NumberOfRoi); - } else { - /* SET check cnt roi is ok */ - if (data->enable_sensor) { - rc = -EBUSY; - vl53l1_errmsg("can't set roi while ranging\n"); - goto done; - } - /* get full data that required from user */ - rc = copy_from_user(&rois, p, - offsetof(struct stmvl53l1_roi_full_t, - roi_cfg.UserRois[roi_cnt])); - if (rc) { - vl53l1_errmsg("get %d roi fm user fail", roi_cnt); - rc = -EFAULT; - goto done; - } - dump_roi(data->roi_cfg.UserRois, data->roi_cfg.NumberOfRoi); - /* we may ask ll driver to check but check is mode dependent - * and so we could get erroneous error back - */ - memcpy(&data->roi_cfg, &rois.roi_cfg, sizeof(data->roi_cfg)); - } -done: - mutex_unlock(&data->work_mutex); - return rc; -} - -static int ctrl_autonomous_config(struct stmvl53l1_data *data, void __user *p) -{ - int rc = 0; - struct stmvl53l1_autonomous_config_t full; - - mutex_lock(&data->work_mutex); - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - /* first copy all data */ - rc = copy_from_user(&full, p, sizeof(full)); - if (rc) { - rc = -EFAULT; - goto done; - } - - if (full.is_read) { - full.pollingTimeInMs = data->auto_pollingTimeInMs; - full.config = data->auto_config; - rc = copy_to_user(p, &full, sizeof(full)); - if (rc) - rc = -EFAULT; - } else { - if (data->enable_sensor) { - rc = -EBUSY; - vl53l1_errmsg("can't change config while ranging\n"); - goto done; - } - data->auto_pollingTimeInMs = full.pollingTimeInMs; - data->auto_config = full.config; - } - -done: - mutex_unlock(&data->work_mutex); - - return rc; -} - -static int ctrl_autonomous_config_cam(struct stmvl53l1_data *data, - void __user *p) -{ - int rc = 0; - struct stmvl53l1_autonomous_config_t full; - - mutex_lock(&data->work_mutex); - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - /* first copy all data */ - rc = copy_from_user(&full, p, sizeof(full)); - if (rc) { - rc = -EFAULT; - goto done; - } - - if (full.is_read) { - full.pollingTimeInMs = data->auto_pollingTimeInMs_cam; - full.config = data->auto_config_cam; - rc = copy_to_user(p, &full, sizeof(full)); - if (rc) - rc = -EFAULT; - } else { - if (data->enable_sensor) { - rc = -EBUSY; - vl53l1_errmsg("can't change config while ranging\n"); - goto done; - } - data->auto_pollingTimeInMs_cam = full.pollingTimeInMs; - data->auto_config_cam = full.config; - } - -done: - mutex_unlock(&data->work_mutex); - - return rc; -} - -static int ctrl_calibration_data(struct stmvl53l1_data *data, void __user *p) -{ - int rc; - struct stmvl53l1_ioctl_calibration_data_t calib; - int data_offset = offsetof(struct stmvl53l1_ioctl_calibration_data_t, - data); - - mutex_lock(&data->work_mutex); - - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - rc = copy_from_user(&calib, p, data_offset); - if (rc) { - vl53l1_errmsg("fail to detect read or write %d", rc); - rc = -EFAULT; - goto done; - } - - if (calib.is_read) { - memset(&calib.data, 0, sizeof(calib.data)); - rc = VL53L1_GetCalibrationData(&data->stdev, &calib.data); - if (rc) { - vl53l1_errmsg("VL53L1_GetCalibrationData fail %d", rc); - rc = store_last_error(data, rc); - goto done; - } - rc = copy_to_user(p + data_offset, &calib.data, - sizeof(calib.data)); - } else { - if (data->enable_sensor) { - rc = -EBUSY; - vl53l1_errmsg("can't set calib data while ranging\n"); - goto done; - } - rc = copy_from_user(&calib.data, p + data_offset, - sizeof(calib.data)); - if (rc) { - vl53l1_errmsg("fail to copy calib data"); - rc = -EFAULT; - goto done; - } - rc = VL53L1_SetCalibrationData(&data->stdev, &calib.data); - if (rc) { - vl53l1_errmsg("VL53L1_SetCalibrationData fail %d", rc); - rc = store_last_error(data, rc); - } - } - -done: - mutex_unlock(&data->work_mutex); - - return rc; -} - -static int ctrl_perform_calibration_ref_spad_lock(struct stmvl53l1_data *data, - struct stmvl53l1_ioctl_perform_calibration_t *calib) -{ - int rc = VL53L1_PerformRefSpadManagement(&data->stdev); - - if (rc) { - vl53l1_errmsg("VL53L1_PerformRefSpadManagement fail => %d", rc); - rc = store_last_error(data, rc); - } - - return rc; -} - -static int ctrl_perform_calibration_crosstalk_lock(struct stmvl53l1_data *data, - struct stmvl53l1_ioctl_perform_calibration_t *calib) -{ - int rc = VL53L1_PerformXTalkCalibration(&data->stdev, calib->param1); - - if (rc) { - vl53l1_errmsg("VL53L1_PerformXTalkCalibration fail => %d", rc); - rc = store_last_error(data, rc); - } - - return rc; -} - -static int ctrl_perform_calibration_offset_lock(struct stmvl53l1_data *data, - struct stmvl53l1_ioctl_perform_calibration_t *calib) -{ - int rc; - - vl53l1_info("VL53L1_SetOffsetCalibrationMode para: %d %d %d\n", calib->param1, - calib->param2, calib->param3); - rc = VL53L1_SetOffsetCalibrationMode(&data->stdev, calib->param1); - if (rc) { - vl53l1_errmsg("VL53L1_SetOffsetCalibrationMode fail => %d", rc); - rc = store_last_error(data, rc); - goto done; - } - rc = VL53L1_PerformOffsetCalibration(&data->stdev, calib->param2, - calib->param3); - if (rc) { - vl53l1_errmsg("VL53L1_PerformOffsetCalibration fail => %d", rc); - rc = store_last_error(data, rc); - } - -done: - return rc; -} - -static int ctrl_perform_calibration(struct stmvl53l1_data *data, void __user *p) -{ - int rc; - struct stmvl53l1_ioctl_perform_calibration_t calib; - - mutex_lock(&data->work_mutex); - - if (data->is_device_remove) { - rc = -ENODEV; - goto done; - } - data->is_calibrating = true; - rc = copy_from_user(&calib, p, sizeof(calib)); - if (rc) { - rc = -EFAULT; - goto done; - } - if (data->enable_sensor) { - rc = -EBUSY; - vl53l1_errmsg("can't perform calibration while ranging\n"); - goto done; - } - - rc = reset_release(data); - if (rc) - goto done; - - rc = VL53L1_StaticInit(&data->stdev); - if (rc) { - vl53l1_errmsg("VL53L1_StaticInit fail => %d", rc); - rc = store_last_error(data, rc); - goto done; - } - - switch (calib.calibration_type) { - case VL53L1_CALIBRATION_REF_SPAD: - rc = ctrl_perform_calibration_ref_spad_lock(data, - &calib); - break; - case VL53L1_CALIBRATION_CROSSTALK: - rc = ctrl_perform_calibration_ref_spad_lock(data, - &calib); - if (rc) { - vl53l1_errmsg("RefSpad Calibration error = %d\n", rc); - goto done; - } - rc = ctrl_perform_calibration_crosstalk_lock(data, - &calib); - break; - case VL53L1_CALIBRATION_OFFSET: - vl53l1_info("perform ref spad calibration first...\n"); - rc = ctrl_perform_calibration_ref_spad_lock(data, - &calib); - if (rc) { - vl53l1_errmsg("RefSpad Calibration error = %d\n", rc); - goto done; - } - rc = ctrl_perform_calibration_offset_lock(data, - &calib); - break; - default: - rc = -EINVAL; - break; - } - reset_hold(data); - -done: - data->is_calibrating = false; - mutex_unlock(&data->work_mutex); - - return rc; -} - -static int stmvl53l1_ioctl_handler( - struct stmvl53l1_data *data, - unsigned int cmd, unsigned long arg, - void __user *p) -{ - int rc = 0; - - if (!data) - return -EINVAL; - - switch (cmd) { - - case VL53L1_IOCTL_START: - vl53l1_dbgmsg("VL53L1_IOCTL_START\n"); - rc = ctrl_start(data); - break; - - case VL53L1_IOCTL_STOP: - vl53l1_dbgmsg("VL53L1_IOCTL_STOP\n"); - rc = ctrl_stop(data); - break; - - case VL53L1_IOCTL_SUSPEND: - vl53l1_dbgmsg("VL53L1_IOCTL_SUSPEND\n"); - rc = ctrl_suspend(data); - break; - - case VL53L1_IOCTL_GETDATAS: - /* vl53l1_dbgmsg("VL53L1_IOCTL_GETDATAS\n"); */ - rc = ctrl_getdata(data, p); - break; - - case VL53L1_IOCTL_GETDATAS_BLOCKING: - /* vl53l1_dbgmsg("VL53L1_IOCTL_GETDATAS_BLOCKING\n"); */ - rc = ctrl_getdata_blocking(data, p); - break; - - /* Register tool */ - case VL53L1_IOCTL_REGISTER: - vl53l1_dbgmsg("VL53L1_IOCTL_REGISTER\n"); - rc = ctrl_reg_access(data, p); - break; - - case VL53L1_IOCTL_PARAMETER: - vl53l1_dbgmsg("VL53L1_IOCTL_PARAMETER\n"); - rc = ctrl_params(data, p); - break; - - case VL53L1_IOCTL_ROI: - vl53l1_dbgmsg("VL53L1_IOCTL_ROI\n"); - rc = ctrl_roi(data, p); - break; - case VL53L1_IOCTL_MZ_DATA: - /* vl53l1_dbgmsg("VL53L1_IOCTL_MZ_DATA\n"); */ - rc = ctrl_mz_data(data, p); - break; - case VL53L1_IOCTL_MZ_DATA_BLOCKING: - /* vl53l1_dbgmsg("VL53L1_IOCTL_MZ_DATA_BLOCKING\n"); */ - rc = ctrl_mz_data_blocking(data, p); - break; - case VL53L1_IOCTL_CALIBRATION_DATA: - vl53l1_dbgmsg("VL53L1_IOCTL_CALIBRATION_DATA\n"); - rc = ctrl_calibration_data(data, p); - break; - case VL53L1_IOCTL_PERFORM_CALIBRATION: - vl53l1_dbgmsg("VL53L1_IOCTL_PERFORM_CALIBRATION\n"); - rc = ctrl_perform_calibration(data, p); - break; - case VL53L1_IOCTL_AUTONOMOUS_CONFIG: - vl53l1_dbgmsg("VL53L1_IOCTL_AUTONOMOUS_CONFIG\n"); - if (data->cam_mode == 0) - rc = ctrl_autonomous_config(data, p); - else - rc = ctrl_autonomous_config_cam(data, p); - break; - default: - rc = -EINVAL; - break; - } - - return rc; -} - - - -static int stmvl53l1_open(struct inode *inode, struct file *file) -{ - struct stmvl53l1_data *data = container_of(file->private_data, - struct stmvl53l1_data, miscdev); - - vl53l1_dbgmsg("Start\n"); - stmvl53l1_module_func_tbl.get(data->client_object); - vl53l1_dbgmsg("End\n"); - - return 0; -} - -static int stmvl53l1_release(struct inode *inode, struct file *file) -{ - struct stmvl53l1_data *data = container_of(file->private_data, - struct stmvl53l1_data, miscdev); - - vl53l1_dbgmsg("Start\n"); - stmvl53l1_module_func_tbl.put(data->client_object); - vl53l1_dbgmsg("End\n"); - - return 0; -} - - -/** max number or error per measure too abort */ -#define stvm531_get_max_meas_err(...) 3 -/** max number or error per stream too abort */ -#define stvm531_get_max_stream_err(...) 6 - -/** - * handle data retrieval and dispatch - * - * work lock must be held - * - * called form work or interrupt thread it must be a blocable context ! - * @param data the device - */ -static void stmvl53l1_on_newdata_event(struct stmvl53l1_data *data) -{ - int rc; - VL53L1_MultiRangingData_t *pmrange; - VL53L1_MultiRangingData_t *tmprange; - long ts_msec; - int i; - - do_gettimeofday(&data->meas.comp_tv); - ts_msec = stmvl53l1_tv_dif(&data->start_tv, &data->meas.comp_tv)/1000; - - pmrange = &data->meas.multi_range_data; - tmprange = &data->meas.tmp_range_data; - data->meas.intr++; - - /* use get data method based on active mode */ - switch (data->preset_mode) { - case VL53L1_PRESETMODE_LITE_RANGING: - case VL53L1_PRESETMODE_AUTONOMOUS: - rc = VL53L1_GetRangingMeasurementData(&data->stdev, - &pmrange->RangeData[0]); - /* set top level status so we got correct events in input - * subsystem. - */ - pmrange->RoiNumber = 0; - pmrange->RoiStatus = VL53L1_ROISTATUS_VALID_LAST; - pmrange->NumberOfObjectsFound = 1; - break; - case VL53L1_PRESETMODE_RANGING: - case VL53L1_PRESETMODE_MULTIZONES_SCANNING: - /* IMPORTANT : during VL53L1_GetMultiRangingData() call - * work_mutex is release during ipp. This is why we use - * tmp_range_data which is not access somewhere else. When we are - * back we then copy tmp_range_data in multi_range_data. - */ - - rc = VL53L1_GetMultiRangingData(&data->stdev, - &data->meas.tmp_range_data); - - /* be sure we got VL53L1_RANGESTATUS_NONE for object 0 if we got - * invalid roi or no object. So if client read data using - * VL53L1_IOCTL_GETDATAS we got correct status. - */ - if (tmprange->RoiStatus == VL53L1_ROISTATUS_NOT_VALID || - tmprange->NumberOfObjectsFound == 0) - tmprange->RangeData[0].RangeStatus = - VL53L1_RANGESTATUS_NONE; - - memcpy(pmrange, tmprange, sizeof(VL53L1_MultiRangingData_t)); - break; - default: - /* that must be some bug or data corruption stop now */ - rc = -1; - vl53l1_errmsg("unsorted mode %d=>stop\n", data->preset_mode); - _ctrl_stop(data); - } - /* check if not stopped yet - * as we may have been unlocked we must re-check - */ - if (data->enable_sensor == 0) { - vl53l1_dbgmsg("at meas #%d we got stoped\n", data->meas.cnt); - return; - } - if (rc) { - vl53l1_errmsg("VL53L1_GetRangingMeasurementData @%d %d", - __LINE__, rc); - data->meas.err_cnt++; - data->meas.err_tot++; - if (data->meas.err_cnt > stvm531_get_max_meas_err(data) || - data->meas.err_tot > stvm531_get_max_stream_err(data)) { - vl53l1_errmsg("on #%d %d err %d tot stop", - data->meas.cnt, data->meas.err_cnt, - data->meas.err_tot); - _ctrl_stop(data); - } - return; - } - - /* FIXME: remove when implemented by ll or bare driver */ - pmrange->RangeData[0].TimeStamp = ts_msec; - for (i = 1; i < pmrange->NumberOfObjectsFound; i++) - pmrange->RangeData[i].TimeStamp = ts_msec; - - data->meas.cnt++; - vl53l1_dbgmsg("#%3d %2d poll ts %5d status=%d obj cnt=%d\n", - data->meas.cnt, - data->meas.poll_cnt, - pmrange->RangeData[0].TimeStamp, - pmrange->RangeData[0].RangeStatus, - pmrange->NumberOfObjectsFound); -#if 0 - vl53l1_dbgmsg( -"meas m#%04d i#%04d p#%04d in %d ms data range status %d range %d\n", - (int)data->meas.cnt, - (int)data->meas.intr, - (int)data->meas.poll_cnt, - (int)stmvl53l1_tv_dif(&data->meas.start_tv, - &data->meas.comp_tv)/1000, - (int)data->meas.range_data.RangeStatus, - (int)data->meas.range_data.RangeMilliMeter); -#endif - /* ready that is not always on each new data event */ - - /* mark data as valid from now */ - data->is_data_valid = true; - - /* wake up sleeping client */ - wake_up_data_waiters(data); - - /* push data to input susbys and only and make avl for ioctl*/ - stmvl53l1_input_push_data(data); - stmvl53l1_insert_flush_events_lock(data); - - /* roll time now data got used */ - data->meas.start_tv = data->meas.comp_tv; - data->meas.poll_cnt = 0; - data->meas.err_cnt = 0; -} - - -/** - * * handle interrupt/pusdo irq by polling handling - * - * work lock must be held - * - * @param data driver - * @return 0 on success - */ -static int stmvl53l1_intr_process(struct stmvl53l1_data *data) -{ - uint8_t data_rdy; - int rc = 0; - struct timeval tv_now; - - if (!data->enable_sensor) - goto done; - - data->meas.poll_cnt++; - rc = VL53L1_GetMeasurementDataReady(&data->stdev, &data_rdy); - if (rc) { - vl53l1_errmsg("GetMeasurementDataReady @%d %d, fail\n", - __LINE__, rc); - /* too many successive fail => stop but do not try to do any new - * i/o - */ - goto stop_io; - } - - if (!data_rdy) { - /* FIXME this part to completely skip - * if using interrupt and sure we have - * no false interrupt to handle or no to do any timing check - */ - long poll_ms; - - do_gettimeofday(&tv_now); - poll_ms = stmvl53l1_tv_dif(&data->meas.start_tv, &tv_now)/1000; - if (poll_ms > data->timing_budget*4) { - vl53l1_errmsg("we're polling %ld too long\n", poll_ms); - /* fixme stop or just warn ? */ - goto stop_io; - } - /* keep trying it could be intr with no processing */ - work_dbg("intr with no data rdy"); - goto done; - } - /* we have data to handle */ - /* first irq after reset has no data so we skip it */ - if (data->is_first_irq) - data->is_first_irq = false; - else - stmvl53l1_on_newdata_event(data); - /* enable_sensor could change on event handling check again */ - if (data->enable_sensor) { - /* clear interrupt and continue ranging */ - work_dbg("intr clr"); - /* In autonomous mode, bare driver will trigger stop/start - * sequence. In that case it wall call platform delay functions. - * So allow delay in VL53L1_ClearInterruptAndStartMeasurement() - * call. - */ - data->is_delay_allowed = data->allow_hidden_start_stop; - rc = VL53L1_ClearInterruptAndStartMeasurement(&data->stdev); - data->is_delay_allowed = 0; - if (rc) { - /* go to stop but stop any new i/o for dbg */ - vl53l1_errmsg("Cltr intr restart fail %d\n", rc); - goto stop_io; - } - } -done: - return rc; -stop_io: - /* too many successive fail take action => stop but do not try to do - * any new i/o - */ - vl53l1_errmsg("GetDatardy fail stop\n"); - data->enable_sensor = 0; - return rc; - -} - -static void stmvl53l1_work_handler(struct work_struct *work) -{ - struct stmvl53l1_data *data; - - data = container_of(work, struct stmvl53l1_data, dwork.work); - work_dbg("enter"); - mutex_lock(&data->work_mutex); - stmvl53l1_intr_process(data); - if (data->poll_mode && data->enable_sensor) { - /* re-sched ourself */ - schedule_delayed_work(&data->dwork, - msecs_to_jiffies(data->poll_delay_ms)); - } - mutex_unlock(&data->work_mutex); -} - -static void stmvl53l1_input_push_data_object(struct stmvl53l1_data *data, - int roi, int obj, stmvl531_range_data_t *meas, int obj_number, - VL53L1_RoiStatus RoiStatus) -{ - struct input_dev *input = data->input_dev_ps; - FixPoint1616_t LimitCheckCurrent; - VL53L1_Error st = VL53L1_ERROR_NONE; - - /* set the distance value to max if range - * status is invalid in autonomous mode */ - if (data->preset_mode == VL53L1_PRESETMODE_AUTONOMOUS && - meas->RangeStatus != VL53L1_RANGESTATUS_RANGE_VALID) - meas->RangeMilliMeter = STMVL53L1_MAX_DISTANCE; - - input_report_abs(input, ABS_DISTANCE, (meas->RangeMilliMeter + 5) / 10); - input_report_abs(input, ABS_HAT0X, meas->TimeStamp / 1000); - input_report_abs(input, ABS_HAT0Y, (meas->TimeStamp % 1000) * 1000); - input_report_abs(input, ABS_HAT1X, meas->RangeMilliMeter); - input_report_abs(input, ABS_HAT1Y, meas->RangeStatus); - input_report_abs(input, ABS_HAT2X, meas->SignalRateRtnMegaCps); - input_report_abs(input, ABS_HAT2Y, meas->AmbientRateRtnMegaCps); - input_report_abs(input, ABS_HAT3X, meas->SigmaMilliMeter); - input_report_abs(input, ABS_HAT3Y, meas->DmaxMilliMeter); - st = VL53L1_GetLimitCheckCurrent(&data->stdev, - VL53L1_CHECKENABLE_SIGMA_FINAL_RANGE, &LimitCheckCurrent); - if (st == VL53L1_ERROR_NONE) - input_report_abs(input, ABS_WHEEL, LimitCheckCurrent); - input_report_abs(input, ABS_MISC, meas->EffectiveSpadRtnCount); - input_report_abs(input, ABS_BRAKE, (RoiStatus << 24) | (roi << 16) | - (obj_number << 8) | obj); - input_report_abs(input, ABS_TILT_X, (meas->RangeMaxMilliMeter << 16) | - meas->RangeMinMilliMeter); - input_report_abs(input, ABS_TOOL_WIDTH, meas->RangeQualityLevel); - - input_sync(input); -} - -static void stmvl53l1_input_push_data(struct stmvl53l1_data *data) -{ - VL53L1_MultiRangingData_t *meas = &data->meas.multi_range_data; - int obj_number = meas->NumberOfObjectsFound; - int i; - - /* be sure threre is at least one object */ - obj_number = obj_number ? obj_number : 1; - for (i = 0; i < obj_number; i++) - stmvl53l1_input_push_data_object(data, meas->RoiNumber, i, - &meas->RangeData[i], obj_number, meas->RoiStatus); -} - -static int stmvl53l1_input_setup(struct stmvl53l1_data *data) -{ - int rc; - struct input_dev *idev; - /* Register to Input Device */ - idev = input_allocate_device(); - if (idev == NULL) { - rc = -ENOMEM; - vl53l1_errmsg("%d error:%d\n", __LINE__, rc); - goto exit_err; - } - /* setup all event */ - set_bit(EV_ABS, idev->evbit); - /* range in cm*/ - input_set_abs_params(idev, ABS_DISTANCE, 0, 0xff, 0, 0); - /* tv_sec */ - input_set_abs_params(idev, ABS_HAT0X, 0, 0xffffffff, 0, 0); - /* tv_usec */ - input_set_abs_params(idev, ABS_HAT0Y, 0, 0xffffffff, 0, 0); - /* range in_mm */ - input_set_abs_params(idev, ABS_HAT1X, 0, 765, 0, 0); - /* error code change maximum to 0xff for more flexibility */ - input_set_abs_params(idev, ABS_HAT1Y, 0, 0xff, 0, 0); - /* rtnRate */ - input_set_abs_params(idev, ABS_HAT2X, 0, 0xffffffff, 0, 0); - /* rtn_amb_rate */ - input_set_abs_params(idev, ABS_HAT2Y, 0, 0xffffffff, 0, 0); - /* SigmaMilliMeter */ - input_set_abs_params(idev, ABS_HAT3X, 0, 0xffffffff, 0, 0); - /* dmax */ - input_set_abs_params(idev, ABS_HAT3Y, 0, 0xffffffff, 0, 0); - /* LimitCheckCurrent*/ - input_set_abs_params(idev, ABS_WHEEL, 0, 0xffffffff, 0, 0); - /* EffectiveSpadRtnCount */ - input_set_abs_params(idev, ABS_MISC, 0, 0xffffffff, 0, 0); - /* roi number in 16 msb bits with object number in 16 lsb bits */ - input_set_abs_params(idev, ABS_BRAKE, 0, 0xffffffff, 0, 0); - /* RangeMaxMilliMeter in 16 msb bits with RangeMinMilliMeter in lsb */ - input_set_abs_params(idev, ABS_TILT_X, 0, 0xffffffff, 0, 0); - /* ConfidenceLevel */ - input_set_abs_params(idev, ABS_TOOL_WIDTH, 0, 0xffffffff, 0, 0); - - /* flushCount */ - input_set_abs_params(idev, ABS_GAS, 0, 0xffffffff, 0, 0); - - /* those are still free to use - * input_set_abs_params(idev, ABS_RUDDER, 0, 0xffffffff, 0, 0); - * input_set_abs_params(idev, ABS_TILT_Y, 0, 0xffffffff, 0, 0); - */ - - idev->name = VL53L1_INPUT_DEVICE_NAME; - rc = input_register_device(idev); - if (rc) { - rc = -ENOMEM; - vl53l1_errmsg("%d error:%d\n", __LINE__, rc); - goto exit_free_dev_ps; - } - /* setup drv data */ - input_set_drvdata(idev, data); - data->input_dev_ps = idev; - return 0; - - -exit_free_dev_ps: - input_free_device(data->input_dev_ps); -exit_err: - return rc; -} - -/** - * handler to be called by interface module on interrupt - * - * managed poll/irq filtering in case poll/irq can be soft forced - * and the module side still fire interrupt - * - * @param data - * @return 0 if all ok else for error - */ -int stmvl53l1_intr_handler(struct stmvl53l1_data *data) -{ - int rc; - - mutex_lock(&data->work_mutex); - - /* handle it only if if we are not stopped */ - if (data->enable_sensor) { - rc = stmvl53l1_intr_process(data); - } else { - /* it's likely race/last unhandled interrupt after - * stop. - * Such dummy irq also occurred during offset and crosstalk - * calibration procedures. - */ - vl53l1_dbgmsg("got intr but not on (dummy or calibration)\n"); - rc = 0; - } - - mutex_unlock(&data->work_mutex); - return rc; -} - - -/** - * One time device setup - * - * call by bus (i2c/cci) level probe to finalize non bus related device setup - * - * @param data The device data - * @return 0 on success - */ -int stmvl53l1_setup(struct stmvl53l1_data *data) -{ - int rc = 0; - VL53L1_CalibrationData_t cali_data; - VL53L1_DeviceInfo_t dev_info; - - vl53l1_dbgmsg("Enter\n"); - - data->hw_rev = 0; - - /* acquire an id */ - data->id = allocate_dev_id(); - if (data->id < 0) { - vl53l1_errmsg("too many device already created"); - return -1; - } - vl53l1_dbgmsg("Dev id %d is @%p\n", data->id, data); - stmvl53l1_dev_table[data->id] = data; - - /* init mutex */ - /* mutex_init(&data->update_lock); */ - mutex_init(&data->work_mutex); - - /* init work handler */ - INIT_DELAYED_WORK(&data->dwork, stmvl53l1_work_handler); - - /* init ipp side */ - stmvl53l1_ipp_setup(data); - - data->force_device_on_en = force_device_on_en_default; - data->reset_state = 1; - data->is_calibrating = false; - data->last_error = VL53L1_ERROR_NONE; - data->is_device_remove = false; - - /* vdd will be controlled in reset_release() */ - rc = reset_release(data); - if (rc) - goto exit_ipp_cleanup; - - rc = stmvl53l1_input_setup(data); - if (rc) - goto exit_ipp_cleanup; - - /* init blocking ioctl stuff */ - INIT_LIST_HEAD(&data->simple_data_reader_list); - INIT_LIST_HEAD(&data->mz_data_reader_list); - init_waitqueue_head(&data->waiter_for_data); - data->is_data_valid = false; - - /* Register sysfs hooks under input dev */ - rc = sysfs_create_group(&data->input_dev_ps->dev.kobj, - &stmvl53l1_attr_group); - if (rc) { - rc = -ENOMEM; - vl53l1_errmsg("%d error:%d\n", __LINE__, rc); - goto exit_unregister_dev_ps; - } - - data->enable_sensor = 0; - - data->poll_delay_ms = STMVL53L1_CFG_POLL_DELAY_MS; - data->timing_budget = STMVL53L1_CFG_TIMING_BUDGET_US; - data->preset_mode = STMVL53L1_CFG_DEFAULT_MODE; - data->distance_mode = STMVL53L1_CFG_DEFAULT_DISTANCE_MODE; - data->crosstalk_enable = STMVL53L1_CFG_DEFAULT_CROSSTALK_ENABLE; - data->output_mode = STMVL53L1_CFG_DEFAULT_OUTPUT_MODE; - data->cam_mode = 0; - data->sar_mode = 0; - stmvl53l1_setup_auto_config(data); - - data->is_delay_allowed = true; - /* need to be done once */ - rc = VL53L1_DataInit(&data->stdev); - data->is_delay_allowed = false; - if (rc) { - vl53l1_errmsg("VL53L1_data_init %d\n", rc); - goto exit_unregister_dev_ps; - } - - rc = VL53L1_GetDeviceInfo(&data->stdev, &dev_info); - if (rc) { - vl53l1_errmsg("VL53L1_GetDeviceInfo %d\n", rc); - goto exit_unregister_dev_ps; - } - vl53l1_errmsg("device Product type 0x%x name %s\ntype %s\n", - dev_info.ProductType, dev_info.Name, dev_info.Type); - - data->hw_rev = dev_info.ProductRevisionMinor; - - memset(&cali_data, 0, sizeof(cali_data)); - rc = VL53L1_GetCalibrationData(&data->stdev, &cali_data); - if (rc) - vl53l1_errmsg("VL53L1_GetCalibrationData fail\n"); - else { - data->inner_offset = cali_data.customer.mm_config__inner_offset_mm; - data->outer_offset = cali_data.customer.mm_config__outer_offset_mm; - - /* update xtalk values */ - cali_data.customer.algo__crosstalk_compensation_plane_offset_kcps - = data->xtalk_offset; - cali_data.customer.algo__crosstalk_compensation_x_plane_gradient_kcps - = data->xtalk_x; - cali_data.customer.algo__crosstalk_compensation_y_plane_gradient_kcps - = data->xtalk_y; - - cali_data.xtalkhisto.xtalk_shape.VL53L1_PRM_00015 = 0 ; - cali_data.xtalkhisto.xtalk_shape.VL53L1_PRM_00016 = 24; - cali_data.xtalkhisto.xtalk_shape.VL53L1_PRM_00017 = 12; - cali_data.xtalkhisto.xtalk_shape.bin_data[0] = 353; - cali_data.xtalkhisto.xtalk_shape.bin_data[1] = 472; - cali_data.xtalkhisto.xtalk_shape.bin_data[2] = 472; - cali_data.xtalkhisto.xtalk_shape.bin_data[3] = 353; - cali_data.xtalkhisto.xtalk_shape.bin_data[4] = 0; - cali_data.xtalkhisto.xtalk_shape.bin_data[5] = 0; - cali_data.xtalkhisto.xtalk_shape.bin_data[6] = 0; - cali_data.xtalkhisto.xtalk_shape.bin_data[7] = 0; - cali_data.xtalkhisto.xtalk_shape.bin_data[8] = 0; - cali_data.xtalkhisto.xtalk_shape.bin_data[9] = 0; - cali_data.xtalkhisto.xtalk_shape.bin_data[10] = 0; - cali_data.xtalkhisto.xtalk_shape.bin_data[11] = 0; - cali_data.xtalkhisto.xtalk_shape.phasecal_result__reference_phase = 10240; - cali_data.xtalkhisto.xtalk_shape.phasecal_result__vcsel_start = 6; - cali_data.xtalkhisto.xtalk_shape.cal_config__vcsel_start = 9; - cali_data.xtalkhisto.xtalk_shape.vcsel_width = 40; - cali_data.xtalkhisto.xtalk_shape.VL53L1_PRM_00018 = 48332; - cali_data.xtalkhisto.xtalk_shape.zero_distance_phase = 4096; - cali_data.gain_cal.standard_ranging_gain_factor = 0x07D7; - cali_data.gain_cal.histogram_ranging_gain_factor = 0x07CC; - - rc = VL53L1_SetCalibrationData(&data->stdev, &cali_data); - if (rc) - vl53l1_errmsg("VL53L1_SetCalibrationData fail\n"); - else { - vl53l1_info("device xtalk data updated: %u %d %d\n", - cali_data.customer.algo__crosstalk_compensation_plane_offset_kcps, - cali_data.customer.algo__crosstalk_compensation_x_plane_gradient_kcps, - cali_data.customer.algo__crosstalk_compensation_y_plane_gradient_kcps); - } - } - - /* if working in interrupt ask intr to enable and hook the handler */ - data->poll_mode = 0; - rc = stmvl53l1_module_func_tbl.start_intr(data->client_object, - &data->poll_mode); - if (rc < 0) { - vl53l1_errmsg("can't start no intr\n"); - goto exit_unregister_dev_ps; - } - - data->is_first_irq = true; - data->is_delay_allowed = false; - - /* to register as a misc device */ - data->miscdev.minor = MISC_DYNAMIC_MINOR; - /* multiple dev name use id in name but 1st */ - if (data->id == 0) - strcpy(data->name, VL53L1_MISC_DEV_NAME); - else - sprintf(data->name, "%s%d", VL53L1_MISC_DEV_NAME, data->id); - - data->miscdev.name = data->name; - data->miscdev.fops = &stmvl53l1_ranging_fops; - vl53l1_errmsg("Misc device registration name:%s\n", data->miscdev.name); - rc = misc_register(&data->miscdev); - if (rc != 0) { - vl53l1_errmsg("misc dev reg fail\n"); - goto exit_unregister_dev_ps; - } - /* bring back device under reset */ - reset_hold(data); - - return 0; - -exit_unregister_dev_ps: - input_unregister_device(data->input_dev_ps); -exit_ipp_cleanup: - stmvl53l1_ipp_cleanup(data); - - return rc; -} - -/* Attribute: name (RO) */ -static ssize_t name_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - return scnprintf(buf, PAGE_SIZE, VL53L1_INPUT_DEVICE_NAME); -} - -static struct device_attribute laser_name_attributes = __ATTR_RO(name); - -#define LASERDEV_MINOR_BASE 256 -#define LASERDEV_MINOR_MAX 32 - -int stmvl53l1_sysfs_laser(struct stmvl53l1_data *data, bool create) -{ - int i, error = 0; - static struct class *laser_class; - static struct device *laser_class_dev; - static int minor; - - if (data == NULL) { - vl53l1_errmsg("stmvl53l1 dev data is null!\n"); - return -ENODEV; - } - - if (create) { - minor = input_get_new_minor(data->sysfs_base, 1, false); - if (minor < 0) - minor = input_get_new_minor(LASERDEV_MINOR_BASE, - LASERDEV_MINOR_MAX, true); - vl53l1_info("assigned minor %d\n", minor); - - laser_class = class_create(THIS_MODULE, "laser"); - if (IS_ERR(laser_class)) { - error = PTR_ERR(laser_class); - laser_class = NULL; - return error; - } - - laser_class_dev = device_create(laser_class, NULL, - MKDEV(INPUT_MAJOR, minor), - data, STMVL53L1_DRV_NAME); - if (IS_ERR(laser_class_dev)) { - error = PTR_ERR(laser_class_dev); - laser_class_dev = NULL; - return error; - } - - for (i = 0; stmvl53l1_attributes[i] != NULL; ++i) { - error = sysfs_create_file(&laser_class_dev->kobj, - stmvl53l1_attributes[i]); - if (error) - break; - } - - if (error) - goto device_destroy; - - error = device_create_file(laser_class_dev, - &laser_name_attributes); - if (error) - goto device_destroy; - } else { - if (!laser_class || !laser_class_dev) - return -ENODEV; - - device_remove_file(laser_class_dev, - &laser_name_attributes); - for (i = 0; stmvl53l1_attributes[i] != NULL; ++i) - sysfs_remove_file(&laser_class_dev->kobj, - stmvl53l1_attributes[i]); - - device_unregister(laser_class_dev); - class_unregister(laser_class); - } - - vl53l1_info("laser sysfs %s(0x%x) created\n", - STMVL53L1_DRV_NAME, data->sysfs_base); - return 0; - -device_destroy: - for (--i; i >= 0; --i) - sysfs_remove_file(&laser_class_dev->kobj, - stmvl53l1_attributes[i]); - device_destroy(laser_class, MKDEV(INPUT_MAJOR, minor)); - laser_class_dev = NULL; - class_unregister(laser_class); - vl53l1_errmsg("error creating laser class\n"); - - return -ENODEV; -} - -void stmvl53l1_cleanup(struct stmvl53l1_data *data) -{ -int rc; - - vl53l1_dbgmsg("enter\n"); - rc = _ctrl_stop(data); - if (rc < 0) - vl53l1_errmsg("stop failed %d aborting anyway\n", rc); - - if (data->input_dev_ps) { - vl53l1_dbgmsg("to remove sysfs group\n"); - sysfs_remove_group(&data->input_dev_ps->dev.kobj, - &stmvl53l1_attr_group); - - vl53l1_dbgmsg("to unregister input dev\n"); - input_unregister_device(data->input_dev_ps); - } - - if (!IS_ERR(data->miscdev.this_device) && - data->miscdev.this_device != NULL) { - vl53l1_dbgmsg("to unregister misc dev\n"); - misc_deregister(&data->miscdev); - } - stmvl53l1_ipp_cleanup(data); - /* be sure device is put under reset */ - data->force_device_on_en = false; - reset_hold(data); - vl53l1_dbgmsg("done\n"); - deallocate_dev_id(data->id); - data->is_device_remove = true; -} - -#ifdef CONFIG_COMPAT -static long stmvl53l1_compat_ioctl(struct file *file, - unsigned int cmd, unsigned long arg) -{ - int ret; - struct stmvl53l1_data *data = - container_of(file->private_data, - struct stmvl53l1_data, miscdev); - ret = stmvl53l1_ioctl_handler(data, cmd, arg, compat_ptr(arg)); - return ret; -} -#endif - -static long stmvl53l1_ioctl(struct file *file, - unsigned int cmd, unsigned long arg){ - long ret; - struct stmvl53l1_data *data = - container_of(file->private_data, - struct stmvl53l1_data, miscdev); - ret = stmvl53l1_ioctl_handler(data, cmd, arg, (void __user *)arg); - return ret; -} - -static int __init stmvl53l1_init(void) -{ - int rc = -1; - - vl53l1_dbgmsg("Enter\n"); - - rc = stmvl53l1_ipp_init(); - if (rc) - goto done; - /* i2c/cci client specific init function */ - rc = stmvl53l1_module_func_tbl.init(); -done: - vl53l1_dbgmsg("End %d\n", rc); - - return rc; -} - -static void __exit stmvl53l1_exit(void) -{ - vl53l1_dbgmsg("Enter\n"); - stmvl53l1_module_func_tbl.deinit(NULL); - if (stmvl53l1_module_func_tbl.clean_up != NULL) - stmvl53l1_module_func_tbl.clean_up(); - stmvl53l1_ipp_exit(); - vl53l1_dbgmsg("End\n"); -} - - -/* MODULE_DEVICE_TABLE(i2c, stmvl53l1_id); */ -MODULE_AUTHOR("STMicroelectronics Imaging Division"); -MODULE_DESCRIPTION("ST FlightSense Time-of-Flight sensor driver"); -MODULE_LICENSE("GPL"); -MODULE_VERSION(DRIVER_VERSION); - -module_init(stmvl53l1_init); -module_exit(stmvl53l1_exit); diff --git a/drivers/input/misc/vl53L1/vl53l1_platform.h b/drivers/input/misc/vl53L1/vl53l1_platform.h deleted file mode 100644 index cd5e51a7ea4d..000000000000 --- a/drivers/input/misc/vl53L1/vl53l1_platform.h +++ /dev/null @@ -1,447 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#ifndef _VL53L1_PLATFORM_H_ -#define _VL53L1_PLATFORM_H_ - -/*#define VL53L1_LOG_ENABLE 1 */ - - -#include "vl53l1_ll_def.h" -#include "vl53l1_platform_log.h" - -#define VL53L1_IPP_API -#include "vl53l1_platform_ipp_imports.h" -#include "vl53l1_platform_user_data.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** - * @file vl53l1_platform.h - * - * @brief All end user OS/platform/application porting - */ - - - -/** - * @brief Initialise platform comms. - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] comms_type : selects between I2C and SPI - * @param[in] comms_speed_khz : unsigned short containing the I2C speed in kHz - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_CommsInitialise( - VL53L1_Dev_t *pdev, - uint8_t comms_type, - uint16_t comms_speed_khz); - - -/** - * @brief Close platform comms. - * - * @param[in] pdev : pointer to device structure (device handle) - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_CommsClose( - VL53L1_Dev_t *pdev); - - -/** - * @brief Writes the supplied byte buffer to the device - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] index : uint16_t register index value - * @param[in] pdata : pointer to uint8_t (byte) buffer containing the data - * to be written - * @param[in] count : number of bytes in the supplied byte buffer - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_WriteMulti( - VL53L1_Dev_t *pdev, - uint16_t index, - uint8_t *pdata, - uint32_t count); - - -/** - * @brief Reads the requested number of bytes from the device - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] index : uint16_t register index value - * @param[out] pdata : pointer to the uint8_t (byte) buffer to store read - * data - * @param[in] count : number of bytes to read - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_ReadMulti( - VL53L1_Dev_t *pdev, - uint16_t index, - uint8_t *pdata, - uint32_t count); - - -/** - * @brief Writes a single byte to the device - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] index : uint16_t register index value - * @param[in] data : uint8_t data value to write - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_WrByte( - VL53L1_Dev_t *pdev, - uint16_t index, - uint8_t data); - - -/** - * @brief Writes a single word (16-bit unsigned) to the device - * - * Manages the big-endian nature of the device register map - * (first byte written is the MS byte). - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] index : uint16_t register index value - * @param[in] data : uin16_t data value write - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_WrWord( - VL53L1_Dev_t *pdev, - uint16_t index, - uint16_t data); - - -/** - * @brief Writes a single dword (32-bit unsigned) to the device - * - * Manages the big-endian nature of the device register map - * (first byte written is the MS byte). - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] index : uint16_t register index value - * @param[in] data : uint32_t data value to write - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_WrDWord( - VL53L1_Dev_t *pdev, - uint16_t index, - uint32_t data); - - - -/** - * @brief Reads a single byte from the device - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] index : uint16_t register index - * @param[out] pdata : pointer to uint8_t data value - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - * - */ - -VL53L1_Error VL53L1_RdByte( - VL53L1_Dev_t *pdev, - uint16_t index, - uint8_t *pdata); - - -/** - * @brief Reads a single word (16-bit unsigned) from the device - * - * Manages the big-endian nature of the device (first byte read is the MS byte). - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] index : uint16_t register index value - * @param[out] pdata : pointer to uint16_t data value - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_RdWord( - VL53L1_Dev_t *pdev, - uint16_t index, - uint16_t *pdata); - - -/** - * @brief Reads a single dword (32-bit unsigned) from the device - * - * Manages the big-endian nature of the device (first byte read is the MS byte). - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] index : uint16_t register index value - * @param[out] pdata : pointer to uint32_t data value - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_RdDWord( - VL53L1_Dev_t *pdev, - uint16_t index, - uint32_t *pdata); - - - -/** - * @brief Implements a programmable wait in us - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] wait_us : integer wait in micro seconds - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_WaitUs( - VL53L1_Dev_t *pdev, - int32_t wait_us); - - -/** - * @brief Implements a programmable wait in ms - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] wait_ms : integer wait in milliseconds - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_WaitMs( - VL53L1_Dev_t *pdev, - int32_t wait_ms); - - -/** -* @brief Get the frequency of the timer used for ranging results time stamps -* -* @param[out] ptimer_freq_hz : pointer for timer frequency -* - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error -*/ - -VL53L1_Error VL53L1_GetTimerFrequency(int32_t *ptimer_freq_hz); - -/** -* @brief Get the timer value in units of timer_freq_hz (see -* VL53L1_get_timestamp_frequency()) -* -* @param[out] ptimer_count : pointer for timer count value -* - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error -*/ - -VL53L1_Error VL53L1_GetTimerValue(int32_t *ptimer_count); - - -/** - * @brief Set the mode of a specified GPIO pin - * - * @param pin - an identifier specifying the pin being modified - defined per - * platform - * - * @param mode - an identifier specifying the requested mode - defined per - * platform - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_GpioSetMode(uint8_t pin, uint8_t mode); - - -/** - * @brief Set the value of a specified GPIO pin - * - * @param pin - an identifier specifying the pin being modified - defined per - * platform - * - * @param value - a value to set on the GPIO pin - typically 0 or 1 - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_GpioSetValue(uint8_t pin, uint8_t value); - - -/** - * @brief Get the value of a specified GPIO pin - * - * @param pin - an identifier specifying the pin being modified - defined per - * platform - * - * @param pvalue - a value retrieved from the GPIO pin - typically 0 or 1 - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_GpioGetValue(uint8_t pin, uint8_t *pvalue); - - -/** - * @brief Sets and clears the XShutdown pin on the Ewok - * - * @param value - the value for xshutdown - 0 = in reset, 1 = operational - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_GpioXshutdown(uint8_t value); - - -/** - * @brief Sets and clears the Comms Mode pin (NCS) on the Ewok - * - * @param value - the value for comms select - 0 = I2C, 1 = SPI - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_GpioCommsSelect(uint8_t value); - - -/** - * @brief Enables and disables the power to the Ewok module - * - * @param value - the state of the power supply - 0 = power off, 1 = power on - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_GpioPowerEnable(uint8_t value); - -/** - * @brief Enables callbacks to the supplied funtion pointer when Ewok interrupts - * ocurr - * - * @param function - a function callback supplies by the caller, for interrupt - * notification - * @param edge_type - falling edge or rising edge interrupt detection - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_GpioInterruptEnable(void (*function)(void), - uint8_t edge_type); - - -/** - * @brief Disables the callback on Ewok interrupts - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_GpioInterruptDisable(void); - - -/* - * @brief Gets current system tick count in [ms] - * - * @return time_ms : current time in [ms] - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_GetTickCount( - uint32_t *ptime_ms); - - -/** - * @brief Register "wait for value" polling routine - * - * Port of the V2WReg Script function WaitValueMaskEx() - * - * @param[in] pdev : pointer to device structure (device handle) - * @param[in] timeout_ms : timeout in [ms] - * @param[in] index : uint16_t register index value - * @param[in] value : value to wait for - * @param[in] mask : mask to be applied before comparison with value - * @param[in] poll_delay_ms : polling delay been each read transaction in [ms] - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_WaitValueMaskEx( - VL53L1_Dev_t *pdev, - uint32_t timeout_ms, - uint16_t index, - uint8_t value, - uint8_t mask, - uint32_t poll_delay_ms); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/vl53l1_platform_ipp.h b/drivers/input/misc/vl53L1/vl53l1_platform_ipp.h deleted file mode 100644 index 97144b30caf4..000000000000 --- a/drivers/input/misc/vl53L1/vl53l1_platform_ipp.h +++ /dev/null @@ -1,188 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#ifndef _VL53L1_PLATFORM_IPP_H_ -#define _VL53L1_PLATFORM_IPP_H_ - -#include "vl53l1_ll_def.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** - * @file vl53l1_platform_ipp.h - * - * @brief EwokPlus25 IPP Wrapper Functions - */ - -/** - * @brief IPP Wrapper call for histogram post processing - * - * - * @param[in] Dev : Device handle - * @param[in] pdmax_cal : DMAX calibration data - * @param[in] pdmax_cfg : DMAX configuration data - * @param[in] ppost_cfg : VL53L1_hist_post_process_config_t - * @param[in] pbins : Input histogram raw bin data - * @param[in] pxtalk : Cross talk histogram data - * @param[out] presults : Output VL53L1_range_results_t - * structure - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_ipp_hist_process_data( - VL53L1_DEV Dev, - VL53L1_dmax_calibration_data_t *pdmax_cal, - VL53L1_hist_gen3_dmax_config_t *pdmax_cfg, - VL53L1_hist_post_process_config_t *ppost_cfg, - VL53L1_histogram_bin_data_t *pbins, - VL53L1_xtalk_histogram_data_t *pxtalk, - VL53L1_range_results_t *presults); - - -/** - * @brief IPP Wrapper call for histogram ambient dmax calc - * - * The target reflectance in percent for the DMAX calculation - * is set by target_reflectance input - * - * The fixed point format is 7.2 - * - * @param[in] Dev : Device handle - * @param[in] target_reflectance : target reflectance to report ambient DMAX - * Percentage in 7.2 fixed point format - * @param[in] pdmax_cal : DMAX calibration data - * @param[in] pdmax_cfg : DMAX configuration data - * @param[in] pbins : Input histogram raw bin data - * @param[out] pambient_dmax_mm : Output ambient DMAX distance in [mm] - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_ipp_hist_ambient_dmax( - VL53L1_DEV Dev, - uint16_t target_reflectance, - VL53L1_dmax_calibration_data_t *pdmax_cal, - VL53L1_hist_gen3_dmax_config_t *pdmax_cfg, - VL53L1_histogram_bin_data_t *pbins, - int16_t *pambient_dmax_mm); - - -/** - * @brief IPP Wrapper call for xtalk calibration post processing - * - * @param[in] Dev : Device handle - * @param[in] pxtalk_ranges : Input VL53L1_xtalk_range_results_t - * Must contain 5 ranges, 4 quadrants + 1 - * full FoV - * @param[out] pxtalk_shape : Output normalised Cross talk histogram - * shape - * @param[out] pxtalk_cal : Output VL53L1_xtalk_calibration_results_t - * structure - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_ipp_xtalk_calibration_process_data( - VL53L1_DEV Dev, - VL53L1_xtalk_range_results_t *pxtalk_ranges, - VL53L1_xtalk_histogram_data_t *pxtalk_shape, - VL53L1_xtalk_calibration_results_t *pxtalk_cal); - - -/** - * @brief IPP Wrapper call for applying histogram xtalk correction - * - * @param[in] Dev : Device handle - * @param[in] pcustomer : Pointer to input customer data structure - * @param[in] pdyn_cfg : Pointer to input dynamic parameters - * structure - * @param[in] pxtalk_shape : Pointer to input normalised xtalk - * histogram shape - * @param[in] pip_hist_data : Pointer to input histogram data struct - * @param[out] pop_hist_data : Pointer to output xtalk corrected - * histogram data struct - * @param[out] pxtalk_count_data : Pointer to output xtalk histogram - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_ipp_hist_xtalk_correction( - VL53L1_DEV Dev, - VL53L1_customer_nvm_managed_t *pcustomer, - VL53L1_dynamic_config_t *pdyn_cfg, - VL53L1_xtalk_histogram_data_t *pxtalk_shape, - VL53L1_histogram_bin_data_t *pip_hist_data, - VL53L1_histogram_bin_data_t *pop_hist_data, - VL53L1_histogram_bin_data_t *pxtalk_count_data); - -/** - * @brief IPP Wrapper call for Generating Xtalk data from dual reflectance - * histogram data - * - * @param[in] Dev : Device handle - * @param[in] pxtalk_results : Pointer to xtalk_results structure - * containing dual reflectance - * histogram data - * @param[in] expected_target_distance_mm : User input of true target distance - * @param[in] higher_reflectance : User input detailing which - * histogram data 1 or 2 has the - * highest reflectance. - * @param[out] pxtalk_avg_samples : Pointer to output xtalk histogram - * data - * - * @return VL53L1_ERROR_NONE Success - * @return "Other error code" See ::VL53L1_Error - */ - -VL53L1_Error VL53L1_ipp_generate_dual_reflectance_xtalk_samples( - VL53L1_DEV Dev, - VL53L1_xtalk_range_results_t *pxtalk_results, - uint16_t expected_target_distance_mm, - uint8_t higher_reflectance, - VL53L1_histogram_bin_data_t *pxtalk_avg_samples); - - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/vl53l1_platform_ipp_imports.h b/drivers/input/misc/vl53L1/vl53l1_platform_ipp_imports.h deleted file mode 100644 index 187952d2bc15..000000000000 --- a/drivers/input/misc/vl53L1/vl53l1_platform_ipp_imports.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#ifndef _VL53L1_PLATFORM_IPP_IMPORTS_H_ -#define _VL53L1_PLATFORM_IPP_IMPORTS_H_ - -#endif diff --git a/drivers/input/misc/vl53L1/vl53l1_platform_log.h b/drivers/input/misc/vl53L1/vl53l1_platform_log.h deleted file mode 100644 index e531a028490f..000000000000 --- a/drivers/input/misc/vl53L1/vl53l1_platform_log.h +++ /dev/null @@ -1,176 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/** - * @file vl53l1_platform_log.h - * - * @brief EwokPlus25 platform logging function definition - */ - - -#ifndef _VL53L1_PLATFORM_LOG_H_ -#define _VL53L1_PLATFORM_LOG_H_ - -#include - -#ifdef VL53L1_LOG_ENABLE - #include "vl53l1_platform_user_config.h" - - #ifdef _MSC_VER - # define EWOKPLUS_EXPORTS __declspec(dllexport) - #else - # define EWOKPLUS_EXPORTS - #endif - - #include "vl53l1_types.h" - - #ifdef __cplusplus - extern "C" { - #endif - - #include - - /** - * @brief Set the level, output and specific functions for module - * logging. - * - * - * @param filename - full path of output log file, NULL for print to - * stdout - * - * @param modules - Module or None or All to trace - * VL53L1_TRACE_MODULE_NONE - * VL53L1_TRACE_MODULE_API - * VL53L1_TRACE_MODULE_CORE - * VL53L1_TRACE_MODULE_TUNING - * VL53L1_TRACE_MODULE_CHARACTERISATION - * VL53L1_TRACE_MODULE_PLATFORM - * VL53L1_TRACE_MODULE_ALL - * - * @param level - trace level - * VL53L1_TRACE_LEVEL_NONE - * VL53L1_TRACE_LEVEL_ERRORS - * VL53L1_TRACE_LEVEL_WARNING - * VL53L1_TRACE_LEVEL_INFO - * VL53L1_TRACE_LEVEL_DEBUG - * VL53L1_TRACE_LEVEL_ALL - * VL53L1_TRACE_LEVEL_IGNORE - * - * @param functions - function level to trace; - * VL53L1_TRACE_FUNCTION_NONE - * VL53L1_TRACE_FUNCTION_I2C - * VL53L1_TRACE_FUNCTION_ALL - * - * @return status - always VL53L1_ERROR_NONE - * - */ - - #define VL53L1_TRACE_LEVEL_NONE 0x00000000 - #define VL53L1_TRACE_LEVEL_ERRORS 0x00000001 - #define VL53L1_TRACE_LEVEL_WARNING 0x00000002 - #define VL53L1_TRACE_LEVEL_INFO 0x00000004 - #define VL53L1_TRACE_LEVEL_DEBUG 0x00000008 - #define VL53L1_TRACE_LEVEL_ALL 0x00000010 - #define VL53L1_TRACE_LEVEL_IGNORE 0x00000020 - - #define VL53L1_TRACE_FUNCTION_NONE 0x00000000 - #define VL53L1_TRACE_FUNCTION_I2C 0x00000001 - #define VL53L1_TRACE_FUNCTION_ALL 0x7fffffff - - #define VL53L1_TRACE_MODULE_NONE 0x00000000 - #define VL53L1_TRACE_MODULE_API 0x00000001 - #define VL53L1_TRACE_MODULE_CORE 0x00000002 - #define VL53L1_TRACE_MODULE_PROTECTED 0x00000004 - #define VL53L1_TRACE_MODULE_HISTOGRAM 0x00000008 - #define VL53L1_TRACE_MODULE_REGISTERS 0x00000010 - #define VL53L1_TRACE_MODULE_PLATFORM 0x00000020 - #define VL53L1_TRACE_MODULE_NVM 0x00000040 - #define VL53L1_TRACE_MODULE_CALIBRATION_DATA 0x00000080 - #define VL53L1_TRACE_MODULE_NVM_DATA 0x00000100 - #define VL53L1_TRACE_MODULE_HISTOGRAM_DATA 0x00000200 - #define VL53L1_TRACE_MODULE_RANGE_RESULTS_DATA 0x00000400 - #define VL53L1_TRACE_MODULE_XTALK_DATA 0x00000800 - #define VL53L1_TRACE_MODULE_OFFSET_DATA 0x00001000 - #define VL53L1_TRACE_MODULE_DATA_INIT 0x00002000 - #define VL53L1_TRACE_MODULE_REF_SPAD_CHAR 0x00004000 - #define VL53L1_TRACE_MODULE_SPAD_RATE_MAP 0x00008000 - #ifdef PAL_EXTENDED - #define VL53L1_TRACE_MODULE_SPAD 0x01000000 - #define VL53L1_TRACE_MODULE_FMT 0x02000000 - #define VL53L1_TRACE_MODULE_UTILS 0x04000000 - #endif - #define VL53L1_TRACE_MODULE_CUSTOMER_API 0x40000000 - #define VL53L1_TRACE_MODULE_ALL 0x7fffffff - - extern void log_trace_print(uint32_t module, uint32_t level, - uint32_t function, const char *format, ...); - - #define _LOG_TRACE_PRINT_FMT(module, level, function, format, ...) \ - log_trace_print(module, level, function, \ - KERN_INFO " " format, ##__VA_ARGS__) - #define _LOG_TRACE_PRINT(module, level, function, ...) \ - _LOG_TRACE_PRINT_FMT(module, level, function, ##__VA_ARGS__) - #define _LOG_FUNCTION_START(module, fmt, ...) \ - log_trace_print(module, VL53L1_TRACE_LEVEL_NONE, \ - VL53L1_TRACE_FUNCTION_ALL, \ - KERN_INFO " %s "fmt"\n", __func__, ##__VA_ARGS__) - #define _LOG_FUNCTION_END(module, status, ...) \ - log_trace_print(module, VL53L1_TRACE_LEVEL_NONE, \ - VL53L1_TRACE_FUNCTION_ALL, \ - KERN_INFO " %s %d\n", __func__, status) - #define _LOG_FUNCTION_END_FMT(module, status, fmt, ...) \ - log_trace_print(module, VL53L1_TRACE_LEVEL_NONE, \ - VL53L1_TRACE_FUNCTION_ALL, \ - KERN_INFO " %s %d"fmt"\n", __func__, status, \ - ##__VA_ARGS__) - #define _LOG_GET_TRACE_FUNCTIONS() 0 - #define _LOG_SET_TRACE_FUNCTIONS(functions) - - #define _LOG_STRING_BUFFER(x) char x[VL53L1_MAX_STRING_LENGTH] - - #ifdef __cplusplus - } - #endif - -#else /* VL53L1_LOG_ENABLE - no logging */ - #include "vl53l1_platform_user_config.h" - - #define _LOG_TRACE_PRINT(module, level, function, ...) - #define _LOG_FUNCTION_START(module, fmt, ...) - #define _LOG_FUNCTION_END(module, status, ...) - #define _LOG_FUNCTION_END_FMT(module, status, fmt, ...) - #define _LOG_GET_TRACE_FUNCTIONS() 0 - #define _LOG_SET_TRACE_FUNCTIONS(functions) - #define _LOG_STRING_BUFFER(x) - -#endif /* VL53L1_LOG_ENABLE */ - -#endif /* _VL53L1_PLATFORM_LOG_H_ */ diff --git a/drivers/input/misc/vl53L1/vl53l1_platform_user_config.h b/drivers/input/misc/vl53L1/vl53l1_platform_user_config.h deleted file mode 100644 index 4c080d45513c..000000000000 --- a/drivers/input/misc/vl53L1/vl53l1_platform_user_config.h +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* -Copyright (C) 2015, STMicroelectronics International N.V. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of STMicroelectronics nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND -NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. -IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -********************************************************************************/ - -/** - * @file vl53l1_platform_user_config.h - * - * @brief EwokPlus compile time user modifiable configuration - */ - - -#ifndef _VL53L1_PLATFORM_USER_CONFIG_H_ -#define _VL53L1_PLATFORM_USER_CONFIG_H_ - -#define VL53L1_BYTES_PER_WORD 2 -#define VL53L1_BYTES_PER_DWORD 4 - -/* Define polling delays */ -#define VL53L1_BOOT_COMPLETION_POLLING_TIMEOUT_MS 500 -#define VL53L1_RANGE_COMPLETION_POLLING_TIMEOUT_MS 2000 -#define VL53L1_TEST_COMPLETION_POLLING_TIMEOUT_MS 60000 - -#define VL53L1_POLLING_DELAY_MS 1 - - -#define VL53L1_GAIN_FACTOR__STANDARD_DEFAULT 0x0800 - /*!< Default standard ranging gain correction factor - 1.11 format. 1.0 = 0x0800, 0.980 = 0x07D7 */ -#define VL53L1_GAIN_FACTOR__HISTOGRAM_DEFAULT 0x0800 - /*!< Default histogram ranging gain correction factor - 1.11 format. 1.0 = 0x0800, 0.975 = 0x07CC */ - - -#define VL53L1_OFFSET_CAL_MIN_EFFECTIVE_SPADS 0x0500 - /*!< Lower Limit for the MM1 effective SPAD count during offset - calibration Format 8.8 0x0500 -> 5.0 effective SPADs */ - -#define VL53L1_OFFSET_CAL_MAX_PRE_PEAK_RATE_MCPS 0x1900 - /*!< Max Limit for the pre range peak rate during offset - calibration Format 9.7 0x1900 -> 50.0 Mcps. - If larger then in pile up */ - -#define VL53L1_OFFSET_CAL_MAX_SIGMA_MM 0x0040 - /*!< Max sigma estimate limit during offset calibration - Check applies to pre-range, mm1 and mm2 ranges - Format 14.2 0x0040 -> 16.0mm. */ - - -#define VL53L1_ZONE_CAL_MAX_PRE_PEAK_RATE_MCPS 0x1900 - /*!< Max Peak Rate Limit for the during zone calibration - Format 9.7 0x1900 -> 50.0 Mcps. - If larger then in pile up */ - -#define VL53L1_ZONE_CAL_MAX_SIGMA_MM 0x0040 - /*!< Max sigma estimate limit during zone calibration - Format 14.2 0x0040 -> 16.0mm. */ - - -#define VL53L1_XTALK_EXTRACT_MAX_SIGMA_MM 0x008C - /*!< Max Sigma value allowed for a successful xtalk extraction - Format 14.2 0x008C -> 35.0 mm.*/ - - -#define VL53L1_MAX_USER_ZONES 169 - /*!< Max number of user Zones - maximal limitation from - FW stream divide - value of 254 */ - -#define VL53L1_MAX_RANGE_RESULTS 4 - /*!< Sets the maximum number of targets distances the histogram - post processing can generate */ - - -#define VL53L1_MAX_STRING_LENGTH 512 - -#endif /* _VL53L1_PLATFORM_USER_CONFIG_H_ */ - diff --git a/drivers/input/misc/vl53L1/vl53l1_platform_user_data.h b/drivers/input/misc/vl53L1/vl53l1_platform_user_data.h deleted file mode 100644 index 9b5114f155f0..000000000000 --- a/drivers/input/misc/vl53L1/vl53l1_platform_user_data.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#ifndef _VL53L1_PLATFORM_USER_DATA_H_ -#define _VL53L1_PLATFORM_USER_DATA_H_ - -#include "vl53l1_ll_def.h" - -#include -#include "vl53l1_def.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include - -#define VL53L1_Dev_t VL53L1_DevData_t -#define VL53L1_DEV VL53L1_DevData_t * - -#define PALDevDataGet(Dev, field) (Dev->field) -#define PALDevDataSet(Dev, field, data) ((Dev->field) = (data)) - -#define VL53L1DevStructGetLLDriverHandle(Dev) (&PALDevDataGet(Dev, LLData)) -#define VL53L1DevStructGetLLResultsHandle(Dev) (&PALDevDataGet(Dev, llresults)) - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/vl53l1_platform_user_defines.h b/drivers/input/misc/vl53L1/vl53l1_platform_user_defines.h deleted file mode 100644 index 9bab15910be2..000000000000 --- a/drivers/input/misc/vl53L1/vl53l1_platform_user_defines.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -* Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#ifndef _VL53L1_PLATFORM_USER_DEFINES_H_ -#define _VL53L1_PLATFORM_USER_DEFINES_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifdef __KERNEL__ -#include -#endif - -/** - * @file vl53l1_platform_user_defines.h - * - * @brief All end user OS/platform/application definitions - */ - - -/** - * @def do_division_u - * @brief customer supplied division operation - 64-bit unsigned - * - * @param dividend unsigned 64-bit numerator - * @param divisor unsigned 64-bit denominator - */ -#ifdef __KERNEL__ -#define do_division_u(dividend, divisor) div64_u64(dividend, divisor) -#else -#define do_division_u(dividend, divisor) (dividend / divisor) -#endif - -/** - * @def do_division_s - * @brief customer supplied division operation - 64-bit signed - * - * @param dividend signed 64-bit numerator - * @param divisor signed 64-bit denominator - */ -#ifdef __KERNEL__ -#define do_division_s(dividend, divisor) div64_s64(dividend, divisor) -#else -#define do_division_s(dividend, divisor) (dividend / divisor) -#endif - -#define WARN_OVERRIDE_STATUS(__X__)\ - trace_print(VL53L1_TRACE_LEVEL_WARNING, #__X__) - - -#define DISABLE_WARNINGS() -#define ENABLE_WARNINGS() - - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/drivers/input/misc/vl53L1/vl53l1_types.h b/drivers/input/misc/vl53L1/vl53l1_types.h deleted file mode 100644 index 9dcd440a9628..000000000000 --- a/drivers/input/misc/vl53L1/vl53l1_types.h +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* -*Copyright (c) 2016, STMicroelectronics - All Rights Reserved -* -* License terms: BSD 3-clause "New" or "Revised" License. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. Neither the name of the copyright holder nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*******************************************************************************/ -/** - * @file vl53l1_types.h - * @brief VL53L1 types definition - */ - -#ifndef _VL53L1_TYPES_H_ -#define _VL53L1_TYPES_H_ - -#include -/** use where fractional values are expected - * - * Given a floating point value f it's .16 bit point is (int)(f*(1<<16)) - */ -typedef uint32_t FixPoint1616_t; - -#endif /* VL53L1_TYPES_H_ */