diff --git a/Core/Inc/yunhorn_sts_prd_conf.h b/Core/Inc/yunhorn_sts_prd_conf.h index 9c38fe9..75cd22e 100644 --- a/Core/Inc/yunhorn_sts_prd_conf.h +++ b/Core/Inc/yunhorn_sts_prd_conf.h @@ -246,8 +246,8 @@ #define STS_IOC_MODE_5_MASK STS_IOC_IN_ALL|STS_IOC_OUT_ALL //UNI_MODE #define MajorVer 25U -#define MinorVer 4U -#define SubMinorVer 24U +#define MinorVer 6U +#define SubMinorVer 16U #define FirmwareVersion 3U #define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U diff --git a/Core/Src/main_5_9.c b/Core/Src/main_5_9.c deleted file mode 100644 index 60e07d4..0000000 --- a/Core/Src/main_5_9.c +++ /dev/null @@ -1,224 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file: main.c * - * @author Yunhorn (r) Technology Limited Application Team * - * @brief Yunhorn (r) SmarToilets (r) Product configuration file. * - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 Yunhorn Technology Limited. - * Copyright (c) 2023 Shenzhen Yunhorn Technology Co., Ltd. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "app_lorawan.h" -#include "gpio.h" -#include "usart.h" -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include "yunhorn_sts_sensors.h" -#include "sts_cmox_hmac_sha.h" -#include "spi.h" -#include "dma.h" -#include "tim.h" -#include "sts_lamp_bar.h" -#include "sys_app.h" - -#include "acc_hal_integration.h" -#include "example_bring_up.h" -#include "example_multiple_service_usage.h" -#include "example_detector_distance.h" -#include "example_detector_presence.h" -#include "example_detector_distance_recorded.h" -#include "example_service_sparse.h" -#include "ref_app_wave_to_exit.h" -#include "ref_app_smart_presence.h" -#include "ref_app_tank_level.h" -#include "ref_app_parking.h" -#include "acc_detector_presence.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ - -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ - -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - MX_GPIO_Init(); - MX_DMA_Init(); - MX_USART2_UART_Init(); - MX_TIM1_Init(); - MX_SPI1_Init(); - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - - MX_LoRaWAN_Init(); - /* USER CODE BEGIN 2 */ - - STS_Lamp_Bar_Self_Test_Simple(); - - - - - - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - - while (1) - { - /* USER CODE END WHILE */ - - MX_LoRaWAN_Process(); - - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - - /** Configure LSE Drive Capability - */ - HAL_PWR_EnableBkUpAccess(); - __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW); - - /** Configure the main internal regulator output voltage - */ - __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI; - RCC_OscInitStruct.LSEState = RCC_LSE_ON; - RCC_OscInitStruct.MSIState = RCC_MSI_ON; - RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT; - RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK - |RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1 - |RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } -} - -/* USER CODE BEGIN 4 */ - -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* User can add his own implementation to report the HAL error return state */ - __disable_irq(); - while (1) - { - } - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* User can add his own implementation to report the file name and line number, - ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ - while (1) - { - } - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/Core/Src/sts_lamp_bar_MAY26.c b/Core/Src/sts_lamp_bar_MAY26.c deleted file mode 100644 index c3e9b58..0000000 --- a/Core/Src/sts_lamp_bar_MAY26.c +++ /dev/null @@ -1,624 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file yunhorn_sts_lamp_bar.c * - * @author Yunhorn (r) Technology Limited Application Team * - * @brief Yunhorn (r) SmarToilets (r) Product configuration file. * - ****************************************************************************** - * @attention - * - * Copyright (c) 2022 Yunhorn Technology Limited. - * Copyright (c) 2022 Shenzhen Yunhorn Technology Co., Ltd. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -#include "main.h" -#include "dma.h" -#include "tim.h" -#include "string.h" -#include "sys_app.h" -#include "stm32_systime.h" -#include "sts_lamp_bar.h" -#include "ref_app_smart_presence.h" -#include "yunhorn_sts_sensors.h" - -#define ONE_PULSE (36) -#define ZERO_PULSE (20) - -#define LED_DATA_LEN (24) -#define WS2812B_DATA_LEN (LED_DATA_LEN * (STS_LAMP_BAR_LED_NUM+4)) -#define DEFAULT_LUMINANCE_LEVEL (20) -#define RESET_PULSE (10) //(80) TO FIX DARK_COLOR AND SM2 - - -typedef struct ws2812b_e { - uint16_t head[3]; - uint16_t GRB[24*STS_LAMP_BAR_LED_NUM]; - uint16_t tail; -} WS2812B_FrameTypeDef; - -volatile WS2812B_FrameTypeDef rgb_buf = { - .head[0] = 0, - .head[1] = 0, - .head[2] = 0, - .tail = 0 -}; - -uint8_t color_rgb[8][3] = { //STS_COLOR R G B MAPPING TABLE - {0,0,0},{0,1,0},{1,0,0},{0,0,1},{1,1,0},{1,0,1},{0,1,1},{1,1,1} -}; -volatile uint8_t sts_service_mask; -volatile uint8_t sts_work_mode = STS_DUAL_MODE; -volatile uint8_t sts_reed_hall_ext_int = 0; -volatile uint8_t sts_status_color = STS_DARK; -volatile uint8_t sts_lamp_bar_color = STS_GREEN; //puColor -volatile uint8_t sts_cloud_netcolor = STS_GREEN; //netColor -volatile uint8_t sts_occupancy_status; -volatile uint8_t sts_reed_hall_changed_flag = 1; -volatile uint8_t sts_reed_hall_result =0; -volatile uint8_t sts_tof_result_changed_flag = 0; -volatile uint8_t sts_water_leakage_result=0; -volatile uint8_t sts_water_leakage_changed_flag=0; - -volatile uint8_t sts_rss_result_changed_flag = 0; -volatile uint8_t sts_rss_result = STS_RESULT_NO_MOTION; -volatile uint8_t sts_rss_2nd_result = STS_RESULT_NO_MOTION; //2nd RSS sensor status -volatile uint8_t sts_tof_result = STS_RESULT_NO_MOTION; -volatile uint8_t last_sts_rss_result; -volatile uint8_t last_sts_reed_hall_result = 2; //Initial state, not 0, not 1 -volatile uint8_t last_lamp_bar_color; -extern volatile uint8_t sts_presence_fall_detection; -extern volatile float sts_presence_rss_distance; -extern volatile uint8_t sensor_data_ready; -extern SysTime_t mems_event_time; -extern volatile uint32_t event_start_time, event_stop_time; -uint8_t luminance_level = DEFAULT_LUMINANCE_LEVEL; - - -void STS_YunhornSTSEventP1_Process(void) -{ - STS_Lamp_Bar_Refresh(); - 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; - } - -} - -void STS_YunhornSTSEventP2_Process(void) -{ - STS_Lamp_Bar_Refresh(); - if ((sts_work_mode >= STS_RSS_MODE) && (sts_work_mode <= STS_TOF_RSS_MODE)) - { - STS_RSS_Smart_Presence_Detection(); - STS_Reed_Hall_Presence_Detection(); - - if (sts_rss_result == last_sts_rss_result) { - sts_rss_result_changed_flag =0; - } else { - sts_rss_result_changed_flag =1; - last_sts_rss_result = sts_rss_result; - } - - if (sts_reed_hall_result == last_sts_reed_hall_result) - { - sts_reed_hall_changed_flag = 0; - - } else - { - sts_reed_hall_changed_flag = 1; - } - if (sts_service_mask > 0 ) { - sts_rss_result_changed_flag =0; - sts_reed_hall_changed_flag = 0; - } - - STS_Combined_Status_Processing(); - - last_sts_rss_result = sts_rss_result; - last_sts_reed_hall_result = sts_reed_hall_result; - } - -} - -void STS_Reed_Hall_Presence_Detection(void) -{ -// HAL_Delay(50); // BOUNCING ELIMIATION - - if (STS_Reed_Hall_State == STS_Status_Door_Open) - { - sts_reed_hall_result = STS_Status_Door_Open; - - } else if (STS_Reed_Hall_State == STS_Status_Door_Close) - { - sts_reed_hall_result = STS_Status_Door_Close; - - } - - //sts_reed_hall_result = ((STS_Reed_Hall_State)&STS_Status_Door_Open); - -// HAL_Delay(20); // BOUNCING ELIMIATION - - sts_reed_hall_changed_flag = 0; - - sts_reed_hall_ext_int = 0; - -} - -void STS_RSS_Smart_Presence_Detection(void) -{ - STS_Lamp_Bar_Refresh(); - - //sts_presence_rss_presence_detection(); - - sts_presence_rss_fall_rise_detection(); - -// if (sts_presence_fall_detection) { -// STS_YunhornSTSFallDetection(); -// } - -} - -/* - * STS P3 process, Lamp Bar Scoller - */ -void STS_YunhornSTSEventP3_Process(void) -{ - STS_Lamp_Bar_Refresh(); - if (STS_Reed_Hall_State == STS_Status_Door_Open) - { - sts_lamp_bar_color =STS_GREEN; - } - else - { - sts_lamp_bar_color =STS_RED; - } - STS_Lamp_Bar_Scoller(sts_lamp_bar_color, luminance_level); -} - -/* - * STS P4 Process, STS_CAP_Sensor_Detection Process - * STS_CAP_SWITCH(ON) Boost Voltage to 5V, then hold for 1000 ms - * HAL_Delay(1000) (ms) - * STS_CAP_Read_Data() Read STS_CAP_DATA state - * STS_CAP_SWITCH(OFF) Switch Off Boosted Voltage - */ -void STS_YunhornSTSEventP4_Process(void) -{ - - APP_LOG(TS_OFF, VLEVEL_L, "\r\n P4 Testing Process\r\n"); - -} - -/* - * STS P5 Process, Detection ToF distance (VL53L0X) - * - */ - -void STS_YunhornSTSEventP5_Process(void) -{ - APP_LOG(TS_OFF, VLEVEL_L, "\r\n P5 Testing Process\r\n"); -} - -/* - * STS P6 Process, Detection ToF IN-OUT PEOPLE COUNT (VL53L3X) - * - */ - -void STS_YunhornSTSEventP6_Process(void) -{ - APP_LOG(TS_OFF, VLEVEL_L, "\r\n P6 Testing Process\r\n"); -} - - -/* - * STS P7 Process, Detection IAQ Sensors - * air quality and odor level sensors - */ - -void STS_YunhornSTSEventP7_Process(void) -{ - APP_LOG(TS_OFF, VLEVEL_L, "\r\n P7 Testing Process\r\n"); -} - - -/* - * STS P8 Process, Detection xxx Sensors - * xxx sensors - */ - -void STS_YunhornSTSEventP8_Process(void) -{ - APP_LOG(TS_OFF, VLEVEL_L, "\r\n P8 Testing Process\r\n"); -} - - -void STS_Lamp_Bar_Set_Dark(void) -{ - for (uint8_t i=0; i< STS_LAMP_BAR_LED_NUM; i++) - { - STS_WS2812B_Set_RGB(0x00,0x00,0x00,i); - } - //STS_WS2812B_Refresh(); -} - -void STS_WS2812B_Refresh(void) -{ - HAL_TIM_PWM_Start_DMA(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL, (uint32_t *)&rgb_buf, (RESET_PULSE+WS2812B_DATA_LEN+1)); - - //HAL_TIM_PWM_Start_IT(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL); -} - -void STS_Lamp_Bar_Init(void) -{ - if (sts_service_mask == STS_SERVICE_MASK_L0) - { - STS_Lamp_Bar_Set_STS_RGB_Color(STS_GREEN, luminance_level); - //STS_WS2812B_Refresh(); - HAL_Delay(200); - STS_Lamp_Bar_Set_STS_RGB_Color(STS_RED, luminance_level); - //STS_WS2812B_Refresh(); - HAL_Delay(200); - STS_Lamp_Bar_Set_STS_RGB_Color(STS_BLUE, luminance_level); - //STS_WS2812B_Refresh(); - HAL_Delay(200); - } -} - -//marquee scoller -void STS_Lamp_Bar_Scoller(uint8_t color, uint8_t luminance_level) -{ - STS_Lamp_Bar_Set_Dark(); - - for(uint8_t i = 0; i<(STS_LAMP_BAR_LED_NUM+1); i++) - { - //if (sts_service_mask < STS_SERVICE_MASK_L1) - // STS_WS2812B_Refresh(); - HAL_Delay(60); - if (i < STS_LAMP_BAR_LED_NUM) { - STS_WS2812B_Set_RGB(color_rgb[color][0]*luminance_level,color_rgb[color][1]*luminance_level, color_rgb[color][2]*luminance_level, i); - } - } - HAL_Delay(10); - - //if (sts_service_mask == STS_SERVICE_MASK_L0) { - // STS_WS2812B_Refresh(); - //} - -} - - -void STS_WS2812B_Set_RGB(uint8_t R, uint8_t G, uint8_t B, uint8_t idx) -{ - if (idx < STS_LAMP_BAR_LED_NUM) - { - for (uint8_t j = 0; j < 8; j ++) - { - rgb_buf.GRB[idx*24+j] = (G&(0X80)>>j)? ONE_PULSE : ZERO_PULSE; - rgb_buf.GRB[idx*24+8+j] = (R&(0X80)>>j)? ONE_PULSE : ZERO_PULSE; - rgb_buf.GRB[idx*24+16+j] = (B&(0X80)>>j)? ONE_PULSE : ZERO_PULSE; - } - } - // CHANGED AT 2023-05-10 - if (sts_service_mask == STS_SERVICE_MASK_L0) { - STS_WS2812B_Refresh(); - } -} - -void STS_Lamp_Bar_Set_RGB_Color(uint8_t red, uint8_t green, uint8_t blue ) -{ - HAL_Delay(1); - for(uint8_t i = 0; i < STS_LAMP_BAR_LED_NUM; i++) - { - for (uint8_t j = 0; j < 8; j ++) - { - rgb_buf.GRB[i*24+j] = (green&(0x80)>>j)? ONE_PULSE : ZERO_PULSE; - rgb_buf.GRB[i*24+8+j] = (red&(0x80)>>j)? ONE_PULSE : ZERO_PULSE; - rgb_buf.GRB[i*24+16+j] = (blue&(0x80)>>j)? ONE_PULSE : ZERO_PULSE; - } - } - if (sts_service_mask == STS_SERVICE_MASK_L0) { - STS_WS2812B_Refresh(); - } - -} - - -void STS_Lamp_Bar_Refresh(void) -{ - STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); -} -void STS_Lamp_Bar_Set_STS_RGB_Color(uint8_t sts_lamp_color, uint8_t luminance_level) -{ - uint8_t lum = luminance_level; - - STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0); - switch (sts_lamp_color) - { - case STS_DARK: - STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0); - break; - case STS_GREEN: - STS_Lamp_Bar_Set_RGB_Color(0x0, lum, 0x0); - break; - case STS_RED: - STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, 0x0); - break; - case STS_BLUE: - STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, lum); - break; - case STS_YELLOW: - STS_Lamp_Bar_Set_RGB_Color(lum, lum, 0x0); - break; - case STS_PINK: - STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, lum); - break; - case STS_CYAN: - STS_Lamp_Bar_Set_RGB_Color(0x0, lum, lum); - break; - case STS_WHITE: - STS_Lamp_Bar_Set_RGB_Color(lum, lum, lum); - break; - case STS_RED_BLUE: - STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, 0x0); - HAL_Delay(300); - STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, lum); - HAL_Delay(300); - break; - } -} - -void STS_Reed_Hall_Working(void) -{ - -} -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 (event_start_time == 0) { - - event_start_time = mems_event_time.Seconds; - event_stop_time = 0; - - APP_LOG(TS_OFF, VLEVEL_L, "\r\n Event Started at %6u Seconds \r\n", event_start_time); - } - - - } else if ((sts_rss_result != STS_RESULT_MOTION) || (sts_reed_hall_result != STS_Status_Door_Close) || (sts_tof_result != STS_RESULT_PRESENCE)) - { - if (event_stop_time ==0) - { - event_stop_time = mems_event_time.Seconds; - - event_start_time = 0; - - APP_LOG(TS_OFF, VLEVEL_L, "\r\n Event Stop at %6u Seconds \r\n", event_stop_time); - } - } - - switch (sts_work_mode) - { - case STS_NETWORK_MODE: - sts_status_color = sts_cloud_netcolor; - break; - case STS_WIRED_MODE: // NO LAMP BAR FOR THOSE WATER LEAKAGE SENSOR OR SOAP CAPACITY SENSORS - sts_status_color = STS_DARK; - sts_water_leakage_result = (sts_reed_hall_result == STS_Status_Door_Open )?STS_RESULT_WATER_LEAKAGE_YES:STS_RESULT_WATER_LEAKAGE_NO; - sts_water_leakage_changed_flag = 1; - break; - case STS_REEDSWITCH_MODE: - - sts_status_color = (sts_reed_hall_result == STS_Status_Door_Open )? STS_GREEN: STS_RED; - - break; - case STS_RSS_MODE: - if (sts_rss_result == STS_RESULT_NO_MOTION){ - sts_status_color = STS_GREEN; - } else if ((sts_rss_result == STS_RESULT_MOTION)) - { - sts_status_color = STS_RED; - } - break; - case STS_DUAL_MODE: - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_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_status_color = STS_RED; - } - break; - case STS_REMOTE_REED_RSS_MODE: - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_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_status_color = STS_RED; - } - break; - case STS_DUAL_RSS_MODE: - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_rss_2nd_result == STS_RESULT_NO_MOTION)) - { - sts_status_color = STS_GREEN; - } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_rss_2nd_result == STS_RESULT_MOTION)) - { - sts_status_color = STS_RED; - } - - break; - case STS_TOF_RSS_MODE: - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_tof_result == STS_RESULT_NO_PRESENCE)){ - sts_status_color = STS_GREEN; - - } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_tof_result == STS_RESULT_PRESENCE)) - { - sts_status_color = STS_RED; - } - - break; -// TO-DO LIST *********************************************************** - case STS_TOF_DISTANCE_MODE: - if ((sts_tof_result == STS_RESULT_NO_PRESENCE)) { - sts_status_color = STS_GREEN; - } else if ((sts_tof_result == STS_RESULT_PRESENCE)) { - sts_status_color = STS_RED; - } - break; - case STS_TOF_PRESENCE_MODE: - if ((sts_tof_result == STS_RESULT_NO_PRESENCE)) { - sts_status_color = STS_GREEN; - } else if ((sts_tof_result == STS_RESULT_PRESENCE)) { - sts_status_color = STS_RED; - } - break; - case STS_TOF_IN_OUT_MODE: - if ((sts_tof_result == STS_RESULT_NO_PRESENCE)) { - sts_status_color = STS_GREEN; - } else if ((sts_tof_result == STS_RESULT_PRESENCE)) { - sts_status_color = STS_RED; - } - break; -// TO-DO LIST *********************************************************** - default: - break; - } - - - if (sts_status_color == STS_RED_BLUE) - { - STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); - } - if ((sts_work_mode == STS_WIRED_MODE) || (sts_service_mask > 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_service_mask == STS_SERVICE_MASK_L0)? sts_status_color:STS_DARK); - - STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); - - if ((sts_service_mask == STS_SERVICE_MASK_L0) || (sts_lamp_bar_color == STS_DARK)) - { - // STS_WS2812B_Refresh(); - } - - last_lamp_bar_color = sts_lamp_bar_color; - } - } - - if ((sts_rss_result_changed_flag)|| (sts_reed_hall_changed_flag) || (sts_tof_result_changed_flag) || (sts_water_leakage_changed_flag)) - { - sensor_data_ready = 1; - STS_PRESENCE_SENSOR_Prepare_Send_Data(); - sts_rss_result_changed_flag =0; - sts_reed_hall_changed_flag =0; - sts_tof_result_changed_flag =0; - sts_water_leakage_changed_flag=0; - } -} - -void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) -{ - __HAL_TIM_SetCompare(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL,0); - HAL_TIM_PWM_Stop_DMA(&STS_LAMP_BAR_HTIM,STS_LAMP_BAR_TIM_CHANNEL); - -} - -void STS_Lamp_Bar_Self_Test_Simple(void) -{ - uint8_t color=0, luminance_level=10; - APP_LOG(TS_OFF, VLEVEL_M, "\r\n [#1] RGB Space Lumianance Level Testing Start\r\n"); - for (color=STS_GREEN; color <= STS_RED_BLUE; color++) - { - luminance_level = 10; - do { - STS_Lamp_Bar_Set_STS_RGB_Color(color, luminance_level); - HAL_Delay(10); - luminance_level += 20; - } while (luminance_level < 99); - //STS_Lamp_Bar_Set_Dark(); - } - APP_LOG(TS_OFF, VLEVEL_M, "\r\n [#1] RGB Space Lumianance Level Testing Finished\r\n"); -} -void STS_Lamp_Bar_Self_Test(void) -{ - uint8_t color=0, luminance_level=10; - - APP_LOG(TS_OFF, VLEVEL_M, "\r\n YunHorn STS Indicative Lamp Self Test\r\n"); - - STS_Lamp_Bar_Self_Test_Simple(); - - APP_LOG(TS_OFF, VLEVEL_H, "\r\n [#2] Scoller Testing\r\n"); - for (color = STS_GREEN; color <= STS_RED_BLUE; color++) - { - STS_Lamp_Bar_Scoller(color, luminance_level); - } - STS_Lamp_Bar_Set_Dark(); - - APP_LOG(TS_OFF, VLEVEL_M, "\r\n [##] YunHorn STS Indicative Lamp Self Test Finished\r\n"); - if ((sts_work_mode == STS_WIRED_MODE) ) - { - STS_Lamp_Bar_Set_Dark(); - } else - { - STS_Lamp_Bar_Set_STS_RGB_Color(STS_GREEN, luminance_level); - } - - -} -void sts_rgb_unit_test(void) -{ - - APP_LOG(TS_OFF, VLEVEL_L, "\r\n STS Lamp Bar Init...\r\n"); - - STS_Lamp_Bar_Set_Dark(); - - STS_Lamp_Bar_Full_Color_Gradient(); - - STS_Lamp_Bar_Self_Test(); - - do { - for (uint8_t i=0; i<9; i++) - { - APP_LOG(TS_OFF, VLEVEL_L, "\r\n STS Lamp Bar color = %d...\r\n", i); - - STS_Lamp_Bar_Set_STS_RGB_Color(i, luminance_level); - STS_Combined_Status_Processing(); - HAL_Delay(6000); - STS_Lamp_Bar_Set_Dark(); - } - } while(1); - - - -} - diff --git a/Core/Src/yunhorn_sts_presence_sensor_JULY3.c b/Core/Src/yunhorn_sts_presence_sensor_JULY3.c deleted file mode 100644 index eaedba4..0000000 --- a/Core/Src/yunhorn_sts_presence_sensor_JULY3.c +++ /dev/null @@ -1,555 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file yunhorn_sts_presence_sensor.c * - * @author Yunhorn (r) Technology Limited Application Team * - * @brief Yunhorn (r) SmarToilets (r) Product configuration file. * - ****************************************************************************** - * @attention - * - * Copyright (c) 2022 Yunhorn Technology Limited. - * Copyright (c) 2022 Shenzhen Yunhorn Technology Co., Ltd. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "stdint.h" -#include "platform.h" -#include "sys_conf.h" -#include "sys_app.h" -#include "stdio.h" -#include "stm32_systime.h" -#include "adc_if.h" -#include "gpio.h" -#include "LmHandler.h" -#include "lora_app.h" -#include "yunhorn_sts_prd_conf.h" -#include "yunhorn_sts_sensors.h" -#include "sts_cmox_hmac_sha.h" -/* USER CODE BEGIN Includes */ -#if (defined(YUNHORN_STS_O6_ENABLED) && defined(USE_ACCONEER_A111)) -//#include "yunhorn_sts_rss_sensor.h" -extern volatile uint8_t sts_ac_code[20]; -volatile uint32_t rfac_timer; -extern volatile uint8_t sensor_data_ready; -volatile STS_OO_SensorStatusDataTypeDef sts_o6_sensorData; -volatile STS_PRESENCE_SENSOR_Event_Status_t sts_o6_event_status; -volatile float sts_distance_rss_distance; -extern volatile float sts_presence_rss_distance, sts_presence_rss_score; -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, event_stop_time; -extern volatile STS_OO_RSS_SensorTuneDataTypeDef sts_presence_rss_config; -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; -extern volatile uint8_t sts_reed_hall_result, sts_rss_result, sts_rss_2nd_result,sts_tof_result, sts_status_color, sts_lamp_bar_color, sts_work_mode, sts_service_mask; -extern volatile distance_measure_cfg_t distance_cfg; -extern uint8_t sts_fall_rising_detected_result; -extern volatile uint16_t sts_fall_rising_pattern_factor1; -extern volatile uint16_t sts_roc_acc_standard_variance; -extern uint8_t luminance_level; -SysTime_t mems_event_time; - -#endif - -/* USER CODE END Includes */ - -/* External variables ---------------------------------------------------------*/ -/* USER CODE BEGIN EV */ - -/* USER CODE END EV */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ - -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ - -/* USER CODE BEGIN PD */ - -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ - -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -/* USER CODE BEGIN PFP */ -#if (defined(YUNHORN_STS_O6_ENABLED) && defined(USE_ACCONEER_A111)) - -#endif - -/* USER CODE END PFP */ - -/* Exported functions --------------------------------------------------------*/ - -void STS_YunhornAuthenticationCode_Process(void) -{ - if (sts_ac_code[0] == 0x00) { - APP_LOG(TS_OFF,VLEVEL_H, "Initial AC CODE blank... \r\n"); - return; - } - - sts_service_mask = (sts_hmac_verify()!= 0)? STS_SERVICE_MASK_L2:STS_SERVICE_MASK_L0; - - if (sts_service_mask == STS_SERVICE_MASK_L2) { - sts_ac_code[0] = 0x0; - } - APP_LOG(TS_OFF, VLEVEL_H, "STS_SERVICE_MASK:%d \r\n",sts_service_mask); -} - -void STS_YunhornSTSEventRFAC_Process(void) -{ - if (sts_ac_code[0] ==0x0) - { - if ((rfac_timer >= STS_BURN_IN_RFAC) && (rfac_timer < (STS_BURN_IN_RFAC +3))) - { - APP_LOG(TS_OFF, VLEVEL_H, "\r\n -------------------RFAC Process\r\n"); - STS_SENSOR_Upload_Message(YUNHORN_STS_O6_USER_APP_CTRL_REPLY_PORT, 4, "RFAC"); - } - if ((rfac_timer > (STS_BURN_IN_RFAC + 2))) - { - APP_LOG(TS_OFF, VLEVEL_H, "\r\n -------------------Verify RFAC Success or Not\r\n"); - sts_service_mask = (sts_hmac_verify()!= 0)? STS_SERVICE_MASK_L2:STS_SERVICE_MASK_L0; - if (sts_service_mask == STS_SERVICE_MASK_L2) { - sts_ac_code[0] = 0x0; - } - } - } - -} - -void STS_FallDetection_LampBarProcess(void) -{ - uint8_t buf[32]={0x0}; - uint8_t i=0; - switch (sts_fall_rising_detected_result) - { - case STS_PRESENCE_LAYDOWN: - - break; - case STS_PRESENCE_FALL: - sts_lamp_bar_color = STS_BLUE; //STS_RED_BLUE; - sts_status_color = STS_BLUE; //STS_RED_BLUE; - sts_rss_result = STS_RESULT_MOTION; - STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); - - buf[i++] = (uint8_t)sts_lamp_bar_color; - buf[i++] = (uint8_t)sts_work_mode; - buf[i++] = (uint8_t)sts_fall_rising_detected_result; - - buf[i++] = (uint8_t)(sts_fall_rising_pattern_factor1/10 + 0x30)&0xFF; - buf[i++] = (uint8_t)(sts_fall_rising_pattern_factor1%10 + 0x30)&0xFF; - buf[i++] = (uint8_t)(sts_roc_acc_standard_variance/10 + 0x30)&0xFF; - buf[i++] = (uint8_t)(sts_roc_acc_standard_variance%10 + 0x30)&0xFF; - break; - - case STS_PRESENCE_RISING: - sts_lamp_bar_color = STS_RED; // normal occupancy status - sts_status_color = STS_RED; // normal occupancy status - sts_rss_result = STS_RESULT_MOTION; - STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); - buf[i++] = (uint8_t)sts_lamp_bar_color; - buf[i++] = (uint8_t)sts_work_mode; - buf[i++] = (uint8_t)sts_fall_rising_detected_result; - - // TESTING ONLY TO BE REMOVED - buf[i++] = (uint8_t)(sts_fall_rising_pattern_factor1/10 + 0x30)&0xFF; - buf[i++] = (uint8_t)(sts_fall_rising_pattern_factor1%10 + 0x30)&0xFF; - buf[i++] = (uint8_t)(sts_roc_acc_standard_variance/10 + 0x30)&0xFF; - buf[i++] = (uint8_t)(sts_roc_acc_standard_variance%10 + 0x30)&0xFF; - break; - - default: - break; - } - - APP_LOG(TS_OFF, VLEVEL_L, "\r\n <<<<<<<<<<<<<< Fall Rise state=%d, send buf size = %d \r\n", - sts_fall_rising_detected_result, i ) - - STS_SENSOR_Upload_Message((LORAWAN_USER_APP_PORT+2), i, (char*)buf); - - sts_fall_rising_detected_result = STS_PRESENCE_NONE; - -} - -void STS_YunhornSTSFallDetection(void) -{ - //APP_LOG(TS_OFF, VLEVEL_M, "\r\n YUNHORN STS FALL DETECTION \r\n"); - - //STS_YunhornCheckStandardDeviation(); - -} - -void STS_PRESENCE_SENSOR_NVM_CFG(void) -{ - sts_presence_rss_config.default_start_m = (float)((float)sts_cfg_nvm.p[RSS_CFG_START_M]*0.1f); - sts_presence_rss_config.default_length_m = (float)((float)sts_cfg_nvm.p[RSS_CFG_LENGTH_M]*0.1f); - sts_presence_rss_config.default_threshold = (float)((float)sts_cfg_nvm.p[RSS_CFG_THRESHOLD]*0.1f); - sts_presence_rss_config.default_receiver_gain = (float)((float)sts_cfg_nvm.p[RSS_CFG_RECEIVER_GAIN]*0.01f); - - sts_presence_rss_config.default_zone_length_m = DEFAULT_ZONE_LENGTH; - sts_presence_rss_config.default_profile = (float)(sts_cfg_nvm.p[RSS_CFG_PROFILE]); - sts_presence_rss_config.default_update_rate_tracking = (float)(sts_cfg_nvm.p[RSS_CFG_RATE_TRACKING]); - sts_presence_rss_config.default_update_rate_presence = (float)(sts_cfg_nvm.p[RSS_CFG_RATE_PRESENCE]); - sts_presence_rss_config.default_hwaas = (float)(sts_cfg_nvm.p[RSS_CFG_HWAAS]); - - sts_presence_rss_config.default_nbr_removed_pc = (float)(sts_cfg_nvm.p[RSS_CFG_NBR_REMOVED_PC]); - -//filter parameter - sts_presence_rss_config.default_inter_frame_deviation_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_DEVIATION]*0.1f); - sts_presence_rss_config.default_inter_frame_fast_cutoff = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_FAST_CUTOFF]); - sts_presence_rss_config.default_inter_frame_slow_cutoff = (float)(sts_cfg_nvm.p[RSS_CFG_ITE_SLOW_CUTOFF]*0.01f); - sts_presence_rss_config.default_intra_frame_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_ITR_TIME]); - sts_presence_rss_config.default_intra_frame_weight = (float)(sts_cfg_nvm.p[RSS_CFG_ITR_WEIGHT]*0.1f); - sts_presence_rss_config.default_output_time_const = (float)(sts_cfg_nvm.p[RSS_CFG_OUTPUT_TIME]*0.1f); -//filter parameter - - sts_presence_rss_config.default_downsampling_factor = (float)(sts_cfg_nvm.p[RSS_CFG_DOWNSAMPLING_FACTOR]); - sts_presence_rss_config.default_power_save_mode = (float)(sts_cfg_nvm.p[RSS_CFG_POWER_MODE]); - - sts_rss_config_updated_flag = STS_RSS_CONFIG_FULL; //set to 2 for FULL config effect in next detection -} - -void STS_PRESENCE_SENSOR_NVM_CFG_SIMPLE(void) -{ - sts_presence_rss_config.default_start_m = (float)(sts_cfg_nvm.p[RSS_CFG_START_M]*0.1f); - sts_presence_rss_config.default_length_m = (float)(sts_cfg_nvm.p[RSS_CFG_LENGTH_M]*0.1f); - sts_presence_rss_config.default_threshold = (float)(sts_cfg_nvm.p[RSS_CFG_THRESHOLD]*0.1f); - sts_presence_rss_config.default_receiver_gain = (float)(sts_cfg_nvm.p[RSS_CFG_RECEIVER_GAIN]*0.01f); - - sts_rss_config_updated_flag = STS_RSS_CONFIG_SIMPLE; //set to 1 for simple config effect in next detection -} - -void STS_PRESENCE_SENSOR_Init_Send_Data(void) -{ - sts_o6_sensorData.lamp_bar_color = STS_GREEN; - sts_o6_sensorData.workmode = STS_DUAL_MODE; - - sts_o6_sensorData.state_sensor1_on_off = 0x0; - sts_o6_sensorData.state_sensor2_on_off = 0x0; - sts_o6_sensorData.state_sensor3_on_off = 0x0; - sts_o6_sensorData.state_sensor4_on_off = 0x0; - sts_o6_sensorData.rss_presence_distance = 0x0; - sts_o6_sensorData.rss_presence_score = 0x0; - sts_o6_sensorData.fall_state = STS_PRESENCE_NONE; - sts_o6_sensorData.fall_speed = 0x0; - sts_o6_sensorData.fall_gravity = 0x0; - sts_o6_sensorData.event_start_time = 0x0; - sts_o6_sensorData.event_stop_time = 0x0; - sts_o6_sensorData.overtime = 0x0; - - sts_o6_sensorData.battery_Pct = 99; // 99% as init value - sts_o6_sensorData.dutycycletimelevel = 1; - sensor_data_ready = 0; -} -void STS_PRESENCE_SENSOR_Prepare_Send_Data(void) -{ - sts_o6_sensorData.lamp_bar_color = sts_lamp_bar_color; - sts_o6_sensorData.workmode = sts_work_mode; - sts_o6_sensorData.state_sensor1_on_off = ((STS_Reed_Hall_State == STS_Status_Door_Open)? 0U:1U); - sts_o6_sensorData.state_sensor2_on_off = sts_rss_result; - sts_o6_sensorData.state_sensor3_on_off = sts_tof_result; - sts_o6_sensorData.state_sensor4_on_off = sts_rss_2nd_result; - if (sts_rss_result == STS_RESULT_MOTION) - { - sts_o6_sensorData.rss_presence_distance = (uint16_t)(sts_presence_rss_distance)&0xFFFF; - sts_o6_sensorData.rss_presence_score = (uint16_t)(sts_presence_rss_score)&0xFFFF; - } else { - sts_o6_sensorData.rss_presence_distance = 0x0; - sts_o6_sensorData.rss_presence_score = 0x0; - } - sts_o6_sensorData.fall_state = sts_fall_rising_detected_result; - if (sts_fall_rising_detected_result != STS_PRESENCE_NONE) - { - sts_o6_sensorData.fall_speed = (uint8_t)sts_fall_rising_pattern_factor1; - sts_o6_sensorData.fall_gravity = (uint8_t)sts_roc_acc_standard_variance; - } - - sts_o6_sensorData.overtime = (event_stop_time - event_start_time)> (sts_occupancy_overtime_threshold*60)? 1:0; - sts_o6_sensorData.event_start_time = event_start_time; - sts_o6_sensorData.event_stop_time = event_stop_time; -} - -void STS_PRESENCE_SENSOR_Read(STS_OO_SensorStatusDataTypeDef *o6_data) -{ - o6_data->lamp_bar_color = (uint8_t)sts_o6_sensorData.lamp_bar_color; - o6_data->workmode = (uint8_t)sts_o6_sensorData.workmode; - - o6_data->state_sensor1_on_off = (uint8_t)sts_o6_sensorData.state_sensor1_on_off; - o6_data->state_sensor2_on_off = (uint8_t)sts_o6_sensorData.state_sensor2_on_off; - o6_data->state_sensor3_on_off = (uint8_t)sts_o6_sensorData.state_sensor3_on_off; - o6_data->state_sensor4_on_off = (uint8_t)sts_o6_sensorData.state_sensor4_on_off; - o6_data->rss_presence_distance = (uint16_t)sts_o6_sensorData.rss_presence_distance; - o6_data->rss_presence_score = (uint16_t)sts_o6_sensorData.rss_presence_score; - o6_data->event_start_time = (uint32_t)sts_o6_sensorData.event_start_time; - o6_data->event_stop_time = (uint32_t)sts_o6_sensorData.event_stop_time; - o6_data->overtime = (uint8_t)sts_o6_sensorData.overtime; - - o6_data->battery_Pct = (uint8_t)sts_o6_sensorData.battery_Pct; - o6_data->dutycycletimelevel = (uint8_t)sts_o6_sensorData.dutycycletimelevel; - -} - -void STS_PRESENCE_SENSOR_GetValue(void) -{ - -} - -void STS_PRESENCE_SENSOR_WakeUp_Process_Sampling(void) -{ - if ((sensor_data_ready ==0)) { - STS_PRESENCE_SENSOR_GetValue(); - } -} - -void STS_PRESENCE_SENSOR_After_Wake_Up() -{ - -} - -/** - * @brief Initializes the motion sensors - * @param Instance Motion sensor instance - * @param Functions Motion sensor functions. Could be : - * - MOTION_ACCELERO for instance - * @retval BSP status - */ -void STS_PRESENCE_SENSOR_Init(void) -{ - APP_LOG(TS_ON, VLEVEL_M, "##### YunHorn SmarToilets(r) Presence Sensor Started\r\n"); - - sts_o6_sensorData.workmode = (uint8_t)STS_DUAL_MODE; - sts_o6_sensorData.lamp_bar_color = (uint8_t)STS_GREEN; - sts_o6_sensorData.battery_Pct = 99; - sts_o6_sensorData.dutycycletimelevel = 1; - sts_o6_sensorData.event_start_time = 0; - sts_o6_sensorData.event_stop_time = 0; - - STS_SENSOR_Power_ON(0); - STS_PRESENCE_SENSOR_REEDSWITCH_HALL_Init(); - STS_PRESENCE_SENSOR_TOF_Init(); - STS_PRESENCE_SENSOR_RSS_Init(); - - mems_int1_detected=0; -} - -void STS_PRESENCE_SENSOR_TOF_Init(void) -{ - APP_LOG(TS_ON, VLEVEL_H, "##### YunHorn SmarToilets(r) MEMS TOF Initializing \r\n"); - -} -void STS_PRESENCE_SENSOR_REEDSWITCH_HALL_Init(void) -{ - - APP_LOG(TS_ON, VLEVEL_H, "##### YunHorn SmarToilets(r) REED SWITCH HALL ELEMENT Initializing \r\n"); - -} -void STS_PRESENCE_SENSOR_RSS_Init(void) -{ - APP_LOG(TS_ON, VLEVEL_H, "##### YunHorn SmarToilets(r) MEMS RSS Initializing \r\n"); - - STS_SENSOR_Power_ON(0); - - STS_PRESENCE_SENSOR_NVM_CFG(); - - sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT; - - mems_int1_detected=0; - -} - -void STS_MOTION_SENSOR_ACT_INACT_DURATION_Init() -{ - -} - -void STS_PRESENCE_SENSOR_Get_Event_Status(STS_PRESENCE_SENSOR_Event_Status_t *Status) -{ - uint8_t int_source=0; - SysTime_t mems_event_time; - //int_source = ADXL345_GetRegisterValue(ADXL345_REG_INT_SOURCE); - - if (int_source & 0x10) { - mems_event_time = SysTimeGetMcuTime(); - Status->WakeUpStatus = 1U; - event_start_time = mems_event_time.Seconds; - } - else { - Status->WakeUpStatus =0U; - } - - if (int_source & 0x08) { - mems_event_time = SysTimeGetMcuTime(); - Status->SleepStatus = 1U; - event_stop_time = mems_event_time.Seconds; - } - else { - Status->SleepStatus = 0U; - - } - - -} - - -void STS_PRESENCE_SENSOR_Distance_Measure_Process(void) -{ - uint8_t exit_status = EXIT_SUCCESS, i=0; - - APP_LOG(TS_OFF, VLEVEL_H, "\r\n ****start_m=%u length_m=%u profile=%u hwaas=%u \r\n", - (unsigned int)(distance_cfg.start_m*1000),(unsigned int)(distance_cfg.length_m*1000), - (unsigned int)(distance_cfg.acc_profile),(unsigned int)(distance_cfg.hwaas)); - do - { - exit_status = sts_distance_rss_detector_distance(); - HAL_Delay(100); - i++; - } while ((exit_status == EXIT_FAILURE) && (i < 1)); - -} - -void STS_PRESENCE_SENSOR_Function_Test_Process(uint8_t *self_test_result, uint8_t count) -{ - uint8_t bring_up_result[20]; - STS_SENSOR_Power_ON(0); - HAL_Init(); - MX_GPIO_Init(); - HAL_Delay(150); //wait for sensor ready - - for (uint8_t i=0;i < count; i++) //while(1) - { - STS_Lamp_Bar_Self_Test_Simple(); - - sts_presence_rss_bring_up_test(bring_up_result); - - HAL_Delay(5000); - - STS_PRESENCE_SENSOR_Distance_Measure_Process(); - - } - - memcpy(self_test_result,bring_up_result, 10); - mems_int1_detected=0; -} - - -void STS_PRESENCE_SENSOR_Enable_Wake_Up_Detection() -{ - -} - -void STS_PRESENCE_SENSOR_Disable_Wake_Up_Detection(void) -{ - -} - -uint8_t STS_SENSOR_MEMS_Get_ID(uint8_t *devID) -{ - uint8_t scanned_id[2] = {0x0,0x0}; - -#ifdef YUNHORN_STS_O6_ENABLED - if (hal_test_spi_read_chipid(scanned_id)) - { - devID[0] = scanned_id[0]; - devID[1] = scanned_id[1]; - return true; - } - else - { - return false; - } -#endif - -} -/* -uint16_t STS_RSS_A111_GetDeviceIDValue(void) -{ - uint16_t devid=0; - if (STS_SENSOR_MEMS_Get_ID(&devid)) - { - return (uint16_t)devid; - } else return 0; -} -*/ -void STS_SENSOR_Power_ON(uint8_t cnt) -{ - switch (cnt) { - case 0: - case 1: - case 2: -#ifdef YUNHORN_STS_M7_ENABLED - HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_SET); -#endif -#ifdef YUNHORN_STS_O6_ENABLED - HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_SET); -#endif - break; - default: - break; - } - -} -void STS_SENSOR_Power_OFF(uint8_t cnt) -{ - switch (cnt) { - case 0: - case 1: - case 2: -#ifdef YUNHORN_STS_M7_ENABLED - HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET); -#endif -#ifdef YUNHORN_STS_O6_ENABLED - HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET); -#endif - break; - default: - break; - } -} - -void STS_SENSOR_MEMS_Reset(uint8_t cnt) -{ - switch (cnt) { - case 0: - case 1: - case 2: -#ifdef YUNHORN_STS_M7_ENABLED - HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_SET); -#endif -#ifdef YUNHORN_STS_O6_ENABLED - HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_RESET); - HAL_Delay(100); - HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_SET); -#endif - break; - default: - break; - } - -} - - -/* USER CODE BEGIN EF */ - -/* USER CODE END EF */ - -/* Private Functions Definition -----------------------------------------------*/ -/* USER CODE BEGIN PrFD */ - -/* USER CODE END PrFD */ diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index a099f65..9537a93 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -791,7 +791,10 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) // if (EventType == TX_ON_EVENT) { STS_YunhornSTSEventP1_Process(); - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + if (sts_work_mode != STS_REEDSWITCH_MODE) // to elimiate PA0 pull high instable issue 2025-0616 + { + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + } //SendTxData(); sts_reed_hall_changed_flag &= !(0x01); } diff --git a/STM32CubeIDE/Release/STS_O7.bin b/STM32CubeIDE/Release/STS_O7.bin index ce0e139..1cacad4 100644 Binary files a/STM32CubeIDE/Release/STS_O7.bin and b/STM32CubeIDE/Release/STS_O7.bin differ