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