161 lines
4.4 KiB
C
161 lines
4.4 KiB
C
/**
|
|
*
|
|
* Copyright (c) 2021 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
#include "vl53l7cx_plugin_detection_thresholds.h"
|
|
|
|
uint8_t vl53l7cx_get_detection_thresholds_enable(
|
|
VL53L7CX_Configuration *p_dev,
|
|
uint8_t *p_enabled)
|
|
{
|
|
uint8_t status = VL53L7CX_STATUS_OK;
|
|
|
|
status |= vl53l7cx_dci_read_data(p_dev, (uint8_t*)p_dev->temp_buffer,
|
|
VL53L7CX_DCI_DET_THRESH_GLOBAL_CONFIG, 8);
|
|
*p_enabled = p_dev->temp_buffer[0x1];
|
|
|
|
return status;
|
|
}
|
|
|
|
uint8_t vl53l7cx_set_detection_thresholds_enable(
|
|
VL53L7CX_Configuration *p_dev,
|
|
uint8_t enabled)
|
|
{
|
|
uint8_t tmp, status = VL53L7CX_STATUS_OK;
|
|
uint8_t grp_global_config[] = {0x01, 0x00, 0x01, 0x00};
|
|
|
|
if(enabled == (uint8_t)1)
|
|
{
|
|
grp_global_config[0x01] = 0x01;
|
|
tmp = 0x04;
|
|
}
|
|
else
|
|
{
|
|
grp_global_config[0x01] = 0x00;
|
|
tmp = 0x0C;
|
|
}
|
|
|
|
/* Set global interrupt config */
|
|
status |= vl53l7cx_dci_replace_data(p_dev, p_dev->temp_buffer,
|
|
VL53L7CX_DCI_DET_THRESH_GLOBAL_CONFIG, 8,
|
|
(uint8_t*)&grp_global_config, 4, 0x00);
|
|
|
|
/* Update interrupt config */
|
|
status |= vl53l7cx_dci_replace_data(p_dev, p_dev->temp_buffer,
|
|
VL53L7CX_DCI_DET_THRESH_CONFIG, 20,
|
|
(uint8_t*)&tmp, 1, 0x11);
|
|
|
|
return status;
|
|
}
|
|
|
|
uint8_t vl53l7cx_get_detection_thresholds(
|
|
VL53L7CX_Configuration *p_dev,
|
|
VL53L7CX_DetectionThresholds *p_thresholds)
|
|
{
|
|
uint8_t i, status = VL53L7CX_STATUS_OK;
|
|
|
|
/* Get thresholds configuration */
|
|
status |= vl53l7cx_dci_read_data(p_dev, (uint8_t*)p_thresholds,
|
|
VL53L7CX_DCI_DET_THRESH_START,
|
|
(uint16_t)VL53L7CX_NB_THRESHOLDS
|
|
*(uint16_t)sizeof(VL53L7CX_DetectionThresholds));
|
|
|
|
for(i = 0; i < (uint8_t)VL53L7CX_NB_THRESHOLDS; i++)
|
|
{
|
|
switch(p_thresholds[i].measurement)
|
|
{
|
|
case VL53L7CX_DISTANCE_MM:
|
|
p_thresholds[i].param_low_thresh /= 4;
|
|
p_thresholds[i].param_high_thresh /= 4;
|
|
break;
|
|
case VL53L7CX_SIGNAL_PER_SPAD_KCPS:
|
|
p_thresholds[i].param_low_thresh /= 2048;
|
|
p_thresholds[i].param_high_thresh /= 2048;
|
|
break;
|
|
case VL53L7CX_RANGE_SIGMA_MM:
|
|
p_thresholds[i].param_low_thresh /= 128;
|
|
p_thresholds[i].param_high_thresh /= 128;
|
|
break;
|
|
case VL53L7CX_AMBIENT_PER_SPAD_KCPS:
|
|
p_thresholds[i].param_low_thresh /= 2048;
|
|
p_thresholds[i].param_high_thresh /= 2048;
|
|
break;
|
|
case VL53L7CX_NB_SPADS_ENABLED:
|
|
p_thresholds[i].param_low_thresh /= 256;
|
|
p_thresholds[i].param_high_thresh /= 256;
|
|
break;
|
|
case VL53L7CX_MOTION_INDICATOR:
|
|
p_thresholds[i].param_low_thresh /= 65535;
|
|
p_thresholds[i].param_high_thresh /= 65535;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
uint8_t vl53l7cx_set_detection_thresholds(
|
|
VL53L7CX_Configuration *p_dev,
|
|
VL53L7CX_DetectionThresholds *p_thresholds)
|
|
{
|
|
uint8_t i, status = VL53L7CX_STATUS_OK;
|
|
uint8_t grp_valid_target_cfg[] = {0x05, 0x05, 0x05, 0x05,
|
|
0x05, 0x05, 0x05, 0x05};
|
|
|
|
for(i = 0; i < (uint8_t) VL53L7CX_NB_THRESHOLDS; i++)
|
|
{
|
|
switch(p_thresholds->measurement)
|
|
{
|
|
case VL53L7CX_DISTANCE_MM:
|
|
p_thresholds[i].param_low_thresh *= 4;
|
|
p_thresholds[i].param_high_thresh *= 4;
|
|
break;
|
|
case VL53L7CX_SIGNAL_PER_SPAD_KCPS:
|
|
p_thresholds[i].param_low_thresh *= 2048;
|
|
p_thresholds[i].param_high_thresh *= 2048;
|
|
break;
|
|
case VL53L7CX_RANGE_SIGMA_MM:
|
|
p_thresholds[i].param_low_thresh *= 128;
|
|
p_thresholds[i].param_high_thresh *= 128;
|
|
break;
|
|
case VL53L7CX_AMBIENT_PER_SPAD_KCPS:
|
|
p_thresholds[i].param_low_thresh *= 2048;
|
|
p_thresholds[i].param_high_thresh *= 2048;
|
|
break;
|
|
case VL53L7CX_NB_SPADS_ENABLED:
|
|
p_thresholds[i].param_low_thresh *= 256;
|
|
p_thresholds[i].param_high_thresh *= 256;
|
|
break;
|
|
case VL53L7CX_MOTION_INDICATOR:
|
|
p_thresholds[i].param_low_thresh *= 65535;
|
|
p_thresholds[i].param_high_thresh *= 65535;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* Set valid target list */
|
|
status |= vl53l7cx_dci_write_data(p_dev, (uint8_t*)grp_valid_target_cfg,
|
|
VL53L7CX_DCI_DET_THRESH_VALID_STATUS,
|
|
(uint16_t)sizeof(grp_valid_target_cfg));
|
|
|
|
/* Set thresholds configuration */
|
|
status |= vl53l7cx_dci_write_data(p_dev, (uint8_t*)p_thresholds,
|
|
VL53L7CX_DCI_DET_THRESH_START,
|
|
(uint16_t)(VL53L7CX_NB_THRESHOLDS
|
|
*sizeof(VL53L7CX_DetectionThresholds)));
|
|
|
|
return status;
|
|
}
|