diff --git a/Core/Inc/yunhorn_sts_sensors.h b/Core/Inc/yunhorn_sts_sensors.h
index 7672eba..77331d8 100644
--- a/Core/Inc/yunhorn_sts_sensors.h
+++ b/Core/Inc/yunhorn_sts_sensors.h
@@ -722,7 +722,7 @@ uint32_t STS_Get_Date_Time_Stamp(void);//uint32_t *time_stamp, uint8_t *datetime
 void STS_SENSOR_MEMS_Reset(uint8_t cnt);
 
 void STS_PRESENCE_SENSOR_NVM_CFG(void);
-void STS_PRESENCE_SENSOR_NVM_CFG_SIMPLE(void);
+//void STS_PRESENCE_SENSOR_NVM_CFG_SIMPLE(void);
 void STS_PRESENCE_SENSOR_Read(STS_OO_SensorStatusDataTypeDef *o6_data);
 void STS_PRESENCE_SENSOR_Prepare_Send_Data(STS_OO_SensorStatusDataTypeDef *sensor_data);
 
@@ -748,11 +748,13 @@ uint8_t STS_SENSOR_MEMS_Get_ID(uint8_t *devID);
 int sts_presence_rss_detection_init(void);
 int sts_presence_rss_detection_process(void);
 int sts_presence_rss_detection_deinit(void);
-
 int sts_presence_rss_presence_detection(void);
 int sts_presence_rss_fall_rise_detection(void);
-int sts_distance_rss_detector_distance(void);
-int acc_example_detector_distance(int argc, char *argv[]);
+//int sts_distance_rss_detector_distance(void);
+int sts_distance_rss_detector_distance(uint16_t *rss_distance);
+//int acc_example_detector_distance(int argc, char *argv[]);
+//int acc_example_detector_distance(void);
+int acc_example_detector_distance(uint16_t *rss_distance);
 int acc_example_service_sparse(int argc, char *argv[]);
 int acc_example_detector_distance_recorded(int argc, char *argv[]);
 int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result);
@@ -774,8 +776,9 @@ void STS_MOTION_SENSOR_Initialization(void);
 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);
-void STS_PRESENCE_SENSOR_Distance_Measure_Process(void);
+void STS_PRESENCE_SENSOR_Function_Test_Process(uint8_t *self_test_result, uint8_t *count);
+//void STS_PRESENCE_SENSOR_Distance_Measure_Process(void);
+void STS_PRESENCE_SENSOR_Distance_Measure_Process(uint16_t *rss_distance);
 void STS_PRESENCE_SENSOR_Background_Measure_Process(uint16_t *bg_distance, uint16_t *bg_motion_noise);
 int sts_presence_rss_background_evaluation_process(uint16_t *evaluated_distance, uint16_t *evaluated_score);
 void STS_Sensor_Init(void);
diff --git a/Core/Src/example_detector_distance.c b/Core/Src/example_detector_distance.c
index 230b1a9..f13c1eb 100644
--- a/Core/Src/example_detector_distance.c
+++ b/Core/Src/example_detector_distance.c
@@ -34,31 +34,33 @@
 #define EXAMPLE_PROFILE  ACC_SERVICE_PROFILE_2		//2
 #define EXAMPLE_HWAAS    (63)		//63
 
-volatile distance_measure_cfg_t distance_cfg={1.0, 2.0, 5, 63, 2, 10, 0.5, 1.3, 0.2};
+extern volatile distance_measure_cfg_t distance_cfg; //={1.0, 3.0, 4, 63, 1, 10, 0.5, 1.3, 0.5};
 extern float sts_distance_rss_distance;
 
 static void update_configuration(acc_detector_distance_configuration_t distance_configuration);
-
+static void print_configuration(acc_detector_distance_configuration_t distance_configuration);
 
 static void print_distances(acc_detector_distance_result_t *result, uint16_t reflection_count);
 
 
-int acc_example_detector_distance(int argc, char *argv[]);
+int acc_example_detector_distance(uint16_t *rss_distance);
 
 
-int acc_example_detector_distance(int argc, char *argv[])
+int acc_example_detector_distance(uint16_t *rss_distance)
 {
-	(void)argc;
-	(void)argv;
+	//(void)argc;
+	//(void)argv;
 	//APP_LOG(TS_OFF, VLEVEL_M, "Acconeer software version %s\n", acc_version_get());
 
 	const acc_hal_t *hal = acc_hal_integration_get_implementation();
-
+#if 1
 	if (!acc_rss_activate(hal))
 	{
 		APP_LOG(TS_OFF, VLEVEL_M, "acc_rss_activate() failed\n");
 		return EXIT_FAILURE;
 	}
+#endif
+
 	acc_rss_override_sensor_id_check_at_creation(true);
 
 	acc_detector_distance_configuration_t distance_configuration = acc_detector_distance_configuration_create();
@@ -81,8 +83,12 @@ int acc_example_detector_distance(int argc, char *argv[])
 	}
 */
 ///
+	print_configuration(distance_configuration);
+
 	update_configuration(distance_configuration);
+
 	acc_detector_distance_handle_t distance_handle = acc_detector_distance_create(distance_configuration);
+	print_configuration(distance_configuration);
 
 	if (distance_handle == NULL)
 	{
@@ -107,7 +113,7 @@ int acc_example_detector_distance(int argc, char *argv[])
 	uint16_t                            number_of_peaks = 5;
 	acc_detector_distance_result_t      result[number_of_peaks];
 	acc_detector_distance_result_info_t result_info;
-	sts_distance_rss_distance			= 0.0;
+	float sts_distance					= 0.0f;
 
 	for (int i = 0; i < iterations; i++)
 	{
@@ -118,11 +124,12 @@ int acc_example_detector_distance(int argc, char *argv[])
 			APP_LOG(TS_OFF, VLEVEL_M, "acc_detector_distance_get_next() failed\n");
 			break;
 		}
-		sts_distance_rss_distance += result->distance_m;
+		sts_distance += result->distance_m;
 		print_distances(result, result_info.number_of_peaks);
+		HAL_Delay(20);
 	}
 
-	sts_distance_rss_distance = 1000.0f*sts_distance_rss_distance/iterations;
+	*rss_distance = (sts_distance*1000.0f)/iterations;
 
 	bool deactivated = acc_detector_distance_deactivate(distance_handle);
 
@@ -132,7 +139,7 @@ int acc_example_detector_distance(int argc, char *argv[])
 
 	if (deactivated && success)
 	{
-		APP_LOG(TS_OFF, VLEVEL_H, "Application finished OK\n");
+		APP_LOG(TS_OFF, VLEVEL_M, "Application finished OK\n");
 		return EXIT_SUCCESS;
 	}
 
@@ -142,11 +149,15 @@ int acc_example_detector_distance(int argc, char *argv[])
 
 static void update_configuration(acc_detector_distance_configuration_t distance_configuration)
 {
-	acc_detector_distance_configuration_requested_start_set(distance_configuration, distance_cfg.start_m); //EXAMPLE_START_M);
-	acc_detector_distance_configuration_requested_length_set(distance_configuration, distance_cfg.length_m); //EXAMPLE_LENGTH_M);
-	acc_detector_distance_configuration_service_profile_set(distance_configuration, distance_cfg.acc_profile); //EXAMPLE_PROFILE);
-	acc_detector_distance_configuration_hw_accelerated_average_samples_set(distance_configuration, distance_cfg.hwaas);//EXAMPLE_HWAAS);
+	acc_detector_distance_configuration_requested_start_set(distance_configuration, EXAMPLE_START_M);// distance_cfg.start_m); //EXAMPLE_START_M);
+	acc_detector_distance_configuration_requested_length_set(distance_configuration, 3.0); //distance_cfg.length_m); //EXAMPLE_LENGTH_M);
+	acc_detector_distance_configuration_service_profile_set(distance_configuration, 2); //distance_cfg.acc_profile); //EXAMPLE_PROFILE);
+	acc_detector_distance_configuration_hw_accelerated_average_samples_set(distance_configuration, EXAMPLE_HWAAS); //distance_cfg.hwaas);//EXAMPLE_HWAAS);
+	//acc_detector_distance_configuration_record_background_sweeps_set(distance_configuration, 16);
+	//acc_detector_distance_configuration_downsampling_factor_set(distance_configuration, 1);
+	//acc_detector_distance_configuration_threshold_sensitivity_set(distance_configuration, 0.2);
 
+#if 1
 	acc_detector_distance_configuration_threshold_sensitivity_set(distance_configuration, distance_cfg.threshold);
 	acc_detector_distance_configuration_sweep_averaging_set(distance_configuration,distance_cfg.sweep_average);
 	acc_detector_distance_configuration_receiver_gain_set(distance_configuration,distance_cfg.gain);
@@ -154,17 +165,42 @@ static void update_configuration(acc_detector_distance_configuration_t distance_
 
 	acc_detector_distance_configuration_threshold_type_set(distance_configuration, ACC_DETECTOR_DISTANCE_THRESHOLD_TYPE_CFAR);
 	acc_detector_distance_configuration_record_background_sweeps_set(distance_configuration, 16);
+#endif
+}
 
+
+
+static void print_configuration(acc_detector_distance_configuration_t distance_configuration)
+{
+	float sts_start = acc_detector_distance_configuration_requested_start_get(distance_configuration);
+	float sts_length = acc_detector_distance_configuration_requested_length_get(distance_configuration);
+	float sts_profile = acc_detector_distance_configuration_service_profile_get(distance_configuration);
+	float sts_hwaas = acc_detector_distance_configuration_hw_accelerated_average_samples_get(distance_configuration);
+	float sts_gain = acc_detector_distance_configuration_receiver_gain_get(distance_configuration);
+	float sts_threshold = acc_detector_distance_configuration_threshold_sensitivity_get(distance_configuration);
+
+	APP_LOG(TS_OFF, VLEVEL_M, "\r\nDistance CFG: start:%4d length:%4d profile:%2d HWAAS:%2d gain:%3d threshold:%6d \r\n",
+			(int)(sts_start*1000.0f), (int)(sts_length*1000.0f), (int)(sts_profile), (int)(sts_hwaas), (int)(sts_gain*100.0f), (int)(sts_threshold*1000.0f));
+
+#if 0
+	acc_detector_distance_configuration_threshold_sensitivity_set(distance_configuration, distance_cfg.threshold);
+	acc_detector_distance_configuration_sweep_averaging_set(distance_configuration,distance_cfg.sweep_average);
+	acc_detector_distance_configuration_receiver_gain_set(distance_configuration,distance_cfg.gain);
+	acc_detector_distance_configuration_downsampling_factor_set(distance_configuration, distance_cfg.downsampling);
+
+	acc_detector_distance_configuration_threshold_type_set(distance_configuration, ACC_DETECTOR_DISTANCE_THRESHOLD_TYPE_CFAR);
+	acc_detector_distance_configuration_record_background_sweeps_set(distance_configuration, 16);
+#endif
 }
 
 
 static void print_distances(acc_detector_distance_result_t *result, uint16_t reflection_count)
 {
-	APP_LOG(TS_OFF, VLEVEL_H, "Found %u peaks:\n", (unsigned int)reflection_count);
+	APP_LOG(TS_OFF, VLEVEL_M, "Found %u peaks:\n", (unsigned int)reflection_count);
 
 	for (uint16_t i = 0; i < reflection_count; i++)
 	{
-		APP_LOG(TS_OFF, VLEVEL_H, "Amplitude %u at %u mm\n", (unsigned int)result[i].amplitude,
+		APP_LOG(TS_OFF, VLEVEL_M, "Amplitude %u at %u mm\n", (unsigned int)result[i].amplitude,
 		       (unsigned int)(result[i].distance_m * 1000));
 	}
 }
diff --git a/Core/Src/yunhorn_sts_distance_rss.c b/Core/Src/yunhorn_sts_distance_rss.c
index a0e4fe5..e4488d3 100644
--- a/Core/Src/yunhorn_sts_distance_rss.c
+++ b/Core/Src/yunhorn_sts_distance_rss.c
@@ -55,48 +55,52 @@
 //volatile distance_measure_cfg_t distance_cfg={1.5, 2.0, 1, 63, 2, 10, 0.5, 1.3, 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={1.6, 3.2, 2, 63, 1, 10, 0.5, 1.3, 0.5};
+//volatile distance_measure_cfg_t distance_cfg={1.2, 3.2, 2, 63, 1, 10, 0.5, 1.3, 0.5};
+//extern volatile distance_measure_cfg_t distance_cfg;
 // 2024-08-15 volatile distance_measure_cfg_t distance_cfg={0.8, 3.5, 2, 63, 2, 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={0.8, 3.5, 4, 63, 2, 10, 0.4, 1.2, 0.2};
+//volatile distance_measure_cfg_t distance_cfg={0.8, 3.5, 4, 63, 2, 10, 0.4, 1.2, 0.2};
 //volatile distance_measure_cfg_t distance_cfg={1.5, 3.3, 2, 63, 4, 10, 0.8182f, 0.4, 0.2};
 extern volatile uint16_t sts_distance_rss_distance, sts_sensor_install_height;
 
 static void sts_distance_rss_update_configuration(acc_detector_distance_configuration_t distance_configuration);
-
-
+static void print_configuration(acc_detector_distance_configuration_t distance_configuration);
 static void print_distances(acc_detector_distance_result_t *result, uint16_t reflection_count);
 
 
-int sts_distance_rss_detector_distance(void);
+int sts_distance_rss_detector_distance(uint16_t *rss_distance);
 
-int sts_distance_rss_detector_distance(void)
+int sts_distance_rss_detector_distance(uint16_t *rss_distance)
 {
 	const acc_hal_t *hal = acc_hal_integration_get_implementation();
 
 	if (!acc_rss_activate(hal))
 	{
-		APP_LOG(TS_OFF, VLEVEL_L, "Failed to activate RSS\n");
+		APP_LOG(TS_OFF, VLEVEL_M, "Failed to activate RSS\n");
 		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();
 
 	if (distance_configuration == NULL)
 	{
-		APP_LOG(TS_OFF, VLEVEL_L, "acc_detector_distance_configuration_create() failed\n");
+		APP_LOG(TS_OFF, VLEVEL_M, "acc_detector_distance_configuration_create() failed\n");
 		acc_rss_deactivate();
 		return EXIT_FAILURE;
 	}
 
+	print_configuration(distance_configuration);
 	sts_distance_rss_update_configuration(distance_configuration);
 
 	acc_detector_distance_handle_t distance_handle = acc_detector_distance_create(distance_configuration);
+	print_configuration(distance_configuration);
 
 	if (distance_handle == NULL)
 	{
-		APP_LOG(TS_OFF, VLEVEL_L, "acc_detector_distance_create() failed\n");
+		APP_LOG(TS_OFF, VLEVEL_M, "acc_detector_distance_create() failed\n");
 		acc_detector_distance_configuration_destroy(&distance_configuration);
 		acc_rss_deactivate();
 		return EXIT_FAILURE;
@@ -106,14 +110,14 @@ int sts_distance_rss_detector_distance(void)
 
 	if (!acc_detector_distance_activate(distance_handle))
 	{
-		APP_LOG(TS_OFF, VLEVEL_L, "acc_detector_distance_activate() failed\n");
+		APP_LOG(TS_OFF, VLEVEL_M, "acc_detector_distance_activate() failed\n");
 		acc_detector_distance_destroy(&distance_handle);
 		acc_rss_deactivate();
 		return EXIT_FAILURE;
 	}
 
 	bool                                success         = true;
-	const int                           iterations      = 1; //5;
+	const int                           iterations      = 3; //5;
 	uint16_t                            number_of_peaks = 1;   // FSB  first significant Bin
 	acc_detector_distance_result_t      result[number_of_peaks];
 	acc_detector_distance_result_info_t result_info;
@@ -125,17 +129,23 @@ int sts_distance_rss_detector_distance(void)
 
 		if (!success)
 		{
-			APP_LOG(TS_OFF, VLEVEL_L, "acc_detector_distance_get_next() failed\n");
+			APP_LOG(TS_OFF, VLEVEL_M, "acc_detector_distance_get_next() failed\n");
 			break;
 		}
 		for(uint8_t j=0; j< result_info.number_of_peaks; j++)
-		tmp_distance = tmp_distance + (result[j].distance_m); //KalmanFilter(result[j].distance_m);
+		{
+			tmp_distance = tmp_distance + (result[j].distance_m); //KalmanFilter(result[j].distance_m);
+		}
+
 		print_distances(result, result_info.number_of_peaks);
 	}
 
-	sts_distance_rss_distance = (uint16_t)(1000*tmp_distance)/(number_of_peaks*iterations);
+
+
+	sts_distance_rss_distance = (uint16_t)(tmp_distance*1000.0f)/(number_of_peaks*iterations);
 	// ensure it's a valid installation height
 	//sts_sensor_install_height = (uint16_t)MAX(sts_distance_rss_distance,2000);
+	*rss_distance = (uint16_t)sts_distance_rss_distance;
 	sts_sensor_install_height = (uint16_t)sts_distance_rss_distance;
 	APP_LOG(TS_OFF, VLEVEL_M, "\r\nAverage Distance =%u mm --- Assume Sensor Install Height = %u mm\r\n", (uint16_t)sts_distance_rss_distance, (uint16_t)sts_sensor_install_height);
 
@@ -147,13 +157,13 @@ int sts_distance_rss_detector_distance(void)
 
 	if (deactivated && success)
 	{
-		APP_LOG(TS_OFF, VLEVEL_H, "Application finished OK\n");
+		APP_LOG(TS_OFF, VLEVEL_M, "Application finished OK\n");
 		return EXIT_SUCCESS;
 	}
 
 	return EXIT_FAILURE;
 }
-
+#if 0
 static void sts_distance_rss_update_configuration(acc_detector_distance_configuration_t distance_configuration)
 {
 	acc_detector_distance_configuration_mur_set(distance_configuration, DEFAULT_FAR_RANGE_MUR);    // NEW ADD
@@ -161,7 +171,7 @@ static void sts_distance_rss_update_configuration(acc_detector_distance_configur
 	acc_detector_distance_configuration_requested_length_set(distance_configuration, distance_cfg.length_m);
 	acc_detector_distance_configuration_receiver_gain_set(distance_configuration,distance_cfg.gain);
 	acc_detector_distance_configuration_maximize_signal_attenuation_set(distance_configuration, DEFAULT_FAR_MAXIMIZE_SIGNAL_ATTENUATION); // NEW ADD
-	acc_detector_distance_configuration_service_profile_set(distance_configuration, distance_cfg.acc_profile);
+	acc_detector_distance_configuration_service_profile_set(distance_configuration, DEFAULT_FAR_RANGE_SERVICE_PROFILE); //distance_cfg.acc_profile);
 	acc_detector_distance_configuration_downsampling_factor_set(distance_configuration, distance_cfg.downsampling);
 	acc_detector_distance_configuration_sweep_averaging_set(distance_configuration,distance_cfg.sweep_average);
 	acc_detector_distance_configuration_threshold_type_set(distance_configuration, ACC_DETECTOR_DISTANCE_THRESHOLD_TYPE_CFAR);
@@ -172,9 +182,9 @@ static void sts_distance_rss_update_configuration(acc_detector_distance_configur
 	acc_detector_distance_configuration_cfar_threshold_window_set(distance_configuration,DEFAULT_FAR_RANGE_CFAR_THRESHOLD_WINDOW);
 	acc_detector_distance_configuration_record_background_sweeps_set(distance_configuration, 16);
 }
-
+#endif
   //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);
@@ -182,16 +192,16 @@ static void sts_distance_rss_update_configuration(acc_detector_distance_configur
 	acc_detector_distance_configuration_service_profile_set(distance_configuration, distance_cfg.acc_profile);
 	acc_detector_distance_configuration_hw_accelerated_average_samples_set(distance_configuration, distance_cfg.hwaas);
 
-	acc_detector_distance_configuration_threshold_sensitivity_set(distance_configuration, distance_cfg.threshold);
+	acc_detector_distance_configuration_downsampling_factor_set(distance_configuration, distance_cfg.downsampling);
 	acc_detector_distance_configuration_sweep_averaging_set(distance_configuration,distance_cfg.sweep_average);
 	acc_detector_distance_configuration_receiver_gain_set(distance_configuration,distance_cfg.gain);
-	acc_detector_distance_configuration_downsampling_factor_set(distance_configuration, distance_cfg.downsampling);
+	acc_detector_distance_configuration_threshold_sensitivity_set(distance_configuration, distance_cfg.threshold);
 
 	acc_detector_distance_configuration_threshold_type_set(distance_configuration, ACC_DETECTOR_DISTANCE_THRESHOLD_TYPE_CFAR);
 	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)
 {
@@ -203,3 +213,18 @@ static void print_distances(acc_detector_distance_result_t *result, uint16_t ref
 				(unsigned int)(result[i].distance_m * 1000));
 	}
 }
+
+
+static void print_configuration(acc_detector_distance_configuration_t distance_configuration)
+{
+	float sts_start = acc_detector_distance_configuration_requested_start_get(distance_configuration);
+	float sts_length = acc_detector_distance_configuration_requested_length_get(distance_configuration);
+	float sts_profile = acc_detector_distance_configuration_service_profile_get(distance_configuration);
+	float sts_hwaas = acc_detector_distance_configuration_hw_accelerated_average_samples_get(distance_configuration);
+	float sts_gain = acc_detector_distance_configuration_receiver_gain_get(distance_configuration);
+	float sts_threshold = acc_detector_distance_configuration_threshold_sensitivity_get(distance_configuration);
+
+	APP_LOG(TS_OFF, VLEVEL_M, "\r\nDistance CFG: start:%4d length:%4d profile:%2d HWAAS:%2d gain:%3d threshold:%6d \r\n",
+			(int)(sts_start*1000.0f), (int)(sts_length*1000.0f), (int)(sts_profile), (int)(sts_hwaas), (int)(sts_gain*100.0f), (int)(sts_threshold*1000.0f));
+}
+
diff --git a/Core/Src/yunhorn_sts_presence_rss.c b/Core/Src/yunhorn_sts_presence_rss.c
index e1a838c..34e0446 100644
--- a/Core/Src/yunhorn_sts_presence_rss.c
+++ b/Core/Src/yunhorn_sts_presence_rss.c
@@ -153,7 +153,8 @@ volatile uint8_t sts_presence_singularity=0;
 extern uint8_t sts_lamp_bar_color;
 acc_detector_presence_handle_t rss_handle=NULL;
 acc_detector_presence_result_t rss_result;
-volatile float sts_rss_threshold=1.6f;
+volatile float sts_rss_threshold=1.6f, sts_run_start, sts_run_length, sts_run_threshold, sts_run_gain, sts_run_profile, sts_run_f_inter_fast_cutoff,sts_run_f_inter_slow_cutoff;
+
 /* USER CODE END Includes */
 
 /* External variables ---------------------------------------------------------*/
@@ -201,12 +202,12 @@ volatile float sts_rss_threshold=1.6f;
 
 
 uint16_t start_t = 500;
-uint16_t end_t = 2000;
+uint16_t end_t = 3000;
 uint16_t update_t = 200;
-uint8_t gain_t = 50;
+uint8_t gain_t = 80;
 uint16_t threshold = 1500;
 uint16_t frame_fast_t = 200;
-uint16_t frame_slow_t = 20;
+uint16_t frame_slow_t = 17;
 uint8_t profile = 4;
 uint16_t Sweeps_per_frame = 16;
 uint8_t downsampling = 1;
@@ -251,7 +252,7 @@ void update_configuration_with_type(acc_detector_presence_configuration_t presen
 
 		break;
 		case STS_RSS_CONFIG_FULL:
-			//filter = acc_detector_presence_configuration_filter_parameters_get(presence_configuration);
+			filter = acc_detector_presence_configuration_filter_parameters_get(presence_configuration);
 			filter.inter_frame_deviation_time_const		= 	sts_presence_rss_config.default_inter_frame_deviation_time_const;
 			filter.inter_frame_fast_cutoff				= 	sts_presence_rss_config.default_inter_frame_fast_cutoff;
 			filter.inter_frame_slow_cutoff				=	sts_presence_rss_config.default_inter_frame_slow_cutoff;
@@ -260,8 +261,14 @@ void update_configuration_with_type(acc_detector_presence_configuration_t presen
 			filter.output_time_const 					= 	sts_presence_rss_config.default_output_time_const;		//0.0f;
 			acc_detector_presence_configuration_filter_parameters_set(presence_configuration, &filter);
 		break;
+		case STS_RSS_CONFIG_BGN_SCAN:
+			acc_detector_presence_configuration_start_set(presence_configuration, 1.5f);
+			acc_detector_presence_configuration_length_set(presence_configuration, 3.5f);
+			acc_detector_presence_configuration_detection_threshold_set(presence_configuration, 1.0f);
+		break;
 		case STS_RSS_CONFIG_FALL_DETECTION:
-			//filter = acc_detector_presence_configuration_filter_parameters_get(presence_configuration);
+			//acc_detector_presence_configuration_update_rate_set(presence_configuration, 0.1f);
+			filter = acc_detector_presence_configuration_filter_parameters_get(presence_configuration);
 		//  if intra-frame-weight set to 1.0, then the following inter-frame parameters have no effect
 			filter.inter_frame_deviation_time_const		= 	DEFAULT_INTER_FRAME_DEVIATION_TIME_CONST;
 			filter.inter_frame_fast_cutoff				= 	10.0f; 							//DEFAULT_INTER_FRAME_FAST_CUTOFF;
@@ -284,7 +291,7 @@ void update_configuration_with_type(acc_detector_presence_configuration_t presen
 }
 void update_configuration(acc_detector_presence_configuration_t presence_configuration)
 {
-    float start_m_t = 0.0f;
+    //float start_m_t = 0.0f;
     start_m = (float)start_t / 1000;
     length_m = (float)(end_t - start_t) / 1000 + 0.0f;
     threshold_m = (float)threshold / 1000;
@@ -398,6 +405,7 @@ static void set_default_configuration(acc_detector_presence_configuration_t pres
  *
  * @param[in] fall_rise_configuration The fall rise configuration to set default values in
  */
+#if 0
 static void set_default_fall_rise_configuration(acc_detector_presence_configuration_t presence_configuration)
 {
 	acc_detector_presence_configuration_sensor_set(presence_configuration, DEFAULT_SENSOR_ID);
@@ -436,8 +444,9 @@ static void set_default_fall_rise_configuration(acc_detector_presence_configurat
 	acc_detector_presence_configuration_nbr_removed_pc_set(presence_configuration, DEFAULT_NBR_REMOVED_PC);
 	acc_detector_presence_configuration_power_save_mode_set(presence_configuration, ACC_POWER_SAVE_MODE_ACTIVE);
 }
+#endif
 
-
+#if 0
 static void sts_rss_set_current_configuration_full(acc_detector_presence_configuration_t presence_configuration)
 {
 	acc_detector_presence_configuration_sensor_set(presence_configuration, DEFAULT_SENSOR_ID);
@@ -472,7 +481,7 @@ static void sts_rss_set_current_configuration_full(acc_detector_presence_configu
 	acc_detector_presence_configuration_hw_accelerated_average_samples_set(presence_configuration, sts_presence_rss_config.default_hwaas);
 
 }
-
+#endif
 static void sts_rss_set_configuration_background_evalution(acc_detector_presence_configuration_t presence_configuration)
 {
 	APP_LOG(TS_OFF, VLEVEL_H, "\r\nsts_rss_cfg-start: %4d ,length: %4d ,threshold: %4d ,gain: %2d ,rate: %2d ,profile: %1d \r\n",
@@ -525,21 +534,21 @@ static void sts_rss_set_current_configuration_simple(acc_detector_presence_confi
 
 static void print_current_configuration(acc_detector_presence_configuration_t presence_configuration)
 {
-	static uint32_t cnt_0=0;
-	if (cnt_0++%200 !=0) return;
-	float sts_run_start		= acc_detector_presence_configuration_start_get(presence_configuration);
-	float sts_run_length	= acc_detector_presence_configuration_length_get(presence_configuration);
-	float sts_run_threshold = acc_detector_presence_configuration_detection_threshold_get(presence_configuration);
-	float sts_run_gain		= acc_detector_presence_configuration_receiver_gain_get(presence_configuration);
+	//static uint32_t cnt_0=0;
+	//if (cnt_0++%200 !=0) return;
+	sts_run_start		= acc_detector_presence_configuration_start_get(presence_configuration);
+	sts_run_length	= acc_detector_presence_configuration_length_get(presence_configuration);
+	sts_run_threshold = acc_detector_presence_configuration_detection_threshold_get(presence_configuration);
+	sts_run_gain		= acc_detector_presence_configuration_receiver_gain_get(presence_configuration);
 	float sts_run_update_rate	= acc_detector_presence_configuration_update_rate_get(presence_configuration);
-	float sts_run_profile		= acc_detector_presence_configuration_service_profile_get(presence_configuration);
+	sts_run_profile		= acc_detector_presence_configuration_service_profile_get(presence_configuration);
 	float Sweeps_per_frame 	= acc_detector_presence_configuration_sweeps_per_frame_get(presence_configuration);
 
 	sts_rss_threshold		= sts_run_threshold;
 	acc_detector_presence_configuration_filter_parameters_t sts_run_filter = acc_detector_presence_configuration_filter_parameters_get(presence_configuration);
 
-	float sts_run_f_inter_fast_cutoff 				= sts_run_filter.inter_frame_fast_cutoff;
-	float sts_run_f_inter_slow_cutoff 				= sts_run_filter.inter_frame_slow_cutoff;
+	sts_run_f_inter_fast_cutoff 				= sts_run_filter.inter_frame_fast_cutoff;
+	sts_run_f_inter_slow_cutoff 				= sts_run_filter.inter_frame_slow_cutoff;
 #if 0
 	float sts_run_f_inter_frame_dev_time_const 		= sts_run_filter.inter_frame_deviation_time_const;
 
@@ -547,7 +556,7 @@ static void print_current_configuration(acc_detector_presence_configuration_t pr
 	float sts_run_f_intra_frame_weight				= sts_run_filter.intra_frame_weight;
 	float sts_run_f_output_time_const				= sts_run_filter.output_time_const;
 #endif
-	APP_LOG(TS_OFF, VLEVEL_M, "\r\nWork_mode:%2d Start: %4d (mm) Length: %4d (mm) Threshold: %4d (*) Gain= %2d (%) UpdateRate=%4d Profile= %d  \r\n",
+	APP_LOG(TS_OFF, VLEVEL_M, "\r\nWork_mode:%2d Start: %4d (mm) Length: %4d (mm) Threshold: %d (*) Gain= %2d (%) UpdateRate=%4d Profile= %d  \r\n",
 			sts_work_mode, (int)(1000.0*sts_run_start), (int)(1000.0*sts_run_length), (int)(1000.0*sts_run_threshold),
 			(int)(100.0*sts_run_gain),(int)sts_run_update_rate, (int)sts_run_profile);
 	APP_LOG(TS_OFF, VLEVEL_M, "\r\n(1)FastCut:%4u (2)SlowCut:%4u (3)Sweeps_per_frame:%4u \r\n",
@@ -571,13 +580,13 @@ static void sts_print_result(acc_detector_presence_result_t result)
 {
 		uint16_t signal=0;
 		uint16_t dist=0;
-		uint8_t i=0;
+		//uint8_t i=0;
 		uint16_t threshold = sts_rss_threshold*1000.0f;
 
 		signal=(int)(result.presence_score * 1000.0f);
 		dist  =(int)(result.presence_distance * 1000.0f);
 
-		uint8_t flag=0;
+		//uint8_t flag=0;
 			if (signal>threshold)
 			{
 				if(dist<500)
@@ -642,14 +651,16 @@ static void sts_print_result(acc_detector_presence_result_t result)
 				//Out1_ON
 				//Out2_OFF
 				sts_rss_result=1;
-				APP_LOG(TS_OFF, VLEVEL_M,"Motion   (%5d), Distance: %4dmm   Threshold:%6d Yes:%d No:%d \r\n", signal,dist,threshold, yes_count, no_count);
+				APP_LOG(TS_OFF, VLEVEL_M,"Motion   (%5d), Distance: %4dmm   [start: %4d length: %4d gain: %3d Threshold:%6d Yes:%d No:%d \r\n",
+						signal,dist,(int)(sts_run_start*1000.0f), (int)(sts_run_length*1000.0f), (int)(sts_run_gain*100.0f), (int)(sts_run_threshold*1000.0f), yes_count, no_count);
 			}
 			else if(no_count>(TIME_C-1))
 			{
 				//Out1_OFF
 				//Out2_ON
 				sts_rss_result=0;
-				APP_LOG(TS_OFF, VLEVEL_M,"NO motion(%5d), Distance: %4dmm   Threshold:%6d Yes:%d No:%d \r\n", signal,dist,threshold, yes_count, no_count);
+				APP_LOG(TS_OFF, VLEVEL_M,"No Motion(%5d), Distance: %4dmm   [start: %4d length: %4d gain: %3d Threshold:%6d Yes:%d No:%d \r\n",
+						signal,dist,(int)(sts_run_start*1000.0f), (int)(sts_run_length*1000.0f), (int)(sts_run_gain*100.0f), (int)(sts_run_threshold*1000.0f), yes_count, no_count);
 			}
 
 }
@@ -682,10 +693,16 @@ int sts_presence_rss_background_evaluation_process(uint16_t *evaluated_distance,
 	sts_rss_config_updated_flag = STS_RSS_CONFIG_BGN_SCAN;
 
 	if (rss_handle == NULL) {
-			sts_presence_rss_detection_init();
+			int ret=sts_presence_rss_detection_init();
+			if (ret==EXIT_FAILURE) return EXIT_FAILURE;
+	} else {
+		sts_presence_rss_detection_deinit();
+		int ret2=sts_presence_rss_detection_init();
+		if (ret2==EXIT_FAILURE) return EXIT_FAILURE;
+
 	}
 
-	const int                      iterations = 1000;
+	const int                      iterations = 100;
 	//acc_detector_presence_result_t result;
 	uint16_t	 motioncount = 0;
 	float average_distance =0.0f;
@@ -751,12 +768,10 @@ int sts_presence_rss_detection_init(void)
 
 	//sts_rss_set_current_configuration_simple(presence_configuration);
 	//update_configuration(presence_configuration);
-	APP_LOG(TS_OFF, VLEVEL_M, "\r\n STS CFG Configuration \r\n");
-	APP_LOG(TS_OFF, VLEVEL_M, "\r\nWork_mode:%2d Start: %4d (mm) Length: %4d (mm) Threshold: %4d (*) Gain= %2d (%) UpdateRate=%4d Profile= %d  \r\n",
-				sts_work_mode, (int)(1000.0*sts_presence_rss_config.default_start_m), (int)(1000.0*sts_presence_rss_config.default_length_m), (int)(1000.0*sts_presence_rss_config.default_threshold),
+	APP_LOG(TS_OFF, VLEVEL_M, "\r\nBefore Update: Work_mode:%2d CFG: %2d Start: %4d (mm) Length: %4d (mm) Threshold: %4d (*) Gain= %2d (%) UpdateRate=%4d Profile= %d  \r\n",
+				sts_work_mode, sts_rss_config_updated_flag, (int)(1000.0*sts_presence_rss_config.default_start_m), (int)(1000.0*sts_presence_rss_config.default_length_m), (int)(1000.0*sts_presence_rss_config.default_threshold),
 				(int)(100.0*sts_presence_rss_config.default_receiver_gain),(int)sts_presence_rss_config.default_update_rate_presence, (int)sts_presence_rss_config.default_profile);
 
-	APP_LOG(TS_OFF, VLEVEL_M, "\r\n STS CFG update flag =%d \r\n", sts_rss_config_updated_flag);
 	update_configuration_with_type(presence_configuration, sts_rss_config_updated_flag);
 	//set_default_configuration(presence_configuration);
 	print_current_configuration(presence_configuration);
@@ -796,10 +811,11 @@ int sts_presence_rss_detection_process(void)
 	if (!success)
 	{
 		APP_LOG(TS_OFF, VLEVEL_M,"acc_detector_presence_get_next() failed\n");
-
+		return EXIT_FAILURE;
 	}
 
 	sts_print_result(rss_result);
+	return EXIT_SUCCESS;
 }
 
 int sts_presence_rss_detection_deinit(void)
@@ -810,7 +826,7 @@ int sts_presence_rss_detection_deinit(void)
 
 	if (deactivated)
 	{
-		APP_LOG(TS_OFF, VLEVEL_M,"Application finished OK\n");
+		APP_LOG(TS_OFF, VLEVEL_M,"\r\n rss presence detector De-inited \r\n");
 		return EXIT_SUCCESS;
 	} else return EXIT_FAILURE;
 }
@@ -860,6 +876,8 @@ int sts_presence_rss_fall_rise_detection(void)
 		}
 
 		APP_LOG(TS_OFF, VLEVEL_H, "\r\n Update flag=%02x, workmode=%2d \r\n", sts_rss_config_updated_flag, sts_work_mode);
+		update_configuration_with_type(presence_configuration, sts_rss_config_updated_flag);
+#if 0
 		switch (sts_rss_config_updated_flag)
 		{
 	#if 0
@@ -887,7 +905,7 @@ int sts_presence_rss_fall_rise_detection(void)
 		default:
 			break;
 		}
-
+#endif
 		 // sts_rss_config_updated_flag = STS_RSS_CONFIG_NON; //update finished, set to 0
 	}
 
@@ -1246,10 +1264,12 @@ void STS_YunhornCheckStandardDeviation(void)
 	uint32_t sum_presence_distance = 0, sum_presence_score=0;  //presence score act as magnetic or amplitude of motion
 	uint32_t average_presence_distance = 0, average_presence_score=0;
 	uint32_t variance_presence_distance = 0, variance_presence_score=0;
+	//uint32_t variance_presence_distance = 0;
 	uint32_t standard_variance_presence_distance = 0, standard_variance_presence_score=0;
 	// ROC -- rate of change
 	uint32_t roc_distance[DEFAULT_MOTION_DATASET_LEN]={0}, sum_roc_distance=0, average_roc_distance=0, variance_roc_distance=0, standard_variance_roc_distance=0;
 	uint32_t roc_acc[DEFAULT_MOTION_DATASET_LEN]={0}, sum_roc_acc=0, average_roc_acc=0, variance_roc_acc=0, standard_variance_roc_acc=0;
+	//uint32_t roc_acc[DEFAULT_MOTION_DATASET_LEN]={0}, sum_roc_acc=0, average_roc_acc=0, standard_variance_roc_acc=0;
 	//act as speed of change at given time slot acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE);
 	uint8_t SAMPLE_DATASET_NUM = MIN(motion_count,DEFAULT_MOTION_DATASET_LEN );
 	APP_LOG(TS_OFF, VLEVEL_M, "\r\n Sample dataset for deviation process =%u \r\n",SAMPLE_DATASET_NUM);
diff --git a/Core/Src/yunhorn_sts_presence_rss_bring_up_test.c b/Core/Src/yunhorn_sts_presence_rss_bring_up_test.c
index d5f8567..957b4d5 100644
--- a/Core/Src/yunhorn_sts_presence_rss_bring_up_test.c
+++ b/Core/Src/yunhorn_sts_presence_rss_bring_up_test.c
@@ -43,17 +43,26 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result);
 int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
 {
 	uint8_t t=0;
-	uint8_t test_result[20]={0x0};
+	uint8_t test_result[10]={0x0};
 
-	// 	APP_LOG(TS_OFF, VLEVEL_L,"--   0  -- Acconeer software version %s\n", acc_version_get());
+	APP_LOG(TS_OFF, VLEVEL_H,"--   0  -- Acconeer software version %s\n", acc_version_get());
 
 	const acc_hal_t *hal = acc_hal_integration_get_implementation();
 
-	test_result[t++] = (uint8_t) acc_rss_activate(hal);		//(1)
+	if (!acc_rss_activate(hal))
+	{
+		APP_LOG(TS_OFF, VLEVEL_M, "Failed to activate RSS\n");
+		test_result[t++] = 0;
+		return EXIT_FAILURE;
+	} else {
+		test_result[t++] = 1;		//(1)
+	}
+
+	acc_rss_override_sensor_id_check_at_creation(true);
 
 	acc_rss_assembly_test_configuration_t configuration = acc_rss_assembly_test_configuration_create();
 
-	test_result[t++] = (uint8_t)((configuration != NULL)? 1:0);		//(2)
+	test_result[t++] = (uint8_t)((configuration != NULL)? 2:0);		//(2)
 
 	acc_rss_assembly_test_configuration_sensor_set(configuration, DEFAULT_SENSOR_ID);
 
@@ -69,7 +78,7 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
 		acc_rss_deactivate();
 		//return EXIT_FAILURE;
 	} else {
-		test_result[t++] = 1;
+		test_result[t++] = 3;
 	}
 
 	acc_rss_assembly_test_configuration_communication_read_test_disable(configuration);
@@ -83,13 +92,12 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
 		acc_rss_deactivate();
 		//return EXIT_FAILURE;
 	} else {
-		test_result[t++] = 1;
+		test_result[t++] = 4;
 	}
-
 	acc_rss_assembly_test_configuration_communication_write_read_test_disable(configuration);
 
 	// Enable and run: Interrupt Test
-	// APP_LOG(TS_OFF, VLEVEL_L,"-- Interrupt Test --- Start ********************\r\n");
+	 //APP_LOG(TS_OFF, VLEVEL_L,"-- Interrupt Test --- Start ********************\r\n");
 
 	acc_rss_assembly_test_configuration_communication_interrupt_test_enable(configuration);
 	if (!run_test(configuration))
@@ -100,14 +108,16 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
 		//return EXIT_FAILURE;
 	} else {
 
-		test_result[t++] = 1;
+		test_result[t++] = 5;
 	}
 
 	acc_rss_assembly_test_configuration_communication_interrupt_test_disable(configuration);
-	// APP_LOG(TS_OFF, VLEVEL_L,"-- Interrupt Test --- End ********************\r\n");
 
+
+	// APP_LOG(TS_OFF, VLEVEL_L,"-- Interrupt Test --- End ********************\r\n");
+#if 0
 	// Enable and run: Clock Test
-	// 		APP_LOG(TS_OFF, VLEVEL_L,"-- Clock Test --- Start ********************\r\n");
+	 		APP_LOG(TS_OFF, VLEVEL_L,"-- Clock Test --- Start ********************\r\n");
 		acc_rss_assembly_test_configuration_clock_test_enable(configuration);
 		if (!run_test(configuration))
 		{
@@ -125,7 +135,7 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
 
 
 	// Enable and run: Power cycle test
-	// APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- Start ********************\r\n");
+	 APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- Start ********************\r\n");
 		acc_rss_assembly_test_configuration_power_cycle_test_enable(configuration);
 		if (!run_test(configuration))
 		{
@@ -140,10 +150,10 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
 
 		acc_rss_assembly_test_configuration_power_cycle_test_disable(configuration);
 		// 	APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- end ********************\r\n");
-
+#endif
 
 	// Enable and run: Hibernate Test
-	// APP_LOG(TS_OFF, VLEVEL_L,"-- Hibernate Test --- Start ********************\r\n");
+	 //APP_LOG(TS_OFF, VLEVEL_L,"-- Hibernate Test --- Start ********************\r\n");
 	acc_rss_assembly_test_configuration_communication_hibernate_test_enable(configuration);
 	if (!run_test(configuration))
 	{
@@ -153,14 +163,14 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
 		//return EXIT_FAILURE;
 	} else {
 
-		test_result[t++] = 1;
+		test_result[t++] = 6;
 	}
 
 	acc_rss_assembly_test_configuration_communication_hibernate_test_disable(configuration);
 	// 	APP_LOG(TS_OFF, VLEVEL_L,"-- Hibernate Test --- End ********************\r\n");
 
 	// Enable and run: Supply Test
-	// APP_LOG(TS_OFF, VLEVEL_L,"-- Supply Test --- Start ********************\r\n");
+	 //APP_LOG(TS_OFF, VLEVEL_L,"-- Supply Test --- Start ********************\r\n");
 	acc_rss_assembly_test_configuration_supply_test_enable(configuration);
 	if (!run_test(configuration))
 	{
@@ -170,11 +180,11 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
 		//return EXIT_FAILURE;
 	} else {
 
-		test_result[t++] = 1;
+		test_result[t++] = 7;
 	}
 
 	acc_rss_assembly_test_configuration_supply_test_disable(configuration);
-	// 	APP_LOG(TS_OFF, VLEVEL_L,"-- Supply Test --- End ********************\r\n");
+	 	//APP_LOG(TS_OFF, VLEVEL_L,"-- Supply Test --- End ********************\r\n");
 
 	// Enable and run: Clock Test
 	// 	APP_LOG(TS_OFF, VLEVEL_L,"-- Clock Test --- Start ********************\r\n");
@@ -187,14 +197,14 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
 		//return EXIT_FAILURE;
 	} else {
 
-		test_result[t++] = 1;
+		test_result[t++] = 8;
 	}
 
 	acc_rss_assembly_test_configuration_clock_test_disable(configuration);
-	// 	APP_LOG(TS_OFF, VLEVEL_L,"-- Clock Test --- end ********************\r\n");
+	//APP_LOG(TS_OFF, VLEVEL_L,"-- Clock Test --- end ********************\r\n");
 
 	// Enable and run: Power cycle test
-	// 	APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- Start ********************\r\n");
+	//APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- Start ********************\r\n");
 	acc_rss_assembly_test_configuration_power_cycle_test_enable(configuration);
 	if (!run_test(configuration))
 	{
@@ -204,18 +214,22 @@ int sts_presence_rss_bring_up_test(uint8_t *rss_self_test_result)
 		//return EXIT_FAILURE;
 	} else {
 
-		test_result[t++] = 1;
+		test_result[t++] = 9;
 	}
 
 	acc_rss_assembly_test_configuration_power_cycle_test_disable(configuration);
-	// 	APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- end ********************\r\n");
+	 //	APP_LOG(TS_OFF, VLEVEL_L,"-- Power cycle test --- end ********************\r\n");
 
 
-	// 	APP_LOG(TS_OFF, VLEVEL_L,"--   10  -- Bring up test: All tests passed\n");
-	test_result[t++] = 1;			//(10)
+	 	//APP_LOG(TS_OFF, VLEVEL_L,"--   10  -- Bring up test: All tests passed\n");
+	test_result[t++] = 10;			//(10)
+	for (uint8_t j=0; j<10; j++) {
+		//APP_LOG(TS_OFF, VLEVEL_M, "|%02x ", test_result[j]);
+		*(rss_self_test_result+j) = (void*)test_result[j];
+		//APP_LOG(TS_OFF, VLEVEL_M, "=%02x ", rss_self_test_result[j]);
+	}
 
-    memcpy(rss_self_test_result, test_result, 12);
-    //     APP_LOG(TS_OFF, VLEVEL_L,"--Bring up test result #=%d \r\n", t);
+    //UTIL_MEM_cpy_8((void*)rss_self_test_result, (void*)test_result, 10);
 	acc_rss_assembly_test_configuration_destroy(&configuration);
 	acc_rss_deactivate();
 
@@ -231,7 +245,7 @@ static bool run_test(acc_rss_assembly_test_configuration_t configuration)
 
 	if (!acc_rss_assembly_test(configuration, test_results, &nr_of_test_results))
 	{
-		APP_LOG(TS_OFF, VLEVEL_L,"Bring up test: Failed to complete\n");
+		APP_LOG(TS_OFF, VLEVEL_M,"Bring up test: Failed to complete\n");
 		return false;
 	} else {
 		APP_LOG(TS_OFF, VLEVEL_H,"Bring up test: SUCCESS to complete\n");
@@ -241,7 +255,7 @@ static bool run_test(acc_rss_assembly_test_configuration_t configuration)
 	for (uint16_t i = 0; i < nr_of_test_results; i++)
 	{
 		const bool passed = test_results[i].test_passed;
-		APP_LOG(TS_OFF, VLEVEL_L,"Name: %s, result: %s\n", test_results[i].test_name, passed ? "Pass" : "Fail");
+		APP_LOG(TS_OFF, VLEVEL_H,"Name: %s, result: %s\n", test_results[i].test_name, passed ? "Pass" : "Fail");
 
 		if (!passed)
 		{
diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c
index 872939d..143d9aa 100644
--- a/Core/Src/yunhorn_sts_process.c
+++ b/Core/Src/yunhorn_sts_process.c
@@ -333,9 +333,17 @@ void STS_YunhornSTSEventP2_Process(void)
 		}
 #endif
 		//int res = sts_presence_rss_fall_rise_detection();
-		if (rss_handle == NULL) {
-			sts_presence_rss_detection_init();
+		if ((rss_handle == NULL)) {
+			sts_rss_config_updated_flag &= 0x7F;
+			int ret=sts_presence_rss_detection_init();
+			if (ret==EXIT_FAILURE) return;
+		} else if ((sts_rss_config_updated_flag&0x80) !=0 ) {
+			sts_rss_config_updated_flag &= 0x7F;
+			sts_presence_rss_detection_deinit();
+			int ret2=sts_presence_rss_detection_init();
+			if (ret2==EXIT_FAILURE) return;
 		}
+
 		int res = sts_presence_rss_detection_process();
 		if (res == 0)
 		{
@@ -771,8 +779,9 @@ void STS_PRESENCE_SENSOR_NVM_CFG(void)
 	sts_rss_cfg_slid_win_size										= (uint8_t)(sts_cfg_nvm.p[RSS_CFG_SLID_WIN])&0x0F;
 
 	APP_LOG(TS_ON, VLEVEL_H, "\r\n##### Reboot --- with NVM CFG'ED RSS flag =%02x \r\n", sts_rss_config_updated_flag);
-}
 
+}
+#if 0
 void STS_PRESENCE_SENSOR_NVM_CFG_SIMPLE(void)
 {
 	sts_presence_rss_config.default_start_m 		 				= (float)(sts_cfg_nvm.p[RSS_CFG_START_M]*0.1f);
@@ -798,7 +807,7 @@ void STS_PRESENCE_SENSOR_NVM_CFG_SIMPLE(void)
 	sts_rss_cfg_slid_win_threshold									= (uint8_t)(sts_cfg_nvm.p[RSS_CFG_SLID_WIN])>>4;
 	sts_rss_cfg_slid_win_size										= (uint8_t)(sts_cfg_nvm.p[RSS_CFG_SLID_WIN])&0x0F;
 }
-
+#endif
 void STS_PRESENCE_SENSOR_Init_Send_Data(void)
 {
 	//sts_o7_sensorData.lamp_bar_color			= STS_GREEN;
@@ -1060,9 +1069,13 @@ void STS_PRESENCE_SENSOR_RSS_Init(void)
 }
 #endif
 
-void STS_PRESENCE_SENSOR_Distance_Measure_Process(void)
+void STS_PRESENCE_SENSOR_Distance_Measure_Process(uint16_t *rss_distance)
 {
-	uint8_t exit_status = EXIT_SUCCESS, i=0;
+	int exit_status = EXIT_SUCCESS, i=0;
+	uint16_t tmp_distance=0;
+
+
+	sts_presence_rss_detection_deinit();
 
 	APP_LOG(TS_OFF, VLEVEL_M, "\r\n ****start_m=%u length_m=%u profile=%u hwaas=%u \r\n",
 					(unsigned int)(distance_cfg.start_m*1000),(unsigned int)(distance_cfg.length_m*1000),
@@ -1070,11 +1083,15 @@ void STS_PRESENCE_SENSOR_Distance_Measure_Process(void)
 	do
 	{
 		LED1_TOGGLE;
-		exit_status = sts_distance_rss_detector_distance();
-		HAL_Delay(10);
-		i++;
-	} while ((exit_status == EXIT_FAILURE) && (i < 1));
 
+		// exit_status = sts_distance_rss_detector_distance();
+		exit_status = sts_distance_rss_detector_distance(&tmp_distance);
+		APP_LOG(TS_OFF, VLEVEL_M, "\r\n round: %d  exit_status= %d Measured dist= %d \r\n", i, exit_status, tmp_distance);
+		//HAL_Delay(250);
+		i++;
+	} while ((exit_status == EXIT_FAILURE) && (i < 3) && (tmp_distance !=0));
+
+	*rss_distance = tmp_distance;
 	LED1_ON;
 
 }
@@ -1082,7 +1099,7 @@ void STS_PRESENCE_SENSOR_Distance_Measure_Process(void)
 void STS_PRESENCE_SENSOR_Background_Measure_Process(uint16_t *bg_distance, uint16_t *bg_motion_noise)
 {
 
-	uint8_t previous_sts_work_mode = sts_work_mode, previous_sts_lamp_bar_color = sts_lamp_bar_color;
+	uint8_t previous_sts_work_mode = sts_work_mode, previous_sts_lamp_bar_color = sts_lamp_bar_color, previous_sts_rss_config_updated_flag = sts_rss_config_updated_flag;
 	uint16_t distance_center=0, motion_noise=0;
 
 	sts_work_mode = STS_RSS_BACKGROUND_MODE;
@@ -1090,7 +1107,8 @@ void STS_PRESENCE_SENSOR_Background_Measure_Process(uint16_t *bg_distance, uint1
 
 	APP_LOG(TS_OFF, VLEVEL_M, "\r\n SCAN Background Noise ... \r\n");
 
-	sts_presence_rss_background_evaluation_process(&distance_center, &motion_noise);
+	int ret=sts_presence_rss_background_evaluation_process(&distance_center, &motion_noise);
+	if (ret== EXIT_FAILURE) return;
 
 	APP_LOG(TS_OFF, VLEVEL_H, "\r\n Background Distance center at %d mm,  and Motion Noise =%d \r\n", distance_center, motion_noise);
 
@@ -1099,48 +1117,56 @@ void STS_PRESENCE_SENSOR_Background_Measure_Process(uint16_t *bg_distance, uint1
 
 	sts_work_mode 		= previous_sts_work_mode;
 	sts_lamp_bar_color	= previous_sts_lamp_bar_color;
+	sts_rss_config_updated_flag = previous_sts_rss_config_updated_flag|0x80;
 }
 
 
-void STS_PRESENCE_SENSOR_Function_Test_Process(uint8_t *self_test_result, uint8_t count)
+void STS_PRESENCE_SENSOR_Function_Test_Process(uint8_t *self_test_result, uint8_t *count)
 {
 	uint8_t bring_up_result[18]={0};
 	uint8_t previous_lamp_bar_color=sts_lamp_bar_color;
 	uint16_t bg_range=0, bg_noise=0;
+	int test_res=0;
 	PME_ON;
 	HAL_Init();
 	MX_GPIO_Init();
 	HAL_Delay(150);		//wait for sensor ready
 
-	for (uint8_t i=0;i < count; i++) //while(1)
+	for (uint8_t i=0;i < 1; i++) //while(1)
 	{
 		STS_Lamp_Bar_Self_Test_Simple();
-
 		STS_Lamp_Bar_Refresh();
 		HAL_Delay(200);
 		sts_lamp_bar_color = STS_PINK;
-		sts_presence_rss_bring_up_test(bring_up_result);
+		sts_presence_rss_detection_deinit();
+		test_res = sts_presence_rss_bring_up_test(bring_up_result);
+		if (test_res != EXIT_SUCCESS) {
+			APP_LOG(TS_OFF, VLEVEL_M, "\r\n Bring up test failed \r\n");
+		} else {
+			APP_LOG(TS_OFF, VLEVEL_M, "\r\n Bring up test success \r\n");
+		}
 
 		HAL_Delay(200);
 		sts_lamp_bar_color = STS_CYAN;
-		STS_PRESENCE_SENSOR_Distance_Measure_Process();
+		uint16_t tmp_dist=0;
+		STS_PRESENCE_SENSOR_Distance_Measure_Process(&tmp_dist);
+		sts_sensor_install_height = tmp_dist;
 		bring_up_result[12]=sts_sensor_install_height>>8&0xff;
 		bring_up_result[13]=sts_sensor_install_height&0xff;
 
-		HAL_Delay(200);
-
+		HAL_Delay(50);
+		sts_lamp_bar_color = STS_BLUE;
 		STS_PRESENCE_SENSOR_Background_Measure_Process(&bg_range, &bg_noise);
 		bring_up_result[14]=bg_range>>8&0xff;
 		bring_up_result[15]=bg_range&0xff;
 		bring_up_result[16]=bg_noise>>8&0xff;
 		bring_up_result[17]=bg_noise&0xff;
 
-
 	}
-	HAL_Delay(200);
+	HAL_Delay(50);
 	sts_lamp_bar_color = previous_lamp_bar_color;
-
-	UTIL_MEM_cpy_8(self_test_result, bring_up_result, sizeof(bring_up_result));
+	*count = sizeof(bring_up_result);
+	UTIL_MEM_cpy_8((void*)self_test_result, (void*)bring_up_result, sizeof(bring_up_result));
 
 }
 
diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index d759f28..e14f538 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -2041,8 +2041,9 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
 					//STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
 
 					i=0;
-
+					UTIL_TIMER_Stop(&YunhornSTSRSSWakeUpTimer);
 					STS_SENSOR_Function_Test_Process();
+					UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer);
 #if 0
 					HAL_Delay(5000);
 					i=21;
@@ -2065,10 +2066,10 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
 					//outbuf[i++] = (uint8_t) 'Z';
 					//outbuf[i++] = (uint8_t) 'D';
 					//STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
+					uint16_t rss_distance=0;
+					STS_PRESENCE_SENSOR_Distance_Measure_Process(&rss_distance);
 
-					STS_SENSOR_Distance_Test_Process();
-
-					APP_LOG(TS_OFF, VLEVEL_H, "\r\nRSS Measured Distance=[%u] mm \r\n", (uint16_t)sts_distance_rss_distance);
+					APP_LOG(TS_OFF, VLEVEL_M, "\r\nRSS Measured Distance=[%u] mm \r\n", (uint16_t)sts_distance_rss_distance);
 
 					// Store valid installation height value
 					sts_cfg_nvm.mtmcode1 = (uint8_t)sts_mtmcode1;
@@ -2082,7 +2083,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
 
 
 					i=0;
-					//memset((void*)outbuf,0x0, sizeof(outbuf));
+					memset((void*)outbuf,0x0, sizeof(outbuf));
 					outbuf[i++] 	= (uint8_t)'D';
 					outbuf[i++] 	= (uint8_t)sts_mtmcode1;
 					outbuf[i++] 	= (uint8_t)sts_mtmcode2;
@@ -2612,21 +2613,22 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
 
 							case STS_REEDSWITCH_MODE:
 							sts_cfg_nvm.sts_ioc_mask = STS_IOC_MODE_2_MASK;
+							sts_rss_config_updated_flag = STS_RSS_CONFIG_NON;
 							break;
 
 							case STS_RSS_MODE:
 							sts_cfg_nvm.sts_ioc_mask = STS_IOC_MODE_3_MASK;
-							sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
+							sts_rss_config_updated_flag = STS_RSS_CONFIG_SIMPLE|0x80;
 							break;
 
 							case STS_DUAL_MODE:
 							sts_cfg_nvm.sts_ioc_mask = STS_IOC_MODE_4_MASK;
-							sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT;
+							sts_rss_config_updated_flag = STS_RSS_CONFIG_SIMPLE|0x80;
 							break;
 
 							case STS_UNI_MODE:
 							sts_cfg_nvm.sts_ioc_mask = STS_IOC_MODE_5_MASK;
-							sts_rss_config_updated_flag = STS_RSS_CONFIG_FALL_DETECTION;
+							sts_rss_config_updated_flag = STS_RSS_CONFIG_FALL_DETECTION|0x80;
 							sts_presence_fall_detection=TRUE;
 							break;
 
@@ -2692,7 +2694,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
 
 							if (invalid_flag == 0)
 							{
-								sts_cfg_nvm.p[RSS_CFG_UPDATE_FLAG]		= STS_RSS_CONFIG_FULL;
+								sts_cfg_nvm.p[RSS_CFG_UPDATE_FLAG]		= STS_RSS_CONFIG_FULL|0x80;
 
 								STS_PRESENCE_SENSOR_NVM_CFG();
 
@@ -2737,8 +2739,9 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size)
 								APP_LOG(TS_OFF, VLEVEL_M,"\r\nStart,Lenght,threshold,gain=%02x %02x %02x %02x \r\n",
 										sts_cfg_nvm.p[RSS_CFG_START_M],sts_cfg_nvm.p[RSS_CFG_LENGTH_M],sts_cfg_nvm.p[RSS_CFG_THRESHOLD],sts_cfg_nvm.p[RSS_CFG_RECEIVER_GAIN]);
 
-								sts_cfg_nvm.p[RSS_CFG_UPDATE_FLAG]		= STS_RSS_CONFIG_SIMPLE;
-								STS_PRESENCE_SENSOR_NVM_CFG_SIMPLE();
+								sts_cfg_nvm.p[RSS_CFG_UPDATE_FLAG]		= STS_RSS_CONFIG_SIMPLE|0x80;
+								//STS_PRESENCE_SENSOR_NVM_CFG_SIMPLE();
+								STS_PRESENCE_SENSOR_NVM_CFG();	// update 2025 05 06
 
 								i=0;						// Step 1: Prepare status update message
 								UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf));
@@ -2859,9 +2862,9 @@ void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, uint8
 		//UTIL_MEM_cpy_8(AppData.Buffer, appDataBuffer, appBufferSize);
 
 		AppData.Port = appDataPort;
-		AppData.BufferSize = (sts_service_mask >1 ?0:appBufferSize);
+		AppData.BufferSize = ((sts_service_mask >1)? 0 :appBufferSize);
 
-		APP_LOG(TS_OFF, VLEVEL_L, "###########Service Mask = %d  Buffer Size =%d \r\n", sts_service_mask, AppData.BufferSize);
+		APP_LOG(TS_OFF, VLEVEL_H, "###########Service Mask = %d  Buffer Size =%d \r\n", sts_service_mask, AppData.BufferSize);
 
 	    if ((JoinLedTimer.IsRunning) && (LmHandlerJoinStatus() == LORAMAC_HANDLER_SET))
 	    {
@@ -2874,25 +2877,26 @@ void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, uint8
 		status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false);
 		if (LORAMAC_HANDLER_SUCCESS == status)
 		{
-			APP_LOG(TS_ON, VLEVEL_H, "SEND REQUEST\r\n");
+			APP_LOG(TS_ON, VLEVEL_M, "SEND REQUEST\r\n");
 		}
 		else if (LORAMAC_HANDLER_DUTYCYCLE_RESTRICTED == status)
 		{
 			nextTxIn = LmHandlerGetDutyCycleWaitTime();
 			if (nextTxIn > 0)
 			{
-				APP_LOG(TS_ON, VLEVEL_H, "Next Tx in  : ~%d second(s)\r\n", (nextTxIn / 1000));
+				APP_LOG(TS_ON, VLEVEL_M, "Next Tx in  : ~%d second(s)\r\n", (nextTxIn / 1000));
 			}
 		}
 
 	}
-
+#if 0
 	if (EventType == TX_ON_TIMER)
 	{
 	    UTIL_TIMER_Stop(&TxTimer);
 	    UTIL_TIMER_SetPeriod(&TxTimer, MAX(nextTxIn, TxPeriodicity));
 	    UTIL_TIMER_Start(&TxTimer);
 	}
+#endif
 }
 
 void OnStoreSTSCFGContextRequest(void)
@@ -3132,7 +3136,7 @@ void OnRestoreSTSCFGContextProcess(void)
 void STS_SENSOR_Distance_Test_Process(void)
 {
 #if	defined(STS_O6)||defined(STS_O7)
-		STS_PRESENCE_SENSOR_Distance_Measure_Process();
+		//STS_PRESENCE_SENSOR_Distance_Measure_Process();
 #endif
 
 #if	defined(YUNHORN_STS_R0_ENABLED)||defined(YUNHORN_STS_R5_ENABLED)
@@ -3142,7 +3146,7 @@ void STS_SENSOR_Distance_Test_Process(void)
 
 void STS_SENSOR_Function_Test_Process(void)
 {
-	uint8_t tstbuf[128] ={0x0}; uint8_t i=0, count = 1;
+	uint8_t tstbuf[128] ={0x0}; uint8_t i=0, count = 0;
 	uint8_t mems_Dev_ID[2] = {0x0};
 
 	tstbuf[i++] = (uint8_t) 'S';
@@ -3164,10 +3168,10 @@ void STS_SENSOR_Function_Test_Process(void)
 #if	defined(STS_O7)||defined(STS_O6)
 		uint8_t self_test_result[18]={0x0};
 
-		STS_PRESENCE_SENSOR_Function_Test_Process(self_test_result, count);
+		STS_PRESENCE_SENSOR_Function_Test_Process(self_test_result, &count);
 
-		for (uint8_t j=0; j < 18; j++)
-			tstbuf[i++] = (uint8_t) (self_test_result[j])&0xff;
+		for (uint8_t j=0; j < count; j++)
+			tstbuf[i++] = (uint8_t) (self_test_result[j]&0xff);
 
 		//STS_PRESENCE_SENSOR_Distance_Measure_Process();
 #if 0
@@ -3199,7 +3203,7 @@ void STS_SENSOR_Function_Test_Process(void)
 	}
 
 	//memset((void*)outbuf,0x0, sizeof(outbuf));
-	UTIL_MEM_cpy_8((void*)outbuf, (void*)tstbuf, sizeof(tstbuf));
+	UTIL_MEM_cpy_8((void*)outbuf, (void*)tstbuf, i);
 	STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t*)outbuf);
 
 }
diff --git a/STM32CubeIDE/Release/STS_O7.bin b/STM32CubeIDE/Release/STS_O7.bin
index 26f7897..bc0c8ef 100644
Binary files a/STM32CubeIDE/Release/STS_O7.bin and b/STM32CubeIDE/Release/STS_O7.bin differ