From cc22e87c26d70c2541cd6e47fb33dda9e78e14d1 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Tue, 19 Nov 2024 15:35:41 +0800 Subject: [PATCH] add fhmos config command parse and reporting --- STM32CubeIDE/Release/WLE5CC_NODE_STS.elf | Bin 261748 -> 261904 bytes STS/Core/Inc/yunhorn_sts_sensors.h | 37 ++++++++- STS/Core/Src/yunhorn_sts_process.c | 93 ++++++++++++++++++++++- STS/TOF/App/app_tof.c | 33 ++++++++ 4 files changed, 157 insertions(+), 6 deletions(-) diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index f938b6cb44766e1ce777a2af77f9b85c4c193a38..abeb33a7c1f07adce203eee8897771dd5bbadd3c 100644 GIT binary patch delta 48094 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 delta 47757 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

}a&oJ>VrQ#V5gMnt6Hw>hL`H2*v@_jF!V2 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 rhgw&BFD9gBtenX>{!&jz{>='0')&& (parse_buffer[CFG_CMD5]<='9')) + { + uint8_t sts_fhmos_cfg_index = (uint8_t)(parse_buffer[CFG_CMD5]-0x30); + uint8_t sts_fhmos_cfg_value = (parse_buffer[CFG_CMD6]-0x30)*100+(parse_buffer[CFG_CMD7]-0x30)*10+(parse_buffer[CFG_CMD8]-0x30); + switch (sts_fhmos_cfg_index) { + case 1: // head level height threshold + sts_fhmos_cfg.sts_head_level_height_threshold_cm = sts_fhmos_cfg_value; + break; + case 2: + sts_fhmos_cfg.sts_fall_duration_threshold_potential_15sec = sts_fhmos_cfg_value; + break; + case 3: + sts_fhmos_cfg.sts_fall_duration_threshold_confirm_15sec = sts_fhmos_cfg_value; + break; + case 4: + sts_fhmos_cfg.sts_motionless_threshold_short_15sec = sts_fhmos_cfg_value; + break; + case 5: + sts_fhmos_cfg.sts_motionless_threshold_long_15sec = sts_fhmos_cfg_value; + break; + case 6: + sts_fhmos_cfg.sts_occupancy_threshold_overstay_15sec = sts_fhmos_cfg_value; + break; + } + + OnStoreSTSCFGContextRequest(); + // 2024-11-18 + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)parse_buffer,parse_buffer_size); + i = parse_buffer_size; + STS_SENSOR_Upload_Message(YUNHORN_STS_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); + } + break; + case 12: break; default: @@ -1498,6 +1537,14 @@ void OnStoreSTSCFGContextRequest(void) to_store__value[i++] = sts_cfg_nvm.alarm_parameter05; to_store__value[i++] = sts_cfg_nvm.alarm_mute_reset_timer_in_10sec; to_store__value[i++] = sts_cfg_nvm.alarm_lamp_bar_flashing_color; +#ifdef L8 + to_store__value[i++] = sts_cfg_nvm.fhmos_cfg_1; + to_store__value[i++] = sts_cfg_nvm.fhmos_cfg_2; + to_store__value[i++] = sts_cfg_nvm.fhmos_cfg_3; + to_store__value[i++] = sts_cfg_nvm.fhmos_cfg_4; + to_store__value[i++] = sts_cfg_nvm.fhmos_cfg_5; + to_store__value[i++] = sts_cfg_nvm.fhmos_cfg_6; +#else to_store__value[i++] = sts_cfg_nvm.occupancy_overtime_threshold_in_10min; to_store__value[i++] = sts_cfg_nvm.motionless_duration_threshold_in_min; @@ -1505,7 +1552,7 @@ void OnStoreSTSCFGContextRequest(void) to_store__value[i++] = sts_cfg_nvm.fall_detection_acc_threshold; to_store__value[i++] = sts_cfg_nvm.fall_detection_depth_threshold; to_store__value[i++] = sts_cfg_nvm.fall_confirm_threshold_in_10sec; - +#endif if ((nvm_store_value[NVM_AC_CODE_START]!= 0x0) && (nvm_store_value[NVM_AC_CODE_START+19]!=0x0)) { //APP_LOG(TS_OFF, VLEVEL_M, "\n\r Transfer good NVM Stored ac_code to NVM_STORE_VALUE\r\n"); @@ -1585,13 +1632,21 @@ void STS_REBOOT_CONFIG_Init(void) sts_cfg_nvm.alarm_parameter05 =(uint8_t)nvm_store_value[NVM_ALARM_PARAMETER05]; sts_cfg_nvm.alarm_mute_reset_timer_in_10sec = (uint8_t)nvm_store_value[NVM_ALARM_MUTE_RESET_TIMER]; sts_cfg_nvm.alarm_lamp_bar_flashing_color = (uint8_t)nvm_store_value[NVM_ALARM_LAMP_BAR_FLASHING_COLOR]; +#ifdef L8 + sts_cfg_nvm.fhmos_cfg_1 =(uint8_t)nvm_store_value[NVM_OCCUPANCY_OVERTIME_THRESHOLD]; + sts_cfg_nvm.fhmos_cfg_2 =(uint8_t)nvm_store_value[NVM_MOTIONLESS_DURATION_THRESHOLD]; + sts_cfg_nvm.fhmos_cfg_3 =(uint8_t)nvm_store_value[NVM_UNCONSCIOUS_LEVEL_THRESHOLD]; + sts_cfg_nvm.fhmos_cfg_4 =(uint8_t)nvm_store_value[NVM_FALL_DETECTION_ACC_THRESHOLD]; + sts_cfg_nvm.fhmos_cfg_5 =(uint8_t)nvm_store_value[NVM_FALL_DETECTION_DEPTH_THRESHOLD]; + sts_cfg_nvm.fhmos_cfg_6 =(uint8_t)nvm_store_value[NVM_FALL_CONFIRM_THRESHOLD]; +#else sts_cfg_nvm.occupancy_overtime_threshold_in_10min = (uint8_t)nvm_store_value[NVM_OCCUPANCY_OVERTIME_THRESHOLD]; sts_cfg_nvm.motionless_duration_threshold_in_min= (uint8_t)nvm_store_value[NVM_MOTIONLESS_DURATION_THRESHOLD]; sts_cfg_nvm.unconscious_or_motionless_level_threshold = (uint8_t)nvm_store_value[NVM_UNCONSCIOUS_LEVEL_THRESHOLD]; sts_cfg_nvm.fall_detection_acc_threshold = (uint8_t)nvm_store_value[NVM_FALL_DETECTION_ACC_THRESHOLD]; sts_cfg_nvm.fall_detection_depth_threshold = (uint8_t)nvm_store_value[NVM_FALL_DETECTION_DEPTH_THRESHOLD]; sts_cfg_nvm.fall_confirm_threshold_in_10sec = (uint8_t)nvm_store_value[NVM_FALL_CONFIRM_THRESHOLD]; - +#endif for (uint8_t j=0; j< YUNHORN_STS_AC_CODE_SIZE; j++) { sts_cfg_nvm.ac[j] = (uint8_t)nvm_store_value[NVM_AC_CODE_START +j]; } @@ -1688,8 +1743,42 @@ void OnRestoreSTSCFGContextProcess(void) } #endif +#ifdef L8 + STS_FHMOS_sensor_config_update(); +#endif + } +#ifdef L8 +void STS_FHMOS_sensor_config_init(void) +{ + //uint8_t fhmos_fall=0, fhmos_human_movement=0, fhmos_occupancy=0, fhmos_sos_alarm=0; + sts_fhmos_cfg.sts_head_level_height_threshold_cm = 70; // default 700mm + sts_fhmos_cfg.sts_fall_duration_threshold_potential_15sec = 4; // 4*15=60 sec, 1 min. + sts_fhmos_cfg.sts_fall_duration_threshold_confirm_15sec = 8; // 8*15 = 120 sec, 2 min. + sts_fhmos_cfg.sts_motionless_threshold_short_15sec = 4; // 4*15 = 60 sec , 1 min. + sts_fhmos_cfg.sts_motionless_threshold_long_15sec = 16; // 20*15 = 300 sec, 5 min. + sts_fhmos_cfg.sts_occupancy_threshold_overstay_15sec = 100; // 80*15 = 1200 sec, 20 min. + +} + +void STS_FHMOS_sensor_config_update() +{ + + sts_fhmos_cfg.sts_head_level_height_threshold_cm = sts_cfg_nvm.fhmos_cfg_1; // default 700mm + sts_fhmos_cfg.sts_fall_duration_threshold_potential_15sec = sts_cfg_nvm.fhmos_cfg_2; // 4*15=60 sec, 1 min. + sts_fhmos_cfg.sts_fall_duration_threshold_confirm_15sec = sts_cfg_nvm.fhmos_cfg_3; // 8*15 = 120 sec, 2 min. + sts_fhmos_cfg.sts_motionless_threshold_short_15sec = sts_cfg_nvm.fhmos_cfg_4; // 4*15 = 60 sec , 1 min. + sts_fhmos_cfg.sts_motionless_threshold_long_15sec = sts_cfg_nvm.fhmos_cfg_5; // 20*15 = 300 sec, 5 min. + sts_fhmos_cfg.sts_occupancy_threshold_overstay_15sec = sts_cfg_nvm.fhmos_cfg_6; // 80*15 = 1200 sec, 20 min. +} + + + +#endif + + + static void STS_Show_STS_CFG_NVM(uint8_t * store_value) { APP_LOG(TS_OFF, VLEVEL_M, "\n-----------------------------------------------\n"); diff --git a/STS/TOF/App/app_tof.c b/STS/TOF/App/app_tof.c index 882c854..314d39b 100644 --- a/STS/TOF/App/app_tof.c +++ b/STS/TOF/App/app_tof.c @@ -37,6 +37,7 @@ extern "C" { #include "yunhorn_sts_sensors.h" volatile uint8_t fhmos_fall=0, fhmos_human_movement=0, fhmos_occupancy=0, fhmos_sos_alarm=0; volatile uint32_t fhmos_fall_counter=0; +volatile sts_fhmos_sensor_config_t sts_fhmos_cfg; #endif #include "stm32wlxx_nucleo.h" @@ -471,6 +472,35 @@ static void print_result(RANGING_SENSOR_Result_t *Result) #endif #ifdef L8 +/* Represent Color Value Definition + * Fall Blue 0 The Room is not occupied by Human + * Green 1 Human in room in normal level (head above 700 mmH from floor level) + * Yellow 2 Human in low level position for short time potential (Head below 700mmH from floor level + * Red 3 Human in low level position with time longer than threshold, e.g. 4 mins.(Head below 700 mm from Floor level + * Human + * Movement Blue 0 The Room is not occupied by Human + * Green 1 The room is occupied by human, with movement + * Yellow 2 The room is occupied by human, with motionless for short period of time (???) + * Red 3 The room is occupied by human, with motionless for a period of time longer than threshold period, e.g. 5min. + * + * Occupancy Blue 0 The room is not occupied by Human + * Green 1 The room is occupied by human, with movement + * Red 2 The room is occupied by human, for a short period of time (???) + * + * # height is configurable from 10cm to 90 cm, with interval of 1cm + * # the period of time is configurable, from 1 min to 30 mins, with 15 sec as interval + * + * sts_height_threshold (10cm --90 cm, 1cm interval) (10cm=10, 90cm=90, "P11T1XXX" + * sts_fall_duration_threshold_potential (1 min to 30 min. 15 sec interval, 1800 sec. 1800=15*120, 60=15*4) "P11T2XXX" + * sts_fall_duration_threshold_confirm (1 min to 30 min. 15 sec interval, 1800 sec. 1800=15*120, 60=15*4) "P11T3XXX" + * + * sts_motionless_threshold_short (1 min to 30 min. 15 sec interval, 1800 sec. 1800=15*120, 60=15*4) "P11T4XXX" + * sts_motionless_threshold_long (1 min to 30 min. 15 sec interval, 1800 sec. 1800=15*120, 60=15*4) "P11T5XXX" + * + * sts_occupancy_threshold_overstay (1 min to 30 min. 15 sec interval, 1800 sec. 1800=15*120, 60=15*4) "P11T6XXX" + * + */ + void STS_FHMOS_sensor_read(sts_fhmos_sensor_data_t *sts_fhmos_data) { //uint8_t fhmos_fall=0, fhmos_human_movement=0, fhmos_occupancy=0, fhmos_sos_alarm=0; @@ -479,6 +509,9 @@ void STS_FHMOS_sensor_read(sts_fhmos_sensor_data_t *sts_fhmos_data) sts_fhmos_data->occupancy_state =fhmos_occupancy; sts_fhmos_data->sos_alarm_state =fhmos_sos_alarm; } + + + #endif