diff --git a/AS923_HK_DECODER.js b/AS923_HK_DECODER.js index aa41973..6f1dba4 100644 --- a/AS923_HK_DECODER.js +++ b/AS923_HK_DECODER.js @@ -172,9 +172,9 @@ function Decode(fPort, data, variables) { // For NC(Normal Closed states //data.Sensor1_Door_Contact_Open = bytes[3]===1?"Door Closed":"Door Open"; + data.Sensor2_Emergency_Button = bytes[4] === 0 ? "Alarm Push Down" : "No Alarm, Released"; + data.Sensor3_Motion_Detected = bytes[5] === 0 ? "No Motion" : "Motion Detected"; - data.Sensor2_Motion_Detected = bytes[4] === 0 ? "No Motion" : "Motion Detected"; - data.Sensor3_Emergency_Button = bytes[5] === 0 ? "Alarm Push Down" : "No Alarm, Released"; data.length = bytes.length if (data.length === 9) { data.Over_stay_state = (bytes[6] === 0) ? "False" : "True"; @@ -219,19 +219,26 @@ function Decode(fPort, data, variables) { data.Fall_Down_Speed_in_m_per_s = (bytes[18]); data.Fall_Down_Gravity_in_g = (bytes[19]); data.SOS_PushDown_Stamp = (bytes[20] << 24 | bytes[21] << 16 | bytes[22] << 8 | bytes[23]); - var sos_start = new Date(1000 * data.SOS_PushDown_Stamp); + if (data.SOS_PushDown_Stamp != 0) { + var sos_start = new Date(1000 * data.SOS_PushDown_Stamp); + data.SOS_PushDown_Time = "[" + sos_start.getDate() + "." + (sos_start.getMonth() + 1) + "." + (sos_start.getFullYear()) + "] " + sos_start.getHours() + ":" + sos_start.getMinutes() + ":" + sos_start.getSeconds(); + } else data.SOS_PushDown_Time = "N/A"; data.SOS_ReleaseUP_Stamp = (bytes[24] << 24 | bytes[25] << 16 | bytes[26] << 8 | bytes[27]); - var sos_stop = new Date(1000 * data.SOS_ReleaseUP_Stamp); - data.SOS_PushDown_Time = "[" + sos_start.getDate() + "." + (sos_start.getMonth() + 1) + "." + (sos_start.getFullYear()) + "] " + sos_start.getHours() + ":" + sos_start.getMinutes() + ":" + sos_start.getSeconds(); - data.SOS_ReleaseUP_Time = "[" + sos_stop.getDate() + "." + (sos_stop.getMonth() + 1) + "." + (sos_stop.getFullYear()) + "] " + sos_stop.getHours() + ":" + sos_stop.getMinutes() + ":" + sos_stop.getSeconds(); + if (data.SOS_ReleaseUP_Stamp != 0) { + var sos_stop = new Date(1000 * data.SOS_ReleaseUP_Stamp); + data.SOS_ReleaseUP_Time = "[" + sos_stop.getDate() + "." + (sos_stop.getMonth() + 1) + "." + (sos_stop.getFullYear()) + "] " + sos_stop.getHours() + ":" + sos_stop.getMinutes() + ":" + sos_stop.getSeconds(); + } else data.SOS_ReleaseUP_Time = "N/A"; data.Fall_Down_Stamp = (bytes[28] << 24 | bytes[29] << 16 | bytes[30] << 8 | bytes[31]); - var fall_start = new Date(1000 * data.Fall_Down_Stamp); + if (data.Fall_Down_Stamp != 0) { + var fall_start = new Date(1000 * data.Fall_Down_Stamp); + data.Fall_Down_Time = "[" + fall_start.getDate() + "." + (fall_start.getMonth() + 1) + "." + (fall_start.getFullYear()) + "] " + fall_start.getHours() + ":" + fall_start.getMinutes() + ":" + fall_start.getSeconds(); + } else data.Fall_RiseUp_Stamp = "N/A"; data.Fall_RiseUp_Stamp = (bytes[32] << 24 | bytes[33] << 16 | bytes[34] << 8 | bytes[35]); - var fall_stop = new Date(1000 * data.Fall_RiseUp_Stamp); - data.Fall_Down_Time = "[" + fall_start.getDate() + "." + (fall_start.getMonth() + 1) + "." + (fall_start.getFullYear()) + "] " + fall_start.getHours() + ":" + fall_start.getMinutes() + ":" + fall_start.getSeconds(); - data.Fall_RiseUp_Time = "[" + fall_stop.getDate() + "." + (fall_stop.getMonth() + 1) + "." + (fall_stop.getFullYear()) + "] " + fall_stop.getHours() + ":" + fall_stop.getMinutes() + ":" + fall_stop.getSeconds(); - + if (data.Fall_RiseUp_Stamp != 0) { + var fall_stop = new Date(1000 * data.Fall_RiseUp_Stamp); + data.Fall_RiseUp_Time = "[" + fall_stop.getDate() + "." + (fall_stop.getMonth() + 1) + "." + (fall_stop.getFullYear()) + "] " + fall_stop.getHours() + ":" + fall_stop.getMinutes() + ":" + fall_stop.getSeconds(); + } else data.Fall_RiseUp_Time = "N/A"; } return { "Yunhorn_SmarToilets_data": data }; } diff --git a/Core/Inc/main.h b/Core/Inc/main.h index a546296..d59d327 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -99,9 +99,22 @@ void Error_Handler(void); #define HALL2_GPIO_Port GPIOA #define HALL2_EXTI_IRQn EXTI1_IRQn -#define HALL1_STATE HAL_GPIO_ReadPin(HALL1_GPIO_Port, HALL1_Pin) -#define HALL2_STATE HAL_GPIO_ReadPin(HALL2_GPIO_Port, HALL2_Pin) +#define HALL3_Pin GPIO_PIN_9 // ALARM MUTE PIN +#define HALL3_GPIO_Port GPIOA +#define HALL3_EXTI_IRQn EXTI9_5_IRQn +#define HALL4_Pin GPIO_PIN_10 // ALARM RESET PIN +#define HALL4_GPIO_Port GPIOA +#define HALL4_EXTI_IRQn EXTI15_10_IRQn + +#define ALARM_MUTE_Pin HALL3_Pin // ALARM MUTE BUTTON +#define ALARM_RESET_Pin HALL4_Pin // ALARM RESET BUTTON + + +#define HALL1_STATE HAL_GPIO_ReadPin(HALL1_GPIO_Port, HALL1_Pin) //DOOR CONTACT +#define HALL2_STATE HAL_GPIO_ReadPin(HALL2_GPIO_Port, HALL2_Pin) //SOS BUTTON +#define HALL3_STATE HAL_GPIO_ReadPin(HALL3_GPIO_Port, HALL3_Pin) //ALARM MUTE BUTTON +#define HALL4_STATE HAL_GPIO_ReadPin(HALL4_GPIO_Port, HALL4_Pin) //ALARM RESET BUTTON #else #define BUT1_Pin GPIO_PIN_0 diff --git a/Core/Inc/sts_lamp_bar.h b/Core/Inc/sts_lamp_bar.h index 601ec88..f93dca3 100644 --- a/Core/Inc/sts_lamp_bar.h +++ b/Core/Inc/sts_lamp_bar.h @@ -34,6 +34,10 @@ extern "C" { #define STS_Status_Door_Open (1) //Normal Close NC:Close **2024-07-15 changed #define STS_Status_SOS_Pushdown (0) //Normal Open NO:Open #define STS_Status_SOS_Release (1) //Normal Open NO:Close +#define STS_Status_Alarm_Mute_Pushdown (0) //Normal Open NO:Open +#define STS_Status_Alarm_Mute_Release (1) //Normal Open NO:Close# +#define STS_Status_Alarm_Reset_Pushdown (0) //Normal Open NO:Open +#define STS_Status_Alarm_Reset_Release (1) //Normal Open NO:Close# enum sts_lamp_color { STS_DARK = 0, //灭:0, Code 0x00 diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h index 2b87ca3..db49324 100644 --- a/Core/Inc/sys_conf.h +++ b/Core/Inc/sys_conf.h @@ -50,7 +50,7 @@ extern "C" { * #define VLEVEL_M 2 functional traces * #define VLEVEL_H 3 all traces */ -#define VERBOSE_LEVEL VLEVEL_L +#define VERBOSE_LEVEL VLEVEL_H /** * @brief Enable trace logs diff --git a/Core/Inc/yunhorn_sts_prd_conf.h b/Core/Inc/yunhorn_sts_prd_conf.h index bc59c99..6c0b0a3 100644 --- a/Core/Inc/yunhorn_sts_prd_conf.h +++ b/Core/Inc/yunhorn_sts_prd_conf.h @@ -238,8 +238,8 @@ #define IS_STS_RS485_OUTPUT_ENABLE STS_IOC_OUT_1 #define MajorVer 24U -#define MinorVer 07U -#define SubMinorVer 26U +#define MinorVer 8U +#define SubMinorVer 1U #define FirmwareVersion 3U #define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U @@ -265,8 +265,8 @@ #define sts_sendhtbtport (YUNHORN_STS_O6_LORA_APP_HTBT_PORT) #endif #ifdef STS_O7 -#define sts_senddataport (YUNHORN_STS_O6_LORA_APP_DATA_PORT) -#define sts_sendhtbtport (YUNHORN_STS_O6_LORA_APP_HTBT_PORT) +#define sts_senddataport (YUNHORN_STS_O7_LORA_APP_DATA_PORT) +#define sts_sendhtbtport (YUNHORN_STS_O7_LORA_APP_HTBT_PORT) #endif #if defined(STS_O6)||defined(STS_O7) #define sts_appctrlport (YUNHORN_STS_O7_USER_APP_CTRL_PORT) @@ -429,8 +429,8 @@ * Address range 0800 0000H - 0803 FFFFH Size: 0x0004 0000 */ -#define FLASH_USER_START_ADDR ((void *) 0x0803F800U) // Last 2kB of flash -#define FLASH_USER_CONFIG_SIZE ((void *) 0x000007FFU) //0x400=1KB=1024 +#define FLASH_USER_START_ADDR ((void *) 0x0803F800UL) // Last 2kB of flash +#define FLASH_USER_CONFIG_SIZE ((void *) 0x000007FFUL) //0x400=1KB=1024 #define FLASH_USER_END_ADDR (FLASH_USER_START_ADDR + FLASH_USER_CONFIG - 1) /* 2KB = 2048 = 0x800 End @ of user Flash area */ diff --git a/Core/Inc/yunhorn_sts_sensors.h b/Core/Inc/yunhorn_sts_sensors.h index 8ebbf36..c6606ef 100644 --- a/Core/Inc/yunhorn_sts_sensors.h +++ b/Core/Inc/yunhorn_sts_sensors.h @@ -166,7 +166,8 @@ typedef struct STS_OO_SensorStatusDataTypeDef uint8_t state_sensor1_on_off; /* reedswitch or hall element 0: open, 1: closed */ uint8_t state_sensor2_on_off; /* reedswitch or hall element 0: open, 1: closed */ uint8_t state_sensor3_on_off; /* motion RSS, pcr_sensor_on_off; 1: occupancy, 0: no occupancy */ - uint8_t state_sensor4_on_off; /* reserved_sensor_on_off sensor state */ + uint8_t state_sensor4_on_off; /* alarm mute button_on_off sensor state */ + uint8_t state_sensor5_on_off; /* alarm reset button_on_off sensor state */ uint16_t rss_presence_distance; // in mm uint8_t rss_presence_zone[10]; uint8_t rss_presence_zone_count[10]; @@ -217,11 +218,21 @@ typedef struct STS_OO_SensorStatusDataTypeDef uint32_t event_sensor3_unconcious_duration; uint32_t event_sensor4_start_time; /* reserved */ + uint32_t event_sensor4_start_timestamp; uint32_t event_sensor4_stop_time; + uint32_t event_sensor4_stop_timestamp; uint32_t event_sensor4_duration; uint8_t alarm_indictor_mute_state; + + + uint32_t event_sensor5_start_time; /* reserved */ + uint32_t event_sensor5_stop_time; + uint32_t event_sensor5_start_timestamp; + uint32_t event_sensor5_stop_timestamp; + uint32_t event_sensor5_duration; uint8_t alarm_indictor_reset_state; + } STS_OO_SensorStatusDataTypeDef; //#endif @@ -654,7 +665,7 @@ void OnStoreSTSCFGContextRequest(void); /** * @brief Read config from flash */ -void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm); +void OnRestoreSTSCFGContextRequest(void *cfg_in_nvm); void STS_REBOOT_CONFIG_Init(void); @@ -679,10 +690,12 @@ void STS_YunhornSTSEventP8_Process(void); void OnSensor1StateChanged(void); void OnSensor2StateChanged(void); void OnSensor3StateChanged(void); -void OnSensor3AStateChanged(void); -void OnSensor3BStateChanged(void); -void OnSensor3CStateChanged(void); void OnSensor4StateChanged(void); + +void OnSensorRSS3AStateChanged(void); +void OnSensorRSS3BStateChanged(void); +void OnSensorRSS3CStateChanged(void); + uint32_t STS_Get_Date_Time_Stamp(void);//uint32_t *time_stamp, uint8_t *datetimestamp); void STS_SENSOR_MEMS_Reset(uint8_t cnt); @@ -732,7 +745,7 @@ void STS_MOTION_SENSOR_Enable_Wake_Up_Detection(void); void STS_MOTION_SENSOR_Initialization(void); */ -void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size); +void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size); void STS_SENSOR_Function_Test_Process(void); void STS_SENSOR_Distance_Test_Process(void); void STS_PRESENCE_SENSOR_Function_Test_Process(uint8_t *self_test_result, uint8_t count); diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 147e89a..1014ec6 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -52,15 +52,15 @@ void MX_GPIO_Init(void) /*Configure GPIO pin Output Level */ //HAL_GPIO_WritePin(GPIOB, LED1_Pin|LED2_Pin|PROB2_Pin|PROB1_Pin|LED3_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(GPIOA, A111_CS_N_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(A111_CS_N_GPIO_Port, A111_CS_N_Pin, GPIO_PIN_RESET); /*Configure GPIO pins : PBPin PBPin PBPin */ GPIO_InitStruct.Pin = LED1_Pin; //|LED2_Pin|LED3_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = MEMS_POWER_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; @@ -88,11 +88,11 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(A111_SENSOR_INTERRUPT_GPIO_Port, &GPIO_InitStruct); -#ifdef STS_O7 - GPIO_InitStruct.Pin = HALL1_Pin|HALL2_Pin; +#if defined(STS_O7)||defined(STS_O6)||defined(STS_O2) + GPIO_InitStruct.Pin = HALL1_Pin|HALL2_Pin|HALL3_Pin|HALL4_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); #else /*Configure GPIO pins : PAPin PAPin */ @@ -116,13 +116,19 @@ void MX_GPIO_Init(void) HAL_GPIO_Init(BUT3_GPIO_Port, &GPIO_InitStruct); #endif -#ifdef STS_O7 +#if defined(STS_O7)||defined(STS_O6)||defined(STS_O2) HAL_NVIC_SetPriority(HALL1_EXTI_IRQn, 15, 0); HAL_NVIC_EnableIRQ(HALL1_EXTI_IRQn); HAL_NVIC_SetPriority(HALL2_EXTI_IRQn, 15, 0); HAL_NVIC_EnableIRQ(HALL2_EXTI_IRQn); + HAL_NVIC_SetPriority(HALL3_EXTI_IRQn, 15, 0); + HAL_NVIC_EnableIRQ(HALL3_EXTI_IRQn); + + HAL_NVIC_SetPriority(HALL4_EXTI_IRQn, 15, 0); + HAL_NVIC_EnableIRQ(HALL4_EXTI_IRQn); + HAL_NVIC_SetPriority(A111_SENSOR_INTERRUPT_EXTI_IRQn, 0, 0); HAL_NVIC_EnableIRQ(A111_SENSOR_INTERRUPT_EXTI_IRQn); diff --git a/Core/Src/main.c b/Core/Src/main.c index 8558c2f..3414667 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -25,16 +25,10 @@ #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 "acc_detector_presence.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -99,15 +93,11 @@ int main(void) /* USER CODE END SysInit */ /* Initialize all configured peripherals */ - LED1_ON; + MX_LoRaWAN_Init(); - STS_Lamp_Bar_Self_Test_Simple(); - /* USER CODE BEGIN 2 */ - - /* USER CODE END 2 */ /* Infinite loop */ diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index 92ab009..8f8d6fd 100644 --- a/Core/Src/stm32wlxx_it.c +++ b/Core/Src/stm32wlxx_it.c @@ -231,7 +231,7 @@ void EXTI0_IRQHandler(void) /* USER CODE BEGIN EXTI0_IRQn 0 */ /* USER CODE END EXTI0_IRQn 0 */ -#ifdef STS_O7 +#if defined(STS_O7)||defined(STS_O6)||defined(STS_O2) //sts_reed_hall_1_changed = 1; HAL_GPIO_EXTI_IRQHandler(HALL1_Pin); #else @@ -251,7 +251,7 @@ void EXTI1_IRQHandler(void) /* USER CODE BEGIN EXTI1_IRQn 0 */ /* USER CODE END EXTI1_IRQn 0 */ -#ifdef STS_O7 +#if defined(STS_O7)||defined(STS_O6)||defined(STS_O2) //sts_reed_hall_2_changed = 1; HAL_GPIO_EXTI_IRQHandler(HALL2_Pin); #else @@ -358,20 +358,41 @@ void DMA1_Channel7_IRQHandler(void) /** * @brief This function handles EXTI Lines [9:5] Interrupt. */ -#if 1 + void EXTI9_5_IRQHandler(void) { /* USER CODE BEGIN EXTI9_5_IRQn 0 */ /* USER CODE END EXTI9_5_IRQn 0 */ - //HAL_GPIO_EXTI_IRQHandler(BUT3_Pin); + + HAL_GPIO_EXTI_IRQHandler(HALL3_Pin); // GPIOA -9 + /* USER CODE BEGIN EXTI9_5_IRQn 1 */ #ifdef RM2 HAL_GPIO_EXTI_IRQHandler(A111_SENSOR_INTERRUPT_Pin); #endif /* USER CODE END EXTI9_5_IRQn 1 */ } + +/** + * @brief This function handles EXTI Lines [15:10] Interrupt. + */ + +void EXTI15_10_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI9_5_IRQn 0 */ + + /* USER CODE END EXTI9_5_IRQn 0 */ + + HAL_GPIO_EXTI_IRQHandler(HALL4_Pin); // GPIOA -10 + + /* USER CODE BEGIN EXTI9_5_IRQn 1 */ +#ifdef RM2 + HAL_GPIO_EXTI_IRQHandler(A111_SENSOR_INTERRUPT_Pin); #endif + /* USER CODE END EXTI9_5_IRQn 1 */ +} + /** * @brief This function handles SPI1 Interrupt. */ diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index d8c73f0..e1ae1c3 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -63,6 +63,7 @@ extern volatile uint8_t sts_occupancy_status; extern volatile uint8_t sts_reed_hall_result, sts_emergency_button_pushed; // inital 0 = close volatile uint8_t sts_hall1_read=STS_Status_Door_Open,sts_hall2_read=STS_Status_SOS_Release; // Above hall1_read == reed_hall_result, hall2_read == emergency_button +volatile uint8_t sts_hall3_read=STS_Status_Alarm_Mute_Release,sts_hall4_read=STS_Status_Alarm_Reset_Release; extern volatile uint8_t sts_reed_hall_1_result, sts_reed_hall_2_result; extern volatile uint8_t sts_tof_result_changed_flag; @@ -73,7 +74,7 @@ extern volatile uint8_t sts_rss_result; extern volatile uint8_t sts_rss_2nd_result; //2nd RSS sensor status extern volatile uint8_t sts_tof_result; -//extern volatile uint8_t last_sts_reed_hall_result = 2; //Initial state, not 0, not 1 + volatile uint8_t last_lamp_bar_color=STS_GREEN; extern volatile uint8_t sts_presence_fall_detection; extern volatile uint8_t sts_fall_rising_detected_result; @@ -126,12 +127,11 @@ void STS_Lamp_Bar_Scoller(uint8_t color, uint8_t lum_level) for(uint8_t i = 0; i 3)? 1: 0; if (sts_rss_result) { LED1_ON; - OnSensor3AStateChanged(); + OnSensorRSS3AStateChanged(); } else { LED1_OFF; @@ -550,7 +562,7 @@ int sts_presence_rss_fall_rise_detection(void) if (sts_fall_rising_detected_result) { LED1_ON; - OnSensor3BStateChanged(); + OnSensorRSS3BStateChanged(); } else { LED1_OFF; @@ -558,7 +570,7 @@ int sts_presence_rss_fall_rise_detection(void) -#ifdef LOG_RSS +//#ifdef LOG_RSS APP_LOG(TS_OFF, VLEVEL_L,"\r\nSensor at Ceiling Height: %4u mm\r\n",(int)sts_sensor_install_height); for (uint8_t k=0; k<12; k++) { @@ -571,7 +583,7 @@ int sts_presence_rss_fall_rise_detection(void) APP_LOG(TS_OFF, VLEVEL_L,"\r\nMotion Distance Zone: %2u %4s", k, " "); } } -#endif +//#endif average_distance = (1000.0f*average_distance)/average_result; // in meters average_score = (1000.0f*average_score)/average_result; sts_presence_rss_distance = average_distance; @@ -697,10 +709,10 @@ void STS_YunhornCheckStandardDeviation(void) APP_LOG(TS_OFF, VLEVEL_L, "\r\n---Sensor Install Height=%6u-----Distance Average =%6u; Variance = %6u ; Standard =%6u \r\n", (int)sts_sensor_install_height, (int)(average_presence_distance*1000.0f), (int)(variance_presence_distance*1000.0f), (int)(standard_variance_presence_distance*1000.0f)); #endif -#ifdef LOG_RSS +//#ifdef LOG_RSS APP_LOG(TS_OFF, VLEVEL_M, "-------------Motion Average =%6u; Variance = %6u ; Standard =%6u \r\n", (int)(average_presence_score*1000.0f), (int)(variance_presence_score*1000.0f), (int)(standard_variance_presence_score*1000.0f)); -#endif +//#endif #ifdef LOG_RSS APP_LOG(TS_OFF, VLEVEL_L, "-------------ROC Dist Average =%6u; Variance = %6u ; Standard =%6u \r\n", (int)(average_roc_distance), (int)(variance_roc_distance), (int)(standard_variance_roc_distance)); diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 6931ddd..4dbc1b9 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -37,44 +37,55 @@ /* USER CODE BEGIN Includes */ extern volatile sts_cfg_nvm_t sts_cfg_nvm; + extern volatile uint8_t sts_ac_code[20]; +volatile uint8_t sts_work_mode = STS_UNI_MODE; +#if 0 +#if defined(STS_O7) +volatile uint8_t sts_work_mode = STS_UNI_MODE; +#elif defined(STS_O6) +volatile uint8_t sts_work_mode = STS_DUAL_MODE; +#elif defined(STS_O2) +volatile uint8_t sts_work_mode = STS_RSS_MODE; +#endif +#endif volatile uint8_t sts_service_mask=0; volatile uint32_t rfac_timer; volatile uint8_t sensor_data_ready=0; +volatile STS_PRESENCE_SENSOR_Event_Status_t sts_o7_event_status; +// GPIO reed hall pin extern volatile uint8_t sts_reed_hall_result; volatile uint8_t last_sts_reed_hall_result; +extern volatile uint8_t sts_hall1_read,sts_hall2_read, sts_hall3_read, sts_hall4_read; +volatile uint8_t sts_reed_hall_1_result=STS_Status_Door_Open,sts_reed_hall_2_result=STS_Status_SOS_Release, last_sts_reed_hall_1_result=STS_Status_Door_Open, last_sts_reed_hall_2_result=STS_Status_SOS_Release; +volatile uint8_t sts_reed_hall_3_result=STS_Status_Door_Open, last_sts_reed_hall_3_result=STS_Status_Door_Open, sts_reed_hall_4_result=STS_Status_Door_Open, last_sts_reed_hall_4_result=STS_Status_Door_Open; volatile uint8_t sts_soap_level_state; + +// RSS motion and distance volatile STS_OO_SensorStatusDataTypeDef sts_o7_sensorData; -volatile STS_PRESENCE_SENSOR_Event_Status_t sts_o7_event_status; -volatile float sts_distance_rss_distance, sts_sensor_install_height=0;//in mm +volatile float sts_distance_rss_distance=0, sts_sensor_install_height=0;//in mm extern volatile float sts_presence_rss_distance, sts_presence_rss_score; -extern volatile uint8_t sts_hall1_read,sts_hall2_read; -volatile uint8_t sts_reed_hall_1_result=STS_Status_Door_Open,sts_reed_hall_2_result=STS_Status_SOS_Release, last_sts_reed_hall_1_result=STS_Status_Door_Open, last_sts_reed_hall_2_result=STS_Status_SOS_Release; - volatile uint8_t sts_rss_config_updated_flag = 0; -extern volatile uint8_t mems_int1_detected, link_wakeup, link_sleep; -volatile uint32_t event_start_time=0, event_stop_time=0; -volatile uint32_t event_door_lock_start_time=0,event_door_lock_stop_time=0; extern volatile uint8_t sts_occupancy_overtime_state; -//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_in_10min; -extern volatile uint8_t sts_fall_rising_detected_result_changed_flag; -extern volatile uint8_t last_sts_fall_rising_detected_result; - - -extern volatile uint16_t sts_motionless_duration_threshold_in_min; -extern volatile uint8_t sts_emergency_button_pushed, sts_rss_2nd_result,sts_tof_result, sts_status_color, sts_lamp_bar_color, 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; +volatile uint32_t last_sts_rss_time_stamp=0; + +// RSS fall detection +extern volatile uint8_t sts_fall_detection_acc_threshold, sts_fall_detection_depth_threshold, sts_occupancy_overtime_threshold_in_10min; +extern volatile uint8_t sts_fall_rising_detected_result, sts_fall_rising_detected_result_changed_flag; +extern volatile uint8_t last_sts_fall_rising_detected_result; + +extern volatile uint16_t sts_motionless_duration_threshold_in_min; +extern volatile uint8_t sts_status_color, sts_lamp_bar_color;//puColor +extern volatile uint8_t sts_cloud_netcolor; //netColor extern uint8_t luminance_level; SysTime_t mems_event_time; -volatile uint32_t last_sts_rss_time_stamp=0; -extern volatile uint8_t sts_reed_hall_ext_int; + + volatile uint8_t sts_occupancy_status; volatile uint8_t sts_hall1_changed_flag=0, sts_hall2_changed_flag=0, last_sts_hall1_result=0, last_sts_hall2_result=0; volatile uint8_t sts_reed_hall_changed_flag = 0; @@ -96,12 +107,7 @@ extern volatile uint8_t detected_hs_zone; extern volatile STS_OO_RSS_SensorTuneDataTypeDef sts_presence_rss_config; volatile uint32_t cnt=0; -extern volatile distance_measure_cfg_t distance_cfg; -volatile uint8_t sts_work_mode = STS_DUAL_MODE; -extern uint8_t luminance_level; -extern volatile uint8_t sts_status_color; -extern volatile uint8_t sts_lamp_bar_color; //puColor -extern volatile uint8_t sts_cloud_netcolor; //netColor + volatile uint8_t sts_tof_result_changed_flag = 0; @@ -222,6 +228,7 @@ void STS_YunhornSTSEventRFAC_Process(void) void STS_YunhornSTSEventP1_Process(void) { + sts_reed_hall_1_result = HALL1_STATE; //sts_hall1_read; if (sts_reed_hall_1_result != last_sts_reed_hall_1_result) { @@ -236,6 +243,12 @@ void STS_YunhornSTSEventP1_Process(void) } last_sts_reed_hall_2_result = sts_reed_hall_2_result; + sts_reed_hall_3_result = sts_hall3_read;//HALL3_STATE;// sts_hall3_read; + last_sts_reed_hall_3_result = sts_reed_hall_3_result; + + sts_reed_hall_4_result = sts_hall4_read;//HALL4_STATE;// sts_hall3_read; + last_sts_reed_hall_4_result = sts_reed_hall_4_result; + STS_Combined_Status_Processing(); } @@ -274,7 +287,7 @@ void STS_Reed_Hall_Presence_Detection(void) // HAL_Delay(50); // BOUNCING ELIMIATION sts_reed_hall_1_result = (sts_hall1_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; sts_reed_hall_2_result = (sts_hall2_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; - + sts_reed_hall_3_result = (sts_hall3_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; //sts_reed_hall_result = ((STS_Reed_Hall_State)&STS_Status_Door_Open); @@ -282,7 +295,7 @@ void STS_Reed_Hall_Presence_Detection(void) sts_reed_hall_changed_flag = 0; - sts_reed_hall_ext_int = 0; + } @@ -502,11 +515,13 @@ void STS_Combined_Status_Processing(void) break; case STS_UNI_MODE: //FOR STS-O7 - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_SOS_Release )) + if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_SOS_Release ) + && (sts_reed_hall_3_result == STS_Status_Alarm_Mute_Release )&& (sts_reed_hall_4_result == STS_Status_Alarm_Reset_Release )) { sts_status_color = STS_GREEN; - } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close )||(sts_reed_hall_2_result == STS_Status_SOS_Pushdown )) + } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close )||(sts_reed_hall_2_result == STS_Status_SOS_Pushdown ) + || (sts_reed_hall_3_result == STS_Status_Alarm_Mute_Pushdown )|| (sts_reed_hall_4_result == STS_Status_Alarm_Reset_Pushdown )) { sts_status_color = STS_RED; @@ -861,13 +876,13 @@ void STS_PRESENCE_SENSOR_Init(void) sts_o7_sensorData.unconscious_state = 0; sts_o7_sensorData.unconscious_duration = 0; - PME_ON; - STS_PRESENCE_SENSOR_REEDSWITCH_HALL_Init(); + //PME_ON; + //STS_PRESENCE_SENSOR_REEDSWITCH_HALL_Init(); //STS_PRESENCE_SENSOR_TOF_Init(); //HAL_Delay(2000); //STS_PRESENCE_SENSOR_Distance_Measure_Process(); - mems_int1_detected=0; + } void STS_PRESENCE_SENSOR_TOF_Init(void) @@ -886,17 +901,23 @@ void STS_PRESENCE_SENSOR_RSS_Init(void) APP_LOG(TS_ON, VLEVEL_H, "##### YunHorn SmarToilets(r) MEMS RSS Initializing \r\n"); PME_ON; - - if ((sts_distance_rss_distance==0)&&(sts_sensor_install_height==0)) + APP_LOG(TS_ON, VLEVEL_H, "##### STS RSS Init step 1 :rss distance =%u height=%u\r\n",sts_distance_rss_distance,sts_sensor_install_height); + //if ((sts_distance_rss_distance==0)&&(sts_sensor_install_height==0)) { uint8_t exit_status =0; - exit_status=sts_distance_rss_detector_distance(); - if (exit_status ==0) { - APP_LOG(TS_ON, VLEVEL_M, "##### RSS Installation Height =%u \r\n", (uint16_t)sts_distance_rss_distance); - } - else { - APP_LOG(TS_ON, VLEVEL_M, "##### RSS Installation Height Error \r\n"); - } + do { + APP_LOG(TS_ON, VLEVEL_H, "##### STS RSS Init step 2 \r\n"); + exit_status=sts_distance_rss_detector_distance(); + APP_LOG(TS_ON, VLEVEL_H, "##### STS RSS Init step 2 return =%u \r\n", exit_status); + + if (exit_status ==0) { + APP_LOG(TS_ON, VLEVEL_H, "##### RSS Installation Height =%u \r\n", (uint16_t)sts_distance_rss_distance); + } + else { + APP_LOG(TS_ON, VLEVEL_H, "##### RSS Installation Height Error \r\n"); + HAL_Delay(100); + } + } while((0)); sts_sensor_install_height=sts_distance_rss_distance; } @@ -904,7 +925,7 @@ void STS_PRESENCE_SENSOR_RSS_Init(void) sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT; - mems_int1_detected=0; + } @@ -951,7 +972,7 @@ void STS_PRESENCE_SENSOR_Function_Test_Process(uint8_t *self_test_result, uint8_ HAL_Delay(1000); memcpy(self_test_result, bring_up_result, 10); - mems_int1_detected=0; + } uint8_t STS_SENSOR_MEMS_Get_ID(uint8_t *devID) @@ -974,20 +995,6 @@ uint8_t STS_SENSOR_MEMS_Get_ID(uint8_t *devID) } -void STS_SENSOR_MEMS_Reset(uint8_t cnt) -{ - switch (cnt) { - case 0: - case 1: - case 2: - HAL_GPIO_TogglePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin); - break; - default: - break; - } - -} - #ifdef STS_R4 void YUNHORN_STS_R4_SENSOR_Read(STS_R0_SensorDataTypeDef *r4_data) { @@ -1092,7 +1099,7 @@ void OnSensor2StateChanged(void) } /* motion sensor RSS ON-OFF */ -void OnSensor3StateChanged(void) +void OnSensorRSS3StateChanged(void) { SysTime_t sensor_event_time = SysTimeGetMcuTime(); #if 0 @@ -1119,7 +1126,7 @@ void OnSensor3StateChanged(void) } /* motion sensor A: Motion/No-Motion Detection, Unconscious Detection */ -void OnSensor3AStateChanged(void) +void OnSensorRSS3AStateChanged(void) { SysTime_t sensor_event_time = SysTimeGetMcuTime(); #if 0 @@ -1145,7 +1152,7 @@ void OnSensor3AStateChanged(void) } /* motion sensor B, Fall Detection suggestionF */ -void OnSensor3BStateChanged(void) +void OnSensorRSS3BStateChanged(void) { SysTime_t sensor_event_time = SysTimeGetMcuTime(); uint32_t time_stamp=STS_Get_Date_Time_Stamp(); @@ -1198,7 +1205,7 @@ void OnSensor3BStateChanged(void) } /* motion sensor C: Over stay detection */ -void OnSensor3CStateChanged(void) +void OnSensorRSS3CStateChanged(void) { SysTime_t sensor_event_time = SysTimeGetMcuTime(); #if 0 @@ -1223,6 +1230,38 @@ void OnSensor3CStateChanged(void) } +void OnSensor3StateChanged(void) +{ +#if 0 + SysTime_t sensor_event_time = SysTimeGetMcuTime(); + // reserved... to be finalized 2024-06-03 + + if (sts_xxx_result) + sts_o7_sensorData.event_sensor4_start_time = sensor_event_time.Seconds; + else + sts_o7_sensorData.event_sensor4_stop_time = sensor_event_time.Seconds; +#endif + SysTime_t sensor_event_time = SysTimeGetMcuTime(); + uint32_t time_stamp=STS_Get_Date_Time_Stamp(); + + if (sts_hall3_read==STS_Status_Alarm_Mute_Pushdown) + { + sts_o7_sensorData.event_sensor4_start_time = sensor_event_time.Seconds; + sts_o7_sensorData.event_sensor4_start_timestamp = time_stamp; + sts_o7_sensorData.event_sensor4_stop_time = 0; + sts_o7_sensorData.event_sensor4_duration = 0; + APP_LOG(TS_OFF, VLEVEL_L, "Alarm Mute PushDown ---Timer start: %u\r\n",sts_o7_sensorData.event_sensor4_start_time ); + }else if (sts_hall3_read==STS_Status_Alarm_Mute_Release) + { + sts_o7_sensorData.event_sensor4_start_time = 0; + sts_o7_sensorData.event_sensor4_start_timestamp = 0; + sts_o7_sensorData.event_sensor4_stop_time = sensor_event_time.Seconds; + sts_o7_sensorData.event_sensor4_stop_timestamp = time_stamp; + //sts_o7_sensorData.over_stay_state = 0; + //sts_o7_sensorData.event_sensor2_duration = 0; + } +} + void OnSensor4StateChanged(void) { #if 0 @@ -1234,6 +1273,25 @@ void OnSensor4StateChanged(void) else sts_o7_sensorData.event_sensor4_stop_time = sensor_event_time.Seconds; #endif + SysTime_t sensor_event_time = SysTimeGetMcuTime(); + uint32_t time_stamp=STS_Get_Date_Time_Stamp(); + + if (sts_hall4_read==STS_Status_Alarm_Mute_Pushdown) + { + sts_o7_sensorData.event_sensor5_start_time = sensor_event_time.Seconds; + sts_o7_sensorData.event_sensor5_start_timestamp = time_stamp; + sts_o7_sensorData.event_sensor5_stop_time = 0; + sts_o7_sensorData.event_sensor5_duration = 0; + APP_LOG(TS_OFF, VLEVEL_L, "Alarm RESET PushDown ---Timer start: %u\r\n",sts_o7_sensorData.event_sensor5_start_time ); + }else if (sts_hall4_read==STS_Status_Alarm_Mute_Release) + { + sts_o7_sensorData.event_sensor5_start_time = 0; + sts_o7_sensorData.event_sensor5_start_timestamp = 0; + sts_o7_sensorData.event_sensor5_stop_time = sensor_event_time.Seconds; + sts_o7_sensorData.event_sensor5_stop_timestamp = time_stamp; + //sts_o7_sensorData.over_stay_state = 0; + //sts_o7_sensorData.event_sensor2_duration = 0; + } } diff --git a/LoRaWAN/App/app_lorawan.c b/LoRaWAN/App/app_lorawan.c index 718fef8..8c72b4c 100644 --- a/LoRaWAN/App/app_lorawan.c +++ b/LoRaWAN/App/app_lorawan.c @@ -69,7 +69,8 @@ void MX_LoRaWAN_Init(void) /* USER CODE END MX_LoRaWAN_Init_1 */ SystemApp_Init(); /* USER CODE BEGIN MX_LoRaWAN_Init_2 */ - + //STS_Lamp_Bar_Self_Test_Simple(); + //STS_Lamp_Bar_Self_Test(); /* USER CODE END MX_LoRaWAN_Init_2 */ LoRaWAN_Init(); /* USER CODE BEGIN MX_LoRaWAN_Init_3 */ diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 4fa8ebb..980ff70 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -52,9 +52,9 @@ extern volatile uint8_t sts_service_mask; extern volatile uint32_t rfac_timer; volatile uint8_t sts_ac_code[YUNHORN_STS_AC_CODE_SIZE]={0x0}; extern hmac_result_t hmac_result; -extern volatile uint8_t sts_reed_hall_ext_int; -extern volatile uint8_t sts_hall1_read, sts_hall2_read; -volatile uint8_t last_sts_hall1_read=STS_Status_Door_Open, last_sts_hall2_read=STS_Status_SOS_Release; + +extern volatile uint8_t sts_hall1_read, sts_hall2_read, sts_hall3_read, sts_hall4_read; +volatile uint8_t last_sts_hall1_read=STS_Status_Door_Open, last_sts_hall2_read=STS_Status_SOS_Release, last_sts_hall3_read=STS_Status_Door_Open, last_sts_hall4_read=STS_Status_Door_Open ; volatile uint8_t sts_reed_hall_result =0, sts_emergency_button_pushed=0; // inital 0 = close extern volatile uint8_t sts_work_mode, sts_cloud_netcolor, sts_lamp_bar_color, sts_status_color; @@ -75,15 +75,15 @@ extern volatile uint32_t event_start_time, event_stop_time; extern volatile uint16_t sts_unconscious_threshold; volatile uint8_t sts_occupancy_overtime_state = 0; volatile uint8_t sts_presence_fall_detection=TRUE; -volatile uint32_t SamplingPeriodicity = 1000; //unit ms +volatile uint32_t SamplingPeriodicity = 3000; //unit ms volatile uint32_t HeartBeatPeriodicity = 120000; //unit ms volatile uint8_t STS_LoRa_WAN_Joined = 0; -volatile uint8_t mems_int1_detected = 0; + volatile uint8_t upload_message_timer=0; volatile uint8_t heart_beat_timer =0; volatile uint32_t wcnt=0; volatile bool p2_work_finished=true; -uint8_t outbuf[128]={0x0}; +uint8_t outbuf[255]={0x0}; volatile static bool r_b=true; volatile sts_cfg_nvm_t sts_cfg_nvm = { sts_mtmcode1, @@ -222,7 +222,7 @@ typedef enum TxEventType_e /* USER CODE BEGIN PTD */ #define YUNHORN_STS_RSS_WAKEUP_CHECK_TIME SamplingPeriodicity //3000 ms #define YUNHORN_STS_SAMPLING_CHECK_TIME SamplingPeriodicity -#define YUNHORN_STS_HEART_BEAT_CHECK_TIME HeartBeatPeriodicity +#define YUNHORN_STS_HEART_BEAT_CHECK_TIME 300000 //300 sec, 5 min /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ @@ -487,7 +487,7 @@ static LmHandlerParams_t LmHandlerParams = /** * @brief Type of Event to generate application Tx */ -static TxEventType_t EventType = TX_ON_EVENT; //TX_ON_TIMER;//TX_ON_EVENT; +static TxEventType_t EventType = TX_ON_TIMER; //TX_ON_TIMER;//TX_ON_EVENT; /** * @brief Timer to handle the application Tx @@ -612,7 +612,7 @@ void LoRaWAN_Init(void) UTIL_TIMER_Create(&TxLedTimer, LED_PERIOD_TIME, UTIL_TIMER_ONESHOT, OnTxTimerLedEvent, NULL); UTIL_TIMER_Create(&RxLedTimer, LED_PERIOD_TIME, UTIL_TIMER_ONESHOT, OnRxTimerLedEvent, NULL); - UTIL_TIMER_Create(&JoinLedTimer, LED_PERIOD_TIME, UTIL_TIMER_ONESHOT, OnJoinTimerLedEvent, NULL); + UTIL_TIMER_Create(&JoinLedTimer, LED_PERIOD_TIME, UTIL_TIMER_PERIODIC, OnJoinTimerLedEvent, NULL); UTIL_TIMER_Create(&STSLampBarColorTimer, LED_PERIOD_TIME, UTIL_TIMER_PERIODIC, OnYunhornSTSLampBarColorTimerEvent, NULL); UTIL_TIMER_Create(&STSDurationCheckTimer, 20*LED_PERIOD_TIME, UTIL_TIMER_PERIODIC, OnYunhornSTSDurationCheckTimerEvent, NULL); @@ -684,22 +684,18 @@ void LoRaWAN_Init(void) #endif #if defined(STS_O7)||defined(STS_O6) - UTIL_TIMER_Create(&YunhornSTSRSSWakeUpTimer, - YUNHORN_STS_RSS_WAKEUP_CHECK_TIME, - UTIL_TIMER_ONESHOT, OnYunhornSTSOORSSWakeUpTimerEvent, NULL); - UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); + UTIL_TIMER_Create(&YunhornSTSRSSWakeUpTimer, YUNHORN_STS_RSS_WAKEUP_CHECK_TIME, UTIL_TIMER_PERIODIC, OnYunhornSTSOORSSWakeUpTimerEvent, NULL); + //UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); - UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer, - YUNHORN_STS_HEART_BEAT_CHECK_TIME, - UTIL_TIMER_PERIODIC, OnYunhornSTSHeartBeatTimerEvent, NULL); - UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); + UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer, YUNHORN_STS_HEART_BEAT_CHECK_TIME, UTIL_TIMER_PERIODIC, OnYunhornSTSHeartBeatTimerEvent, NULL); + //UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); + + UTIL_TIMER_Start(&STSLampBarColorTimer); UTIL_TIMER_Start(&STSDurationCheckTimer); #else - UTIL_TIMER_Create(&YunhornSTSSamplingCheckTimer, - YUNHORN_STS_SAMPLING_CHECK_TIME, - UTIL_TIMER_PERIODIC, OnYunhornSTSSamplingCheckTimerEvent, NULL); + UTIL_TIMER_Create(&YunhornSTSSamplingCheckTimer, YUNHORN_STS_SAMPLING_CHECK_TIME, UTIL_TIMER_PERIODIC, OnYunhornSTSSamplingCheckTimerEvent, NULL); UTIL_TIMER_Start(&YunhornSTSSamplingCheckTimer); #endif /* USER CODE END LoRaWAN_Init_Last */ @@ -750,12 +746,48 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) } break; + case HALL3_Pin: + sts_hall3_read = HALL3_STATE; + HAL_Delay(30); //de-bouncing + if (sts_hall3_read == HALL3_STATE) + { + APP_LOG(TS_OFF, VLEVEL_L, "\n\n ALARM MUTE Button Read = %02x --%s\r\n", sts_hall3_read, sts_sos_status_code[sts_hall3_read]); + OnSensor3StateChanged(); + //sensor_data_ready =1; + //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0); + { + STS_YunhornSTSEventP1_Process(); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + + } + last_sts_hall3_read = sts_hall3_read; + } + break; + + case HALL4_Pin: + sts_hall4_read = HALL4_STATE; + HAL_Delay(30); //de-bouncing + if (sts_hall4_read == HALL4_STATE) + { + APP_LOG(TS_OFF, VLEVEL_L, "\n\n ALARM RESET Button Read = %02x --%s\r\n", sts_hall4_read, sts_sos_status_code[sts_hall4_read]); + OnSensor4StateChanged(); + //sensor_data_ready =1; + //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0); + { + STS_YunhornSTSEventP1_Process(); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + + } + last_sts_hall4_read = sts_hall4_read; + } + break; + #else case BUT1_Pin: HAL_Delay(20); //de-bouncing - //sts_reed_hall_ext_int = 1; + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0); - //sts_reed_hall_ext_int = 0; + /* Note: when "EventType == TX_ON_TIMER" this GPIO is not initialized */ // if (EventType == TX_ON_EVENT) { @@ -766,10 +798,11 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) case BUT2_Pin: UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaStopJoinEvent), CFG_SEQ_Prio_0); break; -#endif + case BUT3_Pin: UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaStoreContextEvent), CFG_SEQ_Prio_0); break; +#endif default: break; } @@ -1083,20 +1116,9 @@ static void OnTxTimerEvent(void *context) /* USER CODE BEGIN OnTxTimerEvent_1 */ /* USER CODE END OnTxTimerEvent_1 */ - //heart_beat_timer = 1; - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); -#if 0 - if (sts_ac_code[0]==0x0) { - /* RFAC Challenge */ - if (rfac_timer < (STS_BURN_IN_RFAC+3)) { - rfac_timer ++; + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), CFG_SEQ_Prio_0); - } - - } -#endif /*Wait for next tx slot*/ UTIL_TIMER_Start(&TxTimer); @@ -1140,7 +1162,7 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) //HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); /* STS GREEN */ //if ((sts_work_mode != STS_WIRED_MODE)) uint8_t high4=(sts_lamp_bar_color>>4)&0x0f, low4=sts_lamp_bar_color&0x0f; - HAL_Delay(10); + if (high4==0) { if (last_sts_lamp_bar_color != sts_lamp_bar_color) @@ -1172,8 +1194,6 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) r_b = !r_b; } -//UTIL_TIMER_Start(&STSLampBarColorTimer); - } static void OnYunhornSTSDurationCheckTimerEvent(void *context) @@ -1311,8 +1331,9 @@ static void OnYunhornSTSDurationCheckTimerEvent(void *context) sts_o7_sensorData.event_sensor3_event_duration = sensor_event_time.Seconds - sts_o7_sensorData.event_sensor4_start_time; #endif - if (over_threshold == TRUE) { - sensor_data_ready = 1; + if (over_threshold == TRUE) + { + if (sts_o7_sensorData.fall_state == STS_PRESENCE_LAYDOWN) { sts_status_color = sts_lamp_bar_flashing_color; //STS_RED_BLUE; @@ -1321,7 +1342,9 @@ static void OnYunhornSTSDurationCheckTimerEvent(void *context) sts_status_color = STS_RED_DARK; sts_lamp_bar_color = STS_RED_DARK; //sts_lamp_bar_flashing_color; } - SendTxData(); + + sensor_data_ready = 1; + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); over_threshold = FALSE; } } @@ -1366,9 +1389,9 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) if (joinParams->Status == LORAMAC_HANDLER_SUCCESS) { UTIL_TIMER_Stop(&JoinLedTimer); - //STS_Lamp_Bar_Set_Dark(); + sts_lamp_bar_color = STS_GREEN; - STS_WS2812B_Refresh(); + #ifndef STM32WLE5xx HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); /* LED_RED */ #endif @@ -1383,9 +1406,6 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) } STS_LoRa_WAN_Joined = (uint8_t) joinParams->Mode; - - OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); - //OnTxPeriodicityChanged(TxPeriodicity); APP_LOG(TS_OFF, VLEVEL_L,"\r\n STS_LoRa_WAN_Joined = %s \r\n", (STS_LoRa_WAN_Joined == 1)?"ABP":"OTAA"); } else @@ -1395,12 +1415,18 @@ 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); } - heart_beat_timer = 1; - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); - //HAL_Delay(3000); - UTIL_TIMER_Start(&STSLampBarColorTimer); - //UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); + heart_beat_timer = 1; + //SendTxData(); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + + UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); + //UTIL_TIMER_Start(&TxTimer); + //UTIL_TIMER_Start(&STSDurationCheckTimer); + OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); + /* USER CODE END OnJoinRequest_1 */ } @@ -1478,8 +1504,6 @@ static void OnTxPeriodicityChanged(uint32_t periodicity) TxPeriodicity = APP_TX_DUTYCYCLE; } - HeartBeatPeriodicity = TxPeriodicity; - /* Update timer periodicity */ UTIL_TIMER_Stop(&TxTimer); UTIL_TIMER_SetPeriod(&TxTimer, TxPeriodicity); @@ -1678,7 +1702,6 @@ static void OnYunhornSTSHeartBeatTimerEvent(void *context) { heart_beat_timer = 1; UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); - UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); if ((STS_LoRa_WAN_Joined ) && (sts_ac_code[0]==0x0) && (sts_ac_code[19]==0x0)) { @@ -1688,6 +1711,7 @@ static void OnYunhornSTSHeartBeatTimerEvent(void *context) } UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), CFG_SEQ_Prio_0); } + UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); } /** @@ -1716,7 +1740,7 @@ static void OnYunhornSTSHeartBeatPeriodicityChanged(uint32_t periodicity) UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); /* USER CODE BEGIN OnTxPeriodicityChanged_2 */ - APP_LOG(TS_OFF, VLEVEL_H,"**************** HeartBeatPeriodicity Changed to: %u (ms)\r\n", HeartBeatPeriodicity ); + APP_LOG(TS_OFF, VLEVEL_H,"**************** HeartBeatPeriodicity = %u (sec)\r\n", HeartBeatPeriodicity/1000 ); /* USER CODE END OnTxPeriodicityChanged_2 */ } @@ -1856,7 +1880,7 @@ static void OnYunhornSTSSamplingCheckTimerEvent(void *context) * */ -void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) +void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) { uint8_t i=0, mems_ver, invalid_flag=1; UTIL_MEM_set_8((void*)outbuf,0x0, sizeof(outbuf)); @@ -2078,10 +2102,11 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) { //STS_SENSOR_Power_ON((uint8_t)(tlv_buf[CFG_CMD3]-0x30)); PME_ON; - i=0; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3]; + + // 2024-07-31 + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); + i = tlv_buf_size; STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); } else { STS_SENSOR_Upload_Config_Invalid_Message(); @@ -2092,11 +2117,11 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) // TODO # of modules if (((uint8_t)(tlv_buf[CFG_CMD3]-0x30) >= 0) && ((uint8_t)tlv_buf[CFG_CMD3]-0x30) <=9) { //STS_SENSOR_Power_OFF((tlv_buf[CFG_CMD3]-0x30)); - PME_OFF; - i=0; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3]; + PME_OFF; + // 2024-07-31 + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); + i = tlv_buf_size; STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); } else { STS_SENSOR_Upload_Config_Invalid_Message(); @@ -2105,11 +2130,13 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) case 'H': // TODO # of modules if (((uint8_t)(tlv_buf[CFG_CMD3]-0x30) >= 0) && ((uint8_t)tlv_buf[CFG_CMD3]-0x30) <=9) { - STS_SENSOR_MEMS_Reset((tlv_buf[CFG_CMD3]-0x30)); - i=0; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3]; + PME_ON; + PME_OFF; + PME_ON; + // 2024-07-31 + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); + i = tlv_buf_size; STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); } else { STS_SENSOR_Upload_Config_Invalid_Message(); @@ -2128,20 +2155,18 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) } else if ((char)tlv_buf[CFG_CMD5] == 'H') { periodicity_length *= 3600; } - TxPeriodicity = periodicity_length*1000; //translate to 1000ms=1s - HeartBeatPeriodicity = TxPeriodicity; + periodicity_length = periodicity_length*1000; //translate to 1000ms=1s + //OnTxPeriodicityChanged(TxPeriodicity); #if defined(STS_O6)||defined(STS_O7) - OnYunhornSTSHeartBeatPeriodicityChanged(TxPeriodicity); + HeartBeatPeriodicity = periodicity_length; + OnYunhornSTSHeartBeatPeriodicityChanged(periodicity_length); #endif - - i = 0; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD4]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD5]; + // 2024-07-31 + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); + i = tlv_buf_size; STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); // Save config to NVM @@ -2155,7 +2180,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) sts_cfg_nvm.sts_service_mask = (uint8_t)sts_service_mask; OnStoreSTSCFGContextRequest(); - APP_LOG(TS_OFF, VLEVEL_M, "###### YUNHORN Periodicity Changed to [ %d ] Seconds\r\n", periodicity_length); + //APP_LOG(TS_OFF, VLEVEL_M, "###### YUNHORN Periodicity Changed to [ %d ] Seconds\r\n", periodicity_length); } else { STS_SENSOR_Upload_Config_Invalid_Message(); @@ -2186,12 +2211,10 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) SamplingPeriodicity = heart_beat_or_sampling_periodicity_length*1000; //translate to 1000ms=1s OnYunhornSTSSamplingPeriodicityChanged(SamplingPeriodicity); #endif - i = 0; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD4]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD5]; + // 2024-07-31 + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); + i = tlv_buf_size; STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); // Save config to NVM @@ -2254,31 +2277,29 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnStoreSTSCFGContextRequest(); i=0; // Step 1: Prepare status update message - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD4]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD5]; + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf, tlv_buf_size); + i = tlv_buf_size; STS_Combined_Status_Processing(); - } else if (tlv_buf_size == 8 && tlv_buf[CFG_CMD4]=='F') // Change fall detection + } else if (tlv_buf_size == 7 && tlv_buf[CFG_CMD4]=='F') // Change fall detection { - invalid_flag = 0; // P 1 1 F A B C D + invalid_flag = 0; // P 1 1 F A B C if (((tlv_buf[CFG_CMD5] >='0') && (tlv_buf[CFG_CMD5]<='9')) && ((tlv_buf[CFG_CMD6]<='9') && (tlv_buf[CFG_CMD6]>='0')) - && ((tlv_buf[CFG_CMD7]<='9') && (tlv_buf[CFG_CMD7]>='0'))&& ((tlv_buf[CFG_CMD8]<='9') && (tlv_buf[CFG_CMD8]>='0'))) + && ((tlv_buf[CFG_CMD7]<='9') && (tlv_buf[CFG_CMD7]>='0'))) //&& ((tlv_buf[CFG_CMD8]<='9') && (tlv_buf[CFG_CMD8]>='0'))) { - sts_fall_detection_acc_threshold = (uint8_t)(tlv_buf[CFG_CMD5] - 0x30)*10; //acc *10 mg/s2 - sts_fall_detection_depth_threshold = (uint8_t)(tlv_buf[CFG_CMD6] - 0x30)*10; //depth *10 in cm - sts_fall_confirm_threshold_in_10sec = (uint8_t)(tlv_buf[CFG_CMD7] - 0x30+1)*128; //fall_confirm_threshold_in_10sec + sts_fall_detection_acc_threshold = (uint8_t)(tlv_buf[CFG_CMD5] - 0x30)*10; //A: acc *10 mg/s2 + sts_fall_detection_depth_threshold = (uint8_t)(tlv_buf[CFG_CMD6] - 0x30)*10; //D: depth *10 in cm + sts_fall_confirm_threshold_in_10sec = (uint8_t)(tlv_buf[CFG_CMD7] - 0x30)*10; //C: fall_confirm_threshold_in_10sec - sts_occupancy_overtime_threshold_in_10min = (uint8_t)(tlv_buf[CFG_CMD8] - 0x30)*10; // overtime *10 min + //sts_occupancy_overtime_threshold_in_10min = (uint8_t)(tlv_buf[CFG_CMD8] - 0x30)*10; //T: overtime *10 min sts_cfg_nvm.fall_detection_acc_threshold = (uint8_t)(tlv_buf[CFG_CMD5] - 0x30); sts_cfg_nvm.fall_detection_depth_threshold = (uint8_t)(tlv_buf[CFG_CMD6] - 0x30); - sts_cfg_nvm.fall_confirm_threshold_in_10sec = (uint8_t)(tlv_buf[CFG_CMD7] - 0x30+1); + sts_cfg_nvm.fall_confirm_threshold_in_10sec = (uint8_t)(tlv_buf[CFG_CMD7] - 0x30); - sts_cfg_nvm.occupancy_overtime_threshold_in_10min = (uint8_t)(tlv_buf[CFG_CMD8] - 0x30); + //sts_cfg_nvm.occupancy_overtime_threshold_in_10min = (uint8_t)(tlv_buf[CFG_CMD8] - 0x30); if (sts_work_mode == STS_UNI_MODE) // fall detection threshold only effective in Uni_mode { @@ -2291,14 +2312,11 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnStoreSTSCFGContextRequest(); i=0; // Step 1: Prepare status update message - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD4]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD5]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD6]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD7]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD8]; + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf, tlv_buf_size); + i = tlv_buf_size; + APP_LOG(TS_OFF, VLEVEL_L, "###### Fall detection CFG = %s\r\n",(char*)outbuf); + STS_Combined_Status_Processing(); } @@ -2323,14 +2341,10 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnStoreSTSCFGContextRequest(); i=0; // Step 1: Prepare status update message - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD4]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD5]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD6]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD7]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD8]; + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf, tlv_buf_size); + i = tlv_buf_size; + APP_LOG(TS_OFF, VLEVEL_L, "###### Occupancy/Overstay/unconscious config changed =%s\r\n",(char *)outbuf); STS_Combined_Status_Processing(); } } @@ -2349,10 +2363,10 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) } i=0; // Step 1: Prepare status update message - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3]; - outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD4]; + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf, tlv_buf_size); + i = tlv_buf_size; + APP_LOG(TS_OFF, VLEVEL_L, "###### P Work mode switched =%s\r\n",(char *)outbuf); //sts_service_mask = STS_SERVICE_MASK_L0; //sts_lamp_bar_color = STS_GREEN; @@ -2368,7 +2382,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) STS_Combined_Status_Processing(); HAL_Delay(2000); - OnSystemReset(); + //OnSystemReset(); } else { invalid_flag = 1; @@ -2395,18 +2409,10 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) STS_PRESENCE_SENSOR_NVM_CFG(); i=0; // Step 1: Prepare status update message - - outbuf[i++] = (char) 'P'; - outbuf[i++] = sts_mtmcode1; - outbuf[i++] = sts_mtmcode2; - outbuf[i++] = sts_version; - outbuf[i++] = sts_hardware_ver; - - for (uint8_t j=0; j < CFG_CMD_RSS_FULL_SIZE; j++) - { - //outbuf[i++] = (uint8_t)(sts_cfg_nvm.p[j]+0x30)&0xff; - outbuf[i++] = tlv_buf[CFG_CMD4+j]; - } + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf, tlv_buf_size); + i = tlv_buf_size; + APP_LOG(TS_OFF, VLEVEL_L, "###### RSS Full CFG=%s\r\n",(char *)outbuf); // Step 2: Save valid config to NVM sts_cfg_nvm.mtmcode1 = sts_mtmcode1; @@ -2442,17 +2448,10 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) STS_PRESENCE_SENSOR_NVM_CFG_SIMPLE(); i=0; // Step 1: Prepare status update message - outbuf[i++] = (char) 'P'; - outbuf[i++] = sts_mtmcode1; - outbuf[i++] = sts_mtmcode2; - outbuf[i++] = sts_version; - outbuf[i++] = sts_hardware_ver; - - for (j=0; j < CFG_CMD_RSS_SIMPLE_SIZE; j++) - { - outbuf[i++] = (uint8_t)(sts_cfg_nvm.p[j]+0x30)&0xff; - } - APP_LOG(TS_OFF, VLEVEL_L, "###### RSS Simple CFG=%s\r\n",(uint8_t*)outbuf); + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf, tlv_buf_size); + i = tlv_buf_size; + APP_LOG(TS_OFF, VLEVEL_L, "###### RSS Simple CFG=%s\r\n",(char*)outbuf); // Step 2: Save valid config to NVM sts_cfg_nvm.mtmcode1 = sts_mtmcode1; @@ -2529,9 +2528,8 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) } i=0; - for (uint8_t j=0; j <(tlv_buf_size) ; j++) { - outbuf[i++] = (uint8_t) tlv_buf[j]; - } + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf, tlv_buf_size); STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); } @@ -2619,7 +2617,7 @@ void OnStoreSTSCFGContextRequest(void) nvm_store_value[i++] = sts_cfg_nvm.work_mode; nvm_store_value[i++] = sts_cfg_nvm.sts_service_mask; nvm_store_value[i++] = sts_cfg_nvm.sts_ioc_mask; - nvm_store_value[i++] = (uint8_t) STS_O7_NVM_CFG_SIZE; //sts_cfg_nvm.length; + nvm_store_value[i++] = sts_cfg_nvm.length; //(uint8_t) STS_O7_NVM_CFG_SIZE; //sts_cfg_nvm.length; for (j = 0; j < STS_O7_CFG_PCFG_SIZE; j++) { nvm_store_value[i++] = (sts_cfg_nvm.p[j]); @@ -2659,7 +2657,7 @@ void OnStoreSTSCFGContextRequest(void) /* USER CODE END OnStoreContextRequest_Last */ } -void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm) +void OnRestoreSTSCFGContextRequest(void *cfg_in_nvm) { /* USER CODE BEGIN OnRestoreSTSCFGContextRequest_1 */ // uint8_t nvm_store_value[YUNHORN_STS_MAX_NVM_CFG_SIZE]="", nvm_store_size=YUNHORN_STS_MAX_NVM_CFG_SIZE; @@ -2667,7 +2665,8 @@ void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm) APP_LOG(TS_OFF, VLEVEL_M, "Restore NVM start\r\n"); /* USER CODE END OnRestoreSTSCFGContextRequest_1 */ - UTIL_MEM_cpy_8(cfg_in_nvm, (void *)STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE); + FLASH_IF_Read(cfg_in_nvm, STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE); + //UTIL_MEM_cpy_8(cfg_in_nvm, (void *)STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE); /* USER CODE BEGIN OnRestoreSTSCFGContextRequest_Last */ @@ -2683,7 +2682,8 @@ void STS_REBOOT_CONFIG_Init(void) uint8_t nvm_stored_value[YUNHORN_STS_MAX_NVM_CFG_SIZE]={0x0}; /* USER CODE END OnRestoreContextRequest_1 */ - UTIL_MEM_cpy_8(nvm_stored_value, (void *)STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE); + //UTIL_MEM_cpy_8(nvm_stored_value, (void *)STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE); + FLASH_IF_Read(nvm_stored_value, STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE); /* USER CODE BEGIN OnRestoreContextRequest_Last */ //#if (defined(STS_O7)||defined(STS_O5) || defined(STS_O6) || defined(STS_R0) || defined(STS_R5)|| defined(STS_R4)|| defined(STS_R1D)) @@ -2749,9 +2749,7 @@ void OnRestoreSTSCFGContextProcess(void) } else if ((char) sts_cfg_nvm.unit =='S') { periodicity *= 1; } - periodicity = (periodicity > 10)? periodicity : 10; // in seconds unit - //TxPeriodicity= periodicity*1000; // to ms - //OnTxPeriodicityChanged(TxPeriodicity); // in msec unit + periodicity *= 1000; // to ms uint32_t sampling = (sts_cfg_nvm.sampling); if ((char)sts_cfg_nvm.s_unit =='M') { @@ -2767,6 +2765,7 @@ void OnRestoreSTSCFGContextProcess(void) { // ensure it's not in production yet OnTxPeriodicityChanged(APP_TX_DUTYCYCLE); // in msec unit OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); + OnYunhornSTSSamplingPeriodicityChanged(sampling); // in m-sec unit } else { //OnTxPeriodicityChanged(TxPeriodicity); // in msec unit @@ -2776,7 +2775,8 @@ void OnRestoreSTSCFGContextProcess(void) HeartBeatPeriodicity = samplingperiodicity*1000; #endif #if defined(STS_O7)|| defined(STS_O6) ||defined(STS_O5) - OnYunhornSTSHeartBeatPeriodicityChanged(periodicity*1000); + HeartBeatPeriodicity = periodicity; + OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); OnYunhornSTSSamplingPeriodicityChanged(sampling); // in m-sec unit #endif @@ -2814,7 +2814,7 @@ void OnRestoreSTSCFGContextProcess(void) if ((sts_version == sts_cfg_nvm.version)&& (NVM_CFG_PARAMETER_SIZE == sts_cfg_nvm.length)) { STS_PRESENCE_SENSOR_Init(); - //STS_PRESENCE_SENSOR_RSS_Init(); + STS_PRESENCE_SENSOR_RSS_Init(); } #endif @@ -2896,8 +2896,8 @@ void STS_SENSOR_Function_Test_Process(void) #endif } - memset((void*)outbuf,0x0, sizeof(outbuf)); - memcpy((void*)outbuf, tstbuf, i); + //memset((void*)outbuf,0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf, (void*)tstbuf, i); STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t*)outbuf); } diff --git a/STM32CubeIDE/.cproject b/STM32CubeIDE/.cproject index 24a19c7..cb5c54d 100644 --- a/STM32CubeIDE/.cproject +++ b/STM32CubeIDE/.cproject @@ -39,7 +39,7 @@