Revision bf8ca9aa unittests/periphery-lld/src/ut_alld_VL53L0X_v1.c
unittests/periphery-lld/src/ut_alld_VL53L0X_v1.c | ||
---|---|---|
98 | 98 |
//validate I2C bus on 0xC0 0xEE |
99 | 99 |
status = VL53L0X_read_multi((((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.i2cd, (apalI2Caddr_t)(((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.I2cDevAddr , 0xc0, ®_8[0], 1, (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.timeout ); |
100 | 100 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && reg_8[0]==0xEE) { |
101 |
aosUtPassed(stream, &result); |
|
102 |
} else { |
|
103 |
aosUtFailedMsg(stream, &result, "0x%08X; 0x%08X\n", status, reg_8[0]); |
|
104 |
} |
|
105 | 101 |
|
102 |
//validate I2C bus on 0xC1 0xAA |
|
103 |
status = VL53L0X_read_multi((((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.i2cd, (apalI2Caddr_t)(((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.I2cDevAddr , 0xc1, ®_8[0], 1, (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.timeout ); |
|
104 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && reg_8[0]==0xAA) { |
|
105 |
|
|
106 |
//validate I2C bus on 0xC2 0x10 |
|
107 |
status = VL53L0X_read_multi((((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.i2cd, (apalI2Caddr_t)(((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.I2cDevAddr , 0xc2, ®_8[0], 1, (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.timeout ); |
|
108 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && reg_8[0]==0x10) { |
|
109 |
|
|
110 |
//validate I2C bus on 0x51 0x0099 |
|
111 |
status = VL53L0X_read_multi((((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.i2cd, (apalI2Caddr_t)(((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.I2cDevAddr , 0x51, ®_8[0], 2, (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.timeout ); |
|
112 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && reg_8[0]==0x00 && reg_8[1]==0x99) { |
|
113 |
//validate I2C bus on 0x61 0x0000 |
|
114 |
status = VL53L0X_read_multi((((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.i2cd, (apalI2Caddr_t)(((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.I2cDevAddr , 0x61, ®_8[0], 2, (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.timeout ); |
|
115 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && reg_8[0]==0x00 && reg_8[1]==0x00) { |
|
116 |
aosUtPassed(stream, &result); |
|
117 |
} else { |
|
118 |
aosUtFailedMsg(stream, &result, "0x%08X; 0x%08X\n", status, reg_8[0]); |
|
119 |
} |
|
120 |
} else { |
|
121 |
aosUtFailedMsg(stream, &result, "0x%08X; 0x%08X\n", status, reg_8[0]); |
|
122 |
} |
|
123 |
|
|
124 |
} else { |
|
125 |
aosUtFailedMsg(stream, &result, "0x%08X; 0x%08X\n", status, reg_8[0]); |
|
126 |
} |
|
127 |
|
|
128 |
} else { |
|
129 |
aosUtFailedMsg(stream, &result, "0x%08X; 0x%08X\n", status, reg_8[0]); |
|
130 |
} |
|
106 | 131 |
|
107 |
//validate I2C bus on 0xC1 0xAA |
|
108 |
status = VL53L0X_read_multi((((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.i2cd, (apalI2Caddr_t)(((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.I2cDevAddr , 0xc1, ®_8[0], 1, (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.timeout ); |
|
109 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && reg_8[0]==0xAA) { |
|
110 |
aosUtPassed(stream, &result); |
|
111 | 132 |
} else { |
112 | 133 |
aosUtFailedMsg(stream, &result, "0x%08X; 0x%08X\n", status, reg_8[0]); |
113 | 134 |
} |
114 | 135 |
|
115 |
//validate I2C bus on 0xC2 0x10 |
|
116 |
status = VL53L0X_read_multi((((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.i2cd, (apalI2Caddr_t)(((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.I2cDevAddr , 0xc2, ®_8[0], 1, (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.timeout ); |
|
117 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && reg_8[0]==0x10) { |
|
118 |
aosUtPassed(stream, &result); |
|
119 |
} else { |
|
120 |
aosUtFailedMsg(stream, &result, "0x%08X; 0x%08X\n", status, reg_8[0]); |
|
121 |
} |
|
122 | 136 |
|
123 |
//validate I2C bus on 0x51 0x0099 |
|
124 |
status = VL53L0X_read_multi((((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.i2cd, (apalI2Caddr_t)(((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.I2cDevAddr , 0x51, ®_8[0], 2, (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.timeout ); |
|
125 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && reg_8[0]==0x00 && reg_8[1]==0x99) { |
|
126 |
aosUtPassed(stream, &result); |
|
127 |
} else { |
|
128 |
aosUtFailedMsg(stream, &result, "0x%08X; 0x%08X\n", status, reg_8[0]); |
|
129 |
} |
|
130 | 137 |
|
131 |
//validate I2C bus on 0x61 0x0000 |
|
132 |
status = VL53L0X_read_multi((((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.i2cd, (apalI2Caddr_t)(((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.I2cDevAddr , 0x61, ®_8[0], 2, (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.timeout ); |
|
133 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && reg_8[0]==0x00 && reg_8[1]==0x00) { |
|
134 |
aosUtPassed(stream, &result); |
|
135 |
} else { |
|
136 |
aosUtFailedMsg(stream, &result, "0x%08X; 0x%08X\n", status, reg_8[0]); |
|
137 |
} |
|
138 |
|
|
139 |
|
|
140 |
|
|
141 |
|
|
142 |
|
|
143 |
|
|
138 | 144 |
|
139 | 145 |
|
140 | 146 |
|
... | ... | |
151 | 157 |
} |
152 | 158 |
|
153 | 159 |
|
154 |
chprintf(stream, "writing register...\n"); |
|
160 |
chprintf(stream, "writing register (Byte)...\n");
|
|
155 | 161 |
|
156 | 162 |
//VL53L0X_WrByte(Dev, 0x88, 0x00); |
157 | 163 |
uint8_t tx_buf = 0x00; |
... | ... | |
167 | 173 |
} |
168 | 174 |
|
169 | 175 |
|
176 |
chprintf(stream, "writing register (multi)...\n"); |
|
170 | 177 |
|
171 | 178 |
//read register 0x88 |
172 | 179 |
status = VL53L0X_read_multi((((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.i2cd, (apalI2Caddr_t)(((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.I2cDevAddr , 0x88, ®_8[0], 1, (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.timeout ); |
... | ... | |
209 | 216 |
chprintf(stream, "reading results...\n"); |
210 | 217 |
|
211 | 218 |
status = vl53l0x_lld_perform_mesaurement(((ut_vl53l0xdata_t*)(ut->data))->vl53d, ®_16[0]); |
212 |
chprintf(stream, "\t\tdistance : %u\n", reg_16[0]); |
|
219 |
chprintf(stream, "\t\tdistance : %u mm\n", reg_16[0]);
|
|
213 | 220 |
int i = 0; |
214 | 221 |
for (i = 0; i<4; i++){ |
215 | 222 |
status |= vl53l0x_lld_perform_mesaurement(((ut_vl53l0xdata_t*)(ut->data))->vl53d, ®_16[0]); |
216 | 223 |
|
217 |
chprintf(stream, "\t\tdistance : %u\n", reg_16[0]); |
|
224 |
chprintf(stream, "\t\tdistance : %u mm\n", reg_16[0]);
|
|
218 | 225 |
} |
219 | 226 |
|
220 | 227 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING)) { |
... | ... | |
252 | 259 |
|
253 | 260 |
status = vl53l0x_lld_set_mode(((ut_vl53l0xdata_t*)(ut->data))->vl53d, VL53L0X_DEVICEMODE_SINGLE_RANGING, |
254 | 261 |
VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY,0,0); |
255 |
/* |
|
256 |
same as |
|
257 |
|
|
258 |
status |= VL53L0X_SetDeviceMode(&(((ut_vl53l0xdata_t*)(ut->data))->vl53d->vl53l0x_dev), VL53L0X_DEVICEMODE_SINGLE_RANGING); |
|
259 |
status |= VL53L0X_SetGpioConfig(&(((ut_vl53l0xdata_t*)(ut->data))->vl53d->vl53l0x_dev), 0, VL53L0X_DEVICEMODE_SINGLE_RANGING, |
|
260 |
VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY, VL53L0X_INTERRUPTPOLARITY_LOW); |
|
261 |
*/ |
|
262 | 262 |
|
263 | 263 |
|
264 | 264 |
|
265 | 265 |
status |= VL53L0X_GetGpioConfig(&(((ut_vl53l0xdata_t*)(ut->data))->vl53d->vl53l0x_dev), 0, &deviceMode, &pFunctionality, &pPolarity); |
266 | 266 |
|
267 | 267 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && deviceMode == VL53L0X_DEVICEMODE_SINGLE_RANGING && |
268 |
pFunctionality == VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY && pPolarity == VL53L0X_INTERRUPTPOLARITY_LOW) {
|
|
268 |
pFunctionality == VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY && pPolarity == VL53L0X_INTERRUPTPOLARITY_HIGH) {
|
|
269 | 269 |
aosUtPassed(stream, &result); |
270 | 270 |
} else { |
271 | 271 |
aosUtFailedMsg(stream, &result, "0x%08X; mode:%u; Interrupt:%u; InterruptPolarity: %u\n", status, deviceMode, pFunctionality, pPolarity); |
... | ... | |
276 | 276 |
|
277 | 277 |
status = vl53l0x_lld_CheckRangingDataReady(((ut_vl53l0xdata_t*)(ut->data))->vl53d, &pMeasurementDataReady); |
278 | 278 |
|
279 |
status |= pcal6524_lld_read_group(((ut_vl53l0xdata_t*)ut->data)->gpio, PCAL6524_LLD_CMD_INPUT_P0, buffer, |
|
280 |
((ut_vl53l0xdata_t*)ut->data)->timeout); |
|
281 |
switch (pcal6524_lld_cmd_groupsize(PCAL6524_LLD_CMD_INPUT_P0)) { |
|
282 |
case 1: |
|
283 |
|
|
284 |
break; |
|
285 |
case 2: |
|
286 |
break; |
|
287 |
case 3: |
|
288 |
chprintf(stream, "\t\tRead input: 0x%02X 0x%02X 0x%02X\t", buffer[0], buffer[1], buffer[2]); |
|
289 |
break; |
|
290 |
case 6: |
|
291 |
chprintf(stream, "\t\tRead input: 0x%04X 0x%04X 0x%04X\t", |
|
292 |
(((uint16_t)buffer[0]) << 8) | buffer[1], |
|
293 |
(((uint16_t)buffer[2]) << 8) | buffer[3], |
|
294 |
(((uint16_t)buffer[4]) << 8) | buffer[5]); |
|
295 |
break; |
|
296 |
default: |
|
297 |
break; |
|
298 |
} |
|
299 |
|
|
279 | 300 |
|
280 | 301 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && pMeasurementDataReady == 0) { |
281 | 302 |
aosUtPassed(stream, &result); |
... | ... | |
297 | 318 |
|
298 | 319 |
chprintf(stream, "start maeasurement ... \n"); |
299 | 320 |
|
300 |
|
|
301 | 321 |
//set everything for eventshandler |
302 | 322 |
chEvtRegister(((ut_vl53l0xdata_t*)(ut->data))->evtsource, &event_listener, INTERRUPT_EVENT_ID); |
303 | 323 |
aosSysGetUptime(&tend); |
... | ... | |
312 | 332 |
|
313 | 333 |
} |
314 | 334 |
|
315 |
|
|
335 |
chprintf(stream, "Check for interrupts ... \n"); |
|
316 | 336 |
do { |
317 | 337 |
// read proximity data, interrupt event information and interrupt status |
318 |
const eventmask_t emask = chEvtWaitOneTimeout(EVENT_MASK(INTERRUPT_EVENT_ID), chTimeUS2I(10*MICROSECONDS_PER_MILLISECOND));
|
|
338 |
const eventmask_t emask = chEvtWaitOneTimeout(EVENT_MASK(INTERRUPT_EVENT_ID), chTimeUS2I(MICROSECONDS_PER_SECOND));
|
|
319 | 339 |
const eventflags_t eflags = chEvtGetAndClearFlags(&event_listener); |
320 | 340 |
|
321 | 341 |
|
322 | 342 |
if (emask == EVENT_MASK(INTERRUPT_EVENT_ID) && |
323 | 343 |
eflags == ((ut_vl53l0xdata_t*)(ut->data))->evtflags) { |
324 | 344 |
// true positive (correct case) |
325 |
chprintf(stream, "EVENT\n"); |
|
326 |
status |= VL53L0X_GetRangingMeasurementData(&(((ut_vl53l0xdata_t*)(ut->data))->vl53d->vl53l0x_dev), pRangingMeasurementData); |
|
327 |
chprintf(stream, "\t\tinterrupt detected: prox = %i\n", RangingMeasurementData.RangeMilliMeter); |
|
328 |
status |= VL53L0X_ClearInterruptMask(&(((ut_vl53l0xdata_t*)(ut->data))->vl53d->vl53l0x_dev), |
|
329 |
VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_LEVEL_HIGH); |
|
330 |
}else if (eflags == ((ut_vl53l0xdata_t*)(ut->data))->evtflags){ |
|
331 |
chprintf(stream, "mask: %lu\n", emask); |
|
332 |
chprintf(stream, "flag: %lu\n", eflags); |
|
333 |
}else if (emask == EVENT_MASK(INTERRUPT_EVENT_ID)){ |
|
334 |
chprintf(stream, "first::mask: %lu and flag: %lu\n", emask, eflags); |
|
335 |
|
|
336 |
// read from GPIO |
|
337 |
status |= pcal6524_lld_read_group(((ut_vl53l0xdata_t*)ut->data)->gpio, PCAL6524_LLD_CMD_INPUT_P0, buffer, |
|
338 |
((ut_vl53l0xdata_t*)ut->data)->timeout); |
|
345 |
chprintf(stream, "\t\tEVENT"); |
|
346 |
status |= pcal6524_lld_read_group(((ut_vl53l0xdata_t*)ut->data)->gpio, PCAL6524_LLD_CMD_INPUT_P0, buffer, |
|
347 |
((ut_vl53l0xdata_t*)ut->data)->timeout); |
|
348 |
status |= vl53l0x_lld_getRangingData(((ut_vl53l0xdata_t*)(ut->data))->vl53d, pRangingMeasurementData); |
|
339 | 349 |
|
340 |
status |= vl53l0x_lld_CheckRangingDataReady(((ut_vl53l0xdata_t*)(ut->data))->vl53d, &pMeasurementDataReady); |
|
341 | 350 |
|
342 |
if ((pMeasurementDataReady == 0x01)) { |
|
351 |
switch (pcal6524_lld_cmd_groupsize(PCAL6524_LLD_CMD_INPUT_P0)) { |
|
352 |
case 1: |
|
343 | 353 |
|
344 |
chprintf(stream, "\t\tRead input: 0x%04X 0x%04X 0x%04X\t", |
|
345 |
(((uint16_t)buffer[0]) << 8) | buffer[1], |
|
346 |
(((uint16_t)buffer[2]) << 8) | buffer[3], |
|
347 |
(((uint16_t)buffer[4]) << 8) | buffer[5]); |
|
354 |
break; |
|
355 |
case 2: |
|
356 |
break; |
|
357 |
case 3: |
|
358 |
chprintf(stream, "\tRead input: 0x%02X 0x%02X 0x%02X", buffer[0], buffer[1], buffer[2]); |
|
359 |
break; |
|
360 |
case 6: |
|
361 |
chprintf(stream, "\t\tRead input: 0x%04X 0x%04X 0x%04X", |
|
362 |
(((uint16_t)buffer[0]) << 8) | buffer[1], |
|
363 |
(((uint16_t)buffer[2]) << 8) | buffer[3], |
|
364 |
(((uint16_t)buffer[4]) << 8) | buffer[5]); |
|
365 |
break; |
|
366 |
default: |
|
367 |
break; |
|
368 |
} |
|
369 |
chprintf(stream, "\tdistance = %i mm\n", RangingMeasurementData.RangeMilliMeter); |
|
348 | 370 |
|
349 | 371 |
|
350 |
//get the measurement from VL53L0X |
|
351 |
status |= vl53l0x_lld_getRangingData(((ut_vl53l0xdata_t*)(ut->data))->vl53d, pRangingMeasurementData); |
|
352 |
chprintf(stream, "distance: %i\n", RangingMeasurementData.RangeMilliMeter); |
|
353 |
|
|
354 |
} |
|
355 | 372 |
|
373 |
}else{ |
|
374 |
chprintf(stream, "\tNo Interrupt, last measurement = %i mm\n", (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.Data.LastRangeMeasure.RangeMilliMeter); |
|
356 | 375 |
|
357 | 376 |
} |
358 | 377 |
|
... | ... | |
403 | 422 |
&ThresholdLow, &ThresholdHigh); |
404 | 423 |
|
405 | 424 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && deviceMode == VL53L0X_DEVICEMODE_CONTINUOUS_RANGING && |
406 |
pFunctionality == VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_OUT_OF_WINDOW && pPolarity == VL53L0X_INTERRUPTPOLARITY_LOW){
|
|
425 |
pFunctionality == VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_OUT_OF_WINDOW && pPolarity == VL53L0X_INTERRUPTPOLARITY_HIGH){
|
|
407 | 426 |
//&& ThresholdLow == 80 * 65536 && ThresholdHigh == 150 * 65536) { not possible, only strange wrong values, e.g. Threshold low:1431655765;Threshold high:0 |
408 | 427 |
aosUtPassed(stream, &result); |
409 | 428 |
} else { |
... | ... | |
415 | 434 |
|
416 | 435 |
status = vl53l0x_lld_CheckRangingDataReady(((ut_vl53l0xdata_t*)(ut->data))->vl53d, &pMeasurementDataReady); |
417 | 436 |
|
437 |
status |= pcal6524_lld_read_group(((ut_vl53l0xdata_t*)ut->data)->gpio, PCAL6524_LLD_CMD_INPUT_P0, buffer, |
|
438 |
((ut_vl53l0xdata_t*)ut->data)->timeout); |
|
439 |
switch (pcal6524_lld_cmd_groupsize(PCAL6524_LLD_CMD_INPUT_P0)) { |
|
440 |
case 1: |
|
441 |
|
|
442 |
break; |
|
443 |
case 2: |
|
444 |
break; |
|
445 |
case 3: |
|
446 |
chprintf(stream, "\t\tRead input: 0x%02X 0x%02X 0x%02X\t", buffer[0], buffer[1], buffer[2]); |
|
447 |
break; |
|
448 |
case 6: |
|
449 |
chprintf(stream, "\t\tRead input: 0x%04X 0x%04X 0x%04X\t", |
|
450 |
(((uint16_t)buffer[0]) << 8) | buffer[1], |
|
451 |
(((uint16_t)buffer[2]) << 8) | buffer[3], |
|
452 |
(((uint16_t)buffer[4]) << 8) | buffer[5]); |
|
453 |
break; |
|
454 |
default: |
|
455 |
break; |
|
456 |
} |
|
418 | 457 |
|
419 | 458 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING) && pMeasurementDataReady == 0) { |
420 | 459 |
aosUtPassed(stream, &result); |
... | ... | |
422 | 461 |
aosUtFailedMsg(stream, &result, "0x%08X, there are blocking interrupts :%u\n", status, pMeasurementDataReady); |
423 | 462 |
chprintf(stream, "clear blocking interrupts...\n"); |
424 | 463 |
|
464 |
|
|
425 | 465 |
status = vl53l0x_lld_getRangingData(((ut_vl53l0xdata_t*)(ut->data))->vl53d, pRangingMeasurementData); |
426 | 466 |
|
427 | 467 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING)) { |
... | ... | |
433 | 473 |
|
434 | 474 |
} |
435 | 475 |
|
436 |
|
|
437 |
|
|
438 |
|
|
439 | 476 |
chprintf(stream, "start maeasurement ... \n"); |
440 | 477 |
|
441 | 478 |
|
... | ... | |
446 | 483 |
|
447 | 484 |
status = vl53l0x_lld_start_measurement(((ut_vl53l0xdata_t*)(ut->data))->vl53d); |
448 | 485 |
|
449 |
if ((status == APAL_STATUS_OK || status == APAL_STATUS_WARNING)) { |
|
450 |
aosUtPassed(stream, &result); |
|
451 |
} else { |
|
452 |
aosUtFailedMsg(stream, &result, "0x%08X;\n", status); |
|
453 |
|
|
454 |
} |
|
455 |
|
|
456 |
|
|
457 | 486 |
do { |
458 | 487 |
// read proximity data, interrupt event information and interrupt status |
459 |
const eventmask_t emask = chEvtWaitOneTimeout(EVENT_MASK(INTERRUPT_EVENT_ID), chTimeUS2I(10*MICROSECONDS_PER_MILLISECOND));
|
|
488 |
const eventmask_t emask = chEvtWaitOneTimeout(EVENT_MASK(INTERRUPT_EVENT_ID), chTimeUS2I(MICROSECONDS_PER_SECOND));
|
|
460 | 489 |
const eventflags_t eflags = chEvtGetAndClearFlags(&event_listener); |
461 | 490 |
|
462 | 491 |
if (emask == EVENT_MASK(INTERRUPT_EVENT_ID) && |
463 | 492 |
eflags == ((ut_vl53l0xdata_t*)(ut->data))->evtflags) { |
464 | 493 |
// true positive (correct case) |
465 |
chprintf(stream, "EVENT\n"); |
|
466 |
status |= VL53L0X_GetRangingMeasurementData(&(((ut_vl53l0xdata_t*)(ut->data))->vl53d->vl53l0x_dev), pRangingMeasurementData); |
|
467 |
|
|
468 |
|
|
469 |
chprintf(stream, "\t\tinterrupt detected: prox = %i\n", RangingMeasurementData.RangeMilliMeter); |
|
494 |
chprintf(stream, "\t\tEVENT"); |
|
495 |
// read from GPIO |
|
496 |
status |= pcal6524_lld_read_group(((ut_vl53l0xdata_t*)ut->data)->gpio, PCAL6524_LLD_CMD_INPUT_P0, buffer, |
|
497 |
((ut_vl53l0xdata_t*)ut->data)->timeout); |
|
498 |
switch (pcal6524_lld_cmd_groupsize(PCAL6524_LLD_CMD_INPUT_P0)) { |
|
499 |
case 1: |
|
500 |
|
|
501 |
break; |
|
502 |
case 2: |
|
503 |
break; |
|
504 |
case 3: |
|
505 |
chprintf(stream, "\tRead input: 0x%02X 0x%02X 0x%02X\t", buffer[0], buffer[1], buffer[2]); |
|
506 |
break; |
|
507 |
case 6: |
|
508 |
chprintf(stream, "\t\tRead input: 0x%04X 0x%04X 0x%04X\t", |
|
509 |
(((uint16_t)buffer[0]) << 8) | buffer[1], |
|
510 |
(((uint16_t)buffer[2]) << 8) | buffer[3], |
|
511 |
(((uint16_t)buffer[4]) << 8) | buffer[5]); |
|
512 |
break; |
|
513 |
default: |
|
514 |
break; |
|
515 |
} |
|
516 |
status |= vl53l0x_lld_getRangingData(((ut_vl53l0xdata_t*)(ut->data))->vl53d, pRangingMeasurementData); |
|
517 |
|
|
518 |
|
|
519 |
chprintf(stream, "distance = %i mm\n", RangingMeasurementData.RangeMilliMeter); |
|
470 | 520 |
status |= VL53L0X_ClearInterruptMask(&(((ut_vl53l0xdata_t*)(ut->data))->vl53d->vl53l0x_dev),0); |
471 |
}else if (eflags == ((ut_vl53l0xdata_t*)(ut->data))->evtflags){ |
|
472 |
chprintf(stream, "mask: %lu\n", emask); |
|
473 |
chprintf(stream, "flag: %lu\n", eflags); |
|
474 |
}else if (emask == EVENT_MASK(INTERRUPT_EVENT_ID)){ |
|
475 |
chprintf(stream, "last::mask: %lu and flag: %lu\n", emask, eflags); |
|
476 |
|
|
477 |
// read from GPIO |
|
478 |
status |= pcal6524_lld_read_group(((ut_vl53l0xdata_t*)ut->data)->gpio, PCAL6524_LLD_CMD_INPUT_P0, buffer, |
|
479 |
((ut_vl53l0xdata_t*)ut->data)->timeout); |
|
480 |
|
|
481 |
status |= vl53l0x_lld_CheckRangingDataReady(((ut_vl53l0xdata_t*)(ut->data))->vl53d, &pMeasurementDataReady); |
|
482 |
|
|
483 |
if ((pMeasurementDataReady == 0x01)) { |
|
484 |
|
|
485 |
chprintf(stream, "\t\tRead input: 0x%04X 0x%04X 0x%04X\t", |
|
486 |
(((uint16_t)buffer[0]) << 8) | buffer[1], |
|
487 |
(((uint16_t)buffer[2]) << 8) | buffer[3], |
|
488 |
(((uint16_t)buffer[4]) << 8) | buffer[5]); |
|
489 |
|
|
490 |
|
|
491 |
//get the measurement from VL53L0X |
|
492 |
status |= vl53l0x_lld_getRangingData(((ut_vl53l0xdata_t*)(ut->data))->vl53d, pRangingMeasurementData); |
|
493 |
chprintf(stream, "distance: %i\n", RangingMeasurementData.RangeMilliMeter); |
|
494 |
} |
|
495 |
|
|
496 |
|
|
521 |
}else{ |
|
522 |
chprintf(stream, "\tNo Interrupt, last measurement = %i mm\n", (((ut_vl53l0xdata_t*)(ut->data))->vl53d)->vl53l0x_dev.Data.LastRangeMeasure.RangeMilliMeter); |
|
497 | 523 |
} |
498 | 524 |
|
499 |
|
|
500 | 525 |
aosSysGetUptime(&tcurrent); |
501 | 526 |
} while (tcurrent < tend); |
502 | 527 |
|
... | ... | |
523 | 548 |
|
524 | 549 |
|
525 | 550 |
|
526 |
|
|
527 | 551 |
chprintf(stream, "setting default address...\n"); |
528 | 552 |
|
529 | 553 |
status = vl53l0x_lld_set_address(((ut_vl53l0xdata_t*)(ut->data))->vl53d, 0x29); |
Also available in: Unified diff