User | Revision | Line number | New contents of line |
mjarvisal |
0:e6fcdb78a136
|
1
|
/*******************************************************************************
|
mjarvisal |
0:e6fcdb78a136
|
2
|
Copyright � 2015, STMicroelectronics International N.V.
|
mjarvisal |
0:e6fcdb78a136
|
3
|
All rights reserved.
|
mjarvisal |
0:e6fcdb78a136
|
4
|
|
mjarvisal |
0:e6fcdb78a136
|
5
|
Redistribution and use in source and binary forms, with or without
|
mjarvisal |
0:e6fcdb78a136
|
6
|
modification, are permitted provided that the following conditions are met:
|
mjarvisal |
0:e6fcdb78a136
|
7
|
* Redistributions of source code must retain the above copyright
|
mjarvisal |
0:e6fcdb78a136
|
8
|
notice, this list of conditions and the following disclaimer.
|
mjarvisal |
0:e6fcdb78a136
|
9
|
* Redistributions in binary form must reproduce the above copyright
|
mjarvisal |
0:e6fcdb78a136
|
10
|
notice, this list of conditions and the following disclaimer in the
|
mjarvisal |
0:e6fcdb78a136
|
11
|
documentation and/or other materials provided with the distribution.
|
mjarvisal |
0:e6fcdb78a136
|
12
|
* Neither the name of STMicroelectronics nor the
|
mjarvisal |
0:e6fcdb78a136
|
13
|
names of its contributors may be used to endorse or promote products
|
mjarvisal |
0:e6fcdb78a136
|
14
|
derived from this software without specific prior written permission.
|
mjarvisal |
0:e6fcdb78a136
|
15
|
|
mjarvisal |
0:e6fcdb78a136
|
16
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
mjarvisal |
0:e6fcdb78a136
|
17
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
mjarvisal |
0:e6fcdb78a136
|
18
|
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
|
mjarvisal |
0:e6fcdb78a136
|
19
|
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
|
mjarvisal |
0:e6fcdb78a136
|
20
|
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY
|
mjarvisal |
0:e6fcdb78a136
|
21
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
mjarvisal |
0:e6fcdb78a136
|
22
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
mjarvisal |
0:e6fcdb78a136
|
23
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
mjarvisal |
0:e6fcdb78a136
|
24
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
mjarvisal |
0:e6fcdb78a136
|
25
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
mjarvisal |
0:e6fcdb78a136
|
26
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
mjarvisal |
0:e6fcdb78a136
|
27
|
********************************************************************************/
|
mjarvisal |
0:e6fcdb78a136
|
28
|
|
mjarvisal |
0:e6fcdb78a136
|
29
|
/**
|
mjarvisal |
0:e6fcdb78a136
|
30
|
* @file VL53L0X_i2c.c
|
mjarvisal |
0:e6fcdb78a136
|
31
|
*
|
mjarvisal |
0:e6fcdb78a136
|
32
|
* Copyright (C) 2014 ST MicroElectronics
|
mjarvisal |
0:e6fcdb78a136
|
33
|
*
|
mjarvisal |
0:e6fcdb78a136
|
34
|
* provide variable word size byte/Word/dword VL6180x register access via i2c
|
mjarvisal |
0:e6fcdb78a136
|
35
|
*
|
mjarvisal |
0:e6fcdb78a136
|
36
|
*/
|
mjarvisal |
0:e6fcdb78a136
|
37
|
|
mjarvisal |
0:e6fcdb78a136
|
38
|
#include "vl53l0x_platform.h"
|
mjarvisal |
0:e6fcdb78a136
|
39
|
#include "vl53l0x_i2c_platform.h"
|
mjarvisal |
0:e6fcdb78a136
|
40
|
#include "vl53l0x_api.h"
|
mjarvisal |
0:e6fcdb78a136
|
41
|
|
mjarvisal |
0:e6fcdb78a136
|
42
|
#define LOG_FUNCTION_START(fmt, ... ) _LOG_FUNCTION_START(TRACE_MODULE_PLATFORM, fmt, ##__VA_ARGS__)
|
mjarvisal |
0:e6fcdb78a136
|
43
|
#define LOG_FUNCTION_END(status, ... ) _LOG_FUNCTION_END(TRACE_MODULE_PLATFORM, status, ##__VA_ARGS__)
|
mjarvisal |
0:e6fcdb78a136
|
44
|
#define LOG_FUNCTION_END_FMT(status, fmt, ... ) _LOG_FUNCTION_END_FMT(TRACE_MODULE_PLATFORM, status, fmt, ##__VA_ARGS__)
|
mjarvisal |
0:e6fcdb78a136
|
45
|
|
mjarvisal |
0:e6fcdb78a136
|
46
|
/**
|
mjarvisal |
0:e6fcdb78a136
|
47
|
* @def I2C_BUFFER_CONFIG
|
mjarvisal |
0:e6fcdb78a136
|
48
|
*
|
mjarvisal |
0:e6fcdb78a136
|
49
|
* @brief Configure Device register I2C access
|
mjarvisal |
0:e6fcdb78a136
|
50
|
*
|
mjarvisal |
0:e6fcdb78a136
|
51
|
* @li 0 : one GLOBAL buffer \n
|
mjarvisal |
0:e6fcdb78a136
|
52
|
* Use one global buffer of MAX_I2C_XFER_SIZE byte in data space \n
|
mjarvisal |
0:e6fcdb78a136
|
53
|
* This solution is not multi-Device compliant nor multi-thread cpu safe \n
|
mjarvisal |
0:e6fcdb78a136
|
54
|
* It can be the best option for small 8/16 bit MCU without stack and limited ram (STM8s, 80C51 ...)
|
mjarvisal |
0:e6fcdb78a136
|
55
|
*
|
mjarvisal |
0:e6fcdb78a136
|
56
|
* @li 1 : ON_STACK/local \n
|
mjarvisal |
0:e6fcdb78a136
|
57
|
* Use local variable (on stack) buffer \n
|
mjarvisal |
0:e6fcdb78a136
|
58
|
* This solution is multi-thread with use of i2c resource lock or mutex see VL6180x_GetI2CAccess() \n
|
mjarvisal |
0:e6fcdb78a136
|
59
|
*
|
mjarvisal |
0:e6fcdb78a136
|
60
|
* @li 2 : User defined \n
|
mjarvisal |
0:e6fcdb78a136
|
61
|
* Per Device potentially dynamic allocated. Requires VL6180x_GetI2cBuffer() to be implemented.
|
mjarvisal |
0:e6fcdb78a136
|
62
|
* @ingroup Configuration
|
mjarvisal |
0:e6fcdb78a136
|
63
|
*/
|
mjarvisal |
0:e6fcdb78a136
|
64
|
#define I2C_BUFFER_CONFIG 1
|
mjarvisal |
0:e6fcdb78a136
|
65
|
/** Maximum buffer size to be used in i2c */
|
mjarvisal |
0:e6fcdb78a136
|
66
|
#define VL53L0X_MAX_I2C_XFER_SIZE 64 /* Maximum buffer size to be used in i2c */
|
mjarvisal |
0:e6fcdb78a136
|
67
|
|
mjarvisal |
0:e6fcdb78a136
|
68
|
#if I2C_BUFFER_CONFIG == 0
|
mjarvisal |
0:e6fcdb78a136
|
69
|
/* GLOBAL config buffer */
|
mjarvisal |
0:e6fcdb78a136
|
70
|
uint8_t i2c_global_buffer[VL53L0X_MAX_I2C_XFER_SIZE];
|
mjarvisal |
0:e6fcdb78a136
|
71
|
|
mjarvisal |
0:e6fcdb78a136
|
72
|
#define DECL_I2C_BUFFER
|
mjarvisal |
0:e6fcdb78a136
|
73
|
#define VL53L0X_GetLocalBuffer(Dev, n_byte) i2c_global_buffer
|
mjarvisal |
0:e6fcdb78a136
|
74
|
|
mjarvisal |
0:e6fcdb78a136
|
75
|
#elif I2C_BUFFER_CONFIG == 1
|
mjarvisal |
0:e6fcdb78a136
|
76
|
/* ON STACK */
|
mjarvisal |
0:e6fcdb78a136
|
77
|
#define DECL_I2C_BUFFER uint8_t LocBuffer[VL53L0X_MAX_I2C_XFER_SIZE];
|
mjarvisal |
0:e6fcdb78a136
|
78
|
#define VL53L0X_GetLocalBuffer(Dev, n_byte) LocBuffer
|
mjarvisal |
0:e6fcdb78a136
|
79
|
#elif I2C_BUFFER_CONFIG == 2
|
mjarvisal |
0:e6fcdb78a136
|
80
|
/* user define buffer type declare DECL_I2C_BUFFER as access via VL53L0X_GetLocalBuffer */
|
mjarvisal |
0:e6fcdb78a136
|
81
|
#define DECL_I2C_BUFFER
|
mjarvisal |
0:e6fcdb78a136
|
82
|
#else
|
mjarvisal |
0:e6fcdb78a136
|
83
|
#error "invalid I2C_BUFFER_CONFIG "
|
mjarvisal |
0:e6fcdb78a136
|
84
|
#endif
|
mjarvisal |
0:e6fcdb78a136
|
85
|
|
mjarvisal |
0:e6fcdb78a136
|
86
|
|
mjarvisal |
0:e6fcdb78a136
|
87
|
#define VL53L0X_I2C_USER_VAR /* none but could be for a flag var to get/pass to mutex interruptible return flags and try again */
|
mjarvisal |
0:e6fcdb78a136
|
88
|
#define VL53L0X_GetI2CAccess(Dev) /* todo mutex acquire */
|
mjarvisal |
0:e6fcdb78a136
|
89
|
#define VL53L0X_DoneI2CAcces(Dev) /* todo mutex release */
|
mjarvisal |
0:e6fcdb78a136
|
90
|
|
mjarvisal |
0:e6fcdb78a136
|
91
|
VL53L0X_Error VL53L0X_LockSequenceAccess(VL53L0X_DEV Dev){
|
mjarvisal |
0:e6fcdb78a136
|
92
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
93
|
|
mjarvisal |
0:e6fcdb78a136
|
94
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
95
|
}
|
mjarvisal |
0:e6fcdb78a136
|
96
|
|
mjarvisal |
0:e6fcdb78a136
|
97
|
VL53L0X_Error VL53L0X_UnlockSequenceAccess(VL53L0X_DEV Dev){
|
mjarvisal |
0:e6fcdb78a136
|
98
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
99
|
|
mjarvisal |
0:e6fcdb78a136
|
100
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
101
|
}
|
mjarvisal |
0:e6fcdb78a136
|
102
|
|
mjarvisal |
0:e6fcdb78a136
|
103
|
// the ranging_sensor_comms.dll will take care of the page selection
|
mjarvisal |
0:e6fcdb78a136
|
104
|
VL53L0X_Error VL53L0X_WriteMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata, uint32_t count){
|
mjarvisal |
0:e6fcdb78a136
|
105
|
|
mjarvisal |
0:e6fcdb78a136
|
106
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
107
|
int32_t status_int = 0;
|
mjarvisal |
0:e6fcdb78a136
|
108
|
uint8_t deviceAddress;
|
mjarvisal |
0:e6fcdb78a136
|
109
|
|
mjarvisal |
0:e6fcdb78a136
|
110
|
if (count>=VL53L0X_MAX_I2C_XFER_SIZE){
|
mjarvisal |
0:e6fcdb78a136
|
111
|
Status = VL53L0X_ERROR_INVALID_PARAMS;
|
mjarvisal |
0:e6fcdb78a136
|
112
|
}
|
mjarvisal |
0:e6fcdb78a136
|
113
|
|
mjarvisal |
0:e6fcdb78a136
|
114
|
deviceAddress = Dev->I2cDevAddr;
|
mjarvisal |
0:e6fcdb78a136
|
115
|
|
mjarvisal |
0:e6fcdb78a136
|
116
|
status_int = VL53L0X_write_multi(deviceAddress, index, pdata, count);
|
mjarvisal |
0:e6fcdb78a136
|
117
|
|
mjarvisal |
0:e6fcdb78a136
|
118
|
if (status_int != 0)
|
mjarvisal |
0:e6fcdb78a136
|
119
|
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
mjarvisal |
0:e6fcdb78a136
|
120
|
|
mjarvisal |
0:e6fcdb78a136
|
121
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
122
|
}
|
mjarvisal |
0:e6fcdb78a136
|
123
|
|
mjarvisal |
0:e6fcdb78a136
|
124
|
// the ranging_sensor_comms.dll will take care of the page selection
|
mjarvisal |
0:e6fcdb78a136
|
125
|
VL53L0X_Error VL53L0X_ReadMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata, uint32_t count){
|
mjarvisal |
0:e6fcdb78a136
|
126
|
VL53L0X_I2C_USER_VAR
|
mjarvisal |
0:e6fcdb78a136
|
127
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
128
|
int32_t status_int;
|
mjarvisal |
0:e6fcdb78a136
|
129
|
uint8_t deviceAddress;
|
mjarvisal |
0:e6fcdb78a136
|
130
|
|
mjarvisal |
0:e6fcdb78a136
|
131
|
if (count>=VL53L0X_MAX_I2C_XFER_SIZE){
|
mjarvisal |
0:e6fcdb78a136
|
132
|
Status = VL53L0X_ERROR_INVALID_PARAMS;
|
mjarvisal |
0:e6fcdb78a136
|
133
|
}
|
mjarvisal |
0:e6fcdb78a136
|
134
|
|
mjarvisal |
0:e6fcdb78a136
|
135
|
deviceAddress = Dev->I2cDevAddr;
|
mjarvisal |
0:e6fcdb78a136
|
136
|
|
mjarvisal |
0:e6fcdb78a136
|
137
|
status_int = VL53L0X_read_multi(deviceAddress, index, pdata, count);
|
mjarvisal |
0:e6fcdb78a136
|
138
|
|
mjarvisal |
0:e6fcdb78a136
|
139
|
if (status_int != 0)
|
mjarvisal |
0:e6fcdb78a136
|
140
|
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
mjarvisal |
0:e6fcdb78a136
|
141
|
|
mjarvisal |
0:e6fcdb78a136
|
142
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
143
|
}
|
mjarvisal |
0:e6fcdb78a136
|
144
|
|
mjarvisal |
0:e6fcdb78a136
|
145
|
|
mjarvisal |
0:e6fcdb78a136
|
146
|
VL53L0X_Error VL53L0X_WrByte(VL53L0X_DEV Dev, uint8_t index, uint8_t data){
|
mjarvisal |
0:e6fcdb78a136
|
147
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
148
|
int32_t status_int;
|
mjarvisal |
0:e6fcdb78a136
|
149
|
uint8_t deviceAddress;
|
mjarvisal |
0:e6fcdb78a136
|
150
|
|
mjarvisal |
0:e6fcdb78a136
|
151
|
deviceAddress = Dev->I2cDevAddr;
|
mjarvisal |
0:e6fcdb78a136
|
152
|
|
mjarvisal |
0:e6fcdb78a136
|
153
|
status_int = VL53L0X_write_byte(deviceAddress, index, data);
|
mjarvisal |
0:e6fcdb78a136
|
154
|
|
mjarvisal |
0:e6fcdb78a136
|
155
|
if (status_int != 0)
|
mjarvisal |
0:e6fcdb78a136
|
156
|
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
mjarvisal |
0:e6fcdb78a136
|
157
|
|
mjarvisal |
0:e6fcdb78a136
|
158
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
159
|
}
|
mjarvisal |
0:e6fcdb78a136
|
160
|
|
mjarvisal |
0:e6fcdb78a136
|
161
|
VL53L0X_Error VL53L0X_WrWord(VL53L0X_DEV Dev, uint8_t index, uint16_t data){
|
mjarvisal |
0:e6fcdb78a136
|
162
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
163
|
int32_t status_int;
|
mjarvisal |
0:e6fcdb78a136
|
164
|
uint8_t deviceAddress;
|
mjarvisal |
0:e6fcdb78a136
|
165
|
|
mjarvisal |
0:e6fcdb78a136
|
166
|
deviceAddress = Dev->I2cDevAddr;
|
mjarvisal |
0:e6fcdb78a136
|
167
|
|
mjarvisal |
0:e6fcdb78a136
|
168
|
status_int = VL53L0X_write_word(deviceAddress, index, data);
|
mjarvisal |
0:e6fcdb78a136
|
169
|
|
mjarvisal |
0:e6fcdb78a136
|
170
|
if (status_int != 0)
|
mjarvisal |
0:e6fcdb78a136
|
171
|
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
mjarvisal |
0:e6fcdb78a136
|
172
|
|
mjarvisal |
0:e6fcdb78a136
|
173
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
174
|
}
|
mjarvisal |
0:e6fcdb78a136
|
175
|
|
mjarvisal |
0:e6fcdb78a136
|
176
|
VL53L0X_Error VL53L0X_WrDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t data){
|
mjarvisal |
0:e6fcdb78a136
|
177
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
178
|
int32_t status_int;
|
mjarvisal |
0:e6fcdb78a136
|
179
|
uint8_t deviceAddress;
|
mjarvisal |
0:e6fcdb78a136
|
180
|
|
mjarvisal |
0:e6fcdb78a136
|
181
|
deviceAddress = Dev->I2cDevAddr;
|
mjarvisal |
0:e6fcdb78a136
|
182
|
|
mjarvisal |
0:e6fcdb78a136
|
183
|
status_int = VL53L0X_write_dword(deviceAddress, index, data);
|
mjarvisal |
0:e6fcdb78a136
|
184
|
|
mjarvisal |
0:e6fcdb78a136
|
185
|
if (status_int != 0)
|
mjarvisal |
0:e6fcdb78a136
|
186
|
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
mjarvisal |
0:e6fcdb78a136
|
187
|
|
mjarvisal |
0:e6fcdb78a136
|
188
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
189
|
}
|
mjarvisal |
0:e6fcdb78a136
|
190
|
|
mjarvisal |
0:e6fcdb78a136
|
191
|
VL53L0X_Error VL53L0X_UpdateByte(VL53L0X_DEV Dev, uint8_t index, uint8_t AndData, uint8_t OrData){
|
mjarvisal |
0:e6fcdb78a136
|
192
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
193
|
int32_t status_int;
|
mjarvisal |
0:e6fcdb78a136
|
194
|
uint8_t deviceAddress;
|
mjarvisal |
0:e6fcdb78a136
|
195
|
uint8_t data;
|
mjarvisal |
0:e6fcdb78a136
|
196
|
|
mjarvisal |
0:e6fcdb78a136
|
197
|
deviceAddress = Dev->I2cDevAddr;
|
mjarvisal |
0:e6fcdb78a136
|
198
|
|
mjarvisal |
0:e6fcdb78a136
|
199
|
status_int = VL53L0X_read_byte(deviceAddress, index, &data);
|
mjarvisal |
0:e6fcdb78a136
|
200
|
|
mjarvisal |
0:e6fcdb78a136
|
201
|
if (status_int != 0)
|
mjarvisal |
0:e6fcdb78a136
|
202
|
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
mjarvisal |
0:e6fcdb78a136
|
203
|
|
mjarvisal |
0:e6fcdb78a136
|
204
|
if (Status == VL53L0X_ERROR_NONE) {
|
mjarvisal |
0:e6fcdb78a136
|
205
|
data = (data & AndData) | OrData;
|
mjarvisal |
0:e6fcdb78a136
|
206
|
status_int = VL53L0X_write_byte(deviceAddress, index, data);
|
mjarvisal |
0:e6fcdb78a136
|
207
|
|
mjarvisal |
0:e6fcdb78a136
|
208
|
if (status_int != 0)
|
mjarvisal |
0:e6fcdb78a136
|
209
|
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
mjarvisal |
0:e6fcdb78a136
|
210
|
}
|
mjarvisal |
0:e6fcdb78a136
|
211
|
|
mjarvisal |
0:e6fcdb78a136
|
212
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
213
|
}
|
mjarvisal |
0:e6fcdb78a136
|
214
|
|
mjarvisal |
0:e6fcdb78a136
|
215
|
VL53L0X_Error VL53L0X_RdByte(VL53L0X_DEV Dev, uint8_t index, uint8_t *data){
|
mjarvisal |
0:e6fcdb78a136
|
216
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
217
|
int32_t status_int;
|
mjarvisal |
0:e6fcdb78a136
|
218
|
uint8_t deviceAddress;
|
mjarvisal |
0:e6fcdb78a136
|
219
|
|
mjarvisal |
0:e6fcdb78a136
|
220
|
deviceAddress = Dev->I2cDevAddr;
|
mjarvisal |
0:e6fcdb78a136
|
221
|
|
mjarvisal |
0:e6fcdb78a136
|
222
|
status_int = VL53L0X_read_byte(deviceAddress, index, data);
|
mjarvisal |
0:e6fcdb78a136
|
223
|
|
mjarvisal |
0:e6fcdb78a136
|
224
|
if (status_int != 0)
|
mjarvisal |
0:e6fcdb78a136
|
225
|
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
mjarvisal |
0:e6fcdb78a136
|
226
|
|
mjarvisal |
0:e6fcdb78a136
|
227
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
228
|
}
|
mjarvisal |
0:e6fcdb78a136
|
229
|
|
mjarvisal |
0:e6fcdb78a136
|
230
|
VL53L0X_Error VL53L0X_RdWord(VL53L0X_DEV Dev, uint8_t index, uint16_t *data){
|
mjarvisal |
0:e6fcdb78a136
|
231
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
232
|
int32_t status_int;
|
mjarvisal |
0:e6fcdb78a136
|
233
|
uint8_t deviceAddress;
|
mjarvisal |
0:e6fcdb78a136
|
234
|
|
mjarvisal |
0:e6fcdb78a136
|
235
|
deviceAddress = Dev->I2cDevAddr;
|
mjarvisal |
0:e6fcdb78a136
|
236
|
|
mjarvisal |
0:e6fcdb78a136
|
237
|
status_int = VL53L0X_read_word(deviceAddress, index, data);
|
mjarvisal |
0:e6fcdb78a136
|
238
|
|
mjarvisal |
0:e6fcdb78a136
|
239
|
if (status_int != 0)
|
mjarvisal |
0:e6fcdb78a136
|
240
|
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
mjarvisal |
0:e6fcdb78a136
|
241
|
|
mjarvisal |
0:e6fcdb78a136
|
242
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
243
|
}
|
mjarvisal |
0:e6fcdb78a136
|
244
|
|
mjarvisal |
0:e6fcdb78a136
|
245
|
VL53L0X_Error VL53L0X_RdDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t *data){
|
mjarvisal |
0:e6fcdb78a136
|
246
|
VL53L0X_Error Status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
247
|
int32_t status_int;
|
mjarvisal |
0:e6fcdb78a136
|
248
|
uint8_t deviceAddress;
|
mjarvisal |
0:e6fcdb78a136
|
249
|
|
mjarvisal |
0:e6fcdb78a136
|
250
|
deviceAddress = Dev->I2cDevAddr;
|
mjarvisal |
0:e6fcdb78a136
|
251
|
|
mjarvisal |
0:e6fcdb78a136
|
252
|
status_int = VL53L0X_read_dword(deviceAddress, index, data);
|
mjarvisal |
0:e6fcdb78a136
|
253
|
|
mjarvisal |
0:e6fcdb78a136
|
254
|
if (status_int != 0)
|
mjarvisal |
0:e6fcdb78a136
|
255
|
Status = VL53L0X_ERROR_CONTROL_INTERFACE;
|
mjarvisal |
0:e6fcdb78a136
|
256
|
|
mjarvisal |
0:e6fcdb78a136
|
257
|
return Status;
|
mjarvisal |
0:e6fcdb78a136
|
258
|
}
|
mjarvisal |
0:e6fcdb78a136
|
259
|
|
mjarvisal |
0:e6fcdb78a136
|
260
|
#define VL53L0X_POLLINGDELAY_LOOPNB 250
|
mjarvisal |
0:e6fcdb78a136
|
261
|
VL53L0X_Error VL53L0X_PollingDelay(VL53L0X_DEV Dev){
|
mjarvisal |
0:e6fcdb78a136
|
262
|
VL53L0X_Error status = VL53L0X_ERROR_NONE;
|
mjarvisal |
0:e6fcdb78a136
|
263
|
volatile uint32_t i;
|
mjarvisal |
0:e6fcdb78a136
|
264
|
LOG_FUNCTION_START("");
|
mjarvisal |
0:e6fcdb78a136
|
265
|
|
mjarvisal |
0:e6fcdb78a136
|
266
|
for(i=0;i<VL53L0X_POLLINGDELAY_LOOPNB;i++){
|
mjarvisal |
0:e6fcdb78a136
|
267
|
//Do nothing
|
mjarvisal |
0:e6fcdb78a136
|
268
|
asm("nop");
|
mjarvisal |
0:e6fcdb78a136
|
269
|
}
|
mjarvisal |
0:e6fcdb78a136
|
270
|
|
mjarvisal |
0:e6fcdb78a136
|
271
|
LOG_FUNCTION_END(status);
|
mjarvisal |
0:e6fcdb78a136
|
272
|
return status;
|
mjarvisal |
0:e6fcdb78a136
|
273
|
}
|