From 7806a9bf9330272a94dcd5c8bd680e842964207a Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Thu, 28 Nov 2024 01:40:17 +0800 Subject: [PATCH] wip good color for hall-1, hall-2 --- Core/Inc/main.h | 4 +- Core/Inc/sts_lamp_bar.h | 2 + Core/Src/gpio.c | 6 +- Core/Src/stm32wlxx_it.c | 17 +- Core/Src/sts_lamp_bar.c | 1 + LoRaWAN/App/lora_app.c | 110 ++++++- STM32CubeIDE/.settings/language.settings.xml | 4 +- STM32CubeIDE/Release/WLE5CC_NODE_STS.elf | Bin 276088 -> 277436 bytes STS/Core/Inc/yunhorn_sts_prd_conf.h | 13 +- STS/Core/Inc/yunhorn_sts_sensors.h | 11 +- STS/Core/Src/yunhorn_sts_process.c | 283 ++++++++++++++++++- STS/TOF/App/app_tof.c | 97 ++++++- 12 files changed, 494 insertions(+), 54 deletions(-) diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 56a6224..75fb4b1 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -104,7 +104,7 @@ void Error_Handler(void); #define PIR_Pin GPIO_PIN_6 // PIR SENSOR PIN #define PIR_GPIO_Port GPIOB #define PIR_EXTI_IRQn EXTI9_5_IRQn - +#if 0 #define HALL3_Pin GPIO_PIN_9 // ALARM MUTE PIN #define HALL3_GPIO_Port GPIOA #define HALL3_EXTI_IRQn EXTI9_5_IRQn @@ -115,7 +115,7 @@ void Error_Handler(void); #define ALARM_MUTE_Pin HALL3_Pin // ALARM MUTE BUTTON #define ALARM_RESET_Pin HALL4_Pin // ALARM RESET BUTTON - +#endif #define HALL1_STATE HAL_GPIO_ReadPin(HALL1_GPIO_Port, HALL1_Pin) //DOOR CONTACT #define HALL2_STATE HAL_GPIO_ReadPin(HALL2_GPIO_Port, HALL2_Pin) //SOS BUTTON #define HALL3_STATE HAL_GPIO_ReadPin(HALL3_GPIO_Port, HALL3_Pin) //ALARM MUTE BUTTON diff --git a/Core/Inc/sts_lamp_bar.h b/Core/Inc/sts_lamp_bar.h index e57dae5..99db16f 100644 --- a/Core/Inc/sts_lamp_bar.h +++ b/Core/Inc/sts_lamp_bar.h @@ -67,6 +67,8 @@ enum sts_lamp_color { #define STS_VACANT_COLOR STS_BLUE #define STS_OCCUPY_COLOR STS_GREEN +#define STS_SOS_COLOR STS_RED_BLUE + #define STS_FALL_SUSPICIOUS_COLOR STS_YELLOW #define STS_FALL_CONFIRMED_COLOR STS_RED #define STS_HUMAN_MOVEMENT_MOTIONLESS_COLOR STS_YELLOW diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 003b4f6..14ece0c 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -65,7 +65,7 @@ void MX_GPIO_Init(void) /*Configure GPIO pins : PAPin PAPin */ GPIO_InitStruct.Pin = BUT1_Pin|BUT2_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); @@ -97,7 +97,7 @@ void MX_GPIO_Init(void) /*Configure GPIO pins : PAPin PAPin */ GPIO_InitStruct.Pin = TOF_INT_EXTI_PIN; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; - GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(TOF_INT_EXTI_PORT, &GPIO_InitStruct); /*Configure GPIO pins : VL53L8A1_PWR_EN_C_PIN */ @@ -166,7 +166,7 @@ void MX_GPIO_Init(void) #if defined(PIR) /*Configure GPIO pins : PIR_Pin PIR_Pin */ GPIO_InitStruct.Pin = PIR_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL; //GPIO_NOPULL; HAL_GPIO_Init(PIR_GPIO_Port, &GPIO_InitStruct); HAL_NVIC_SetPriority(PIR_EXTI_IRQn, 15, 0); diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index 315bcc4..a8d577c 100644 --- a/Core/Src/stm32wlxx_it.c +++ b/Core/Src/stm32wlxx_it.c @@ -65,6 +65,7 @@ extern DMA_HandleTypeDef hdma_i2c2_rx; extern DMA_HandleTypeDef hdma_i2c2_tx; extern DMA_HandleTypeDef hdma_usart2_tx; extern DMA_HandleTypeDef hdma_usart2_rx; + #ifdef O1L //extern DMA_HandleTypeDef hdma_tim1_ch2; extern DMA_HandleTypeDef hdma_tim1_ch1; @@ -387,6 +388,20 @@ void DMA1_Channel7_IRQHandler(void) /* USER CODE END DMA1_Channel7_IRQn 1 */ } +/** + * @brief This function handles SPI1 Interrupt. + */ +void SPI1_IRQHandler(void) +{ + /* USER CODE BEGIN SPI1_IRQn 0 */ + + /* USER CODE END SPI1_IRQn 0 */ + //HAL_SPI_IRQHandler(&hspi1); + /* USER CODE BEGIN SPI1_IRQn 1 */ + + /* USER CODE END SPI1_IRQn 1 */ +} + /** * @brief This function handles EXTI Lines [9:5] Interrupt. */ @@ -396,7 +411,7 @@ void EXTI9_5_IRQHandler(void) /* USER CODE END EXTI9_5_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(TOF_INT_EXTI_PIN); + //HAL_GPIO_EXTI_IRQHandler(TOF_INT_EXTI_PIN); HAL_GPIO_EXTI_IRQHandler(PIR_Pin); diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index ac3ec29..3d9ddeb 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -57,6 +57,7 @@ extern volatile uint8_t sts_work_mode; volatile uint8_t sts_reed_hall_ext_int = 0; volatile uint8_t sts_status_color = STS_BLUE; volatile uint8_t sts_lamp_bar_color = STS_BLUE; //puColor + volatile uint8_t sts_lamp_bar_flashing_color = STS_RED_DARK; //0x23; RED_BLUE; extern volatile uint8_t sts_cloud_netcolor; //netColor extern volatile uint8_t sts_occupancy_status; diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 4cfdb8e..05f2076 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -74,6 +74,7 @@ extern volatile sts_fhmos_sensor_ambient_height_t fhmos_bg; extern volatile uint8_t sts_hall1_read, sts_hall2_read; // Above hall1_read == reed_hall_result, hall2_read == emergency_button extern volatile uint8_t sts_hall3_read, sts_hall4_read; extern volatile uint8_t sts_pir_state; +extern volatile uint8_t last_sts_hall1_read, last_sts_hall2_read, last_sts_hall3_read, last_sts_hall4_read; volatile uint8_t sts_PIR_read = 0; volatile bool locklow = true; volatile uint32_t lowin=0; @@ -600,7 +601,7 @@ void LoRaWAN_Init(void) void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { - static uint8_t prev_color =0; + static uint8_t prev_color =STS_BLUE; switch (GPIO_Pin) { case BUT1_Pin: @@ -611,24 +612,40 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) sts_hall1_read = HALL1_STATE; printf("\r\n HALL 1 state =%d \r\n", sts_hall1_read); +// 1) record event start/stop time + OnSensor1StateChanged(); - if (sts_hall1_read == 0) +// 2) change lamp bar color + if (sts_hall1_read == STS_Status_Door_Close) { - prev_color = sts_lamp_bar_color; - sts_lamp_bar_color = STS_RED_DARK; - } else { + sts_lamp_bar_color = STS_OCCUPY_COLOR; + //prev_color = sts_lamp_bar_color; + sts_status_color = STS_OCCUPY_COLOR; + printf("\r\n Door Closed sts status color =%d", sts_status_color); - sts_lamp_bar_color = prev_color; + } else + { + + //sts_lamp_bar_color = prev_color; + sts_status_color = STS_VACANT_COLOR; + sts_lamp_bar_color = STS_VACANT_COLOR; + printf("\r\n Door Open: sts status color =%d", sts_status_color); } - printf("\r\n lamp bar color =0x%02x \r\n", sts_lamp_bar_color); + printf("\r\n sts status color =0x%02x \r\n", sts_status_color); +// 3) combine states and colors + STS_YunhornSTSEventP1_Process(); + //STS_Combined_Status_Processing(); + +// 4) upload state change messages //if (EventType == TX_ON_EVENT) - if (sts_hall1_read == 0) + //if (sts_hall1_read == STS_Status_Door_Close) { fhmos_occupancy = 1; UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); } + last_sts_hall1_read = sts_hall1_read; break; #ifndef STS_R4 @@ -639,15 +656,37 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) sts_hall2_read = HALL2_STATE; printf("\r\n HALL 2 state =%d \r\n", sts_hall2_read); - if (sts_hall2_read == 0) sts_lamp_bar_color = STS_RED_BLUE; +// 1) record event start/stop time + OnSensor2StateChanged(); +// 2) change lamp bar color + + if (sts_hall2_read == STS_Status_SOS_Pushdown) + { + sts_lamp_bar_color = STS_SOS_COLOR; + sts_status_color = STS_SOS_COLOR; + } printf("\r\n lamp bar color =0x%02x \r\n", sts_lamp_bar_color); - if (sts_hall2_read ==0) + if (sts_hall2_read ==STS_Status_SOS_Release) { + sts_lamp_bar_color = STS_VACANT_COLOR; + sts_status_color = STS_VACANT_COLOR; fhmos_sos_alarm = 1; UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); } + last_sts_hall2_read = sts_hall2_read; + // 3) combine states and colors + + STS_YunhornSTSEventP1_Process(); + +// 4) upload state change messages + //if (sts_hall2_read == STS_Status_SOS_Release) + { + fhmos_occupancy = 0; + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + } + last_sts_hall1_read = sts_hall1_read; + - //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaStopJoinEvent), CFG_SEQ_Prio_0); break; #endif #endif @@ -656,6 +695,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaStoreContextEvent), CFG_SEQ_Prio_0); break; #endif +#if 0 case PIR_Pin: sts_pir_state = PIR_STATE; printf("\r\n pir state =%u \r\n", sts_pir_state); @@ -689,6 +729,12 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) } } +#endif + //OnSensor3StateChanged(); + //OnSensorPIR1StateChanged(); + //STS_YunhornSTSEventP1_Process(); + //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + //last_sts_hall3_read = sts_hall3_read; #if 0 HAL_Delay(100); __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); @@ -705,6 +751,25 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); #endif break; +#if 0 + case HALL4_Pin: + sts_hall4_read = HALL4_STATE; + HAL_Delay(30); //de-bouncing + if (sts_hall4_read == HALL4_STATE) + { + //APP_LOG(TS_OFF, VLEVEL_L, "\n\n ALARM RESET Button Read = %02x --%s\r\n", sts_hall4_read, sts_sos_status_code[sts_hall4_read]); + OnSensor4StateChanged(); + //sensor_data_ready =1; + //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0); + { + STS_YunhornSTSEventP1_Process(); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + + } + last_sts_hall4_read = sts_hall4_read; + } + break; +#endif #if (defined(VL53L0)||defined(VL53LX)||defined(L8)) case TOF_INT_EXTI_PIN: ToF_EventDetected = 1; @@ -1107,13 +1172,34 @@ static void SendTxData(void) #endif //STS_T6 #if defined(L8) - AppData.Buffer[i++] = 4; + //AppData.Buffer[i++] = 4; + AppData.Buffer[i++] = 14; AppData.Buffer[i++] = fhmos_data.state_fall; AppData.Buffer[i++] = fhmos_data.state_human_movement; AppData.Buffer[i++] = fhmos_data.state_occupancy; AppData.Buffer[i++] = fhmos_data.state_sos_alarm; AppData.Buffer[i++] = fhmos_data.lamp_bar_color; + AppData.Buffer[i++] = fhmos_data.state_hall_1; + AppData.Buffer[i++] = fhmos_data.state_hall_2; + AppData.Buffer[i++] = fhmos_data.state_PIR; + +#elif defined(L8) + sts_data->lamp_bar_color = sts_lamp_bar_color; + sts_data->state_hall_1 = sts_hall1_read; + sts_data->state_hall_2 = sts_hall2_read; + sts_data->state_PIR = sts_pir_result;; + + AppData.Buffer[i++] = 8; + AppData.Buffer[i++] = fhmos_data.state_fall; + AppData.Buffer[i++] = fhmos_data.state_human_movement; + AppData.Buffer[i++] = fhmos_data.occupancy; + AppData.Buffer[i++] = fhmos_data.state_sos_alarm; + AppData.Buffer[i++] = fhmos_data.lamp_bar_color; + AppData.Buffer[i++] = fhmos_data.batteryLevel; + + + //(uint8_t)((sts_l8_sensor_data.tof_range_presence_state & 0xFF)); #endif //STS_T6 diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml index 4b0e6ff..f1b15d8 100644 --- a/STM32CubeIDE/.settings/language.settings.xml +++ b/STM32CubeIDE/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf b/STM32CubeIDE/Release/WLE5CC_NODE_STS.elf index a27aeb60562986278475e1387666b81a6ba7fe51..0dfebb8ce1da8b995c727d0474d1b27bb4f85557 100644 GIT binary patch delta 66008 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 STS_SERVICE_MASK_L0)) + { + sts_status_color = STS_DARK; + sts_lamp_bar_color = STS_DARK; + last_lamp_bar_color = STS_DARK; + STS_Lamp_Bar_Set_Dark(); + } + else + { + + if ((last_lamp_bar_color != sts_status_color)) + { + sts_lamp_bar_color = sts_status_color; + + //STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); + + last_lamp_bar_color = sts_lamp_bar_color; + } + } + + + //if ((sts_rss_result_changed_flag)|| (sts_reed_hall_changed_flag)||(sts_fall_rising_detected_result_changed_flag)) + { + //sts_rss_result_changed_flag =0; + //sts_reed_hall_changed_flag =0; + //sts_fall_rising_detected_result_changed_flag =0; + //sts_tof_result_changed_flag =0; + sensor_data_ready = 1; + //STS_PRESENCE_SENSOR_Prepare_Send_Data(); + } + +} + /* USER CODE BEGIN EF */ /* USER CODE END EF */ diff --git a/STS/TOF/App/app_tof.c b/STS/TOF/App/app_tof.c index 973748f..1a1ddcb 100644 --- a/STS/TOF/App/app_tof.c +++ b/STS/TOF/App/app_tof.c @@ -42,12 +42,15 @@ volatile uint32_t sts_low_threshold=1500, sts_high_threshold=2800, sts_occupancy volatile sts_fhmos_sensor_data_t fhmos={0x0}; volatile sts_fhmos_sensor_config_t fhmos_cfg; -volatile sts_fhmos_sensor_ambient_height_t fhmos_bg={0x0}; +volatile sts_fhmos_sensor_ambient_height_t fhmos_bg={0x0}, fhmos_gesture={0x0}; volatile sts_fhmos_sensor_data_t fhmos_data; -volatile uint8_t sts_mask_bitmap[8]={0x0}; +volatile uint8_t sts_mask_bitmap[8]={0x0}, fhmos_gesture_bitmap[8]={0x0}; extern volatile uint16_t sts_sensor_install_height; //in mm extern volatile uint8_t sts_lamp_bar_color; +extern volatile uint8_t sts_status_color; +extern volatile uint8_t sts_hall1_read,sts_hall2_read; // Above hall1_read == reed_hall_result, hall2_read == emergency_button +extern volatile uint8_t sts_pir_result; #endif #include "stm32wlxx_nucleo.h" @@ -119,7 +122,7 @@ static RANGING_SENSOR_Result_t Result; static void MX_53L8A1_ThresholdDetection_Init(void); static void MX_53L8A1_ThresholdDetection_Process(void); static void print_result(RANGING_SENSOR_Result_t *Result); - +//static void sts_generate_fall_gesture_map(void); #endif static int32_t status = 0; @@ -169,6 +172,7 @@ void MX_TOF_Init(void) void STS_LMZ_Ambient_Height_Scan_Process(void) { +#if 1 uint8_t i=0, repeat=1; uint32_t range_distance =0; @@ -225,9 +229,62 @@ void STS_LMZ_Ambient_Height_Scan_Process(void) } for (i=0; i<8; i++) printf("%02X\r\n",sts_mask_bitmap[i]); - +#endif } +void sts_generate_fall_gesture_map(void) +{ + uint8_t i=0,head_xy=0; + uint32_t range_distance =0, sts_fall_head_position=8000; // assume max range 8000 mm, actual 4500mm + + for (i=0; i<64; i++) + { + fhmos_gesture.h2cm[i] = 0; + fhmos_gesture.maskoff[i] = 0; + } + fhmos_gesture.head_level =1000; // 1000 mm + fhmos_gesture.head_xy = 31; //center of FOV + + for (i=0;i<8;i++) + fhmos_gesture_bitmap[i]=0; + + for (uint8_t i = 0; i < 64; i++) + { + if ((Result.ZoneResult[i].NumberOfTargets > 0)) + { + range_distance = (uint32_t)Result.ZoneResult[i].Distance[0]; + if (range_distance < sts_fall_head_position) + { + sts_fall_head_position = range_distance; // simply find out the head level + head_xy = i; // head x, y coordination in 8x8 matrix + } + fhmos_gesture.h2cm[i] += ((uint32_t)sts_sensor_install_height - range_distance); + + fhmos_gesture.maskoff[i]= (abs(fhmos_gesture.h2cm[i])<100)? 0:1; + fhmos_gesture_bitmap[(uint8_t)(i/8)] |= (fhmos_gesture.maskoff[i])<<(7-i%8); + + // debug + if (i%8==0) printf("\r\n"); + printf("|%4d %4d ", range_distance, fhmos_gesture.h2cm[i]); + } + else { + fhmos_gesture.h2cm[i] += 0; + } + } + + fhmos_gesture.head_level = sts_fall_head_position; + fhmos_gesture.head_xy = head_xy; +#if 0 + for (i=0; i<64; i++) + { + if (i%8==0) printf("\r\n"); + printf("|%d ", (uint8_t)fhmos_gesture.maskoff[i]); + } + for (i=0; i<8; i++) + printf("%02X\r\n",fhmos_gesture_bitmap[i]); +#endif + +} uint16_t MX_TOF_Ranging_Process(void) { @@ -503,28 +560,33 @@ static void print_result(RANGING_SENSOR_Result_t *Result) printf("\r\n YELLOW OR RED Distance=%d \r\n", roi_distance); fhmos_data.state_fall = 1; fhmos_data.state_human_movement = 1; - sts_lamp_bar_color = STS_OCCUPY_COLOR; // HOLD THIS COLOR BEFORE ENTER YELLOW STATUS + fhmos_data.status_color = STS_OCCUPY_COLOR; // HOLD THIS COLOR BEFORE ENTER YELLOW STATUS fhmos_fall_counter ++; // TODO XXX Timer for confirmation if ((fhmos_fall_counter >= 15*fhmos_cfg.th_fall_duration_potential_15sec)&& (fhmos_fall_counter < 15*fhmos_cfg.th_fall_duration_confirm_15sec)) { +#if 0 printf("\r\n [YELLOW **] Suspicious Fall: distance=%d [high - head level=[%d]] <= distance <= [high-100 =%d] \r\n", roi_distance, (sts_high_threshold - 10*fhmos_cfg.th_head_level_height_cm), (sts_high_threshold - 100)); printf("\r\n duration =%d sec, threshold=%d sec\r\n", fhmos_fall_counter, 15*fhmos_cfg.th_fall_duration_potential_15sec); printf("\r\n Fall state --- Yellow \r\n"); +#endif fhmos_fall =2; - sts_lamp_bar_color = STS_FALL_SUSPICIOUS_COLOR; + fhmos_data.status_color = STS_FALL_SUSPICIOUS_COLOR; fhmos_data.state_changed_fall = STS_FHMOS_FALL_STATE_POTENTIAL; } else if (fhmos_fall_counter >= 15*fhmos_cfg.th_fall_duration_confirm_15sec) { +#if 0 printf("\r\n [RED **] Configmed Fall: distance=%d [high - head level=[%d]] <= distance <= [high-100 =%d] \r\n", roi_distance, (sts_high_threshold - 10*fhmos_cfg.th_head_level_height_cm), (sts_high_threshold - 100)); printf("\r\n duration =%d sec, threshold=%d sec\r\n", fhmos_fall_counter, 15*fhmos_cfg.th_fall_duration_confirm_15sec); printf("\r\n Fall state --- Red \r\n"); printf("\r\n [RED ***] Confirmed Fall state: roi_distance =%d -----[high=%4d mm Head Level =%d mm\r\n", roi_distance, sts_high_threshold, 10*fhmos_cfg.th_head_level_height_cm); +#endif fhmos_fall =3; - sts_lamp_bar_color = STS_FALL_CONFIRMED_COLOR; + fhmos_data.status_color = STS_FALL_CONFIRMED_COLOR; fhmos_data.state_changed_fall = STS_FHMOS_FALL_STATE_CONFIRMED; + sts_generate_fall_gesture_map(); } } @@ -533,35 +595,43 @@ static void print_result(RANGING_SENSOR_Result_t *Result) fhmos_fall_counter = 0; fhmos_fall = 0; fhmos_human_movement = 1; +#if 0 printf("\r\nThreshold: low =%d occupy=%d head level=%d high=%d\r\n", sts_low_threshold, sts_occupancy_threshold, fhmos_cfg.th_head_level_height_cm*10, sts_high_threshold); printf("\r\n [GREEN ** ]Normal Occupy state: rio distance =%d, low =%d occupy=%d head level=%d high=%d\r\n", roi_distance, sts_low_threshold, sts_occupancy_threshold, fhmos_cfg.th_head_level_height_cm*10, sts_high_threshold); +#endif //fhmos_occupancy = STS_FHMOS_OCCUPANCY_NORMAL; fhmos_data.state_occupancy = STS_FHMOS_OCCUPANCY_NORMAL; //if (fhmos_data.prev_occupancy != fhmos_data.state_occupancy) { - sts_lamp_bar_color = STS_OCCUPY_COLOR; + fhmos_data.status_color = STS_OCCUPY_COLOR; } }else { +#if 0 printf("\r\nThreshold: low =%d occupy=%d head level=%d high=%d\r\n", sts_low_threshold, sts_occupancy_threshold, fhmos_cfg.th_head_level_height_cm*10, sts_high_threshold); printf("\r\n [BLUE *] No occupy status , distance=%d \r\n", roi_distance); - +#endif fhmos_data.state_occupancy = STS_FHMOS_OCCUPANCY_NO_OCCUPY; fhmos_fall_counter =0; fhmos_data.state_human_movement = fhmos_human_movement | STS_FHMOS_HUMAN_MOVEMENT_NO_OCCUPY; fhmos_data.state_fall = STS_FHMOS_FALL_STATE_NO_OCCUPY; //if (fhmos_data.prev_occupancy != fhmos_data.state_occupancy) - sts_lamp_bar_color = STS_VACANT_COLOR; + fhmos_data.status_color = STS_VACANT_COLOR; } fhmos_data.prev_occupancy = fhmos_data.state_occupancy; - fhmos_data.lamp_bar_color = sts_lamp_bar_color; + if (fhmos_data.status_color != fhmos_data.prev_status_color) + { + fhmos_data.prev_status_color = fhmos_data.status_color; + + STS_Combined_Status_Processing(); + } #if 0 printf("53L8A1 Threshold Detection demo application\n\r"); @@ -747,6 +817,11 @@ void STS_FHMOS_sensor_read(sts_fhmos_sensor_data_t *sts_data) sts_data->state_fall = fhmos_data.state_fall; sts_data->state_human_movement = fhmos_data.state_human_movement; sts_data->state_sos_alarm = fhmos_data.state_sos_alarm; + + sts_data->lamp_bar_color = sts_lamp_bar_color; + sts_data->state_hall_1 = sts_hall1_read; + sts_data->state_hall_2 = sts_hall2_read; + sts_data->state_PIR = sts_pir_result;; }