diff --git a/Core/Inc/utilities_def.h b/Core/Inc/utilities_def.h
index 32a810d..16c631e 100644
--- a/Core/Inc/utilities_def.h
+++ b/Core/Inc/utilities_def.h
@@ -92,7 +92,7 @@ typedef enum
 #if	defined(STS_R1)||defined(STS_R1D)||defined(STS_R5)||defined(STS_R2)
   CFG_SEQ_Task_YunhornSTSEventP4,				/*	TOF RANGE			*/
 #endif
-#if	defined(STS_P2)||defined(STS_T6)
+#if	defined(STS_P2)||defined(STS_T6)||defined(L8)
   CFG_SEQ_Task_YunhornSTSEventP5,				/*	TOF IN-OUT			*/
 #endif
 #ifdef	STS_R4
diff --git a/Core/Src/main.c b/Core/Src/main.c
index 0d59c2d..e6b23b1 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -103,20 +103,22 @@ int main(void)
   MX_GPIO_Init();
 
   MX_I2C2_Init();
-  //MX_DMA_Init();
+  MX_DMA_Init();
 
   MX_LoRaWAN_Init();
   /* USER CODE BEGIN 2 */
   MX_USART2_UART_Init();
   /* USER CODE END 2 */
-  //MX_TOF_Init();
+
   /* Infinite loop */
   /* USER CODE BEGIN WHILE */
   while (1)
   {
     /* USER CODE END WHILE */
-	  MX_TOF_Process();
+
     MX_LoRaWAN_Process();
+    //MX_TOF_Process();
+	//  MX_TOF_Ranging_Process();
 
     /* USER CODE BEGIN 3 */
   }
diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index 2a6c8ef..52be86c 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -518,7 +518,7 @@ void LoRaWAN_Init(void)
 #endif
 
 
-#if	defined(STS_P2)||defined(STS_T6)
+#if	defined(STS_P2)||defined(STS_T6)||defined(L8)
 
   UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP5), UTIL_SEQ_RFU, STS_YunhornSTSEventP5_Process);
 
@@ -532,8 +532,8 @@ void LoRaWAN_Init(void)
   UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP4), UTIL_SEQ_RFU, STS_YunhornSTSEventP4_Process);
 #endif
 
-#if	defined(STS_P2)||defined(STS_T6)
-  UTIL_TIMER_Create(&YunhornSTSWakeUpScanTimer, STS_TOFScanPeriod_msec, UTIL_TIMER_PERIODIC, (void*)OnYunhornSTSWakeUpScanTimerEvent, NULL);
+#if	defined(STS_P2)||defined(STS_T6)||defined(L8)
+  UTIL_TIMER_Create(&YunhornSTSWakeUpScanTimer, STS_TOFScanPeriod_msec, UTIL_TIMER_ONESHOT, (void*)OnYunhornSTSWakeUpScanTimerEvent, NULL);
   UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer);
 #endif
 
@@ -841,6 +841,9 @@ static void SendTxData(void)
     AppData.Port = YUNHORN_STS_P2_LORA_APP_DATA_PORT; /* STS-P2 Data Port */
 #elif 	defined(STS_T6)
     AppData.Port = YUNHORN_STS_T6_LORA_APP_DATA_PORT; /* STS-T6 Data Port */
+#elif 	defined(L8)
+    AppData.Port = YUNHORN_STS_L8_LORA_APP_DATA_PORT; /* STS-L8 Data Port */
+
 #endif
 
 #ifdef CAYENNE_LPP
@@ -954,6 +957,14 @@ static void SendTxData(void)
      AppData.Buffer[i++] = (uint8_t)((sts_t6_sensor_data.tof_range_presence_state & 0xFF));
 
 #endif	//STS_T6
+
+#if	defined(L8)
+     AppData.Buffer[i++] = 1;
+     AppData.Buffer[i++] = 8; //testing
+     //(uint8_t)((sts_l8_sensor_data.tof_range_presence_state & 0xFF));
+
+#endif	//STS_T6
+
 /* STS-R4 SOAP LEVEL SENSOR */
 #ifdef	STS_R4
      AppData.Buffer[i++]	= 2;
@@ -1105,6 +1116,7 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams)
     APP_LOG(TS_OFF, VLEVEL_H, "###### U/L FRAME:JOIN | DR:%d | PWR:%d\r\n", joinParams->Datarate, joinParams->TxPower);
 
   }
+  UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer);
   /* USER CODE END OnJoinRequest_1 */
 }
 
@@ -1470,7 +1482,7 @@ void OnYunhornSTSHeartBeatPeriodicityChanged(uint32_t periodicity)
 /* USER CODE BEGIN PrFD_YunhornSTSWakeUpScanTimerEvents */
 static void OnYunhornSTSWakeUpScanTimerEvent(void *context)
 {
-#if	defined(STS_P2)||defined(STS_T6)
+#if	defined(STS_P2)||defined(STS_T6)||defined(L8)
   UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP5), CFG_SEQ_Prio_0);
 
   UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer);
diff --git a/STS/Core/Src/yunhorn_sts_process.c b/STS/Core/Src/yunhorn_sts_process.c
index d1b477e..11253fa 100644
--- a/STS/Core/Src/yunhorn_sts_process.c
+++ b/STS/Core/Src/yunhorn_sts_process.c
@@ -112,7 +112,7 @@ volatile uint8_t sts_work_mode=4;
 volatile uint32_t rfac_timer=0;
 volatile uint16_t sts_sensor_install_height=3000;
 volatile uint8_t sensor_data_ready=0;
-volatile uint32_t STS_TOFScanPeriod_msec=250, STS_TxPeriod_sec=10, STS_HeartBeatTimerPeriod_sec=60;
+volatile uint32_t STS_TOFScanPeriod_msec=5000, STS_TxPeriod_sec=10, STS_HeartBeatTimerPeriod_sec=60;
 static uint8_t outbuf[128]={0x0};
 extern volatile hmac_result_t hmac_result;
 extern uint16_t sensor_id;
@@ -434,7 +434,8 @@ void STS_YunhornSTSEventP5_Process(void)
 	}
 #elif defined(L8)
 	//STS_TOF_VL53L8X_Process();
-	MX_TOF_Process();
+	//MX_TOF_Process();
+	MX_TOF_Ranging_Process();
 #endif
 
 }
@@ -1686,7 +1687,7 @@ void STS_SENSOR_Distance_Test_Process(void)
 	APP_LOG(TS_OFF, VLEVEL_M, "\r\nSensor Function Test: Distance Measured =%u mm\r\n", (int)sts_distance_rss_distance);
 #endif
 
-#if	defined(VL53LX)
+#if	defined(VL53LX)||defined(L8)
 		//MX_TOF_Init();
 		//MX_TOF_Process();
 		sts_sensor_install_height = (uint16_t)MX_TOF_Ranging_Process();
diff --git a/STS/TOF/App/app_tof.c b/STS/TOF/App/app_tof.c
index 7b689ee..ef6d542 100644
--- a/STS/TOF/App/app_tof.c
+++ b/STS/TOF/App/app_tof.c
@@ -113,6 +113,7 @@ void MX_TOF_Init(void)
   //STS_TOF_VL53LX_PeopleCounting_Process();
 #ifdef	L8
   MX_53L8A1_ThresholdDetection_Init();
+  MX_53L8A1_ThresholdDetection_Process();
 #endif
 
   /* USER CODE BEGIN TOF_Init_PostTreatment */
@@ -133,6 +134,26 @@ uint16_t MX_TOF_Ranging_Process(void)
 	STS_TOF_VL53LX_Range_Process(range_mode, &range_distance);
 	APP_LOG(TS_OFF, VLEVEL_M, "\n VL53L1 Range distance =%u mm \n\r", (uint16_t)range_distance);
 
+	return (uint16_t) range_distance;
+#elif defined(L8)
+	uint16_t range_distance=0;
+	uint8_t center_roi[4] = {27,28,35,36};
+	uint8_t range_mode = 2; //STS_TOF_LONG_RANGE;
+	int status = VL53L8A1_RANGING_SENSOR_GetDistance(VL53L8A1_DEV_CENTER, &Result);
+#if 1
+    for (uint8_t zone_nbr = 0; zone_nbr < 4; zone_nbr++)
+    {
+      /* Print distance and status */
+        if (Result.ZoneResult[center_roi[zone_nbr]].NumberOfTargets > 0)
+          printf("\n\r%2d distance = %4d mm status =%2d\n\r",center_roi[zone_nbr],
+                 (long)Result.ZoneResult[center_roi[zone_nbr]].Distance[RANGING_SENSOR_NB_TARGET_PER_ZONE-1],
+                 (long)Result.ZoneResult[center_roi[zone_nbr]].Status[RANGING_SENSOR_NB_TARGET_PER_ZONE-1]);
+        range_distance += Result.ZoneResult[center_roi[zone_nbr]].Distance[RANGING_SENSOR_NB_TARGET_PER_ZONE-1];
+    }
+#endif
+    range_distance /=4;
+	APP_LOG(TS_OFF, VLEVEL_M, "\n VL53L1 Range distance =%u mm \n\r", (uint16_t)range_distance);
+
 	return (uint16_t) range_distance;
 #endif
 
@@ -150,16 +171,34 @@ void MX_TOF_Process(void)
 
 	//sts_tof_vl53lx_peoplecount_subprocess();
 #ifdef L8
-	MX_53L8A1_ThresholdDetection_Process();
+	//MX_53L8A1_ThresholdDetection_Process();
+	STS_TOF_L8_Process();
 #endif
 
   /* USER CODE BEGIN TOF_Process_PostTreatment */
 
   /* USER CODE END TOF_Process_PostTreatment */
 }
-
-
 #ifdef L8
+void STS_TOF_L8_Process(void)
+{
+	  //while (1)
+	  {
+	    /* interrupt mode */
+	    if (ToF_EventDetected != 0)
+	    {
+	      ToF_EventDetected = 0;
+
+	      status = VL53L8A1_RANGING_SENSOR_GetDistance(VL53L8A1_DEV_CENTER, &Result);
+
+	      if (status == BSP_ERROR_NONE)
+	      {
+	        //print_result(&Result);
+	      }
+	    }
+	  }
+}
+
 /*   VL53L8A1    */
 static void MX_53L8A1_ThresholdDetection_Init(void)
 {
@@ -184,7 +223,7 @@ static void MX_53L8A1_ThresholdDetection_Init(void)
   if (status != BSP_ERROR_NONE)
   {
     printf("VL53L8A1_RANGING_SENSOR_Init failed\n");
-    while (1);
+    //while (1);
   }
   printf("\r\nVL53L8A1_RANGING_SENSOR_Init Success\r\n");
 }
@@ -227,8 +266,8 @@ static void MX_53L8A1_ThresholdDetection_Process(void)
   printf("-------------------------------------------\n\r");
   printf("please put a target between %d and %d millimeters from the sensor\n\r",
 		  LOW_THRESHOLD, HIGH_THRESHOLD);
-
-  while (1)
+#if 0
+  //while (1)
   {
     /* interrupt mode */
     if (ToF_EventDetected != 0)
@@ -243,6 +282,7 @@ static void MX_53L8A1_ThresholdDetection_Process(void)
       }
     }
   }
+#endif
 }
 
 static void print_result(RANGING_SENSOR_Result_t *Result)
@@ -266,7 +306,7 @@ static void print_result(RANGING_SENSOR_Result_t *Result)
     printf(" \033[38;5;10m%20s\033[0m : %20s\n", "Distance [mm]", "Status\r");
     if ((Profile.EnableAmbient != 0) || (Profile.EnableSignal != 0))
     {
-      printf(" %20s : %20s\n", "Signal [kcps/spad]", "Ambient [kcps/spad]");
+      printf(" %20s : %20s\n", "Signal [kcps/spad]", "Ambient [kcps/spad]\r");
     }
   }
 
@@ -282,7 +322,7 @@ static void print_result(RANGING_SENSOR_Result_t *Result)
 
     for (i = 0; i < zones_per_line; i++)
     {
-      printf("|                 ");
+    	printf("|                 ");
     }
     printf("|\n");
 
@@ -292,8 +332,8 @@ static void print_result(RANGING_SENSOR_Result_t *Result)
       for (k = (zones_per_line - 1); k >= 0; k--)
       {
         if (Result->ZoneResult[j + k].NumberOfTargets > 0)
-          printf("| \033[38;5;10m%5ld\033[0m  :  %5ld ",
-                 (long)Result->ZoneResult[j + k].Distance[l],
+          printf("| \033[38;5;10m%5ld\033[0m  :%2d%5ld ",
+                 (long)Result->ZoneResult[j + k].Distance[l],(j+k),
                  (long)Result->ZoneResult[j + k].Status[l]);
         else
           printf("| %5s  :  %5s ", "X", "X");