User | Revision | Line number | New contents of line |
charlesmn |
0:1da5e4bcb8e5
|
1
|
/**
|
charlesmn |
0:1da5e4bcb8e5
|
2
|
******************************************************************************
|
charlesmn |
0:1da5e4bcb8e5
|
3
|
* @file vl6180_class.cpp
|
charlesmn |
0:1da5e4bcb8e5
|
4
|
* @author JS
|
charlesmn |
0:1da5e4bcb8e5
|
5
|
* @version V0.0.1
|
charlesmn |
0:1da5e4bcb8e5
|
6
|
* @date 15-January-2019
|
charlesmn |
0:1da5e4bcb8e5
|
7
|
* @brief Implementation file for the VL53L1 sensor component driver class
|
charlesmn |
0:1da5e4bcb8e5
|
8
|
******************************************************************************
|
charlesmn |
0:1da5e4bcb8e5
|
9
|
* @attention
|
charlesmn |
0:1da5e4bcb8e5
|
10
|
*
|
charlesmn |
0:1da5e4bcb8e5
|
11
|
* <h2><center>© COPYRIGHT(c) 2018 STMicroelectronics</center></h2>
|
charlesmn |
0:1da5e4bcb8e5
|
12
|
*
|
charlesmn |
0:1da5e4bcb8e5
|
13
|
* Redistribution and use in source and binary forms, with or without modification,
|
charlesmn |
0:1da5e4bcb8e5
|
14
|
* are permitted provided that the following conditions are met:
|
charlesmn |
0:1da5e4bcb8e5
|
15
|
* 1. Redistributions of source code must retain the above copyright notice,
|
charlesmn |
0:1da5e4bcb8e5
|
16
|
* this list of conditions and the following disclaimer.
|
charlesmn |
0:1da5e4bcb8e5
|
17
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
charlesmn |
0:1da5e4bcb8e5
|
18
|
* this list of conditions and the following disclaimer in the documentation
|
charlesmn |
0:1da5e4bcb8e5
|
19
|
* and/or other materials provided with the distribution.
|
charlesmn |
0:1da5e4bcb8e5
|
20
|
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
charlesmn |
0:1da5e4bcb8e5
|
21
|
* may be used to endorse or promote products derived from this software
|
charlesmn |
0:1da5e4bcb8e5
|
22
|
* without specific prior written permission.
|
charlesmn |
0:1da5e4bcb8e5
|
23
|
*
|
charlesmn |
0:1da5e4bcb8e5
|
24
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
charlesmn |
0:1da5e4bcb8e5
|
25
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
charlesmn |
0:1da5e4bcb8e5
|
26
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
charlesmn |
0:1da5e4bcb8e5
|
27
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
charlesmn |
0:1da5e4bcb8e5
|
28
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
charlesmn |
0:1da5e4bcb8e5
|
29
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
charlesmn |
0:1da5e4bcb8e5
|
30
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
charlesmn |
0:1da5e4bcb8e5
|
31
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
charlesmn |
0:1da5e4bcb8e5
|
32
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
charlesmn |
0:1da5e4bcb8e5
|
33
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
charlesmn |
0:1da5e4bcb8e5
|
34
|
*
|
charlesmn |
0:1da5e4bcb8e5
|
35
|
******************************************************************************
|
charlesmn |
0:1da5e4bcb8e5
|
36
|
*/
|
charlesmn |
0:1da5e4bcb8e5
|
37
|
|
charlesmn |
0:1da5e4bcb8e5
|
38
|
/* Includes */
|
charlesmn |
0:1da5e4bcb8e5
|
39
|
#include <stdlib.h>
|
charlesmn |
0:1da5e4bcb8e5
|
40
|
#include "vl6180_class.h"
|
charlesmn |
0:1da5e4bcb8e5
|
41
|
#include "vl6180_i2c_fn.h"
|
charlesmn |
0:1da5e4bcb8e5
|
42
|
#include "vl6180_def.h"
|
charlesmn |
0:1da5e4bcb8e5
|
43
|
#include "vl6180_api.h"
|
charlesmn |
0:1da5e4bcb8e5
|
44
|
|
charlesmn |
0:1da5e4bcb8e5
|
45
|
|
charlesmn |
0:1da5e4bcb8e5
|
46
|
#define ALGO__PART_TO_PART_RANGE_OFFSET_MM 0x001E
|
charlesmn |
0:1da5e4bcb8e5
|
47
|
#define MM_CONFIG__INNER_OFFSET_MM 0x0020
|
charlesmn |
0:1da5e4bcb8e5
|
48
|
#define MM_CONFIG__OUTER_OFFSET_MM 0x0022
|
charlesmn |
0:1da5e4bcb8e5
|
49
|
|
charlesmn |
0:1da5e4bcb8e5
|
50
|
//#include "vl53l1x_configuration.h"
|
charlesmn |
0:1da5e4bcb8e5
|
51
|
|
charlesmn |
0:1da5e4bcb8e5
|
52
|
|
charlesmn |
0:1da5e4bcb8e5
|
53
|
#ifndef MIN
|
charlesmn |
0:1da5e4bcb8e5
|
54
|
#define MIN(v1, v2) ((v1) < (v2) ? (v1) : (v2))
|
charlesmn |
0:1da5e4bcb8e5
|
55
|
#endif
|
charlesmn |
0:1da5e4bcb8e5
|
56
|
#ifndef MAX
|
charlesmn |
0:1da5e4bcb8e5
|
57
|
#define MAX(v1, v2) ((v1) < (v2) ? (v2) : (v1))
|
charlesmn |
0:1da5e4bcb8e5
|
58
|
#endif
|
charlesmn |
0:1da5e4bcb8e5
|
59
|
|
charlesmn |
0:1da5e4bcb8e5
|
60
|
#define DMAX_REFLECTANCE_IDX 2
|
charlesmn |
0:1da5e4bcb8e5
|
61
|
|
charlesmn |
0:1da5e4bcb8e5
|
62
|
#define LOWPOWER_AUTO_VHV_LOOP_DURATION_US 245
|
charlesmn |
0:1da5e4bcb8e5
|
63
|
#define LOWPOWER_AUTO_OVERHEAD_BEFORE_A_RANGING 1448
|
charlesmn |
0:1da5e4bcb8e5
|
64
|
#define LOWPOWER_AUTO_OVERHEAD_BETWEEN_A_B_RANGING 2100
|
charlesmn |
0:1da5e4bcb8e5
|
65
|
|
charlesmn |
0:1da5e4bcb8e5
|
66
|
#define FDA_MAX_TIMING_BUDGET_US 550000
|
charlesmn |
0:1da5e4bcb8e5
|
67
|
|
charlesmn |
0:1da5e4bcb8e5
|
68
|
#define VL53L1DevStructGetLLDriverHandle(Dev) (&Dev->Data.LLData)
|
charlesmn |
0:1da5e4bcb8e5
|
69
|
|
charlesmn |
0:1da5e4bcb8e5
|
70
|
|
charlesmn |
0:1da5e4bcb8e5
|
71
|
VL6180_ERROR VL6180::vl6180_GetSWVersion(VL6180_Version_t *pVersion)
|
charlesmn |
0:1da5e4bcb8e5
|
72
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
73
|
VL6180_ERROR Status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
74
|
|
charlesmn |
0:1da5e4bcb8e5
|
75
|
pVersion->major = VL53L1X_IMPLEMENTATION_VER_MAJOR;
|
charlesmn |
0:1da5e4bcb8e5
|
76
|
pVersion->minor = VL53L1X_IMPLEMENTATION_VER_MINOR;
|
charlesmn |
0:1da5e4bcb8e5
|
77
|
pVersion->build = VL53L1X_IMPLEMENTATION_VER_SUB;
|
charlesmn |
0:1da5e4bcb8e5
|
78
|
pVersion->revision = VL53L1X_IMPLEMENTATION_VER_REVISION;
|
charlesmn |
0:1da5e4bcb8e5
|
79
|
return Status;
|
charlesmn |
0:1da5e4bcb8e5
|
80
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
81
|
|
charlesmn |
0:1da5e4bcb8e5
|
82
|
VL6180_ERROR VL6180::vl6180_SetI2CAddress(uint8_t new_address)
|
charlesmn |
0:1da5e4bcb8e5
|
83
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
84
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
85
|
|
charlesmn |
0:1da5e4bcb8e5
|
86
|
// Device.i2c_addr = new_address;
|
charlesmn |
0:1da5e4bcb8e5
|
87
|
|
charlesmn |
0:1da5e4bcb8e5
|
88
|
if ( Device.i2c_addr != new_address)
|
charlesmn |
0:1da5e4bcb8e5
|
89
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
90
|
|
charlesmn |
0:1da5e4bcb8e5
|
91
|
status = VL6180_SetI2CAddress (&Device,new_address);
|
charlesmn |
0:1da5e4bcb8e5
|
92
|
printf("VL53L1X_SetI2CAddress %d to %d \n", Device.i2c_addr,new_address);
|
charlesmn |
0:1da5e4bcb8e5
|
93
|
Device.i2c_addr = new_address;
|
charlesmn |
0:1da5e4bcb8e5
|
94
|
|
charlesmn |
0:1da5e4bcb8e5
|
95
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
96
|
printf("Sensor right VL53L1X_SetI2CAddress end\n\r");
|
charlesmn |
0:1da5e4bcb8e5
|
97
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
98
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
99
|
|
charlesmn |
0:1da5e4bcb8e5
|
100
|
int VL6180::init_sensor(uint8_t new_addr)
|
charlesmn |
0:1da5e4bcb8e5
|
101
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
102
|
Device.i2c_addr = new_addr;
|
charlesmn |
0:1da5e4bcb8e5
|
103
|
int status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
104
|
VL53L1_Off();
|
charlesmn |
0:1da5e4bcb8e5
|
105
|
VL53L1_On();
|
charlesmn |
0:1da5e4bcb8e5
|
106
|
|
charlesmn |
0:1da5e4bcb8e5
|
107
|
status = is_present();
|
charlesmn |
0:1da5e4bcb8e5
|
108
|
if (!status) {
|
charlesmn |
0:1da5e4bcb8e5
|
109
|
printf("Failed to init VL53L0X sensor!\n\r");
|
charlesmn |
0:1da5e4bcb8e5
|
110
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
111
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
112
|
printf("init_sensor %d \n",status);
|
charlesmn |
0:1da5e4bcb8e5
|
113
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
114
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
115
|
|
charlesmn |
0:1da5e4bcb8e5
|
116
|
|
charlesmn |
0:1da5e4bcb8e5
|
117
|
VL6180_ERROR VL6180::vl6180_ClearInterrupt()
|
charlesmn |
0:1da5e4bcb8e5
|
118
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
119
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
120
|
|
charlesmn |
0:1da5e4bcb8e5
|
121
|
//status = VL53L1_WrByte(Device, SYSTEM__INTERRUPT_CLEAR, 0x01);
|
charlesmn |
0:1da5e4bcb8e5
|
122
|
status = VL6180_ClearInterrupt(&Device, INTERRUPT_CLEAR_ERROR|INTERRUPT_CLEAR_RANGING);
|
charlesmn |
0:1da5e4bcb8e5
|
123
|
printf("VL6180::VL53L1X_ClearInterrupt()\n");
|
charlesmn |
0:1da5e4bcb8e5
|
124
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
125
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
126
|
|
charlesmn |
0:1da5e4bcb8e5
|
127
|
|
charlesmn |
0:1da5e4bcb8e5
|
128
|
VL6180_ERROR VL6180::vl6180_WaitDeviceBooted(VL6180Dev_t dev)
|
charlesmn |
0:1da5e4bcb8e5
|
129
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
130
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
131
|
status = VL6180_WaitDeviceBooted(dev);
|
charlesmn |
0:1da5e4bcb8e5
|
132
|
|
charlesmn |
0:1da5e4bcb8e5
|
133
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
134
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
135
|
|
charlesmn |
0:1da5e4bcb8e5
|
136
|
VL6180_ERROR VL6180::vl6180_InitData(VL6180Dev_t dev)
|
charlesmn |
0:1da5e4bcb8e5
|
137
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
138
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
139
|
status = VL6180_InitData(dev);
|
charlesmn |
0:1da5e4bcb8e5
|
140
|
|
charlesmn |
0:1da5e4bcb8e5
|
141
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
142
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
143
|
|
charlesmn |
0:1da5e4bcb8e5
|
144
|
|
charlesmn |
0:1da5e4bcb8e5
|
145
|
VL6180_ERROR VL6180::vl6180_DMaxSetState(VL6180Dev_t dev, int state)
|
charlesmn |
0:1da5e4bcb8e5
|
146
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
147
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
148
|
status = VL6180_DMaxSetState(dev,state);
|
charlesmn |
0:1da5e4bcb8e5
|
149
|
|
charlesmn |
0:1da5e4bcb8e5
|
150
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
151
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
152
|
|
charlesmn |
0:1da5e4bcb8e5
|
153
|
VL6180_ERROR VL6180::vl6180_UpscaleGetScaling(VL6180Dev_t dev)
|
charlesmn |
0:1da5e4bcb8e5
|
154
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
155
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
156
|
status = VL6180_UpscaleGetScaling(dev);
|
charlesmn |
0:1da5e4bcb8e5
|
157
|
|
charlesmn |
0:1da5e4bcb8e5
|
158
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
159
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
160
|
|
charlesmn |
0:1da5e4bcb8e5
|
161
|
VL6180_ERROR VL6180::vl6180_FilterGetState(VL6180Dev_t dev)
|
charlesmn |
0:1da5e4bcb8e5
|
162
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
163
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
164
|
status = VL6180_FilterGetState(dev);
|
charlesmn |
0:1da5e4bcb8e5
|
165
|
|
charlesmn |
0:1da5e4bcb8e5
|
166
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
167
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
168
|
|
charlesmn |
0:1da5e4bcb8e5
|
169
|
|
charlesmn |
0:1da5e4bcb8e5
|
170
|
|
charlesmn |
0:1da5e4bcb8e5
|
171
|
// required?
|
charlesmn |
0:1da5e4bcb8e5
|
172
|
VL6180_ERROR VL6180::vl6180_SetInterruptPolarity(uint8_t NewPolarity)
|
charlesmn |
0:1da5e4bcb8e5
|
173
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
174
|
// uint8_t Temp;
|
charlesmn |
0:1da5e4bcb8e5
|
175
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
176
|
|
charlesmn |
0:1da5e4bcb8e5
|
177
|
// status = VL53L1_RdByte(Device, GPIO_HV_MUX__CTRL, &Temp);
|
charlesmn |
0:1da5e4bcb8e5
|
178
|
// Temp = Temp & 0xEF;
|
charlesmn |
0:1da5e4bcb8e5
|
179
|
// status = VL53L1_WrByte(Device, GPIO_HV_MUX__CTRL, Temp | (!(NewPolarity & 1)) << 4);
|
charlesmn |
0:1da5e4bcb8e5
|
180
|
|
charlesmn |
0:1da5e4bcb8e5
|
181
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
182
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
183
|
|
charlesmn |
0:1da5e4bcb8e5
|
184
|
VL6180_ERROR VL6180::vl6180_Prepare(VL6180Dev_t dev)
|
charlesmn |
0:1da5e4bcb8e5
|
185
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
186
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
187
|
status = VL6180_Prepare(dev);
|
charlesmn |
0:1da5e4bcb8e5
|
188
|
|
charlesmn |
0:1da5e4bcb8e5
|
189
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
190
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
191
|
|
charlesmn |
0:1da5e4bcb8e5
|
192
|
VL6180_ERROR VL6180::vl6180_RangePollMeasurement(VL6180Dev_t dev, VL6180_RangeData_t *pRangeData)
|
charlesmn |
0:1da5e4bcb8e5
|
193
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
194
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
195
|
status = VL6180_RangePollMeasurement(dev,pRangeData);
|
charlesmn |
0:1da5e4bcb8e5
|
196
|
|
charlesmn |
0:1da5e4bcb8e5
|
197
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
198
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
199
|
|
charlesmn |
0:1da5e4bcb8e5
|
200
|
/*
|
charlesmn |
0:1da5e4bcb8e5
|
201
|
VL6180_ERROR VL6180::VL6180x_AlsPollMeasurement(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData)
|
charlesmn |
0:1da5e4bcb8e5
|
202
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
203
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
204
|
status = VL6180x_AlsPollMeasurement(dev,pAlsData);
|
charlesmn |
0:1da5e4bcb8e5
|
205
|
|
charlesmn |
0:1da5e4bcb8e5
|
206
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
207
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
208
|
*/
|
charlesmn |
0:1da5e4bcb8e5
|
209
|
|
charlesmn |
0:1da5e4bcb8e5
|
210
|
|
charlesmn |
0:1da5e4bcb8e5
|
211
|
VL6180_ERROR VL6180::vl6180_GetInterruptPolarity(uint8_t *pInterruptPolarity)
|
charlesmn |
0:1da5e4bcb8e5
|
212
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
213
|
uint8_t Temp;
|
charlesmn |
0:1da5e4bcb8e5
|
214
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
215
|
|
charlesmn |
0:1da5e4bcb8e5
|
216
|
status = VL6180_RdByte(&Device, GPIO_HV_MUX__CTRL, &Temp);
|
charlesmn |
0:1da5e4bcb8e5
|
217
|
Temp = Temp & 0x10;
|
charlesmn |
0:1da5e4bcb8e5
|
218
|
*pInterruptPolarity = !(Temp>>4);
|
charlesmn |
0:1da5e4bcb8e5
|
219
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
220
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
221
|
|
charlesmn |
0:1da5e4bcb8e5
|
222
|
VL6180_ERROR VL6180::VL6180_I2CWrite(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t* pBuffer, uint16_t NumByteToWrite)
|
charlesmn |
0:1da5e4bcb8e5
|
223
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
224
|
int ret;
|
charlesmn |
0:1da5e4bcb8e5
|
225
|
ret = dev_i2c->vl6180_i2c_write(pBuffer, DeviceAddr, RegisterAddr, NumByteToWrite);
|
charlesmn |
0:1da5e4bcb8e5
|
226
|
if (ret) {
|
charlesmn |
0:1da5e4bcb8e5
|
227
|
return -1;
|
charlesmn |
0:1da5e4bcb8e5
|
228
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
229
|
return 0;
|
charlesmn |
0:1da5e4bcb8e5
|
230
|
|
charlesmn |
0:1da5e4bcb8e5
|
231
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
232
|
|
charlesmn |
0:1da5e4bcb8e5
|
233
|
VL6180_ERROR VL6180::VL6180_I2CRead(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t* pBuffer, uint16_t NumByteToRead)
|
charlesmn |
0:1da5e4bcb8e5
|
234
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
235
|
int ret;
|
charlesmn |
0:1da5e4bcb8e5
|
236
|
|
charlesmn |
0:1da5e4bcb8e5
|
237
|
ret = dev_i2c->vl6180_i2c_read(pBuffer, DeviceAddr, RegisterAddr, NumByteToRead);
|
charlesmn |
0:1da5e4bcb8e5
|
238
|
//ret = dev_i2c->i2c_read(pBuffer, DeviceAddr, RegisterAddr, NumByteToRead);
|
charlesmn |
0:1da5e4bcb8e5
|
239
|
if (ret) {
|
charlesmn |
0:1da5e4bcb8e5
|
240
|
return -1;
|
charlesmn |
0:1da5e4bcb8e5
|
241
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
242
|
return 0;
|
charlesmn |
0:1da5e4bcb8e5
|
243
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
244
|
|
charlesmn |
0:1da5e4bcb8e5
|
245
|
VL6180_ERROR VL6180::vl6180_RangeStartContinuousMode(VL6180Dev_t dev)
|
charlesmn |
0:1da5e4bcb8e5
|
246
|
|
charlesmn |
0:1da5e4bcb8e5
|
247
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
248
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
249
|
status = VL6180_RangeStartContinuousMode(dev);
|
charlesmn |
0:1da5e4bcb8e5
|
250
|
|
charlesmn |
0:1da5e4bcb8e5
|
251
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
252
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
253
|
|
charlesmn |
0:1da5e4bcb8e5
|
254
|
|
charlesmn |
0:1da5e4bcb8e5
|
255
|
VL6180_ERROR VL6180::vl6180_RangeStartSingleShot(VL6180Dev_t dev)
|
charlesmn |
0:1da5e4bcb8e5
|
256
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
257
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
258
|
status = VL6180_RangeStartSingleShot(dev);
|
charlesmn |
0:1da5e4bcb8e5
|
259
|
|
charlesmn |
0:1da5e4bcb8e5
|
260
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
261
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
262
|
|
charlesmn |
0:1da5e4bcb8e5
|
263
|
|
charlesmn |
0:1da5e4bcb8e5
|
264
|
VL6180_ERROR VL6180::vl6180_RangeSetInterMeasPeriod(VL6180Dev_t dev, uint32_t InterMeasTime_msec)
|
charlesmn |
0:1da5e4bcb8e5
|
265
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
266
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
267
|
status = VL6180_RangeSetInterMeasPeriod(dev,InterMeasTime_msec);
|
charlesmn |
0:1da5e4bcb8e5
|
268
|
|
charlesmn |
0:1da5e4bcb8e5
|
269
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
270
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
271
|
|
charlesmn |
0:1da5e4bcb8e5
|
272
|
VL6180_ERROR VL6180::vl6180_RangeGetMeasurement(VL6180Dev_t dev, VL6180_RangeData_t *pRangeData)
|
charlesmn |
0:1da5e4bcb8e5
|
273
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
274
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
275
|
status = VL6180_RangeGetMeasurement(dev,pRangeData);
|
charlesmn |
0:1da5e4bcb8e5
|
276
|
|
charlesmn |
0:1da5e4bcb8e5
|
277
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
278
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
279
|
|
charlesmn |
0:1da5e4bcb8e5
|
280
|
|
charlesmn |
0:1da5e4bcb8e5
|
281
|
VL6180_ERROR VL6180::vl6180_RangeGetMeasurementIfReady(VL6180Dev_t dev, VL6180_RangeData_t *pRangeData)
|
charlesmn |
0:1da5e4bcb8e5
|
282
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
283
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
284
|
status = VL6180_RangeGetMeasurementIfReady(dev,pRangeData);
|
charlesmn |
0:1da5e4bcb8e5
|
285
|
|
charlesmn |
0:1da5e4bcb8e5
|
286
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
287
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
288
|
|
charlesmn |
0:1da5e4bcb8e5
|
289
|
VL6180_ERROR VL6180::vl6180_SetupGPIO1(VL6180Dev_t dev, uint8_t IntFunction, int ActiveHigh)
|
charlesmn |
0:1da5e4bcb8e5
|
290
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
291
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
292
|
status = VL6180_SetupGPIO1(dev,IntFunction,ActiveHigh);
|
charlesmn |
0:1da5e4bcb8e5
|
293
|
|
charlesmn |
0:1da5e4bcb8e5
|
294
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
295
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
296
|
|
charlesmn |
0:1da5e4bcb8e5
|
297
|
|
charlesmn |
0:1da5e4bcb8e5
|
298
|
VL6180_ERROR VL6180::vl6180_RangeConfigInterrupt(VL6180Dev_t dev, uint8_t ConfigGpioInt)
|
charlesmn |
0:1da5e4bcb8e5
|
299
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
300
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
301
|
status = VL6180_RangeConfigInterrupt(dev,ConfigGpioInt);
|
charlesmn |
0:1da5e4bcb8e5
|
302
|
|
charlesmn |
0:1da5e4bcb8e5
|
303
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
304
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
305
|
|
charlesmn |
0:1da5e4bcb8e5
|
306
|
VL6180_ERROR VL6180::vl6180_ClearInterrupt(VL6180Dev_t dev, uint8_t IntClear)
|
charlesmn |
0:1da5e4bcb8e5
|
307
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
308
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
309
|
status = VL6180_ClearInterrupt(dev,IntClear);
|
charlesmn |
0:1da5e4bcb8e5
|
310
|
|
charlesmn |
0:1da5e4bcb8e5
|
311
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
312
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
313
|
|
charlesmn |
0:1da5e4bcb8e5
|
314
|
|
charlesmn |
0:1da5e4bcb8e5
|
315
|
VL6180_ERROR VL6180::vl6180_RangeSetThresholds(VL6180Dev_t dev, uint16_t low, uint16_t high, int UseSafeParamHold)
|
charlesmn |
0:1da5e4bcb8e5
|
316
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
317
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
318
|
status = VL6180_RangeSetThresholds(dev,low,high,UseSafeParamHold);
|
charlesmn |
0:1da5e4bcb8e5
|
319
|
|
charlesmn |
0:1da5e4bcb8e5
|
320
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
321
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
322
|
|
charlesmn |
0:1da5e4bcb8e5
|
323
|
VL6180_ERROR VL6180::vl6180_FilterSetState(VL6180Dev_t dev, int state)
|
charlesmn |
0:1da5e4bcb8e5
|
324
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
325
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
326
|
status = VL6180_FilterSetState(dev,state);
|
charlesmn |
0:1da5e4bcb8e5
|
327
|
|
charlesmn |
0:1da5e4bcb8e5
|
328
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
329
|
}
|
charlesmn |
0:1da5e4bcb8e5
|
330
|
|
charlesmn |
0:1da5e4bcb8e5
|
331
|
VL6180_ERROR VL6180::vl6180_UpscaleSetScaling(VL6180Dev_t dev, uint8_t scaling)
|
charlesmn |
0:1da5e4bcb8e5
|
332
|
{
|
charlesmn |
0:1da5e4bcb8e5
|
333
|
VL6180_ERROR status = 0;
|
charlesmn |
0:1da5e4bcb8e5
|
334
|
status = VL6180_UpscaleSetScaling(dev,scaling);
|
charlesmn |
0:1da5e4bcb8e5
|
335
|
|
charlesmn |
0:1da5e4bcb8e5
|
336
|
return status;
|
charlesmn |
0:1da5e4bcb8e5
|
337
|
}
|