From 9a57efd44b2a14642ea6d7c64e04b692e30dc463 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Mon, 29 Jul 2024 13:22:30 +0800 Subject: [PATCH 01/58] --remove unused code --- Core/Inc/main.h | 10 ++++- Core/Src/gpio.c | 5 ++- Core/Src/stm32wlxx_it.c | 8 ++-- Core/Src/yunhorn_sts_process.c | 73 ++++++++++++++-------------------- LoRaWAN/App/lora_app.c | 32 ++++++++++++--- 5 files changed, 72 insertions(+), 56 deletions(-) diff --git a/Core/Inc/main.h b/Core/Inc/main.h index a546296..9483552 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -99,9 +99,15 @@ 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_8 // ALARM RESET PIN +#define HALL3_GPIO_Port GPIOA +#define HALL3_EXTI_IRQn EXTI9_5_IRQn +#define ALARM_RESET_Pin HALL3_Pin + +#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 RESET BUTTON #else #define BUT1_Pin GPIO_PIN_0 diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 147e89a..b9bdfb9 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -89,7 +89,7 @@ void MX_GPIO_Init(void) HAL_GPIO_Init(A111_SENSOR_INTERRUPT_GPIO_Port, &GPIO_InitStruct); #ifdef STS_O7 - GPIO_InitStruct.Pin = HALL1_Pin|HALL2_Pin; + GPIO_InitStruct.Pin = HALL1_Pin|HALL2_Pin|HALL3_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; @@ -123,6 +123,9 @@ void MX_GPIO_Init(void) 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(A111_SENSOR_INTERRUPT_EXTI_IRQn, 0, 0); HAL_NVIC_EnableIRQ(A111_SENSOR_INTERRUPT_EXTI_IRQn); diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index 92ab009..4046de7 100644 --- a/Core/Src/stm32wlxx_it.c +++ b/Core/Src/stm32wlxx_it.c @@ -358,20 +358,22 @@ 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(HALL2_Pin); + /* 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 */ } -#endif + /** * @brief This function handles SPI1 Interrupt. */ diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index d348138..8bb89e6 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -37,44 +37,45 @@ /* 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_DUAL_MODE; 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; +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,sts_reed_hall_3_result=STS_Status_Door_Open, last_sts_reed_hall_3_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 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 +97,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; @@ -228,6 +224,9 @@ void STS_YunhornSTSEventP1_Process(void) sts_reed_hall_2_result = HALL2_STATE;// sts_hall2_read; last_sts_reed_hall_2_result = sts_reed_hall_2_result; + sts_reed_hall_3_result = HALL3_STATE;// sts_hall3_read; + last_sts_reed_hall_3_result = sts_reed_hall_3_result; + STS_Combined_Status_Processing(); } @@ -266,7 +265,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); @@ -274,7 +273,7 @@ void STS_Reed_Hall_Presence_Detection(void) sts_reed_hall_changed_flag = 0; - sts_reed_hall_ext_int = 0; + } @@ -856,7 +855,7 @@ void STS_PRESENCE_SENSOR_Init(void) //HAL_Delay(2000); //STS_PRESENCE_SENSOR_Distance_Measure_Process(); - mems_int1_detected=0; + } void STS_PRESENCE_SENSOR_TOF_Init(void) @@ -893,7 +892,7 @@ void STS_PRESENCE_SENSOR_RSS_Init(void) sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT; - mems_int1_detected=0; + } @@ -940,7 +939,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) @@ -963,20 +962,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) { diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index ef668bd..bb101b9 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; +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; 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; @@ -78,7 +78,7 @@ volatile uint8_t sts_presence_fall_detection=TRUE; volatile uint32_t SamplingPeriodicity = 1000; //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; @@ -750,12 +750,30 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) } break; + case ALARM_RESET_Pin: + sts_hall2_read = HALL2_STATE; + HAL_Delay(30); //de-bouncing + if (sts_hall2_read == HALL2_STATE) + { + APP_LOG(TS_OFF, VLEVEL_L, "\n\n SOS Button Read = %02x --%s\r\n", sts_hall2_read, sts_sos_status_code[sts_hall2_read]); + OnSensor2StateChanged(); + //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_hall2_read = sts_hall2_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) { @@ -2099,7 +2117,9 @@ 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)); + PME_ON; + PME_OFF; + PME_ON; i=0; outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1]; outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2]; From a6617752ff3c0ba1aacb71da1b308e8ce5e9b28c Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Tue, 30 Jul 2024 19:03:46 +0800 Subject: [PATCH 02/58] --- revised for hall3/hall4 --- AS923_HK_DECODER.js | 29 +++++++++++++--------- Core/Inc/main.h | 13 +++++++--- Core/Inc/yunhorn_sts_prd_conf.h | 2 +- Core/Inc/yunhorn_sts_sensors.h | 8 ++++--- Core/Src/gpio.c | 11 +++++---- Core/Src/stm32wlxx_it.c | 25 ++++++++++++++++--- Core/Src/sts_lamp_bar.c | 1 + Core/Src/yunhorn_sts_presence_rss.c | 6 ++--- Core/Src/yunhorn_sts_process.c | 36 +++++++++++++++++++++++----- LoRaWAN/App/lora_app.c | 37 ++++++++++++++++++++++------- readme.txt | 4 ++-- 11 files changed, 127 insertions(+), 45 deletions(-) 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 9483552..d59d327 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -99,15 +99,22 @@ void Error_Handler(void); #define HALL2_GPIO_Port GPIOA #define HALL2_EXTI_IRQn EXTI1_IRQn -#define HALL3_Pin GPIO_PIN_8 // ALARM RESET PIN +#define HALL3_Pin GPIO_PIN_9 // ALARM MUTE PIN #define HALL3_GPIO_Port GPIOA #define HALL3_EXTI_IRQn EXTI9_5_IRQn -#define ALARM_RESET_Pin HALL3_Pin +#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 RESET 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/yunhorn_sts_prd_conf.h b/Core/Inc/yunhorn_sts_prd_conf.h index bc59c99..55fd30e 100644 --- a/Core/Inc/yunhorn_sts_prd_conf.h +++ b/Core/Inc/yunhorn_sts_prd_conf.h @@ -239,7 +239,7 @@ #define MajorVer 24U #define MinorVer 07U -#define SubMinorVer 26U +#define SubMinorVer 30U #define FirmwareVersion 3U #define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U diff --git a/Core/Inc/yunhorn_sts_sensors.h b/Core/Inc/yunhorn_sts_sensors.h index 8ebbf36..ec541c8 100644 --- a/Core/Inc/yunhorn_sts_sensors.h +++ b/Core/Inc/yunhorn_sts_sensors.h @@ -679,10 +679,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); diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index b9bdfb9..ad7ea4d 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -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|HALL3_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,7 +116,7 @@ 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); @@ -126,6 +126,9 @@ void MX_GPIO_Init(void) 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/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index 4046de7..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 @@ -365,7 +365,26 @@ void EXTI9_5_IRQHandler(void) /* USER CODE END EXTI9_5_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(HALL2_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 diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index d8c73f0..197ac3d 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_Door_Open,sts_hall4_read=STS_Status_SOS_Release; extern volatile uint8_t sts_reed_hall_1_result, sts_reed_hall_2_result; extern volatile uint8_t sts_tof_result_changed_flag; diff --git a/Core/Src/yunhorn_sts_presence_rss.c b/Core/Src/yunhorn_sts_presence_rss.c index 884e182..d582dae 100644 --- a/Core/Src/yunhorn_sts_presence_rss.c +++ b/Core/Src/yunhorn_sts_presence_rss.c @@ -531,13 +531,13 @@ int sts_presence_rss_fall_rise_detection(void) if (motion_detected_count++ == 10) { motion_detected_count=0; } else { - OnSensor3CStateChanged(); + OnSensorRSS3CStateChanged(); } sts_rss_result = (average_result > 3)? 1: 0; if (sts_rss_result) { LED1_ON; - OnSensor3AStateChanged(); + OnSensorRSS3AStateChanged(); } else { LED1_OFF; @@ -550,7 +550,7 @@ int sts_presence_rss_fall_rise_detection(void) if (sts_fall_rising_detected_result) { LED1_ON; - OnSensor3BStateChanged(); + OnSensorRSS3BStateChanged(); } else { LED1_OFF; diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 8bb89e6..05426fa 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -39,7 +39,14 @@ extern volatile sts_cfg_nvm_t sts_cfg_nvm; extern volatile uint8_t sts_ac_code[20]; +#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 + volatile uint8_t sts_service_mask=0; volatile uint32_t rfac_timer; volatile uint8_t sensor_data_ready=0; @@ -48,8 +55,9 @@ 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; -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,sts_reed_hall_3_result=STS_Status_Door_Open, last_sts_reed_hall_3_result=STS_Status_Door_Open; +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; @@ -227,6 +235,9 @@ void STS_YunhornSTSEventP1_Process(void) sts_reed_hall_3_result = HALL3_STATE;// sts_hall3_read; last_sts_reed_hall_3_result = sts_reed_hall_3_result; + sts_reed_hall_4_result = HALL4_STATE;// sts_hall3_read; + last_sts_reed_hall_4_result = sts_reed_hall_4_result; + STS_Combined_Status_Processing(); } @@ -1066,7 +1077,7 @@ void OnSensor2StateChanged(void) } /* motion sensor RSS ON-OFF */ -void OnSensor3StateChanged(void) +void OnSensorRSS3StateChanged(void) { SysTime_t sensor_event_time = SysTimeGetMcuTime(); #if 0 @@ -1093,7 +1104,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 @@ -1119,7 +1130,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(); @@ -1172,7 +1183,7 @@ void OnSensor3BStateChanged(void) } /* motion sensor C: Over stay detection */ -void OnSensor3CStateChanged(void) +void OnSensorRSS3CStateChanged(void) { SysTime_t sensor_event_time = SysTimeGetMcuTime(); #if 0 @@ -1197,6 +1208,19 @@ 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 +} + void OnSensor4StateChanged(void) { #if 0 diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index bb101b9..912a8e1 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -53,8 +53,8 @@ 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_hall1_read, sts_hall2_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; +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; @@ -750,13 +750,13 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) } break; - case ALARM_RESET_Pin: - sts_hall2_read = HALL2_STATE; + case HALL3_Pin: + sts_hall3_read = HALL3_STATE; HAL_Delay(30); //de-bouncing - if (sts_hall2_read == HALL2_STATE) + if (sts_hall3_read == HALL3_STATE) { - APP_LOG(TS_OFF, VLEVEL_L, "\n\n SOS Button Read = %02x --%s\r\n", sts_hall2_read, sts_sos_status_code[sts_hall2_read]); - OnSensor2StateChanged(); + 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); { @@ -764,7 +764,25 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); } - last_sts_hall2_read = sts_hall2_read; + 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; @@ -784,10 +802,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; } diff --git a/readme.txt b/readme.txt index 3d1698e..514af8c 100644 --- a/readme.txt +++ b/readme.txt @@ -43,7 +43,7 @@ STS_O7 For Occupancy sensors 2024-06-06 before STS_FALL_DETECTION_MODE change 2024-06-17 good for sensor 1 and sensor 2 start stop timer freezed for now 2024-06-26 RTM for pixel-network STS_RSS_MODE = 3 P113 switch -****************************************************************************** - +2024-07-30 revert back ...not good for alarm so far +***************************************************************************** */ From ac5101e2cab31ba2f29505f20e9bef5f0d390ed9 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Wed, 31 Jul 2024 13:32:06 +0800 Subject: [PATCH 03/58] -- P cmd revised, still no good heart beat timer --- AS923_HK_DECODER.js | 56 +++++++++++++++++++++++- LoRaWAN/App/lora_app.c | 98 ++++++++++++++++-------------------------- 2 files changed, 91 insertions(+), 63 deletions(-) diff --git a/AS923_HK_DECODER.js b/AS923_HK_DECODER.js index 6f1dba4..a0084a2 100644 --- a/AS923_HK_DECODER.js +++ b/AS923_HK_DECODER.js @@ -6,6 +6,7 @@ // for Yunhorn SmarToilets STS-O7 Occupancy/Fall Detection/Over stay sensor function Decode(fPort, data, variables) { var data = {}; + data.length = bytes.length; if ((fPort === 10)) { // STS_O2_O6 V3 version 2023,pixel-network version switch (bytes[0]) { case 0x00: @@ -175,7 +176,7 @@ function Decode(fPort, data, variables) { 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.length = bytes.length + data.length = bytes.length; if (data.length === 9) { data.Over_stay_state = (bytes[6] === 0) ? "False" : "True"; data.Over_Stay_duration_in_Seconds = (bytes[7] << 8 | bytes[8]); @@ -380,6 +381,59 @@ function Decode(fPort, data, variables) { data.LocalTime_EST8 = "GMT+8: " + data.L_year + "/" + data.L_mon + "/" + data.L_day + " " + (data.L_hour + 8) + ":" + data.L_min + ":" + data.L_sec; } } + else if (bytes[0] === 0x50) { // P cmd report + if (data.length == 7) { + switch (bytes[3]) { + case 0x46: // F --- fall down & unconscious detection threshold + data.FALL_acceleration = (bytes[4] == 0x30 ? "Disabled" : ((bytes[4] - 0x30) * 10) + " mg/s2"); + data.FALL_depth_measure = (bytes[5] == 0x30 ? "Disabled" : ((bytes[5] - 0x30) * 10) + " cm"); + data.FALL_confirm_threshold = (bytes[6] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 10) + " seconds"); + //data.FALL_reserved = (bytes[7]==0x0?"Disabled":((bytes[6]-0x30)*10)+" min"); + break; + } //switch + } + else if (data.length == 8) { + switch (bytes[3]) { + case 0x4f: // O -- over stay, onconscious, long stay + data.OMU_Motionless_duration_in_min = (bytes[4] == 0x30 ? "Disabled" : ((bytes[4] - 0x30)) + " Min"); + data.OMU_Long_Occupy_duration_in_Min = (bytes[5] == 0x30 ? "Disabled" : ((bytes[5] - 0x30) * 10) + " Min"); + data.OMU_Unconcious_Threshold = (bytes[6] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 100) + "ml"); + data.OMU_Alarm_Mute_Reset_Timer = (bytes[7] == 0x30 ? "Disabled" : ((bytes[7] - 0x30) * 10) + " Seconds"); + break; + case 0x46: // F --- fall down & unconscious detection threshold + data.FALL_acceleration = (bytes[4] == 0x30 ? "Disabled" : ((bytes[4] - 0x30) * 10) + " mg/s2"); + data.FALL_depth_measure = (bytes[5] == 0x30 ? "Disabled" : ((bytes[5] - 0x30) * 10) + " cm"); + data.FALL_confirm_threshold = (bytes[6] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 10) + " seconds"); + data.FALL_reserved = (bytes[7] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 10) + " min"); + break; + } //switch + } else if (data.length == 11) { // P 1108201365 + data.RSS_SIMPLE_Start = ((bytes[3] - 0x30) * 100 + (bytes[4] - 0x30) * 10) + " cm"; + data.RSS_SIMPLE_Length = ((bytes[5] - 0x30) * 100 + (bytes[6] - 0x030) * 10) + " cm"; + data.RSS_SIMPLE_Threshold = ((bytes[7] - 0x30) * 1000 + (bytes[8] - 0x30) * 100) + " ml"; + data.RSS_SIMPLE_Gain = ((bytes[9] - 0x30) * 10 + (bytes[10] - 0x30)) + " %"; + } else if (data.length == 33) { // P 11 + data.RSS_FULL_Start = ((bytes[3] - 0x30) * 100 + (bytes[4] - 0x30) * 10) + " cm"; + data.RSS_FULL_Length = ((bytes[5] - 0x30) * 100 + (bytes[6] - 0x30) * 10) + " cm"; + data.RSS_FULL_Threshold = ((bytes[7] - 0x30) * 1000 + (bytes[8] - 0x30) * 100) + " ml"; + data.RSS_FULL_Gain = ((bytes[9] - 0x30) * 10 + (bytes[10] - 0x30)) + " %"; + data.RSS_FULL_Profile = (bytes[11] - 0x30); + data.RSS_FULL_Rate_Tracking = ((bytes[12] - 0x30) * 10 + (bytes[13] - 0x30)); + data.RSS_FULL_Rate_Presence = ((bytes[14] - 0x30) * 10 + (bytes[15] - 0x30)); + data.RSS_FULL_HWAAS = ((bytes[16] - 0x30) * 10 + (bytes[17] - 0x30)); + data.RSS_FULL_Num_Removed_PC = (bytes[18] - 0x30); + data.RSS_FULL_Inter_Deviation_Time_Const_in_Sec = ((bytes[19] - 0x30) + (bytes[20] - 0x30) * 0.1); + data.RSS_FULL_Inter_Fast_Cut_Off = ((bytes[21] - 0x30) * 10 + (bytes[22] - 0x30)); + data.RSS_FULL_Inter_Slow_Cut_Off = ((bytes[23] - 0x30) * 0.1 + (bytes[24] - 0x30) * 0.001); + data.RSS_FULL_Inter_Time_Const_in_Sec = ((bytes[25] - 0x30) * 10 + (bytes[26] - 0x30)); + data.RSS_FULL_Inter_Weight = ((bytes[27] - 0x30) + (bytes[28] - 0x30) * 0.1); + data.RSS_FULL_Output_Time_Const_in_Sec = ((bytes[29] - 0x30) + (bytes[30] - 0x30) * 0.1); + data.RSS_FULL_DownSampling_factor = (bytes[31] - 0x30); + data.RSS_FULL_Power_Saving_mode = (bytes[32] - 0x30); + + + } + } return { "Yunhorn_SmarToilets_data": data }; } } diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 912a8e1..dea8d0a 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -2287,31 +2287,28 @@ 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]; + // 2024-07-31 + 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 D C T 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'))) { - 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.occupancy_overtime_threshold_in_10min = (uint8_t)(tlv_buf[CFG_CMD8] - 0x30); + 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); if (sts_work_mode == STS_UNI_MODE) // fall detection threshold only effective in Uni_mode { @@ -2324,14 +2321,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]; + // 2024-07-31 + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); + i = tlv_buf_size; + APP_LOG(TS_OFF, VLEVEL_L, "###### Fall Detection config changed =%s\r\n",(char *)outbuf); + STS_Combined_Status_Processing(); } @@ -2343,7 +2337,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) 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'))) { - sts_motionless_duration_threshold_in_min = (uint8_t)(tlv_buf[CFG_CMD5] - 0x30); //Motionless duration in min + sts_motionless_duration_threshold_in_min = (uint8_t)(tlv_buf[CFG_CMD5] - 0x30); //Motionless duration in min sts_occupancy_overtime_threshold_in_10min = (uint8_t)(tlv_buf[CFG_CMD6] - 0x30)*10; //Long occupation in min sts_unconscious_level_threshold = (uint8_t)(tlv_buf[CFG_CMD7] - 0x30+1)*128; //motion level threshold less than 1280 sts_alarm_mute_reset_timer_in_10sec = (uint8_t)(tlv_buf[CFG_CMD8] - 0x30)*10; //alarm mute reset timer in 10 sec @@ -2356,14 +2350,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]; + // 2024-07-31 + 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(); } } @@ -2381,11 +2371,11 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) sts_work_mode = (uint8_t)((tlv_buf[CFG_CMD4] - 0x41) + 10); } - 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]; + i=0; // Step 1: Prepare status update message + // 2024-07-31 + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); + i = tlv_buf_size; + //sts_service_mask = STS_SERVICE_MASK_L0; //sts_lamp_bar_color = STS_GREEN; @@ -2428,19 +2418,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]; - } - + // 2024-07-31 + 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; sts_cfg_nvm.mtmcode2 = sts_mtmcode2; @@ -2463,7 +2444,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) if ((tlv_buf[CFG_CMD4+j] >='0') && (tlv_buf[CFG_CMD4+j]<='9')) { sts_cfg_nvm.p[j] = (uint8_t)((tlv_buf[CFG_CMD4+j] - 0x30)&0xff); - APP_LOG(TS_OFF,VLEVEL_H,"\r\n tlv_buf %d = %02x cfg->p[%d]=%02x \r\n", + APP_LOG(TS_OFF,VLEVEL_L,"\r\n tlv_buf %d = %02x cfg->p[%d]=%02x \r\n", j,tlv_buf[CFG_CMD4+j], j, sts_cfg_nvm.p[j]); } else { invalid_flag = 1; @@ -2475,17 +2456,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); + // 2024-07-31 + 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; From 45a4d6c75f59091496cac18f21611e07cf924cdf Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Wed, 31 Jul 2024 17:01:06 +0800 Subject: [PATCH 04/58] --- revised P cmd and decoder --- --- LoRaWAN/App/lora_app.c | 69 ++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 39 deletions(-) diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index dea8d0a..b4fa011 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -694,7 +694,7 @@ void LoRaWAN_Init(void) UTIL_TIMER_PERIODIC, OnYunhornSTSHeartBeatTimerEvent, NULL); UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); - UTIL_TIMER_Start(&STSDurationCheckTimer); + //UTIL_TIMER_Start(&STSDurationCheckTimer); #else UTIL_TIMER_Create(&YunhornSTSSamplingCheckTimer, @@ -1397,9 +1397,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 @@ -1414,9 +1414,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 @@ -1426,11 +1423,14 @@ 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); + heart_beat_timer = 1; + SendTxData(); + //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + + //OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); + + UTIL_TIMER_Start(&STSLampBarColorTimer); //UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); /* USER CODE END OnJoinRequest_1 */ } @@ -1509,7 +1509,7 @@ static void OnTxPeriodicityChanged(uint32_t periodicity) TxPeriodicity = APP_TX_DUTYCYCLE; } - HeartBeatPeriodicity = TxPeriodicity; + //HeartBeatPeriodicity = TxPeriodicity; /* Update timer periodicity */ UTIL_TIMER_Stop(&TxTimer); @@ -1709,7 +1709,7 @@ 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); + //UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); if ((STS_LoRa_WAN_Joined ) && (sts_ac_code[0]==0x0) && (sts_ac_code[19]==0x0)) { @@ -2109,10 +2109,10 @@ 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_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(); @@ -2123,11 +2123,10 @@ 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_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(); @@ -2139,10 +2138,9 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) PME_ON; PME_OFF; 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_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(); @@ -2162,19 +2160,15 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) periodicity_length *= 3600; } TxPeriodicity = periodicity_length*1000; //translate to 1000ms=1s - HeartBeatPeriodicity = TxPeriodicity; + //HeartBeatPeriodicity = TxPeriodicity; //OnTxPeriodicityChanged(TxPeriodicity); #if defined(STS_O6)||defined(STS_O7) OnYunhornSTSHeartBeatPeriodicityChanged(TxPeriodicity); #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_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 @@ -2219,12 +2213,9 @@ 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_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 From 19c700ec239df0fd525cd898040add3d747207c6 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Wed, 31 Jul 2024 17:05:05 +0800 Subject: [PATCH 05/58] Revert "-- P cmd revised, still no good heart beat timer" This reverts commit ac5101e2cab31ba2f29505f20e9bef5f0d390ed9. --- AS923_HK_DECODER.js | 56 +----------------------- LoRaWAN/App/lora_app.c | 98 ++++++++++++++++++++++++++---------------- 2 files changed, 63 insertions(+), 91 deletions(-) diff --git a/AS923_HK_DECODER.js b/AS923_HK_DECODER.js index a0084a2..6f1dba4 100644 --- a/AS923_HK_DECODER.js +++ b/AS923_HK_DECODER.js @@ -6,7 +6,6 @@ // for Yunhorn SmarToilets STS-O7 Occupancy/Fall Detection/Over stay sensor function Decode(fPort, data, variables) { var data = {}; - data.length = bytes.length; if ((fPort === 10)) { // STS_O2_O6 V3 version 2023,pixel-network version switch (bytes[0]) { case 0x00: @@ -176,7 +175,7 @@ function Decode(fPort, data, variables) { 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.length = bytes.length; + data.length = bytes.length if (data.length === 9) { data.Over_stay_state = (bytes[6] === 0) ? "False" : "True"; data.Over_Stay_duration_in_Seconds = (bytes[7] << 8 | bytes[8]); @@ -381,59 +380,6 @@ function Decode(fPort, data, variables) { data.LocalTime_EST8 = "GMT+8: " + data.L_year + "/" + data.L_mon + "/" + data.L_day + " " + (data.L_hour + 8) + ":" + data.L_min + ":" + data.L_sec; } } - else if (bytes[0] === 0x50) { // P cmd report - if (data.length == 7) { - switch (bytes[3]) { - case 0x46: // F --- fall down & unconscious detection threshold - data.FALL_acceleration = (bytes[4] == 0x30 ? "Disabled" : ((bytes[4] - 0x30) * 10) + " mg/s2"); - data.FALL_depth_measure = (bytes[5] == 0x30 ? "Disabled" : ((bytes[5] - 0x30) * 10) + " cm"); - data.FALL_confirm_threshold = (bytes[6] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 10) + " seconds"); - //data.FALL_reserved = (bytes[7]==0x0?"Disabled":((bytes[6]-0x30)*10)+" min"); - break; - } //switch - } - else if (data.length == 8) { - switch (bytes[3]) { - case 0x4f: // O -- over stay, onconscious, long stay - data.OMU_Motionless_duration_in_min = (bytes[4] == 0x30 ? "Disabled" : ((bytes[4] - 0x30)) + " Min"); - data.OMU_Long_Occupy_duration_in_Min = (bytes[5] == 0x30 ? "Disabled" : ((bytes[5] - 0x30) * 10) + " Min"); - data.OMU_Unconcious_Threshold = (bytes[6] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 100) + "ml"); - data.OMU_Alarm_Mute_Reset_Timer = (bytes[7] == 0x30 ? "Disabled" : ((bytes[7] - 0x30) * 10) + " Seconds"); - break; - case 0x46: // F --- fall down & unconscious detection threshold - data.FALL_acceleration = (bytes[4] == 0x30 ? "Disabled" : ((bytes[4] - 0x30) * 10) + " mg/s2"); - data.FALL_depth_measure = (bytes[5] == 0x30 ? "Disabled" : ((bytes[5] - 0x30) * 10) + " cm"); - data.FALL_confirm_threshold = (bytes[6] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 10) + " seconds"); - data.FALL_reserved = (bytes[7] == 0x30 ? "Disabled" : ((bytes[6] - 0x30) * 10) + " min"); - break; - } //switch - } else if (data.length == 11) { // P 1108201365 - data.RSS_SIMPLE_Start = ((bytes[3] - 0x30) * 100 + (bytes[4] - 0x30) * 10) + " cm"; - data.RSS_SIMPLE_Length = ((bytes[5] - 0x30) * 100 + (bytes[6] - 0x030) * 10) + " cm"; - data.RSS_SIMPLE_Threshold = ((bytes[7] - 0x30) * 1000 + (bytes[8] - 0x30) * 100) + " ml"; - data.RSS_SIMPLE_Gain = ((bytes[9] - 0x30) * 10 + (bytes[10] - 0x30)) + " %"; - } else if (data.length == 33) { // P 11 - data.RSS_FULL_Start = ((bytes[3] - 0x30) * 100 + (bytes[4] - 0x30) * 10) + " cm"; - data.RSS_FULL_Length = ((bytes[5] - 0x30) * 100 + (bytes[6] - 0x30) * 10) + " cm"; - data.RSS_FULL_Threshold = ((bytes[7] - 0x30) * 1000 + (bytes[8] - 0x30) * 100) + " ml"; - data.RSS_FULL_Gain = ((bytes[9] - 0x30) * 10 + (bytes[10] - 0x30)) + " %"; - data.RSS_FULL_Profile = (bytes[11] - 0x30); - data.RSS_FULL_Rate_Tracking = ((bytes[12] - 0x30) * 10 + (bytes[13] - 0x30)); - data.RSS_FULL_Rate_Presence = ((bytes[14] - 0x30) * 10 + (bytes[15] - 0x30)); - data.RSS_FULL_HWAAS = ((bytes[16] - 0x30) * 10 + (bytes[17] - 0x30)); - data.RSS_FULL_Num_Removed_PC = (bytes[18] - 0x30); - data.RSS_FULL_Inter_Deviation_Time_Const_in_Sec = ((bytes[19] - 0x30) + (bytes[20] - 0x30) * 0.1); - data.RSS_FULL_Inter_Fast_Cut_Off = ((bytes[21] - 0x30) * 10 + (bytes[22] - 0x30)); - data.RSS_FULL_Inter_Slow_Cut_Off = ((bytes[23] - 0x30) * 0.1 + (bytes[24] - 0x30) * 0.001); - data.RSS_FULL_Inter_Time_Const_in_Sec = ((bytes[25] - 0x30) * 10 + (bytes[26] - 0x30)); - data.RSS_FULL_Inter_Weight = ((bytes[27] - 0x30) + (bytes[28] - 0x30) * 0.1); - data.RSS_FULL_Output_Time_Const_in_Sec = ((bytes[29] - 0x30) + (bytes[30] - 0x30) * 0.1); - data.RSS_FULL_DownSampling_factor = (bytes[31] - 0x30); - data.RSS_FULL_Power_Saving_mode = (bytes[32] - 0x30); - - - } - } return { "Yunhorn_SmarToilets_data": data }; } } diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index b4fa011..b37b741 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -2278,28 +2278,31 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnStoreSTSCFGContextRequest(); i=0; // Step 1: Prepare status update message - // 2024-07-31 - UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); - i = tlv_buf_size; + 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]; STS_Combined_Status_Processing(); - } else if (tlv_buf_size == 7 && tlv_buf[CFG_CMD4]=='F') // Change fall detection + } else if (tlv_buf_size == 8 && tlv_buf[CFG_CMD4]=='F') // Change fall detection { - invalid_flag = 0; // P 1 1 F A D C T + invalid_flag = 0; // P 1 1 F A B C D 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_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; //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_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_occupancy_overtime_threshold_in_10min = (uint8_t)(tlv_buf[CFG_CMD8] - 0x30)*10; //T: overtime *10 min + sts_occupancy_overtime_threshold_in_10min = (uint8_t)(tlv_buf[CFG_CMD8] - 0x30)*10; // 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); -// sts_cfg_nvm.occupancy_overtime_threshold_in_10min = (uint8_t)(tlv_buf[CFG_CMD8] - 0x30); + sts_cfg_nvm.fall_confirm_threshold_in_10sec = (uint8_t)(tlv_buf[CFG_CMD7] - 0x30+1); + + 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 { @@ -2312,11 +2315,14 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnStoreSTSCFGContextRequest(); i=0; // Step 1: Prepare status update message - // 2024-07-31 - UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); - i = tlv_buf_size; - APP_LOG(TS_OFF, VLEVEL_L, "###### Fall Detection config changed =%s\r\n",(char *)outbuf); - + 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]; STS_Combined_Status_Processing(); } @@ -2328,7 +2334,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) 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'))) { - sts_motionless_duration_threshold_in_min = (uint8_t)(tlv_buf[CFG_CMD5] - 0x30); //Motionless duration in min + sts_motionless_duration_threshold_in_min = (uint8_t)(tlv_buf[CFG_CMD5] - 0x30); //Motionless duration in min sts_occupancy_overtime_threshold_in_10min = (uint8_t)(tlv_buf[CFG_CMD6] - 0x30)*10; //Long occupation in min sts_unconscious_level_threshold = (uint8_t)(tlv_buf[CFG_CMD7] - 0x30+1)*128; //motion level threshold less than 1280 sts_alarm_mute_reset_timer_in_10sec = (uint8_t)(tlv_buf[CFG_CMD8] - 0x30)*10; //alarm mute reset timer in 10 sec @@ -2341,10 +2347,14 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnStoreSTSCFGContextRequest(); i=0; // Step 1: Prepare status update message - // 2024-07-31 - 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); + 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]; STS_Combined_Status_Processing(); } } @@ -2362,11 +2372,11 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) sts_work_mode = (uint8_t)((tlv_buf[CFG_CMD4] - 0x41) + 10); } - i=0; // Step 1: Prepare status update message - // 2024-07-31 - UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); - i = 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]; //sts_service_mask = STS_SERVICE_MASK_L0; //sts_lamp_bar_color = STS_GREEN; @@ -2409,10 +2419,19 @@ 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 - // 2024-07-31 - 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); + + 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]; + } + // Step 2: Save valid config to NVM sts_cfg_nvm.mtmcode1 = sts_mtmcode1; sts_cfg_nvm.mtmcode2 = sts_mtmcode2; @@ -2435,7 +2454,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) if ((tlv_buf[CFG_CMD4+j] >='0') && (tlv_buf[CFG_CMD4+j]<='9')) { sts_cfg_nvm.p[j] = (uint8_t)((tlv_buf[CFG_CMD4+j] - 0x30)&0xff); - APP_LOG(TS_OFF,VLEVEL_L,"\r\n tlv_buf %d = %02x cfg->p[%d]=%02x \r\n", + APP_LOG(TS_OFF,VLEVEL_H,"\r\n tlv_buf %d = %02x cfg->p[%d]=%02x \r\n", j,tlv_buf[CFG_CMD4+j], j, sts_cfg_nvm.p[j]); } else { invalid_flag = 1; @@ -2447,10 +2466,17 @@ 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 - // 2024-07-31 - 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); + 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); // Step 2: Save valid config to NVM sts_cfg_nvm.mtmcode1 = sts_mtmcode1; From a5de53a293ab7cd6d4111c0d0227facc776a3764 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Wed, 31 Jul 2024 17:51:17 +0800 Subject: [PATCH 06/58] change back a little --- LoRaWAN/App/lora_app.c | 102 +++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 65 deletions(-) diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index b37b741..4ee0cda 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -694,6 +694,8 @@ void LoRaWAN_Init(void) UTIL_TIMER_PERIODIC, OnYunhornSTSHeartBeatTimerEvent, NULL); UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); + UTIL_TIMER_Start(&STSLampBarColorTimer); + //UTIL_TIMER_Start(&STSDurationCheckTimer); #else @@ -1203,8 +1205,6 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) r_b = !r_b; } -//UTIL_TIMER_Start(&STSLampBarColorTimer); - } static void OnYunhornSTSDurationCheckTimerEvent(void *context) @@ -1426,12 +1426,12 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) heart_beat_timer = 1; SendTxData(); - //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); - //OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); + OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); + + UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); + UTIL_TIMER_Start(&STSDurationCheckTimer); - UTIL_TIMER_Start(&STSLampBarColorTimer); - //UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); /* USER CODE END OnJoinRequest_1 */ } @@ -1709,7 +1709,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)) { @@ -1719,6 +1718,7 @@ static void OnYunhornSTSHeartBeatTimerEvent(void *context) } UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), CFG_SEQ_Prio_0); } + //UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); } /** @@ -2160,10 +2160,11 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) periodicity_length *= 3600; } TxPeriodicity = periodicity_length*1000; //translate to 1000ms=1s - //HeartBeatPeriodicity = TxPeriodicity; + //OnTxPeriodicityChanged(TxPeriodicity); #if defined(STS_O6)||defined(STS_O7) + HeartBeatPeriodicity = TxPeriodicity; OnYunhornSTSHeartBeatPeriodicityChanged(TxPeriodicity); #endif // 2024-07-31 @@ -2278,31 +2279,28 @@ 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_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 { @@ -2315,14 +2313,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_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(); } @@ -2347,14 +2341,9 @@ 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_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(); } } @@ -2373,10 +2362,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_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; @@ -2419,18 +2408,9 @@ 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_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; @@ -2466,17 +2446,9 @@ 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_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; From 83b4a0aeda66ea6090b0d7491aef0daeedf9efc6 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Wed, 31 Jul 2024 18:15:46 +0800 Subject: [PATCH 07/58] ---no good, freeze after 10 seconds --- Core/Inc/sys_conf.h | 2 +- LoRaWAN/App/lora_app.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) 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/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 4ee0cda..546b5af 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -2679,7 +2679,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((void*)nvm_stored_value, (void *)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)) @@ -2892,8 +2893,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); } From aa4214983d116f56ba232bc251d59bb512a947f7 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Thu, 1 Aug 2024 13:01:38 +0800 Subject: [PATCH 08/58] --- revised for lamp bar...no good so far --- Core/Src/gpio.c | 10 +++++----- Core/Src/main.c | 5 +---- Core/Src/sts_lamp_bar.c | 14 +++++++------- Core/Src/sys_app.c | 13 ++++++++++++- LoRaWAN/App/app_lorawan.c | 3 ++- LoRaWAN/App/lora_app.c | 24 +++++++++++++----------- 6 files changed, 40 insertions(+), 29 deletions(-) diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index ad7ea4d..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; diff --git a/Core/Src/main.c b/Core/Src/main.c index 8558c2f..a142895 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -99,15 +99,12 @@ 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/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index 197ac3d..7afd61f 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -74,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; @@ -127,12 +127,11 @@ void STS_Lamp_Bar_Scoller(uint8_t color, uint8_t lum_level) for(uint8_t i = 0; i>4)&0x0f, low4=sts_lamp_bar_color&0x0f; - HAL_Delay(10); + if (high4==0) { if (last_sts_lamp_bar_color != sts_lamp_bar_color) @@ -1342,8 +1342,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; @@ -1352,7 +1353,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; } } @@ -1427,10 +1430,9 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) heart_beat_timer = 1; SendTxData(); - OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); - UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); UTIL_TIMER_Start(&STSDurationCheckTimer); + OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); /* USER CODE END OnJoinRequest_1 */ } @@ -1697,7 +1699,7 @@ static void OnYunhornSTSOORSSWakeUpTimerEvent(void *context) } } - UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); + //UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); } @@ -1718,7 +1720,7 @@ static void OnYunhornSTSHeartBeatTimerEvent(void *context) } UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), CFG_SEQ_Prio_0); } - //UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); + UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); } /** From 1fe94926e553edd8c3da22198946d5a6cefe6bde Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Thu, 1 Aug 2024 19:47:41 +0800 Subject: [PATCH 09/58] ---- good heart beat, yet rss unstable for distance detector --- Core/Inc/sts_lamp_bar.h | 4 ++ Core/Inc/yunhorn_sts_prd_conf.h | 8 +-- Core/Inc/yunhorn_sts_sensors.h | 17 +++++- Core/Src/main.c | 7 --- Core/Src/sts_lamp_bar.c | 2 +- Core/Src/sys_app.c | 15 ++--- Core/Src/yunhorn_sts_distance_rss.c | 4 +- Core/Src/yunhorn_sts_process.c | 82 +++++++++++++++++++------ LoRaWAN/App/app_lorawan.c | 2 +- LoRaWAN/App/lora_app.c | 95 ++++++++++++++--------------- 10 files changed, 140 insertions(+), 96 deletions(-) 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/yunhorn_sts_prd_conf.h b/Core/Inc/yunhorn_sts_prd_conf.h index 55fd30e..42f8fc2 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 30U +#define MinorVer 8U +#define SubMinorVer 1U #define FirmwareVersion 3U #define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U @@ -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 ec541c8..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); @@ -734,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/main.c b/Core/Src/main.c index a142895..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 -----------------------------------------------------------*/ @@ -104,7 +98,6 @@ int main(void) /* USER CODE BEGIN 2 */ - /* USER CODE END 2 */ /* Infinite loop */ diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index 7afd61f..e1ae1c3 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -63,7 +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_Door_Open,sts_hall4_read=STS_Status_SOS_Release; +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; diff --git a/Core/Src/sys_app.c b/Core/Src/sys_app.c index a31423f..f23f63b 100644 --- a/Core/Src/sys_app.c +++ b/Core/Src/sys_app.c @@ -118,16 +118,11 @@ void SystemApp_Init(void) /*Initialize the Sensors */ EnvSensors_Init(); // LED1 Flash 3 times for normal power on - LED1_TOGGLE; - HAL_Delay(500); - LED1_TOGGLE; - HAL_Delay(500); - LED1_TOGGLE; - HAL_Delay(500); - LED1_TOGGLE; - HAL_Delay(500); - LED1_TOGGLE; - HAL_Delay(500); + LED1_TOGGLE; HAL_Delay(500); + LED1_TOGGLE; HAL_Delay(500); + LED1_TOGGLE; HAL_Delay(500); + LED1_TOGGLE; HAL_Delay(500); + LED1_TOGGLE; HAL_Delay(500); LED1_TOGGLE; /*Init low power manager*/ UTIL_LPM_Init(); diff --git a/Core/Src/yunhorn_sts_distance_rss.c b/Core/Src/yunhorn_sts_distance_rss.c index 473e619..0314423 100644 --- a/Core/Src/yunhorn_sts_distance_rss.c +++ b/Core/Src/yunhorn_sts_distance_rss.c @@ -53,8 +53,8 @@ #endif //volatile distance_measure_cfg_t distance_cfg={1.5, 2.0, 1, 63, 2, 10, 0.5, 1.3, 0.2}; -volatile distance_measure_cfg_t distance_cfg={1.5, 2.0, 2, 63, 2, 10, 0.5, 1.3, 0.2}; -//volatile distance_measure_cfg_t distance_cfg={1.5, 3.3, 2, 63, 4, 10, 0.8182f, 0.4, 0.2}; +//volatile distance_measure_cfg_t distance_cfg={1.5, 2.0, 2, 63, 2, 10, 0.5, 1.3, 0.2}; +volatile distance_measure_cfg_t distance_cfg={1.5, 3.3, 2, 63, 4, 10, 0.8182f, 0.4, 0.2}; extern float sts_distance_rss_distance, sts_sensor_install_height; static void sts_distance_rss_update_configuration(acc_detector_distance_configuration_t distance_configuration); diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 05426fa..4ab1022 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -63,7 +63,7 @@ volatile uint8_t sts_soap_level_state; // RSS motion and distance volatile STS_OO_SensorStatusDataTypeDef sts_o7_sensorData; -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; volatile uint8_t sts_rss_config_updated_flag = 0; extern volatile uint8_t sts_occupancy_overtime_state; @@ -226,16 +226,16 @@ void STS_YunhornSTSEventRFAC_Process(void) void STS_YunhornSTSEventP1_Process(void) { - sts_reed_hall_1_result = HALL1_STATE; //sts_hall1_read; + sts_reed_hall_1_result = sts_hall1_read;//HALL1_STATE; //sts_hall1_read; last_sts_reed_hall_1_result = sts_reed_hall_1_result; - sts_reed_hall_2_result = HALL2_STATE;// sts_hall2_read; + sts_reed_hall_2_result = sts_hall2_read;//HALL2_STATE;// sts_hall2_read; last_sts_reed_hall_2_result = sts_reed_hall_2_result; - sts_reed_hall_3_result = HALL3_STATE;// sts_hall3_read; + 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 = HALL4_STATE;// sts_hall3_read; + 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(); @@ -501,11 +501,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; @@ -860,8 +862,8 @@ 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(); @@ -885,17 +887,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((exit_status)); sts_sensor_install_height=sts_distance_rss_distance; } @@ -1219,6 +1227,25 @@ void OnSensor3StateChanged(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_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) @@ -1232,6 +1259,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 0317ebe..8c72b4c 100644 --- a/LoRaWAN/App/app_lorawan.c +++ b/LoRaWAN/App/app_lorawan.c @@ -70,7 +70,7 @@ void MX_LoRaWAN_Init(void) SystemApp_Init(); /* USER CODE BEGIN MX_LoRaWAN_Init_2 */ //STS_Lamp_Bar_Self_Test_Simple(); - STS_Lamp_Bar_Self_Test(); + //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 1e7e88e..333efe9 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -75,7 +75,7 @@ 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; @@ -83,7 +83,7 @@ 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,24 +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_PERIODIC, OnYunhornSTSOORSSWakeUpTimerEvent, NULL); + 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_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); + 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 */ @@ -1116,20 +1110,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); @@ -1428,10 +1411,14 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) } heart_beat_timer = 1; - SendTxData(); + //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(&STSDurationCheckTimer); + //UTIL_TIMER_Start(&TxTimer); + //UTIL_TIMER_Start(&STSDurationCheckTimer); OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); /* USER CODE END OnJoinRequest_1 */ @@ -1511,8 +1498,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); @@ -1699,7 +1684,7 @@ static void OnYunhornSTSOORSSWakeUpTimerEvent(void *context) } } - //UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); + UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); } @@ -1749,7 +1734,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 */ } @@ -1889,7 +1874,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)); @@ -2113,6 +2098,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) 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); @@ -2127,6 +2113,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) //STS_SENSOR_Power_OFF((tlv_buf[CFG_CMD3]-0x30)); 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); @@ -2141,6 +2128,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) 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); @@ -2161,15 +2149,16 @@ 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 + periodicity_length = periodicity_length*1000; //translate to 1000ms=1s //OnTxPeriodicityChanged(TxPeriodicity); #if defined(STS_O6)||defined(STS_O7) - HeartBeatPeriodicity = TxPeriodicity; - OnYunhornSTSHeartBeatPeriodicityChanged(TxPeriodicity); + HeartBeatPeriodicity = periodicity_length; + OnYunhornSTSHeartBeatPeriodicityChanged(periodicity_length); #endif // 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; @@ -2185,7 +2174,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(); @@ -2217,6 +2206,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnYunhornSTSSamplingPeriodicityChanged(SamplingPeriodicity); #endif // 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; @@ -2281,6 +2271,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnStoreSTSCFGContextRequest(); i=0; // Step 1: Prepare status update message + 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; @@ -2315,6 +2306,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnStoreSTSCFGContextRequest(); i=0; // Step 1: Prepare status update message + 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); @@ -2343,6 +2335,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) OnStoreSTSCFGContextRequest(); i=0; // Step 1: Prepare status update message + 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); @@ -2364,7 +2357,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size) } i=0; // Step 1: Prepare status update message - + 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); @@ -2410,6 +2403,7 @@ 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 + 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); @@ -2448,6 +2442,7 @@ 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 + 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); @@ -2527,9 +2522,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); } @@ -2657,7 +2651,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; @@ -2665,7 +2659,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 */ @@ -2682,7 +2677,7 @@ void STS_REBOOT_CONFIG_Init(void) /* USER CODE END OnRestoreContextRequest_1 */ //UTIL_MEM_cpy_8(nvm_stored_value, (void *)STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE); - FLASH_IF_Read((void*)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)) @@ -2748,9 +2743,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') { @@ -2766,6 +2759,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 @@ -2775,7 +2769,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 @@ -2813,7 +2808,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 From be38c056a82053170e7c0634f1829bc03c33c753 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Fri, 2 Aug 2024 19:15:48 +0800 Subject: [PATCH 10/58] --- minor revise for distance ranging --- Core/Src/yunhorn_sts_distance_rss.c | 16 +++++++++++----- Core/Src/yunhorn_sts_presence_rss.c | 4 ++++ Core/Src/yunhorn_sts_process.c | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Core/Src/yunhorn_sts_distance_rss.c b/Core/Src/yunhorn_sts_distance_rss.c index 0314423..2e515e4 100644 --- a/Core/Src/yunhorn_sts_distance_rss.c +++ b/Core/Src/yunhorn_sts_distance_rss.c @@ -53,8 +53,10 @@ #endif //volatile distance_measure_cfg_t distance_cfg={1.5, 2.0, 1, 63, 2, 10, 0.5, 1.3, 0.2}; -//volatile distance_measure_cfg_t distance_cfg={1.5, 2.0, 2, 63, 2, 10, 0.5, 1.3, 0.2}; -volatile distance_measure_cfg_t distance_cfg={1.5, 3.3, 2, 63, 4, 10, 0.8182f, 0.4, 0.2}; +// SPARK FUN EXAMPLE +// GOOD --- volatile distance_measure_cfg_t distance_cfg={0.4, 3.5, 4, 63, 0, 10, 0.5, 1.3, 0.2}; +volatile distance_measure_cfg_t distance_cfg={0.8, 3.5, 4, 63, 2, 10, 0.5, 1.3, 0.2}; +//volatile distance_measure_cfg_t distance_cfg={1.5, 3.3, 2, 63, 4, 10, 0.8182f, 0.4, 0.2}; extern float sts_distance_rss_distance, sts_sensor_install_height; static void sts_distance_rss_update_configuration(acc_detector_distance_configuration_t distance_configuration); @@ -75,7 +77,7 @@ int sts_distance_rss_detector_distance(void) return EXIT_FAILURE; } - acc_rss_override_sensor_id_check_at_creation(true); + //acc_rss_override_sensor_id_check_at_creation(true); acc_detector_distance_configuration_t distance_configuration = acc_detector_distance_configuration_create(); @@ -87,6 +89,7 @@ int sts_distance_rss_detector_distance(void) } sts_distance_rss_update_configuration(distance_configuration); + acc_detector_distance_handle_t distance_handle = acc_detector_distance_create(distance_configuration); if (distance_handle == NULL) @@ -108,8 +111,8 @@ int sts_distance_rss_detector_distance(void) } bool success = true; - const int iterations = 1; //5; - uint16_t number_of_peaks = 10.0f; + const int iterations = 5; //5; + uint16_t number_of_peaks = 5; acc_detector_distance_result_t result[number_of_peaks]; acc_detector_distance_result_info_t result_info; float tmp_distance = 0.0f; @@ -129,6 +132,7 @@ int sts_distance_rss_detector_distance(void) } sts_distance_rss_distance = (uint16_t)(1000*tmp_distance/result_info.number_of_peaks); + sts_distance_rss_distance /= iterations; APP_LOG(TS_OFF, VLEVEL_M, "\r\nAverage Distance= %u mm\r\n", (uint16_t)sts_distance_rss_distance); // ensure it's a valid installation height @@ -169,6 +173,7 @@ static void sts_distance_rss_update_configuration(acc_detector_distance_configur } */ //backup. ... previous setting ----don't delete + static void sts_distance_rss_update_configuration(acc_detector_distance_configuration_t distance_configuration) { acc_detector_distance_configuration_requested_start_set(distance_configuration, distance_cfg.start_m); @@ -185,6 +190,7 @@ static void sts_distance_rss_update_configuration(acc_detector_distance_configur acc_detector_distance_configuration_record_background_sweeps_set(distance_configuration, 16); } + // static void print_distances(acc_detector_distance_result_t *result, uint16_t reflection_count) { diff --git a/Core/Src/yunhorn_sts_presence_rss.c b/Core/Src/yunhorn_sts_presence_rss.c index d582dae..36c1937 100644 --- a/Core/Src/yunhorn_sts_presence_rss.c +++ b/Core/Src/yunhorn_sts_presence_rss.c @@ -179,6 +179,10 @@ void STS_PRESENCE_RSS_update_default_configuration(acc_detector_presence_configu acc_detector_presence_configuration_detection_threshold_set(presence_configuration, DEFAULT_DETECTION_THRESHOLD); acc_detector_presence_configuration_start_set(presence_configuration, DEFAULT_START_M); acc_detector_presence_configuration_length_set(presence_configuration, DEFAULT_LENGTH_M); + + acc_detector_presence_configuration_filter_parameters_t filter = acc_detector_presence_configuration_filter_parameters_get(presence_configuration); + filter.output_time_const = 0.0f; + acc_detector_presence_configuration_filter_parameters_set(presence_configuration, &filter); acc_detector_presence_configuration_power_save_mode_set(presence_configuration, DEFAULT_POWER_SAVE_MODE); acc_detector_presence_configuration_nbr_removed_pc_set(presence_configuration, DEFAULT_NBR_REMOVED_PC); diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 4ab1022..5ccf1ef 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -903,7 +903,7 @@ void STS_PRESENCE_SENSOR_RSS_Init(void) APP_LOG(TS_ON, VLEVEL_H, "##### RSS Installation Height Error \r\n"); HAL_Delay(100); } - } while((exit_status)); + } while((0)); sts_sensor_install_height=sts_distance_rss_distance; } From f49d4afb244125018341fef76cd39589e3025a6e Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Mon, 5 Aug 2024 17:05:07 +0800 Subject: [PATCH 11/58] ---- revised for reboot issue..not yet --- Core/Inc/yunhorn_sts_prd_conf.h | 4 ++-- Core/Src/yunhorn_sts_presence_rss.c | 28 ++++++++++++++++++---------- Core/Src/yunhorn_sts_process.c | 4 +++- LoRaWAN/App/lora_app.c | 4 ++-- STM32CubeIDE/.cproject | 6 ++++-- STM32CubeIDE/Release/makefile | 22 +++------------------- 6 files changed, 32 insertions(+), 36 deletions(-) diff --git a/Core/Inc/yunhorn_sts_prd_conf.h b/Core/Inc/yunhorn_sts_prd_conf.h index 42f8fc2..6c0b0a3 100644 --- a/Core/Inc/yunhorn_sts_prd_conf.h +++ b/Core/Inc/yunhorn_sts_prd_conf.h @@ -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) diff --git a/Core/Src/yunhorn_sts_presence_rss.c b/Core/Src/yunhorn_sts_presence_rss.c index 36c1937..ce61366 100644 --- a/Core/Src/yunhorn_sts_presence_rss.c +++ b/Core/Src/yunhorn_sts_presence_rss.c @@ -319,7 +319,9 @@ static void print_result(acc_detector_presence_result_t result) { if (result.presence_detected) { - uint32_t detected_zone = (uint32_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH); + //uint32_t detected_zone = (uint32_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH); + // 2024-08-05 + uint32_t detected_zone = (uint32_t)((float)(result.presence_distance) / (float)DEFAULT_ZONE_LENGTH); APP_LOG(TS_OFF, VLEVEL_H,"Motion in zone: %u, distance: %d, score: %d\n", (unsigned int)detected_zone, (int)(result.presence_distance * 1000.0f), (int)(result.presence_score * 1000.0f)); @@ -418,15 +420,18 @@ int sts_presence_rss_fall_rise_detection(void) break; } - print_result(result); + //print_result(result); if (!result.data_saturated) { if (result.presence_detected) { + print_result(result); average_result++; average_distance += result.presence_distance; average_score += result.presence_score; - detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH); + //detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH); + //2024-08-05 + detected_zone = (uint16_t)((float)(result.presence_distance) / (float)DEFAULT_ZONE_LENGTH); motion_in_zone[detected_zone]++; // new add 2024-06-18 //detected_hs_zone = (uint16_t)((float)(sts_sensor_install_height/1000.0f - (result.presence_distance))/(float)DEFAULT_ZONE_LENGTH); @@ -489,15 +494,18 @@ int sts_presence_rss_fall_rise_detection(void) break; } - print_result(result); + //print_result(result); if (!result.data_saturated) { if (result.presence_detected) { + print_result(result); average_result++; average_distance += result.presence_distance; average_score += result.presence_score; - detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH); + //detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH); + // 2024-08-05 + detected_zone = (uint16_t)((float)(result.presence_distance) / (float)DEFAULT_ZONE_LENGTH); motion_in_zone[detected_zone]++; // new add 2024-06-18 @@ -530,7 +538,7 @@ int sts_presence_rss_fall_rise_detection(void) } //APP_LOG(TS_OFF, VLEVEL_L,"Second Half, Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count); - //uint8_t thiscnt= motion_detected_count; + uint8_t thiscnt= motion_detected_count; if (motion_detected_count++ == 10) { motion_detected_count=0; @@ -562,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++) { @@ -575,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; @@ -701,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 5ccf1ef..9191467 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -39,6 +39,8 @@ 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) @@ -46,7 +48,7 @@ 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; diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 333efe9..017846b 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -2376,7 +2376,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) STS_Combined_Status_Processing(); HAL_Delay(2000); - OnSystemReset(); + //OnSystemReset(); } else { invalid_flag = 1; @@ -2611,7 +2611,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]); diff --git a/STM32CubeIDE/.cproject b/STM32CubeIDE/.cproject index 24a19c7..cb5c54d 100644 --- a/STM32CubeIDE/.cproject +++ b/STM32CubeIDE/.cproject @@ -39,7 +39,7 @@