---- minor change for unconscious detection ---

This commit is contained in:
Yunhorn 2024-07-25 13:07:15 +08:00
parent 6b2cb5b069
commit cbe349ddff
3 changed files with 47 additions and 20 deletions

View File

@ -182,7 +182,6 @@ typedef struct STS_OO_SensorStatusDataTypeDef
uint16_t occupancy_duration; // sensor 3, motion detection duration uint16_t occupancy_duration; // sensor 3, motion detection duration
uint32_t fall_laydown_duration; // sensor 3, fall down not rise up duration uint32_t fall_laydown_duration; // sensor 3, fall down not rise up duration
uint32_t no_movement_duration; uint32_t no_movement_duration;
uint32_t unconcious_duration;
uint8_t occupancy_over_stay_state; // uint8_t occupancy_over_stay_state; //
uint8_t battery_Pct; /* % of battery two digits, 88% (00-99)% */ uint8_t battery_Pct; /* % of battery two digits, 88% (00-99)% */
uint8_t dutycycletimelevel; /* level=0,255 */ uint8_t dutycycletimelevel; /* level=0,255 */

View File

@ -63,8 +63,9 @@ extern volatile sts_cfg_nvm_t sts_cfg_nvm;
extern volatile uint8_t sts_fall_detection_acc_threshold, sts_fall_detection_depth_threshold, sts_occupancy_overtime_threshold_in_10min; extern volatile uint8_t sts_fall_detection_acc_threshold, sts_fall_detection_depth_threshold, sts_occupancy_overtime_threshold_in_10min;
extern volatile uint8_t sts_fall_rising_detected_result_changed_flag; extern volatile uint8_t sts_fall_rising_detected_result_changed_flag;
extern volatile uint8_t last_sts_fall_rising_detected_result; extern volatile uint8_t last_sts_fall_rising_detected_result;
extern volatile uint8_t sts_unconscious_state;
extern volatile uint16_t sts_unconscious_threshold, sts_unconscious_duration;
extern volatile uint16_t sts_motionless_duration_threshold_in_min;
extern volatile uint8_t sts_emergency_button_pushed, sts_rss_2nd_result,sts_tof_result, sts_status_color, sts_lamp_bar_color, sts_service_mask; extern volatile uint8_t sts_emergency_button_pushed, sts_rss_2nd_result,sts_tof_result, sts_status_color, sts_lamp_bar_color, sts_service_mask;
extern volatile distance_measure_cfg_t distance_cfg; extern volatile distance_measure_cfg_t distance_cfg;
extern uint8_t sts_fall_rising_detected_result; extern uint8_t sts_fall_rising_detected_result;
@ -727,33 +728,46 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
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)&0xFFFF;
sensor_data->rss_presence_score = (uint16_t)(sts_presence_rss_score)&0xFFFF; sensor_data->rss_presence_score = (uint16_t)(sts_presence_rss_score)&0xFFFF;
// 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 { } else {
sensor_data->rss_presence_distance = 0x0; sensor_data->rss_presence_distance = 0x0;
sensor_data->rss_presence_score = 0x0; sensor_data->rss_presence_score = 0x0;
} }
sensor_data->unconscious_state=(sts_fall_rising_detected_result == STS_PRESENCE_UNCONSCIOUS)? 1:0;
sensor_data->over_stay_state = sts_o7_sensorData.over_stay_state;
sensor_data->over_stay_duration = sts_o7_sensorData.event_sensor1_duration;
// no_movement or unconcious duration // no_movement or unconcious duration
sensor_data->unconscious_state = (sts_fall_rising_detected_result == STS_PRESENCE_UNCONSCIOUS)? 1:0;
sensor_data->unconscious_duration = sts_o7_sensorData.event_sensor3_unconcious_duration; sensor_data->unconscious_duration = sts_o7_sensorData.event_sensor3_unconcious_duration;
sensor_data->no_movement_duration = sts_o7_sensorData.event_sensor3_no_movement_duration; sensor_data->no_movement_duration = sts_o7_sensorData.event_sensor3_no_movement_duration;
if (sensor_data->over_stay_state !=0) if (sensor_data->unconscious_state !=0)
{ {
APP_LOG(TS_OFF,VLEVEL_L,"\r\n ... Over Stay Duration = %u Sec [Threshold: %u Seconds]\r\n", sensor_data->over_stay_duration, sts_occupancy_overtime_threshold_in_10min*60); APP_LOG(TS_OFF,VLEVEL_L,"\r\n ... Unconscious or No Movement Duration = %u Sec [Threshold: %u Seconds]\r\n",
sensor_data->unconscious_duration, sts_motionless_duration_threshold_in_min*60);
} }
// Over stay, long stay duration and state
sensor_data->over_stay_state = sts_o7_sensorData.over_stay_state;
sensor_data->over_stay_duration = sts_o7_sensorData.event_sensor1_duration;
if (sensor_data->over_stay_state !=0)
{
APP_LOG(TS_OFF,VLEVEL_L,"\r\n ... Over Stay Duration = %u Sec [Threshold: %u Seconds]\r\n",
sensor_data->over_stay_duration,
sts_occupancy_overtime_threshold_in_10min*60);
}
// Fall detection and duration, confirmation duration
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)
{ {
APP_LOG(TS_OFF, VLEVEL_M, "\r\n......FALL RISING DETECTION RESULT: %25s \r\n",(char*)sts_presence_fall_detection_message[sts_fall_rising_detected_result] ); APP_LOG(TS_OFF, VLEVEL_M, "\r\n......FALL RISING DETECTION RESULT: %25s \r\n",
(char*)sts_presence_fall_detection_message[sts_fall_rising_detected_result] );
sensor_data->fall_speed = (uint8_t)sts_fall_rising_pattern_factor1; sensor_data->fall_speed = (uint8_t)sts_fall_rising_pattern_factor1;
sensor_data->fall_gravity = (uint8_t)sts_roc_acc_standard_variance; sensor_data->fall_gravity = (uint8_t)sts_roc_acc_standard_variance;
} else { } else {
sensor_data->fall_speed = 0; sensor_data->fall_speed = 0;
sensor_data->fall_gravity = 0; sensor_data->fall_gravity = 0;
@ -765,8 +779,8 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *senso
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) {
sts_status_color = STS_RED_BLUE; sts_status_color = STS_RED_BLUE;
sts_lamp_bar_color = STS_RED_BLUE; sts_lamp_bar_color = STS_RED_BLUE;
} }
//STS_Lamp_Bar_Refresh(); //STS_Lamp_Bar_Refresh();
} }
@ -1177,9 +1191,9 @@ void OnSensor3BStateChanged(void)
case STS_PRESENCE_UNCONSCIOUS: case STS_PRESENCE_UNCONSCIOUS:
sts_o7_sensorData.event_sensor3_no_movement_start_time = sensor_event_time.Seconds; sts_o7_sensorData.event_sensor3_no_movement_start_time = sensor_event_time.Seconds;
sts_o7_sensorData.event_sensor3_unconcious_start_time = sensor_event_time.Seconds; sts_o7_sensorData.event_sensor3_unconcious_start_time = sensor_event_time.Seconds;
sts_o7_sensorData.event_sensor3_unconcious_duration = 0; //sts_o7_sensorData.event_sensor3_unconcious_duration = 0;
sts_o7_sensorData.event_sensor3_no_movement_duration = 0; //sts_o7_sensorData.event_sensor3_no_movement_duration = 0;
sts_o7_sensorData.fall_laydown_duration = 0; //sts_o7_sensorData.fall_laydown_duration = 0;
break; break;
default: default:

View File

@ -62,7 +62,10 @@ extern volatile uint8_t sts_lamp_bar_flashing_color;
volatile uint8_t last_sts_lamp_bar_color=STS_DARK; volatile uint8_t last_sts_lamp_bar_color=STS_DARK;
extern volatile uint8_t sts_rss_result; extern volatile uint8_t sts_rss_result;
extern volatile uint8_t sts_rss_result_changed_flag, sts_hall1_changed_flag, sts_hall2_changed_flag, sts_reed_hall_changed_flag; extern volatile uint8_t sts_rss_result_changed_flag, sts_hall1_changed_flag, sts_hall2_changed_flag, sts_reed_hall_changed_flag;
volatile uint8_t sts_fall_detection_acc_threshold = 10, sts_fall_detection_depth_threshold=20, sts_fall_confirm_threshold_in_10sec=1, sts_occupancy_overtime_threshold_in_10min=2; volatile uint8_t sts_fall_detection_acc_threshold = 10,
sts_fall_detection_depth_threshold=20,
sts_fall_confirm_threshold_in_10sec=1,
sts_occupancy_overtime_threshold_in_10min=2;
volatile uint8_t sts_unconscious_or_motionless_level_threshold=6; //6*128 volatile uint8_t sts_unconscious_or_motionless_level_threshold=6; //6*128
volatile uint8_t sts_motionless_duration_threshold_in_min=1; // test mode, 1 min, normal 10 min. long occupation 30 min volatile uint8_t sts_motionless_duration_threshold_in_min=1; // test mode, 1 min, normal 10 min. long occupation 30 min
volatile uint16_t sts_unconscious_level_threshold=600; volatile uint16_t sts_unconscious_level_threshold=600;
@ -1177,7 +1180,10 @@ static void OnYunhornSTSDurationCheckTimerEvent(void *context)
sts_o7_sensorData.over_stay_state = 1; sts_o7_sensorData.over_stay_state = 1;
sts_o7_sensorData.over_stay_duration = sts_o7_sensorData.event_sensor1_duration; sts_o7_sensorData.over_stay_duration = sts_o7_sensorData.event_sensor1_duration;
over_threshold = TRUE; over_threshold = TRUE;
APP_LOG(TS_OFF, VLEVEL_L, "\r\nSensor 1 Over Stay State=%d, Duration= %d Sec, Threshold =%u \r\n", sts_o7_sensorData.over_stay_state,(sts_o7_sensorData.over_stay_duration),(sts_occupancy_overtime_threshold_in_10min*60) ); APP_LOG(TS_OFF, VLEVEL_L, "\r\nSensor 1 Over Stay State=%d, Duration= %d Sec, Threshold =%u \r\n",
sts_o7_sensorData.over_stay_state,
(sts_o7_sensorData.over_stay_duration),
(sts_occupancy_overtime_threshold_in_10min*60) );
sts_lamp_bar_color = STS_RED_DARK; sts_lamp_bar_color = STS_RED_DARK;
//sts_lamp_bar_flashing_color = 0x20; //sts_lamp_bar_flashing_color = 0x20;
//volatile uint8_t sts_lamp_bar_color = STS_GREEN; //puColor //volatile uint8_t sts_lamp_bar_color = STS_GREEN; //puColor
@ -1214,7 +1220,7 @@ static void OnYunhornSTSDurationCheckTimerEvent(void *context)
{ {
sts_o7_sensorData.event_sensor3_motion_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_motion_start_time; sts_o7_sensorData.event_sensor3_motion_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_motion_start_time;
//if (sts_o7_sensorData.event_sensor3_motion_duration > sts_occupancy_overtime_threshold_in_10min*600) //if (sts_o7_sensorData.event_sensor3_motion_duration > sts_occupancy_overtime_threshold_in_10min*600)
if (sts_o7_sensorData.event_sensor3_motion_duration > sts_occupancy_overtime_threshold_in_10min) //for debug if (sts_o7_sensorData.event_sensor3_motion_duration > sts_occupancy_overtime_threshold_in_10min*60) //for debug
{ {
sts_o7_sensorData.occupancy_over_stay_state = 1; sts_o7_sensorData.occupancy_over_stay_state = 1;
sts_o7_sensorData.occupancy_duration =sts_o7_sensorData.event_sensor3_motion_duration; sts_o7_sensorData.occupancy_duration =sts_o7_sensorData.event_sensor3_motion_duration;
@ -1263,6 +1269,13 @@ static void OnYunhornSTSDurationCheckTimerEvent(void *context)
sts_o7_sensorData.fall_state = sts_fall_rising_detected_result; sts_o7_sensorData.fall_state = sts_fall_rising_detected_result;
sts_o7_sensorData.event_sensor3_no_movement_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_no_movement_start_time; sts_o7_sensorData.event_sensor3_no_movement_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_no_movement_start_time;
sts_o7_sensorData.event_sensor3_unconcious_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_unconcious_start_time; sts_o7_sensorData.event_sensor3_unconcious_duration = current_time.Seconds - sts_o7_sensorData.event_sensor3_unconcious_start_time;
// sts_motionless_duration_threshold_in_min
if ((sts_o7_sensorData.event_sensor3_no_movement_duration > sts_cfg_nvm.motionless_duration_threshold_in_min*60)||
(sts_o7_sensorData.unconscious_duration > sts_cfg_nvm.motionless_duration_threshold_in_min*60))
{
sts_o7_sensorData.unconscious_state = 1;
over_threshold = TRUE;
}
break; break;
} }
@ -1274,8 +1287,9 @@ static void OnYunhornSTSDurationCheckTimerEvent(void *context)
if (over_threshold == TRUE) { if (over_threshold == TRUE) {
sensor_data_ready = 1; sensor_data_ready = 1;
sts_lamp_bar_color = sts_lamp_bar_flashing_color;
SendTxData(); SendTxData();
over_threshold = FALSE;
} }
} }