Statistics
| Branch: | Tag: | Revision:

amiro-lld / include / VL53L0X / v1 / Api_vl53l0x / platform / inc / vl53l0x_platform.h @ 6ebebd4d

History | View | Annotate | Download (8.59 KB)

1 6ebebd4d Andre Raming
/*******************************************************************************
2
Copyright � 2015, STMicroelectronics International N.V.
3
All rights reserved.
4

5
Redistribution and use in source and binary forms, with or without
6
modification, are permitted provided that the following conditions are met:
7
    * Redistributions of source code must retain the above copyright
8
      notice, this list of conditions and the following disclaimer.
9
    * Redistributions in binary form must reproduce the above copyright
10
      notice, this list of conditions and the following disclaimer in the
11
      documentation and/or other materials provided with the distribution.
12
    * Neither the name of STMicroelectronics nor the
13
      names of its contributors may be used to endorse or promote products
14
      derived from this software without specific prior written permission.
15

16
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
19
NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED.
20
IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY
21
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
********************************************************************************/
28
29
30
#ifndef _VL53L0X_PLATFORM_H_
31
#define _VL53L0X_PLATFORM_H_
32
33
//#include <periphALtypes.h>
34
//#include <periphAL.h>
35
#include <amiro-lld.h>
36
#include "vl53l0x_def.h"
37
#include "vl53l0x_platform_log.h"
38
#include "vl53l0x_i2c_platform.h"
39
40
//#include "alld_vl53l0x.h"
41
//#include "vl53l0x_api_strings.h"
42
43
44
#ifdef __cplusplus
45
extern "C" {
46
#endif
47
48
/**
49
 * @file vl53l0x_platform.h
50
 *
51
 * @brief All end user OS/platform/application porting
52
 */
53
54
/**
55
 * @defgroup VL53L0X_platform_group VL53L0X Platform Functions
56
 * @brief    VL53L0X Platform Functions
57
 *  @{
58
 */
59
60
/**
61
 * @struct  VL53L0X_Dev_t
62
 * @brief    Generic PAL device type that does link between API and platform abstraction layer
63
 *
64
 */
65
typedef struct {
66
    apalI2CDriver_t* i2cd;              /*!< @brief The I2C Driver.     */
67
    apalTime_t timeout;                 /*!< timeout for chibios I2C interactions */
68
    VL53L0X_DevData_t Data;               /*!< embed ST Ewok Dev  data as "Data"*/
69
70
    /*!< user specific field */
71
    uint16_t   I2cDevAddr;                /*!< i2c device address user specific field */
72
    uint8_t   comms_type;                /*!< Type of comms : VL53L0X_COMMS_I2C or VL53L0X_COMMS_SPI */
73
    uint16_t  comms_speed_khz;           /*!< Comms speed [kHz] : typically 400kHz for I2C           */
74
75
} VL53L0X_Dev_t;
76
77
78
/**
79
 * @brief   Declare the device Handle as a pointer of the structure @a VL53L0X_Dev_t.
80
 *
81
 */
82
typedef VL53L0X_Dev_t* VL53L0X_DEV;
83
84
/**
85
 * @def PALDevDataGet
86
 * @brief Get ST private structure @a VL53L0X_DevData_t data access
87
 *
88
 * @param Dev       Device Handle
89
 * @param field     ST structure field name
90
 * It maybe used and as real data "ref" not just as "get" for sub-structure item
91
 * like PALDevDataGet(FilterData.field)[i] or PALDevDataGet(FilterData.MeasurementIndex)++
92
 */
93
#define PALDevDataGet(Dev, field) (Dev->Data.field)
94
95
/**
96
 * @def PALDevDataSet(Dev, field, data)
97
 * @brief  Set ST private structure @a VL53L0X_DevData_t data field
98
 * @param Dev       Device Handle
99
 * @param field     ST structure field name
100
 * @param data      Data to be set
101
 */
102
#define PALDevDataSet(Dev, field, data) (Dev->Data.field)=(data)
103
104
105
/**
106
 * @defgroup VL53L0X_registerAccess_group PAL Register Access Functions
107
 * @brief    PAL Register Access Functions
108
 *  @{
109
 */
110
111
/**
112
 * Lock comms interface to serialize all commands to a shared I2C interface for a specific device
113
 * @param   Dev       Device Handle
114
 * @return  VL53L0X_ERROR_NONE        Success
115
 * @return  "Other error code"    See ::VL53L0X_Error
116
 */
117
VL53L0X_Error VL53L0X_LockSequenceAccess(VL53L0X_DEV Dev);
118
119
/**
120
 * Unlock comms interface to serialize all commands to a shared I2C interface for a specific device
121
 * @param   Dev       Device Handle
122
 * @return  VL53L0X_ERROR_NONE        Success
123
 * @return  "Other error code"    See ::VL53L0X_Error
124
 */
125
VL53L0X_Error VL53L0X_UnlockSequenceAccess(VL53L0X_DEV Dev);
126
127
128
/**
129
 * Writes the supplied byte buffer to the device
130
 * @param   Dev       Device Handle
131
 * @param   index     The register index
132
 * @param   pdata     Pointer to uint8_t buffer containing the data to be written
133
 * @param   count     Number of bytes in the supplied byte buffer
134
 * @return  VL53L0X_ERROR_NONE        Success
135
 * @return  "Other error code"    See ::VL53L0X_Error
136
 */
137
VL53L0X_Error VL53L0X_WriteMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata, uint32_t count);
138
139
/**
140
 * Reads the requested number of bytes from the device
141
 * @param   Dev       Device Handle
142
 * @param   index     The register index
143
 * @param   pdata     Pointer to the uint8_t buffer to store read data
144
 * @param   count     Number of uint8_t's to read
145
 * @return  VL53L0X_ERROR_NONE        Success
146
 * @return  "Other error code"    See ::VL53L0X_Error
147
 */
148
VL53L0X_Error VL53L0X_ReadMulti(VL53L0X_DEV Dev, uint8_t index, uint8_t *pdata, uint32_t count);
149
150
/**
151
 * Write single byte register
152
 * @param   Dev       Device Handle
153
 * @param   index     The register index
154
 * @param   data      8 bit register data
155
 * @return  VL53L0X_ERROR_NONE        Success
156
 * @return  "Other error code"    See ::VL53L0X_Error
157
 */
158
VL53L0X_Error VL53L0X_WrByte(VL53L0X_DEV Dev, uint8_t index, uint8_t data);
159
160
/**
161
 * Write word register
162
 * @param   Dev       Device Handle
163
 * @param   index     The register index
164
 * @param   data      16 bit register data
165
 * @return  VL53L0X_ERROR_NONE        Success
166
 * @return  "Other error code"    See ::VL53L0X_Error
167
 */
168
VL53L0X_Error VL53L0X_WrWord(VL53L0X_DEV Dev, uint8_t index, uint16_t data);
169
170
/**
171
 * Write double word (4 byte) register
172
 * @param   Dev       Device Handle
173
 * @param   index     The register index
174
 * @param   data      32 bit register data
175
 * @return  VL53L0X_ERROR_NONE        Success
176
 * @return  "Other error code"    See ::VL53L0X_Error
177
 */
178
VL53L0X_Error VL53L0X_WrDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t data);
179
180
/**
181
 * Read single byte register
182
 * @param   Dev       Device Handle
183
 * @param   index     The register index
184
 * @param   data      pointer to 8 bit data
185
 * @return  VL53L0X_ERROR_NONE        Success
186
 * @return  "Other error code"    See ::VL53L0X_Error
187
 */
188
VL53L0X_Error VL53L0X_RdByte(VL53L0X_DEV Dev, uint8_t index, uint8_t *data);
189
190
/**
191
 * Read word (2byte) register
192
 * @param   Dev       Device Handle
193
 * @param   index     The register index
194
 * @param   data      pointer to 16 bit data
195
 * @return  VL53L0X_ERROR_NONE        Success
196
 * @return  "Other error code"    See ::VL53L0X_Error
197
 */
198
VL53L0X_Error VL53L0X_RdWord(VL53L0X_DEV Dev, uint8_t index, uint16_t *data);
199
200
/**
201
 * Read dword (4byte) register
202
 * @param   Dev       Device Handle
203
 * @param   index     The register index
204
 * @param   data      pointer to 32 bit data
205
 * @return  VL53L0X_ERROR_NONE        Success
206
 * @return  "Other error code"    See ::VL53L0X_Error
207
 */
208
VL53L0X_Error VL53L0X_RdDWord(VL53L0X_DEV Dev, uint8_t index, uint32_t *data);
209
210
/**
211
 * Threat safe Update (read/modify/write) single byte register
212
 *
213
 * Final_reg = (Initial_reg & and_data) |or_data
214
 *
215
 * @param   Dev        Device Handle
216
 * @param   index      The register index
217
 * @param   AndData    8 bit and data
218
 * @param   OrData     8 bit or data
219
 * @return  VL53L0X_ERROR_NONE        Success
220
 * @return  "Other error code"    See ::VL53L0X_Error
221
 */
222
VL53L0X_Error VL53L0X_UpdateByte(VL53L0X_DEV Dev, uint8_t index, uint8_t AndData, uint8_t OrData);
223
224
/** @} end of VL53L0X_registerAccess_group */
225
226
227
/**
228
 * @brief execute delay in all polling API call
229
 *
230
 * A typical multi-thread or RTOs implementation is to sleep the task for some 5ms (with 100Hz max rate faster polling is not needed)
231
 * if nothing specific is need you can define it as an empty/void macro
232
 * @code
233
 * #define VL53L0X_PollingDelay(...) (void)0
234
 * @endcode
235
 * @param Dev       Device Handle
236
 * @return  VL53L0X_ERROR_NONE        Success
237
 * @return  "Other error code"    See ::VL53L0X_Error
238
 */
239
//VL53L0X_Error VL53L0X_PollingDelay(VL53L0X_DEV Dev); /* usually best implemented as a real function */
240
241
/** @} end of VL53L0X_platform_group */
242
243
#ifdef __cplusplus
244
}
245
#endif
246
247
#endif  /* _VL53L0X_PLATFORM_H_ */
248
249