O7/TOF/App/app_tof_peoplecount.h

151 lines
5.1 KiB
C

/**
******************************************************************************
* @file : app_tof_peoplecount.h
* @author : IMG SW Application Team
* @brief : This file provides code for the configuration
* of the STMicroelectronics.X-CUBE-TOF1.3.2.0 instances.
******************************************************************************
*
* @attention
*
* Copyright (c) 2022 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.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __APP_TOF_PEOPLECOUNT_H
#define __APP_TOF_PEOPLECOUNT_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
/* Exported defines ----------------------------------------------------------*/
// People Counting defines
#define NOBODY 0
#define SOMEONE 1
#define LEFT 0
#define RIGHT 1
#define DOOR_JAM_2000 0
#define DOOR_JAM_2400 1
#define DOOR_JAM_3000 2
#define ON_SIDE 3
// define here the profile for your case.
#define PPC_PROFILE DOOR_JAM_2400
#define TRACE_PPC 1
// time budget in ms 20,33,50,100,200,500
#define tbms_20 20
#define tbms_33 33
#define tbms_50 50
#define tbms_100 100
#define tbms_200 200
#define tbms_500 500
//PPC_PROFILE DOOR_JAM_2400
#if PPC_PROFILE == DOOR_JAM_2400
#define PROFILE_STRING "DOOR_JAM_2400"
#define DISTANCES_ARRAY_SIZE 10 // nb of samples
#define MAX_DISTANCE 2400 // mm was 2400
#define MIN_DISTANCE 0 // mm
#define DIST_THRESHOLD 1600 // mm
#define ROWS_OF_SPADS 8 // 8x16 SPADs ROI
#define TIMING_BUDGET 33 //33 // was 20 ms, I found 33 ms has better succes rate with lower reflectance target
#define DISTANCE_MODE DISTANCE_MODE_LONG
#endif
#if ROWS_OF_SPADS == 4
#define FRONT_ZONE_CENTER 151
#define BACK_ZONE_CENTER 247
#elif ROWS_OF_SPADS == 6
#define FRONT_ZONE_CENTER 159
#define BACK_ZONE_CENTER 239
#elif ROWS_OF_SPADS == 8
#define FRONT_ZONE_CENTER 175 // was 167, see UM2555 on st.com, centre = 175 has better return signal rate for the ROI #1
#define BACK_ZONE_CENTER 231
#endif
/* Exported functions --------------------------------------------------------*/
enum distance_mode {
DISTANCE_MODE_SIDE=0,
DISTANCE_MODE_SHORT,
DISTANCE_MODE_LONG,
};
typedef struct STS_ZONE_CENTRE_BY_ROWS_OF_SPADS
{
uint8_t rows_of_spads;
uint8_t front_zone_center;
uint8_t back_zone_center;
} sts_zone_center_by_rows_of_spads_t;
typedef struct STS_PPC_CFG_Type {
uint8_t profile_name;
uint8_t distance_array_size;
uint16_t max_distance;
uint16_t min_distance;
uint16_t dist_threshold;
uint8_t rows_of_SPADS; /* minimum ROI 4,4 */
uint16_t timing_budget; /* TIMING_BUDGET, in ms possible values [15, 20, 33, 50, 100, 200, 500] */
uint8_t distance_mode; /* 1=short, 2=long, DISTANCE_MODE */
uint8_t front_zone_center;
uint8_t back_zone_center;
} sts_ppc_cfg_type_t;
typedef struct STS_People_Count_Sensor_Data_Type {
uint16_t Walk_In_People_Count;
uint16_t Walk_Out_People_Count;
uint16_t Walk_Around_People_Count;
uint8_t Count_Period;
uint8_t Count_Period_Unit;
uint16_t Sum_Day_Walk_In_People_Count;
uint16_t Sum_Day_Walk_Out_People_Count;
uint16_t Sum_Day_Walk_Around_People_Count;
uint16_t Sum_Week_Walk_In_People_Count;
uint16_t Sum_Week_Walk_Out_People_Count;
uint16_t Sum_Week_Walk_Around_People_Count;
uint16_t Sum_Month_Walk_In_People_Count;
uint16_t Sum_Month_Walk_Out_People_Count;
uint16_t Sum_Month_Walk_Around_People_Count;
uint16_t Sum_Year_Walk_In_People_Count;
uint16_t Sum_Year_Walk_Out_People_Count;
uint16_t Sum_Year_Walk_Around_People_Count;
uint32_t Sum_LifeCycle_Walk_In_People_Count;
uint32_t Sum_LifeCycle_Walk_Out_People_Count;
uint32_t Sum_LifeCycle_Walk_Around_People_Count;
} sts_people_count_sensor_data_t;
void STS_TOF_VL53LX_PeopleCounting_Process_Init(void);
void STS_TOF_VL53LX_PeopleCounting_Process_Start(void*);
int sts_tof_vl53lx_peoplecount_init(void);
int sts_tof_vl53lx_peoplecount_start(void);
//int sts_tof_vl53lx_peoplecount(void);
int ProcessPeopleCountingData(int16_t Distance, uint8_t zone, uint8_t RangeStatus);
void STS_people_count_sensor_Read(sts_people_count_sensor_data_t *sts_p2_sensor_data);
#ifdef __cplusplus
}
#endif
#endif /* __APP_TOF_PEOPLECOUNT_H */