diff --git a/Core/Inc/iwdg.h b/Core/Inc/iwdg.h new file mode 100644 index 0000000..f79d539 --- /dev/null +++ b/Core/Inc/iwdg.h @@ -0,0 +1,58 @@ +/** + ****************************************************************************** + * File Name : IWDG.h + * Description : This file provides code for the configuration + * of the IWDG instances. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __iwdg_H +#define __iwdg_H +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_IWDG_Init(void); + +void Refresh_IWDG(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif +#endif /*__ iwdg_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Core/Inc/stm32wlxx_hal_conf.h b/Core/Inc/stm32wlxx_hal_conf.h index 660926c..63588a9 100644 --- a/Core/Inc/stm32wlxx_hal_conf.h +++ b/Core/Inc/stm32wlxx_hal_conf.h @@ -45,7 +45,7 @@ /*#define HAL_I2S_MODULE_ENABLED */ /*#define HAL_IPCC_MODULE_ENABLED */ /*#define HAL_IRDA_MODULE_ENABLED */ -/*#define HAL_IWDG_MODULE_ENABLED */ +#define HAL_IWDG_MODULE_ENABLED /*#define HAL_LPTIM_MODULE_ENABLED */ /*#define HAL_PKA_MODULE_ENABLED */ /*#define HAL_RNG_MODULE_ENABLED */ diff --git a/Core/Inc/sts_lamp_bar.h b/Core/Inc/sts_lamp_bar.h index 848d190..ad50a76 100644 --- a/Core/Inc/sts_lamp_bar.h +++ b/Core/Inc/sts_lamp_bar.h @@ -83,24 +83,37 @@ enum sts_lamp_color { #define STS_OCCUPANCY_OVERSTAY_COLOR STS_RED #else -#define STS_VACANT_COLOR STS_GREEN -#define STS_OCCUPY_COLOR STS_RED +//#define STS_VACANT_COLOR STS_GREEN +//#define STS_OCCUPY_COLOR STS_RED +//#define STS_SOS_COLOR STS_RED_BLUE + +#define STS_VACANT_COLOR (sts_color_occupy_vacant &0x0F) +#define STS_OCCUPY_COLOR (sts_color_occupy_vacant>>4 &0x0F) #define STS_SOS_COLOR STS_RED_BLUE #define STS_FALL_NORMAL_COLOR STS_GREEN -#define STS_FALL_SUSPICIOUS_COLOR STS_YELLOW -#define STS_FALL_CONFIRMED_COLOR STS_RED +//#define STS_FALL_SUSPICIOUS_COLOR STS_YELLOW +//#define STS_FALL_CONFIRMED_COLOR STS_RED +#define STS_FALL_SUSPICIOUS_COLOR (sts_color_severity_l2_l3>>4) +#define STS_FALL_CONFIRMED_COLOR (sts_color_severity_l2_l3&0x0F) #define STS_HUMAN_MOVEMENT_MOTIONLESS_NORMAL STS_GREEN -#define STS_HUMAN_MOVEMENT_MOTIONLESS_SHORT_COLOR STS_YELLOW -#define STS_HUMAN_MOVEMENT_MOTIONLESS_LONG_COLOR STS_RED +//#define STS_HUMAN_MOVEMENT_MOTIONLESS_SHORT_COLOR STS_YELLOW +//#define STS_HUMAN_MOVEMENT_MOTIONLESS_LONG_COLOR STS_RED +#define STS_HUMAN_MOVEMENT_MOTIONLESS_SHORT_COLOR (sts_color_severity_l2_l3>>4) +#define STS_HUMAN_MOVEMENT_MOTIONLESS_LONG_COLOR (sts_color_severity_l2_l3&0x0F) #define STS_OCCUPANCY_NORMAL_COLOR STS_GREEN -#define STS_OCCUPANCY_STAYLONGER_COLOR STS_YELLOW //NOT REALLY USED, JUST TO ALIGN FOR COLORS PATTERN -#define STS_OCCUPANCY_OVERSTAY_COLOR STS_BLUE +//#define STS_OCCUPANCY_STAYLONGER_COLOR STS_YELLOW //NOT REALLY USED, JUST TO ALIGN FOR COLORS PATTERN +//#define STS_OCCUPANCY_OVERSTAY_COLOR STS_BLUE +#define STS_OCCUPANCY_STAYLONGER_COLOR (sts_color_severity_l2_l3>>4) +#define STS_OCCUPANCY_OVERSTAY_COLOR (sts_color_severity_l2_l3&0x0F) +#define STS_COLOR_SEVERITY_L2 (sts_color_severity_l2_l3>>4) +#define STS_COLOR_SEVERITY_L3 (sts_color_severity_l2_l3&0x0F) #endif + /* enum sts_oo_work_mode { STS_NETWORK_MODE = 0, // 0 NETWORK MODE diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h index c8e4d0f..f10502a 100644 --- a/Core/Inc/sys_conf.h +++ b/Core/Inc/sys_conf.h @@ -47,7 +47,7 @@ extern "C" { /** * @brief Verbose level for all trace logs */ -#define VERBOSE_LEVEL VLEVEL_L +#define VERBOSE_LEVEL VLEVEL_M /** * @brief Enable trace logs diff --git a/Core/Inc/utilities_def.h b/Core/Inc/utilities_def.h index 68b7566..7d45540 100644 --- a/Core/Inc/utilities_def.h +++ b/Core/Inc/utilities_def.h @@ -92,7 +92,7 @@ typedef enum #if defined(STS_R1)||defined(STS_R1D)||defined(STS_R5)||defined(STS_R2) CFG_SEQ_Task_YunhornSTSEventP4, /* TOF RANGE */ #endif -#if defined(STS_P2)||defined(STS_T6)||defined(L8) +#if defined(STS_P2)||defined(STS_T6)||defined(STS_L8) CFG_SEQ_Task_YunhornSTSEventP5, /* TOF IN-OUT */ #endif #ifdef STS_R4 @@ -107,6 +107,9 @@ typedef enum #ifdef MODBUS_RS485 STS_YunhornSTSEventPIORS485_Process, /* RS485 MODBUS RTU */ #endif +#if defined(STS_L8) + CFG_SEQ_Task_YunhornSTSEventSelfTestProcess, /* Self Function Test Process */ +#endif /* USER CODE END CFG_SEQ_Task_Id_t */ CFG_SEQ_Task_NBR diff --git a/Core/Src/dma.c b/Core/Src/dma.c index 64afc88..0bd228e 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -66,6 +66,7 @@ void MX_DMA_Init(void) HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); #endif +#if 0 // I2C2 /* DMA1_Channel4_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 0, 0); @@ -73,7 +74,7 @@ void MX_DMA_Init(void) /* DMA1_Channel5_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn); - +#endif // USART2 /* DMA1_Channel6_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0); diff --git a/Core/Src/iwdg.c b/Core/Src/iwdg.c new file mode 100644 index 0000000..c57b355 --- /dev/null +++ b/Core/Src/iwdg.c @@ -0,0 +1,51 @@ +/** + ****************************************************************************** + * File Name : IWDG.c + * Description : This file provides code for the configuration + * of the IWDG instances. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "iwdg.h" +IWDG_HandleTypeDef hiwdg; +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* IWDG init function */ +void MX_IWDG_Init(void) +{ + + hiwdg.Instance = IWDG; + hiwdg.Init.Prescaler = IWDG_PRESCALER_256; // 32k -> 30 seconds + //hiwdg.Init.Window = 0x0FFF; + hiwdg.Init.Window = IWDG_WINDOW_DISABLE; + hiwdg.Init.Reload = 0x0FFF; + if (HAL_IWDG_Init(&hiwdg) != HAL_OK) + { + Error_Handler(); + } +} + +void Refresh_IWDG(void) +{ +// IWDG->KR=0XAAAA; + HAL_IWDG_Refresh(&hiwdg); +} +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Core/Src/main.c b/Core/Src/main.c index e5be67e..ade8474 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -21,13 +21,16 @@ #include "app_lorawan.h" #include "gpio.h" #include +#include "iwdg.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ -#include "i2c.h" +//#include "i2c.h" +#include "stm32wlxx_nucleo_bus.h" #include "dma.h" #include "usart.h" #include "sys_app.h" #include "tim.h" +#include "yunhorn_sts_sensors.h" #ifdef STS_P2 #include "app_tof.h" #include "app_tof_peoplecount.h" @@ -114,19 +117,23 @@ int main(void) else #endif { - MX_I2C2_Init(); + BSP_I2C2_Init(); MX_DMA_Init(); MX_TIM1_Init(); - + MX_IWDG_Init(); MX_LoRaWAN_Init(); - //STS_Lamp_Bar_Self_Test(); - } + //STS_Lamp_Bar_Self_Test(); + + } /* USER CODE BEGIN 2 */ + STS_Sensor_Init(); /* USER CODE END 2 */ + STS_Sensor_Prepare(); + /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) @@ -136,6 +143,7 @@ int main(void) MX_LoRaWAN_Process(); /* USER CODE BEGIN 3 */ + Refresh_IWDG(); } /* USER CODE END 3 */ } diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index a8d577c..679119e 100644 --- a/Core/Src/stm32wlxx_it.c +++ b/Core/Src/stm32wlxx_it.c @@ -328,7 +328,7 @@ void DMA1_Channel3_IRQHandler(void) } /* I2C2 */ - +#if 0 /** * @brief This function handles DMA1 Channel 4 Interrupt. */ @@ -337,7 +337,7 @@ void DMA1_Channel4_IRQHandler(void) /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */ /* USER CODE END DMA1_Channel4_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_i2c2_rx); + //HAL_DMA_IRQHandler(&hdma_i2c2_rx); /* USER CODE BEGIN DMA1_Channel4_IRQn 1 */ /* USER CODE END DMA1_Channel4_IRQn 1 */ @@ -352,13 +352,13 @@ void DMA1_Channel5_IRQHandler(void) /* USER CODE END DMA1_Channel5_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_i2c2_tx); + //HAL_DMA_IRQHandler(&hdma_i2c2_tx); /* USER CODE BEGIN DMA1_Channel5_IRQn 1 */ /* USER CODE END DMA1_Channel5_IRQn 1 */ } - +#endif // USART2 /** * @brief This function handles DMA1 Channel 6 Interrupt. diff --git a/Core/Src/stm32wlxx_nucleo_bus.c b/Core/Src/stm32wlxx_nucleo_bus.c index 145b527..3a74680 100644 --- a/Core/Src/stm32wlxx_nucleo_bus.c +++ b/Core/Src/stm32wlxx_nucleo_bus.c @@ -38,7 +38,7 @@ __weak HAL_StatusTypeDef MX_I2C2_Init(I2C_HandleTypeDef* hi2c); * @{ */ -extern I2C_HandleTypeDef hi2c2; +I2C_HandleTypeDef hi2c2; /** * @} */ diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index 52cd6a1..381ae84 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -57,7 +57,8 @@ 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_color_occupy_vacant = (STS_RED<<4|STS_GREEN); +extern volatile uint8_t sts_color_occupy_vacant; 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; @@ -127,7 +128,7 @@ void STS_Lamp_Bar_Scoller(uint8_t color, uint8_t lum_level) for(uint8_t i = 0; i 10)) + //if ((!lockLow && (sts_pir_duration_check_time.Seconds - sts_pir_start_time.Seconds) > 10)) + { + PIRValue = 0; + lockLow = true; + sts_pir_read = 0; + APP_LOG(TS_OFF, VLEVEL_M, "\r\n PIRValue=%d \r\n", PIRValue); + if (sts_pir_read != prev_sts_pir_state) { + sts_pir_state_changed = 1; + } else { + sts_pir_state_changed = 0; + } + prev_sts_pir_state = sts_pir_read; + } else { + PIRValue = 1; + sts_pir_read = 1; + + } + } + // HAL_Delay(50); + //__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + APP_LOG(TS_OFF, VLEVEL_M, "\r\nMotion Detection result=%d \r\n", sts_pir_read); OnSensorPIR1StateChanged(); + + if ( sts_pir_state_changed == 1) + { + sts_pir_state_changed = 0; + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + } + #endif //OnSensor3StateChanged(); //OnSensorPIR1StateChanged(); @@ -725,12 +867,14 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) } #endif +#if 0 if (sts_pir_read != last_sts_pir_read) { - last_sts_pir_read = sts_hall3_read; - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + last_sts_pir_read = sts_pir_read; + // disable PIR status upload 2025 04 18 + // UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); } - +#endif break; #if 0 case HALL4_Pin: @@ -897,7 +1041,7 @@ void STS_SENSOR_Upload_AppData_Message(LmHandlerAppData_t stsAppdata) } -void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, uint8_t *appDataBuffer) +int STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, uint8_t *appDataBuffer) { LmHandlerErrorStatus_t status = LORAMAC_HANDLER_ERROR; UTIL_TIMER_Time_t nextTxIn = 0; @@ -931,7 +1075,7 @@ void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, uint8 } } - + return status; } static void SendTxData(void) @@ -952,7 +1096,7 @@ static void SendTxData(void) #elif defined(STS_M1) sts_r_sensor_data_t sts_m1_sensor_data={0}; #elif defined(STS_L8) - sts_fhmos_sensor_data_t fhmos_data={0}; + sts_fhmos_sensor_data_t fhmos_info={0}; #elif defined(STS_XX) #endif @@ -987,7 +1131,7 @@ static void SendTxData(void) #endif #ifdef STS_L8 - STS_FHMOS_sensor_read(&fhmos_data); + STS_FHMOS_sensor_read(&fhmos_info); #endif #ifdef VL53LX @@ -1159,33 +1303,33 @@ static void SendTxData(void) #if defined(L8) //AppData.Buffer[i++] = 4; #if 0 - if ((fhmos_data.state_fall ==3)||(fhmos_data.state_occupancy ==3)||(fhmos_data.state_human_movement ==3)) + if ((fhmos_info.state_fall ==3)||(fhmos_info.state_occupancy ==3)||(fhmos_info.state_human_movement ==3)) { AppData.Buffer[i++] = 10; AppData.Buffer[i++] = 0x04; // payload type, 0x01= regular payload - 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; - if (fhmos_data.state_fall ==3) + AppData.Buffer[i++] = fhmos_info.state_fall; + AppData.Buffer[i++] = fhmos_info.state_human_movement; + AppData.Buffer[i++] = fhmos_info.state_occupancy; + AppData.Buffer[i++] = fhmos_info.state_sos_alarm; + AppData.Buffer[i++] = fhmos_info.lamp_bar_color; + if (fhmos_info.state_fall ==3) { - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_fall_confirmed>>24); - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_fall_confirmed>>16); - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_fall_confirmed>>8); - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_fall_confirmed); - } else if (fhmos_data.state_occupancy ==3){ - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_overstay_confirmed>>24); - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_overstay_confirmed>>16); - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_overstay_confirmed>>8); - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_overstay_confirmed); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_fall_confirmed>>24); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_fall_confirmed>>16); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_fall_confirmed>>8); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_fall_confirmed); + } else if (fhmos_info.state_occupancy ==3){ + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_overstay_confirmed>>24); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_overstay_confirmed>>16); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_overstay_confirmed>>8); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_overstay_confirmed); - } else if (fhmos_data.state_human_movement ==3) + } else if (fhmos_info.state_human_movement ==3) { - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_motionless_confirmed>>24); - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_motionless_confirmed>>16); - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_motionless_confirmed>>8); - AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_motionless_confirmed); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_motionless_confirmed>>24); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_motionless_confirmed>>16); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_motionless_confirmed>>8); + AppData.Buffer[i++] = 0xff&(fhmos_info.time_stamp_motionless_confirmed); } } else @@ -1194,38 +1338,38 @@ static void SendTxData(void) AppData.Buffer[i++] = 9; AppData.Buffer[i++] = 0x01; - 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_info.state_fall; + AppData.Buffer[i++] = fhmos_info.state_human_movement; + AppData.Buffer[i++] = fhmos_info.state_occupancy; + AppData.Buffer[i++] = fhmos_info.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; + AppData.Buffer[i++] = fhmos_info.lamp_bar_color; + AppData.Buffer[i++] = fhmos_info.state_hall_1; + AppData.Buffer[i++] = fhmos_info.state_hall_2; + AppData.Buffer[i++] = fhmos_info.state_PIR; - if (fhmos_data.state_fall_released == 1) + if (fhmos_info.state_fall_released == 1) { - fhmos_data.state_fall_released == 0; + fhmos_info.state_fall_released = 0; - AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_data.time_stamp_fall_confirmed>>24); - AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_data.time_stamp_fall_confirmed>>16); - AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_data.time_stamp_fall_confirmed>>8); - AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_data.time_stamp_fall_confirmed); + AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_info.time_stamp_fall_confirmed>>24); + AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_info.time_stamp_fall_confirmed>>16); + AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_info.time_stamp_fall_confirmed>>8); + AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_info.time_stamp_fall_confirmed); } } // AppData.Buffer[i++] = 0x01; // payload type, 0x01= regular payload #if 0 - 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_info.state_fall; + AppData.Buffer[i++] = fhmos_info.state_human_movement; + AppData.Buffer[i++] = fhmos_info.state_occupancy; + AppData.Buffer[i++] = fhmos_info.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; + AppData.Buffer[i++] = fhmos_info.lamp_bar_color; + AppData.Buffer[i++] = fhmos_info.state_hall_1; + AppData.Buffer[i++] = fhmos_info.state_hall_2; + AppData.Buffer[i++] = fhmos_info.state_PIR; #endif #elif defined(L8) @@ -1235,12 +1379,12 @@ static void SendTxData(void) sts_data->state_PIR = sts_pir_read;; 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; + AppData.Buffer[i++] = fhmos_info.state_fall; + AppData.Buffer[i++] = fhmos_info.state_human_movement; + AppData.Buffer[i++] = fhmos_info.occupancy; + AppData.Buffer[i++] = fhmos_info.state_sos_alarm; + AppData.Buffer[i++] = fhmos_info.lamp_bar_color; + AppData.Buffer[i++] = fhmos_info.batteryLevel; @@ -1262,7 +1406,7 @@ static void SendTxData(void) AppData.Buffer[i++] = (uint8_t)(sts_m1_sensor_data.on_off_event & 0xFF); #endif //STS_M1 - AppData.BufferSize = i; + AppData.BufferSize = (i&(~sts_service_mask))&0xff; #ifdef CLOCK_SYNC if( IsClockSynched == false ) @@ -1321,11 +1465,18 @@ static void OnTxTimerEvent(void *context) APP_LOG(TS_OFF, VLEVEL_M, "\nSET TASK P4\r\n"); UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP4), CFG_SEQ_Prio_0); #endif - - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + UTIL_TIMER_Stop(&TxTimer); + if (sts_warm_up_message_counter < 5) + { + //UTIL_TIMER_Stop(&TxTimer); + sts_warm_up_message_counter ++; + APP_LOG(TS_OFF, VLEVEL_M, "\r\n warm counter=%d \r\n", sts_warm_up_message_counter); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + UTIL_TIMER_Start(&TxTimer); + } /*Wait for next tx slot*/ - UTIL_TIMER_Start(&TxTimer); + /* USER CODE BEGIN OnTxTimerEvent_2 */ /* USER CODE END OnTxTimerEvent_2 */ @@ -1345,6 +1496,7 @@ static void OnRxTimerLedEvent(void *context) static void OnJoinTimerLedEvent(void *context) { HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); /* LED_RED */ + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP3), CFG_SEQ_Prio_0); } /* USER CODE END PrFD_LedEvents */ @@ -1399,12 +1551,12 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) } AppData.Port = 1; AppData.BufferSize = 16; - // UTIL_MEM_cpy_8(AppData.Buffer, (uint8_t*)"YUNHORN168", 10); UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer, (uint8_t *)YUNHORN_STS_PRD_STRING, sizeof(YUNHORN_STS_PRD_STRING)); - AppData.BufferSize = sizeof(YUNHORN_STS_PRD_STRING); + AppData.BufferSize = sizeof(YUNHORN_STS_PRD_STRING)-1; LmHandlerParams.IsTxConfirmed = true; LmHandlerErrorStatus_t status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false); if (status ==LORAMAC_HANDLER_SUCCESS ) LmHandlerParams.IsTxConfirmed = false; + } else { @@ -1414,6 +1566,13 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) APP_LOG(TS_OFF, VLEVEL_H, "###### U/L FRAME:JOIN | DR:%d | PWR:%d\r\n", joinParams->Datarate, joinParams->TxPower); } + + UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); + + // UTIL_TIMER_Start(&YunhornSTSSelfFunctionTestTimer); + // update 2025 05 28 ... not to start given sts mask bitmap has been stored and restored + + // UTIL_TIMER_Start(&TxTimer); // UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer); /* USER CODE END OnJoinRequest_1 */ } @@ -1676,7 +1835,7 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) r_b = !r_b; } - UTIL_TIMER_Start(&STSLampBarColorTimer); + UTIL_TIMER_Start(&STSLampBarColorTimer); #if 0 #if defined(STS_O6)||defined(O1L) UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP3), CFG_SEQ_Prio_0); @@ -1703,7 +1862,7 @@ static void OnYunhornSTSDurationCheckTimerEvent(void *context) * @brief Yunhorn STS Occupancy RSS WakeUP timer callback function * @param context ptr of STS RSS WakeUp context */ - +#if 0 static void OnYunhornSTSOORSSWakeUpTimerEvent(void *context) { #ifdef STS_O6 @@ -1711,17 +1870,30 @@ static void OnYunhornSTSOORSSWakeUpTimerEvent(void *context) #endif } - +#endif /** * @brief Yunhorn STS Heart beat timer callback function * @param context ptr of context */ +static void OnYunhornSTSSelfFunctionTestStartEvent(void *context) +{ + +#if 1 + if ((!sts_function_test_success)&&(sts_warm_up_message_counter==5)) + { + + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventSelfTestProcess), CFG_SEQ_Prio_0); + sts_function_test_success = true; + } +#endif + +} static void OnYunhornSTSHeartBeatTimerEvent(void *context) { + APP_LOG(TS_OFF, VLEVEL_M, "\r\n Heart beat timer \r\n"); // UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), CFG_SEQ_Prio_0); UTIL_TIMER_Stop(&YunhornSTSHeartBeatTimer); - uint8_t appHeartBeatDataPort=2, appHeartBeatBufferSize=2, appHeartBeatDataBuffer[32]={0x0}; if ((rfac_timer <(STS_BURN_IN_RFAC+3))&&(sts_cfg_nvm.ac[0]==0x0)&&(sts_cfg_nvm.ac[19]==0x0)) @@ -1739,7 +1911,6 @@ static void OnYunhornSTSHeartBeatTimerEvent(void *context) rfac_timer ++; } else { // normal heart-beat process -#if 1 #ifdef STS_P2 appHeartBeatDataPort = YUNHORN_STS_P2_LORA_APP_HTBT_PORT; #elif defined(STS_R1) @@ -1756,12 +1927,15 @@ static void OnYunhornSTSHeartBeatTimerEvent(void *context) appHeartBeatDataPort = YUNHORN_STS_L8_LORA_APP_HTBT_PORT; #endif +#if defined(L8)||defined(O6)||defined(O2)||defined(O6T)||defined(O1L)||defined(T6) // for keeping sync with webApp for state/lampbar color, in case failure of uplink message + APP_LOG(TS_OFF, VLEVEL_M, "\r\n Keep Sync message for state/lamp bar color with web app\r\n"); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); +#else appHeartBeatBufferSize = 2; appHeartBeatDataBuffer[0]=(uint8_t)(0x80|AppLedStateOn); appHeartBeatDataBuffer[1]=(uint8_t)(SYS_GetBatteryLevel()/100); //TODO XXX change to battery level in mV - APP_LOG(TS_OFF, VLEVEL_M, "\n\n HEART-BEAT TIMER = %d\n\n", rfac_timer); - STS_SENSOR_Upload_Message(appHeartBeatDataPort, appHeartBeatBufferSize, (uint8_t*)appHeartBeatDataBuffer); - + //APP_LOG(TS_OFF, VLEVEL_M, "\n\n HEART-BEAT TIMER = %d\n\n", rfac_timer); + STS_SENSOR_Upload_Message(appHeartBeatDataPort, appHeartBeatBufferSize, (uint8_t*)appHeartBeatDataBuffer); #endif } @@ -1799,6 +1973,7 @@ void OnYunhornSTSHeartBeatPeriodicityChanged(uint32_t periodicity) } /* USER CODE BEGIN PrFD_YunhornSTSWakeUpScanTimerEvents */ +#if 0 static void OnYunhornSTSWakeUpScanTimerEvent(void *context) { #if defined(STS_P2)||defined(STS_T6)||defined(L8) @@ -1810,12 +1985,46 @@ static void OnYunhornSTSWakeUpScanTimerEvent(void *context) #endif } +#endif void STSWakeupScanTimerStop(void) { UTIL_TIMER_Stop(&YunhornSTSWakeUpScanTimer); } +void STS_SENSOR_Warm_Up(void) +{ + AppData.Port = 1; + AppData.BufferSize = 16; + char warm_up[30]="Yunhorn Technology Limited"; + UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer, (uint8_t*)warm_up, sizeof(warm_up)); + //UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer, (uint8_t *)YUNHORN_STS_PRD_STRING, sizeof(YUNHORN_STS_PRD_STRING)); + AppData.BufferSize = sizeof(AppData.Buffer); + LmHandlerErrorStatus_t status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false); + if (LORAMAC_HANDLER_SUCCESS ==status ) + { + HAL_Delay(3000); + status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false); + } + if (LORAMAC_HANDLER_SUCCESS ==status ) + { + HAL_Delay(3000); + status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false); + } +} + +void STS_ClockSync_process(void) +{ + LmHandlerErrorStatus_t status = LORAMAC_HANDLER_ERROR; + if( IsClockSynched == false ) + { + status = LmhpClockSyncAppTimeReq( ); + + if (LORAMAC_HANDLER_SUCCESS == status) { + OnSysTimeUpdate(); + } + } +} uint32_t STS_Get_Date_Time_Stamp(void) { struct tm localtime={0}; diff --git a/LoRaWAN/Target/lorawan_conf.h b/LoRaWAN/Target/lorawan_conf.h index 443d818..d55512f 100644 --- a/LoRaWAN/Target/lorawan_conf.h +++ b/LoRaWAN/Target/lorawan_conf.h @@ -58,7 +58,7 @@ extern "C" { * - 0x01000400: Link Layer TS001-1.0.4 + Regional Parameters RP002-1.0.1 * - 0x01010100: soon available ... */ -#define LORAMAC_SPECIFICATION_VERSION 0x01000400 +#define LORAMAC_SPECIFICATION_VERSION 0x01010100 /*! * @brief Enable the additional LoRaWAN packages diff --git a/README.md b/README.md index f493308..bb39e95 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,5 @@ 2024 09 20 START RR 2024 09 25 START R1D 2024 09 27 GOOD STS-R4 on single board RM2_1 + + 2025 05 29 new start for 128 NVM diff --git a/STM32CubeIDE/.cproject b/STM32CubeIDE/.cproject index 6abc669..b5c4257 100644 --- a/STM32CubeIDE/.cproject +++ b/STM32CubeIDE/.cproject @@ -99,7 +99,7 @@ - + @@ -138,6 +138,7 @@