diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index 31c6d51..368f2c1 100644 --- a/Core/Src/stm32wlxx_it.c +++ b/Core/Src/stm32wlxx_it.c @@ -68,6 +68,7 @@ extern SPI_HandleTypeDef hspi1; extern DMA_HandleTypeDef hdma_tim1_ch2; extern DMA_HandleTypeDef hdma_tim1_ch1; extern volatile uint8_t sts_reed_hall_ext_int; +extern volatile uint8_t sts_reed_hall_1_changed, sts_reed_hall_2_changed; volatile uint8_t sts_reed_hall_change_flag; /* USER CODE END EV */ @@ -231,8 +232,8 @@ void EXTI0_IRQHandler(void) /* USER CODE END EXTI0_IRQn 0 */ #ifdef STS_O7 + sts_reed_hall_1_changed = 1; HAL_GPIO_EXTI_IRQHandler(HALL1_Pin); - //sts_reed_hall_change_flag = 1; #else HAL_GPIO_EXTI_IRQHandler(BUT1_Pin); sts_reed_hall_change_flag = 1; @@ -251,6 +252,7 @@ void EXTI1_IRQHandler(void) /* USER CODE END EXTI1_IRQn 0 */ #ifdef STS_O7 + sts_reed_hall_2_changed = 1; HAL_GPIO_EXTI_IRQHandler(HALL2_Pin); #else HAL_GPIO_EXTI_IRQHandler(BUT2_Pin); diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index 135b8c7..947aca9 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -63,6 +63,7 @@ extern volatile uint8_t sts_occupancy_status; extern volatile uint8_t sts_reed_hall_result, sts_emergency_button_pushed; // inital 0 = close volatile uint8_t sts_hall1_read=0,sts_hall2_read=0; // Above hall1_read == reed_hall_result, hall2_read == emergency_button +extern volatile uint8_t sts_reed_hall_1_result, sts_reed_hall_2_result; extern volatile uint8_t sts_tof_result_changed_flag; @@ -229,7 +230,7 @@ void STS_Combined_Status_Processing(void) { mems_event_time = SysTimeGetMcuTime(); - if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_result == STS_Status_Door_Close) || (sts_tof_result == STS_RESULT_PRESENCE)) + if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close)|| (sts_reed_hall_2_result == STS_Status_Door_Close) || (sts_tof_result == STS_RESULT_PRESENCE)) { if (event_start_time == 0) { @@ -241,7 +242,7 @@ void STS_Combined_Status_Processing(void) } - } else if ((sts_rss_result != STS_RESULT_MOTION) || (sts_reed_hall_result != STS_Status_Door_Close) || (sts_tof_result != STS_RESULT_PRESENCE)) + } else if ((sts_rss_result != STS_RESULT_MOTION) || (sts_reed_hall_1_result != STS_Status_Door_Close)|| (sts_reed_hall_2_result != STS_Status_Door_Close) || (sts_tof_result != STS_RESULT_PRESENCE)) { if (event_stop_time ==0) { @@ -279,16 +280,16 @@ void STS_Combined_Status_Processing(void) } break; case STS_DUAL_MODE: - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_result == STS_Status_Door_Open )) + if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_Door_Open )) { sts_status_color = STS_GREEN; - } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_result == STS_Status_Door_Close )||(sts_emergency_button_pushed ==STS_Status_Door_Close)) + } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close )||(sts_reed_hall_2_result == STS_Status_Door_Close )) { sts_status_color = STS_RED; - if (sts_emergency_button_pushed) { - sts_status_color = STS_RED_BLUE; - } + //if (sts_reed_hall_2_result == STS_Status_Door_Close ) { + // sts_status_color = STS_RED_BLUE; + //} } break; case STS_REMOTE_REED_RSS_MODE: diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 00ca5d5..4bb8d68 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -51,6 +51,8 @@ volatile STS_PRESENCE_SENSOR_Event_Status_t sts_o7_event_status; volatile float sts_distance_rss_distance; extern volatile float sts_presence_rss_distance, sts_presence_rss_score; extern volatile uint8_t sts_hall1_read,sts_hall2_read; +volatile uint8_t sts_reed_hall_1_result=0,sts_reed_hall_2_result=0, last_sts_reed_hall_1_result=0, last_sts_reed_hall_2_result=0; +volatile uint8_t sts_reed_hall_1_changed=0, sts_reed_hall_2_changed=0; volatile uint8_t sts_rss_config_updated_flag = 0; extern volatile uint8_t mems_int1_detected, link_wakeup, link_sleep; volatile uint32_t event_start_time=0, event_stop_time=0; @@ -203,42 +205,18 @@ void STS_YunhornSTSEventRFAC_Process(void) void STS_YunhornSTSEventP1_Process(void) { + sts_reed_hall_1_result = (sts_hall1_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; + sts_reed_hall_2_result = (sts_hall2_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; -#if defined(YUNHORN_STS_O5_ENABLED) + sts_reed_hall_1_changed = (sts_reed_hall_1_result != last_sts_reed_hall_1_result); + sts_reed_hall_2_changed = (sts_reed_hall_2_result != last_sts_reed_hall_2_result); - if ((sts_work_mode == STS_WIRED_MODE) || (sts_work_mode == STS_REEDSWITCH_MODE) || (sts_work_mode == STS_DUAL_MODE)) - { - STS_Reed_Hall_Presence_Detection(); + last_sts_reed_hall_1_result = sts_reed_hall_1_result; + last_sts_reed_hall_2_result = sts_reed_hall_2_result; - if (sts_reed_hall_result == last_sts_reed_hall_result) { - sts_reed_hall_changed_flag = 0; - } else { - sts_reed_hall_changed_flag = 1; -#ifdef LED_ONBOARD - STS_Combined_Status_Processing(); -#endif - } - - last_sts_reed_hall_result = sts_reed_hall_result; - } - -#endif -#if (defined(YUNHORN_STS_O6_ENABLED) && defined(USE_ACCONEER_A111)) - if ((sts_work_mode == STS_WIRED_MODE) || (sts_work_mode == STS_REEDSWITCH_MODE) || (sts_work_mode == STS_DUAL_MODE)) - { - STS_Reed_Hall_Presence_Detection(); - - if (sts_reed_hall_result == last_sts_reed_hall_result) { - sts_reed_hall_changed_flag = 0; - } else { - sts_reed_hall_changed_flag = 1; - STS_Combined_Status_Processing(); - } - - last_sts_reed_hall_result = sts_reed_hall_result; - } -#endif + sts_emergency_button_pushed = sts_reed_hall_2_result; + STS_Combined_Status_Processing(); } @@ -296,20 +274,9 @@ void STS_YunhornSTSEventP2_Process(void) void STS_Reed_Hall_Presence_Detection(void) { // HAL_Delay(50); // BOUNCING ELIMIATION -#if 0 - if (STS_Reed_Hall_State == STS_Status_Door_Open) - { - sts_reed_hall_result = STS_Status_Door_Open; + sts_reed_hall_1_result = (sts_hall1_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; + sts_reed_hall_2_result = (sts_hall2_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; - } else if (STS_Reed_Hall_State == STS_Status_Door_Close) - { - sts_reed_hall_result = STS_Status_Door_Close; - - } -#endif - sts_reed_hall_result = (sts_hall1_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; - - sts_emergency_button_pushed = (sts_hall2_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; //(STS_Emergency_Button_State==STS_Status_Door_Open)? 0:1; //sts_reed_hall_result = ((STS_Reed_Hall_State)&STS_Status_Door_Open); @@ -736,9 +703,9 @@ void STS_PRESENCE_SENSOR_Prepare_Send_Data(void) { sts_o7_sensorData.lamp_bar_color = sts_lamp_bar_color; sts_o7_sensorData.workmode = sts_work_mode; - sts_o7_sensorData.state_sensor1_on_off = sts_reed_hall_result; // sts_hall1_read + sts_o7_sensorData.state_sensor1_on_off = sts_hall1_read; //sts_hsts_reed_hall_result; // sts_hall1_read sts_o7_sensorData.state_sensor2_on_off = sts_rss_result; - sts_o7_sensorData.state_sensor3_on_off = sts_emergency_button_pushed; //sts_hall2_read + sts_o7_sensorData.state_sensor3_on_off = sts_hall2_read; //sts_emergency_button_pushed; //sts_hall2_read sts_o7_sensorData.state_sensor4_on_off = sts_rss_2nd_result; if (sts_rss_result == STS_RESULT_MOTION) { diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 4c1be42..b67abf6 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -641,6 +641,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) // if (EventType == TX_ON_EVENT) { sensor_data_ready =1; + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0); UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); } break; @@ -651,6 +652,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) APP_LOG(TS_OFF, VLEVEL_M, "\n\n SOS Button Read = %02X \r\n", HALL2_STATE); sensor_data_ready =1; // UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0); UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); break; @@ -790,18 +792,11 @@ static uint8_t PrepareSendTxData(void) uint8_t batteryLevel = GetBatteryLevel(); uint16_t batteryLevelmV = SYS_GetBatteryLevel(); //SysTime_t occupy_check_time = SysTimeGetMcuTime(); - //sensor_t sensor_data; - STS_PRESENCE_SENSOR_Prepare_Send_Data(); sts_o7_sensorData.battery_Pct = (uint8_t)(99*batteryLevel/254); - - - // For occupancy over time process - - switch (sts_work_mode) { case STS_WIRED_MODE: diff --git a/STM32CubeIDE/Release/STS_O7.bin b/STM32CubeIDE/Release/STS_O7.bin index 2c32cc5..e7b777d 100644 Binary files a/STM32CubeIDE/Release/STS_O7.bin and b/STM32CubeIDE/Release/STS_O7.bin differ