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