revised for fall detection rss cfg
This commit is contained in:
parent
3ef3d81e8f
commit
1c82221611
|
@ -90,8 +90,9 @@ enum RSS_CFG_order{
|
||||||
|
|
||||||
#if defined(STS_O7)||defined(STS_O6)
|
#if defined(STS_O7)||defined(STS_O6)
|
||||||
|
|
||||||
enum sts_rss_config_t {
|
enum sts_rss_config_update_t {
|
||||||
STS_RSS_CONFIG_DEFAULT=0,
|
STS_RSS_CONFIG_NON=0,
|
||||||
|
STS_RSS_CONFIG_DEFAULT,
|
||||||
STS_RSS_CONFIG_SIMPLE,
|
STS_RSS_CONFIG_SIMPLE,
|
||||||
STS_RSS_CONFIG_FULL,
|
STS_RSS_CONFIG_FULL,
|
||||||
STS_RSS_CONFIG_FALL_DETECTION
|
STS_RSS_CONFIG_FALL_DETECTION
|
||||||
|
@ -212,6 +213,9 @@ typedef struct STS_OO_SensorStatusDataTypeDef
|
||||||
uint32_t event_sensor3_fall_stop_time;
|
uint32_t event_sensor3_fall_stop_time;
|
||||||
uint32_t event_sensor3_fall_duration;
|
uint32_t event_sensor3_fall_duration;
|
||||||
|
|
||||||
|
uint16_t event_sensor3_fall_distance;
|
||||||
|
uint16_t event_sensor3_fall_motionscore;
|
||||||
|
|
||||||
uint32_t event_sensor3_no_movement_start_time;
|
uint32_t event_sensor3_no_movement_start_time;
|
||||||
uint32_t event_sensor3_no_movement_stop_time;
|
uint32_t event_sensor3_no_movement_stop_time;
|
||||||
uint32_t event_sensor3_no_movement_duration;
|
uint32_t event_sensor3_no_movement_duration;
|
||||||
|
|
|
@ -35,6 +35,14 @@
|
||||||
#include "sys_app.h"
|
#include "sys_app.h"
|
||||||
#include "yunhorn_sts_prd_conf.h"
|
#include "yunhorn_sts_prd_conf.h"
|
||||||
#include "yunhorn_sts_sensors.h"
|
#include "yunhorn_sts_sensors.h"
|
||||||
|
|
||||||
|
#ifndef MIN
|
||||||
|
#define MIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) )
|
||||||
|
#endif
|
||||||
|
#ifndef MAX
|
||||||
|
#define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) )
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#define DEFAULT_START_M (0.2f)
|
#define DEFAULT_START_M (0.2f)
|
||||||
#define DEFAULT_LENGTH_M (1.4f)
|
#define DEFAULT_LENGTH_M (1.4f)
|
||||||
|
@ -113,7 +121,7 @@ volatile uint16_t sts_unconscious_threshold=1280, sts_unconscious_duration=0;
|
||||||
extern volatile uint8_t sts_rss_result, sts_rss_config_updated_flag, last_sts_rss_result;
|
extern volatile uint8_t sts_rss_result, sts_rss_config_updated_flag, last_sts_rss_result;
|
||||||
extern volatile uint16_t sts_distance_rss_distance, sts_sensor_install_height;
|
extern volatile uint16_t sts_distance_rss_distance, sts_sensor_install_height;
|
||||||
extern volatile uint8_t sts_work_mode;
|
extern volatile uint8_t sts_work_mode;
|
||||||
|
extern volatile STS_OO_SensorStatusDataTypeDef sts_o7_sensorData;
|
||||||
volatile float sts_presence_rss_distance, sts_presence_rss_score;
|
volatile float sts_presence_rss_distance, sts_presence_rss_score;
|
||||||
volatile STS_OO_RSS_SensorTuneDataTypeDef sts_presence_rss_config;
|
volatile STS_OO_RSS_SensorTuneDataTypeDef sts_presence_rss_config;
|
||||||
//static void update_configuration(acc_detector_presence_configuration_t presence_configuration);
|
//static void update_configuration(acc_detector_presence_configuration_t presence_configuration);
|
||||||
|
@ -347,6 +355,10 @@ int sts_presence_rss_fall_rise_detection(void)
|
||||||
|
|
||||||
switch (sts_rss_config_updated_flag)
|
switch (sts_rss_config_updated_flag)
|
||||||
{
|
{
|
||||||
|
case STS_RSS_CONFIG_NON:
|
||||||
|
APP_LOG(TS_OFF, VLEVEL_M,"\r\n##### YUNHORN STS *** Non *** cfg \n");
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
break;
|
||||||
case STS_RSS_CONFIG_DEFAULT:
|
case STS_RSS_CONFIG_DEFAULT:
|
||||||
set_default_configuration(presence_configuration);
|
set_default_configuration(presence_configuration);
|
||||||
APP_LOG(TS_OFF, VLEVEL_M,"\r\n##### YUNHORN STS *** Default *** cfg applied\n");
|
APP_LOG(TS_OFF, VLEVEL_M,"\r\n##### YUNHORN STS *** Default *** cfg applied\n");
|
||||||
|
@ -384,7 +396,7 @@ int sts_presence_rss_fall_rise_detection(void)
|
||||||
APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n");
|
APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
bool deactivated = false;
|
||||||
bool success = true;
|
bool success = true;
|
||||||
const int iterations = (DEFAULT_UPDATE_RATE_PRESENCE+1);
|
const int iterations = (DEFAULT_UPDATE_RATE_PRESENCE+1);
|
||||||
acc_detector_presence_result_t result;
|
acc_detector_presence_result_t result;
|
||||||
|
@ -407,7 +419,7 @@ int sts_presence_rss_fall_rise_detection(void)
|
||||||
//for (k=0; k<5; k++) {motion_in_zone[k]=0;}
|
//for (k=0; k<5; k++) {motion_in_zone[k]=0;}
|
||||||
if ((sts_work_mode == STS_DUAL_MODE)||(sts_work_mode == STS_RSS_MODE))
|
if ((sts_work_mode == STS_DUAL_MODE)||(sts_work_mode == STS_RSS_MODE))
|
||||||
{
|
{
|
||||||
for (int i = 0; i < (iterations/2); i++)
|
for (int i = 0; i < (iterations); i++)
|
||||||
{
|
{
|
||||||
success = acc_detector_presence_get_next(handle, &result);
|
success = acc_detector_presence_get_next(handle, &result);
|
||||||
if (!success)
|
if (!success)
|
||||||
|
@ -448,12 +460,17 @@ int sts_presence_rss_fall_rise_detection(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15ms, DEFAULT_UPDATE_RATE);
|
acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15ms, DEFAULT_UPDATE_RATE);
|
||||||
//acc_integration_sleep_ms(1);
|
//acc_integration_sleep_ms(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deactivated = acc_detector_presence_deactivate(handle);
|
||||||
|
acc_detector_presence_destroy(&handle);
|
||||||
|
acc_rss_deactivate();
|
||||||
|
|
||||||
APP_LOG(TS_OFF, VLEVEL_H, "\r\n First Half --- Motion Count = %u \r\n", motion_count);
|
APP_LOG(TS_OFF, VLEVEL_H, "\r\n First Half --- Motion Count = %u \r\n", motion_count);
|
||||||
|
|
||||||
acc_detector_presence_deactivate(handle);
|
//acc_detector_presence_deactivate(handle);
|
||||||
}
|
}
|
||||||
else if ((sts_work_mode == STS_UNI_MODE))
|
else if ((sts_work_mode == STS_UNI_MODE))
|
||||||
{
|
{
|
||||||
|
@ -474,15 +491,19 @@ int sts_presence_rss_fall_rise_detection(void)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
// activated already
|
||||||
|
#if 0
|
||||||
if (!acc_detector_presence_activate(handle))
|
if (!acc_detector_presence_activate(handle))
|
||||||
{
|
{
|
||||||
APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n");
|
APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
acc_detector_presence_configuration_destroy(&presence_configuration);
|
acc_detector_presence_configuration_destroy(&presence_configuration);
|
||||||
|
|
||||||
// set to full length of iteration
|
// set to full length of iteration
|
||||||
for (int i = 0; i < (iterations/2); i++)
|
for (int i = 0; i < (iterations); i++)
|
||||||
{
|
{
|
||||||
success = acc_detector_presence_get_next(handle, &result);
|
success = acc_detector_presence_get_next(handle, &result);
|
||||||
if (!success)
|
if (!success)
|
||||||
|
@ -524,25 +545,46 @@ int sts_presence_rss_fall_rise_detection(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15 ms, DEFAULT_UPDATE_RATE);
|
acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15 ms, DEFAULT_UPDATE_RATE);
|
||||||
//acc_integration_sleep_ms(1);
|
//acc_integration_sleep_ms(1);
|
||||||
}
|
}
|
||||||
|
deactivated = acc_detector_presence_deactivate(handle);
|
||||||
|
acc_detector_presence_destroy(&handle);
|
||||||
|
acc_rss_deactivate();
|
||||||
|
|
||||||
APP_LOG(TS_OFF, VLEVEL_H, "\r\n Second Half --- Motion Count Sum to = %u \r\n", motion_count);
|
|
||||||
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n Second Half --- Motion Count Sum to = %u \r\n", motion_count);
|
||||||
|
|
||||||
//APP_LOG(TS_OFF, VLEVEL_L,"Second Half, Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count);
|
//APP_LOG(TS_OFF, VLEVEL_L,"Second Half, Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count);
|
||||||
|
|
||||||
motion_count = motion_count%DEFAULT_MOTION_DATASET_LEN; // get all required number of motion data
|
motion_count = motion_count%DEFAULT_MOTION_DATASET_LEN; // get all required number of motion data
|
||||||
|
|
||||||
//sts_fall_rising_detected_result = STS_PRESENCE_NORMAL;
|
//sts_fall_rising_detected_result = STS_PRESENCE_NORMAL;
|
||||||
if ((sts_presence_fall_detection == TRUE)&& (motion_count>10))
|
|
||||||
STS_YunhornCheckStandardDeviation();
|
if ((sts_presence_fall_detection == TRUE)&& (motion_count> (DEFAULT_MOTION_DATASET_LEN/2)))
|
||||||
|
{
|
||||||
|
// major fall/rise/laydown/unconscious suggestion process
|
||||||
|
STS_YunhornCheckStandardDeviation();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
average_distance = (1000.0f*average_distance)/average_result; // in meters
|
||||||
|
average_score = (1000.0f*average_score)/average_result;
|
||||||
|
|
||||||
|
sts_presence_rss_distance = average_distance;
|
||||||
|
sts_presence_rss_score = average_score;
|
||||||
|
sts_rss_result = (average_result > (DEFAULT_UPDATE_RATE_PRESENCE/2))? 1: 0;
|
||||||
|
|
||||||
|
//if (average_result) //if (average_score !=0) //if (sts_rss_result)
|
||||||
|
{
|
||||||
|
APP_LOG(TS_OFF, VLEVEL_L,"\r\n######## Motion: %u Distance=%u mm, Score=%u Average_result=%u out of %u \r\n",
|
||||||
|
(uint8_t)sts_rss_result,(int) sts_presence_rss_distance, (int)(sts_presence_rss_score), (int)average_result, (int)iterations);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// RSS feature 1: Motion, No-motion process
|
// RSS feature 1: Motion, No-motion process
|
||||||
sts_rss_result = (average_result > 3)? 1: 0;
|
|
||||||
APP_LOG(TS_OFF, VLEVEL_H, "\r\n MotionDetect Average result=%u : RSS result -- = %u \r\n", average_result, sts_rss_result);
|
|
||||||
|
|
||||||
if (sts_rss_result) {
|
if (sts_rss_result) {
|
||||||
LED1_ON;
|
LED1_ON;
|
||||||
|
@ -575,57 +617,19 @@ int sts_presence_rss_fall_rise_detection(void)
|
||||||
OnSensorRSS3CStateChanged();
|
OnSensorRSS3CStateChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MIN
|
|
||||||
#define MIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MAX
|
|
||||||
#define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef LOG_RSS
|
#ifdef LOG_RSS
|
||||||
|
|
||||||
APP_LOG(TS_OFF, VLEVEL_H,"\r\nSensor at Ceiling Height: %u mm\r\n",(uint16_t)sts_sensor_install_height);
|
APP_LOG(TS_OFF, VLEVEL_H,"\r\nSensor at Ceiling Height: %u mm\r\n",(uint16_t)sts_sensor_install_height);
|
||||||
APP_LOG(TS_OFF, VLEVEL_H,"\r\n|Motion Distance Zone| ##### |Height cm|\r\n");
|
APP_LOG(TS_OFF, VLEVEL_H,"\r\n|Motion Distance Zone| ##### |Height cm|\r\n");
|
||||||
uint8_t kk = (uint8_t)(sts_sensor_install_height/400+1);
|
uint8_t kk = (uint8_t)(sts_sensor_install_height/400+1);
|
||||||
|
|
||||||
APP_LOG(TS_OFF, VLEVEL_L,"\r\n|-----------Ceiling-------Sensor---V-----|\r\n");
|
APP_LOG(TS_OFF, VLEVEL_L,"\r\n|-----------Ceiling-------Sensor---V-----|\r\n");
|
||||||
for (uint8_t k=0; k<=kk; k++)
|
for (uint8_t k=0; k<=kk; k++)
|
||||||
{
|
{
|
||||||
if (motion_in_hs_zone[kk-k][thiscnt]>0) {
|
if (motion_in_hs_zone[kk-k][thiscnt]>0) APP_LOG(TS_OFF, VLEVEL_L,"\r\n| %2u | %4u | %4u |\r\n", kk-k, (uint8_t)motion_in_hs_zone[kk-k][thiscnt], (int)(kk-k+1)*40);
|
||||||
|
else APP_LOG(TS_OFF, VLEVEL_L,"\r\n| %2u | | |\r\n", kk-k);
|
||||||
APP_LOG(TS_OFF, VLEVEL_L,"\r\n| %2u | %4u | %4u |\r\n", kk-k, (uint8_t)motion_in_hs_zone[kk-k][thiscnt], (int)(kk-k+1)*40);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
APP_LOG(TS_OFF, VLEVEL_L,"\r\n| %2u | | |\r\n", kk-k);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
APP_LOG(TS_OFF, VLEVEL_L,"\r\n|-----------Floor Ground-----------^-----|\r\n");
|
APP_LOG(TS_OFF, VLEVEL_L,"\r\n|-----------Floor Ground-----------^-----|\r\n");
|
||||||
|
|
||||||
#endif
|
|
||||||
#ifdef LOG_RSS
|
|
||||||
average_distance = (1000.0f*average_distance)/average_result; // in meters
|
|
||||||
average_score = (1000.0f*average_score)/average_result;
|
|
||||||
sts_presence_rss_distance = average_distance;
|
|
||||||
sts_presence_rss_score = average_score;
|
|
||||||
if (average_score) //if (average_score !=0) //if (sts_rss_result)
|
|
||||||
{
|
|
||||||
|
|
||||||
APP_LOG(TS_OFF, VLEVEL_L,"\r\n######## Motion: %u Distance=%u mm, Score=%u Average_result=%u out of %u \r\n",
|
|
||||||
(uint8_t)sts_rss_result,(int) average_distance, (int)(average_score), (int)average_result, (int)iterations);
|
|
||||||
for (uint8_t j=0; j<5; j++) {
|
|
||||||
APP_LOG(TS_OFF, VLEVEL_M,"\r\n######## Motion: %u Distance=%u mm, Score=%u Average_result=%u out of %u \r\n",
|
|
||||||
(uint8_t)sts_rss_result,(int) average_distance, (int)(average_score), (int)average_result, (int)iterations);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool deactivated = acc_detector_presence_deactivate(handle);
|
|
||||||
|
|
||||||
acc_detector_presence_destroy(&handle);
|
|
||||||
|
|
||||||
acc_rss_deactivate();
|
|
||||||
|
|
||||||
if (deactivated && success)
|
if (deactivated && success)
|
||||||
{
|
{
|
||||||
|
@ -737,6 +741,10 @@ void STS_YunhornCheckStandardDeviation(void)
|
||||||
//#ifdef LOG_RSS
|
//#ifdef LOG_RSS
|
||||||
APP_LOG(TS_OFF, VLEVEL_M, "\r\n\n-------------Motion Average (score)=%04u; Standard_Variance (score)=%04u \r\n",
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n\n-------------Motion Average (score)=%04u; Standard_Variance (score)=%04u \r\n",
|
||||||
(int)(average_presence_score), (int)(standard_variance_presence_score));
|
(int)(average_presence_score), (int)(standard_variance_presence_score));
|
||||||
|
|
||||||
|
sts_o7_sensorData.event_sensor3_fall_distance =(uint16_t)average_presence_distance;
|
||||||
|
sts_o7_sensorData.event_sensor3_fall_motionscore =(uint16_t)average_presence_score;
|
||||||
|
|
||||||
//#endif
|
//#endif
|
||||||
//#ifdef LOG_RSS
|
//#ifdef LOG_RSS
|
||||||
APP_LOG(TS_OFF, VLEVEL_M, "\r\n-------------ROC Dist Average (mm/s) =%6u; Standard_Variance =%6u (mm/s)\r\n",
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n-------------ROC Dist Average (mm/s) =%6u; Standard_Variance =%6u (mm/s)\r\n",
|
||||||
|
|
|
@ -67,7 +67,7 @@ volatile uint8_t sts_soap_level_state;
|
||||||
volatile STS_OO_SensorStatusDataTypeDef sts_o7_sensorData;
|
volatile STS_OO_SensorStatusDataTypeDef sts_o7_sensorData;
|
||||||
volatile uint16_t sts_distance_rss_distance=0, sts_sensor_install_height=0;//in mm
|
volatile uint16_t sts_distance_rss_distance=0, sts_sensor_install_height=0;//in mm
|
||||||
extern volatile float sts_presence_rss_distance, sts_presence_rss_score;
|
extern volatile float sts_presence_rss_distance, sts_presence_rss_score;
|
||||||
volatile uint8_t sts_rss_config_updated_flag = 0;
|
volatile uint8_t sts_rss_config_updated_flag = STS_RSS_CONFIG_NON;
|
||||||
extern volatile uint8_t sts_occupancy_overtime_state;
|
extern volatile uint8_t sts_occupancy_overtime_state;
|
||||||
extern volatile distance_measure_cfg_t distance_cfg;
|
extern volatile distance_measure_cfg_t distance_cfg;
|
||||||
extern volatile uint16_t sts_fall_rising_pattern_factor1;
|
extern volatile uint16_t sts_fall_rising_pattern_factor1;
|
||||||
|
@ -273,9 +273,20 @@ void STS_YunhornSTSEventP2_Process(void)
|
||||||
//STS_Lamp_Bar_Refresh(); //TODO XXX eliminate refresh every second.... try
|
//STS_Lamp_Bar_Refresh(); //TODO XXX eliminate refresh every second.... try
|
||||||
if ((sts_work_mode >= STS_RSS_MODE) && (sts_work_mode <= STS_TOF_RSS_MODE))
|
if ((sts_work_mode >= STS_RSS_MODE) && (sts_work_mode <= STS_TOF_RSS_MODE))
|
||||||
{
|
{
|
||||||
if (sts_presence_fall_detection == FALSE) { // otherwise, has been set to full/simple/etc.
|
switch (sts_work_mode) {
|
||||||
|
case STS_RSS_MODE:
|
||||||
|
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
|
||||||
|
break;
|
||||||
|
case STS_DUAL_MODE:
|
||||||
|
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
|
||||||
|
break;
|
||||||
|
case STS_UNI_MODE:
|
||||||
sts_rss_config_updated_flag = STS_RSS_CONFIG_FALL_DETECTION;
|
sts_rss_config_updated_flag = STS_RSS_CONFIG_FALL_DETECTION;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
sts_presence_rss_fall_rise_detection();
|
sts_presence_rss_fall_rise_detection();
|
||||||
|
|
||||||
sts_rss_result_changed_flag = (sts_rss_result == last_sts_rss_result)? 0:1;
|
sts_rss_result_changed_flag = (sts_rss_result == last_sts_rss_result)? 0:1;
|
||||||
|
@ -734,22 +745,25 @@ void STS_PRESENCE_SENSOR_Init_Send_Data(void)
|
||||||
sts_o7_sensorData.unconscious_duration = 0x0;
|
sts_o7_sensorData.unconscious_duration = 0x0;
|
||||||
sts_o7_sensorData.no_movement_duration = 0x0;
|
sts_o7_sensorData.no_movement_duration = 0x0;
|
||||||
|
|
||||||
sts_o7_sensorData.event_sensor1_start_time = 0x0;
|
sts_o7_sensorData.event_sensor1_start_time = 0x0;
|
||||||
sts_o7_sensorData.event_sensor1_duration = 0x0;
|
sts_o7_sensorData.event_sensor1_duration = 0x0;
|
||||||
|
|
||||||
sts_o7_sensorData.event_sensor2_start_time = 0x0;
|
sts_o7_sensorData.event_sensor2_start_time = 0x0;
|
||||||
sts_o7_sensorData.event_sensor2_duration = 0x0;
|
sts_o7_sensorData.event_sensor2_duration = 0x0;
|
||||||
sts_o7_sensorData.event_sensor2_start_timestamp = 0x0;
|
sts_o7_sensorData.event_sensor2_start_timestamp = 0x0;
|
||||||
sts_o7_sensorData.event_sensor2_stop_timestamp = 0x0;
|
sts_o7_sensorData.event_sensor2_stop_timestamp = 0x0;
|
||||||
|
|
||||||
sts_o7_sensorData.event_sensor3_motion_start_time = 0x0;
|
sts_o7_sensorData.event_sensor3_motion_start_time = 0x0;
|
||||||
sts_o7_sensorData.event_sensor3_motion_duration = 0x0;
|
sts_o7_sensorData.event_sensor3_motion_duration = 0x0;
|
||||||
sts_o7_sensorData.event_sensor3_fall_start_time = 0x0;
|
sts_o7_sensorData.event_sensor3_fall_start_time = 0x0;
|
||||||
sts_o7_sensorData.event_sensor3_fall_start_time_stamp = 0x0;
|
sts_o7_sensorData.event_sensor3_fall_start_time_stamp = 0x0;
|
||||||
sts_o7_sensorData.event_sensor3_fall_duration = 0x0;
|
sts_o7_sensorData.event_sensor3_fall_duration = 0x0;
|
||||||
sts_o7_sensorData.event_sensor3_fall_stop_time_stamp = 0x0;
|
sts_o7_sensorData.event_sensor3_fall_stop_time_stamp = 0x0;
|
||||||
sts_o7_sensorData.event_sensor4_start_time = 0x0;
|
sts_o7_sensorData.event_sensor4_start_time = 0x0;
|
||||||
sts_o7_sensorData.event_sensor4_duration = 0x0;
|
sts_o7_sensorData.event_sensor4_duration = 0x0;
|
||||||
|
sts_o7_sensorData.event_sensor3_fall_distance = 0x0;
|
||||||
|
sts_o7_sensorData.event_sensor3_fall_motionscore = 0x0;
|
||||||
|
|
||||||
|
|
||||||
sts_o7_sensorData.battery_Pct = 99; // 99% as init value
|
sts_o7_sensorData.battery_Pct = 99; // 99% as init value
|
||||||
sts_o7_sensorData.dutycycletimelevel = 1;
|
sts_o7_sensorData.dutycycletimelevel = 1;
|
||||||
|
@ -760,6 +774,8 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
|
||||||
{
|
{
|
||||||
sensor_data->lamp_bar_color = sts_lamp_bar_color;
|
sensor_data->lamp_bar_color = sts_lamp_bar_color;
|
||||||
sensor_data->workmode = sts_work_mode;
|
sensor_data->workmode = sts_work_mode;
|
||||||
|
|
||||||
|
// #1 for HALL_ELEMENT, DOOR CONTACT, SENSOR STATE PROCESS
|
||||||
sensor_data->state_sensor1_on_off = HALL1_STATE;//sts_hall1_read; //sts_hsts_reed_hall_result; // sts_hall1_read
|
sensor_data->state_sensor1_on_off = HALL1_STATE;//sts_hall1_read; //sts_hsts_reed_hall_result; // sts_hall1_read
|
||||||
sensor_data->state_sensor2_on_off = HALL2_STATE;//sts_hall2_read; //sts_emergency_button_pushed; //sts_hall2_read
|
sensor_data->state_sensor2_on_off = HALL2_STATE;//sts_hall2_read; //sts_emergency_button_pushed; //sts_hall2_read
|
||||||
sensor_data->state_sensor3_on_off = sts_rss_result;
|
sensor_data->state_sensor3_on_off = sts_rss_result;
|
||||||
|
@ -778,17 +794,18 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
|
||||||
sts_o7_sensorData.event_sensor2_stop_timestamp = 0;
|
sts_o7_sensorData.event_sensor2_stop_timestamp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #2 for MOTION RELATED SENSOR STATE PROCESS, OCCUPY/VACANT/OVERSTAY/LONGSTAY/UNCONSCIOUS
|
||||||
if (sts_rss_result == STS_RESULT_MOTION)
|
if (sts_rss_result == STS_RESULT_MOTION)
|
||||||
{
|
{
|
||||||
sensor_data->rss_presence_distance = (uint16_t)(sts_presence_rss_distance)&0xFFFF;
|
sensor_data->rss_presence_distance = (uint16_t)(sts_presence_rss_distance);
|
||||||
sensor_data->rss_presence_score = (uint16_t)(sts_presence_rss_score)&0xFFFF;
|
sensor_data->rss_presence_score = (uint16_t)(sts_presence_rss_score);
|
||||||
// uint8_t sts_unconscious_state;
|
// uint8_t sts_unconscious_state;
|
||||||
// uint16_t sts_unconscious_threshold, sts_unconscious_threshold_duration;
|
// uint16_t sts_unconscious_threshold, sts_unconscious_threshold_duration;
|
||||||
} else {
|
|
||||||
|
|
||||||
sensor_data->rss_presence_distance = 0x0;
|
|
||||||
sensor_data->rss_presence_score = 0x0;
|
|
||||||
}
|
}
|
||||||
|
//else {
|
||||||
|
// sensor_data->rss_presence_distance = 0x0;
|
||||||
|
// sensor_data->rss_presence_score = 0x0;
|
||||||
|
// }
|
||||||
|
|
||||||
// no_movement or unconscious duration
|
// no_movement or unconscious duration
|
||||||
sensor_data->unconscious_state = ((sts_fall_rising_detected_result == STS_PRESENCE_UNCONSCIOUS) ||
|
sensor_data->unconscious_state = ((sts_fall_rising_detected_result == STS_PRESENCE_UNCONSCIOUS) ||
|
||||||
|
@ -804,7 +821,6 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
|
||||||
sensor_data->unconscious_duration, sts_motionless_duration_threshold_in_min*60);
|
sensor_data->unconscious_duration, sts_motionless_duration_threshold_in_min*60);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Over stay, long stay duration and state
|
// Over stay, long stay duration and state
|
||||||
sensor_data->over_stay_state = sts_o7_sensorData.over_stay_state;
|
sensor_data->over_stay_state = sts_o7_sensorData.over_stay_state;
|
||||||
sensor_data->over_stay_duration = sts_o7_sensorData.event_sensor1_duration;
|
sensor_data->over_stay_duration = sts_o7_sensorData.event_sensor1_duration;
|
||||||
|
@ -815,9 +831,10 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
|
||||||
sts_occupancy_overtime_threshold_in_10min*60);
|
sts_occupancy_overtime_threshold_in_10min*60);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fall detection and duration, confirmation duration
|
// #3 for FALL DETECTION, FALL, RISING, LAYDOWN DURATION CONFIRMATION STATE PROCESS
|
||||||
sensor_data->fall_state = sts_fall_rising_detected_result;
|
sensor_data->fall_state = sts_fall_rising_detected_result;
|
||||||
if ((sts_fall_rising_detected_result == STS_PRESENCE_FALL)||
|
if ((sts_fall_rising_detected_result == STS_PRESENCE_FALL)||
|
||||||
|
(sts_fall_rising_detected_result == STS_PRESENCE_RISING)||
|
||||||
(sts_fall_rising_detected_result == STS_PRESENCE_LAYDOWN))
|
(sts_fall_rising_detected_result == STS_PRESENCE_LAYDOWN))
|
||||||
{
|
{
|
||||||
APP_LOG(TS_OFF, VLEVEL_M, "\r\n......FALL RISING DETECTION RESULT: %25s \r\n",
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n......FALL RISING DETECTION RESULT: %25s \r\n",
|
||||||
|
@ -826,7 +843,8 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
|
||||||
sensor_data->fall_gravity = (uint8_t)sts_roc_acc_standard_variance;
|
sensor_data->fall_gravity = (uint8_t)sts_roc_acc_standard_variance;
|
||||||
sensor_data->event_sensor3_fall_start_time_stamp = sts_o7_sensorData.event_sensor3_fall_start_time_stamp;
|
sensor_data->event_sensor3_fall_start_time_stamp = sts_o7_sensorData.event_sensor3_fall_start_time_stamp;
|
||||||
sensor_data->event_sensor3_fall_stop_time_stamp = sts_o7_sensorData.event_sensor3_fall_stop_time_stamp;
|
sensor_data->event_sensor3_fall_stop_time_stamp = sts_o7_sensorData.event_sensor3_fall_stop_time_stamp;
|
||||||
|
sensor_data->event_sensor3_fall_distance = (uint16_t)(sts_o7_sensorData.event_sensor3_fall_distance);
|
||||||
|
sensor_data->event_sensor3_fall_motionscore = (uint16_t)(sts_o7_sensorData.event_sensor3_fall_motionscore);
|
||||||
} else {
|
} else {
|
||||||
sensor_data->fall_speed = 0;
|
sensor_data->fall_speed = 0;
|
||||||
sensor_data->fall_gravity = 0;
|
sensor_data->fall_gravity = 0;
|
||||||
|
@ -834,9 +852,10 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
|
||||||
sensor_data->event_sensor3_fall_stop_time_stamp =0;
|
sensor_data->event_sensor3_fall_stop_time_stamp =0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For occupancy over time process
|
|
||||||
//SysTime_t occupy_check_time = SysTimeGetMcuTime();
|
|
||||||
#if 0
|
#if 0
|
||||||
|
// TODO XXXX
|
||||||
|
// FOR ALARM MUTE AND RESET
|
||||||
if ((sts_occupancy_overtime_threshold_in_10min != 0) && (event_start_time !=0))
|
if ((sts_occupancy_overtime_threshold_in_10min != 0) && (event_start_time !=0))
|
||||||
{
|
{
|
||||||
if (sts_occupancy_overtime_state == 1U) {
|
if (sts_occupancy_overtime_state == 1U) {
|
||||||
|
@ -923,7 +942,7 @@ void STS_PRESENCE_SENSOR_RSS_Init(void)
|
||||||
{
|
{
|
||||||
APP_LOG(TS_ON, VLEVEL_H, "##### YunHorn SmarToilets(r) MEMS RSS Initializing \r\n");
|
APP_LOG(TS_ON, VLEVEL_H, "##### YunHorn SmarToilets(r) MEMS RSS Initializing \r\n");
|
||||||
|
|
||||||
PME_ON;
|
// PME_ON;
|
||||||
|
|
||||||
//if ((sts_distance_rss_distance==0)&&(sts_sensor_install_height==0))
|
//if ((sts_distance_rss_distance==0)&&(sts_sensor_install_height==0))
|
||||||
{
|
{
|
||||||
|
@ -944,9 +963,21 @@ void STS_PRESENCE_SENSOR_RSS_Init(void)
|
||||||
|
|
||||||
STS_PRESENCE_SENSOR_NVM_CFG();
|
STS_PRESENCE_SENSOR_NVM_CFG();
|
||||||
|
|
||||||
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
|
switch (sts_work_mode)
|
||||||
|
{
|
||||||
|
case STS_RSS_MODE:
|
||||||
|
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
|
||||||
|
break;
|
||||||
|
case STS_DUAL_MODE:
|
||||||
|
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STS_UNI_MODE:
|
||||||
|
sts_rss_config_updated_flag = STS_RSS_CONFIG_FALL_DETECTION;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -992,7 +1023,7 @@ void STS_PRESENCE_SENSOR_Function_Test_Process(uint8_t *self_test_result, uint8_
|
||||||
}
|
}
|
||||||
HAL_Delay(1000);
|
HAL_Delay(1000);
|
||||||
|
|
||||||
memcpy(self_test_result, bring_up_result, 10);
|
UTIL_MEM_cpy_8(self_test_result, bring_up_result, 10);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ extern volatile uint8_t sts_fall_rising_detected_result, sts_fall_rising_detecte
|
||||||
extern volatile uint32_t event_start_time, event_stop_time;
|
extern volatile uint32_t event_start_time, event_stop_time;
|
||||||
extern volatile uint16_t sts_unconscious_threshold;
|
extern volatile uint16_t sts_unconscious_threshold;
|
||||||
volatile uint8_t sts_occupancy_overtime_state = 0;
|
volatile uint8_t sts_occupancy_overtime_state = 0;
|
||||||
volatile uint8_t sts_presence_fall_detection=TRUE;
|
volatile uint8_t sts_presence_fall_detection=FALSE;
|
||||||
volatile uint32_t SamplingPeriodicity = 3000; //unit ms
|
volatile uint32_t SamplingPeriodicity = 3000; //unit ms
|
||||||
volatile uint32_t HeartBeatPeriodicity = 120000; //unit ms
|
volatile uint32_t HeartBeatPeriodicity = 120000; //unit ms
|
||||||
volatile uint8_t STS_LoRa_WAN_Joined = 0;
|
volatile uint8_t STS_LoRa_WAN_Joined = 0;
|
||||||
|
@ -999,10 +999,10 @@ static void SendTxData(void)
|
||||||
AppData.Buffer[i++] = (uint8_t)(sensorData.state_sensor4_on_off)&0xff; //06 Sensor head #4 status ALARM MUTE
|
AppData.Buffer[i++] = (uint8_t)(sensorData.state_sensor4_on_off)&0xff; //06 Sensor head #4 status ALARM MUTE
|
||||||
AppData.Buffer[i++] = (uint8_t)(sensorData.state_sensor5_on_off)&0xff; //07 Sensor head #5 status ALARM RESET
|
AppData.Buffer[i++] = (uint8_t)(sensorData.state_sensor5_on_off)&0xff; //07 Sensor head #5 status ALARM RESET
|
||||||
|
|
||||||
AppData.Buffer[i++] = (uint8_t)(sensorData.rss_presence_distance>>8)&0xff; //08 MSB distance
|
AppData.Buffer[i++] = (uint8_t)(sensorData.event_sensor3_fall_distance>>8)&0xff; //08 MSB distance
|
||||||
AppData.Buffer[i++] = (uint8_t)(sensorData.rss_presence_distance)&0xff; //09 LSB distance
|
AppData.Buffer[i++] = (uint8_t)(sensorData.event_sensor3_fall_distance)&0xff; //09 LSB distance
|
||||||
AppData.Buffer[i++] = (uint8_t)(sensorData.rss_presence_score>>8)&0xff; //10 MSB score
|
AppData.Buffer[i++] = (uint8_t)(sensorData.event_sensor3_fall_motionscore>>8)&0xff; //10 MSB score
|
||||||
AppData.Buffer[i++] = (uint8_t)(sensorData.rss_presence_score)&0xff; //11 LSB score
|
AppData.Buffer[i++] = (uint8_t)(sensorData.event_sensor3_fall_motionscore)&0xff; //11 LSB score
|
||||||
|
|
||||||
AppData.Buffer[i++] = (uint8_t)(sensorData.unconscious_state)&0xff; //12 unconscious state detected or not
|
AppData.Buffer[i++] = (uint8_t)(sensorData.unconscious_state)&0xff; //12 unconscious state detected or not
|
||||||
AppData.Buffer[i++] = (uint8_t)(sensorData.fall_state)&0xff; //13 fall detected or not
|
AppData.Buffer[i++] = (uint8_t)(sensorData.fall_state)&0xff; //13 fall detected or not
|
||||||
|
@ -1067,7 +1067,11 @@ static void SendTxData(void)
|
||||||
APP_LOG(TS_OFF, VLEVEL_L,
|
APP_LOG(TS_OFF, VLEVEL_L,
|
||||||
"\r\n######| S3-Motion |\r\n"
|
"\r\n######| S3-Motion |\r\n"
|
||||||
"\r\n######| %d |\r\n",sensorData.state_sensor3_on_off);
|
"\r\n######| %d |\r\n",sensorData.state_sensor3_on_off);
|
||||||
|
} else {
|
||||||
|
APP_LOG(TS_OFF, VLEVEL_M,"\r\n\n**************************************** UNKNOWN MODE \r\n");
|
||||||
}
|
}
|
||||||
|
} else if (sensor_data_ready == 0) {
|
||||||
|
APP_LOG(TS_OFF, VLEVEL_M,"\r\n\n**************************************** SENSOR_DATA_READY =%u \r\n", sensor_data_ready);
|
||||||
}
|
}
|
||||||
|
|
||||||
AppData.BufferSize = (uint8_t)(sts_service_mask > STS_SERVICE_MASK_L1? 0:i)&0xff;;
|
AppData.BufferSize = (uint8_t)(sts_service_mask > STS_SERVICE_MASK_L1? 0:i)&0xff;;
|
||||||
|
@ -2429,7 +2433,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
|
||||||
//sts_service_mask = STS_SERVICE_MASK_L0;
|
//sts_service_mask = STS_SERVICE_MASK_L0;
|
||||||
//sts_lamp_bar_color = STS_GREEN;
|
//sts_lamp_bar_color = STS_GREEN;
|
||||||
sts_presence_fall_detection=FALSE;
|
sts_presence_fall_detection=FALSE;
|
||||||
sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
|
sts_rss_config_updated_flag = STS_RSS_CONFIG_NON;
|
||||||
|
|
||||||
switch (sts_work_mode) {
|
switch (sts_work_mode) {
|
||||||
case STS_NETWORK_MODE:
|
case STS_NETWORK_MODE:
|
||||||
|
@ -2461,6 +2465,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
sts_cfg_nvm.sts_ioc_mask = STS_IOC_MASK_NONE;
|
sts_cfg_nvm.sts_ioc_mask = STS_IOC_MASK_NONE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue