Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: BigBot_v1 PololuDistanceSensorTest Lidar Ares test ... more
core/src/vl53l0x_api.cpp@0:11ad6aaed10a, 2019-07-30 (annotated)
- Committer:
- joelvonrotz
- Date:
- Tue Jul 30 13:49:02 2019 +0000
- Revision:
- 0:11ad6aaed10a
Initial commit
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| joelvonrotz | 0:11ad6aaed10a | 1 | /******************************************************************************* |
| joelvonrotz | 0:11ad6aaed10a | 2 | Copyright � 2016, STMicroelectronics International N.V. |
| joelvonrotz | 0:11ad6aaed10a | 3 | All rights reserved. |
| joelvonrotz | 0:11ad6aaed10a | 4 | |
| joelvonrotz | 0:11ad6aaed10a | 5 | Redistribution and use in source and binary forms, with or without |
| joelvonrotz | 0:11ad6aaed10a | 6 | modification, are permitted provided that the following conditions are met: |
| joelvonrotz | 0:11ad6aaed10a | 7 | * Redistributions of source code must retain the above copyright |
| joelvonrotz | 0:11ad6aaed10a | 8 | notice, this list of conditions and the following disclaimer. |
| joelvonrotz | 0:11ad6aaed10a | 9 | * Redistributions in binary form must reproduce the above copyright |
| joelvonrotz | 0:11ad6aaed10a | 10 | notice, this list of conditions and the following disclaimer in the |
| joelvonrotz | 0:11ad6aaed10a | 11 | documentation and/or other materials provided with the distribution. |
| joelvonrotz | 0:11ad6aaed10a | 12 | * Neither the name of STMicroelectronics nor the |
| joelvonrotz | 0:11ad6aaed10a | 13 | names of its contributors may be used to endorse or promote products |
| joelvonrotz | 0:11ad6aaed10a | 14 | derived from this software without specific prior written permission. |
| joelvonrotz | 0:11ad6aaed10a | 15 | |
| joelvonrotz | 0:11ad6aaed10a | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| joelvonrotz | 0:11ad6aaed10a | 17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| joelvonrotz | 0:11ad6aaed10a | 18 | WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND |
| joelvonrotz | 0:11ad6aaed10a | 19 | NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. |
| joelvonrotz | 0:11ad6aaed10a | 20 | IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY |
| joelvonrotz | 0:11ad6aaed10a | 21 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| joelvonrotz | 0:11ad6aaed10a | 22 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| joelvonrotz | 0:11ad6aaed10a | 23 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| joelvonrotz | 0:11ad6aaed10a | 24 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| joelvonrotz | 0:11ad6aaed10a | 25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| joelvonrotz | 0:11ad6aaed10a | 26 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| joelvonrotz | 0:11ad6aaed10a | 27 | ******************************************************************************/ |
| joelvonrotz | 0:11ad6aaed10a | 28 | |
| joelvonrotz | 0:11ad6aaed10a | 29 | #include "vl53l0x_api.h" |
| joelvonrotz | 0:11ad6aaed10a | 30 | #include "vl53l0x_tuning.h" |
| joelvonrotz | 0:11ad6aaed10a | 31 | #include "vl53l0x_interrupt_threshold_settings.h" |
| joelvonrotz | 0:11ad6aaed10a | 32 | #include "vl53l0x_api_core.h" |
| joelvonrotz | 0:11ad6aaed10a | 33 | #include "vl53l0x_api_calibration.h" |
| joelvonrotz | 0:11ad6aaed10a | 34 | #include "vl53l0x_api_strings.h" |
| joelvonrotz | 0:11ad6aaed10a | 35 | |
| joelvonrotz | 0:11ad6aaed10a | 36 | #ifndef __KERNEL__ |
| joelvonrotz | 0:11ad6aaed10a | 37 | #include <stdlib.h> |
| joelvonrotz | 0:11ad6aaed10a | 38 | #endif |
| joelvonrotz | 0:11ad6aaed10a | 39 | |
| joelvonrotz | 0:11ad6aaed10a | 40 | |
| joelvonrotz | 0:11ad6aaed10a | 41 | /* Group PAL General Functions */ |
| joelvonrotz | 0:11ad6aaed10a | 42 | |
| joelvonrotz | 0:11ad6aaed10a | 43 | VL53L0X_Error VL53L0X_GetVersion(VL53L0X_Version_t *pVersion) |
| joelvonrotz | 0:11ad6aaed10a | 44 | { |
| joelvonrotz | 0:11ad6aaed10a | 45 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 46 | |
| joelvonrotz | 0:11ad6aaed10a | 47 | pVersion->major = VL53L0X_IMPLEMENTATION_VER_MAJOR; |
| joelvonrotz | 0:11ad6aaed10a | 48 | pVersion->minor = VL53L0X_IMPLEMENTATION_VER_MINOR; |
| joelvonrotz | 0:11ad6aaed10a | 49 | pVersion->build = VL53L0X_IMPLEMENTATION_VER_SUB; |
| joelvonrotz | 0:11ad6aaed10a | 50 | |
| joelvonrotz | 0:11ad6aaed10a | 51 | pVersion->revision = VL53L0X_IMPLEMENTATION_VER_REVISION; |
| joelvonrotz | 0:11ad6aaed10a | 52 | |
| joelvonrotz | 0:11ad6aaed10a | 53 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 54 | } |
| joelvonrotz | 0:11ad6aaed10a | 55 | |
| joelvonrotz | 0:11ad6aaed10a | 56 | VL53L0X_Error VL53L0X_GetPalSpecVersion(VL53L0X_Version_t *pPalSpecVersion) |
| joelvonrotz | 0:11ad6aaed10a | 57 | { |
| joelvonrotz | 0:11ad6aaed10a | 58 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 59 | |
| joelvonrotz | 0:11ad6aaed10a | 60 | |
| joelvonrotz | 0:11ad6aaed10a | 61 | pPalSpecVersion->major = VL53L0X_SPECIFICATION_VER_MAJOR; |
| joelvonrotz | 0:11ad6aaed10a | 62 | pPalSpecVersion->minor = VL53L0X_SPECIFICATION_VER_MINOR; |
| joelvonrotz | 0:11ad6aaed10a | 63 | pPalSpecVersion->build = VL53L0X_SPECIFICATION_VER_SUB; |
| joelvonrotz | 0:11ad6aaed10a | 64 | |
| joelvonrotz | 0:11ad6aaed10a | 65 | pPalSpecVersion->revision = VL53L0X_SPECIFICATION_VER_REVISION; |
| joelvonrotz | 0:11ad6aaed10a | 66 | |
| joelvonrotz | 0:11ad6aaed10a | 67 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 68 | } |
| joelvonrotz | 0:11ad6aaed10a | 69 | |
| joelvonrotz | 0:11ad6aaed10a | 70 | VL53L0X_Error VL53L0X_GetProductRevision(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 71 | uint8_t *pProductRevisionMajor, uint8_t *pProductRevisionMinor) |
| joelvonrotz | 0:11ad6aaed10a | 72 | { |
| joelvonrotz | 0:11ad6aaed10a | 73 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 74 | uint8_t revision_id; |
| joelvonrotz | 0:11ad6aaed10a | 75 | |
| joelvonrotz | 0:11ad6aaed10a | 76 | |
| joelvonrotz | 0:11ad6aaed10a | 77 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_IDENTIFICATION_REVISION_ID, |
| joelvonrotz | 0:11ad6aaed10a | 78 | &revision_id); |
| joelvonrotz | 0:11ad6aaed10a | 79 | *pProductRevisionMajor = 1; |
| joelvonrotz | 0:11ad6aaed10a | 80 | *pProductRevisionMinor = (revision_id & 0xF0) >> 4; |
| joelvonrotz | 0:11ad6aaed10a | 81 | |
| joelvonrotz | 0:11ad6aaed10a | 82 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 83 | |
| joelvonrotz | 0:11ad6aaed10a | 84 | } |
| joelvonrotz | 0:11ad6aaed10a | 85 | |
| joelvonrotz | 0:11ad6aaed10a | 86 | VL53L0X_Error VL53L0X_GetDeviceInfo(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 87 | VL53L0X_DeviceInfo_t *pVL53L0X_DeviceInfo) |
| joelvonrotz | 0:11ad6aaed10a | 88 | { |
| joelvonrotz | 0:11ad6aaed10a | 89 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 90 | |
| joelvonrotz | 0:11ad6aaed10a | 91 | Status = VL53L0X_get_device_info(Dev, pVL53L0X_DeviceInfo); |
| joelvonrotz | 0:11ad6aaed10a | 92 | |
| joelvonrotz | 0:11ad6aaed10a | 93 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 94 | } |
| joelvonrotz | 0:11ad6aaed10a | 95 | |
| joelvonrotz | 0:11ad6aaed10a | 96 | VL53L0X_Error VL53L0X_GetDeviceErrorStatus(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 97 | VL53L0X_DeviceError *pDeviceErrorStatus) |
| joelvonrotz | 0:11ad6aaed10a | 98 | { |
| joelvonrotz | 0:11ad6aaed10a | 99 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 100 | uint8_t RangeStatus; |
| joelvonrotz | 0:11ad6aaed10a | 101 | |
| joelvonrotz | 0:11ad6aaed10a | 102 | |
| joelvonrotz | 0:11ad6aaed10a | 103 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_RESULT_RANGE_STATUS, |
| joelvonrotz | 0:11ad6aaed10a | 104 | &RangeStatus); |
| joelvonrotz | 0:11ad6aaed10a | 105 | |
| joelvonrotz | 0:11ad6aaed10a | 106 | *pDeviceErrorStatus = (VL53L0X_DeviceError)((RangeStatus & 0x78) >> 3); |
| joelvonrotz | 0:11ad6aaed10a | 107 | |
| joelvonrotz | 0:11ad6aaed10a | 108 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 109 | } |
| joelvonrotz | 0:11ad6aaed10a | 110 | |
| joelvonrotz | 0:11ad6aaed10a | 111 | |
| joelvonrotz | 0:11ad6aaed10a | 112 | VL53L0X_Error VL53L0X_GetDeviceErrorString(VL53L0X_DeviceError ErrorCode, |
| joelvonrotz | 0:11ad6aaed10a | 113 | char *pDeviceErrorString) |
| joelvonrotz | 0:11ad6aaed10a | 114 | { |
| joelvonrotz | 0:11ad6aaed10a | 115 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 116 | |
| joelvonrotz | 0:11ad6aaed10a | 117 | |
| joelvonrotz | 0:11ad6aaed10a | 118 | Status = VL53L0X_get_device_error_string(ErrorCode, pDeviceErrorString); |
| joelvonrotz | 0:11ad6aaed10a | 119 | |
| joelvonrotz | 0:11ad6aaed10a | 120 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 121 | } |
| joelvonrotz | 0:11ad6aaed10a | 122 | |
| joelvonrotz | 0:11ad6aaed10a | 123 | VL53L0X_Error VL53L0X_GetRangeStatusString(uint8_t RangeStatus, |
| joelvonrotz | 0:11ad6aaed10a | 124 | char *pRangeStatusString) |
| joelvonrotz | 0:11ad6aaed10a | 125 | { |
| joelvonrotz | 0:11ad6aaed10a | 126 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 127 | |
| joelvonrotz | 0:11ad6aaed10a | 128 | Status = VL53L0X_get_range_status_string(RangeStatus, |
| joelvonrotz | 0:11ad6aaed10a | 129 | pRangeStatusString); |
| joelvonrotz | 0:11ad6aaed10a | 130 | |
| joelvonrotz | 0:11ad6aaed10a | 131 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 132 | } |
| joelvonrotz | 0:11ad6aaed10a | 133 | |
| joelvonrotz | 0:11ad6aaed10a | 134 | VL53L0X_Error VL53L0X_GetPalErrorString(VL53L0X_Error PalErrorCode, |
| joelvonrotz | 0:11ad6aaed10a | 135 | char *pPalErrorString) |
| joelvonrotz | 0:11ad6aaed10a | 136 | { |
| joelvonrotz | 0:11ad6aaed10a | 137 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 138 | |
| joelvonrotz | 0:11ad6aaed10a | 139 | Status = VL53L0X_get_pal_error_string(PalErrorCode, pPalErrorString); |
| joelvonrotz | 0:11ad6aaed10a | 140 | |
| joelvonrotz | 0:11ad6aaed10a | 141 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 142 | } |
| joelvonrotz | 0:11ad6aaed10a | 143 | |
| joelvonrotz | 0:11ad6aaed10a | 144 | VL53L0X_Error VL53L0X_GetPalStateString(VL53L0X_State PalStateCode, |
| joelvonrotz | 0:11ad6aaed10a | 145 | char *pPalStateString) |
| joelvonrotz | 0:11ad6aaed10a | 146 | { |
| joelvonrotz | 0:11ad6aaed10a | 147 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 148 | |
| joelvonrotz | 0:11ad6aaed10a | 149 | Status = VL53L0X_get_pal_state_string(PalStateCode, pPalStateString); |
| joelvonrotz | 0:11ad6aaed10a | 150 | |
| joelvonrotz | 0:11ad6aaed10a | 151 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 152 | } |
| joelvonrotz | 0:11ad6aaed10a | 153 | |
| joelvonrotz | 0:11ad6aaed10a | 154 | VL53L0X_Error VL53L0X_GetPalState(VL53L0X_DEV Dev, VL53L0X_State *pPalState) |
| joelvonrotz | 0:11ad6aaed10a | 155 | { |
| joelvonrotz | 0:11ad6aaed10a | 156 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 157 | |
| joelvonrotz | 0:11ad6aaed10a | 158 | *pPalState = PALDevDataGet(Dev, PalState); |
| joelvonrotz | 0:11ad6aaed10a | 159 | |
| joelvonrotz | 0:11ad6aaed10a | 160 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 161 | } |
| joelvonrotz | 0:11ad6aaed10a | 162 | |
| joelvonrotz | 0:11ad6aaed10a | 163 | VL53L0X_Error VL53L0X_SetPowerMode(VL53L0X_DEV Dev, VL53L0X_PowerModes PowerMode) |
| joelvonrotz | 0:11ad6aaed10a | 164 | { |
| joelvonrotz | 0:11ad6aaed10a | 165 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 166 | |
| joelvonrotz | 0:11ad6aaed10a | 167 | /* Only level1 of Power mode exists */ |
| joelvonrotz | 0:11ad6aaed10a | 168 | if ((PowerMode != VL53L0X_POWERMODE_STANDBY_LEVEL1) |
| joelvonrotz | 0:11ad6aaed10a | 169 | && (PowerMode != VL53L0X_POWERMODE_IDLE_LEVEL1)) { |
| joelvonrotz | 0:11ad6aaed10a | 170 | Status = VL53L0X_ERROR_MODE_NOT_SUPPORTED; |
| joelvonrotz | 0:11ad6aaed10a | 171 | } else if (PowerMode == VL53L0X_POWERMODE_STANDBY_LEVEL1) { |
| joelvonrotz | 0:11ad6aaed10a | 172 | /* set the standby level1 of power mode */ |
| joelvonrotz | 0:11ad6aaed10a | 173 | Status = VL53L0X_WrByte(Dev, 0x80, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 174 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 175 | /* Set PAL State to standby */ |
| joelvonrotz | 0:11ad6aaed10a | 176 | PALDevDataSet(Dev, PalState, VL53L0X_STATE_STANDBY); |
| joelvonrotz | 0:11ad6aaed10a | 177 | PALDevDataSet(Dev, PowerMode, |
| joelvonrotz | 0:11ad6aaed10a | 178 | VL53L0X_POWERMODE_STANDBY_LEVEL1); |
| joelvonrotz | 0:11ad6aaed10a | 179 | } |
| joelvonrotz | 0:11ad6aaed10a | 180 | |
| joelvonrotz | 0:11ad6aaed10a | 181 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 182 | /* VL53L0X_POWERMODE_IDLE_LEVEL1 */ |
| joelvonrotz | 0:11ad6aaed10a | 183 | Status = VL53L0X_WrByte(Dev, 0x80, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 184 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 185 | Status = VL53L0X_StaticInit(Dev); |
| joelvonrotz | 0:11ad6aaed10a | 186 | |
| joelvonrotz | 0:11ad6aaed10a | 187 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 188 | PALDevDataSet(Dev, PowerMode, |
| joelvonrotz | 0:11ad6aaed10a | 189 | VL53L0X_POWERMODE_IDLE_LEVEL1); |
| joelvonrotz | 0:11ad6aaed10a | 190 | |
| joelvonrotz | 0:11ad6aaed10a | 191 | } |
| joelvonrotz | 0:11ad6aaed10a | 192 | |
| joelvonrotz | 0:11ad6aaed10a | 193 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 194 | } |
| joelvonrotz | 0:11ad6aaed10a | 195 | |
| joelvonrotz | 0:11ad6aaed10a | 196 | VL53L0X_Error VL53L0X_GetPowerMode(VL53L0X_DEV Dev, VL53L0X_PowerModes *pPowerMode) |
| joelvonrotz | 0:11ad6aaed10a | 197 | { |
| joelvonrotz | 0:11ad6aaed10a | 198 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 199 | uint8_t Byte; |
| joelvonrotz | 0:11ad6aaed10a | 200 | |
| joelvonrotz | 0:11ad6aaed10a | 201 | /* Only level1 of Power mode exists */ |
| joelvonrotz | 0:11ad6aaed10a | 202 | Status = VL53L0X_RdByte(Dev, 0x80, &Byte); |
| joelvonrotz | 0:11ad6aaed10a | 203 | |
| joelvonrotz | 0:11ad6aaed10a | 204 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 205 | if (Byte == 1) { |
| joelvonrotz | 0:11ad6aaed10a | 206 | PALDevDataSet(Dev, PowerMode, |
| joelvonrotz | 0:11ad6aaed10a | 207 | VL53L0X_POWERMODE_IDLE_LEVEL1); |
| joelvonrotz | 0:11ad6aaed10a | 208 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 209 | PALDevDataSet(Dev, PowerMode, |
| joelvonrotz | 0:11ad6aaed10a | 210 | VL53L0X_POWERMODE_STANDBY_LEVEL1); |
| joelvonrotz | 0:11ad6aaed10a | 211 | } |
| joelvonrotz | 0:11ad6aaed10a | 212 | } |
| joelvonrotz | 0:11ad6aaed10a | 213 | |
| joelvonrotz | 0:11ad6aaed10a | 214 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 215 | } |
| joelvonrotz | 0:11ad6aaed10a | 216 | |
| joelvonrotz | 0:11ad6aaed10a | 217 | VL53L0X_Error VL53L0X_SetOffsetCalibrationDataMicroMeter(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 218 | int32_t OffsetCalibrationDataMicroMeter) |
| joelvonrotz | 0:11ad6aaed10a | 219 | { |
| joelvonrotz | 0:11ad6aaed10a | 220 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 221 | |
| joelvonrotz | 0:11ad6aaed10a | 222 | Status = VL53L0X_set_offset_calibration_data_micro_meter(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 223 | OffsetCalibrationDataMicroMeter); |
| joelvonrotz | 0:11ad6aaed10a | 224 | |
| joelvonrotz | 0:11ad6aaed10a | 225 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 226 | } |
| joelvonrotz | 0:11ad6aaed10a | 227 | |
| joelvonrotz | 0:11ad6aaed10a | 228 | VL53L0X_Error VL53L0X_GetOffsetCalibrationDataMicroMeter(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 229 | int32_t *pOffsetCalibrationDataMicroMeter) |
| joelvonrotz | 0:11ad6aaed10a | 230 | { |
| joelvonrotz | 0:11ad6aaed10a | 231 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 232 | |
| joelvonrotz | 0:11ad6aaed10a | 233 | Status = VL53L0X_get_offset_calibration_data_micro_meter(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 234 | pOffsetCalibrationDataMicroMeter); |
| joelvonrotz | 0:11ad6aaed10a | 235 | |
| joelvonrotz | 0:11ad6aaed10a | 236 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 237 | } |
| joelvonrotz | 0:11ad6aaed10a | 238 | |
| joelvonrotz | 0:11ad6aaed10a | 239 | VL53L0X_Error VL53L0X_SetLinearityCorrectiveGain(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 240 | int16_t LinearityCorrectiveGain) |
| joelvonrotz | 0:11ad6aaed10a | 241 | { |
| joelvonrotz | 0:11ad6aaed10a | 242 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 243 | |
| joelvonrotz | 0:11ad6aaed10a | 244 | if ((LinearityCorrectiveGain < 0) || (LinearityCorrectiveGain > 1000)) |
| joelvonrotz | 0:11ad6aaed10a | 245 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 246 | else { |
| joelvonrotz | 0:11ad6aaed10a | 247 | PALDevDataSet(Dev, LinearityCorrectiveGain, |
| joelvonrotz | 0:11ad6aaed10a | 248 | LinearityCorrectiveGain); |
| joelvonrotz | 0:11ad6aaed10a | 249 | |
| joelvonrotz | 0:11ad6aaed10a | 250 | if (LinearityCorrectiveGain != 1000) { |
| joelvonrotz | 0:11ad6aaed10a | 251 | /* Disable FW Xtalk */ |
| joelvonrotz | 0:11ad6aaed10a | 252 | Status = VL53L0X_WrWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 253 | VL53L0X_REG_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS, 0); |
| joelvonrotz | 0:11ad6aaed10a | 254 | } |
| joelvonrotz | 0:11ad6aaed10a | 255 | } |
| joelvonrotz | 0:11ad6aaed10a | 256 | |
| joelvonrotz | 0:11ad6aaed10a | 257 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 258 | } |
| joelvonrotz | 0:11ad6aaed10a | 259 | |
| joelvonrotz | 0:11ad6aaed10a | 260 | VL53L0X_Error VL53L0X_GetLinearityCorrectiveGain(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 261 | uint16_t *pLinearityCorrectiveGain) |
| joelvonrotz | 0:11ad6aaed10a | 262 | { |
| joelvonrotz | 0:11ad6aaed10a | 263 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 264 | |
| joelvonrotz | 0:11ad6aaed10a | 265 | *pLinearityCorrectiveGain = PALDevDataGet(Dev, LinearityCorrectiveGain); |
| joelvonrotz | 0:11ad6aaed10a | 266 | |
| joelvonrotz | 0:11ad6aaed10a | 267 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 268 | } |
| joelvonrotz | 0:11ad6aaed10a | 269 | |
| joelvonrotz | 0:11ad6aaed10a | 270 | VL53L0X_Error VL53L0X_SetGroupParamHold(VL53L0X_DEV Dev, uint8_t GroupParamHold) |
| joelvonrotz | 0:11ad6aaed10a | 271 | { |
| joelvonrotz | 0:11ad6aaed10a | 272 | VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; |
| joelvonrotz | 0:11ad6aaed10a | 273 | |
| joelvonrotz | 0:11ad6aaed10a | 274 | /* not implemented on VL53L0X */ |
| joelvonrotz | 0:11ad6aaed10a | 275 | |
| joelvonrotz | 0:11ad6aaed10a | 276 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 277 | } |
| joelvonrotz | 0:11ad6aaed10a | 278 | |
| joelvonrotz | 0:11ad6aaed10a | 279 | VL53L0X_Error VL53L0X_GetUpperLimitMilliMeter(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 280 | uint16_t *pUpperLimitMilliMeter) |
| joelvonrotz | 0:11ad6aaed10a | 281 | { |
| joelvonrotz | 0:11ad6aaed10a | 282 | VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; |
| joelvonrotz | 0:11ad6aaed10a | 283 | |
| joelvonrotz | 0:11ad6aaed10a | 284 | /* not implemented on VL53L0X */ |
| joelvonrotz | 0:11ad6aaed10a | 285 | |
| joelvonrotz | 0:11ad6aaed10a | 286 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 287 | } |
| joelvonrotz | 0:11ad6aaed10a | 288 | |
| joelvonrotz | 0:11ad6aaed10a | 289 | VL53L0X_Error VL53L0X_GetTotalSignalRate(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 290 | FixPoint1616_t *pTotalSignalRate) |
| joelvonrotz | 0:11ad6aaed10a | 291 | { |
| joelvonrotz | 0:11ad6aaed10a | 292 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 293 | VL53L0X_RangingMeasurementData_t LastRangeDataBuffer; |
| joelvonrotz | 0:11ad6aaed10a | 294 | |
| joelvonrotz | 0:11ad6aaed10a | 295 | |
| joelvonrotz | 0:11ad6aaed10a | 296 | LastRangeDataBuffer = PALDevDataGet(Dev, LastRangeMeasure); |
| joelvonrotz | 0:11ad6aaed10a | 297 | |
| joelvonrotz | 0:11ad6aaed10a | 298 | Status = VL53L0X_get_total_signal_rate( |
| joelvonrotz | 0:11ad6aaed10a | 299 | Dev, &LastRangeDataBuffer, pTotalSignalRate); |
| joelvonrotz | 0:11ad6aaed10a | 300 | |
| joelvonrotz | 0:11ad6aaed10a | 301 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 302 | } |
| joelvonrotz | 0:11ad6aaed10a | 303 | |
| joelvonrotz | 0:11ad6aaed10a | 304 | /* End Group PAL General Functions */ |
| joelvonrotz | 0:11ad6aaed10a | 305 | |
| joelvonrotz | 0:11ad6aaed10a | 306 | /* Group PAL Init Functions */ |
| joelvonrotz | 0:11ad6aaed10a | 307 | VL53L0X_Error VL53L0X_SetDeviceAddress(VL53L0X_DEV Dev, uint8_t DeviceAddress) |
| joelvonrotz | 0:11ad6aaed10a | 308 | { |
| joelvonrotz | 0:11ad6aaed10a | 309 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 310 | |
| joelvonrotz | 0:11ad6aaed10a | 311 | Status = VL53L0X_WrByte(Dev, VL53L0X_REG_I2C_SLAVE_DEVICE_ADDRESS, |
| joelvonrotz | 0:11ad6aaed10a | 312 | DeviceAddress / 2); |
| joelvonrotz | 0:11ad6aaed10a | 313 | |
| joelvonrotz | 0:11ad6aaed10a | 314 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 315 | } |
| joelvonrotz | 0:11ad6aaed10a | 316 | |
| joelvonrotz | 0:11ad6aaed10a | 317 | VL53L0X_Error VL53L0X_DataInit(VL53L0X_DEV Dev) |
| joelvonrotz | 0:11ad6aaed10a | 318 | { |
| joelvonrotz | 0:11ad6aaed10a | 319 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 320 | VL53L0X_DeviceParameters_t CurrentParameters; |
| joelvonrotz | 0:11ad6aaed10a | 321 | int i; |
| joelvonrotz | 0:11ad6aaed10a | 322 | uint8_t StopVariable; |
| joelvonrotz | 0:11ad6aaed10a | 323 | |
| joelvonrotz | 0:11ad6aaed10a | 324 | |
| joelvonrotz | 0:11ad6aaed10a | 325 | /* by default the I2C is running at 1V8 if you want to change it you |
| joelvonrotz | 0:11ad6aaed10a | 326 | * need to include this define at compilation level. */ |
| joelvonrotz | 0:11ad6aaed10a | 327 | #ifdef USE_I2C_2V8 |
| joelvonrotz | 0:11ad6aaed10a | 328 | Status = VL53L0X_UpdateByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 329 | VL53L0X_REG_VHV_CONFIG_PAD_SCL_SDA__EXTSUP_HV, |
| joelvonrotz | 0:11ad6aaed10a | 330 | 0xFE, |
| joelvonrotz | 0:11ad6aaed10a | 331 | 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 332 | #endif |
| joelvonrotz | 0:11ad6aaed10a | 333 | |
| joelvonrotz | 0:11ad6aaed10a | 334 | /* Set I2C standard mode */ |
| joelvonrotz | 0:11ad6aaed10a | 335 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 336 | Status = VL53L0X_WrByte(Dev, 0x88, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 337 | |
| joelvonrotz | 0:11ad6aaed10a | 338 | VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, ReadDataFromDeviceDone, 0); |
| joelvonrotz | 0:11ad6aaed10a | 339 | |
| joelvonrotz | 0:11ad6aaed10a | 340 | #ifdef USE_IQC_STATION |
| joelvonrotz | 0:11ad6aaed10a | 341 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 342 | Status = VL53L0X_apply_offset_adjustment(Dev); |
| joelvonrotz | 0:11ad6aaed10a | 343 | #endif |
| joelvonrotz | 0:11ad6aaed10a | 344 | |
| joelvonrotz | 0:11ad6aaed10a | 345 | /* Default value is 1000 for Linearity Corrective Gain */ |
| joelvonrotz | 0:11ad6aaed10a | 346 | PALDevDataSet(Dev, LinearityCorrectiveGain, 1000); |
| joelvonrotz | 0:11ad6aaed10a | 347 | |
| joelvonrotz | 0:11ad6aaed10a | 348 | /* Dmax default Parameter */ |
| joelvonrotz | 0:11ad6aaed10a | 349 | PALDevDataSet(Dev, DmaxCalRangeMilliMeter, 400); |
| joelvonrotz | 0:11ad6aaed10a | 350 | PALDevDataSet(Dev, DmaxCalSignalRateRtnMegaCps, |
| joelvonrotz | 0:11ad6aaed10a | 351 | (FixPoint1616_t)((0x00016B85))); /* 1.42 No Cover Glass*/ |
| joelvonrotz | 0:11ad6aaed10a | 352 | |
| joelvonrotz | 0:11ad6aaed10a | 353 | /* Set Default static parameters |
| joelvonrotz | 0:11ad6aaed10a | 354 | *set first temporary values 9.44MHz * 65536 = 618660 */ |
| joelvonrotz | 0:11ad6aaed10a | 355 | VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, OscFrequencyMHz, 618660); |
| joelvonrotz | 0:11ad6aaed10a | 356 | |
| joelvonrotz | 0:11ad6aaed10a | 357 | /* Set Default XTalkCompensationRateMegaCps to 0 */ |
| joelvonrotz | 0:11ad6aaed10a | 358 | VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationRateMegaCps, 0); |
| joelvonrotz | 0:11ad6aaed10a | 359 | |
| joelvonrotz | 0:11ad6aaed10a | 360 | /* Get default parameters */ |
| joelvonrotz | 0:11ad6aaed10a | 361 | Status = VL53L0X_GetDeviceParameters(Dev, &CurrentParameters); |
| joelvonrotz | 0:11ad6aaed10a | 362 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 363 | /* initialize PAL values */ |
| joelvonrotz | 0:11ad6aaed10a | 364 | CurrentParameters.DeviceMode = VL53L0X_DEVICEMODE_SINGLE_RANGING; |
| joelvonrotz | 0:11ad6aaed10a | 365 | CurrentParameters.HistogramMode = VL53L0X_HISTOGRAMMODE_DISABLED; |
| joelvonrotz | 0:11ad6aaed10a | 366 | PALDevDataSet(Dev, CurrentParameters, CurrentParameters); |
| joelvonrotz | 0:11ad6aaed10a | 367 | } |
| joelvonrotz | 0:11ad6aaed10a | 368 | |
| joelvonrotz | 0:11ad6aaed10a | 369 | /* Sigma estimator variable */ |
| joelvonrotz | 0:11ad6aaed10a | 370 | PALDevDataSet(Dev, SigmaEstRefArray, 100); |
| joelvonrotz | 0:11ad6aaed10a | 371 | PALDevDataSet(Dev, SigmaEstEffPulseWidth, 900); |
| joelvonrotz | 0:11ad6aaed10a | 372 | PALDevDataSet(Dev, SigmaEstEffAmbWidth, 500); |
| joelvonrotz | 0:11ad6aaed10a | 373 | PALDevDataSet(Dev, targetRefRate, 0x0A00); /* 20 MCPS in 9:7 format */ |
| joelvonrotz | 0:11ad6aaed10a | 374 | |
| joelvonrotz | 0:11ad6aaed10a | 375 | /* Use internal default settings */ |
| joelvonrotz | 0:11ad6aaed10a | 376 | PALDevDataSet(Dev, UseInternalTuningSettings, 1); |
| joelvonrotz | 0:11ad6aaed10a | 377 | |
| joelvonrotz | 0:11ad6aaed10a | 378 | Status |= VL53L0X_WrByte(Dev, 0x80, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 379 | Status |= VL53L0X_WrByte(Dev, 0xFF, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 380 | Status |= VL53L0X_WrByte(Dev, 0x00, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 381 | Status |= VL53L0X_RdByte(Dev, 0x91, &StopVariable); |
| joelvonrotz | 0:11ad6aaed10a | 382 | PALDevDataSet(Dev, StopVariable, StopVariable); |
| joelvonrotz | 0:11ad6aaed10a | 383 | Status |= VL53L0X_WrByte(Dev, 0x00, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 384 | Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 385 | Status |= VL53L0X_WrByte(Dev, 0x80, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 386 | |
| joelvonrotz | 0:11ad6aaed10a | 387 | /* Enable all check */ |
| joelvonrotz | 0:11ad6aaed10a | 388 | for (i = 0; i < VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS; i++) { |
| joelvonrotz | 0:11ad6aaed10a | 389 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 390 | Status |= VL53L0X_SetLimitCheckEnable(Dev, i, 1); |
| joelvonrotz | 0:11ad6aaed10a | 391 | else |
| joelvonrotz | 0:11ad6aaed10a | 392 | break; |
| joelvonrotz | 0:11ad6aaed10a | 393 | |
| joelvonrotz | 0:11ad6aaed10a | 394 | } |
| joelvonrotz | 0:11ad6aaed10a | 395 | |
| joelvonrotz | 0:11ad6aaed10a | 396 | /* Disable the following checks */ |
| joelvonrotz | 0:11ad6aaed10a | 397 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 398 | Status = VL53L0X_SetLimitCheckEnable(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 399 | VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, 0); |
| joelvonrotz | 0:11ad6aaed10a | 400 | |
| joelvonrotz | 0:11ad6aaed10a | 401 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 402 | Status = VL53L0X_SetLimitCheckEnable(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 403 | VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, 0); |
| joelvonrotz | 0:11ad6aaed10a | 404 | |
| joelvonrotz | 0:11ad6aaed10a | 405 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 406 | Status = VL53L0X_SetLimitCheckEnable(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 407 | VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC, 0); |
| joelvonrotz | 0:11ad6aaed10a | 408 | |
| joelvonrotz | 0:11ad6aaed10a | 409 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 410 | Status = VL53L0X_SetLimitCheckEnable(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 411 | VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE, 0); |
| joelvonrotz | 0:11ad6aaed10a | 412 | |
| joelvonrotz | 0:11ad6aaed10a | 413 | /* Limit default values */ |
| joelvonrotz | 0:11ad6aaed10a | 414 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 415 | Status = VL53L0X_SetLimitCheckValue(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 416 | VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, |
| joelvonrotz | 0:11ad6aaed10a | 417 | (FixPoint1616_t)(18 * 65536)); |
| joelvonrotz | 0:11ad6aaed10a | 418 | } |
| joelvonrotz | 0:11ad6aaed10a | 419 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 420 | Status = VL53L0X_SetLimitCheckValue(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 421 | VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, |
| joelvonrotz | 0:11ad6aaed10a | 422 | (FixPoint1616_t)(25 * 65536 / 100)); |
| joelvonrotz | 0:11ad6aaed10a | 423 | /* 0.25 * 65536 */ |
| joelvonrotz | 0:11ad6aaed10a | 424 | } |
| joelvonrotz | 0:11ad6aaed10a | 425 | |
| joelvonrotz | 0:11ad6aaed10a | 426 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 427 | Status = VL53L0X_SetLimitCheckValue(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 428 | VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, |
| joelvonrotz | 0:11ad6aaed10a | 429 | (FixPoint1616_t)(35 * 65536)); |
| joelvonrotz | 0:11ad6aaed10a | 430 | } |
| joelvonrotz | 0:11ad6aaed10a | 431 | |
| joelvonrotz | 0:11ad6aaed10a | 432 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 433 | Status = VL53L0X_SetLimitCheckValue(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 434 | VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, |
| joelvonrotz | 0:11ad6aaed10a | 435 | (FixPoint1616_t)(0 * 65536)); |
| joelvonrotz | 0:11ad6aaed10a | 436 | } |
| joelvonrotz | 0:11ad6aaed10a | 437 | |
| joelvonrotz | 0:11ad6aaed10a | 438 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 439 | |
| joelvonrotz | 0:11ad6aaed10a | 440 | PALDevDataSet(Dev, SequenceConfig, 0xFF); |
| joelvonrotz | 0:11ad6aaed10a | 441 | Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, |
| joelvonrotz | 0:11ad6aaed10a | 442 | 0xFF); |
| joelvonrotz | 0:11ad6aaed10a | 443 | |
| joelvonrotz | 0:11ad6aaed10a | 444 | /* Set PAL state to tell that we are waiting for call to |
| joelvonrotz | 0:11ad6aaed10a | 445 | * VL53L0X_StaticInit */ |
| joelvonrotz | 0:11ad6aaed10a | 446 | PALDevDataSet(Dev, PalState, VL53L0X_STATE_WAIT_STATICINIT); |
| joelvonrotz | 0:11ad6aaed10a | 447 | } |
| joelvonrotz | 0:11ad6aaed10a | 448 | |
| joelvonrotz | 0:11ad6aaed10a | 449 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 450 | VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, RefSpadsInitialised, 0); |
| joelvonrotz | 0:11ad6aaed10a | 451 | |
| joelvonrotz | 0:11ad6aaed10a | 452 | |
| joelvonrotz | 0:11ad6aaed10a | 453 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 454 | } |
| joelvonrotz | 0:11ad6aaed10a | 455 | |
| joelvonrotz | 0:11ad6aaed10a | 456 | VL53L0X_Error VL53L0X_SetTuningSettingBuffer(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 457 | uint8_t *pTuningSettingBuffer, uint8_t UseInternalTuningSettings) |
| joelvonrotz | 0:11ad6aaed10a | 458 | { |
| joelvonrotz | 0:11ad6aaed10a | 459 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 460 | |
| joelvonrotz | 0:11ad6aaed10a | 461 | |
| joelvonrotz | 0:11ad6aaed10a | 462 | if (UseInternalTuningSettings == 1) { |
| joelvonrotz | 0:11ad6aaed10a | 463 | /* Force use internal settings */ |
| joelvonrotz | 0:11ad6aaed10a | 464 | PALDevDataSet(Dev, UseInternalTuningSettings, 1); |
| joelvonrotz | 0:11ad6aaed10a | 465 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 466 | |
| joelvonrotz | 0:11ad6aaed10a | 467 | /* check that the first byte is not 0 */ |
| joelvonrotz | 0:11ad6aaed10a | 468 | if (*pTuningSettingBuffer != 0) { |
| joelvonrotz | 0:11ad6aaed10a | 469 | PALDevDataSet(Dev, pTuningSettingsPointer, |
| joelvonrotz | 0:11ad6aaed10a | 470 | pTuningSettingBuffer); |
| joelvonrotz | 0:11ad6aaed10a | 471 | PALDevDataSet(Dev, UseInternalTuningSettings, 0); |
| joelvonrotz | 0:11ad6aaed10a | 472 | |
| joelvonrotz | 0:11ad6aaed10a | 473 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 474 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 475 | } |
| joelvonrotz | 0:11ad6aaed10a | 476 | } |
| joelvonrotz | 0:11ad6aaed10a | 477 | |
| joelvonrotz | 0:11ad6aaed10a | 478 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 479 | } |
| joelvonrotz | 0:11ad6aaed10a | 480 | |
| joelvonrotz | 0:11ad6aaed10a | 481 | VL53L0X_Error VL53L0X_GetTuningSettingBuffer(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 482 | uint8_t **ppTuningSettingBuffer, uint8_t *pUseInternalTuningSettings) |
| joelvonrotz | 0:11ad6aaed10a | 483 | { |
| joelvonrotz | 0:11ad6aaed10a | 484 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 485 | |
| joelvonrotz | 0:11ad6aaed10a | 486 | |
| joelvonrotz | 0:11ad6aaed10a | 487 | *ppTuningSettingBuffer = PALDevDataGet(Dev, pTuningSettingsPointer); |
| joelvonrotz | 0:11ad6aaed10a | 488 | *pUseInternalTuningSettings = PALDevDataGet(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 489 | UseInternalTuningSettings); |
| joelvonrotz | 0:11ad6aaed10a | 490 | |
| joelvonrotz | 0:11ad6aaed10a | 491 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 492 | } |
| joelvonrotz | 0:11ad6aaed10a | 493 | |
| joelvonrotz | 0:11ad6aaed10a | 494 | VL53L0X_Error VL53L0X_StaticInit(VL53L0X_DEV Dev) |
| joelvonrotz | 0:11ad6aaed10a | 495 | { |
| joelvonrotz | 0:11ad6aaed10a | 496 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 497 | VL53L0X_DeviceParameters_t CurrentParameters = {0}; |
| joelvonrotz | 0:11ad6aaed10a | 498 | uint8_t *pTuningSettingBuffer; |
| joelvonrotz | 0:11ad6aaed10a | 499 | uint16_t tempword = 0; |
| joelvonrotz | 0:11ad6aaed10a | 500 | uint8_t tempbyte = 0; |
| joelvonrotz | 0:11ad6aaed10a | 501 | uint8_t UseInternalTuningSettings = 0; |
| joelvonrotz | 0:11ad6aaed10a | 502 | uint32_t count = 0; |
| joelvonrotz | 0:11ad6aaed10a | 503 | uint8_t isApertureSpads = 0; |
| joelvonrotz | 0:11ad6aaed10a | 504 | uint32_t refSpadCount = 0; |
| joelvonrotz | 0:11ad6aaed10a | 505 | uint8_t ApertureSpads = 0; |
| joelvonrotz | 0:11ad6aaed10a | 506 | uint8_t vcselPulsePeriodPCLK; |
| joelvonrotz | 0:11ad6aaed10a | 507 | uint32_t seqTimeoutMicroSecs; |
| joelvonrotz | 0:11ad6aaed10a | 508 | |
| joelvonrotz | 0:11ad6aaed10a | 509 | Status = VL53L0X_get_info_from_device(Dev, 1); |
| joelvonrotz | 0:11ad6aaed10a | 510 | |
| joelvonrotz | 0:11ad6aaed10a | 511 | |
| joelvonrotz | 0:11ad6aaed10a | 512 | /* set the ref spad from NVM */ |
| joelvonrotz | 0:11ad6aaed10a | 513 | count = (uint32_t)VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, ReferenceSpadCount); |
| joelvonrotz | 0:11ad6aaed10a | 514 | ApertureSpads = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, ReferenceSpadType); |
| joelvonrotz | 0:11ad6aaed10a | 515 | |
| joelvonrotz | 0:11ad6aaed10a | 516 | |
| joelvonrotz | 0:11ad6aaed10a | 517 | /* NVM value invalid */ |
| joelvonrotz | 0:11ad6aaed10a | 518 | if ((ApertureSpads > 1) || ((ApertureSpads == 1) && (count > 32)) || ((ApertureSpads == 0) && (count > 12))) |
| joelvonrotz | 0:11ad6aaed10a | 519 | { |
| joelvonrotz | 0:11ad6aaed10a | 520 | Status = VL53L0X_perform_ref_spad_management(Dev, &refSpadCount, &isApertureSpads); |
| joelvonrotz | 0:11ad6aaed10a | 521 | } |
| joelvonrotz | 0:11ad6aaed10a | 522 | else |
| joelvonrotz | 0:11ad6aaed10a | 523 | { |
| joelvonrotz | 0:11ad6aaed10a | 524 | Status = VL53L0X_set_reference_spads(Dev, count, ApertureSpads); |
| joelvonrotz | 0:11ad6aaed10a | 525 | } |
| joelvonrotz | 0:11ad6aaed10a | 526 | |
| joelvonrotz | 0:11ad6aaed10a | 527 | /* Initialize tuning settings buffer to prevent compiler warning. */ |
| joelvonrotz | 0:11ad6aaed10a | 528 | pTuningSettingBuffer = DefaultTuningSettings; |
| joelvonrotz | 0:11ad6aaed10a | 529 | |
| joelvonrotz | 0:11ad6aaed10a | 530 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 531 | { |
| joelvonrotz | 0:11ad6aaed10a | 532 | UseInternalTuningSettings = PALDevDataGet(Dev, UseInternalTuningSettings); |
| joelvonrotz | 0:11ad6aaed10a | 533 | |
| joelvonrotz | 0:11ad6aaed10a | 534 | if (UseInternalTuningSettings == 0) |
| joelvonrotz | 0:11ad6aaed10a | 535 | { |
| joelvonrotz | 0:11ad6aaed10a | 536 | pTuningSettingBuffer = PALDevDataGet(Dev, pTuningSettingsPointer); |
| joelvonrotz | 0:11ad6aaed10a | 537 | } |
| joelvonrotz | 0:11ad6aaed10a | 538 | else |
| joelvonrotz | 0:11ad6aaed10a | 539 | { |
| joelvonrotz | 0:11ad6aaed10a | 540 | pTuningSettingBuffer = DefaultTuningSettings; |
| joelvonrotz | 0:11ad6aaed10a | 541 | } |
| joelvonrotz | 0:11ad6aaed10a | 542 | } |
| joelvonrotz | 0:11ad6aaed10a | 543 | |
| joelvonrotz | 0:11ad6aaed10a | 544 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 545 | { |
| joelvonrotz | 0:11ad6aaed10a | 546 | Status = VL53L0X_load_tuning_settings(Dev, pTuningSettingBuffer); |
| joelvonrotz | 0:11ad6aaed10a | 547 | } |
| joelvonrotz | 0:11ad6aaed10a | 548 | |
| joelvonrotz | 0:11ad6aaed10a | 549 | /* Set interrupt config to new sample ready */ |
| joelvonrotz | 0:11ad6aaed10a | 550 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 551 | Status = VL53L0X_SetGpioConfig(Dev, 0, 0, VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY, VL53L0X_INTERRUPTPOLARITY_LOW); |
| joelvonrotz | 0:11ad6aaed10a | 552 | } |
| joelvonrotz | 0:11ad6aaed10a | 553 | |
| joelvonrotz | 0:11ad6aaed10a | 554 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 555 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 556 | Status |= VL53L0X_RdWord(Dev, 0x84, &tempword); |
| joelvonrotz | 0:11ad6aaed10a | 557 | Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 558 | } |
| joelvonrotz | 0:11ad6aaed10a | 559 | |
| joelvonrotz | 0:11ad6aaed10a | 560 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 561 | VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, OscFrequencyMHz, VL53L0X_FIXPOINT412TOFIXPOINT1616(tempword)); |
| joelvonrotz | 0:11ad6aaed10a | 562 | } |
| joelvonrotz | 0:11ad6aaed10a | 563 | |
| joelvonrotz | 0:11ad6aaed10a | 564 | /* After static init, some device parameters may be changed, |
| joelvonrotz | 0:11ad6aaed10a | 565 | * so update them */ |
| joelvonrotz | 0:11ad6aaed10a | 566 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 567 | { |
| joelvonrotz | 0:11ad6aaed10a | 568 | Status = VL53L0X_GetDeviceParameters(Dev, &CurrentParameters); |
| joelvonrotz | 0:11ad6aaed10a | 569 | } |
| joelvonrotz | 0:11ad6aaed10a | 570 | |
| joelvonrotz | 0:11ad6aaed10a | 571 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 572 | { |
| joelvonrotz | 0:11ad6aaed10a | 573 | Status = VL53L0X_GetFractionEnable(Dev, &tempbyte); |
| joelvonrotz | 0:11ad6aaed10a | 574 | |
| joelvonrotz | 0:11ad6aaed10a | 575 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 576 | { |
| joelvonrotz | 0:11ad6aaed10a | 577 | PALDevDataSet(Dev, RangeFractionalEnable, tempbyte); |
| joelvonrotz | 0:11ad6aaed10a | 578 | } |
| joelvonrotz | 0:11ad6aaed10a | 579 | } |
| joelvonrotz | 0:11ad6aaed10a | 580 | |
| joelvonrotz | 0:11ad6aaed10a | 581 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 582 | { |
| joelvonrotz | 0:11ad6aaed10a | 583 | PALDevDataSet(Dev, CurrentParameters, CurrentParameters); |
| joelvonrotz | 0:11ad6aaed10a | 584 | } |
| joelvonrotz | 0:11ad6aaed10a | 585 | |
| joelvonrotz | 0:11ad6aaed10a | 586 | /* read the sequence config and save it */ |
| joelvonrotz | 0:11ad6aaed10a | 587 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 588 | { |
| joelvonrotz | 0:11ad6aaed10a | 589 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, &tempbyte); |
| joelvonrotz | 0:11ad6aaed10a | 590 | |
| joelvonrotz | 0:11ad6aaed10a | 591 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 592 | { |
| joelvonrotz | 0:11ad6aaed10a | 593 | PALDevDataSet(Dev, SequenceConfig, tempbyte); |
| joelvonrotz | 0:11ad6aaed10a | 594 | } |
| joelvonrotz | 0:11ad6aaed10a | 595 | } |
| joelvonrotz | 0:11ad6aaed10a | 596 | |
| joelvonrotz | 0:11ad6aaed10a | 597 | /* Disable MSRC and TCC by default */ |
| joelvonrotz | 0:11ad6aaed10a | 598 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 599 | { |
| joelvonrotz | 0:11ad6aaed10a | 600 | Status = VL53L0X_SetSequenceStepEnable(Dev, VL53L0X_SEQUENCESTEP_TCC, 0); |
| joelvonrotz | 0:11ad6aaed10a | 601 | } |
| joelvonrotz | 0:11ad6aaed10a | 602 | |
| joelvonrotz | 0:11ad6aaed10a | 603 | |
| joelvonrotz | 0:11ad6aaed10a | 604 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 605 | { |
| joelvonrotz | 0:11ad6aaed10a | 606 | Status = VL53L0X_SetSequenceStepEnable(Dev, VL53L0X_SEQUENCESTEP_MSRC, 0); |
| joelvonrotz | 0:11ad6aaed10a | 607 | } |
| joelvonrotz | 0:11ad6aaed10a | 608 | |
| joelvonrotz | 0:11ad6aaed10a | 609 | |
| joelvonrotz | 0:11ad6aaed10a | 610 | /* Set PAL State to standby */ |
| joelvonrotz | 0:11ad6aaed10a | 611 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 612 | { |
| joelvonrotz | 0:11ad6aaed10a | 613 | PALDevDataSet(Dev, PalState, VL53L0X_STATE_IDLE); |
| joelvonrotz | 0:11ad6aaed10a | 614 | } |
| joelvonrotz | 0:11ad6aaed10a | 615 | |
| joelvonrotz | 0:11ad6aaed10a | 616 | |
| joelvonrotz | 0:11ad6aaed10a | 617 | /* Store pre-range vcsel period */ |
| joelvonrotz | 0:11ad6aaed10a | 618 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 619 | { |
| joelvonrotz | 0:11ad6aaed10a | 620 | Status = VL53L0X_GetVcselPulsePeriod(Dev, VL53L0X_VCSEL_PERIOD_PRE_RANGE, &vcselPulsePeriodPCLK); |
| joelvonrotz | 0:11ad6aaed10a | 621 | } |
| joelvonrotz | 0:11ad6aaed10a | 622 | |
| joelvonrotz | 0:11ad6aaed10a | 623 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 624 | { |
| joelvonrotz | 0:11ad6aaed10a | 625 | VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, PreRangeVcselPulsePeriod, vcselPulsePeriodPCLK); |
| joelvonrotz | 0:11ad6aaed10a | 626 | } |
| joelvonrotz | 0:11ad6aaed10a | 627 | |
| joelvonrotz | 0:11ad6aaed10a | 628 | /* Store final-range vcsel period */ |
| joelvonrotz | 0:11ad6aaed10a | 629 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 630 | { |
| joelvonrotz | 0:11ad6aaed10a | 631 | Status = VL53L0X_GetVcselPulsePeriod(Dev, VL53L0X_VCSEL_PERIOD_FINAL_RANGE, &vcselPulsePeriodPCLK); |
| joelvonrotz | 0:11ad6aaed10a | 632 | } |
| joelvonrotz | 0:11ad6aaed10a | 633 | |
| joelvonrotz | 0:11ad6aaed10a | 634 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 635 | { |
| joelvonrotz | 0:11ad6aaed10a | 636 | VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, FinalRangeVcselPulsePeriod, vcselPulsePeriodPCLK); |
| joelvonrotz | 0:11ad6aaed10a | 637 | } |
| joelvonrotz | 0:11ad6aaed10a | 638 | |
| joelvonrotz | 0:11ad6aaed10a | 639 | /* Store pre-range timeout */ |
| joelvonrotz | 0:11ad6aaed10a | 640 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 641 | { |
| joelvonrotz | 0:11ad6aaed10a | 642 | Status = get_sequence_step_timeout(Dev, VL53L0X_SEQUENCESTEP_PRE_RANGE, &seqTimeoutMicroSecs); |
| joelvonrotz | 0:11ad6aaed10a | 643 | } |
| joelvonrotz | 0:11ad6aaed10a | 644 | |
| joelvonrotz | 0:11ad6aaed10a | 645 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 646 | VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, PreRangeTimeoutMicroSecs, seqTimeoutMicroSecs); |
| joelvonrotz | 0:11ad6aaed10a | 647 | } |
| joelvonrotz | 0:11ad6aaed10a | 648 | |
| joelvonrotz | 0:11ad6aaed10a | 649 | /* Store final-range timeout */ |
| joelvonrotz | 0:11ad6aaed10a | 650 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 651 | { |
| joelvonrotz | 0:11ad6aaed10a | 652 | Status = get_sequence_step_timeout(Dev, VL53L0X_SEQUENCESTEP_FINAL_RANGE, &seqTimeoutMicroSecs); |
| joelvonrotz | 0:11ad6aaed10a | 653 | } |
| joelvonrotz | 0:11ad6aaed10a | 654 | |
| joelvonrotz | 0:11ad6aaed10a | 655 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 656 | VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, FinalRangeTimeoutMicroSecs, seqTimeoutMicroSecs); |
| joelvonrotz | 0:11ad6aaed10a | 657 | } |
| joelvonrotz | 0:11ad6aaed10a | 658 | |
| joelvonrotz | 0:11ad6aaed10a | 659 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 660 | } |
| joelvonrotz | 0:11ad6aaed10a | 661 | |
| joelvonrotz | 0:11ad6aaed10a | 662 | VL53L0X_Error VL53L0X_WaitDeviceBooted(VL53L0X_DEV Dev) |
| joelvonrotz | 0:11ad6aaed10a | 663 | { |
| joelvonrotz | 0:11ad6aaed10a | 664 | VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; |
| joelvonrotz | 0:11ad6aaed10a | 665 | |
| joelvonrotz | 0:11ad6aaed10a | 666 | /* not implemented on VL53L0X */ |
| joelvonrotz | 0:11ad6aaed10a | 667 | |
| joelvonrotz | 0:11ad6aaed10a | 668 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 669 | } |
| joelvonrotz | 0:11ad6aaed10a | 670 | |
| joelvonrotz | 0:11ad6aaed10a | 671 | VL53L0X_Error VL53L0X_ResetDevice(VL53L0X_DEV Dev) |
| joelvonrotz | 0:11ad6aaed10a | 672 | { |
| joelvonrotz | 0:11ad6aaed10a | 673 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 674 | uint8_t Byte; |
| joelvonrotz | 0:11ad6aaed10a | 675 | |
| joelvonrotz | 0:11ad6aaed10a | 676 | /* Set reset bit */ |
| joelvonrotz | 0:11ad6aaed10a | 677 | Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SOFT_RESET_GO2_SOFT_RESET_N, |
| joelvonrotz | 0:11ad6aaed10a | 678 | 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 679 | |
| joelvonrotz | 0:11ad6aaed10a | 680 | /* Wait for some time */ |
| joelvonrotz | 0:11ad6aaed10a | 681 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 682 | do { |
| joelvonrotz | 0:11ad6aaed10a | 683 | Status = VL53L0X_RdByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 684 | VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Byte); |
| joelvonrotz | 0:11ad6aaed10a | 685 | } while (Byte != 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 686 | } |
| joelvonrotz | 0:11ad6aaed10a | 687 | |
| joelvonrotz | 0:11ad6aaed10a | 688 | VL53L0X_PollingDelay(Dev); |
| joelvonrotz | 0:11ad6aaed10a | 689 | |
| joelvonrotz | 0:11ad6aaed10a | 690 | /* Release reset */ |
| joelvonrotz | 0:11ad6aaed10a | 691 | Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SOFT_RESET_GO2_SOFT_RESET_N, |
| joelvonrotz | 0:11ad6aaed10a | 692 | 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 693 | |
| joelvonrotz | 0:11ad6aaed10a | 694 | /* Wait until correct boot-up of the device */ |
| joelvonrotz | 0:11ad6aaed10a | 695 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 696 | do { |
| joelvonrotz | 0:11ad6aaed10a | 697 | Status = VL53L0X_RdByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 698 | VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Byte); |
| joelvonrotz | 0:11ad6aaed10a | 699 | } while (Byte == 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 700 | } |
| joelvonrotz | 0:11ad6aaed10a | 701 | |
| joelvonrotz | 0:11ad6aaed10a | 702 | VL53L0X_PollingDelay(Dev); |
| joelvonrotz | 0:11ad6aaed10a | 703 | |
| joelvonrotz | 0:11ad6aaed10a | 704 | /* Set PAL State to VL53L0X_STATE_POWERDOWN */ |
| joelvonrotz | 0:11ad6aaed10a | 705 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 706 | PALDevDataSet(Dev, PalState, VL53L0X_STATE_POWERDOWN); |
| joelvonrotz | 0:11ad6aaed10a | 707 | |
| joelvonrotz | 0:11ad6aaed10a | 708 | |
| joelvonrotz | 0:11ad6aaed10a | 709 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 710 | } |
| joelvonrotz | 0:11ad6aaed10a | 711 | /* End Group PAL Init Functions */ |
| joelvonrotz | 0:11ad6aaed10a | 712 | |
| joelvonrotz | 0:11ad6aaed10a | 713 | /* Group PAL Parameters Functions */ |
| joelvonrotz | 0:11ad6aaed10a | 714 | VL53L0X_Error VL53L0X_SetDeviceParameters(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 715 | const VL53L0X_DeviceParameters_t *pDeviceParameters) |
| joelvonrotz | 0:11ad6aaed10a | 716 | { |
| joelvonrotz | 0:11ad6aaed10a | 717 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 718 | int i; |
| joelvonrotz | 0:11ad6aaed10a | 719 | Status = VL53L0X_SetDeviceMode(Dev, pDeviceParameters->DeviceMode); |
| joelvonrotz | 0:11ad6aaed10a | 720 | |
| joelvonrotz | 0:11ad6aaed10a | 721 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 722 | Status = VL53L0X_SetInterMeasurementPeriodMilliSeconds(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 723 | pDeviceParameters->InterMeasurementPeriodMilliSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 724 | |
| joelvonrotz | 0:11ad6aaed10a | 725 | |
| joelvonrotz | 0:11ad6aaed10a | 726 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 727 | Status = VL53L0X_SetXTalkCompensationRateMegaCps(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 728 | pDeviceParameters->XTalkCompensationRateMegaCps); |
| joelvonrotz | 0:11ad6aaed10a | 729 | |
| joelvonrotz | 0:11ad6aaed10a | 730 | |
| joelvonrotz | 0:11ad6aaed10a | 731 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 732 | Status = VL53L0X_SetOffsetCalibrationDataMicroMeter(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 733 | pDeviceParameters->RangeOffsetMicroMeters); |
| joelvonrotz | 0:11ad6aaed10a | 734 | |
| joelvonrotz | 0:11ad6aaed10a | 735 | |
| joelvonrotz | 0:11ad6aaed10a | 736 | for (i = 0; i < VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS; i++) { |
| joelvonrotz | 0:11ad6aaed10a | 737 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 738 | Status |= VL53L0X_SetLimitCheckEnable(Dev, i, |
| joelvonrotz | 0:11ad6aaed10a | 739 | pDeviceParameters->LimitChecksEnable[i]); |
| joelvonrotz | 0:11ad6aaed10a | 740 | else |
| joelvonrotz | 0:11ad6aaed10a | 741 | break; |
| joelvonrotz | 0:11ad6aaed10a | 742 | |
| joelvonrotz | 0:11ad6aaed10a | 743 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 744 | Status |= VL53L0X_SetLimitCheckValue(Dev, i, |
| joelvonrotz | 0:11ad6aaed10a | 745 | pDeviceParameters->LimitChecksValue[i]); |
| joelvonrotz | 0:11ad6aaed10a | 746 | else |
| joelvonrotz | 0:11ad6aaed10a | 747 | break; |
| joelvonrotz | 0:11ad6aaed10a | 748 | |
| joelvonrotz | 0:11ad6aaed10a | 749 | } |
| joelvonrotz | 0:11ad6aaed10a | 750 | |
| joelvonrotz | 0:11ad6aaed10a | 751 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 752 | Status = VL53L0X_SetWrapAroundCheckEnable(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 753 | pDeviceParameters->WrapAroundCheckEnable); |
| joelvonrotz | 0:11ad6aaed10a | 754 | |
| joelvonrotz | 0:11ad6aaed10a | 755 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 756 | Status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 757 | pDeviceParameters->MeasurementTimingBudgetMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 758 | |
| joelvonrotz | 0:11ad6aaed10a | 759 | |
| joelvonrotz | 0:11ad6aaed10a | 760 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 761 | } |
| joelvonrotz | 0:11ad6aaed10a | 762 | |
| joelvonrotz | 0:11ad6aaed10a | 763 | VL53L0X_Error VL53L0X_GetDeviceParameters(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 764 | VL53L0X_DeviceParameters_t *pDeviceParameters) |
| joelvonrotz | 0:11ad6aaed10a | 765 | { |
| joelvonrotz | 0:11ad6aaed10a | 766 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 767 | int i; |
| joelvonrotz | 0:11ad6aaed10a | 768 | |
| joelvonrotz | 0:11ad6aaed10a | 769 | |
| joelvonrotz | 0:11ad6aaed10a | 770 | Status = VL53L0X_GetDeviceMode(Dev, &(pDeviceParameters->DeviceMode)); |
| joelvonrotz | 0:11ad6aaed10a | 771 | |
| joelvonrotz | 0:11ad6aaed10a | 772 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 773 | Status = VL53L0X_GetInterMeasurementPeriodMilliSeconds(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 774 | &(pDeviceParameters->InterMeasurementPeriodMilliSeconds)); |
| joelvonrotz | 0:11ad6aaed10a | 775 | |
| joelvonrotz | 0:11ad6aaed10a | 776 | |
| joelvonrotz | 0:11ad6aaed10a | 777 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 778 | pDeviceParameters->XTalkCompensationEnable = 0; |
| joelvonrotz | 0:11ad6aaed10a | 779 | |
| joelvonrotz | 0:11ad6aaed10a | 780 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 781 | Status = VL53L0X_GetXTalkCompensationRateMegaCps(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 782 | &(pDeviceParameters->XTalkCompensationRateMegaCps)); |
| joelvonrotz | 0:11ad6aaed10a | 783 | |
| joelvonrotz | 0:11ad6aaed10a | 784 | |
| joelvonrotz | 0:11ad6aaed10a | 785 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 786 | Status = VL53L0X_GetOffsetCalibrationDataMicroMeter(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 787 | &(pDeviceParameters->RangeOffsetMicroMeters)); |
| joelvonrotz | 0:11ad6aaed10a | 788 | |
| joelvonrotz | 0:11ad6aaed10a | 789 | |
| joelvonrotz | 0:11ad6aaed10a | 790 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 791 | for (i = 0; i < VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS; i++) { |
| joelvonrotz | 0:11ad6aaed10a | 792 | /* get first the values, then the enables. |
| joelvonrotz | 0:11ad6aaed10a | 793 | * VL53L0X_GetLimitCheckValue will modify the enable |
| joelvonrotz | 0:11ad6aaed10a | 794 | * flags |
| joelvonrotz | 0:11ad6aaed10a | 795 | */ |
| joelvonrotz | 0:11ad6aaed10a | 796 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 797 | Status |= VL53L0X_GetLimitCheckValue(Dev, i, |
| joelvonrotz | 0:11ad6aaed10a | 798 | &(pDeviceParameters->LimitChecksValue[i])); |
| joelvonrotz | 0:11ad6aaed10a | 799 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 800 | break; |
| joelvonrotz | 0:11ad6aaed10a | 801 | } |
| joelvonrotz | 0:11ad6aaed10a | 802 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 803 | Status |= VL53L0X_GetLimitCheckEnable(Dev, i, |
| joelvonrotz | 0:11ad6aaed10a | 804 | &(pDeviceParameters->LimitChecksEnable[i])); |
| joelvonrotz | 0:11ad6aaed10a | 805 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 806 | break; |
| joelvonrotz | 0:11ad6aaed10a | 807 | } |
| joelvonrotz | 0:11ad6aaed10a | 808 | } |
| joelvonrotz | 0:11ad6aaed10a | 809 | } |
| joelvonrotz | 0:11ad6aaed10a | 810 | |
| joelvonrotz | 0:11ad6aaed10a | 811 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 812 | Status = VL53L0X_GetWrapAroundCheckEnable(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 813 | &(pDeviceParameters->WrapAroundCheckEnable)); |
| joelvonrotz | 0:11ad6aaed10a | 814 | } |
| joelvonrotz | 0:11ad6aaed10a | 815 | |
| joelvonrotz | 0:11ad6aaed10a | 816 | /* Need to be done at the end as it uses VCSELPulsePeriod */ |
| joelvonrotz | 0:11ad6aaed10a | 817 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 818 | Status = VL53L0X_GetMeasurementTimingBudgetMicroSeconds(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 819 | &(pDeviceParameters->MeasurementTimingBudgetMicroSeconds)); |
| joelvonrotz | 0:11ad6aaed10a | 820 | } |
| joelvonrotz | 0:11ad6aaed10a | 821 | |
| joelvonrotz | 0:11ad6aaed10a | 822 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 823 | } |
| joelvonrotz | 0:11ad6aaed10a | 824 | |
| joelvonrotz | 0:11ad6aaed10a | 825 | VL53L0X_Error VL53L0X_SetDeviceMode(VL53L0X_DEV Dev, VL53L0X_DeviceModes DeviceMode) |
| joelvonrotz | 0:11ad6aaed10a | 826 | { |
| joelvonrotz | 0:11ad6aaed10a | 827 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 828 | |
| joelvonrotz | 0:11ad6aaed10a | 829 | |
| joelvonrotz | 0:11ad6aaed10a | 830 | switch (DeviceMode) { |
| joelvonrotz | 0:11ad6aaed10a | 831 | case VL53L0X_DEVICEMODE_SINGLE_RANGING: |
| joelvonrotz | 0:11ad6aaed10a | 832 | case VL53L0X_DEVICEMODE_CONTINUOUS_RANGING: |
| joelvonrotz | 0:11ad6aaed10a | 833 | case VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING: |
| joelvonrotz | 0:11ad6aaed10a | 834 | case VL53L0X_DEVICEMODE_GPIO_DRIVE: |
| joelvonrotz | 0:11ad6aaed10a | 835 | case VL53L0X_DEVICEMODE_GPIO_OSC: |
| joelvonrotz | 0:11ad6aaed10a | 836 | /* Supported modes */ |
| joelvonrotz | 0:11ad6aaed10a | 837 | VL53L0X_SETPARAMETERFIELD(Dev, DeviceMode, DeviceMode); |
| joelvonrotz | 0:11ad6aaed10a | 838 | break; |
| joelvonrotz | 0:11ad6aaed10a | 839 | default: |
| joelvonrotz | 0:11ad6aaed10a | 840 | /* Unsupported mode */ |
| joelvonrotz | 0:11ad6aaed10a | 841 | Status = VL53L0X_ERROR_MODE_NOT_SUPPORTED; |
| joelvonrotz | 0:11ad6aaed10a | 842 | } |
| joelvonrotz | 0:11ad6aaed10a | 843 | |
| joelvonrotz | 0:11ad6aaed10a | 844 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 845 | } |
| joelvonrotz | 0:11ad6aaed10a | 846 | |
| joelvonrotz | 0:11ad6aaed10a | 847 | VL53L0X_Error VL53L0X_GetDeviceMode(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 848 | VL53L0X_DeviceModes *pDeviceMode) |
| joelvonrotz | 0:11ad6aaed10a | 849 | { |
| joelvonrotz | 0:11ad6aaed10a | 850 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 851 | |
| joelvonrotz | 0:11ad6aaed10a | 852 | VL53L0X_GETPARAMETERFIELD(Dev, DeviceMode, *pDeviceMode); |
| joelvonrotz | 0:11ad6aaed10a | 853 | |
| joelvonrotz | 0:11ad6aaed10a | 854 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 855 | } |
| joelvonrotz | 0:11ad6aaed10a | 856 | |
| joelvonrotz | 0:11ad6aaed10a | 857 | VL53L0X_Error VL53L0X_SetRangeFractionEnable(VL53L0X_DEV Dev, uint8_t Enable) |
| joelvonrotz | 0:11ad6aaed10a | 858 | { |
| joelvonrotz | 0:11ad6aaed10a | 859 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 860 | |
| joelvonrotz | 0:11ad6aaed10a | 861 | |
| joelvonrotz | 0:11ad6aaed10a | 862 | Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_RANGE_CONFIG, Enable); |
| joelvonrotz | 0:11ad6aaed10a | 863 | |
| joelvonrotz | 0:11ad6aaed10a | 864 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 865 | PALDevDataSet(Dev, RangeFractionalEnable, Enable); |
| joelvonrotz | 0:11ad6aaed10a | 866 | |
| joelvonrotz | 0:11ad6aaed10a | 867 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 868 | } |
| joelvonrotz | 0:11ad6aaed10a | 869 | |
| joelvonrotz | 0:11ad6aaed10a | 870 | VL53L0X_Error VL53L0X_GetFractionEnable(VL53L0X_DEV Dev, uint8_t *pEnabled) |
| joelvonrotz | 0:11ad6aaed10a | 871 | { |
| joelvonrotz | 0:11ad6aaed10a | 872 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 873 | |
| joelvonrotz | 0:11ad6aaed10a | 874 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_RANGE_CONFIG, pEnabled); |
| joelvonrotz | 0:11ad6aaed10a | 875 | |
| joelvonrotz | 0:11ad6aaed10a | 876 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 877 | *pEnabled = (*pEnabled & 1); |
| joelvonrotz | 0:11ad6aaed10a | 878 | |
| joelvonrotz | 0:11ad6aaed10a | 879 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 880 | } |
| joelvonrotz | 0:11ad6aaed10a | 881 | |
| joelvonrotz | 0:11ad6aaed10a | 882 | VL53L0X_Error VL53L0X_SetHistogramMode(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 883 | VL53L0X_HistogramModes HistogramMode) |
| joelvonrotz | 0:11ad6aaed10a | 884 | { |
| joelvonrotz | 0:11ad6aaed10a | 885 | VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; |
| joelvonrotz | 0:11ad6aaed10a | 886 | |
| joelvonrotz | 0:11ad6aaed10a | 887 | /* not implemented on VL53L0X */ |
| joelvonrotz | 0:11ad6aaed10a | 888 | |
| joelvonrotz | 0:11ad6aaed10a | 889 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 890 | } |
| joelvonrotz | 0:11ad6aaed10a | 891 | |
| joelvonrotz | 0:11ad6aaed10a | 892 | VL53L0X_Error VL53L0X_GetHistogramMode(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 893 | VL53L0X_HistogramModes *pHistogramMode) |
| joelvonrotz | 0:11ad6aaed10a | 894 | { |
| joelvonrotz | 0:11ad6aaed10a | 895 | VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; |
| joelvonrotz | 0:11ad6aaed10a | 896 | |
| joelvonrotz | 0:11ad6aaed10a | 897 | /* not implemented on VL53L0X */ |
| joelvonrotz | 0:11ad6aaed10a | 898 | |
| joelvonrotz | 0:11ad6aaed10a | 899 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 900 | } |
| joelvonrotz | 0:11ad6aaed10a | 901 | |
| joelvonrotz | 0:11ad6aaed10a | 902 | VL53L0X_Error VL53L0X_SetMeasurementTimingBudgetMicroSeconds(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 903 | uint32_t MeasurementTimingBudgetMicroSeconds) |
| joelvonrotz | 0:11ad6aaed10a | 904 | { |
| joelvonrotz | 0:11ad6aaed10a | 905 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 906 | |
| joelvonrotz | 0:11ad6aaed10a | 907 | Status = VL53L0X_set_measurement_timing_budget_micro_seconds(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 908 | MeasurementTimingBudgetMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 909 | |
| joelvonrotz | 0:11ad6aaed10a | 910 | |
| joelvonrotz | 0:11ad6aaed10a | 911 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 912 | } |
| joelvonrotz | 0:11ad6aaed10a | 913 | |
| joelvonrotz | 0:11ad6aaed10a | 914 | VL53L0X_Error VL53L0X_GetMeasurementTimingBudgetMicroSeconds(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 915 | uint32_t *pMeasurementTimingBudgetMicroSeconds) |
| joelvonrotz | 0:11ad6aaed10a | 916 | { |
| joelvonrotz | 0:11ad6aaed10a | 917 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 918 | |
| joelvonrotz | 0:11ad6aaed10a | 919 | Status = VL53L0X_get_measurement_timing_budget_micro_seconds(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 920 | pMeasurementTimingBudgetMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 921 | |
| joelvonrotz | 0:11ad6aaed10a | 922 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 923 | } |
| joelvonrotz | 0:11ad6aaed10a | 924 | |
| joelvonrotz | 0:11ad6aaed10a | 925 | VL53L0X_Error VL53L0X_SetVcselPulsePeriod(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 926 | VL53L0X_VcselPeriod VcselPeriodType, uint8_t VCSELPulsePeriodPCLK) |
| joelvonrotz | 0:11ad6aaed10a | 927 | { |
| joelvonrotz | 0:11ad6aaed10a | 928 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 929 | |
| joelvonrotz | 0:11ad6aaed10a | 930 | Status = VL53L0X_set_vcsel_pulse_period(Dev, VcselPeriodType, |
| joelvonrotz | 0:11ad6aaed10a | 931 | VCSELPulsePeriodPCLK); |
| joelvonrotz | 0:11ad6aaed10a | 932 | |
| joelvonrotz | 0:11ad6aaed10a | 933 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 934 | } |
| joelvonrotz | 0:11ad6aaed10a | 935 | |
| joelvonrotz | 0:11ad6aaed10a | 936 | VL53L0X_Error VL53L0X_GetVcselPulsePeriod(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 937 | VL53L0X_VcselPeriod VcselPeriodType, uint8_t *pVCSELPulsePeriodPCLK) |
| joelvonrotz | 0:11ad6aaed10a | 938 | { |
| joelvonrotz | 0:11ad6aaed10a | 939 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 940 | |
| joelvonrotz | 0:11ad6aaed10a | 941 | Status = VL53L0X_get_vcsel_pulse_period(Dev, VcselPeriodType, |
| joelvonrotz | 0:11ad6aaed10a | 942 | pVCSELPulsePeriodPCLK); |
| joelvonrotz | 0:11ad6aaed10a | 943 | |
| joelvonrotz | 0:11ad6aaed10a | 944 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 945 | } |
| joelvonrotz | 0:11ad6aaed10a | 946 | |
| joelvonrotz | 0:11ad6aaed10a | 947 | VL53L0X_Error VL53L0X_SetSequenceStepEnable(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 948 | VL53L0X_SequenceStepId SequenceStepId, uint8_t SequenceStepEnabled) |
| joelvonrotz | 0:11ad6aaed10a | 949 | { |
| joelvonrotz | 0:11ad6aaed10a | 950 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 951 | uint8_t SequenceConfig = 0; |
| joelvonrotz | 0:11ad6aaed10a | 952 | uint8_t SequenceConfigNew = 0; |
| joelvonrotz | 0:11ad6aaed10a | 953 | uint32_t MeasurementTimingBudgetMicroSeconds; |
| joelvonrotz | 0:11ad6aaed10a | 954 | |
| joelvonrotz | 0:11ad6aaed10a | 955 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, |
| joelvonrotz | 0:11ad6aaed10a | 956 | &SequenceConfig); |
| joelvonrotz | 0:11ad6aaed10a | 957 | |
| joelvonrotz | 0:11ad6aaed10a | 958 | SequenceConfigNew = SequenceConfig; |
| joelvonrotz | 0:11ad6aaed10a | 959 | |
| joelvonrotz | 0:11ad6aaed10a | 960 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 961 | if (SequenceStepEnabled == 1) { |
| joelvonrotz | 0:11ad6aaed10a | 962 | |
| joelvonrotz | 0:11ad6aaed10a | 963 | /* Enable requested sequence step |
| joelvonrotz | 0:11ad6aaed10a | 964 | */ |
| joelvonrotz | 0:11ad6aaed10a | 965 | switch (SequenceStepId) { |
| joelvonrotz | 0:11ad6aaed10a | 966 | case VL53L0X_SEQUENCESTEP_TCC: |
| joelvonrotz | 0:11ad6aaed10a | 967 | SequenceConfigNew |= 0x10; |
| joelvonrotz | 0:11ad6aaed10a | 968 | break; |
| joelvonrotz | 0:11ad6aaed10a | 969 | case VL53L0X_SEQUENCESTEP_DSS: |
| joelvonrotz | 0:11ad6aaed10a | 970 | SequenceConfigNew |= 0x28; |
| joelvonrotz | 0:11ad6aaed10a | 971 | break; |
| joelvonrotz | 0:11ad6aaed10a | 972 | case VL53L0X_SEQUENCESTEP_MSRC: |
| joelvonrotz | 0:11ad6aaed10a | 973 | SequenceConfigNew |= 0x04; |
| joelvonrotz | 0:11ad6aaed10a | 974 | break; |
| joelvonrotz | 0:11ad6aaed10a | 975 | case VL53L0X_SEQUENCESTEP_PRE_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 976 | SequenceConfigNew |= 0x40; |
| joelvonrotz | 0:11ad6aaed10a | 977 | break; |
| joelvonrotz | 0:11ad6aaed10a | 978 | case VL53L0X_SEQUENCESTEP_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 979 | SequenceConfigNew |= 0x80; |
| joelvonrotz | 0:11ad6aaed10a | 980 | break; |
| joelvonrotz | 0:11ad6aaed10a | 981 | default: |
| joelvonrotz | 0:11ad6aaed10a | 982 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 983 | } |
| joelvonrotz | 0:11ad6aaed10a | 984 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 985 | /* Disable requested sequence step |
| joelvonrotz | 0:11ad6aaed10a | 986 | */ |
| joelvonrotz | 0:11ad6aaed10a | 987 | switch (SequenceStepId) { |
| joelvonrotz | 0:11ad6aaed10a | 988 | case VL53L0X_SEQUENCESTEP_TCC: |
| joelvonrotz | 0:11ad6aaed10a | 989 | SequenceConfigNew &= 0xef; |
| joelvonrotz | 0:11ad6aaed10a | 990 | break; |
| joelvonrotz | 0:11ad6aaed10a | 991 | case VL53L0X_SEQUENCESTEP_DSS: |
| joelvonrotz | 0:11ad6aaed10a | 992 | SequenceConfigNew &= 0xd7; |
| joelvonrotz | 0:11ad6aaed10a | 993 | break; |
| joelvonrotz | 0:11ad6aaed10a | 994 | case VL53L0X_SEQUENCESTEP_MSRC: |
| joelvonrotz | 0:11ad6aaed10a | 995 | SequenceConfigNew &= 0xfb; |
| joelvonrotz | 0:11ad6aaed10a | 996 | break; |
| joelvonrotz | 0:11ad6aaed10a | 997 | case VL53L0X_SEQUENCESTEP_PRE_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 998 | SequenceConfigNew &= 0xbf; |
| joelvonrotz | 0:11ad6aaed10a | 999 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1000 | case VL53L0X_SEQUENCESTEP_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1001 | SequenceConfigNew &= 0x7f; |
| joelvonrotz | 0:11ad6aaed10a | 1002 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1003 | default: |
| joelvonrotz | 0:11ad6aaed10a | 1004 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 1005 | } |
| joelvonrotz | 0:11ad6aaed10a | 1006 | } |
| joelvonrotz | 0:11ad6aaed10a | 1007 | } |
| joelvonrotz | 0:11ad6aaed10a | 1008 | |
| joelvonrotz | 0:11ad6aaed10a | 1009 | if (SequenceConfigNew != SequenceConfig) { |
| joelvonrotz | 0:11ad6aaed10a | 1010 | /* Apply New Setting */ |
| joelvonrotz | 0:11ad6aaed10a | 1011 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1012 | Status = VL53L0X_WrByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1013 | VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, SequenceConfigNew); |
| joelvonrotz | 0:11ad6aaed10a | 1014 | } |
| joelvonrotz | 0:11ad6aaed10a | 1015 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 1016 | PALDevDataSet(Dev, SequenceConfig, SequenceConfigNew); |
| joelvonrotz | 0:11ad6aaed10a | 1017 | |
| joelvonrotz | 0:11ad6aaed10a | 1018 | |
| joelvonrotz | 0:11ad6aaed10a | 1019 | /* Recalculate timing budget */ |
| joelvonrotz | 0:11ad6aaed10a | 1020 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1021 | VL53L0X_GETPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1022 | MeasurementTimingBudgetMicroSeconds, |
| joelvonrotz | 0:11ad6aaed10a | 1023 | MeasurementTimingBudgetMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1024 | |
| joelvonrotz | 0:11ad6aaed10a | 1025 | VL53L0X_SetMeasurementTimingBudgetMicroSeconds(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1026 | MeasurementTimingBudgetMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1027 | } |
| joelvonrotz | 0:11ad6aaed10a | 1028 | } |
| joelvonrotz | 0:11ad6aaed10a | 1029 | |
| joelvonrotz | 0:11ad6aaed10a | 1030 | |
| joelvonrotz | 0:11ad6aaed10a | 1031 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1032 | } |
| joelvonrotz | 0:11ad6aaed10a | 1033 | |
| joelvonrotz | 0:11ad6aaed10a | 1034 | VL53L0X_Error sequence_step_enabled(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1035 | VL53L0X_SequenceStepId SequenceStepId, uint8_t SequenceConfig, |
| joelvonrotz | 0:11ad6aaed10a | 1036 | uint8_t *pSequenceStepEnabled) |
| joelvonrotz | 0:11ad6aaed10a | 1037 | { |
| joelvonrotz | 0:11ad6aaed10a | 1038 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1039 | *pSequenceStepEnabled = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1040 | |
| joelvonrotz | 0:11ad6aaed10a | 1041 | switch (SequenceStepId) { |
| joelvonrotz | 0:11ad6aaed10a | 1042 | case VL53L0X_SEQUENCESTEP_TCC: |
| joelvonrotz | 0:11ad6aaed10a | 1043 | *pSequenceStepEnabled = (SequenceConfig & 0x10) >> 4; |
| joelvonrotz | 0:11ad6aaed10a | 1044 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1045 | case VL53L0X_SEQUENCESTEP_DSS: |
| joelvonrotz | 0:11ad6aaed10a | 1046 | *pSequenceStepEnabled = (SequenceConfig & 0x08) >> 3; |
| joelvonrotz | 0:11ad6aaed10a | 1047 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1048 | case VL53L0X_SEQUENCESTEP_MSRC: |
| joelvonrotz | 0:11ad6aaed10a | 1049 | *pSequenceStepEnabled = (SequenceConfig & 0x04) >> 2; |
| joelvonrotz | 0:11ad6aaed10a | 1050 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1051 | case VL53L0X_SEQUENCESTEP_PRE_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1052 | *pSequenceStepEnabled = (SequenceConfig & 0x40) >> 6; |
| joelvonrotz | 0:11ad6aaed10a | 1053 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1054 | case VL53L0X_SEQUENCESTEP_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1055 | *pSequenceStepEnabled = (SequenceConfig & 0x80) >> 7; |
| joelvonrotz | 0:11ad6aaed10a | 1056 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1057 | default: |
| joelvonrotz | 0:11ad6aaed10a | 1058 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 1059 | } |
| joelvonrotz | 0:11ad6aaed10a | 1060 | |
| joelvonrotz | 0:11ad6aaed10a | 1061 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1062 | } |
| joelvonrotz | 0:11ad6aaed10a | 1063 | |
| joelvonrotz | 0:11ad6aaed10a | 1064 | VL53L0X_Error VL53L0X_GetSequenceStepEnable(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1065 | VL53L0X_SequenceStepId SequenceStepId, uint8_t *pSequenceStepEnabled) |
| joelvonrotz | 0:11ad6aaed10a | 1066 | { |
| joelvonrotz | 0:11ad6aaed10a | 1067 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1068 | uint8_t SequenceConfig = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1069 | |
| joelvonrotz | 0:11ad6aaed10a | 1070 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, |
| joelvonrotz | 0:11ad6aaed10a | 1071 | &SequenceConfig); |
| joelvonrotz | 0:11ad6aaed10a | 1072 | |
| joelvonrotz | 0:11ad6aaed10a | 1073 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1074 | Status = sequence_step_enabled(Dev, SequenceStepId, |
| joelvonrotz | 0:11ad6aaed10a | 1075 | SequenceConfig, pSequenceStepEnabled); |
| joelvonrotz | 0:11ad6aaed10a | 1076 | } |
| joelvonrotz | 0:11ad6aaed10a | 1077 | |
| joelvonrotz | 0:11ad6aaed10a | 1078 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1079 | } |
| joelvonrotz | 0:11ad6aaed10a | 1080 | |
| joelvonrotz | 0:11ad6aaed10a | 1081 | VL53L0X_Error VL53L0X_GetSequenceStepEnables(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1082 | VL53L0X_SchedulerSequenceSteps_t *pSchedulerSequenceSteps) |
| joelvonrotz | 0:11ad6aaed10a | 1083 | { |
| joelvonrotz | 0:11ad6aaed10a | 1084 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1085 | uint8_t SequenceConfig = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1086 | |
| joelvonrotz | 0:11ad6aaed10a | 1087 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, |
| joelvonrotz | 0:11ad6aaed10a | 1088 | &SequenceConfig); |
| joelvonrotz | 0:11ad6aaed10a | 1089 | |
| joelvonrotz | 0:11ad6aaed10a | 1090 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1091 | Status = sequence_step_enabled(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1092 | VL53L0X_SEQUENCESTEP_TCC, SequenceConfig, |
| joelvonrotz | 0:11ad6aaed10a | 1093 | &pSchedulerSequenceSteps->TccOn); |
| joelvonrotz | 0:11ad6aaed10a | 1094 | } |
| joelvonrotz | 0:11ad6aaed10a | 1095 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1096 | Status = sequence_step_enabled(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1097 | VL53L0X_SEQUENCESTEP_DSS, SequenceConfig, |
| joelvonrotz | 0:11ad6aaed10a | 1098 | &pSchedulerSequenceSteps->DssOn); |
| joelvonrotz | 0:11ad6aaed10a | 1099 | } |
| joelvonrotz | 0:11ad6aaed10a | 1100 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1101 | Status = sequence_step_enabled(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1102 | VL53L0X_SEQUENCESTEP_MSRC, SequenceConfig, |
| joelvonrotz | 0:11ad6aaed10a | 1103 | &pSchedulerSequenceSteps->MsrcOn); |
| joelvonrotz | 0:11ad6aaed10a | 1104 | } |
| joelvonrotz | 0:11ad6aaed10a | 1105 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1106 | Status = sequence_step_enabled(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1107 | VL53L0X_SEQUENCESTEP_PRE_RANGE, SequenceConfig, |
| joelvonrotz | 0:11ad6aaed10a | 1108 | &pSchedulerSequenceSteps->PreRangeOn); |
| joelvonrotz | 0:11ad6aaed10a | 1109 | } |
| joelvonrotz | 0:11ad6aaed10a | 1110 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1111 | Status = sequence_step_enabled(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1112 | VL53L0X_SEQUENCESTEP_FINAL_RANGE, SequenceConfig, |
| joelvonrotz | 0:11ad6aaed10a | 1113 | &pSchedulerSequenceSteps->FinalRangeOn); |
| joelvonrotz | 0:11ad6aaed10a | 1114 | } |
| joelvonrotz | 0:11ad6aaed10a | 1115 | |
| joelvonrotz | 0:11ad6aaed10a | 1116 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1117 | } |
| joelvonrotz | 0:11ad6aaed10a | 1118 | |
| joelvonrotz | 0:11ad6aaed10a | 1119 | VL53L0X_Error VL53L0X_GetNumberOfSequenceSteps(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1120 | uint8_t *pNumberOfSequenceSteps) |
| joelvonrotz | 0:11ad6aaed10a | 1121 | { |
| joelvonrotz | 0:11ad6aaed10a | 1122 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1123 | |
| joelvonrotz | 0:11ad6aaed10a | 1124 | *pNumberOfSequenceSteps = VL53L0X_SEQUENCESTEP_NUMBER_OF_CHECKS; |
| joelvonrotz | 0:11ad6aaed10a | 1125 | |
| joelvonrotz | 0:11ad6aaed10a | 1126 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1127 | } |
| joelvonrotz | 0:11ad6aaed10a | 1128 | |
| joelvonrotz | 0:11ad6aaed10a | 1129 | VL53L0X_Error VL53L0X_GetSequenceStepsInfo(VL53L0X_SequenceStepId SequenceStepId, |
| joelvonrotz | 0:11ad6aaed10a | 1130 | char *pSequenceStepsString) |
| joelvonrotz | 0:11ad6aaed10a | 1131 | { |
| joelvonrotz | 0:11ad6aaed10a | 1132 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1133 | |
| joelvonrotz | 0:11ad6aaed10a | 1134 | Status = VL53L0X_get_sequence_steps_info( |
| joelvonrotz | 0:11ad6aaed10a | 1135 | SequenceStepId, |
| joelvonrotz | 0:11ad6aaed10a | 1136 | pSequenceStepsString); |
| joelvonrotz | 0:11ad6aaed10a | 1137 | |
| joelvonrotz | 0:11ad6aaed10a | 1138 | |
| joelvonrotz | 0:11ad6aaed10a | 1139 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1140 | } |
| joelvonrotz | 0:11ad6aaed10a | 1141 | |
| joelvonrotz | 0:11ad6aaed10a | 1142 | VL53L0X_Error VL53L0X_SetSequenceStepTimeout(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1143 | VL53L0X_SequenceStepId SequenceStepId, FixPoint1616_t TimeOutMilliSecs) |
| joelvonrotz | 0:11ad6aaed10a | 1144 | { |
| joelvonrotz | 0:11ad6aaed10a | 1145 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1146 | VL53L0X_Error Status1 = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1147 | uint32_t TimeoutMicroSeconds = ((TimeOutMilliSecs * 1000) + 0x8000) |
| joelvonrotz | 0:11ad6aaed10a | 1148 | >> 16; |
| joelvonrotz | 0:11ad6aaed10a | 1149 | uint32_t MeasurementTimingBudgetMicroSeconds; |
| joelvonrotz | 0:11ad6aaed10a | 1150 | FixPoint1616_t OldTimeOutMicroSeconds; |
| joelvonrotz | 0:11ad6aaed10a | 1151 | |
| joelvonrotz | 0:11ad6aaed10a | 1152 | |
| joelvonrotz | 0:11ad6aaed10a | 1153 | /* Read back the current value in case we need to revert back to this. |
| joelvonrotz | 0:11ad6aaed10a | 1154 | */ |
| joelvonrotz | 0:11ad6aaed10a | 1155 | Status = get_sequence_step_timeout(Dev, SequenceStepId, |
| joelvonrotz | 0:11ad6aaed10a | 1156 | &OldTimeOutMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1157 | |
| joelvonrotz | 0:11ad6aaed10a | 1158 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1159 | Status = set_sequence_step_timeout(Dev, SequenceStepId, |
| joelvonrotz | 0:11ad6aaed10a | 1160 | TimeoutMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1161 | } |
| joelvonrotz | 0:11ad6aaed10a | 1162 | |
| joelvonrotz | 0:11ad6aaed10a | 1163 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1164 | VL53L0X_GETPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1165 | MeasurementTimingBudgetMicroSeconds, |
| joelvonrotz | 0:11ad6aaed10a | 1166 | MeasurementTimingBudgetMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1167 | |
| joelvonrotz | 0:11ad6aaed10a | 1168 | /* At this point we don't know if the requested value is valid, |
| joelvonrotz | 0:11ad6aaed10a | 1169 | therefore proceed to update the entire timing budget and |
| joelvonrotz | 0:11ad6aaed10a | 1170 | if this fails, revert back to the previous value. |
| joelvonrotz | 0:11ad6aaed10a | 1171 | */ |
| joelvonrotz | 0:11ad6aaed10a | 1172 | Status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1173 | MeasurementTimingBudgetMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1174 | |
| joelvonrotz | 0:11ad6aaed10a | 1175 | if (Status != VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1176 | Status1 = set_sequence_step_timeout(Dev, SequenceStepId, |
| joelvonrotz | 0:11ad6aaed10a | 1177 | OldTimeOutMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1178 | |
| joelvonrotz | 0:11ad6aaed10a | 1179 | if (Status1 == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1180 | Status1 = |
| joelvonrotz | 0:11ad6aaed10a | 1181 | VL53L0X_SetMeasurementTimingBudgetMicroSeconds( |
| joelvonrotz | 0:11ad6aaed10a | 1182 | Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1183 | MeasurementTimingBudgetMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1184 | } |
| joelvonrotz | 0:11ad6aaed10a | 1185 | |
| joelvonrotz | 0:11ad6aaed10a | 1186 | Status = Status1; |
| joelvonrotz | 0:11ad6aaed10a | 1187 | } |
| joelvonrotz | 0:11ad6aaed10a | 1188 | } |
| joelvonrotz | 0:11ad6aaed10a | 1189 | |
| joelvonrotz | 0:11ad6aaed10a | 1190 | |
| joelvonrotz | 0:11ad6aaed10a | 1191 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1192 | } |
| joelvonrotz | 0:11ad6aaed10a | 1193 | |
| joelvonrotz | 0:11ad6aaed10a | 1194 | VL53L0X_Error VL53L0X_GetSequenceStepTimeout(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1195 | VL53L0X_SequenceStepId SequenceStepId, FixPoint1616_t *pTimeOutMilliSecs) |
| joelvonrotz | 0:11ad6aaed10a | 1196 | { |
| joelvonrotz | 0:11ad6aaed10a | 1197 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1198 | uint32_t TimeoutMicroSeconds; |
| joelvonrotz | 0:11ad6aaed10a | 1199 | |
| joelvonrotz | 0:11ad6aaed10a | 1200 | Status = get_sequence_step_timeout(Dev, SequenceStepId, |
| joelvonrotz | 0:11ad6aaed10a | 1201 | &TimeoutMicroSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1202 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1203 | TimeoutMicroSeconds <<= 8; |
| joelvonrotz | 0:11ad6aaed10a | 1204 | *pTimeOutMilliSecs = (TimeoutMicroSeconds + 500)/1000; |
| joelvonrotz | 0:11ad6aaed10a | 1205 | *pTimeOutMilliSecs <<= 8; |
| joelvonrotz | 0:11ad6aaed10a | 1206 | } |
| joelvonrotz | 0:11ad6aaed10a | 1207 | |
| joelvonrotz | 0:11ad6aaed10a | 1208 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1209 | } |
| joelvonrotz | 0:11ad6aaed10a | 1210 | |
| joelvonrotz | 0:11ad6aaed10a | 1211 | VL53L0X_Error VL53L0X_SetInterMeasurementPeriodMilliSeconds(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1212 | uint32_t InterMeasurementPeriodMilliSeconds) |
| joelvonrotz | 0:11ad6aaed10a | 1213 | { |
| joelvonrotz | 0:11ad6aaed10a | 1214 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1215 | uint16_t osc_calibrate_val; |
| joelvonrotz | 0:11ad6aaed10a | 1216 | uint32_t IMPeriodMilliSeconds; |
| joelvonrotz | 0:11ad6aaed10a | 1217 | |
| joelvonrotz | 0:11ad6aaed10a | 1218 | |
| joelvonrotz | 0:11ad6aaed10a | 1219 | Status = VL53L0X_RdWord(Dev, VL53L0X_REG_OSC_CALIBRATE_VAL, |
| joelvonrotz | 0:11ad6aaed10a | 1220 | &osc_calibrate_val); |
| joelvonrotz | 0:11ad6aaed10a | 1221 | |
| joelvonrotz | 0:11ad6aaed10a | 1222 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1223 | if (osc_calibrate_val != 0) { |
| joelvonrotz | 0:11ad6aaed10a | 1224 | IMPeriodMilliSeconds = |
| joelvonrotz | 0:11ad6aaed10a | 1225 | InterMeasurementPeriodMilliSeconds |
| joelvonrotz | 0:11ad6aaed10a | 1226 | * osc_calibrate_val; |
| joelvonrotz | 0:11ad6aaed10a | 1227 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1228 | IMPeriodMilliSeconds = |
| joelvonrotz | 0:11ad6aaed10a | 1229 | InterMeasurementPeriodMilliSeconds; |
| joelvonrotz | 0:11ad6aaed10a | 1230 | } |
| joelvonrotz | 0:11ad6aaed10a | 1231 | Status = VL53L0X_WrDWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1232 | VL53L0X_REG_SYSTEM_INTERMEASUREMENT_PERIOD, |
| joelvonrotz | 0:11ad6aaed10a | 1233 | IMPeriodMilliSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1234 | } |
| joelvonrotz | 0:11ad6aaed10a | 1235 | |
| joelvonrotz | 0:11ad6aaed10a | 1236 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1237 | VL53L0X_SETPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1238 | InterMeasurementPeriodMilliSeconds, |
| joelvonrotz | 0:11ad6aaed10a | 1239 | InterMeasurementPeriodMilliSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1240 | } |
| joelvonrotz | 0:11ad6aaed10a | 1241 | |
| joelvonrotz | 0:11ad6aaed10a | 1242 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1243 | } |
| joelvonrotz | 0:11ad6aaed10a | 1244 | |
| joelvonrotz | 0:11ad6aaed10a | 1245 | VL53L0X_Error VL53L0X_GetInterMeasurementPeriodMilliSeconds(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1246 | uint32_t *pInterMeasurementPeriodMilliSeconds) |
| joelvonrotz | 0:11ad6aaed10a | 1247 | { |
| joelvonrotz | 0:11ad6aaed10a | 1248 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1249 | uint16_t osc_calibrate_val; |
| joelvonrotz | 0:11ad6aaed10a | 1250 | uint32_t IMPeriodMilliSeconds; |
| joelvonrotz | 0:11ad6aaed10a | 1251 | |
| joelvonrotz | 0:11ad6aaed10a | 1252 | |
| joelvonrotz | 0:11ad6aaed10a | 1253 | Status = VL53L0X_RdWord(Dev, VL53L0X_REG_OSC_CALIBRATE_VAL, |
| joelvonrotz | 0:11ad6aaed10a | 1254 | &osc_calibrate_val); |
| joelvonrotz | 0:11ad6aaed10a | 1255 | |
| joelvonrotz | 0:11ad6aaed10a | 1256 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1257 | Status = VL53L0X_RdDWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1258 | VL53L0X_REG_SYSTEM_INTERMEASUREMENT_PERIOD, |
| joelvonrotz | 0:11ad6aaed10a | 1259 | &IMPeriodMilliSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1260 | } |
| joelvonrotz | 0:11ad6aaed10a | 1261 | |
| joelvonrotz | 0:11ad6aaed10a | 1262 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1263 | if (osc_calibrate_val != 0) { |
| joelvonrotz | 0:11ad6aaed10a | 1264 | *pInterMeasurementPeriodMilliSeconds = |
| joelvonrotz | 0:11ad6aaed10a | 1265 | IMPeriodMilliSeconds / osc_calibrate_val; |
| joelvonrotz | 0:11ad6aaed10a | 1266 | } |
| joelvonrotz | 0:11ad6aaed10a | 1267 | VL53L0X_SETPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1268 | InterMeasurementPeriodMilliSeconds, |
| joelvonrotz | 0:11ad6aaed10a | 1269 | *pInterMeasurementPeriodMilliSeconds); |
| joelvonrotz | 0:11ad6aaed10a | 1270 | } |
| joelvonrotz | 0:11ad6aaed10a | 1271 | |
| joelvonrotz | 0:11ad6aaed10a | 1272 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1273 | } |
| joelvonrotz | 0:11ad6aaed10a | 1274 | |
| joelvonrotz | 0:11ad6aaed10a | 1275 | VL53L0X_Error VL53L0X_SetXTalkCompensationEnable(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1276 | uint8_t XTalkCompensationEnable) |
| joelvonrotz | 0:11ad6aaed10a | 1277 | { |
| joelvonrotz | 0:11ad6aaed10a | 1278 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1279 | FixPoint1616_t TempFix1616; |
| joelvonrotz | 0:11ad6aaed10a | 1280 | uint16_t LinearityCorrectiveGain; |
| joelvonrotz | 0:11ad6aaed10a | 1281 | |
| joelvonrotz | 0:11ad6aaed10a | 1282 | |
| joelvonrotz | 0:11ad6aaed10a | 1283 | LinearityCorrectiveGain = PALDevDataGet(Dev, LinearityCorrectiveGain); |
| joelvonrotz | 0:11ad6aaed10a | 1284 | |
| joelvonrotz | 0:11ad6aaed10a | 1285 | if ((XTalkCompensationEnable == 0) |
| joelvonrotz | 0:11ad6aaed10a | 1286 | || (LinearityCorrectiveGain != 1000)) { |
| joelvonrotz | 0:11ad6aaed10a | 1287 | TempFix1616 = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1288 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1289 | VL53L0X_GETPARAMETERFIELD(Dev, XTalkCompensationRateMegaCps, |
| joelvonrotz | 0:11ad6aaed10a | 1290 | TempFix1616); |
| joelvonrotz | 0:11ad6aaed10a | 1291 | } |
| joelvonrotz | 0:11ad6aaed10a | 1292 | |
| joelvonrotz | 0:11ad6aaed10a | 1293 | /* the following register has a format 3.13 */ |
| joelvonrotz | 0:11ad6aaed10a | 1294 | Status = VL53L0X_WrWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1295 | VL53L0X_REG_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS, |
| joelvonrotz | 0:11ad6aaed10a | 1296 | VL53L0X_FIXPOINT1616TOFIXPOINT313(TempFix1616)); |
| joelvonrotz | 0:11ad6aaed10a | 1297 | |
| joelvonrotz | 0:11ad6aaed10a | 1298 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1299 | if (XTalkCompensationEnable == 0) { |
| joelvonrotz | 0:11ad6aaed10a | 1300 | VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1301 | 0); |
| joelvonrotz | 0:11ad6aaed10a | 1302 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1303 | VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1304 | 1); |
| joelvonrotz | 0:11ad6aaed10a | 1305 | } |
| joelvonrotz | 0:11ad6aaed10a | 1306 | } |
| joelvonrotz | 0:11ad6aaed10a | 1307 | |
| joelvonrotz | 0:11ad6aaed10a | 1308 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1309 | } |
| joelvonrotz | 0:11ad6aaed10a | 1310 | |
| joelvonrotz | 0:11ad6aaed10a | 1311 | VL53L0X_Error VL53L0X_GetXTalkCompensationEnable(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1312 | uint8_t *pXTalkCompensationEnable) |
| joelvonrotz | 0:11ad6aaed10a | 1313 | { |
| joelvonrotz | 0:11ad6aaed10a | 1314 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1315 | uint8_t Temp8; |
| joelvonrotz | 0:11ad6aaed10a | 1316 | |
| joelvonrotz | 0:11ad6aaed10a | 1317 | VL53L0X_GETPARAMETERFIELD(Dev, XTalkCompensationEnable, Temp8); |
| joelvonrotz | 0:11ad6aaed10a | 1318 | *pXTalkCompensationEnable = Temp8; |
| joelvonrotz | 0:11ad6aaed10a | 1319 | |
| joelvonrotz | 0:11ad6aaed10a | 1320 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1321 | } |
| joelvonrotz | 0:11ad6aaed10a | 1322 | |
| joelvonrotz | 0:11ad6aaed10a | 1323 | VL53L0X_Error VL53L0X_SetXTalkCompensationRateMegaCps(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1324 | FixPoint1616_t XTalkCompensationRateMegaCps) |
| joelvonrotz | 0:11ad6aaed10a | 1325 | { |
| joelvonrotz | 0:11ad6aaed10a | 1326 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1327 | uint8_t Temp8; |
| joelvonrotz | 0:11ad6aaed10a | 1328 | uint16_t LinearityCorrectiveGain; |
| joelvonrotz | 0:11ad6aaed10a | 1329 | uint16_t data; |
| joelvonrotz | 0:11ad6aaed10a | 1330 | |
| joelvonrotz | 0:11ad6aaed10a | 1331 | VL53L0X_GETPARAMETERFIELD(Dev, XTalkCompensationEnable, Temp8); |
| joelvonrotz | 0:11ad6aaed10a | 1332 | LinearityCorrectiveGain = PALDevDataGet(Dev, LinearityCorrectiveGain); |
| joelvonrotz | 0:11ad6aaed10a | 1333 | |
| joelvonrotz | 0:11ad6aaed10a | 1334 | if (Temp8 == 0) { /* disabled write only internal value */ |
| joelvonrotz | 0:11ad6aaed10a | 1335 | VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationRateMegaCps, |
| joelvonrotz | 0:11ad6aaed10a | 1336 | XTalkCompensationRateMegaCps); |
| joelvonrotz | 0:11ad6aaed10a | 1337 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1338 | /* the following register has a format 3.13 */ |
| joelvonrotz | 0:11ad6aaed10a | 1339 | if (LinearityCorrectiveGain == 1000) { |
| joelvonrotz | 0:11ad6aaed10a | 1340 | data = VL53L0X_FIXPOINT1616TOFIXPOINT313( |
| joelvonrotz | 0:11ad6aaed10a | 1341 | XTalkCompensationRateMegaCps); |
| joelvonrotz | 0:11ad6aaed10a | 1342 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1343 | data = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1344 | } |
| joelvonrotz | 0:11ad6aaed10a | 1345 | |
| joelvonrotz | 0:11ad6aaed10a | 1346 | Status = VL53L0X_WrWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1347 | VL53L0X_REG_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS, data); |
| joelvonrotz | 0:11ad6aaed10a | 1348 | |
| joelvonrotz | 0:11ad6aaed10a | 1349 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1350 | VL53L0X_SETPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1351 | XTalkCompensationRateMegaCps, |
| joelvonrotz | 0:11ad6aaed10a | 1352 | XTalkCompensationRateMegaCps); |
| joelvonrotz | 0:11ad6aaed10a | 1353 | } |
| joelvonrotz | 0:11ad6aaed10a | 1354 | } |
| joelvonrotz | 0:11ad6aaed10a | 1355 | |
| joelvonrotz | 0:11ad6aaed10a | 1356 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1357 | } |
| joelvonrotz | 0:11ad6aaed10a | 1358 | |
| joelvonrotz | 0:11ad6aaed10a | 1359 | VL53L0X_Error VL53L0X_GetXTalkCompensationRateMegaCps(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1360 | FixPoint1616_t *pXTalkCompensationRateMegaCps) |
| joelvonrotz | 0:11ad6aaed10a | 1361 | { |
| joelvonrotz | 0:11ad6aaed10a | 1362 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1363 | uint16_t Value; |
| joelvonrotz | 0:11ad6aaed10a | 1364 | FixPoint1616_t TempFix1616; |
| joelvonrotz | 0:11ad6aaed10a | 1365 | |
| joelvonrotz | 0:11ad6aaed10a | 1366 | |
| joelvonrotz | 0:11ad6aaed10a | 1367 | Status = VL53L0X_RdWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1368 | VL53L0X_REG_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS, (uint16_t *)&Value); |
| joelvonrotz | 0:11ad6aaed10a | 1369 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1370 | if (Value == 0) { |
| joelvonrotz | 0:11ad6aaed10a | 1371 | /* the Xtalk is disabled return value from memory */ |
| joelvonrotz | 0:11ad6aaed10a | 1372 | VL53L0X_GETPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1373 | XTalkCompensationRateMegaCps, TempFix1616); |
| joelvonrotz | 0:11ad6aaed10a | 1374 | *pXTalkCompensationRateMegaCps = TempFix1616; |
| joelvonrotz | 0:11ad6aaed10a | 1375 | VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1376 | 0); |
| joelvonrotz | 0:11ad6aaed10a | 1377 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1378 | TempFix1616 = VL53L0X_FIXPOINT313TOFIXPOINT1616(Value); |
| joelvonrotz | 0:11ad6aaed10a | 1379 | *pXTalkCompensationRateMegaCps = TempFix1616; |
| joelvonrotz | 0:11ad6aaed10a | 1380 | VL53L0X_SETPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1381 | XTalkCompensationRateMegaCps, TempFix1616); |
| joelvonrotz | 0:11ad6aaed10a | 1382 | VL53L0X_SETPARAMETERFIELD(Dev, XTalkCompensationEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1383 | 1); |
| joelvonrotz | 0:11ad6aaed10a | 1384 | } |
| joelvonrotz | 0:11ad6aaed10a | 1385 | } |
| joelvonrotz | 0:11ad6aaed10a | 1386 | |
| joelvonrotz | 0:11ad6aaed10a | 1387 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1388 | } |
| joelvonrotz | 0:11ad6aaed10a | 1389 | |
| joelvonrotz | 0:11ad6aaed10a | 1390 | VL53L0X_Error VL53L0X_SetRefCalibration(VL53L0X_DEV Dev, uint8_t VhvSettings, |
| joelvonrotz | 0:11ad6aaed10a | 1391 | uint8_t PhaseCal) |
| joelvonrotz | 0:11ad6aaed10a | 1392 | { |
| joelvonrotz | 0:11ad6aaed10a | 1393 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1394 | |
| joelvonrotz | 0:11ad6aaed10a | 1395 | Status = VL53L0X_set_ref_calibration(Dev, VhvSettings, PhaseCal); |
| joelvonrotz | 0:11ad6aaed10a | 1396 | |
| joelvonrotz | 0:11ad6aaed10a | 1397 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1398 | } |
| joelvonrotz | 0:11ad6aaed10a | 1399 | |
| joelvonrotz | 0:11ad6aaed10a | 1400 | VL53L0X_Error VL53L0X_GetRefCalibration(VL53L0X_DEV Dev, uint8_t *pVhvSettings, |
| joelvonrotz | 0:11ad6aaed10a | 1401 | uint8_t *pPhaseCal) |
| joelvonrotz | 0:11ad6aaed10a | 1402 | { |
| joelvonrotz | 0:11ad6aaed10a | 1403 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1404 | |
| joelvonrotz | 0:11ad6aaed10a | 1405 | Status = VL53L0X_get_ref_calibration(Dev, pVhvSettings, pPhaseCal); |
| joelvonrotz | 0:11ad6aaed10a | 1406 | |
| joelvonrotz | 0:11ad6aaed10a | 1407 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1408 | } |
| joelvonrotz | 0:11ad6aaed10a | 1409 | |
| joelvonrotz | 0:11ad6aaed10a | 1410 | /* |
| joelvonrotz | 0:11ad6aaed10a | 1411 | * CHECK LIMIT FUNCTIONS |
| joelvonrotz | 0:11ad6aaed10a | 1412 | */ |
| joelvonrotz | 0:11ad6aaed10a | 1413 | |
| joelvonrotz | 0:11ad6aaed10a | 1414 | VL53L0X_Error VL53L0X_GetNumberOfLimitCheck(uint16_t *pNumberOfLimitCheck) |
| joelvonrotz | 0:11ad6aaed10a | 1415 | { |
| joelvonrotz | 0:11ad6aaed10a | 1416 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1417 | |
| joelvonrotz | 0:11ad6aaed10a | 1418 | *pNumberOfLimitCheck = VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS; |
| joelvonrotz | 0:11ad6aaed10a | 1419 | |
| joelvonrotz | 0:11ad6aaed10a | 1420 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1421 | } |
| joelvonrotz | 0:11ad6aaed10a | 1422 | |
| joelvonrotz | 0:11ad6aaed10a | 1423 | VL53L0X_Error VL53L0X_GetLimitCheckInfo(VL53L0X_DEV Dev, uint16_t LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1424 | char *pLimitCheckString) |
| joelvonrotz | 0:11ad6aaed10a | 1425 | { |
| joelvonrotz | 0:11ad6aaed10a | 1426 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1427 | |
| joelvonrotz | 0:11ad6aaed10a | 1428 | |
| joelvonrotz | 0:11ad6aaed10a | 1429 | Status = VL53L0X_get_limit_check_info(Dev, LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1430 | pLimitCheckString); |
| joelvonrotz | 0:11ad6aaed10a | 1431 | |
| joelvonrotz | 0:11ad6aaed10a | 1432 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1433 | } |
| joelvonrotz | 0:11ad6aaed10a | 1434 | |
| joelvonrotz | 0:11ad6aaed10a | 1435 | VL53L0X_Error VL53L0X_GetLimitCheckStatus(VL53L0X_DEV Dev, uint16_t LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1436 | uint8_t *pLimitCheckStatus) |
| joelvonrotz | 0:11ad6aaed10a | 1437 | { |
| joelvonrotz | 0:11ad6aaed10a | 1438 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1439 | uint8_t Temp8; |
| joelvonrotz | 0:11ad6aaed10a | 1440 | |
| joelvonrotz | 0:11ad6aaed10a | 1441 | |
| joelvonrotz | 0:11ad6aaed10a | 1442 | if (LimitCheckId >= VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS) { |
| joelvonrotz | 0:11ad6aaed10a | 1443 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 1444 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1445 | |
| joelvonrotz | 0:11ad6aaed10a | 1446 | VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksStatus, |
| joelvonrotz | 0:11ad6aaed10a | 1447 | LimitCheckId, Temp8); |
| joelvonrotz | 0:11ad6aaed10a | 1448 | |
| joelvonrotz | 0:11ad6aaed10a | 1449 | *pLimitCheckStatus = Temp8; |
| joelvonrotz | 0:11ad6aaed10a | 1450 | |
| joelvonrotz | 0:11ad6aaed10a | 1451 | } |
| joelvonrotz | 0:11ad6aaed10a | 1452 | |
| joelvonrotz | 0:11ad6aaed10a | 1453 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1454 | } |
| joelvonrotz | 0:11ad6aaed10a | 1455 | |
| joelvonrotz | 0:11ad6aaed10a | 1456 | VL53L0X_Error VL53L0X_SetLimitCheckEnable(VL53L0X_DEV Dev, uint16_t LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1457 | uint8_t LimitCheckEnable) |
| joelvonrotz | 0:11ad6aaed10a | 1458 | { |
| joelvonrotz | 0:11ad6aaed10a | 1459 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1460 | FixPoint1616_t TempFix1616 = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1461 | uint8_t LimitCheckEnableInt = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1462 | uint8_t LimitCheckDisable = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1463 | uint8_t Temp8; |
| joelvonrotz | 0:11ad6aaed10a | 1464 | |
| joelvonrotz | 0:11ad6aaed10a | 1465 | |
| joelvonrotz | 0:11ad6aaed10a | 1466 | if (LimitCheckId >= VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS) { |
| joelvonrotz | 0:11ad6aaed10a | 1467 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 1468 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1469 | if (LimitCheckEnable == 0) { |
| joelvonrotz | 0:11ad6aaed10a | 1470 | TempFix1616 = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1471 | LimitCheckEnableInt = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1472 | LimitCheckDisable = 1; |
| joelvonrotz | 0:11ad6aaed10a | 1473 | |
| joelvonrotz | 0:11ad6aaed10a | 1474 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1475 | VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksValue, |
| joelvonrotz | 0:11ad6aaed10a | 1476 | LimitCheckId, TempFix1616); |
| joelvonrotz | 0:11ad6aaed10a | 1477 | LimitCheckDisable = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1478 | /* this to be sure to have either 0 or 1 */ |
| joelvonrotz | 0:11ad6aaed10a | 1479 | LimitCheckEnableInt = 1; |
| joelvonrotz | 0:11ad6aaed10a | 1480 | } |
| joelvonrotz | 0:11ad6aaed10a | 1481 | |
| joelvonrotz | 0:11ad6aaed10a | 1482 | switch (LimitCheckId) { |
| joelvonrotz | 0:11ad6aaed10a | 1483 | |
| joelvonrotz | 0:11ad6aaed10a | 1484 | case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1485 | /* internal computation: */ |
| joelvonrotz | 0:11ad6aaed10a | 1486 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1487 | VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, |
| joelvonrotz | 0:11ad6aaed10a | 1488 | LimitCheckEnableInt); |
| joelvonrotz | 0:11ad6aaed10a | 1489 | |
| joelvonrotz | 0:11ad6aaed10a | 1490 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1491 | |
| joelvonrotz | 0:11ad6aaed10a | 1492 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1493 | |
| joelvonrotz | 0:11ad6aaed10a | 1494 | Status = VL53L0X_WrWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1495 | VL53L0X_REG_FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT, |
| joelvonrotz | 0:11ad6aaed10a | 1496 | VL53L0X_FIXPOINT1616TOFIXPOINT97(TempFix1616)); |
| joelvonrotz | 0:11ad6aaed10a | 1497 | |
| joelvonrotz | 0:11ad6aaed10a | 1498 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1499 | |
| joelvonrotz | 0:11ad6aaed10a | 1500 | case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: |
| joelvonrotz | 0:11ad6aaed10a | 1501 | |
| joelvonrotz | 0:11ad6aaed10a | 1502 | /* internal computation: */ |
| joelvonrotz | 0:11ad6aaed10a | 1503 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1504 | VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, |
| joelvonrotz | 0:11ad6aaed10a | 1505 | LimitCheckEnableInt); |
| joelvonrotz | 0:11ad6aaed10a | 1506 | |
| joelvonrotz | 0:11ad6aaed10a | 1507 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1508 | |
| joelvonrotz | 0:11ad6aaed10a | 1509 | case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: |
| joelvonrotz | 0:11ad6aaed10a | 1510 | |
| joelvonrotz | 0:11ad6aaed10a | 1511 | /* internal computation: */ |
| joelvonrotz | 0:11ad6aaed10a | 1512 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1513 | VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, |
| joelvonrotz | 0:11ad6aaed10a | 1514 | LimitCheckEnableInt); |
| joelvonrotz | 0:11ad6aaed10a | 1515 | |
| joelvonrotz | 0:11ad6aaed10a | 1516 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1517 | |
| joelvonrotz | 0:11ad6aaed10a | 1518 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: |
| joelvonrotz | 0:11ad6aaed10a | 1519 | |
| joelvonrotz | 0:11ad6aaed10a | 1520 | Temp8 = (uint8_t)(LimitCheckDisable << 1); |
| joelvonrotz | 0:11ad6aaed10a | 1521 | Status = VL53L0X_UpdateByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1522 | VL53L0X_REG_MSRC_CONFIG_CONTROL, |
| joelvonrotz | 0:11ad6aaed10a | 1523 | 0xFE, Temp8); |
| joelvonrotz | 0:11ad6aaed10a | 1524 | |
| joelvonrotz | 0:11ad6aaed10a | 1525 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1526 | |
| joelvonrotz | 0:11ad6aaed10a | 1527 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1528 | |
| joelvonrotz | 0:11ad6aaed10a | 1529 | Temp8 = (uint8_t)(LimitCheckDisable << 4); |
| joelvonrotz | 0:11ad6aaed10a | 1530 | Status = VL53L0X_UpdateByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1531 | VL53L0X_REG_MSRC_CONFIG_CONTROL, |
| joelvonrotz | 0:11ad6aaed10a | 1532 | 0xEF, Temp8); |
| joelvonrotz | 0:11ad6aaed10a | 1533 | |
| joelvonrotz | 0:11ad6aaed10a | 1534 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1535 | |
| joelvonrotz | 0:11ad6aaed10a | 1536 | |
| joelvonrotz | 0:11ad6aaed10a | 1537 | default: |
| joelvonrotz | 0:11ad6aaed10a | 1538 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 1539 | |
| joelvonrotz | 0:11ad6aaed10a | 1540 | } |
| joelvonrotz | 0:11ad6aaed10a | 1541 | |
| joelvonrotz | 0:11ad6aaed10a | 1542 | } |
| joelvonrotz | 0:11ad6aaed10a | 1543 | |
| joelvonrotz | 0:11ad6aaed10a | 1544 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1545 | if (LimitCheckEnable == 0) { |
| joelvonrotz | 0:11ad6aaed10a | 1546 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1547 | LimitCheckId, 0); |
| joelvonrotz | 0:11ad6aaed10a | 1548 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1549 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1550 | LimitCheckId, 1); |
| joelvonrotz | 0:11ad6aaed10a | 1551 | } |
| joelvonrotz | 0:11ad6aaed10a | 1552 | } |
| joelvonrotz | 0:11ad6aaed10a | 1553 | |
| joelvonrotz | 0:11ad6aaed10a | 1554 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1555 | } |
| joelvonrotz | 0:11ad6aaed10a | 1556 | |
| joelvonrotz | 0:11ad6aaed10a | 1557 | VL53L0X_Error VL53L0X_GetLimitCheckEnable(VL53L0X_DEV Dev, uint16_t LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1558 | uint8_t *pLimitCheckEnable) |
| joelvonrotz | 0:11ad6aaed10a | 1559 | { |
| joelvonrotz | 0:11ad6aaed10a | 1560 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1561 | uint8_t Temp8; |
| joelvonrotz | 0:11ad6aaed10a | 1562 | |
| joelvonrotz | 0:11ad6aaed10a | 1563 | |
| joelvonrotz | 0:11ad6aaed10a | 1564 | if (LimitCheckId >= VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS) { |
| joelvonrotz | 0:11ad6aaed10a | 1565 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 1566 | *pLimitCheckEnable = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1567 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1568 | VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1569 | LimitCheckId, Temp8); |
| joelvonrotz | 0:11ad6aaed10a | 1570 | *pLimitCheckEnable = Temp8; |
| joelvonrotz | 0:11ad6aaed10a | 1571 | } |
| joelvonrotz | 0:11ad6aaed10a | 1572 | |
| joelvonrotz | 0:11ad6aaed10a | 1573 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1574 | } |
| joelvonrotz | 0:11ad6aaed10a | 1575 | |
| joelvonrotz | 0:11ad6aaed10a | 1576 | VL53L0X_Error VL53L0X_SetLimitCheckValue(VL53L0X_DEV Dev, uint16_t LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1577 | FixPoint1616_t LimitCheckValue) |
| joelvonrotz | 0:11ad6aaed10a | 1578 | { |
| joelvonrotz | 0:11ad6aaed10a | 1579 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1580 | uint8_t Temp8; |
| joelvonrotz | 0:11ad6aaed10a | 1581 | |
| joelvonrotz | 0:11ad6aaed10a | 1582 | |
| joelvonrotz | 0:11ad6aaed10a | 1583 | VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksEnable, LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1584 | Temp8); |
| joelvonrotz | 0:11ad6aaed10a | 1585 | |
| joelvonrotz | 0:11ad6aaed10a | 1586 | if (Temp8 == 0) { /* disabled write only internal value */ |
| joelvonrotz | 0:11ad6aaed10a | 1587 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, |
| joelvonrotz | 0:11ad6aaed10a | 1588 | LimitCheckId, LimitCheckValue); |
| joelvonrotz | 0:11ad6aaed10a | 1589 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1590 | |
| joelvonrotz | 0:11ad6aaed10a | 1591 | switch (LimitCheckId) { |
| joelvonrotz | 0:11ad6aaed10a | 1592 | |
| joelvonrotz | 0:11ad6aaed10a | 1593 | case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1594 | /* internal computation: */ |
| joelvonrotz | 0:11ad6aaed10a | 1595 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, |
| joelvonrotz | 0:11ad6aaed10a | 1596 | VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, |
| joelvonrotz | 0:11ad6aaed10a | 1597 | LimitCheckValue); |
| joelvonrotz | 0:11ad6aaed10a | 1598 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1599 | |
| joelvonrotz | 0:11ad6aaed10a | 1600 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1601 | |
| joelvonrotz | 0:11ad6aaed10a | 1602 | Status = VL53L0X_WrWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1603 | VL53L0X_REG_FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT, |
| joelvonrotz | 0:11ad6aaed10a | 1604 | VL53L0X_FIXPOINT1616TOFIXPOINT97( |
| joelvonrotz | 0:11ad6aaed10a | 1605 | LimitCheckValue)); |
| joelvonrotz | 0:11ad6aaed10a | 1606 | |
| joelvonrotz | 0:11ad6aaed10a | 1607 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1608 | |
| joelvonrotz | 0:11ad6aaed10a | 1609 | case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: |
| joelvonrotz | 0:11ad6aaed10a | 1610 | |
| joelvonrotz | 0:11ad6aaed10a | 1611 | /* internal computation: */ |
| joelvonrotz | 0:11ad6aaed10a | 1612 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, |
| joelvonrotz | 0:11ad6aaed10a | 1613 | VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, |
| joelvonrotz | 0:11ad6aaed10a | 1614 | LimitCheckValue); |
| joelvonrotz | 0:11ad6aaed10a | 1615 | |
| joelvonrotz | 0:11ad6aaed10a | 1616 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1617 | |
| joelvonrotz | 0:11ad6aaed10a | 1618 | case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: |
| joelvonrotz | 0:11ad6aaed10a | 1619 | |
| joelvonrotz | 0:11ad6aaed10a | 1620 | /* internal computation: */ |
| joelvonrotz | 0:11ad6aaed10a | 1621 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, |
| joelvonrotz | 0:11ad6aaed10a | 1622 | VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, |
| joelvonrotz | 0:11ad6aaed10a | 1623 | LimitCheckValue); |
| joelvonrotz | 0:11ad6aaed10a | 1624 | |
| joelvonrotz | 0:11ad6aaed10a | 1625 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1626 | |
| joelvonrotz | 0:11ad6aaed10a | 1627 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: |
| joelvonrotz | 0:11ad6aaed10a | 1628 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1629 | |
| joelvonrotz | 0:11ad6aaed10a | 1630 | Status = VL53L0X_WrWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1631 | VL53L0X_REG_PRE_RANGE_MIN_COUNT_RATE_RTN_LIMIT, |
| joelvonrotz | 0:11ad6aaed10a | 1632 | VL53L0X_FIXPOINT1616TOFIXPOINT97( |
| joelvonrotz | 0:11ad6aaed10a | 1633 | LimitCheckValue)); |
| joelvonrotz | 0:11ad6aaed10a | 1634 | |
| joelvonrotz | 0:11ad6aaed10a | 1635 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1636 | |
| joelvonrotz | 0:11ad6aaed10a | 1637 | default: |
| joelvonrotz | 0:11ad6aaed10a | 1638 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 1639 | |
| joelvonrotz | 0:11ad6aaed10a | 1640 | } |
| joelvonrotz | 0:11ad6aaed10a | 1641 | |
| joelvonrotz | 0:11ad6aaed10a | 1642 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1643 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, LimitChecksValue, |
| joelvonrotz | 0:11ad6aaed10a | 1644 | LimitCheckId, LimitCheckValue); |
| joelvonrotz | 0:11ad6aaed10a | 1645 | } |
| joelvonrotz | 0:11ad6aaed10a | 1646 | } |
| joelvonrotz | 0:11ad6aaed10a | 1647 | |
| joelvonrotz | 0:11ad6aaed10a | 1648 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1649 | } |
| joelvonrotz | 0:11ad6aaed10a | 1650 | |
| joelvonrotz | 0:11ad6aaed10a | 1651 | VL53L0X_Error VL53L0X_GetLimitCheckValue(VL53L0X_DEV Dev, uint16_t LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1652 | FixPoint1616_t *pLimitCheckValue) |
| joelvonrotz | 0:11ad6aaed10a | 1653 | { |
| joelvonrotz | 0:11ad6aaed10a | 1654 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1655 | uint8_t EnableZeroValue = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1656 | uint16_t Temp16; |
| joelvonrotz | 0:11ad6aaed10a | 1657 | FixPoint1616_t TempFix1616; |
| joelvonrotz | 0:11ad6aaed10a | 1658 | |
| joelvonrotz | 0:11ad6aaed10a | 1659 | |
| joelvonrotz | 0:11ad6aaed10a | 1660 | switch (LimitCheckId) { |
| joelvonrotz | 0:11ad6aaed10a | 1661 | |
| joelvonrotz | 0:11ad6aaed10a | 1662 | case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1663 | /* internal computation: */ |
| joelvonrotz | 0:11ad6aaed10a | 1664 | VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksValue, |
| joelvonrotz | 0:11ad6aaed10a | 1665 | VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, TempFix1616); |
| joelvonrotz | 0:11ad6aaed10a | 1666 | EnableZeroValue = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1667 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1668 | |
| joelvonrotz | 0:11ad6aaed10a | 1669 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1670 | Status = VL53L0X_RdWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1671 | VL53L0X_REG_FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT, |
| joelvonrotz | 0:11ad6aaed10a | 1672 | &Temp16); |
| joelvonrotz | 0:11ad6aaed10a | 1673 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 1674 | TempFix1616 = VL53L0X_FIXPOINT97TOFIXPOINT1616(Temp16); |
| joelvonrotz | 0:11ad6aaed10a | 1675 | |
| joelvonrotz | 0:11ad6aaed10a | 1676 | |
| joelvonrotz | 0:11ad6aaed10a | 1677 | EnableZeroValue = 1; |
| joelvonrotz | 0:11ad6aaed10a | 1678 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1679 | |
| joelvonrotz | 0:11ad6aaed10a | 1680 | case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: |
| joelvonrotz | 0:11ad6aaed10a | 1681 | /* internal computation: */ |
| joelvonrotz | 0:11ad6aaed10a | 1682 | VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksValue, |
| joelvonrotz | 0:11ad6aaed10a | 1683 | VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, TempFix1616); |
| joelvonrotz | 0:11ad6aaed10a | 1684 | EnableZeroValue = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1685 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1686 | |
| joelvonrotz | 0:11ad6aaed10a | 1687 | case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: |
| joelvonrotz | 0:11ad6aaed10a | 1688 | /* internal computation: */ |
| joelvonrotz | 0:11ad6aaed10a | 1689 | VL53L0X_GETARRAYPARAMETERFIELD(Dev, LimitChecksValue, |
| joelvonrotz | 0:11ad6aaed10a | 1690 | VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, TempFix1616); |
| joelvonrotz | 0:11ad6aaed10a | 1691 | EnableZeroValue = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1692 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1693 | |
| joelvonrotz | 0:11ad6aaed10a | 1694 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: |
| joelvonrotz | 0:11ad6aaed10a | 1695 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1696 | Status = VL53L0X_RdWord(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1697 | VL53L0X_REG_PRE_RANGE_MIN_COUNT_RATE_RTN_LIMIT, |
| joelvonrotz | 0:11ad6aaed10a | 1698 | &Temp16); |
| joelvonrotz | 0:11ad6aaed10a | 1699 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 1700 | TempFix1616 = VL53L0X_FIXPOINT97TOFIXPOINT1616(Temp16); |
| joelvonrotz | 0:11ad6aaed10a | 1701 | |
| joelvonrotz | 0:11ad6aaed10a | 1702 | |
| joelvonrotz | 0:11ad6aaed10a | 1703 | EnableZeroValue = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1704 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1705 | |
| joelvonrotz | 0:11ad6aaed10a | 1706 | default: |
| joelvonrotz | 0:11ad6aaed10a | 1707 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 1708 | |
| joelvonrotz | 0:11ad6aaed10a | 1709 | } |
| joelvonrotz | 0:11ad6aaed10a | 1710 | |
| joelvonrotz | 0:11ad6aaed10a | 1711 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1712 | |
| joelvonrotz | 0:11ad6aaed10a | 1713 | if (EnableZeroValue == 1) { |
| joelvonrotz | 0:11ad6aaed10a | 1714 | |
| joelvonrotz | 0:11ad6aaed10a | 1715 | if (TempFix1616 == 0) { |
| joelvonrotz | 0:11ad6aaed10a | 1716 | /* disabled: return value from memory */ |
| joelvonrotz | 0:11ad6aaed10a | 1717 | VL53L0X_GETARRAYPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1718 | LimitChecksValue, LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1719 | TempFix1616); |
| joelvonrotz | 0:11ad6aaed10a | 1720 | *pLimitCheckValue = TempFix1616; |
| joelvonrotz | 0:11ad6aaed10a | 1721 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1722 | LimitChecksEnable, LimitCheckId, 0); |
| joelvonrotz | 0:11ad6aaed10a | 1723 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1724 | *pLimitCheckValue = TempFix1616; |
| joelvonrotz | 0:11ad6aaed10a | 1725 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1726 | LimitChecksValue, LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1727 | TempFix1616); |
| joelvonrotz | 0:11ad6aaed10a | 1728 | VL53L0X_SETARRAYPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1729 | LimitChecksEnable, LimitCheckId, 1); |
| joelvonrotz | 0:11ad6aaed10a | 1730 | } |
| joelvonrotz | 0:11ad6aaed10a | 1731 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1732 | *pLimitCheckValue = TempFix1616; |
| joelvonrotz | 0:11ad6aaed10a | 1733 | } |
| joelvonrotz | 0:11ad6aaed10a | 1734 | } |
| joelvonrotz | 0:11ad6aaed10a | 1735 | |
| joelvonrotz | 0:11ad6aaed10a | 1736 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1737 | |
| joelvonrotz | 0:11ad6aaed10a | 1738 | } |
| joelvonrotz | 0:11ad6aaed10a | 1739 | |
| joelvonrotz | 0:11ad6aaed10a | 1740 | VL53L0X_Error VL53L0X_GetLimitCheckCurrent(VL53L0X_DEV Dev, uint16_t LimitCheckId, |
| joelvonrotz | 0:11ad6aaed10a | 1741 | FixPoint1616_t *pLimitCheckCurrent) |
| joelvonrotz | 0:11ad6aaed10a | 1742 | { |
| joelvonrotz | 0:11ad6aaed10a | 1743 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1744 | VL53L0X_RangingMeasurementData_t LastRangeDataBuffer; |
| joelvonrotz | 0:11ad6aaed10a | 1745 | |
| joelvonrotz | 0:11ad6aaed10a | 1746 | |
| joelvonrotz | 0:11ad6aaed10a | 1747 | if (LimitCheckId >= VL53L0X_CHECKENABLE_NUMBER_OF_CHECKS) { |
| joelvonrotz | 0:11ad6aaed10a | 1748 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 1749 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1750 | switch (LimitCheckId) { |
| joelvonrotz | 0:11ad6aaed10a | 1751 | case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1752 | /* Need to run a ranging to have the latest values */ |
| joelvonrotz | 0:11ad6aaed10a | 1753 | *pLimitCheckCurrent = PALDevDataGet(Dev, SigmaEstimate); |
| joelvonrotz | 0:11ad6aaed10a | 1754 | |
| joelvonrotz | 0:11ad6aaed10a | 1755 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1756 | |
| joelvonrotz | 0:11ad6aaed10a | 1757 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1758 | /* Need to run a ranging to have the latest values */ |
| joelvonrotz | 0:11ad6aaed10a | 1759 | LastRangeDataBuffer = PALDevDataGet(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1760 | LastRangeMeasure); |
| joelvonrotz | 0:11ad6aaed10a | 1761 | *pLimitCheckCurrent = |
| joelvonrotz | 0:11ad6aaed10a | 1762 | LastRangeDataBuffer.SignalRateRtnMegaCps; |
| joelvonrotz | 0:11ad6aaed10a | 1763 | |
| joelvonrotz | 0:11ad6aaed10a | 1764 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1765 | |
| joelvonrotz | 0:11ad6aaed10a | 1766 | case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: |
| joelvonrotz | 0:11ad6aaed10a | 1767 | /* Need to run a ranging to have the latest values */ |
| joelvonrotz | 0:11ad6aaed10a | 1768 | *pLimitCheckCurrent = PALDevDataGet(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1769 | LastSignalRefMcps); |
| joelvonrotz | 0:11ad6aaed10a | 1770 | |
| joelvonrotz | 0:11ad6aaed10a | 1771 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1772 | |
| joelvonrotz | 0:11ad6aaed10a | 1773 | case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: |
| joelvonrotz | 0:11ad6aaed10a | 1774 | /* Need to run a ranging to have the latest values */ |
| joelvonrotz | 0:11ad6aaed10a | 1775 | LastRangeDataBuffer = PALDevDataGet(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1776 | LastRangeMeasure); |
| joelvonrotz | 0:11ad6aaed10a | 1777 | *pLimitCheckCurrent = |
| joelvonrotz | 0:11ad6aaed10a | 1778 | LastRangeDataBuffer.SignalRateRtnMegaCps; |
| joelvonrotz | 0:11ad6aaed10a | 1779 | |
| joelvonrotz | 0:11ad6aaed10a | 1780 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1781 | |
| joelvonrotz | 0:11ad6aaed10a | 1782 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: |
| joelvonrotz | 0:11ad6aaed10a | 1783 | /* Need to run a ranging to have the latest values */ |
| joelvonrotz | 0:11ad6aaed10a | 1784 | LastRangeDataBuffer = PALDevDataGet(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1785 | LastRangeMeasure); |
| joelvonrotz | 0:11ad6aaed10a | 1786 | *pLimitCheckCurrent = |
| joelvonrotz | 0:11ad6aaed10a | 1787 | LastRangeDataBuffer.SignalRateRtnMegaCps; |
| joelvonrotz | 0:11ad6aaed10a | 1788 | |
| joelvonrotz | 0:11ad6aaed10a | 1789 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1790 | |
| joelvonrotz | 0:11ad6aaed10a | 1791 | case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE: |
| joelvonrotz | 0:11ad6aaed10a | 1792 | /* Need to run a ranging to have the latest values */ |
| joelvonrotz | 0:11ad6aaed10a | 1793 | LastRangeDataBuffer = PALDevDataGet(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1794 | LastRangeMeasure); |
| joelvonrotz | 0:11ad6aaed10a | 1795 | *pLimitCheckCurrent = |
| joelvonrotz | 0:11ad6aaed10a | 1796 | LastRangeDataBuffer.SignalRateRtnMegaCps; |
| joelvonrotz | 0:11ad6aaed10a | 1797 | |
| joelvonrotz | 0:11ad6aaed10a | 1798 | break; |
| joelvonrotz | 0:11ad6aaed10a | 1799 | |
| joelvonrotz | 0:11ad6aaed10a | 1800 | default: |
| joelvonrotz | 0:11ad6aaed10a | 1801 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 1802 | } |
| joelvonrotz | 0:11ad6aaed10a | 1803 | } |
| joelvonrotz | 0:11ad6aaed10a | 1804 | |
| joelvonrotz | 0:11ad6aaed10a | 1805 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1806 | |
| joelvonrotz | 0:11ad6aaed10a | 1807 | } |
| joelvonrotz | 0:11ad6aaed10a | 1808 | |
| joelvonrotz | 0:11ad6aaed10a | 1809 | /* |
| joelvonrotz | 0:11ad6aaed10a | 1810 | * WRAPAROUND Check |
| joelvonrotz | 0:11ad6aaed10a | 1811 | */ |
| joelvonrotz | 0:11ad6aaed10a | 1812 | VL53L0X_Error VL53L0X_SetWrapAroundCheckEnable(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1813 | uint8_t WrapAroundCheckEnable) |
| joelvonrotz | 0:11ad6aaed10a | 1814 | { |
| joelvonrotz | 0:11ad6aaed10a | 1815 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1816 | uint8_t Byte; |
| joelvonrotz | 0:11ad6aaed10a | 1817 | uint8_t WrapAroundCheckEnableInt; |
| joelvonrotz | 0:11ad6aaed10a | 1818 | |
| joelvonrotz | 0:11ad6aaed10a | 1819 | |
| joelvonrotz | 0:11ad6aaed10a | 1820 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, &Byte); |
| joelvonrotz | 0:11ad6aaed10a | 1821 | if (WrapAroundCheckEnable == 0) { |
| joelvonrotz | 0:11ad6aaed10a | 1822 | /* Disable wraparound */ |
| joelvonrotz | 0:11ad6aaed10a | 1823 | Byte = Byte & 0x7F; |
| joelvonrotz | 0:11ad6aaed10a | 1824 | WrapAroundCheckEnableInt = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1825 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1826 | /*Enable wraparound */ |
| joelvonrotz | 0:11ad6aaed10a | 1827 | Byte = Byte | 0x80; |
| joelvonrotz | 0:11ad6aaed10a | 1828 | WrapAroundCheckEnableInt = 1; |
| joelvonrotz | 0:11ad6aaed10a | 1829 | } |
| joelvonrotz | 0:11ad6aaed10a | 1830 | |
| joelvonrotz | 0:11ad6aaed10a | 1831 | Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, Byte); |
| joelvonrotz | 0:11ad6aaed10a | 1832 | |
| joelvonrotz | 0:11ad6aaed10a | 1833 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1834 | PALDevDataSet(Dev, SequenceConfig, Byte); |
| joelvonrotz | 0:11ad6aaed10a | 1835 | VL53L0X_SETPARAMETERFIELD(Dev, WrapAroundCheckEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1836 | WrapAroundCheckEnableInt); |
| joelvonrotz | 0:11ad6aaed10a | 1837 | } |
| joelvonrotz | 0:11ad6aaed10a | 1838 | |
| joelvonrotz | 0:11ad6aaed10a | 1839 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1840 | } |
| joelvonrotz | 0:11ad6aaed10a | 1841 | |
| joelvonrotz | 0:11ad6aaed10a | 1842 | VL53L0X_Error VL53L0X_GetWrapAroundCheckEnable(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1843 | uint8_t *pWrapAroundCheckEnable) |
| joelvonrotz | 0:11ad6aaed10a | 1844 | { |
| joelvonrotz | 0:11ad6aaed10a | 1845 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1846 | uint8_t data; |
| joelvonrotz | 0:11ad6aaed10a | 1847 | |
| joelvonrotz | 0:11ad6aaed10a | 1848 | |
| joelvonrotz | 0:11ad6aaed10a | 1849 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_SYSTEM_SEQUENCE_CONFIG, &data); |
| joelvonrotz | 0:11ad6aaed10a | 1850 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1851 | PALDevDataSet(Dev, SequenceConfig, data); |
| joelvonrotz | 0:11ad6aaed10a | 1852 | if (data & (0x01 << 7)) |
| joelvonrotz | 0:11ad6aaed10a | 1853 | *pWrapAroundCheckEnable = 0x01; |
| joelvonrotz | 0:11ad6aaed10a | 1854 | else |
| joelvonrotz | 0:11ad6aaed10a | 1855 | *pWrapAroundCheckEnable = 0x00; |
| joelvonrotz | 0:11ad6aaed10a | 1856 | } |
| joelvonrotz | 0:11ad6aaed10a | 1857 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 1858 | VL53L0X_SETPARAMETERFIELD(Dev, WrapAroundCheckEnable, |
| joelvonrotz | 0:11ad6aaed10a | 1859 | *pWrapAroundCheckEnable); |
| joelvonrotz | 0:11ad6aaed10a | 1860 | } |
| joelvonrotz | 0:11ad6aaed10a | 1861 | |
| joelvonrotz | 0:11ad6aaed10a | 1862 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1863 | } |
| joelvonrotz | 0:11ad6aaed10a | 1864 | |
| joelvonrotz | 0:11ad6aaed10a | 1865 | VL53L0X_Error VL53L0X_SetDmaxCalParameters(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1866 | uint16_t RangeMilliMeter, FixPoint1616_t SignalRateRtnMegaCps) |
| joelvonrotz | 0:11ad6aaed10a | 1867 | { |
| joelvonrotz | 0:11ad6aaed10a | 1868 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1869 | FixPoint1616_t SignalRateRtnMegaCpsTemp = 0; |
| joelvonrotz | 0:11ad6aaed10a | 1870 | |
| joelvonrotz | 0:11ad6aaed10a | 1871 | |
| joelvonrotz | 0:11ad6aaed10a | 1872 | /* Check if one of input parameter is zero, in that case the |
| joelvonrotz | 0:11ad6aaed10a | 1873 | * value are get from NVM */ |
| joelvonrotz | 0:11ad6aaed10a | 1874 | if ((RangeMilliMeter == 0) || (SignalRateRtnMegaCps == 0)) { |
| joelvonrotz | 0:11ad6aaed10a | 1875 | /* NVM parameters */ |
| joelvonrotz | 0:11ad6aaed10a | 1876 | /* Run VL53L0X_get_info_from_device wit option 4 to get |
| joelvonrotz | 0:11ad6aaed10a | 1877 | * signal rate at 400 mm if the value have been already |
| joelvonrotz | 0:11ad6aaed10a | 1878 | * get this function will return with no access to device */ |
| joelvonrotz | 0:11ad6aaed10a | 1879 | VL53L0X_get_info_from_device(Dev, 4); |
| joelvonrotz | 0:11ad6aaed10a | 1880 | |
| joelvonrotz | 0:11ad6aaed10a | 1881 | SignalRateRtnMegaCpsTemp = VL53L0X_GETDEVICESPECIFICPARAMETER( |
| joelvonrotz | 0:11ad6aaed10a | 1882 | Dev, SignalRateMeasFixed400mm); |
| joelvonrotz | 0:11ad6aaed10a | 1883 | |
| joelvonrotz | 0:11ad6aaed10a | 1884 | PALDevDataSet(Dev, DmaxCalRangeMilliMeter, 400); |
| joelvonrotz | 0:11ad6aaed10a | 1885 | PALDevDataSet(Dev, DmaxCalSignalRateRtnMegaCps, |
| joelvonrotz | 0:11ad6aaed10a | 1886 | SignalRateRtnMegaCpsTemp); |
| joelvonrotz | 0:11ad6aaed10a | 1887 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 1888 | /* User parameters */ |
| joelvonrotz | 0:11ad6aaed10a | 1889 | PALDevDataSet(Dev, DmaxCalRangeMilliMeter, RangeMilliMeter); |
| joelvonrotz | 0:11ad6aaed10a | 1890 | PALDevDataSet(Dev, DmaxCalSignalRateRtnMegaCps, |
| joelvonrotz | 0:11ad6aaed10a | 1891 | SignalRateRtnMegaCps); |
| joelvonrotz | 0:11ad6aaed10a | 1892 | } |
| joelvonrotz | 0:11ad6aaed10a | 1893 | |
| joelvonrotz | 0:11ad6aaed10a | 1894 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1895 | } |
| joelvonrotz | 0:11ad6aaed10a | 1896 | |
| joelvonrotz | 0:11ad6aaed10a | 1897 | VL53L0X_Error VL53L0X_GetDmaxCalParameters(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1898 | uint16_t *pRangeMilliMeter, FixPoint1616_t *pSignalRateRtnMegaCps) |
| joelvonrotz | 0:11ad6aaed10a | 1899 | { |
| joelvonrotz | 0:11ad6aaed10a | 1900 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1901 | |
| joelvonrotz | 0:11ad6aaed10a | 1902 | |
| joelvonrotz | 0:11ad6aaed10a | 1903 | *pRangeMilliMeter = PALDevDataGet(Dev, DmaxCalRangeMilliMeter); |
| joelvonrotz | 0:11ad6aaed10a | 1904 | *pSignalRateRtnMegaCps = PALDevDataGet(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1905 | DmaxCalSignalRateRtnMegaCps); |
| joelvonrotz | 0:11ad6aaed10a | 1906 | |
| joelvonrotz | 0:11ad6aaed10a | 1907 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1908 | } |
| joelvonrotz | 0:11ad6aaed10a | 1909 | |
| joelvonrotz | 0:11ad6aaed10a | 1910 | /* End Group PAL Parameters Functions */ |
| joelvonrotz | 0:11ad6aaed10a | 1911 | |
| joelvonrotz | 0:11ad6aaed10a | 1912 | /* Group PAL Measurement Functions */ |
| joelvonrotz | 0:11ad6aaed10a | 1913 | VL53L0X_Error VL53L0X_PerformSingleMeasurement(VL53L0X_DEV Dev) |
| joelvonrotz | 0:11ad6aaed10a | 1914 | { |
| joelvonrotz | 0:11ad6aaed10a | 1915 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1916 | VL53L0X_DeviceModes DeviceMode; |
| joelvonrotz | 0:11ad6aaed10a | 1917 | |
| joelvonrotz | 0:11ad6aaed10a | 1918 | |
| joelvonrotz | 0:11ad6aaed10a | 1919 | /* Get Current DeviceMode */ |
| joelvonrotz | 0:11ad6aaed10a | 1920 | Status = VL53L0X_GetDeviceMode(Dev, &DeviceMode); |
| joelvonrotz | 0:11ad6aaed10a | 1921 | |
| joelvonrotz | 0:11ad6aaed10a | 1922 | /* Start immediately to run a single ranging measurement in case of |
| joelvonrotz | 0:11ad6aaed10a | 1923 | * single ranging or single histogram */ |
| joelvonrotz | 0:11ad6aaed10a | 1924 | if (Status == VL53L0X_ERROR_NONE |
| joelvonrotz | 0:11ad6aaed10a | 1925 | && DeviceMode == VL53L0X_DEVICEMODE_SINGLE_RANGING) |
| joelvonrotz | 0:11ad6aaed10a | 1926 | Status = VL53L0X_StartMeasurement(Dev); |
| joelvonrotz | 0:11ad6aaed10a | 1927 | |
| joelvonrotz | 0:11ad6aaed10a | 1928 | |
| joelvonrotz | 0:11ad6aaed10a | 1929 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 1930 | Status = VL53L0X_measurement_poll_for_completion(Dev); |
| joelvonrotz | 0:11ad6aaed10a | 1931 | |
| joelvonrotz | 0:11ad6aaed10a | 1932 | |
| joelvonrotz | 0:11ad6aaed10a | 1933 | /* Change PAL State in case of single ranging or single histogram */ |
| joelvonrotz | 0:11ad6aaed10a | 1934 | if (Status == VL53L0X_ERROR_NONE |
| joelvonrotz | 0:11ad6aaed10a | 1935 | && DeviceMode == VL53L0X_DEVICEMODE_SINGLE_RANGING) |
| joelvonrotz | 0:11ad6aaed10a | 1936 | PALDevDataSet(Dev, PalState, VL53L0X_STATE_IDLE); |
| joelvonrotz | 0:11ad6aaed10a | 1937 | |
| joelvonrotz | 0:11ad6aaed10a | 1938 | |
| joelvonrotz | 0:11ad6aaed10a | 1939 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1940 | } |
| joelvonrotz | 0:11ad6aaed10a | 1941 | |
| joelvonrotz | 0:11ad6aaed10a | 1942 | VL53L0X_Error VL53L0X_PerformSingleHistogramMeasurement(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1943 | VL53L0X_HistogramMeasurementData_t *pHistogramMeasurementData) |
| joelvonrotz | 0:11ad6aaed10a | 1944 | { |
| joelvonrotz | 0:11ad6aaed10a | 1945 | VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; |
| joelvonrotz | 0:11ad6aaed10a | 1946 | |
| joelvonrotz | 0:11ad6aaed10a | 1947 | /* not implemented on VL53L0X */ |
| joelvonrotz | 0:11ad6aaed10a | 1948 | |
| joelvonrotz | 0:11ad6aaed10a | 1949 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1950 | } |
| joelvonrotz | 0:11ad6aaed10a | 1951 | |
| joelvonrotz | 0:11ad6aaed10a | 1952 | VL53L0X_Error VL53L0X_PerformRefCalibration(VL53L0X_DEV Dev, uint8_t *pVhvSettings, |
| joelvonrotz | 0:11ad6aaed10a | 1953 | uint8_t *pPhaseCal) |
| joelvonrotz | 0:11ad6aaed10a | 1954 | { |
| joelvonrotz | 0:11ad6aaed10a | 1955 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1956 | |
| joelvonrotz | 0:11ad6aaed10a | 1957 | Status = VL53L0X_perform_ref_calibration(Dev, pVhvSettings, |
| joelvonrotz | 0:11ad6aaed10a | 1958 | pPhaseCal, 1); |
| joelvonrotz | 0:11ad6aaed10a | 1959 | |
| joelvonrotz | 0:11ad6aaed10a | 1960 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1961 | } |
| joelvonrotz | 0:11ad6aaed10a | 1962 | |
| joelvonrotz | 0:11ad6aaed10a | 1963 | VL53L0X_Error VL53L0X_PerformXTalkMeasurement(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1964 | uint32_t TimeoutMs, FixPoint1616_t *pXtalkPerSpad, |
| joelvonrotz | 0:11ad6aaed10a | 1965 | uint8_t *pAmbientTooHigh) |
| joelvonrotz | 0:11ad6aaed10a | 1966 | { |
| joelvonrotz | 0:11ad6aaed10a | 1967 | VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; |
| joelvonrotz | 0:11ad6aaed10a | 1968 | |
| joelvonrotz | 0:11ad6aaed10a | 1969 | /* not implemented on VL53L0X */ |
| joelvonrotz | 0:11ad6aaed10a | 1970 | |
| joelvonrotz | 0:11ad6aaed10a | 1971 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1972 | } |
| joelvonrotz | 0:11ad6aaed10a | 1973 | |
| joelvonrotz | 0:11ad6aaed10a | 1974 | VL53L0X_Error VL53L0X_PerformXTalkCalibration(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1975 | FixPoint1616_t XTalkCalDistance, |
| joelvonrotz | 0:11ad6aaed10a | 1976 | FixPoint1616_t *pXTalkCompensationRateMegaCps) |
| joelvonrotz | 0:11ad6aaed10a | 1977 | { |
| joelvonrotz | 0:11ad6aaed10a | 1978 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1979 | |
| joelvonrotz | 0:11ad6aaed10a | 1980 | Status = VL53L0X_perform_xtalk_calibration(Dev, XTalkCalDistance, |
| joelvonrotz | 0:11ad6aaed10a | 1981 | pXTalkCompensationRateMegaCps); |
| joelvonrotz | 0:11ad6aaed10a | 1982 | |
| joelvonrotz | 0:11ad6aaed10a | 1983 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1984 | } |
| joelvonrotz | 0:11ad6aaed10a | 1985 | |
| joelvonrotz | 0:11ad6aaed10a | 1986 | VL53L0X_Error VL53L0X_PerformOffsetCalibration(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1987 | FixPoint1616_t CalDistanceMilliMeter, int32_t *pOffsetMicroMeter) |
| joelvonrotz | 0:11ad6aaed10a | 1988 | { |
| joelvonrotz | 0:11ad6aaed10a | 1989 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 1990 | |
| joelvonrotz | 0:11ad6aaed10a | 1991 | Status = VL53L0X_perform_offset_calibration(Dev, CalDistanceMilliMeter, |
| joelvonrotz | 0:11ad6aaed10a | 1992 | pOffsetMicroMeter); |
| joelvonrotz | 0:11ad6aaed10a | 1993 | |
| joelvonrotz | 0:11ad6aaed10a | 1994 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 1995 | } |
| joelvonrotz | 0:11ad6aaed10a | 1996 | |
| joelvonrotz | 0:11ad6aaed10a | 1997 | VL53L0X_Error VL53L0X_CheckAndLoadInterruptSettings(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 1998 | uint8_t StartNotStopFlag) |
| joelvonrotz | 0:11ad6aaed10a | 1999 | { |
| joelvonrotz | 0:11ad6aaed10a | 2000 | uint8_t InterruptConfig; |
| joelvonrotz | 0:11ad6aaed10a | 2001 | FixPoint1616_t ThresholdLow; |
| joelvonrotz | 0:11ad6aaed10a | 2002 | FixPoint1616_t ThresholdHigh; |
| joelvonrotz | 0:11ad6aaed10a | 2003 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2004 | |
| joelvonrotz | 0:11ad6aaed10a | 2005 | InterruptConfig = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2006 | Pin0GpioFunctionality); |
| joelvonrotz | 0:11ad6aaed10a | 2007 | |
| joelvonrotz | 0:11ad6aaed10a | 2008 | if ((InterruptConfig == |
| joelvonrotz | 0:11ad6aaed10a | 2009 | VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW) || |
| joelvonrotz | 0:11ad6aaed10a | 2010 | (InterruptConfig == |
| joelvonrotz | 0:11ad6aaed10a | 2011 | VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH) || |
| joelvonrotz | 0:11ad6aaed10a | 2012 | (InterruptConfig == |
| joelvonrotz | 0:11ad6aaed10a | 2013 | VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT)) { |
| joelvonrotz | 0:11ad6aaed10a | 2014 | |
| joelvonrotz | 0:11ad6aaed10a | 2015 | Status = VL53L0X_GetInterruptThresholds(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2016 | VL53L0X_DEVICEMODE_CONTINUOUS_RANGING, |
| joelvonrotz | 0:11ad6aaed10a | 2017 | &ThresholdLow, &ThresholdHigh); |
| joelvonrotz | 0:11ad6aaed10a | 2018 | |
| joelvonrotz | 0:11ad6aaed10a | 2019 | if (((ThresholdLow > 255*65536) || |
| joelvonrotz | 0:11ad6aaed10a | 2020 | (ThresholdHigh > 255*65536)) && |
| joelvonrotz | 0:11ad6aaed10a | 2021 | (Status == VL53L0X_ERROR_NONE)) { |
| joelvonrotz | 0:11ad6aaed10a | 2022 | |
| joelvonrotz | 0:11ad6aaed10a | 2023 | if (StartNotStopFlag != 0) { |
| joelvonrotz | 0:11ad6aaed10a | 2024 | Status = VL53L0X_load_tuning_settings(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2025 | InterruptThresholdSettings); |
| joelvonrotz | 0:11ad6aaed10a | 2026 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 2027 | Status |= VL53L0X_WrByte(Dev, 0xFF, 0x04); |
| joelvonrotz | 0:11ad6aaed10a | 2028 | Status |= VL53L0X_WrByte(Dev, 0x70, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2029 | Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2030 | Status |= VL53L0X_WrByte(Dev, 0x80, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2031 | } |
| joelvonrotz | 0:11ad6aaed10a | 2032 | |
| joelvonrotz | 0:11ad6aaed10a | 2033 | } |
| joelvonrotz | 0:11ad6aaed10a | 2034 | |
| joelvonrotz | 0:11ad6aaed10a | 2035 | |
| joelvonrotz | 0:11ad6aaed10a | 2036 | } |
| joelvonrotz | 0:11ad6aaed10a | 2037 | |
| joelvonrotz | 0:11ad6aaed10a | 2038 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2039 | |
| joelvonrotz | 0:11ad6aaed10a | 2040 | } |
| joelvonrotz | 0:11ad6aaed10a | 2041 | |
| joelvonrotz | 0:11ad6aaed10a | 2042 | |
| joelvonrotz | 0:11ad6aaed10a | 2043 | VL53L0X_Error VL53L0X_StartMeasurement(VL53L0X_DEV Dev) |
| joelvonrotz | 0:11ad6aaed10a | 2044 | { |
| joelvonrotz | 0:11ad6aaed10a | 2045 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2046 | VL53L0X_DeviceModes DeviceMode; |
| joelvonrotz | 0:11ad6aaed10a | 2047 | uint8_t Byte; |
| joelvonrotz | 0:11ad6aaed10a | 2048 | uint8_t StartStopByte = VL53L0X_REG_SYSRANGE_MODE_START_STOP; |
| joelvonrotz | 0:11ad6aaed10a | 2049 | uint32_t LoopNb; |
| joelvonrotz | 0:11ad6aaed10a | 2050 | |
| joelvonrotz | 0:11ad6aaed10a | 2051 | /* Get Current DeviceMode */ |
| joelvonrotz | 0:11ad6aaed10a | 2052 | VL53L0X_GetDeviceMode(Dev, &DeviceMode); |
| joelvonrotz | 0:11ad6aaed10a | 2053 | |
| joelvonrotz | 0:11ad6aaed10a | 2054 | Status = VL53L0X_WrByte(Dev, 0x80, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2055 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2056 | Status = VL53L0X_WrByte(Dev, 0x00, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2057 | Status = VL53L0X_WrByte(Dev, 0x91, PALDevDataGet(Dev, StopVariable)); |
| joelvonrotz | 0:11ad6aaed10a | 2058 | Status = VL53L0X_WrByte(Dev, 0x00, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2059 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2060 | Status = VL53L0X_WrByte(Dev, 0x80, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2061 | |
| joelvonrotz | 0:11ad6aaed10a | 2062 | switch (DeviceMode) { |
| joelvonrotz | 0:11ad6aaed10a | 2063 | case VL53L0X_DEVICEMODE_SINGLE_RANGING: |
| joelvonrotz | 0:11ad6aaed10a | 2064 | Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSRANGE_START, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2065 | |
| joelvonrotz | 0:11ad6aaed10a | 2066 | Byte = StartStopByte; |
| joelvonrotz | 0:11ad6aaed10a | 2067 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2068 | /* Wait until start bit has been cleared */ |
| joelvonrotz | 0:11ad6aaed10a | 2069 | LoopNb = 0; |
| joelvonrotz | 0:11ad6aaed10a | 2070 | do { |
| joelvonrotz | 0:11ad6aaed10a | 2071 | if (LoopNb > 0) |
| joelvonrotz | 0:11ad6aaed10a | 2072 | Status = VL53L0X_RdByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2073 | VL53L0X_REG_SYSRANGE_START, &Byte); |
| joelvonrotz | 0:11ad6aaed10a | 2074 | LoopNb = LoopNb + 1; |
| joelvonrotz | 0:11ad6aaed10a | 2075 | } while (((Byte & StartStopByte) == StartStopByte) |
| joelvonrotz | 0:11ad6aaed10a | 2076 | && (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2077 | && (LoopNb < VL53L0X_DEFAULT_MAX_LOOP)); |
| joelvonrotz | 0:11ad6aaed10a | 2078 | |
| joelvonrotz | 0:11ad6aaed10a | 2079 | if (LoopNb >= VL53L0X_DEFAULT_MAX_LOOP) |
| joelvonrotz | 0:11ad6aaed10a | 2080 | Status = VL53L0X_ERROR_TIME_OUT; |
| joelvonrotz | 0:11ad6aaed10a | 2081 | |
| joelvonrotz | 0:11ad6aaed10a | 2082 | } |
| joelvonrotz | 0:11ad6aaed10a | 2083 | |
| joelvonrotz | 0:11ad6aaed10a | 2084 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2085 | case VL53L0X_DEVICEMODE_CONTINUOUS_RANGING: |
| joelvonrotz | 0:11ad6aaed10a | 2086 | /* Back-to-back mode */ |
| joelvonrotz | 0:11ad6aaed10a | 2087 | |
| joelvonrotz | 0:11ad6aaed10a | 2088 | /* Check if need to apply interrupt settings */ |
| joelvonrotz | 0:11ad6aaed10a | 2089 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2090 | Status = VL53L0X_CheckAndLoadInterruptSettings(Dev, 1); |
| joelvonrotz | 0:11ad6aaed10a | 2091 | |
| joelvonrotz | 0:11ad6aaed10a | 2092 | Status = VL53L0X_WrByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2093 | VL53L0X_REG_SYSRANGE_START, |
| joelvonrotz | 0:11ad6aaed10a | 2094 | VL53L0X_REG_SYSRANGE_MODE_BACKTOBACK); |
| joelvonrotz | 0:11ad6aaed10a | 2095 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2096 | /* Set PAL State to Running */ |
| joelvonrotz | 0:11ad6aaed10a | 2097 | PALDevDataSet(Dev, PalState, VL53L0X_STATE_RUNNING); |
| joelvonrotz | 0:11ad6aaed10a | 2098 | } |
| joelvonrotz | 0:11ad6aaed10a | 2099 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2100 | case VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING: |
| joelvonrotz | 0:11ad6aaed10a | 2101 | /* Continuous mode */ |
| joelvonrotz | 0:11ad6aaed10a | 2102 | /* Check if need to apply interrupt settings */ |
| joelvonrotz | 0:11ad6aaed10a | 2103 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2104 | Status = VL53L0X_CheckAndLoadInterruptSettings(Dev, 1); |
| joelvonrotz | 0:11ad6aaed10a | 2105 | |
| joelvonrotz | 0:11ad6aaed10a | 2106 | Status = VL53L0X_WrByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2107 | VL53L0X_REG_SYSRANGE_START, |
| joelvonrotz | 0:11ad6aaed10a | 2108 | VL53L0X_REG_SYSRANGE_MODE_TIMED); |
| joelvonrotz | 0:11ad6aaed10a | 2109 | |
| joelvonrotz | 0:11ad6aaed10a | 2110 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2111 | /* Set PAL State to Running */ |
| joelvonrotz | 0:11ad6aaed10a | 2112 | PALDevDataSet(Dev, PalState, VL53L0X_STATE_RUNNING); |
| joelvonrotz | 0:11ad6aaed10a | 2113 | } |
| joelvonrotz | 0:11ad6aaed10a | 2114 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2115 | default: |
| joelvonrotz | 0:11ad6aaed10a | 2116 | /* Selected mode not supported */ |
| joelvonrotz | 0:11ad6aaed10a | 2117 | Status = VL53L0X_ERROR_MODE_NOT_SUPPORTED; |
| joelvonrotz | 0:11ad6aaed10a | 2118 | } |
| joelvonrotz | 0:11ad6aaed10a | 2119 | |
| joelvonrotz | 0:11ad6aaed10a | 2120 | |
| joelvonrotz | 0:11ad6aaed10a | 2121 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2122 | } |
| joelvonrotz | 0:11ad6aaed10a | 2123 | |
| joelvonrotz | 0:11ad6aaed10a | 2124 | VL53L0X_Error VL53L0X_StopMeasurement(VL53L0X_DEV Dev) |
| joelvonrotz | 0:11ad6aaed10a | 2125 | { |
| joelvonrotz | 0:11ad6aaed10a | 2126 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2127 | |
| joelvonrotz | 0:11ad6aaed10a | 2128 | Status = VL53L0X_WrByte(Dev, VL53L0X_REG_SYSRANGE_START, |
| joelvonrotz | 0:11ad6aaed10a | 2129 | VL53L0X_REG_SYSRANGE_MODE_SINGLESHOT); |
| joelvonrotz | 0:11ad6aaed10a | 2130 | |
| joelvonrotz | 0:11ad6aaed10a | 2131 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2132 | Status = VL53L0X_WrByte(Dev, 0x00, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2133 | Status = VL53L0X_WrByte(Dev, 0x91, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2134 | Status = VL53L0X_WrByte(Dev, 0x00, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2135 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2136 | |
| joelvonrotz | 0:11ad6aaed10a | 2137 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2138 | /* Set PAL State to Idle */ |
| joelvonrotz | 0:11ad6aaed10a | 2139 | PALDevDataSet(Dev, PalState, VL53L0X_STATE_IDLE); |
| joelvonrotz | 0:11ad6aaed10a | 2140 | } |
| joelvonrotz | 0:11ad6aaed10a | 2141 | |
| joelvonrotz | 0:11ad6aaed10a | 2142 | /* Check if need to apply interrupt settings */ |
| joelvonrotz | 0:11ad6aaed10a | 2143 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2144 | Status = VL53L0X_CheckAndLoadInterruptSettings(Dev, 0); |
| joelvonrotz | 0:11ad6aaed10a | 2145 | |
| joelvonrotz | 0:11ad6aaed10a | 2146 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2147 | } |
| joelvonrotz | 0:11ad6aaed10a | 2148 | |
| joelvonrotz | 0:11ad6aaed10a | 2149 | VL53L0X_Error VL53L0X_GetMeasurementDataReady(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2150 | uint8_t *pMeasurementDataReady) |
| joelvonrotz | 0:11ad6aaed10a | 2151 | { |
| joelvonrotz | 0:11ad6aaed10a | 2152 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2153 | uint8_t SysRangeStatusRegister; |
| joelvonrotz | 0:11ad6aaed10a | 2154 | uint8_t InterruptConfig; |
| joelvonrotz | 0:11ad6aaed10a | 2155 | uint32_t InterruptMask; |
| joelvonrotz | 0:11ad6aaed10a | 2156 | |
| joelvonrotz | 0:11ad6aaed10a | 2157 | InterruptConfig = VL53L0X_GETDEVICESPECIFICPARAMETER(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2158 | Pin0GpioFunctionality); |
| joelvonrotz | 0:11ad6aaed10a | 2159 | |
| joelvonrotz | 0:11ad6aaed10a | 2160 | if (InterruptConfig == |
| joelvonrotz | 0:11ad6aaed10a | 2161 | VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY) { |
| joelvonrotz | 0:11ad6aaed10a | 2162 | Status = VL53L0X_GetInterruptMaskStatus(Dev, &InterruptMask); |
| joelvonrotz | 0:11ad6aaed10a | 2163 | if (InterruptMask == |
| joelvonrotz | 0:11ad6aaed10a | 2164 | VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY) |
| joelvonrotz | 0:11ad6aaed10a | 2165 | *pMeasurementDataReady = 1; |
| joelvonrotz | 0:11ad6aaed10a | 2166 | else |
| joelvonrotz | 0:11ad6aaed10a | 2167 | *pMeasurementDataReady = 0; |
| joelvonrotz | 0:11ad6aaed10a | 2168 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 2169 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_RESULT_RANGE_STATUS, |
| joelvonrotz | 0:11ad6aaed10a | 2170 | &SysRangeStatusRegister); |
| joelvonrotz | 0:11ad6aaed10a | 2171 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2172 | if (SysRangeStatusRegister & 0x01) |
| joelvonrotz | 0:11ad6aaed10a | 2173 | *pMeasurementDataReady = 1; |
| joelvonrotz | 0:11ad6aaed10a | 2174 | else |
| joelvonrotz | 0:11ad6aaed10a | 2175 | *pMeasurementDataReady = 0; |
| joelvonrotz | 0:11ad6aaed10a | 2176 | } |
| joelvonrotz | 0:11ad6aaed10a | 2177 | } |
| joelvonrotz | 0:11ad6aaed10a | 2178 | |
| joelvonrotz | 0:11ad6aaed10a | 2179 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2180 | } |
| joelvonrotz | 0:11ad6aaed10a | 2181 | |
| joelvonrotz | 0:11ad6aaed10a | 2182 | VL53L0X_Error VL53L0X_WaitDeviceReadyForNewMeasurement(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2183 | uint32_t MaxLoop) |
| joelvonrotz | 0:11ad6aaed10a | 2184 | { |
| joelvonrotz | 0:11ad6aaed10a | 2185 | VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; |
| joelvonrotz | 0:11ad6aaed10a | 2186 | |
| joelvonrotz | 0:11ad6aaed10a | 2187 | /* not implemented for VL53L0X */ |
| joelvonrotz | 0:11ad6aaed10a | 2188 | |
| joelvonrotz | 0:11ad6aaed10a | 2189 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2190 | } |
| joelvonrotz | 0:11ad6aaed10a | 2191 | |
| joelvonrotz | 0:11ad6aaed10a | 2192 | |
| joelvonrotz | 0:11ad6aaed10a | 2193 | VL53L0X_Error VL53L0X_GetRangingMeasurementData(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2194 | VL53L0X_RangingMeasurementData_t *pRangingMeasurementData) |
| joelvonrotz | 0:11ad6aaed10a | 2195 | { |
| joelvonrotz | 0:11ad6aaed10a | 2196 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2197 | uint8_t DeviceRangeStatus; |
| joelvonrotz | 0:11ad6aaed10a | 2198 | uint8_t RangeFractionalEnable; |
| joelvonrotz | 0:11ad6aaed10a | 2199 | uint8_t PalRangeStatus; |
| joelvonrotz | 0:11ad6aaed10a | 2200 | uint8_t XTalkCompensationEnable; |
| joelvonrotz | 0:11ad6aaed10a | 2201 | uint16_t AmbientRate; |
| joelvonrotz | 0:11ad6aaed10a | 2202 | FixPoint1616_t SignalRate; |
| joelvonrotz | 0:11ad6aaed10a | 2203 | uint16_t XTalkCompensationRateMegaCps; |
| joelvonrotz | 0:11ad6aaed10a | 2204 | uint16_t EffectiveSpadRtnCount; |
| joelvonrotz | 0:11ad6aaed10a | 2205 | uint16_t tmpuint16; |
| joelvonrotz | 0:11ad6aaed10a | 2206 | uint16_t XtalkRangeMilliMeter; |
| joelvonrotz | 0:11ad6aaed10a | 2207 | uint16_t LinearityCorrectiveGain; |
| joelvonrotz | 0:11ad6aaed10a | 2208 | uint8_t localBuffer[12]; |
| joelvonrotz | 0:11ad6aaed10a | 2209 | VL53L0X_RangingMeasurementData_t LastRangeDataBuffer; |
| joelvonrotz | 0:11ad6aaed10a | 2210 | |
| joelvonrotz | 0:11ad6aaed10a | 2211 | |
| joelvonrotz | 0:11ad6aaed10a | 2212 | /* |
| joelvonrotz | 0:11ad6aaed10a | 2213 | * use multi read even if some registers are not useful, result will |
| joelvonrotz | 0:11ad6aaed10a | 2214 | * be more efficient |
| joelvonrotz | 0:11ad6aaed10a | 2215 | * start reading at 0x14 dec20 |
| joelvonrotz | 0:11ad6aaed10a | 2216 | * end reading at 0x21 dec33 total 14 bytes to read |
| joelvonrotz | 0:11ad6aaed10a | 2217 | */ |
| joelvonrotz | 0:11ad6aaed10a | 2218 | Status = VL53L0X_ReadMulti(Dev, 0x14, localBuffer, 12); |
| joelvonrotz | 0:11ad6aaed10a | 2219 | |
| joelvonrotz | 0:11ad6aaed10a | 2220 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2221 | |
| joelvonrotz | 0:11ad6aaed10a | 2222 | pRangingMeasurementData->ZoneId = 0; /* Only one zone */ |
| joelvonrotz | 0:11ad6aaed10a | 2223 | pRangingMeasurementData->TimeStamp = 0; /* Not Implemented */ |
| joelvonrotz | 0:11ad6aaed10a | 2224 | |
| joelvonrotz | 0:11ad6aaed10a | 2225 | tmpuint16 = VL53L0X_MAKEUINT16(localBuffer[11], localBuffer[10]); |
| joelvonrotz | 0:11ad6aaed10a | 2226 | /* cut1.1 if SYSTEM__RANGE_CONFIG if 1 range is 2bits fractional |
| joelvonrotz | 0:11ad6aaed10a | 2227 | *(format 11.2) else no fractional |
| joelvonrotz | 0:11ad6aaed10a | 2228 | */ |
| joelvonrotz | 0:11ad6aaed10a | 2229 | |
| joelvonrotz | 0:11ad6aaed10a | 2230 | pRangingMeasurementData->MeasurementTimeUsec = 0; |
| joelvonrotz | 0:11ad6aaed10a | 2231 | |
| joelvonrotz | 0:11ad6aaed10a | 2232 | SignalRate = VL53L0X_FIXPOINT97TOFIXPOINT1616( |
| joelvonrotz | 0:11ad6aaed10a | 2233 | VL53L0X_MAKEUINT16(localBuffer[7], localBuffer[6])); |
| joelvonrotz | 0:11ad6aaed10a | 2234 | /* peak_signal_count_rate_rtn_mcps */ |
| joelvonrotz | 0:11ad6aaed10a | 2235 | pRangingMeasurementData->SignalRateRtnMegaCps = SignalRate; |
| joelvonrotz | 0:11ad6aaed10a | 2236 | |
| joelvonrotz | 0:11ad6aaed10a | 2237 | AmbientRate = VL53L0X_MAKEUINT16(localBuffer[9], localBuffer[8]); |
| joelvonrotz | 0:11ad6aaed10a | 2238 | pRangingMeasurementData->AmbientRateRtnMegaCps = |
| joelvonrotz | 0:11ad6aaed10a | 2239 | VL53L0X_FIXPOINT97TOFIXPOINT1616(AmbientRate); |
| joelvonrotz | 0:11ad6aaed10a | 2240 | |
| joelvonrotz | 0:11ad6aaed10a | 2241 | EffectiveSpadRtnCount = VL53L0X_MAKEUINT16(localBuffer[3], |
| joelvonrotz | 0:11ad6aaed10a | 2242 | localBuffer[2]); |
| joelvonrotz | 0:11ad6aaed10a | 2243 | /* EffectiveSpadRtnCount is 8.8 format */ |
| joelvonrotz | 0:11ad6aaed10a | 2244 | pRangingMeasurementData->EffectiveSpadRtnCount = |
| joelvonrotz | 0:11ad6aaed10a | 2245 | EffectiveSpadRtnCount; |
| joelvonrotz | 0:11ad6aaed10a | 2246 | |
| joelvonrotz | 0:11ad6aaed10a | 2247 | DeviceRangeStatus = localBuffer[0]; |
| joelvonrotz | 0:11ad6aaed10a | 2248 | |
| joelvonrotz | 0:11ad6aaed10a | 2249 | /* Get Linearity Corrective Gain */ |
| joelvonrotz | 0:11ad6aaed10a | 2250 | LinearityCorrectiveGain = PALDevDataGet(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2251 | LinearityCorrectiveGain); |
| joelvonrotz | 0:11ad6aaed10a | 2252 | |
| joelvonrotz | 0:11ad6aaed10a | 2253 | /* Get ranging configuration */ |
| joelvonrotz | 0:11ad6aaed10a | 2254 | RangeFractionalEnable = PALDevDataGet(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2255 | RangeFractionalEnable); |
| joelvonrotz | 0:11ad6aaed10a | 2256 | |
| joelvonrotz | 0:11ad6aaed10a | 2257 | if (LinearityCorrectiveGain != 1000) { |
| joelvonrotz | 0:11ad6aaed10a | 2258 | |
| joelvonrotz | 0:11ad6aaed10a | 2259 | tmpuint16 = (uint16_t)((LinearityCorrectiveGain |
| joelvonrotz | 0:11ad6aaed10a | 2260 | * tmpuint16 + 500) / 1000); |
| joelvonrotz | 0:11ad6aaed10a | 2261 | |
| joelvonrotz | 0:11ad6aaed10a | 2262 | /* Implement Xtalk */ |
| joelvonrotz | 0:11ad6aaed10a | 2263 | VL53L0X_GETPARAMETERFIELD(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2264 | XTalkCompensationRateMegaCps, |
| joelvonrotz | 0:11ad6aaed10a | 2265 | XTalkCompensationRateMegaCps); |
| joelvonrotz | 0:11ad6aaed10a | 2266 | VL53L0X_GETPARAMETERFIELD(Dev, XTalkCompensationEnable, |
| joelvonrotz | 0:11ad6aaed10a | 2267 | XTalkCompensationEnable); |
| joelvonrotz | 0:11ad6aaed10a | 2268 | |
| joelvonrotz | 0:11ad6aaed10a | 2269 | if (XTalkCompensationEnable) { |
| joelvonrotz | 0:11ad6aaed10a | 2270 | |
| joelvonrotz | 0:11ad6aaed10a | 2271 | if ((SignalRate |
| joelvonrotz | 0:11ad6aaed10a | 2272 | - ((XTalkCompensationRateMegaCps |
| joelvonrotz | 0:11ad6aaed10a | 2273 | * EffectiveSpadRtnCount) >> 8)) |
| joelvonrotz | 0:11ad6aaed10a | 2274 | <= 0) { |
| joelvonrotz | 0:11ad6aaed10a | 2275 | if (RangeFractionalEnable) |
| joelvonrotz | 0:11ad6aaed10a | 2276 | XtalkRangeMilliMeter = 8888; |
| joelvonrotz | 0:11ad6aaed10a | 2277 | else |
| joelvonrotz | 0:11ad6aaed10a | 2278 | XtalkRangeMilliMeter = 8888 |
| joelvonrotz | 0:11ad6aaed10a | 2279 | << 2; |
| joelvonrotz | 0:11ad6aaed10a | 2280 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 2281 | XtalkRangeMilliMeter = |
| joelvonrotz | 0:11ad6aaed10a | 2282 | (tmpuint16 * SignalRate) |
| joelvonrotz | 0:11ad6aaed10a | 2283 | / (SignalRate |
| joelvonrotz | 0:11ad6aaed10a | 2284 | - ((XTalkCompensationRateMegaCps |
| joelvonrotz | 0:11ad6aaed10a | 2285 | * EffectiveSpadRtnCount) |
| joelvonrotz | 0:11ad6aaed10a | 2286 | >> 8)); |
| joelvonrotz | 0:11ad6aaed10a | 2287 | } |
| joelvonrotz | 0:11ad6aaed10a | 2288 | |
| joelvonrotz | 0:11ad6aaed10a | 2289 | tmpuint16 = XtalkRangeMilliMeter; |
| joelvonrotz | 0:11ad6aaed10a | 2290 | } |
| joelvonrotz | 0:11ad6aaed10a | 2291 | |
| joelvonrotz | 0:11ad6aaed10a | 2292 | } |
| joelvonrotz | 0:11ad6aaed10a | 2293 | |
| joelvonrotz | 0:11ad6aaed10a | 2294 | if (RangeFractionalEnable) { |
| joelvonrotz | 0:11ad6aaed10a | 2295 | pRangingMeasurementData->RangeMilliMeter = |
| joelvonrotz | 0:11ad6aaed10a | 2296 | (uint16_t)((tmpuint16) >> 2); |
| joelvonrotz | 0:11ad6aaed10a | 2297 | pRangingMeasurementData->RangeFractionalPart = |
| joelvonrotz | 0:11ad6aaed10a | 2298 | (uint8_t)((tmpuint16 & 0x03) << 6); |
| joelvonrotz | 0:11ad6aaed10a | 2299 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 2300 | pRangingMeasurementData->RangeMilliMeter = tmpuint16; |
| joelvonrotz | 0:11ad6aaed10a | 2301 | pRangingMeasurementData->RangeFractionalPart = 0; |
| joelvonrotz | 0:11ad6aaed10a | 2302 | } |
| joelvonrotz | 0:11ad6aaed10a | 2303 | |
| joelvonrotz | 0:11ad6aaed10a | 2304 | /* |
| joelvonrotz | 0:11ad6aaed10a | 2305 | * For a standard definition of RangeStatus, this should |
| joelvonrotz | 0:11ad6aaed10a | 2306 | * return 0 in case of good result after a ranging |
| joelvonrotz | 0:11ad6aaed10a | 2307 | * The range status depends on the device so call a device |
| joelvonrotz | 0:11ad6aaed10a | 2308 | * specific function to obtain the right Status. |
| joelvonrotz | 0:11ad6aaed10a | 2309 | */ |
| joelvonrotz | 0:11ad6aaed10a | 2310 | Status |= VL53L0X_get_pal_range_status(Dev, DeviceRangeStatus, |
| joelvonrotz | 0:11ad6aaed10a | 2311 | SignalRate, EffectiveSpadRtnCount, |
| joelvonrotz | 0:11ad6aaed10a | 2312 | pRangingMeasurementData, &PalRangeStatus); |
| joelvonrotz | 0:11ad6aaed10a | 2313 | |
| joelvonrotz | 0:11ad6aaed10a | 2314 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2315 | pRangingMeasurementData->RangeStatus = PalRangeStatus; |
| joelvonrotz | 0:11ad6aaed10a | 2316 | |
| joelvonrotz | 0:11ad6aaed10a | 2317 | } |
| joelvonrotz | 0:11ad6aaed10a | 2318 | |
| joelvonrotz | 0:11ad6aaed10a | 2319 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2320 | /* Copy last read data into Dev buffer */ |
| joelvonrotz | 0:11ad6aaed10a | 2321 | LastRangeDataBuffer = PALDevDataGet(Dev, LastRangeMeasure); |
| joelvonrotz | 0:11ad6aaed10a | 2322 | |
| joelvonrotz | 0:11ad6aaed10a | 2323 | LastRangeDataBuffer.RangeMilliMeter = |
| joelvonrotz | 0:11ad6aaed10a | 2324 | pRangingMeasurementData->RangeMilliMeter; |
| joelvonrotz | 0:11ad6aaed10a | 2325 | LastRangeDataBuffer.RangeFractionalPart = |
| joelvonrotz | 0:11ad6aaed10a | 2326 | pRangingMeasurementData->RangeFractionalPart; |
| joelvonrotz | 0:11ad6aaed10a | 2327 | LastRangeDataBuffer.RangeDMaxMilliMeter = |
| joelvonrotz | 0:11ad6aaed10a | 2328 | pRangingMeasurementData->RangeDMaxMilliMeter; |
| joelvonrotz | 0:11ad6aaed10a | 2329 | LastRangeDataBuffer.MeasurementTimeUsec = |
| joelvonrotz | 0:11ad6aaed10a | 2330 | pRangingMeasurementData->MeasurementTimeUsec; |
| joelvonrotz | 0:11ad6aaed10a | 2331 | LastRangeDataBuffer.SignalRateRtnMegaCps = |
| joelvonrotz | 0:11ad6aaed10a | 2332 | pRangingMeasurementData->SignalRateRtnMegaCps; |
| joelvonrotz | 0:11ad6aaed10a | 2333 | LastRangeDataBuffer.AmbientRateRtnMegaCps = |
| joelvonrotz | 0:11ad6aaed10a | 2334 | pRangingMeasurementData->AmbientRateRtnMegaCps; |
| joelvonrotz | 0:11ad6aaed10a | 2335 | LastRangeDataBuffer.EffectiveSpadRtnCount = |
| joelvonrotz | 0:11ad6aaed10a | 2336 | pRangingMeasurementData->EffectiveSpadRtnCount; |
| joelvonrotz | 0:11ad6aaed10a | 2337 | LastRangeDataBuffer.RangeStatus = |
| joelvonrotz | 0:11ad6aaed10a | 2338 | pRangingMeasurementData->RangeStatus; |
| joelvonrotz | 0:11ad6aaed10a | 2339 | |
| joelvonrotz | 0:11ad6aaed10a | 2340 | PALDevDataSet(Dev, LastRangeMeasure, LastRangeDataBuffer); |
| joelvonrotz | 0:11ad6aaed10a | 2341 | } |
| joelvonrotz | 0:11ad6aaed10a | 2342 | |
| joelvonrotz | 0:11ad6aaed10a | 2343 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2344 | } |
| joelvonrotz | 0:11ad6aaed10a | 2345 | |
| joelvonrotz | 0:11ad6aaed10a | 2346 | VL53L0X_Error VL53L0X_GetMeasurementRefSignal(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2347 | FixPoint1616_t *pMeasurementRefSignal) |
| joelvonrotz | 0:11ad6aaed10a | 2348 | { |
| joelvonrotz | 0:11ad6aaed10a | 2349 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2350 | uint8_t SignalRefClipLimitCheckEnable = 0; |
| joelvonrotz | 0:11ad6aaed10a | 2351 | |
| joelvonrotz | 0:11ad6aaed10a | 2352 | Status = VL53L0X_GetLimitCheckEnable(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2353 | VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP, |
| joelvonrotz | 0:11ad6aaed10a | 2354 | &SignalRefClipLimitCheckEnable); |
| joelvonrotz | 0:11ad6aaed10a | 2355 | if (SignalRefClipLimitCheckEnable != 0) { |
| joelvonrotz | 0:11ad6aaed10a | 2356 | *pMeasurementRefSignal = PALDevDataGet(Dev, LastSignalRefMcps); |
| joelvonrotz | 0:11ad6aaed10a | 2357 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 2358 | Status = VL53L0X_ERROR_INVALID_COMMAND; |
| joelvonrotz | 0:11ad6aaed10a | 2359 | } |
| joelvonrotz | 0:11ad6aaed10a | 2360 | |
| joelvonrotz | 0:11ad6aaed10a | 2361 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2362 | } |
| joelvonrotz | 0:11ad6aaed10a | 2363 | |
| joelvonrotz | 0:11ad6aaed10a | 2364 | VL53L0X_Error VL53L0X_GetHistogramMeasurementData(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2365 | VL53L0X_HistogramMeasurementData_t *pHistogramMeasurementData) |
| joelvonrotz | 0:11ad6aaed10a | 2366 | { |
| joelvonrotz | 0:11ad6aaed10a | 2367 | VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; |
| joelvonrotz | 0:11ad6aaed10a | 2368 | |
| joelvonrotz | 0:11ad6aaed10a | 2369 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2370 | } |
| joelvonrotz | 0:11ad6aaed10a | 2371 | |
| joelvonrotz | 0:11ad6aaed10a | 2372 | VL53L0X_Error VL53L0X_PerformSingleRangingMeasurement(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2373 | VL53L0X_RangingMeasurementData_t *pRangingMeasurementData) |
| joelvonrotz | 0:11ad6aaed10a | 2374 | { |
| joelvonrotz | 0:11ad6aaed10a | 2375 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2376 | |
| joelvonrotz | 0:11ad6aaed10a | 2377 | |
| joelvonrotz | 0:11ad6aaed10a | 2378 | /* This function will do a complete single ranging |
| joelvonrotz | 0:11ad6aaed10a | 2379 | * Here we fix the mode! */ |
| joelvonrotz | 0:11ad6aaed10a | 2380 | Status = VL53L0X_SetDeviceMode(Dev, VL53L0X_DEVICEMODE_SINGLE_RANGING); |
| joelvonrotz | 0:11ad6aaed10a | 2381 | |
| joelvonrotz | 0:11ad6aaed10a | 2382 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2383 | Status = VL53L0X_PerformSingleMeasurement(Dev); |
| joelvonrotz | 0:11ad6aaed10a | 2384 | |
| joelvonrotz | 0:11ad6aaed10a | 2385 | |
| joelvonrotz | 0:11ad6aaed10a | 2386 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2387 | Status = VL53L0X_GetRangingMeasurementData(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2388 | pRangingMeasurementData); |
| joelvonrotz | 0:11ad6aaed10a | 2389 | |
| joelvonrotz | 0:11ad6aaed10a | 2390 | |
| joelvonrotz | 0:11ad6aaed10a | 2391 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2392 | Status = VL53L0X_ClearInterruptMask(Dev, 0); |
| joelvonrotz | 0:11ad6aaed10a | 2393 | |
| joelvonrotz | 0:11ad6aaed10a | 2394 | |
| joelvonrotz | 0:11ad6aaed10a | 2395 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2396 | } |
| joelvonrotz | 0:11ad6aaed10a | 2397 | |
| joelvonrotz | 0:11ad6aaed10a | 2398 | VL53L0X_Error VL53L0X_SetNumberOfROIZones(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2399 | uint8_t NumberOfROIZones) |
| joelvonrotz | 0:11ad6aaed10a | 2400 | { |
| joelvonrotz | 0:11ad6aaed10a | 2401 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2402 | |
| joelvonrotz | 0:11ad6aaed10a | 2403 | |
| joelvonrotz | 0:11ad6aaed10a | 2404 | if (NumberOfROIZones != 1) |
| joelvonrotz | 0:11ad6aaed10a | 2405 | Status = VL53L0X_ERROR_INVALID_PARAMS; |
| joelvonrotz | 0:11ad6aaed10a | 2406 | |
| joelvonrotz | 0:11ad6aaed10a | 2407 | |
| joelvonrotz | 0:11ad6aaed10a | 2408 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2409 | } |
| joelvonrotz | 0:11ad6aaed10a | 2410 | |
| joelvonrotz | 0:11ad6aaed10a | 2411 | VL53L0X_Error VL53L0X_GetNumberOfROIZones(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2412 | uint8_t *pNumberOfROIZones) |
| joelvonrotz | 0:11ad6aaed10a | 2413 | { |
| joelvonrotz | 0:11ad6aaed10a | 2414 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2415 | |
| joelvonrotz | 0:11ad6aaed10a | 2416 | |
| joelvonrotz | 0:11ad6aaed10a | 2417 | *pNumberOfROIZones = 1; |
| joelvonrotz | 0:11ad6aaed10a | 2418 | |
| joelvonrotz | 0:11ad6aaed10a | 2419 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2420 | } |
| joelvonrotz | 0:11ad6aaed10a | 2421 | |
| joelvonrotz | 0:11ad6aaed10a | 2422 | VL53L0X_Error VL53L0X_GetMaxNumberOfROIZones(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2423 | uint8_t *pMaxNumberOfROIZones) |
| joelvonrotz | 0:11ad6aaed10a | 2424 | { |
| joelvonrotz | 0:11ad6aaed10a | 2425 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2426 | |
| joelvonrotz | 0:11ad6aaed10a | 2427 | |
| joelvonrotz | 0:11ad6aaed10a | 2428 | *pMaxNumberOfROIZones = 1; |
| joelvonrotz | 0:11ad6aaed10a | 2429 | |
| joelvonrotz | 0:11ad6aaed10a | 2430 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2431 | } |
| joelvonrotz | 0:11ad6aaed10a | 2432 | |
| joelvonrotz | 0:11ad6aaed10a | 2433 | /* End Group PAL Measurement Functions */ |
| joelvonrotz | 0:11ad6aaed10a | 2434 | |
| joelvonrotz | 0:11ad6aaed10a | 2435 | VL53L0X_Error VL53L0X_SetGpioConfig(VL53L0X_DEV Dev, uint8_t Pin, |
| joelvonrotz | 0:11ad6aaed10a | 2436 | VL53L0X_DeviceModes DeviceMode, VL53L0X_GpioFunctionality Functionality, |
| joelvonrotz | 0:11ad6aaed10a | 2437 | VL53L0X_InterruptPolarity Polarity) |
| joelvonrotz | 0:11ad6aaed10a | 2438 | { |
| joelvonrotz | 0:11ad6aaed10a | 2439 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2440 | uint8_t data; |
| joelvonrotz | 0:11ad6aaed10a | 2441 | |
| joelvonrotz | 0:11ad6aaed10a | 2442 | |
| joelvonrotz | 0:11ad6aaed10a | 2443 | if (Pin != 0) { |
| joelvonrotz | 0:11ad6aaed10a | 2444 | Status = VL53L0X_ERROR_GPIO_NOT_EXISTING; |
| joelvonrotz | 0:11ad6aaed10a | 2445 | } else if (DeviceMode == VL53L0X_DEVICEMODE_GPIO_DRIVE) { |
| joelvonrotz | 0:11ad6aaed10a | 2446 | if (Polarity == VL53L0X_INTERRUPTPOLARITY_LOW) |
| joelvonrotz | 0:11ad6aaed10a | 2447 | data = 0x10; |
| joelvonrotz | 0:11ad6aaed10a | 2448 | else |
| joelvonrotz | 0:11ad6aaed10a | 2449 | data = 1; |
| joelvonrotz | 0:11ad6aaed10a | 2450 | |
| joelvonrotz | 0:11ad6aaed10a | 2451 | Status = VL53L0X_WrByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2452 | VL53L0X_REG_GPIO_HV_MUX_ACTIVE_HIGH, data); |
| joelvonrotz | 0:11ad6aaed10a | 2453 | |
| joelvonrotz | 0:11ad6aaed10a | 2454 | } else if (DeviceMode == VL53L0X_DEVICEMODE_GPIO_OSC) { |
| joelvonrotz | 0:11ad6aaed10a | 2455 | |
| joelvonrotz | 0:11ad6aaed10a | 2456 | Status |= VL53L0X_WrByte(Dev, 0xff, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2457 | Status |= VL53L0X_WrByte(Dev, 0x00, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2458 | |
| joelvonrotz | 0:11ad6aaed10a | 2459 | Status |= VL53L0X_WrByte(Dev, 0xff, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2460 | Status |= VL53L0X_WrByte(Dev, 0x80, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2461 | Status |= VL53L0X_WrByte(Dev, 0x85, 0x02); |
| joelvonrotz | 0:11ad6aaed10a | 2462 | |
| joelvonrotz | 0:11ad6aaed10a | 2463 | Status |= VL53L0X_WrByte(Dev, 0xff, 0x04); |
| joelvonrotz | 0:11ad6aaed10a | 2464 | Status |= VL53L0X_WrByte(Dev, 0xcd, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2465 | Status |= VL53L0X_WrByte(Dev, 0xcc, 0x11); |
| joelvonrotz | 0:11ad6aaed10a | 2466 | |
| joelvonrotz | 0:11ad6aaed10a | 2467 | Status |= VL53L0X_WrByte(Dev, 0xff, 0x07); |
| joelvonrotz | 0:11ad6aaed10a | 2468 | Status |= VL53L0X_WrByte(Dev, 0xbe, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2469 | |
| joelvonrotz | 0:11ad6aaed10a | 2470 | Status |= VL53L0X_WrByte(Dev, 0xff, 0x06); |
| joelvonrotz | 0:11ad6aaed10a | 2471 | Status |= VL53L0X_WrByte(Dev, 0xcc, 0x09); |
| joelvonrotz | 0:11ad6aaed10a | 2472 | |
| joelvonrotz | 0:11ad6aaed10a | 2473 | Status |= VL53L0X_WrByte(Dev, 0xff, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2474 | Status |= VL53L0X_WrByte(Dev, 0xff, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2475 | Status |= VL53L0X_WrByte(Dev, 0x00, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2476 | |
| joelvonrotz | 0:11ad6aaed10a | 2477 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 2478 | |
| joelvonrotz | 0:11ad6aaed10a | 2479 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2480 | switch (Functionality) { |
| joelvonrotz | 0:11ad6aaed10a | 2481 | case VL53L0X_GPIOFUNCTIONALITY_OFF: |
| joelvonrotz | 0:11ad6aaed10a | 2482 | data = 0x00; |
| joelvonrotz | 0:11ad6aaed10a | 2483 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2484 | case VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW: |
| joelvonrotz | 0:11ad6aaed10a | 2485 | data = 0x01; |
| joelvonrotz | 0:11ad6aaed10a | 2486 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2487 | case VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH: |
| joelvonrotz | 0:11ad6aaed10a | 2488 | data = 0x02; |
| joelvonrotz | 0:11ad6aaed10a | 2489 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2490 | case VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT: |
| joelvonrotz | 0:11ad6aaed10a | 2491 | data = 0x03; |
| joelvonrotz | 0:11ad6aaed10a | 2492 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2493 | case VL53L0X_GPIOFUNCTIONALITY_NEW_MEASURE_READY: |
| joelvonrotz | 0:11ad6aaed10a | 2494 | data = 0x04; |
| joelvonrotz | 0:11ad6aaed10a | 2495 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2496 | default: |
| joelvonrotz | 0:11ad6aaed10a | 2497 | Status = |
| joelvonrotz | 0:11ad6aaed10a | 2498 | VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED; |
| joelvonrotz | 0:11ad6aaed10a | 2499 | } |
| joelvonrotz | 0:11ad6aaed10a | 2500 | } |
| joelvonrotz | 0:11ad6aaed10a | 2501 | |
| joelvonrotz | 0:11ad6aaed10a | 2502 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2503 | Status = VL53L0X_WrByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2504 | VL53L0X_REG_SYSTEM_INTERRUPT_CONFIG_GPIO, data); |
| joelvonrotz | 0:11ad6aaed10a | 2505 | |
| joelvonrotz | 0:11ad6aaed10a | 2506 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2507 | if (Polarity == VL53L0X_INTERRUPTPOLARITY_LOW) |
| joelvonrotz | 0:11ad6aaed10a | 2508 | data = 0; |
| joelvonrotz | 0:11ad6aaed10a | 2509 | else |
| joelvonrotz | 0:11ad6aaed10a | 2510 | data = (uint8_t)(1 << 4); |
| joelvonrotz | 0:11ad6aaed10a | 2511 | |
| joelvonrotz | 0:11ad6aaed10a | 2512 | Status = VL53L0X_UpdateByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2513 | VL53L0X_REG_GPIO_HV_MUX_ACTIVE_HIGH, 0xEF, data); |
| joelvonrotz | 0:11ad6aaed10a | 2514 | } |
| joelvonrotz | 0:11ad6aaed10a | 2515 | |
| joelvonrotz | 0:11ad6aaed10a | 2516 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2517 | VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2518 | Pin0GpioFunctionality, Functionality); |
| joelvonrotz | 0:11ad6aaed10a | 2519 | |
| joelvonrotz | 0:11ad6aaed10a | 2520 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2521 | Status = VL53L0X_ClearInterruptMask(Dev, 0); |
| joelvonrotz | 0:11ad6aaed10a | 2522 | |
| joelvonrotz | 0:11ad6aaed10a | 2523 | } |
| joelvonrotz | 0:11ad6aaed10a | 2524 | |
| joelvonrotz | 0:11ad6aaed10a | 2525 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2526 | } |
| joelvonrotz | 0:11ad6aaed10a | 2527 | |
| joelvonrotz | 0:11ad6aaed10a | 2528 | VL53L0X_Error VL53L0X_GetGpioConfig(VL53L0X_DEV Dev, uint8_t Pin, |
| joelvonrotz | 0:11ad6aaed10a | 2529 | VL53L0X_DeviceModes *pDeviceMode, |
| joelvonrotz | 0:11ad6aaed10a | 2530 | VL53L0X_GpioFunctionality *pFunctionality, |
| joelvonrotz | 0:11ad6aaed10a | 2531 | VL53L0X_InterruptPolarity *pPolarity) |
| joelvonrotz | 0:11ad6aaed10a | 2532 | { |
| joelvonrotz | 0:11ad6aaed10a | 2533 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2534 | VL53L0X_GpioFunctionality GpioFunctionality; |
| joelvonrotz | 0:11ad6aaed10a | 2535 | uint8_t data; |
| joelvonrotz | 0:11ad6aaed10a | 2536 | |
| joelvonrotz | 0:11ad6aaed10a | 2537 | |
| joelvonrotz | 0:11ad6aaed10a | 2538 | /* pDeviceMode not managed by Ewok it return the current mode */ |
| joelvonrotz | 0:11ad6aaed10a | 2539 | |
| joelvonrotz | 0:11ad6aaed10a | 2540 | Status = VL53L0X_GetDeviceMode(Dev, pDeviceMode); |
| joelvonrotz | 0:11ad6aaed10a | 2541 | |
| joelvonrotz | 0:11ad6aaed10a | 2542 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2543 | if (Pin != 0) { |
| joelvonrotz | 0:11ad6aaed10a | 2544 | Status = VL53L0X_ERROR_GPIO_NOT_EXISTING; |
| joelvonrotz | 0:11ad6aaed10a | 2545 | } else { |
| joelvonrotz | 0:11ad6aaed10a | 2546 | Status = VL53L0X_RdByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2547 | VL53L0X_REG_SYSTEM_INTERRUPT_CONFIG_GPIO, &data); |
| joelvonrotz | 0:11ad6aaed10a | 2548 | } |
| joelvonrotz | 0:11ad6aaed10a | 2549 | } |
| joelvonrotz | 0:11ad6aaed10a | 2550 | |
| joelvonrotz | 0:11ad6aaed10a | 2551 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2552 | switch (data & 0x07) { |
| joelvonrotz | 0:11ad6aaed10a | 2553 | case 0x00: |
| joelvonrotz | 0:11ad6aaed10a | 2554 | GpioFunctionality = VL53L0X_GPIOFUNCTIONALITY_OFF; |
| joelvonrotz | 0:11ad6aaed10a | 2555 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2556 | case 0x01: |
| joelvonrotz | 0:11ad6aaed10a | 2557 | GpioFunctionality = |
| joelvonrotz | 0:11ad6aaed10a | 2558 | VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_LOW; |
| joelvonrotz | 0:11ad6aaed10a | 2559 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2560 | case 0x02: |
| joelvonrotz | 0:11ad6aaed10a | 2561 | GpioFunctionality = |
| joelvonrotz | 0:11ad6aaed10a | 2562 | VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_HIGH; |
| joelvonrotz | 0:11ad6aaed10a | 2563 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2564 | case 0x03: |
| joelvonrotz | 0:11ad6aaed10a | 2565 | GpioFunctionality = |
| joelvonrotz | 0:11ad6aaed10a | 2566 | VL53L0X_GPIOFUNCTIONALITY_THRESHOLD_CROSSED_OUT; |
| joelvonrotz | 0:11ad6aaed10a | 2567 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2568 | case 0x04: |
| joelvonrotz | 0:11ad6aaed10a | 2569 | GpioFunctionality = |
| joelvonrotz | 0:11ad6aaed10a | 2570 | VL53L0X_GPIOFUNCTIONALITY_NEW_MEASURE_READY; |
| joelvonrotz | 0:11ad6aaed10a | 2571 | break; |
| joelvonrotz | 0:11ad6aaed10a | 2572 | default: |
| joelvonrotz | 0:11ad6aaed10a | 2573 | Status = VL53L0X_ERROR_GPIO_FUNCTIONALITY_NOT_SUPPORTED; |
| joelvonrotz | 0:11ad6aaed10a | 2574 | } |
| joelvonrotz | 0:11ad6aaed10a | 2575 | } |
| joelvonrotz | 0:11ad6aaed10a | 2576 | |
| joelvonrotz | 0:11ad6aaed10a | 2577 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2578 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_GPIO_HV_MUX_ACTIVE_HIGH, |
| joelvonrotz | 0:11ad6aaed10a | 2579 | &data); |
| joelvonrotz | 0:11ad6aaed10a | 2580 | |
| joelvonrotz | 0:11ad6aaed10a | 2581 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2582 | if ((data & (uint8_t)(1 << 4)) == 0) |
| joelvonrotz | 0:11ad6aaed10a | 2583 | *pPolarity = VL53L0X_INTERRUPTPOLARITY_LOW; |
| joelvonrotz | 0:11ad6aaed10a | 2584 | else |
| joelvonrotz | 0:11ad6aaed10a | 2585 | *pPolarity = VL53L0X_INTERRUPTPOLARITY_HIGH; |
| joelvonrotz | 0:11ad6aaed10a | 2586 | } |
| joelvonrotz | 0:11ad6aaed10a | 2587 | |
| joelvonrotz | 0:11ad6aaed10a | 2588 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2589 | *pFunctionality = GpioFunctionality; |
| joelvonrotz | 0:11ad6aaed10a | 2590 | VL53L0X_SETDEVICESPECIFICPARAMETER(Dev, Pin0GpioFunctionality, |
| joelvonrotz | 0:11ad6aaed10a | 2591 | GpioFunctionality); |
| joelvonrotz | 0:11ad6aaed10a | 2592 | } |
| joelvonrotz | 0:11ad6aaed10a | 2593 | |
| joelvonrotz | 0:11ad6aaed10a | 2594 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2595 | } |
| joelvonrotz | 0:11ad6aaed10a | 2596 | |
| joelvonrotz | 0:11ad6aaed10a | 2597 | VL53L0X_Error VL53L0X_SetInterruptThresholds(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2598 | VL53L0X_DeviceModes DeviceMode, FixPoint1616_t ThresholdLow, |
| joelvonrotz | 0:11ad6aaed10a | 2599 | FixPoint1616_t ThresholdHigh) |
| joelvonrotz | 0:11ad6aaed10a | 2600 | { |
| joelvonrotz | 0:11ad6aaed10a | 2601 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2602 | uint16_t Threshold16; |
| joelvonrotz | 0:11ad6aaed10a | 2603 | |
| joelvonrotz | 0:11ad6aaed10a | 2604 | /* no dependency on DeviceMode for Ewok */ |
| joelvonrotz | 0:11ad6aaed10a | 2605 | /* Need to divide by 2 because the FW will apply a x2 */ |
| joelvonrotz | 0:11ad6aaed10a | 2606 | Threshold16 = (uint16_t)((ThresholdLow >> 17) & 0x00fff); |
| joelvonrotz | 0:11ad6aaed10a | 2607 | Status = VL53L0X_WrWord(Dev, VL53L0X_REG_SYSTEM_THRESH_LOW, Threshold16); |
| joelvonrotz | 0:11ad6aaed10a | 2608 | |
| joelvonrotz | 0:11ad6aaed10a | 2609 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2610 | /* Need to divide by 2 because the FW will apply a x2 */ |
| joelvonrotz | 0:11ad6aaed10a | 2611 | Threshold16 = (uint16_t)((ThresholdHigh >> 17) & 0x00fff); |
| joelvonrotz | 0:11ad6aaed10a | 2612 | Status = VL53L0X_WrWord(Dev, VL53L0X_REG_SYSTEM_THRESH_HIGH, |
| joelvonrotz | 0:11ad6aaed10a | 2613 | Threshold16); |
| joelvonrotz | 0:11ad6aaed10a | 2614 | } |
| joelvonrotz | 0:11ad6aaed10a | 2615 | |
| joelvonrotz | 0:11ad6aaed10a | 2616 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2617 | } |
| joelvonrotz | 0:11ad6aaed10a | 2618 | |
| joelvonrotz | 0:11ad6aaed10a | 2619 | VL53L0X_Error VL53L0X_GetInterruptThresholds(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2620 | VL53L0X_DeviceModes DeviceMode, FixPoint1616_t *pThresholdLow, |
| joelvonrotz | 0:11ad6aaed10a | 2621 | FixPoint1616_t *pThresholdHigh) |
| joelvonrotz | 0:11ad6aaed10a | 2622 | { |
| joelvonrotz | 0:11ad6aaed10a | 2623 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2624 | uint16_t Threshold16; |
| joelvonrotz | 0:11ad6aaed10a | 2625 | |
| joelvonrotz | 0:11ad6aaed10a | 2626 | /* no dependency on DeviceMode for Ewok */ |
| joelvonrotz | 0:11ad6aaed10a | 2627 | |
| joelvonrotz | 0:11ad6aaed10a | 2628 | Status = VL53L0X_RdWord(Dev, VL53L0X_REG_SYSTEM_THRESH_LOW, &Threshold16); |
| joelvonrotz | 0:11ad6aaed10a | 2629 | /* Need to multiply by 2 because the FW will apply a x2 */ |
| joelvonrotz | 0:11ad6aaed10a | 2630 | *pThresholdLow = (FixPoint1616_t)((0x00fff & Threshold16) << 17); |
| joelvonrotz | 0:11ad6aaed10a | 2631 | |
| joelvonrotz | 0:11ad6aaed10a | 2632 | if (Status == VL53L0X_ERROR_NONE) { |
| joelvonrotz | 0:11ad6aaed10a | 2633 | Status = VL53L0X_RdWord(Dev, VL53L0X_REG_SYSTEM_THRESH_HIGH, |
| joelvonrotz | 0:11ad6aaed10a | 2634 | &Threshold16); |
| joelvonrotz | 0:11ad6aaed10a | 2635 | /* Need to multiply by 2 because the FW will apply a x2 */ |
| joelvonrotz | 0:11ad6aaed10a | 2636 | *pThresholdHigh = |
| joelvonrotz | 0:11ad6aaed10a | 2637 | (FixPoint1616_t)((0x00fff & Threshold16) << 17); |
| joelvonrotz | 0:11ad6aaed10a | 2638 | } |
| joelvonrotz | 0:11ad6aaed10a | 2639 | |
| joelvonrotz | 0:11ad6aaed10a | 2640 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2641 | } |
| joelvonrotz | 0:11ad6aaed10a | 2642 | |
| joelvonrotz | 0:11ad6aaed10a | 2643 | VL53L0X_Error VL53L0X_GetStopCompletedStatus(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2644 | uint32_t *pStopStatus) |
| joelvonrotz | 0:11ad6aaed10a | 2645 | { |
| joelvonrotz | 0:11ad6aaed10a | 2646 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2647 | uint8_t Byte = 0; |
| joelvonrotz | 0:11ad6aaed10a | 2648 | |
| joelvonrotz | 0:11ad6aaed10a | 2649 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2650 | |
| joelvonrotz | 0:11ad6aaed10a | 2651 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2652 | Status = VL53L0X_RdByte(Dev, 0x04, &Byte); |
| joelvonrotz | 0:11ad6aaed10a | 2653 | |
| joelvonrotz | 0:11ad6aaed10a | 2654 | if (Status == VL53L0X_ERROR_NONE) |
| joelvonrotz | 0:11ad6aaed10a | 2655 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x0); |
| joelvonrotz | 0:11ad6aaed10a | 2656 | |
| joelvonrotz | 0:11ad6aaed10a | 2657 | *pStopStatus = Byte; |
| joelvonrotz | 0:11ad6aaed10a | 2658 | |
| joelvonrotz | 0:11ad6aaed10a | 2659 | if (Byte == 0) { |
| joelvonrotz | 0:11ad6aaed10a | 2660 | Status = VL53L0X_WrByte(Dev, 0x80, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2661 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2662 | Status = VL53L0X_WrByte(Dev, 0x00, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2663 | Status = VL53L0X_WrByte(Dev, 0x91, |
| joelvonrotz | 0:11ad6aaed10a | 2664 | PALDevDataGet(Dev, StopVariable)); |
| joelvonrotz | 0:11ad6aaed10a | 2665 | Status = VL53L0X_WrByte(Dev, 0x00, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2666 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2667 | Status = VL53L0X_WrByte(Dev, 0x80, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2668 | } |
| joelvonrotz | 0:11ad6aaed10a | 2669 | |
| joelvonrotz | 0:11ad6aaed10a | 2670 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2671 | } |
| joelvonrotz | 0:11ad6aaed10a | 2672 | |
| joelvonrotz | 0:11ad6aaed10a | 2673 | /* Group PAL Interrupt Functions */ |
| joelvonrotz | 0:11ad6aaed10a | 2674 | VL53L0X_Error VL53L0X_ClearInterruptMask(VL53L0X_DEV Dev, uint32_t InterruptMask) |
| joelvonrotz | 0:11ad6aaed10a | 2675 | { |
| joelvonrotz | 0:11ad6aaed10a | 2676 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2677 | uint8_t LoopCount; |
| joelvonrotz | 0:11ad6aaed10a | 2678 | uint8_t Byte; |
| joelvonrotz | 0:11ad6aaed10a | 2679 | |
| joelvonrotz | 0:11ad6aaed10a | 2680 | /* clear bit 0 range interrupt, bit 1 error interrupt */ |
| joelvonrotz | 0:11ad6aaed10a | 2681 | LoopCount = 0; |
| joelvonrotz | 0:11ad6aaed10a | 2682 | do { |
| joelvonrotz | 0:11ad6aaed10a | 2683 | Status = VL53L0X_WrByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2684 | VL53L0X_REG_SYSTEM_INTERRUPT_CLEAR, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2685 | Status |= VL53L0X_WrByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2686 | VL53L0X_REG_SYSTEM_INTERRUPT_CLEAR, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2687 | Status |= VL53L0X_RdByte(Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2688 | VL53L0X_REG_RESULT_INTERRUPT_STATUS, &Byte); |
| joelvonrotz | 0:11ad6aaed10a | 2689 | LoopCount++; |
| joelvonrotz | 0:11ad6aaed10a | 2690 | } while (((Byte & 0x07) != 0x00) |
| joelvonrotz | 0:11ad6aaed10a | 2691 | && (LoopCount < 3) |
| joelvonrotz | 0:11ad6aaed10a | 2692 | && (Status == VL53L0X_ERROR_NONE)); |
| joelvonrotz | 0:11ad6aaed10a | 2693 | |
| joelvonrotz | 0:11ad6aaed10a | 2694 | |
| joelvonrotz | 0:11ad6aaed10a | 2695 | if (LoopCount >= 3) |
| joelvonrotz | 0:11ad6aaed10a | 2696 | Status = VL53L0X_ERROR_INTERRUPT_NOT_CLEARED; |
| joelvonrotz | 0:11ad6aaed10a | 2697 | |
| joelvonrotz | 0:11ad6aaed10a | 2698 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2699 | } |
| joelvonrotz | 0:11ad6aaed10a | 2700 | |
| joelvonrotz | 0:11ad6aaed10a | 2701 | VL53L0X_Error VL53L0X_GetInterruptMaskStatus(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2702 | uint32_t *pInterruptMaskStatus) |
| joelvonrotz | 0:11ad6aaed10a | 2703 | { |
| joelvonrotz | 0:11ad6aaed10a | 2704 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2705 | uint8_t Byte; |
| joelvonrotz | 0:11ad6aaed10a | 2706 | |
| joelvonrotz | 0:11ad6aaed10a | 2707 | Status = VL53L0X_RdByte(Dev, VL53L0X_REG_RESULT_INTERRUPT_STATUS, &Byte); |
| joelvonrotz | 0:11ad6aaed10a | 2708 | *pInterruptMaskStatus = Byte & 0x07; |
| joelvonrotz | 0:11ad6aaed10a | 2709 | |
| joelvonrotz | 0:11ad6aaed10a | 2710 | if (Byte & 0x18) |
| joelvonrotz | 0:11ad6aaed10a | 2711 | Status = VL53L0X_ERROR_RANGE_ERROR; |
| joelvonrotz | 0:11ad6aaed10a | 2712 | |
| joelvonrotz | 0:11ad6aaed10a | 2713 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2714 | } |
| joelvonrotz | 0:11ad6aaed10a | 2715 | |
| joelvonrotz | 0:11ad6aaed10a | 2716 | VL53L0X_Error VL53L0X_EnableInterruptMask(VL53L0X_DEV Dev, uint32_t InterruptMask) |
| joelvonrotz | 0:11ad6aaed10a | 2717 | { |
| joelvonrotz | 0:11ad6aaed10a | 2718 | VL53L0X_Error Status = VL53L0X_ERROR_NOT_IMPLEMENTED; |
| joelvonrotz | 0:11ad6aaed10a | 2719 | |
| joelvonrotz | 0:11ad6aaed10a | 2720 | /* not implemented for VL53L0X */ |
| joelvonrotz | 0:11ad6aaed10a | 2721 | |
| joelvonrotz | 0:11ad6aaed10a | 2722 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2723 | } |
| joelvonrotz | 0:11ad6aaed10a | 2724 | |
| joelvonrotz | 0:11ad6aaed10a | 2725 | /* End Group PAL Interrupt Functions */ |
| joelvonrotz | 0:11ad6aaed10a | 2726 | |
| joelvonrotz | 0:11ad6aaed10a | 2727 | /* Group SPAD functions */ |
| joelvonrotz | 0:11ad6aaed10a | 2728 | |
| joelvonrotz | 0:11ad6aaed10a | 2729 | VL53L0X_Error VL53L0X_SetSpadAmbientDamperThreshold(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2730 | uint16_t SpadAmbientDamperThreshold) |
| joelvonrotz | 0:11ad6aaed10a | 2731 | { |
| joelvonrotz | 0:11ad6aaed10a | 2732 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2733 | |
| joelvonrotz | 0:11ad6aaed10a | 2734 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2735 | Status |= VL53L0X_WrWord(Dev, 0x40, SpadAmbientDamperThreshold); |
| joelvonrotz | 0:11ad6aaed10a | 2736 | Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2737 | |
| joelvonrotz | 0:11ad6aaed10a | 2738 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2739 | } |
| joelvonrotz | 0:11ad6aaed10a | 2740 | |
| joelvonrotz | 0:11ad6aaed10a | 2741 | VL53L0X_Error VL53L0X_GetSpadAmbientDamperThreshold(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2742 | uint16_t *pSpadAmbientDamperThreshold) |
| joelvonrotz | 0:11ad6aaed10a | 2743 | { |
| joelvonrotz | 0:11ad6aaed10a | 2744 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2745 | |
| joelvonrotz | 0:11ad6aaed10a | 2746 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2747 | Status |= VL53L0X_RdWord(Dev, 0x40, pSpadAmbientDamperThreshold); |
| joelvonrotz | 0:11ad6aaed10a | 2748 | Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2749 | |
| joelvonrotz | 0:11ad6aaed10a | 2750 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2751 | } |
| joelvonrotz | 0:11ad6aaed10a | 2752 | |
| joelvonrotz | 0:11ad6aaed10a | 2753 | VL53L0X_Error VL53L0X_SetSpadAmbientDamperFactor(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2754 | uint16_t SpadAmbientDamperFactor) |
| joelvonrotz | 0:11ad6aaed10a | 2755 | { |
| joelvonrotz | 0:11ad6aaed10a | 2756 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2757 | uint8_t Byte; |
| joelvonrotz | 0:11ad6aaed10a | 2758 | |
| joelvonrotz | 0:11ad6aaed10a | 2759 | Byte = (uint8_t)(SpadAmbientDamperFactor & 0x00FF); |
| joelvonrotz | 0:11ad6aaed10a | 2760 | |
| joelvonrotz | 0:11ad6aaed10a | 2761 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2762 | Status |= VL53L0X_WrByte(Dev, 0x42, Byte); |
| joelvonrotz | 0:11ad6aaed10a | 2763 | Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2764 | |
| joelvonrotz | 0:11ad6aaed10a | 2765 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2766 | } |
| joelvonrotz | 0:11ad6aaed10a | 2767 | |
| joelvonrotz | 0:11ad6aaed10a | 2768 | VL53L0X_Error VL53L0X_GetSpadAmbientDamperFactor(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2769 | uint16_t *pSpadAmbientDamperFactor) |
| joelvonrotz | 0:11ad6aaed10a | 2770 | { |
| joelvonrotz | 0:11ad6aaed10a | 2771 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2772 | uint8_t Byte; |
| joelvonrotz | 0:11ad6aaed10a | 2773 | |
| joelvonrotz | 0:11ad6aaed10a | 2774 | Status = VL53L0X_WrByte(Dev, 0xFF, 0x01); |
| joelvonrotz | 0:11ad6aaed10a | 2775 | Status |= VL53L0X_RdByte(Dev, 0x42, &Byte); |
| joelvonrotz | 0:11ad6aaed10a | 2776 | Status |= VL53L0X_WrByte(Dev, 0xFF, 0x00); |
| joelvonrotz | 0:11ad6aaed10a | 2777 | *pSpadAmbientDamperFactor = (uint16_t)Byte; |
| joelvonrotz | 0:11ad6aaed10a | 2778 | |
| joelvonrotz | 0:11ad6aaed10a | 2779 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2780 | } |
| joelvonrotz | 0:11ad6aaed10a | 2781 | |
| joelvonrotz | 0:11ad6aaed10a | 2782 | /* END Group SPAD functions */ |
| joelvonrotz | 0:11ad6aaed10a | 2783 | |
| joelvonrotz | 0:11ad6aaed10a | 2784 | /***************************************************************************** |
| joelvonrotz | 0:11ad6aaed10a | 2785 | * Internal functions |
| joelvonrotz | 0:11ad6aaed10a | 2786 | *****************************************************************************/ |
| joelvonrotz | 0:11ad6aaed10a | 2787 | |
| joelvonrotz | 0:11ad6aaed10a | 2788 | VL53L0X_Error VL53L0X_SetReferenceSpads(VL53L0X_DEV Dev, uint32_t count, |
| joelvonrotz | 0:11ad6aaed10a | 2789 | uint8_t isApertureSpads) |
| joelvonrotz | 0:11ad6aaed10a | 2790 | { |
| joelvonrotz | 0:11ad6aaed10a | 2791 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2792 | |
| joelvonrotz | 0:11ad6aaed10a | 2793 | Status = VL53L0X_set_reference_spads(Dev, count, isApertureSpads); |
| joelvonrotz | 0:11ad6aaed10a | 2794 | |
| joelvonrotz | 0:11ad6aaed10a | 2795 | |
| joelvonrotz | 0:11ad6aaed10a | 2796 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2797 | } |
| joelvonrotz | 0:11ad6aaed10a | 2798 | |
| joelvonrotz | 0:11ad6aaed10a | 2799 | VL53L0X_Error VL53L0X_GetReferenceSpads(VL53L0X_DEV Dev, uint32_t *pSpadCount, |
| joelvonrotz | 0:11ad6aaed10a | 2800 | uint8_t *pIsApertureSpads) |
| joelvonrotz | 0:11ad6aaed10a | 2801 | { |
| joelvonrotz | 0:11ad6aaed10a | 2802 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2803 | |
| joelvonrotz | 0:11ad6aaed10a | 2804 | Status = VL53L0X_get_reference_spads(Dev, pSpadCount, pIsApertureSpads); |
| joelvonrotz | 0:11ad6aaed10a | 2805 | |
| joelvonrotz | 0:11ad6aaed10a | 2806 | |
| joelvonrotz | 0:11ad6aaed10a | 2807 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2808 | } |
| joelvonrotz | 0:11ad6aaed10a | 2809 | |
| joelvonrotz | 0:11ad6aaed10a | 2810 | VL53L0X_Error VL53L0X_PerformRefSpadManagement(VL53L0X_DEV Dev, |
| joelvonrotz | 0:11ad6aaed10a | 2811 | uint32_t *refSpadCount, uint8_t *isApertureSpads) |
| joelvonrotz | 0:11ad6aaed10a | 2812 | { |
| joelvonrotz | 0:11ad6aaed10a | 2813 | VL53L0X_Error Status = VL53L0X_ERROR_NONE; |
| joelvonrotz | 0:11ad6aaed10a | 2814 | |
| joelvonrotz | 0:11ad6aaed10a | 2815 | Status = VL53L0X_perform_ref_spad_management(Dev, refSpadCount, |
| joelvonrotz | 0:11ad6aaed10a | 2816 | isApertureSpads); |
| joelvonrotz | 0:11ad6aaed10a | 2817 | |
| joelvonrotz | 0:11ad6aaed10a | 2818 | |
| joelvonrotz | 0:11ad6aaed10a | 2819 | return Status; |
| joelvonrotz | 0:11ad6aaed10a | 2820 | } |