fix instable PA0 pull high issue

This commit is contained in:
Yunhorn 2025-06-16 18:23:12 +08:00
parent 418956855c
commit f7bc31a5ad
6 changed files with 6 additions and 1406 deletions

View File

@ -246,8 +246,8 @@
#define STS_IOC_MODE_5_MASK STS_IOC_IN_ALL|STS_IOC_OUT_ALL //UNI_MODE #define STS_IOC_MODE_5_MASK STS_IOC_IN_ALL|STS_IOC_OUT_ALL //UNI_MODE
#define MajorVer 25U #define MajorVer 25U
#define MinorVer 4U #define MinorVer 6U
#define SubMinorVer 24U #define SubMinorVer 16U
#define FirmwareVersion 3U #define FirmwareVersion 3U
#define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U #define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U

View File

@ -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 */

View File

@ -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);
}

View File

@ -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 */

View File

@ -791,7 +791,10 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
// if (EventType == TX_ON_EVENT) // if (EventType == TX_ON_EVENT)
{ {
STS_YunhornSTSEventP1_Process(); 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(); //SendTxData();
sts_reed_hall_changed_flag &= !(0x01); sts_reed_hall_changed_flag &= !(0x01);
} }

Binary file not shown.