This is an example on how to put the sensor in hibernation and the system in a low power state between measurements
The example executes as follows:
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#define SENSOR_ID (1U)
#define SENSOR_TIMEOUT_MS (1000U)
#define DEFAULT_UPDATE_RATE (1.0f)
void *buffer,
void *calibration_buffer);
{
(void)argc;
(void)argv;
void *buffer = NULL;
void *calibration_buffer = NULL;
uint32_t buffer_size = 0U;
uint32_t calibration_buffer_size = 0U;
{
return EXIT_FAILURE;
}
if (distance_config == NULL)
{
printf(
"acc_detector_distance_config_create() failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
if (distance_handle == NULL)
{
printf(
"acc_detector_distance_create() failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
{
printf(
"acc_detector_distance_get_buffer_size() failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
if (buffer == NULL)
{
printf(
"buffer allocation failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
if (calibration_buffer == NULL)
{
printf(
"buffer allocation failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
if (sensor == NULL)
{
printf(
"acc_sensor_create() failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
bool status;
bool cal_complete = false;
do
{
if (status && !cal_complete)
{
}
} while (status && !cal_complete);
if (!status)
{
printf(
"acc_sensor_calibrate() failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
bool done = false;
do
{
distance_handle,
&sensor_cal_result,
buffer,
buffer_size,
calibration_buffer,
calibration_buffer_size,
&done);
if (!status)
{
printf(
"acc_detector_distance_calibrate() failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
{
printf(
"acc_detector_presence_prepare() failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
{
printf(
"acc_sensor_hibernate_on failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
while (true)
{
{
printf(
"acc_sensor_hibernate_off failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
bool result_available = false;
do
{
buffer_size))
{
printf(
"acc_detector_distance_prepare() failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
{
printf(
"acc_sensor_measure failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
{
printf(
"Sensor interrupt timeout\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
{
printf(
"acc_sensor_read failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
{
printf(
"acc_detector_distance_process failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
} while (!result_available);
{
printf(
"acc_sensor_hibernate_on failed\n");
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
return EXIT_FAILURE;
}
}
cleanup(distance_handle, distance_config, sensor, buffer, calibration_buffer);
printf(
"Application finished OK\n");
return EXIT_SUCCESS;
}
void *buffer,
void *calibration_buffer)
{
if (distance_config != NULL)
{
}
if (distance_handle != NULL)
{
}
if (sensor != NULL)
{
}
if (buffer != NULL)
{
}
if (calibration_buffer != NULL)
{
}
}
{
}
{
{
{
}
}
}