From b0a1f4fc2bb368ceed8383d7ecea68fbf13b7f33 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 21 Mar 2024 16:49:25 +0800
Subject: [PATCH 01/25] disable DBinit

---
 Core/Src/sys_app.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Core/Src/sys_app.c b/Core/Src/sys_app.c
index 705ba80..aeb505e 100644
--- a/Core/Src/sys_app.c
+++ b/Core/Src/sys_app.c
@@ -100,7 +100,7 @@ void SystemApp_Init(void)
   UTIL_TIMER_Init();
   SYS_TimerInitialisedFlag = 1;
   /* Initializes the SW probes pins and the monitor RF pins via Alternate Function */
-  DBG_Init();
+  //DBG_Init();
 
   /*Initialize the terminal */
   UTIL_ADV_TRACE_Init();

From 4271392e5dfe988921cbb01ed6955a570d37a5fa Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 21 Mar 2024 16:56:25 +0800
Subject: [PATCH 02/25] ..

---
 Core/Inc/sys_conf.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h
index 1f15237..1d72723 100644
--- a/Core/Inc/sys_conf.h
+++ b/Core/Inc/sys_conf.h
@@ -52,7 +52,7 @@ extern "C" {
 /**
   * @brief Enable trace logs
   */
-#define APP_LOG_ENABLED                      1
+#define APP_LOG_ENABLED                      0
 
 /**
   * @brief Activate monitoring (probes) of some internal RF signals for debug purpose

From aebafc0d8c1163e18fbf9164387b8a94ba29f7d4 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 21 Mar 2024 17:08:30 +0800
Subject: [PATCH 03/25] DISABLE USART2_RX to analog

---
 Core/Inc/sys_conf.h | 2 +-
 Core/Src/usart.c    | 7 ++++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h
index 1d72723..16d0145 100644
--- a/Core/Inc/sys_conf.h
+++ b/Core/Inc/sys_conf.h
@@ -47,7 +47,7 @@ extern "C" {
 /**
   * @brief  Verbose level for all trace logs
   */
-#define VERBOSE_LEVEL                        VLEVEL_M
+#define VERBOSE_LEVEL                        VLEVEL_OFF
 
 /**
   * @brief Enable trace logs
diff --git a/Core/Src/usart.c b/Core/Src/usart.c
index bf9fd2b..62e4a98 100644
--- a/Core/Src/usart.c
+++ b/Core/Src/usart.c
@@ -100,13 +100,18 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
     PA3     ------> USART2_RX
     PA2     ------> USART2_TX
     */
-    GPIO_InitStruct.Pin = USARTx_RX_Pin|USARTx_TX_Pin;
+    GPIO_InitStruct.Pin = USARTx_TX_Pin;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
     GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
+    GPIO_InitStruct.Pin = USARTx_RX_Pin;
+    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
     /* USART2 DMA Init */
     /* USART2_TX Init */
     hdma_usart2_tx.Instance = DMA1_Channel5;

From fcd5f8b310c2f2c3a0e41e6f9afc9bf26c1b029a Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Mon, 25 Mar 2024 10:22:03 +0800
Subject: [PATCH 04/25] add battery level and PA0 state to uplink message

---
 LoRaWAN/App/lora_app.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index 0eabe19..553e8d2 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -446,7 +446,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
   {
     case  BUT1_Pin:
       /* Note: when "EventType == TX_ON_TIMER" this GPIO is not initialized */
-      if (EventType == TX_ON_EVENT)
+      //if (EventType == TX_ON_EVENT)
       {
         UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
       }

From aa2cbe27094cf0ef29dde1b4f7b0a00a28e652a2 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Mon, 25 Mar 2024 10:52:11 +0800
Subject: [PATCH 05/25] fixed normal open 1.6uA, closed, 90uA

---
 Core/Src/gpio.c         | 21 ++++++++++++++++++---
 Core/Src/stm32_lpm_if.c |  3 +++
 LoRaWAN/App/lora_app.c  |  4 ++--
 3 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index 7cda6a6..4dd4cfe 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -49,6 +49,21 @@ void MX_GPIO_Init(void)
   __HAL_RCC_GPIOC_CLK_ENABLE();
   __HAL_RCC_GPIOA_CLK_ENABLE();
 
+  GPIO_InitStruct.Pin = GPIO_PIN_All;
+  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+  __HAL_RCC_GPIOB_CLK_ENABLE();
+  __HAL_RCC_GPIOC_CLK_ENABLE();
+
+  GPIO_InitStruct.Pin = BUT1_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
+  GPIO_InitStruct.Pull = GPIO_PULLUP;
+  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+#if 0
   /*Configure GPIO pin Output Level */
   HAL_GPIO_WritePin(GPIOB, LED1_Pin|LED2_Pin|PROB2_Pin|PROB1_Pin
                           |LED3_Pin, GPIO_PIN_RESET);
@@ -78,17 +93,17 @@ void MX_GPIO_Init(void)
   GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
   GPIO_InitStruct.Pull = GPIO_PULLUP;
   HAL_GPIO_Init(BUT3_GPIO_Port, &GPIO_InitStruct);
-
+#endif
   /* EXTI interrupt init*/
   HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(EXTI0_IRQn);
-
+#if 0
   HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(EXTI1_IRQn);
 
   HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
-
+#endif
 }
 
 /* USER CODE BEGIN 2 */
diff --git a/Core/Src/stm32_lpm_if.c b/Core/Src/stm32_lpm_if.c
index 8b623ee..f358f2d 100644
--- a/Core/Src/stm32_lpm_if.c
+++ b/Core/Src/stm32_lpm_if.c
@@ -94,6 +94,9 @@ void PWR_EnterStopMode(void)
   /* USER CODE BEGIN EnterStopMode_1 */
 
   /* USER CODE END EnterStopMode_1 */
+	//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_All, GPIO_PIN_RESET);
+	//HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_RESET);
+	//HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
   HAL_SuspendTick();
   /* Clear Status Flag before entering STOP/STANDBY Mode */
   LL_PWR_ClearFlag_C1STOP_C1STB();
diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index 553e8d2..91208f1 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -610,8 +610,8 @@ static void SendTxData(void)
     {
       AppData.Buffer[i++] = 0;
       AppData.Buffer[i++] = 0;
-      AppData.Buffer[i++] = 0;
-      AppData.Buffer[i++] = 0;
+      AppData.Buffer[i++] = (uint8_t)(99*GetBatteryLevel()/255);        /* 1 (very low) to 254 (fully charged) */
+      AppData.Buffer[i++] = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
     }
     else
     {

From 85a9fe722f830d69bf406b0913840bba018af75b Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Mon, 25 Mar 2024 12:00:26 +0800
Subject: [PATCH 06/25] try send changed status to uplink message

---
 Core/Src/gpio.c         |  4 ++--
 Core/Src/stm32_lpm_if.c |  4 ++--
 LoRaWAN/App/lora_app.c  | 19 ++++++++++++++-----
 3 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index 4dd4cfe..9cd7e13 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -59,8 +59,8 @@ void MX_GPIO_Init(void)
   __HAL_RCC_GPIOC_CLK_ENABLE();
 
   GPIO_InitStruct.Pin = BUT1_Pin;
-  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
-  GPIO_InitStruct.Pull = GPIO_PULLUP;
+  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
 #if 0
diff --git a/Core/Src/stm32_lpm_if.c b/Core/Src/stm32_lpm_if.c
index f358f2d..f174631 100644
--- a/Core/Src/stm32_lpm_if.c
+++ b/Core/Src/stm32_lpm_if.c
@@ -94,9 +94,9 @@ void PWR_EnterStopMode(void)
   /* USER CODE BEGIN EnterStopMode_1 */
 
   /* USER CODE END EnterStopMode_1 */
-	//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_All, GPIO_PIN_RESET);
+	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_All, GPIO_PIN_RESET);
 	//HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_RESET);
-	//HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
+	HAL_GPIO_WritePin(GPIOA, ~GPIO_PIN_0, GPIO_PIN_RESET);
   HAL_SuspendTick();
   /* Clear Status Flag before entering STOP/STANDBY Mode */
   LL_PWR_ClearFlag_C1STOP_C1STB();
diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index 91208f1..fcc4c65 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -342,7 +342,7 @@ static UTIL_TIMER_Object_t JoinLedTimer;
 
 /* Exported functions ---------------------------------------------------------*/
 /* USER CODE BEGIN EF */
-
+volatile uint8_t door_status=0, door_changed_flag=0, door_previous_status=0;
 /* USER CODE END EF */
 
 void LoRaWAN_Init(void)
@@ -666,12 +666,21 @@ static void SendTxData(void)
 static void OnTxTimerEvent(void *context)
 {
   /* USER CODE BEGIN OnTxTimerEvent_1 */
-
+	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
+	if (door_status != door_previous_status)
+	{
+		door_changed_flag = 1;
+		door_previous_status = door_status;
+	}
   /* USER CODE END OnTxTimerEvent_1 */
-  UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
+	if (door_changed_flag ==1 )
+	{
+		door_changed_flag = 0;
+	    UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
 
-  /*Wait for next tx slot*/
-  UTIL_TIMER_Start(&TxTimer);
+	    /*Wait for next tx slot*/
+	    UTIL_TIMER_Start(&TxTimer);
+	}
   /* USER CODE BEGIN OnTxTimerEvent_2 */
 
   /* USER CODE END OnTxTimerEvent_2 */

From 7adb1031ee9ca1a70be85ad494553d7b5c43a99f Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Mon, 25 Mar 2024 12:58:57 +0800
Subject: [PATCH 07/25] improved only send changed status up,

---
 Core/Src/gpio.c                  |  2 +-
 LoRaWAN/App/lora_app.c           | 32 +++++++++++++++++++++++++++++++-
 STM32CubeIDE/WL55JC_AS923.launch |  1 +
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index 9cd7e13..8234296 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -60,7 +60,7 @@ void MX_GPIO_Init(void)
 
   GPIO_InitStruct.Pin = BUT1_Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
-  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Pull = GPIO_PULLUP;
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
 #if 0
diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index fcc4c65..49697fb 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -448,6 +448,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
       /* Note: when "EventType == TX_ON_TIMER" this GPIO is not initialized */
       //if (EventType == TX_ON_EVENT)
       {
+    	  door_changed_flag =1;
         UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
       }
       break;
@@ -557,6 +558,22 @@ static void SendTxData(void)
   sensor_t sensor_data;
   UTIL_TIMER_Time_t nextTxIn = 0;
 
+	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
+	door_changed_flag = 0;
+	if (door_status != door_previous_status)
+	{
+		door_previous_status = door_status;
+	}
+
+#if 0
+	if (door_changed_flag ==1 )
+	{
+		door_changed_flag = 0;
+	    UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
+	    UTIL_TIMER_Start(&TxTimer);
+	}
+#endif
+
   if (LmHandlerIsBusy() == false)
   {
 #ifdef CAYENNE_LPP
@@ -611,7 +628,7 @@ static void SendTxData(void)
       AppData.Buffer[i++] = 0;
       AppData.Buffer[i++] = 0;
       AppData.Buffer[i++] = (uint8_t)(99*GetBatteryLevel()/255);        /* 1 (very low) to 254 (fully charged) */
-      AppData.Buffer[i++] = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
+      AppData.Buffer[i++] = door_status;
     }
     else
     {
@@ -666,6 +683,7 @@ static void SendTxData(void)
 static void OnTxTimerEvent(void *context)
 {
   /* USER CODE BEGIN OnTxTimerEvent_1 */
+#if 0
 	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
 	if (door_status != door_previous_status)
 	{
@@ -681,6 +699,18 @@ static void OnTxTimerEvent(void *context)
 	    /*Wait for next tx slot*/
 	    UTIL_TIMER_Start(&TxTimer);
 	}
+#endif
+	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
+	door_changed_flag = 0;
+	if (door_status != door_previous_status)
+	{
+		door_previous_status = door_status;
+
+
+    UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
+    UTIL_TIMER_Start(&TxTimer);
+
+	}
   /* USER CODE BEGIN OnTxTimerEvent_2 */
 
   /* USER CODE END OnTxTimerEvent_2 */
diff --git a/STM32CubeIDE/WL55JC_AS923.launch b/STM32CubeIDE/WL55JC_AS923.launch
index 9c1e726..4ffa9b7 100644
--- a/STM32CubeIDE/WL55JC_AS923.launch
+++ b/STM32CubeIDE/WL55JC_AS923.launch
@@ -78,5 +78,6 @@
     <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
         <listEntry value="4"/>
     </listAttribute>
+    <stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;"/>
     <stringAttribute key="process_factory_id" value="com.st.stm32cube.ide.mcu.debug.launch.HardwareDebugProcessFactory"/>
 </launchConfiguration>

From 1140aa9a1926668b52324d567176278e019247ca Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Mon, 25 Mar 2024 13:29:34 +0800
Subject: [PATCH 08/25] 1.8uA at open state and 20 uA at closed for a few
 seconds

---
 Core/Src/stm32_lpm_if.c | 4 +++-
 LoRaWAN/App/lora_app.c  | 7 ++++---
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/Core/Src/stm32_lpm_if.c b/Core/Src/stm32_lpm_if.c
index f174631..2b3bfd4 100644
--- a/Core/Src/stm32_lpm_if.c
+++ b/Core/Src/stm32_lpm_if.c
@@ -96,7 +96,8 @@ void PWR_EnterStopMode(void)
   /* USER CODE END EnterStopMode_1 */
 	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_All, GPIO_PIN_RESET);
 	//HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_RESET);
-	HAL_GPIO_WritePin(GPIOA, ~GPIO_PIN_0, GPIO_PIN_RESET);
+	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
+	HAL_GPIO_DeInit(GPIOA,GPIO_PIN_0);
   HAL_SuspendTick();
   /* Clear Status Flag before entering STOP/STANDBY Mode */
   LL_PWR_ClearFlag_C1STOP_C1STB();
@@ -123,6 +124,7 @@ void PWR_ExitStopMode(void)
     SRAM ctrls, DMAx, DMAMux, AES, RNG, HSEM  */
 
   /* Resume not retained USARTx and DMA */
+  MX_GPIO_Init();
   vcom_Resume();
   /* USER CODE BEGIN ExitStopMode_2 */
 
diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index 49697fb..e584b2d 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -36,7 +36,7 @@
 #include "flash_if.h"
 
 /* USER CODE BEGIN Includes */
-
+#include "gpio.h"
 /* USER CODE END Includes */
 
 /* External variables ---------------------------------------------------------*/
@@ -700,9 +700,10 @@ static void OnTxTimerEvent(void *context)
 	    UTIL_TIMER_Start(&TxTimer);
 	}
 #endif
+	MX_GPIO_Init();
 	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
-	door_changed_flag = 0;
-	if (door_status != door_previous_status)
+	//door_changed_flag = 0;
+	//if (door_status != door_previous_status)
 	{
 		door_previous_status = door_status;
 

From f25c396a8dd9eba037c05da49ac23b1a5fe5587d Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Tue, 26 Mar 2024 17:34:22 +0800
Subject: [PATCH 09/25] with debug, door open/close, three lines...

---
 Core/Inc/sys_conf.h                           |  6 +-
 Core/Inc/utilities_def.h                      |  2 +-
 Core/Src/gpio.c                               |  4 +-
 Core/Src/stm32_lpm_if.c                       |  8 +-
 LoRaWAN/App/lora_app.c                        | 77 +++++++------------
 .../.settings/stm32cubeide.project.prefs      |  6 +-
 STM32CubeIDE/STM32WL55JCIX_FLASH.ld           | 10 +--
 7 files changed, 45 insertions(+), 68 deletions(-)

diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h
index 16d0145..de8c96a 100644
--- a/Core/Inc/sys_conf.h
+++ b/Core/Inc/sys_conf.h
@@ -47,12 +47,12 @@ extern "C" {
 /**
   * @brief  Verbose level for all trace logs
   */
-#define VERBOSE_LEVEL                        VLEVEL_OFF
+#define VERBOSE_LEVEL                        VLEVEL_M
 
 /**
   * @brief Enable trace logs
   */
-#define APP_LOG_ENABLED                      0
+#define APP_LOG_ENABLED                      1
 
 /**
   * @brief Activate monitoring (probes) of some internal RF signals for debug purpose
@@ -75,7 +75,7 @@ extern "C" {
   * @brief Enable/Disable MCU Debugger pins (dbg serial wires)
   * @note  by HW serial wires are ON by default, need to put them OFF to save power
   */
-#define DEBUGGER_ENABLED                     0
+#define DEBUGGER_ENABLED                     1
 
 /**
   * @brief Disable Low Power mode
diff --git a/Core/Inc/utilities_def.h b/Core/Inc/utilities_def.h
index bcf7700..f28e621 100644
--- a/Core/Inc/utilities_def.h
+++ b/Core/Inc/utilities_def.h
@@ -80,7 +80,7 @@ typedef enum
   CFG_SEQ_Task_LoRaStoreContextEvent,
   CFG_SEQ_Task_LoRaStopJoinEvent,
   /* USER CODE BEGIN CFG_SEQ_Task_Id_t */
-
+  CFG_SEQ_Task_YunhornSTSP1CheckingEvent,
   /* USER CODE END CFG_SEQ_Task_Id_t */
   CFG_SEQ_Task_NBR
 } CFG_SEQ_Task_Id_t;
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index 8234296..578c5fe 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -55,8 +55,8 @@ void MX_GPIO_Init(void)
   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-  __HAL_RCC_GPIOB_CLK_ENABLE();
-  __HAL_RCC_GPIOC_CLK_ENABLE();
+  __HAL_RCC_GPIOB_CLK_DISABLE();
+  __HAL_RCC_GPIOC_CLK_DISABLE();
 
   GPIO_InitStruct.Pin = BUT1_Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
diff --git a/Core/Src/stm32_lpm_if.c b/Core/Src/stm32_lpm_if.c
index 2b3bfd4..7ca55e6 100644
--- a/Core/Src/stm32_lpm_if.c
+++ b/Core/Src/stm32_lpm_if.c
@@ -25,7 +25,7 @@
 #include "usart_if.h"
 
 /* USER CODE BEGIN Includes */
-
+#include "gpio.h"
 /* USER CODE END Includes */
 
 /* External variables ---------------------------------------------------------*/
@@ -96,8 +96,8 @@ void PWR_EnterStopMode(void)
   /* USER CODE END EnterStopMode_1 */
 	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_All, GPIO_PIN_RESET);
 	//HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_RESET);
-	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
-	HAL_GPIO_DeInit(GPIOA,GPIO_PIN_0);
+	HAL_GPIO_WritePin(GPIOA, ~GPIO_PIN_0, GPIO_PIN_RESET);
+
   HAL_SuspendTick();
   /* Clear Status Flag before entering STOP/STANDBY Mode */
   LL_PWR_ClearFlag_C1STOP_C1STB();
@@ -124,7 +124,7 @@ void PWR_ExitStopMode(void)
     SRAM ctrls, DMAx, DMAMux, AES, RNG, HSEM  */
 
   /* Resume not retained USARTx and DMA */
-  MX_GPIO_Init();
+  //MX_GPIO_Init();
   vcom_Resume();
   /* USER CODE BEGIN ExitStopMode_2 */
 
diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index e584b2d..89495b7 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -215,6 +215,7 @@ static void OnPingSlotPeriodicityChanged(uint8_t pingSlotPeriodicity);
 static void OnSystemReset(void);
 
 /* USER CODE BEGIN PFP */
+static void OnYunhornSTSP1CheckingEvent(void);
 
 /**
   * @brief  LED Tx timer callback function
@@ -300,7 +301,7 @@ static UTIL_TIMER_Object_t TxTimer;
 /**
   * @brief Tx Timer period
   */
-static UTIL_TIMER_Time_t TxPeriodicity = APP_TX_DUTYCYCLE;
+static UTIL_TIMER_Time_t TxPeriodicity = 1000;
 
 /**
   * @brief Join Timer period
@@ -404,7 +405,7 @@ void LoRaWAN_Init(void)
   UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), UTIL_SEQ_RFU, SendTxData);
   UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LoRaStoreContextEvent), UTIL_SEQ_RFU, StoreContext);
   UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LoRaStopJoinEvent), UTIL_SEQ_RFU, StopJoin);
-
+  UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSP1CheckingEvent),UTIL_SEQ_RFU, OnYunhornSTSP1CheckingEvent);
   /* Init Info table used by LmHandler*/
   LoraInfo_Init();
 
@@ -446,9 +447,10 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
   {
     case  BUT1_Pin:
       /* Note: when "EventType == TX_ON_TIMER" this GPIO is not initialized */
-      //if (EventType == TX_ON_EVENT)
+    	UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSP1CheckingEvent), CFG_SEQ_Prio_0);
+    	APP_LOG(TS_OFF,VLEVEL_M,"... BUT1............. \r\n");
+      if (EventType == TX_ON_EVENT)
       {
-    	  door_changed_flag =1;
         UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
       }
       break;
@@ -467,7 +469,20 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 
 /* Private functions ---------------------------------------------------------*/
 /* USER CODE BEGIN PrFD */
+static void OnYunhornSTSP1CheckingEvent(void)
+{
 
+
+	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
+	APP_LOG(TS_OFF,VLEVEL_M,"\r\nDOOR_STATUS= %u \r\n",door_status);
+	if (door_status != door_previous_status)
+	{
+		door_previous_status = door_status;
+		door_changed_flag = 1;
+		UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
+	}
+
+}
 /* USER CODE END PrFD */
 
 static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params)
@@ -558,22 +573,6 @@ static void SendTxData(void)
   sensor_t sensor_data;
   UTIL_TIMER_Time_t nextTxIn = 0;
 
-	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
-	door_changed_flag = 0;
-	if (door_status != door_previous_status)
-	{
-		door_previous_status = door_status;
-	}
-
-#if 0
-	if (door_changed_flag ==1 )
-	{
-		door_changed_flag = 0;
-	    UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
-	    UTIL_TIMER_Start(&TxTimer);
-	}
-#endif
-
   if (LmHandlerIsBusy() == false)
   {
 #ifdef CAYENNE_LPP
@@ -589,10 +588,10 @@ static void SendTxData(void)
 #endif /* CAYENNE_LPP */
 
     EnvSensors_Read(&sensor_data);
-
+#if 0
     APP_LOG(TS_ON, VLEVEL_M, "VDDA: %d\r\n", batteryLevel);
     APP_LOG(TS_ON, VLEVEL_M, "temp: %d\r\n", (int16_t)(sensor_data.temperature));
-
+#endif
     AppData.Port = LORAWAN_USER_APP_PORT;
 
 #ifdef CAYENNE_LPP
@@ -683,34 +682,12 @@ static void SendTxData(void)
 static void OnTxTimerEvent(void *context)
 {
   /* USER CODE BEGIN OnTxTimerEvent_1 */
-#if 0
-	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
-	if (door_status != door_previous_status)
-	{
-		door_changed_flag = 1;
-		door_previous_status = door_status;
-	}
-  /* USER CODE END OnTxTimerEvent_1 */
-	if (door_changed_flag ==1 )
-	{
-		door_changed_flag = 0;
-	    UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
-
-	    /*Wait for next tx slot*/
-	    UTIL_TIMER_Start(&TxTimer);
-	}
-#endif
-	MX_GPIO_Init();
-	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
-	//door_changed_flag = 0;
-	//if (door_status != door_previous_status)
-	{
-		door_previous_status = door_status;
-
-
-    UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
-    UTIL_TIMER_Start(&TxTimer);
-
+    UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSP1CheckingEvent), CFG_SEQ_Prio_0);
+    if (door_changed_flag ==1)
+    {
+    	door_changed_flag =0;
+    	UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
+    	UTIL_TIMER_Start(&TxTimer);
 	}
   /* USER CODE BEGIN OnTxTimerEvent_2 */
 
diff --git a/STM32CubeIDE/.settings/stm32cubeide.project.prefs b/STM32CubeIDE/.settings/stm32cubeide.project.prefs
index 481391e..e052a6a 100644
--- a/STM32CubeIDE/.settings/stm32cubeide.project.prefs
+++ b/STM32CubeIDE/.settings/stm32cubeide.project.prefs
@@ -1,4 +1,4 @@
-2F62501ED4689FB349E356AB974DBE57=95112E708683D54F6AC1ADC68D917C29
-8DF89ED150041C4CBC7CB9A9CAA90856=95112E708683D54F6AC1ADC68D917C29
-DC22A860405A8BF2F2C095E5B6529F12=708FD40520C1EE5CFD2122309291F653
+2F62501ED4689FB349E356AB974DBE57=E4D60684DA61280BD06389F4CFDF2587
+8DF89ED150041C4CBC7CB9A9CAA90856=E4D60684DA61280BD06389F4CFDF2587
+DC22A860405A8BF2F2C095E5B6529F12=74CD6EB106FB50B767E4FE71225C7638
 eclipse.preferences.version=1
diff --git a/STM32CubeIDE/STM32WL55JCIX_FLASH.ld b/STM32CubeIDE/STM32WL55JCIX_FLASH.ld
index d45d121..48c962e 100644
--- a/STM32CubeIDE/STM32WL55JCIX_FLASH.ld
+++ b/STM32CubeIDE/STM32WL55JCIX_FLASH.ld
@@ -91,13 +91,13 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-  .ARM.extab   : {
+  .ARM.extab(READONLY)   : {
     . = ALIGN(8);
     *(.ARM.extab* .gnu.linkonce.armextab.*)
     . = ALIGN(8);
   } >FLASH
 
-  .ARM : {
+  .ARM(READONLY) : {
     . = ALIGN(8);
     __exidx_start = .;
     *(.ARM.exidx*)
@@ -105,7 +105,7 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-  .preinit_array     :
+  .preinit_array(READONLY)     :
   {
     . = ALIGN(8);
     PROVIDE_HIDDEN (__preinit_array_start = .);
@@ -114,7 +114,7 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-  .init_array :
+  .init_array(READONLY) :
   {
     . = ALIGN(8);
     PROVIDE_HIDDEN (__init_array_start = .);
@@ -124,7 +124,7 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-  .fini_array :
+  .fini_array(READONLY) :
   {
     . = ALIGN(8);
     PROVIDE_HIDDEN (__fini_array_start = .);

From 764e5a9d91b203e1da4e80ed97abc955b4ca1b82 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Wed, 27 Mar 2024 13:00:18 +0800
Subject: [PATCH 10/25] improve door open/close logic with timer

---
 LoRaWAN/App/lora_app.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index 89495b7..43dc765 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -344,6 +344,7 @@ static UTIL_TIMER_Object_t JoinLedTimer;
 /* Exported functions ---------------------------------------------------------*/
 /* USER CODE BEGIN EF */
 volatile uint8_t door_status=0, door_changed_flag=0, door_previous_status=0;
+volatile uint32_t checking_sn=0;
 /* USER CODE END EF */
 
 void LoRaWAN_Init(void)
@@ -424,7 +425,7 @@ void LoRaWAN_Init(void)
   if (EventType == TX_ON_TIMER)
   {
     /* send every time timer elapses */
-    UTIL_TIMER_Create(&TxTimer, TxPeriodicity, UTIL_TIMER_ONESHOT, OnTxTimerEvent, NULL);
+    UTIL_TIMER_Create(&TxTimer, TxPeriodicity, UTIL_TIMER_PERIODIC, OnTxTimerEvent, NULL);
     UTIL_TIMER_Start(&TxTimer);
   }
   else
@@ -447,8 +448,9 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
   {
     case  BUT1_Pin:
       /* Note: when "EventType == TX_ON_TIMER" this GPIO is not initialized */
+    	door_changed_flag = 1;
     	UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSP1CheckingEvent), CFG_SEQ_Prio_0);
-    	APP_LOG(TS_OFF,VLEVEL_M,"... BUT1............. \r\n");
+
       if (EventType == TX_ON_EVENT)
       {
         UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
@@ -474,14 +476,15 @@ static void OnYunhornSTSP1CheckingEvent(void)
 
 
 	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
-	APP_LOG(TS_OFF,VLEVEL_M,"\r\nDOOR_STATUS= %u \r\n",door_status);
+
 	if (door_status != door_previous_status)
 	{
 		door_previous_status = door_status;
 		door_changed_flag = 1;
-		UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
+		APP_LOG(TS_OFF,VLEVEL_M,"\r\n----- Door Status Changed-------------\r\n");
 	}
 
+	//UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
 }
 /* USER CODE END PrFD */
 
@@ -687,7 +690,7 @@ static void OnTxTimerEvent(void *context)
     {
     	door_changed_flag =0;
     	UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
-    	UTIL_TIMER_Start(&TxTimer);
+    	//UTIL_TIMER_Start(&TxTimer);
 	}
   /* USER CODE BEGIN OnTxTimerEvent_2 */
 

From 7f3e94cfafcb483b4143916f85776541d030b547 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Wed, 27 Mar 2024 13:13:58 +0800
Subject: [PATCH 11/25] disable debug/log console output with open 1.8uA,
 closed 81uA

---
 Core/Inc/sys_conf.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h
index de8c96a..16d0145 100644
--- a/Core/Inc/sys_conf.h
+++ b/Core/Inc/sys_conf.h
@@ -47,12 +47,12 @@ extern "C" {
 /**
   * @brief  Verbose level for all trace logs
   */
-#define VERBOSE_LEVEL                        VLEVEL_M
+#define VERBOSE_LEVEL                        VLEVEL_OFF
 
 /**
   * @brief Enable trace logs
   */
-#define APP_LOG_ENABLED                      1
+#define APP_LOG_ENABLED                      0
 
 /**
   * @brief Activate monitoring (probes) of some internal RF signals for debug purpose
@@ -75,7 +75,7 @@ extern "C" {
   * @brief Enable/Disable MCU Debugger pins (dbg serial wires)
   * @note  by HW serial wires are ON by default, need to put them OFF to save power
   */
-#define DEBUGGER_ENABLED                     1
+#define DEBUGGER_ENABLED                     0
 
 /**
   * @brief Disable Low Power mode

From 25da5701d201c9ce15068b0c995f0a405b1a4eed Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Wed, 3 Apr 2024 18:32:29 +0800
Subject: [PATCH 12/25] closed: 110uA, open 2-3uA

---
 Core/Src/gpio.c                              | 2 +-
 Core/Src/rtc.c                               | 4 ++--
 Core/Src/stm32_lpm_if.c                      | 4 ++--
 Core/Src/stm32wlxx_it.c                      | 4 ++--
 Core/Src/sys_app.c                           | 2 +-
 STM32CubeIDE/.settings/language.settings.xml | 4 ++--
 6 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index 578c5fe..f51ed30 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -62,7 +62,7 @@ void MX_GPIO_Init(void)
   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
   GPIO_InitStruct.Pull = GPIO_PULLUP;
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
+  __HAL_RCC_GPIOA_CLK_DISABLE();
 #if 0
   /*Configure GPIO pin Output Level */
   HAL_GPIO_WritePin(GPIOB, LED1_Pin|LED2_Pin|PROB2_Pin|PROB1_Pin
diff --git a/Core/Src/rtc.c b/Core/Src/rtc.c
index 04a8214..918ceaf 100644
--- a/Core/Src/rtc.c
+++ b/Core/Src/rtc.c
@@ -65,7 +65,7 @@ void MX_RTC_Init(void)
   {
     Error_Handler();
   }
-
+#if 0
   /** Enable the Alarm A
   */
   sAlarm.BinaryAutoClr = RTC_ALARMSUBSECONDBIN_AUTOCLR_NO;
@@ -78,7 +78,7 @@ void MX_RTC_Init(void)
     Error_Handler();
   }
   /* USER CODE BEGIN RTC_Init 2 */
-
+#endif
   /* USER CODE END RTC_Init 2 */
 
 }
diff --git a/Core/Src/stm32_lpm_if.c b/Core/Src/stm32_lpm_if.c
index 7ca55e6..66c1338 100644
--- a/Core/Src/stm32_lpm_if.c
+++ b/Core/Src/stm32_lpm_if.c
@@ -95,8 +95,8 @@ void PWR_EnterStopMode(void)
 
   /* USER CODE END EnterStopMode_1 */
 	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_All, GPIO_PIN_RESET);
-	//HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_RESET);
 	HAL_GPIO_WritePin(GPIOA, ~GPIO_PIN_0, GPIO_PIN_RESET);
+	vcom_DeInit();
 
   HAL_SuspendTick();
   /* Clear Status Flag before entering STOP/STANDBY Mode */
@@ -125,7 +125,7 @@ void PWR_ExitStopMode(void)
 
   /* Resume not retained USARTx and DMA */
   //MX_GPIO_Init();
-  vcom_Resume();
+  //vcom_Resume();
   /* USER CODE BEGIN ExitStopMode_2 */
 
   /* USER CODE END ExitStopMode_2 */
diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c
index 66231ac..bfc2186 100644
--- a/Core/Src/stm32wlxx_it.c
+++ b/Core/Src/stm32wlxx_it.c
@@ -227,7 +227,7 @@ void EXTI0_IRQHandler(void)
 
   /* USER CODE END EXTI0_IRQn 1 */
 }
-
+#if 0
 /**
   * @brief This function handles EXTI Line 1 Interrupt.
   */
@@ -283,7 +283,7 @@ void USART2_IRQHandler(void)
 
   /* USER CODE END USART2_IRQn 1 */
 }
-
+#endif
 /**
   * @brief This function handles RTC Alarms (A and B) Interrupt.
   */
diff --git a/Core/Src/sys_app.c b/Core/Src/sys_app.c
index aeb505e..42d7e5d 100644
--- a/Core/Src/sys_app.c
+++ b/Core/Src/sys_app.c
@@ -122,7 +122,7 @@ void SystemApp_Init(void)
   UTIL_LPM_Init();
   /* Disable Stand-by mode */
   UTIL_LPM_SetOffMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_DISABLE);
-
+  UTIL_LPM_SetOffMode((1 << CFG_LPM_UART_TX_Id), UTIL_LPM_ENABLE);
 #if defined (LOW_POWER_DISABLE) && (LOW_POWER_DISABLE == 1)
   /* Disable Stop Mode */
   UTIL_LPM_SetStopMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_DISABLE);
diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml
index 8480e85..24fc8ca 100644
--- a/STM32CubeIDE/.settings/language.settings.xml
+++ b/STM32CubeIDE/.settings/language.settings.xml
@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-914207715913278870" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-877539789554811708" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,7 +16,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-914207715913278870" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-877539789554811708" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>

From 0b430cba4eb873b15bf38fb78d331b31b98c3f84 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Wed, 3 Apr 2024 19:07:30 +0800
Subject: [PATCH 13/25] try standby mode

---
 Core/Src/stm32_lpm_if.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/Core/Src/stm32_lpm_if.c b/Core/Src/stm32_lpm_if.c
index 66c1338..9d98b45 100644
--- a/Core/Src/stm32_lpm_if.c
+++ b/Core/Src/stm32_lpm_if.c
@@ -78,14 +78,30 @@ const struct UTIL_LPM_Driver_s UTIL_PowerDriver =
 void PWR_EnterOffMode(void)
 {
   /* USER CODE BEGIN EnterOffMode_1 */
+	  /* Enable Power Clock */
+		HAL_SuspendTick();
 
+	  /* Disable all used wakeup sources: Pin1(PA.0) */
+	  HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1|PWR_WAKEUP_PIN2|PWR_WAKEUP_PIN3);
+
+	  /* Clear all related wakeup flags */
+	  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
+
+	  /* Re-enable all used wakeup sources: Pin1(PA.0) */
+	  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
+
+	  /*## Enter Standby Mode ####################################################*/
+	  /* Request to enter STANDBY mode  */
+	  HAL_PWR_EnterSTANDBYMode();
   /* USER CODE END EnterOffMode_1 */
 }
 
 void PWR_ExitOffMode(void)
 {
   /* USER CODE BEGIN ExitOffMode_1 */
-
+	  //HAL_ResumeTick();
+	  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
+	  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
   /* USER CODE END ExitOffMode_1 */
 }
 

From ddc748de52bbee94af880a40acc0829603de2793 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Sun, 7 Apr 2024 10:48:48 +0800
Subject: [PATCH 14/25] try standby

---
 STM32CubeIDE/.settings/language.settings.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml
index 24fc8ca..8480e85 100644
--- a/STM32CubeIDE/.settings/language.settings.xml
+++ b/STM32CubeIDE/.settings/language.settings.xml
@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-877539789554811708" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-914207715913278870" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,7 +16,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-877539789554811708" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-914207715913278870" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>

From 068153dfa56519222f25039aee3ffbe47306ff32 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Wed, 19 Jun 2024 14:57:15 +0800
Subject: [PATCH 15/25] initial WL55JC

---
 .gitignore                                   | 87 ++++++++++++++++++++
 STM32CubeIDE/.settings/language.settings.xml |  4 +-
 STM32CubeIDE/WL55JC_AS923.cfg                | 46 +++++++++++
 3 files changed, 135 insertions(+), 2 deletions(-)
 create mode 100644 .gitignore
 create mode 100644 STM32CubeIDE/WL55JC_AS923.cfg

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bdc3590
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,87 @@
+# ---> C
+# Prerequisites
+*.d
+
+# Object files
+*.o
+*.ko
+*.obj
+*.e1f
+*.axf
+*.de
+*.cyclo
+*.list
+*.mk
+*.settings.xml
+*.mk
+# Linker output
+*.ilk
+*.map
+*.exp
+*.list
+*.su
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Libraries
+*.lib
+*.a
+*.la
+*.lo
+
+# Shared objects (inc. Windows DLLs)
+*.dll
+*.so
+*.so.*
+*.dylib
+
+
+# Executables
+*.exe
+*.out
+*.app
+*.i*86
+*.x86_64
+*.dep
+*.d
+*.o
+*.dp
+*.lst
+*.elf
+*.build_log
+*.build_log.htm
+
+
+# Debug files
+*.dSYM/
+*.su
+*.idb
+*.pdb
+*.dbgconf
+*.uvguix.lenovo
+*.uvoptx
+*.uvprojx
+*.build_log.htm
+*.htm
+*.map
+*.lnp
+*.sct
+*.crf
+*.lst
+
+
+# Kernel Module Compile Results
+*.mod*
+*.cmd
+*.htm
+*.html
+.tmp_versions/
+modules.order
+Module.symvers
+Mkfile.old
+dkms.conf
+*.cyclo
+*.settings.*
+
diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml
index 8480e85..816e149 100644
--- a/STM32CubeIDE/.settings/language.settings.xml
+++ b/STM32CubeIDE/.settings/language.settings.xml
@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-914207715913278870" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-752586124573436390" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,7 +16,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-914207715913278870" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-752586124573436390" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
diff --git a/STM32CubeIDE/WL55JC_AS923.cfg b/STM32CubeIDE/WL55JC_AS923.cfg
new file mode 100644
index 0000000..a32bf98
--- /dev/null
+++ b/STM32CubeIDE/WL55JC_AS923.cfg
@@ -0,0 +1,46 @@
+# This is an NUCLEO-WL55JC1 board with a single STM32WL55JCIx chip
+#
+# Generated by STM32CubeIDE
+# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s)
+
+source [find interface/stlink-dap.cfg]
+
+st-link backend tcp
+
+set WORKAREASIZE 0x8000
+
+transport select "dapdirect_swd"
+
+set CHIPNAME STM32WL55JCIx
+set BOARDNAME NUCLEO-WL55JC1
+
+# Enable debug when in low power modes
+set ENABLE_LOW_POWER 1
+
+# Stop Watchdog counters when halt
+set STOP_WATCHDOG 1
+
+# STlink Debug clock frequency
+set CLOCK_FREQ 8000
+
+# Reset configuration
+# use hardware reset, connect under reset
+# connect_assert_srst needed if low power mode application running (WFI...)
+reset_config srst_only srst_nogate connect_assert_srst
+set CONNECT_UNDER_RESET 1
+set CORE_RESET 0
+
+# ACCESS PORT NUMBER
+set AP_NUM 0
+# GDB PORT
+set GDB_PORT 3333
+
+
+
+
+set DUAL_CORE 1
+
+# BCTM CPU variables
+
+source [find target/stm32wlx.cfg]
+

From 3ac41b910da6efc88442565cb8bfcbe52202b178 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Fri, 21 Jun 2024 15:43:27 +0800
Subject: [PATCH 16/25] bad change.

---
 STM32CubeIDE/.project                        | 5 +++++
 STM32CubeIDE/.settings/language.settings.xml | 4 ++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/STM32CubeIDE/.project b/STM32CubeIDE/.project
index 49c6969..93ccc23 100644
--- a/STM32CubeIDE/.project
+++ b/STM32CubeIDE/.project
@@ -462,6 +462,11 @@
 			<type>1</type>
 			<locationURI>copy_PARENT/Core/Src/usart_if.c</locationURI>
 		</link>
+		<link>
+			<name>Application/User/Core/yunhorn_sts_weight_scale.c</name>
+			<type>1</type>
+			<location>D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_Node_55JC_AS923/STM32CubeIDE/Application/User/Core/yunhorn_sts_weight_scale.c</location>
+		</link>
 		<link>
 			<name>Drivers/BSP/STM32WLxx_Nucleo/stm32wlxx_nucleo.c</name>
 			<type>1</type>
diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml
index 8480e85..816e149 100644
--- a/STM32CubeIDE/.settings/language.settings.xml
+++ b/STM32CubeIDE/.settings/language.settings.xml
@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-914207715913278870" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-752586124573436390" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,7 +16,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-914207715913278870" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-752586124573436390" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>

From 91bb0ad919286f9eac63db1c867c04ebcdada8aa Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 27 Jun 2024 12:59:32 +0800
Subject: [PATCH 17/25] remove unused for master

---
 STM32CubeIDE/.project                             |  5 -----
 STM32CubeIDE/.settings/language.settings.xml      |  4 ++--
 STM32CubeIDE/.settings/stm32cubeide.project.prefs |  4 ++--
 STM32CubeIDE/STM32WL55JCIX_FLASH.ld               | 10 +++++-----
 4 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/STM32CubeIDE/.project b/STM32CubeIDE/.project
index 93ccc23..49c6969 100644
--- a/STM32CubeIDE/.project
+++ b/STM32CubeIDE/.project
@@ -462,11 +462,6 @@
 			<type>1</type>
 			<locationURI>copy_PARENT/Core/Src/usart_if.c</locationURI>
 		</link>
-		<link>
-			<name>Application/User/Core/yunhorn_sts_weight_scale.c</name>
-			<type>1</type>
-			<location>D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_Node_55JC_AS923/STM32CubeIDE/Application/User/Core/yunhorn_sts_weight_scale.c</location>
-		</link>
 		<link>
 			<name>Drivers/BSP/STM32WLxx_Nucleo/stm32wlxx_nucleo.c</name>
 			<type>1</type>
diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml
index 816e149..90666d3 100644
--- a/STM32CubeIDE/.settings/language.settings.xml
+++ b/STM32CubeIDE/.settings/language.settings.xml
@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-752586124573436390" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1200016478792897337" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,7 +16,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-752586124573436390" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1200016478792897337" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
diff --git a/STM32CubeIDE/.settings/stm32cubeide.project.prefs b/STM32CubeIDE/.settings/stm32cubeide.project.prefs
index f5b2341..261dff3 100644
--- a/STM32CubeIDE/.settings/stm32cubeide.project.prefs
+++ b/STM32CubeIDE/.settings/stm32cubeide.project.prefs
@@ -1,4 +1,4 @@
-2F62501ED4689FB349E356AB974DBE57=95112E708683D54F6AC1ADC68D917C29
-8DF89ED150041C4CBC7CB9A9CAA90856=95112E708683D54F6AC1ADC68D917C29
+2F62501ED4689FB349E356AB974DBE57=5C935C4C17B31F3FCDEC56E445F41B57
+8DF89ED150041C4CBC7CB9A9CAA90856=5C935C4C17B31F3FCDEC56E445F41B57
 DC22A860405A8BF2F2C095E5B6529F12=74CD6EB106FB50B767E4FE71225C7638
 eclipse.preferences.version=1
diff --git a/STM32CubeIDE/STM32WL55JCIX_FLASH.ld b/STM32CubeIDE/STM32WL55JCIX_FLASH.ld
index d45d121..43a7268 100644
--- a/STM32CubeIDE/STM32WL55JCIX_FLASH.ld
+++ b/STM32CubeIDE/STM32WL55JCIX_FLASH.ld
@@ -91,13 +91,13 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-  .ARM.extab   : {
+  .ARM.extab (READONLY)  : {
     . = ALIGN(8);
     *(.ARM.extab* .gnu.linkonce.armextab.*)
     . = ALIGN(8);
   } >FLASH
 
-  .ARM : {
+  .ARM (READONLY): {
     . = ALIGN(8);
     __exidx_start = .;
     *(.ARM.exidx*)
@@ -105,7 +105,7 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-  .preinit_array     :
+  .preinit_array (READONLY)    :
   {
     . = ALIGN(8);
     PROVIDE_HIDDEN (__preinit_array_start = .);
@@ -114,7 +114,7 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-  .init_array :
+  .init_array (READONLY):
   {
     . = ALIGN(8);
     PROVIDE_HIDDEN (__init_array_start = .);
@@ -124,7 +124,7 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-  .fini_array :
+  .fini_array (READONLY):
   {
     . = ALIGN(8);
     PROVIDE_HIDDEN (__fini_array_start = .);

From c55326d6265250bdedfae45fb9a60eb35ee555ed Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 27 Jun 2024 13:21:25 +0800
Subject: [PATCH 18/25] try bad, park here

---
 Core/Inc/sys_conf.h                               |  6 +++---
 STM32CubeIDE/.settings/language.settings.xml      |  6 +++---
 STM32CubeIDE/.settings/stm32cubeide.project.prefs |  2 ++
 STM32CubeIDE/STM32WL55JCIX_FLASH.ld               | 12 +++++-------
 4 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h
index 16d0145..73acea5 100644
--- a/Core/Inc/sys_conf.h
+++ b/Core/Inc/sys_conf.h
@@ -47,12 +47,12 @@ extern "C" {
 /**
   * @brief  Verbose level for all trace logs
   */
-#define VERBOSE_LEVEL                        VLEVEL_OFF
+#define VERBOSE_LEVEL                        VLEVEL_M
 
 /**
   * @brief Enable trace logs
   */
-#define APP_LOG_ENABLED                      0
+#define APP_LOG_ENABLED                      1
 
 /**
   * @brief Activate monitoring (probes) of some internal RF signals for debug purpose
@@ -81,7 +81,7 @@ extern "C" {
   * @brief Disable Low Power mode
   * @note  0: LowPowerMode enabled. MCU enters stop2 mode, 1: LowPowerMode disabled. MCU enters sleep mode only
   */
-#define LOW_POWER_DISABLE                    0
+#define LOW_POWER_DISABLE                    1
 
 /* USER CODE BEGIN EC */
 
diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml
index 879e516..90666d3 100644
--- a/STM32CubeIDE/.settings/language.settings.xml
+++ b/STM32CubeIDE/.settings/language.settings.xml
@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-752586124573436390" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1200016478792897337" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,10 +16,10 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-752586124573436390" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1200016478792897337" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
 		</extension>
 	</configuration>
-</project>
+</project>
\ No newline at end of file
diff --git a/STM32CubeIDE/.settings/stm32cubeide.project.prefs b/STM32CubeIDE/.settings/stm32cubeide.project.prefs
index 66ab618..f5b2341 100644
--- a/STM32CubeIDE/.settings/stm32cubeide.project.prefs
+++ b/STM32CubeIDE/.settings/stm32cubeide.project.prefs
@@ -1,2 +1,4 @@
+2F62501ED4689FB349E356AB974DBE57=95112E708683D54F6AC1ADC68D917C29
+8DF89ED150041C4CBC7CB9A9CAA90856=95112E708683D54F6AC1ADC68D917C29
 DC22A860405A8BF2F2C095E5B6529F12=74CD6EB106FB50B767E4FE71225C7638
 eclipse.preferences.version=1
diff --git a/STM32CubeIDE/STM32WL55JCIX_FLASH.ld b/STM32CubeIDE/STM32WL55JCIX_FLASH.ld
index 5a6bcc7..d45d121 100644
--- a/STM32CubeIDE/STM32WL55JCIX_FLASH.ld
+++ b/STM32CubeIDE/STM32WL55JCIX_FLASH.ld
@@ -91,13 +91,13 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-  .ARM.extab (READONLY)  : {
+  .ARM.extab   : {
     . = ALIGN(8);
     *(.ARM.extab* .gnu.linkonce.armextab.*)
     . = ALIGN(8);
   } >FLASH
 
-  .ARM(READONLY) : {
+  .ARM : {
     . = ALIGN(8);
     __exidx_start = .;
     *(.ARM.exidx*)
@@ -105,8 +105,7 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-
-  .preinit_array (READONLY)    :
+  .preinit_array     :
   {
     . = ALIGN(8);
     PROVIDE_HIDDEN (__preinit_array_start = .);
@@ -115,8 +114,7 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-
-  .init_array (READONLY):
+  .init_array :
   {
     . = ALIGN(8);
     PROVIDE_HIDDEN (__init_array_start = .);
@@ -126,7 +124,7 @@ SECTIONS
     . = ALIGN(8);
   } >FLASH
 
-  .fini_array(READONLY) :
+  .fini_array :
   {
     . = ALIGN(8);
     PROVIDE_HIDDEN (__fini_array_start = .);

From 7a90c82f924cab49844c1a087a569312bff2bd5b Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 27 Jun 2024 16:02:20 +0800
Subject: [PATCH 19/25] add env cfg

---
 .gitignore                                    | 87 +++++++++++++++++++
 STM32CubeIDE/.settings/language.settings.xml  |  4 +-
 .../.settings/org.eclipse.cdt.core.prefs      |  6 ++
 .../.settings/stm32cubeide.project.prefs      |  2 +-
 4 files changed, 96 insertions(+), 3 deletions(-)
 create mode 100644 .gitignore
 create mode 100644 STM32CubeIDE/.settings/org.eclipse.cdt.core.prefs

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bdc3590
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,87 @@
+# ---> C
+# Prerequisites
+*.d
+
+# Object files
+*.o
+*.ko
+*.obj
+*.e1f
+*.axf
+*.de
+*.cyclo
+*.list
+*.mk
+*.settings.xml
+*.mk
+# Linker output
+*.ilk
+*.map
+*.exp
+*.list
+*.su
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Libraries
+*.lib
+*.a
+*.la
+*.lo
+
+# Shared objects (inc. Windows DLLs)
+*.dll
+*.so
+*.so.*
+*.dylib
+
+
+# Executables
+*.exe
+*.out
+*.app
+*.i*86
+*.x86_64
+*.dep
+*.d
+*.o
+*.dp
+*.lst
+*.elf
+*.build_log
+*.build_log.htm
+
+
+# Debug files
+*.dSYM/
+*.su
+*.idb
+*.pdb
+*.dbgconf
+*.uvguix.lenovo
+*.uvoptx
+*.uvprojx
+*.build_log.htm
+*.htm
+*.map
+*.lnp
+*.sct
+*.crf
+*.lst
+
+
+# Kernel Module Compile Results
+*.mod*
+*.cmd
+*.htm
+*.html
+.tmp_versions/
+modules.order
+Module.symvers
+Mkfile.old
+dkms.conf
+*.cyclo
+*.settings.*
+
diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml
index 8480e85..90666d3 100644
--- a/STM32CubeIDE/.settings/language.settings.xml
+++ b/STM32CubeIDE/.settings/language.settings.xml
@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-914207715913278870" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1200016478792897337" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,7 +16,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-914207715913278870" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1200016478792897337" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
diff --git a/STM32CubeIDE/.settings/org.eclipse.cdt.core.prefs b/STM32CubeIDE/.settings/org.eclipse.cdt.core.prefs
new file mode 100644
index 0000000..c8ec5df
--- /dev/null
+++ b/STM32CubeIDE/.settings/org.eclipse.cdt.core.prefs
@@ -0,0 +1,6 @@
+doxygen/doxygen_new_line_after_brief=true
+doxygen/doxygen_use_brief_tag=false
+doxygen/doxygen_use_javadoc_tags=true
+doxygen/doxygen_use_pre_tag=false
+doxygen/doxygen_use_structural_commands=false
+eclipse.preferences.version=1
diff --git a/STM32CubeIDE/.settings/stm32cubeide.project.prefs b/STM32CubeIDE/.settings/stm32cubeide.project.prefs
index 481391e..f5b2341 100644
--- a/STM32CubeIDE/.settings/stm32cubeide.project.prefs
+++ b/STM32CubeIDE/.settings/stm32cubeide.project.prefs
@@ -1,4 +1,4 @@
 2F62501ED4689FB349E356AB974DBE57=95112E708683D54F6AC1ADC68D917C29
 8DF89ED150041C4CBC7CB9A9CAA90856=95112E708683D54F6AC1ADC68D917C29
-DC22A860405A8BF2F2C095E5B6529F12=708FD40520C1EE5CFD2122309291F653
+DC22A860405A8BF2F2C095E5B6529F12=74CD6EB106FB50B767E4FE71225C7638
 eclipse.preferences.version=1

From e4d7d6998dde47ebf66fa293ab69c16e3de8617e Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 27 Jun 2024 16:09:01 +0800
Subject: [PATCH 20/25] try back

---
 LoRaWAN/Target/lorawan_conf.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/LoRaWAN/Target/lorawan_conf.h b/LoRaWAN/Target/lorawan_conf.h
index 2a1f57e..a098ff6 100644
--- a/LoRaWAN/Target/lorawan_conf.h
+++ b/LoRaWAN/Target/lorawan_conf.h
@@ -94,10 +94,10 @@ extern "C" {
 /*#define REGION_CN470*/
 /*#define REGION_CN779*/
 /*#define REGION_EU433*/
-/*#define REGION_EU868*/
+#define REGION_EU868
 /*#define REGION_KR920*/
 /*#define REGION_IN865*/
-/*#define REGION_US915*/
+#define REGION_US915
 /*#define REGION_RU864*/
 
 /*!

From 06af55bf9cc335075f5d04c990d06d194d4d648b Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 27 Jun 2024 16:25:35 +0800
Subject: [PATCH 21/25] rebase standard v13

---
 Core/Inc/main.h          |  8 ++++-
 Core/Inc/sys_conf.h      |  2 +-
 Core/Inc/utilities_def.h |  2 +-
 Core/Src/gpio.c          | 38 +++++++++++++-----------
 Core/Src/rtc.c           |  4 +--
 Core/Src/stm32_lpm_if.c  | 27 ++---------------
 Core/Src/stm32wlxx_it.c  |  4 +--
 Core/Src/sys_app.c       | 12 +++++---
 Core/Src/usart.c         |  7 +----
 LoRaWAN/App/lora_app.c   | 64 ++++++++++++++++++----------------------
 10 files changed, 74 insertions(+), 94 deletions(-)

diff --git a/Core/Inc/main.h b/Core/Inc/main.h
index 645b59b..024dc11 100644
--- a/Core/Inc/main.h
+++ b/Core/Inc/main.h
@@ -85,8 +85,14 @@ void Error_Handler(void);
 #define USARTx_TX_GPIO_Port GPIOA
 
 /* USER CODE BEGIN Private defines */
+#ifdef STS_WS
+#define HX711_SCK_PIN GPIO_PIN_5
+#define HX711_DOUT_PIN GPIO_PIN_6
 
-/* USER CODE END Private defines */
+#define HX711_SCK_PORT GPIOA
+#define HX711_DOUT_PORT GPIOA
+#endif
+  /* USER CODE END Private defines */
 
 #ifdef __cplusplus
 }
diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h
index 73acea5..1f15237 100644
--- a/Core/Inc/sys_conf.h
+++ b/Core/Inc/sys_conf.h
@@ -81,7 +81,7 @@ extern "C" {
   * @brief Disable Low Power mode
   * @note  0: LowPowerMode enabled. MCU enters stop2 mode, 1: LowPowerMode disabled. MCU enters sleep mode only
   */
-#define LOW_POWER_DISABLE                    1
+#define LOW_POWER_DISABLE                    0
 
 /* USER CODE BEGIN EC */
 
diff --git a/Core/Inc/utilities_def.h b/Core/Inc/utilities_def.h
index f28e621..bcf7700 100644
--- a/Core/Inc/utilities_def.h
+++ b/Core/Inc/utilities_def.h
@@ -80,7 +80,7 @@ typedef enum
   CFG_SEQ_Task_LoRaStoreContextEvent,
   CFG_SEQ_Task_LoRaStopJoinEvent,
   /* USER CODE BEGIN CFG_SEQ_Task_Id_t */
-  CFG_SEQ_Task_YunhornSTSP1CheckingEvent,
+
   /* USER CODE END CFG_SEQ_Task_Id_t */
   CFG_SEQ_Task_NBR
 } CFG_SEQ_Task_Id_t;
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index f51ed30..914db3c 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -49,21 +49,6 @@ void MX_GPIO_Init(void)
   __HAL_RCC_GPIOC_CLK_ENABLE();
   __HAL_RCC_GPIOA_CLK_ENABLE();
 
-  GPIO_InitStruct.Pin = GPIO_PIN_All;
-  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
-  GPIO_InitStruct.Pull = GPIO_NOPULL;
-  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-  __HAL_RCC_GPIOB_CLK_DISABLE();
-  __HAL_RCC_GPIOC_CLK_DISABLE();
-
-  GPIO_InitStruct.Pin = BUT1_Pin;
-  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
-  GPIO_InitStruct.Pull = GPIO_PULLUP;
-  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-  __HAL_RCC_GPIOA_CLK_DISABLE();
-#if 0
   /*Configure GPIO pin Output Level */
   HAL_GPIO_WritePin(GPIOB, LED1_Pin|LED2_Pin|PROB2_Pin|PROB1_Pin
                           |LED3_Pin, GPIO_PIN_RESET);
@@ -93,17 +78,36 @@ void MX_GPIO_Init(void)
   GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
   GPIO_InitStruct.Pull = GPIO_PULLUP;
   HAL_GPIO_Init(BUT3_GPIO_Port, &GPIO_InitStruct);
+#ifdef STS_WS
+  // STS_Weight_Scale
+
+  // HX711_SCK
+  GPIO_InitStruct.Pin = HX711_SCK_PIN;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_PULLUP;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+  HAL_GPIO_Init(HX711_SCK_PORT, &GPIO_InitStruct);
+
+  // HX711_DOUT
+  GPIO_InitStruct.Pin = HX711_DOUT_PIN;
+  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+  GPIO_InitStruct.Pull = GPIO_PULLUP;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+  HAL_GPIO_Init(HX711_DOUT_PORT, &GPIO_InitStruct);
+
+  HAL_GPIO_WritePin(HX711_SCK_PORT, HX711_SCK_PIN, GPIO_PIN_RESET);
+
 #endif
   /* EXTI interrupt init*/
   HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(EXTI0_IRQn);
-#if 0
+
   HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(EXTI1_IRQn);
 
   HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
-#endif
+
 }
 
 /* USER CODE BEGIN 2 */
diff --git a/Core/Src/rtc.c b/Core/Src/rtc.c
index 918ceaf..04a8214 100644
--- a/Core/Src/rtc.c
+++ b/Core/Src/rtc.c
@@ -65,7 +65,7 @@ void MX_RTC_Init(void)
   {
     Error_Handler();
   }
-#if 0
+
   /** Enable the Alarm A
   */
   sAlarm.BinaryAutoClr = RTC_ALARMSUBSECONDBIN_AUTOCLR_NO;
@@ -78,7 +78,7 @@ void MX_RTC_Init(void)
     Error_Handler();
   }
   /* USER CODE BEGIN RTC_Init 2 */
-#endif
+
   /* USER CODE END RTC_Init 2 */
 
 }
diff --git a/Core/Src/stm32_lpm_if.c b/Core/Src/stm32_lpm_if.c
index 9d98b45..8b623ee 100644
--- a/Core/Src/stm32_lpm_if.c
+++ b/Core/Src/stm32_lpm_if.c
@@ -25,7 +25,7 @@
 #include "usart_if.h"
 
 /* USER CODE BEGIN Includes */
-#include "gpio.h"
+
 /* USER CODE END Includes */
 
 /* External variables ---------------------------------------------------------*/
@@ -78,30 +78,14 @@ const struct UTIL_LPM_Driver_s UTIL_PowerDriver =
 void PWR_EnterOffMode(void)
 {
   /* USER CODE BEGIN EnterOffMode_1 */
-	  /* Enable Power Clock */
-		HAL_SuspendTick();
 
-	  /* Disable all used wakeup sources: Pin1(PA.0) */
-	  HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1|PWR_WAKEUP_PIN2|PWR_WAKEUP_PIN3);
-
-	  /* Clear all related wakeup flags */
-	  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
-
-	  /* Re-enable all used wakeup sources: Pin1(PA.0) */
-	  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
-
-	  /*## Enter Standby Mode ####################################################*/
-	  /* Request to enter STANDBY mode  */
-	  HAL_PWR_EnterSTANDBYMode();
   /* USER CODE END EnterOffMode_1 */
 }
 
 void PWR_ExitOffMode(void)
 {
   /* USER CODE BEGIN ExitOffMode_1 */
-	  //HAL_ResumeTick();
-	  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
-	  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
+
   /* USER CODE END ExitOffMode_1 */
 }
 
@@ -110,10 +94,6 @@ void PWR_EnterStopMode(void)
   /* USER CODE BEGIN EnterStopMode_1 */
 
   /* USER CODE END EnterStopMode_1 */
-	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_All, GPIO_PIN_RESET);
-	HAL_GPIO_WritePin(GPIOA, ~GPIO_PIN_0, GPIO_PIN_RESET);
-	vcom_DeInit();
-
   HAL_SuspendTick();
   /* Clear Status Flag before entering STOP/STANDBY Mode */
   LL_PWR_ClearFlag_C1STOP_C1STB();
@@ -140,8 +120,7 @@ void PWR_ExitStopMode(void)
     SRAM ctrls, DMAx, DMAMux, AES, RNG, HSEM  */
 
   /* Resume not retained USARTx and DMA */
-  //MX_GPIO_Init();
-  //vcom_Resume();
+  vcom_Resume();
   /* USER CODE BEGIN ExitStopMode_2 */
 
   /* USER CODE END ExitStopMode_2 */
diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c
index bfc2186..66231ac 100644
--- a/Core/Src/stm32wlxx_it.c
+++ b/Core/Src/stm32wlxx_it.c
@@ -227,7 +227,7 @@ void EXTI0_IRQHandler(void)
 
   /* USER CODE END EXTI0_IRQn 1 */
 }
-#if 0
+
 /**
   * @brief This function handles EXTI Line 1 Interrupt.
   */
@@ -283,7 +283,7 @@ void USART2_IRQHandler(void)
 
   /* USER CODE END USART2_IRQn 1 */
 }
-#endif
+
 /**
   * @brief This function handles RTC Alarms (A and B) Interrupt.
   */
diff --git a/Core/Src/sys_app.c b/Core/Src/sys_app.c
index 42d7e5d..82baf7f 100644
--- a/Core/Src/sys_app.c
+++ b/Core/Src/sys_app.c
@@ -32,7 +32,9 @@
 #include "sys_sensors.h"
 
 /* USER CODE BEGIN Includes */
-
+#ifdef STS_WS
+#include "sts_weight_scale.h"
+#endif
 /* USER CODE END Includes */
 
 /* External variables ---------------------------------------------------------*/
@@ -100,7 +102,7 @@ void SystemApp_Init(void)
   UTIL_TIMER_Init();
   SYS_TimerInitialisedFlag = 1;
   /* Initializes the SW probes pins and the monitor RF pins via Alternate Function */
-  //DBG_Init();
+  DBG_Init();
 
   /*Initialize the terminal */
   UTIL_ADV_TRACE_Init();
@@ -117,12 +119,14 @@ void SystemApp_Init(void)
 
   /*Initialize the Sensors */
   EnvSensors_Init();
-
+#ifdef STS_WS
+  sts_weight_scale_init();
+#endif
   /*Init low power manager*/
   UTIL_LPM_Init();
   /* Disable Stand-by mode */
   UTIL_LPM_SetOffMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_DISABLE);
-  UTIL_LPM_SetOffMode((1 << CFG_LPM_UART_TX_Id), UTIL_LPM_ENABLE);
+
 #if defined (LOW_POWER_DISABLE) && (LOW_POWER_DISABLE == 1)
   /* Disable Stop Mode */
   UTIL_LPM_SetStopMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_DISABLE);
diff --git a/Core/Src/usart.c b/Core/Src/usart.c
index 62e4a98..bf9fd2b 100644
--- a/Core/Src/usart.c
+++ b/Core/Src/usart.c
@@ -100,18 +100,13 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
     PA3     ------> USART2_RX
     PA2     ------> USART2_TX
     */
-    GPIO_InitStruct.Pin = USARTx_TX_Pin;
+    GPIO_InitStruct.Pin = USARTx_RX_Pin|USARTx_TX_Pin;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
     GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
-    GPIO_InitStruct.Pin = USARTx_RX_Pin;
-    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
     /* USART2 DMA Init */
     /* USART2_TX Init */
     hdma_usart2_tx.Instance = DMA1_Channel5;
diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index 43dc765..0d4e937 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -36,7 +36,9 @@
 #include "flash_if.h"
 
 /* USER CODE BEGIN Includes */
-#include "gpio.h"
+#ifdef STS_WS
+#include "sts_weight_scale.h"
+#endif
 /* USER CODE END Includes */
 
 /* External variables ---------------------------------------------------------*/
@@ -215,7 +217,6 @@ static void OnPingSlotPeriodicityChanged(uint8_t pingSlotPeriodicity);
 static void OnSystemReset(void);
 
 /* USER CODE BEGIN PFP */
-static void OnYunhornSTSP1CheckingEvent(void);
 
 /**
   * @brief  LED Tx timer callback function
@@ -301,7 +302,7 @@ static UTIL_TIMER_Object_t TxTimer;
 /**
   * @brief Tx Timer period
   */
-static UTIL_TIMER_Time_t TxPeriodicity = 1000;
+static UTIL_TIMER_Time_t TxPeriodicity = APP_TX_DUTYCYCLE;
 
 /**
   * @brief Join Timer period
@@ -343,8 +344,7 @@ static UTIL_TIMER_Object_t JoinLedTimer;
 
 /* Exported functions ---------------------------------------------------------*/
 /* USER CODE BEGIN EF */
-volatile uint8_t door_status=0, door_changed_flag=0, door_previous_status=0;
-volatile uint32_t checking_sn=0;
+
 /* USER CODE END EF */
 
 void LoRaWAN_Init(void)
@@ -406,7 +406,7 @@ void LoRaWAN_Init(void)
   UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), UTIL_SEQ_RFU, SendTxData);
   UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LoRaStoreContextEvent), UTIL_SEQ_RFU, StoreContext);
   UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LoRaStopJoinEvent), UTIL_SEQ_RFU, StopJoin);
-  UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSP1CheckingEvent),UTIL_SEQ_RFU, OnYunhornSTSP1CheckingEvent);
+
   /* Init Info table used by LmHandler*/
   LoraInfo_Init();
 
@@ -425,7 +425,7 @@ void LoRaWAN_Init(void)
   if (EventType == TX_ON_TIMER)
   {
     /* send every time timer elapses */
-    UTIL_TIMER_Create(&TxTimer, TxPeriodicity, UTIL_TIMER_PERIODIC, OnTxTimerEvent, NULL);
+    UTIL_TIMER_Create(&TxTimer, TxPeriodicity, UTIL_TIMER_ONESHOT, OnTxTimerEvent, NULL);
     UTIL_TIMER_Start(&TxTimer);
   }
   else
@@ -448,9 +448,6 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
   {
     case  BUT1_Pin:
       /* Note: when "EventType == TX_ON_TIMER" this GPIO is not initialized */
-    	door_changed_flag = 1;
-    	UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSP1CheckingEvent), CFG_SEQ_Prio_0);
-
       if (EventType == TX_ON_EVENT)
       {
         UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
@@ -471,21 +468,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 
 /* Private functions ---------------------------------------------------------*/
 /* USER CODE BEGIN PrFD */
-static void OnYunhornSTSP1CheckingEvent(void)
-{
 
-
-	door_status = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
-
-	if (door_status != door_previous_status)
-	{
-		door_previous_status = door_status;
-		door_changed_flag = 1;
-		APP_LOG(TS_OFF,VLEVEL_M,"\r\n----- Door Status Changed-------------\r\n");
-	}
-
-	//UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
-}
 /* USER CODE END PrFD */
 
 static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params)
@@ -574,6 +557,9 @@ static void SendTxData(void)
   LmHandlerErrorStatus_t status = LORAMAC_HANDLER_ERROR;
   uint8_t batteryLevel = GetBatteryLevel();
   sensor_t sensor_data;
+#ifdef STS_WS
+  sts_sensor_t	sts_sensor_data;
+#endif
   UTIL_TIMER_Time_t nextTxIn = 0;
 
   if (LmHandlerIsBusy() == false)
@@ -591,10 +577,14 @@ static void SendTxData(void)
 #endif /* CAYENNE_LPP */
 
     EnvSensors_Read(&sensor_data);
-#if 0
+#ifdef STS_WS
+    sts_weight_scale(&sts_sensor_data);
+    APP_LOG(TS_ON, VLEVEL_M, "Weigt Scale : %d\r\n", sts_sensor_data.weight_scale_value);
+
+#endif
     APP_LOG(TS_ON, VLEVEL_M, "VDDA: %d\r\n", batteryLevel);
     APP_LOG(TS_ON, VLEVEL_M, "temp: %d\r\n", (int16_t)(sensor_data.temperature));
-#endif
+
     AppData.Port = LORAWAN_USER_APP_PORT;
 
 #ifdef CAYENNE_LPP
@@ -629,8 +619,8 @@ static void SendTxData(void)
     {
       AppData.Buffer[i++] = 0;
       AppData.Buffer[i++] = 0;
-      AppData.Buffer[i++] = (uint8_t)(99*GetBatteryLevel()/255);        /* 1 (very low) to 254 (fully charged) */
-      AppData.Buffer[i++] = door_status;
+      AppData.Buffer[i++] = 0;
+      AppData.Buffer[i++] = 0;
     }
     else
     {
@@ -647,7 +637,10 @@ static void SendTxData(void)
       AppData.Buffer[i++] = (uint8_t)((altitudeGps >> 8) & 0xFF);
       AppData.Buffer[i++] = (uint8_t)(altitudeGps & 0xFF);
     }
-
+#ifdef STS_WS
+    AppData.Buffer[i++] = (uint8_t)(sts_sensor_data.weight_scale_value >> 8& 0xFF);
+    AppData.Buffer[i++] = (uint8_t)(sts_sensor_data.weight_scale_value & 0xFF);
+#endif
     AppData.BufferSize = i;
 #endif /* CAYENNE_LPP */
 
@@ -685,13 +678,12 @@ static void SendTxData(void)
 static void OnTxTimerEvent(void *context)
 {
   /* USER CODE BEGIN OnTxTimerEvent_1 */
-    UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSP1CheckingEvent), CFG_SEQ_Prio_0);
-    if (door_changed_flag ==1)
-    {
-    	door_changed_flag =0;
-    	UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
-    	//UTIL_TIMER_Start(&TxTimer);
-	}
+
+  /* USER CODE END OnTxTimerEvent_1 */
+  UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
+
+  /*Wait for next tx slot*/
+  UTIL_TIMER_Start(&TxTimer);
   /* USER CODE BEGIN OnTxTimerEvent_2 */
 
   /* USER CODE END OnTxTimerEvent_2 */

From a2230e764a26e3263460ae4e65ce9a7514cfd503 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 27 Jun 2024 16:27:13 +0800
Subject: [PATCH 22/25] ---- additional file for WS

---
 Core/Inc/sts_weight_scale.h |  63 +++++++++++
 Core/Src/sts_weight_scale.c | 217 ++++++++++++++++++++++++++++++++++++
 2 files changed, 280 insertions(+)
 create mode 100644 Core/Inc/sts_weight_scale.h
 create mode 100644 Core/Src/sts_weight_scale.c

diff --git a/Core/Inc/sts_weight_scale.h b/Core/Inc/sts_weight_scale.h
new file mode 100644
index 0000000..2223e8b
--- /dev/null
+++ b/Core/Inc/sts_weight_scale.h
@@ -0,0 +1,63 @@
+/* USER CODE BEGIN Header */
+/**
+  ******************************************************************************
+  * @file    yunhorn_sts_weight_scale.h    									   *
+  * @author  Yunhorn (r) Technology Limited Application Team	               *
+  * @brief   Yunhorn (r) SmarToilets (r) Product configuration file.		   *
+  ******************************************************************************
+  * @attention
+  *
+  * Copyright (c) 2024 Yunhorn Technology Limited.
+  * Copyright (c) 2024 Shenzhen Yunhorn Technology Co., Ltd.
+  * All rights reserved.
+  *
+  * This software is licensed under terms that can be found in the LICENSE file
+  * in the root directory of this software component.
+  * If no LICENSE file comes with this software, it is provided AS-IS.
+  *
+  ******************************************************************************
+  */
+/* USER CODE END Header */
+
+
+#ifndef YUNHORN_STS_WEIGHT_SCALE_H_
+#define YUNHORN_STS_WEIGHT_SCALE_H_
+#include "main.h"
+#include "sys_app.h"
+
+
+
+typedef struct
+{
+	uint32_t	weight_scale_value;
+  float pressure;         /*!< in mbar */
+  float temperature;      /*!< in degC */
+  float humidity;         /*!< in % */
+  int32_t latitude;       /*!< latitude converted to binary */
+  int32_t longitude;      /*!< longitude converted to binary */
+  int16_t altitudeGps;    /*!< in m */
+  int16_t altitudeBar;    /*!< in m * 10 */
+  /**more may be added*/
+  /* USER CODE BEGIN sensor_t */
+
+  /* USER CODE END sensor_t */
+} sts_sensor_t;
+
+
+
+void sts_weight_scale_init(void);
+void sts_weight_scale(sts_sensor_t *sensor_data);
+void HX711_Init(void);
+void Init_HX711pin(void);
+uint32_t HX711_Read(void);
+void Get_GrossWeight(void);
+void Get_NetWeight(void);
+
+void delay_init(void);
+void delay_ms(uint16_t nms);
+void delay_us(uint32_t nus);
+
+
+
+
+#endif /* YUNHORN_STS_WEIGHT_SCALE_H_ */
diff --git a/Core/Src/sts_weight_scale.c b/Core/Src/sts_weight_scale.c
new file mode 100644
index 0000000..bdee0a7
--- /dev/null
+++ b/Core/Src/sts_weight_scale.c
@@ -0,0 +1,217 @@
+/* USER CODE BEGIN Header */
+/**
+  ******************************************************************************
+  * @file    yunhorn_sts_weight_scale.c      								   *
+  * @author  Yunhorn (r) Technology Limited Application Team	               *
+  * @brief   Yunhorn (r) SmarToilets (r) Product configuration file.		   *
+  ******************************************************************************
+  * @attention
+  *
+  * Copyright (c) 2024 Yunhorn Technology Limited.
+  * Copyright (c) 2024 Shenzhen Yunhorn Technology Co., Ltd.
+  * All rights reserved.
+  *
+  * This software is licensed under terms that can be found in the LICENSE file
+  * in the root directory of this software component.
+  * If no LICENSE file comes with this software, it is provided AS-IS.
+  *
+  ******************************************************************************
+  */
+/* USER CODE END Header */
+#include "sts_weight_scale.h"
+
+uint32_t HX711_Buffer;
+volatile uint32_t gross_weight;
+int32_t net_weight;
+uint8_t Flag_Error;
+volatile uint32_t last_net_weight=0;
+volatile sts_sensor_t sts_sensor_data;
+void sts_weight_scale_init(void)
+{
+	HX711_Init();
+	Get_GrossWeight();
+	HAL_Delay(500);
+	Get_GrossWeight();
+}
+
+void sts_weight_scale(sts_sensor_t *sts_sensor_data)
+{
+	
+	//while(1)
+	{
+		Get_NetWeight();
+		APP_LOG(TS_OFF, VLEVEL_M, "Net Weight = %d  g \r\n", net_weight);
+		sts_sensor_data->weight_scale_value=net_weight;
+
+		last_net_weight = net_weight;
+		if (((last_net_weight - net_weight) > 100) && (net_weight > 100))		// re-calibrate
+		{
+			Get_GrossWeight();
+			HAL_Delay(100);
+			Get_GrossWeight();
+			//HAL_Delay(2000);
+			Get_NetWeight();
+		}
+		//HAL_Delay(2000);
+
+	}
+}
+
+/************************************************************************************
+						
+*************************************************************************************/
+
+
+uint8_t Flag_Error = 0;
+
+//校准参数
+//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
+//当发现测试出来的重量偏大时,增加该数值。
+//如果测试出来的重量偏小时,减小改数值。
+//该值可以为小数
+//#define GapValue 106.5
+#define GapValue 903.2		// for 1kg bar
+
+void HX711_Init(void)
+{
+	GPIO_InitTypeDef GPIO_InitStruct = {0};
+	__HAL_RCC_GPIOA_CLK_ENABLE();
+
+	GPIO_InitStruct.Pin = HX711_SCK_PIN;
+	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+	GPIO_InitStruct.Pull = GPIO_PULLUP;
+	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+	HAL_GPIO_Init(HX711_SCK_PORT, &GPIO_InitStruct);
+
+	//HX711_DOUT
+	GPIO_InitStruct.Pin = HX711_DOUT_PIN;
+	GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+	GPIO_InitStruct.Pull = GPIO_PULLUP;
+	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+	HAL_GPIO_Init(HX711_DOUT_PORT, &GPIO_InitStruct);
+
+	HAL_GPIO_WritePin(HX711_SCK_PORT, HX711_SCK_PIN, GPIO_PIN_RESET);
+
+}
+
+//****************************************************
+//读取HX711
+//****************************************************
+uint32_t HX711_Read(void)	//增益128
+{
+	uint32_t	count;
+	uint8_t i;
+  	//HX711_DOUT=1;
+	HAL_GPIO_WritePin(HX711_DOUT_PORT, HX711_DOUT_PIN, GPIO_PIN_SET);
+
+	delay_us(1);
+  	//HX711_SCK=0;
+	HAL_GPIO_WritePin(HX711_SCK_PORT, HX711_SCK_PIN, GPIO_PIN_RESET);
+
+  	count=0; 
+
+   	//while(HX711_DOUT);
+  	while(HAL_GPIO_ReadPin(HX711_DOUT_PORT, HX711_DOUT_PIN)==GPIO_PIN_SET);
+
+  	for(i=0;i<24;i++)
+	{ 
+	  	//HX711_SCK=1;
+  		HAL_GPIO_WritePin(HX711_SCK_PORT, HX711_SCK_PIN, GPIO_PIN_SET);
+
+	  	count=count<<1; 
+		delay_us(1);
+
+		//HX711_SCK=0;
+		HAL_GPIO_WritePin(HX711_SCK_PORT, HX711_SCK_PIN, GPIO_PIN_RESET);
+
+		//if(HX711_DOUT)
+		if (HAL_GPIO_ReadPin(HX711_DOUT_PORT, HX711_DOUT_PIN)==GPIO_PIN_SET)
+			count++; 
+
+		delay_us(1);
+	} 
+ 	//HX711_SCK=1;
+  	HAL_GPIO_WritePin(HX711_SCK_PORT, HX711_SCK_PIN, GPIO_PIN_SET);
+    count=count^0x800000;//第25个脉冲下降沿来时,转换数据
+
+	delay_us(1);
+
+	//HX711_SCK=0;
+	HAL_GPIO_WritePin(HX711_SCK_PORT, HX711_SCK_PIN, GPIO_PIN_RESET);
+
+	return(count);
+}
+
+//****************************************************
+//Get Gross Weight
+//****************************************************
+void Get_GrossWeight(void)
+{
+	gross_weight = HX711_Read();
+	APP_LOG(TS_OFF, VLEVEL_M, "\r\n #####  Gross Weight =%d   <<<<<< \r\n",gross_weight);
+} 
+
+//****************************************************
+//Weight Scale
+//****************************************************
+void Get_NetWeight(void)
+{
+	HX711_Buffer = HX711_Read();
+
+	if(HX711_Buffer > gross_weight)
+	{
+		net_weight = HX711_Buffer;
+		net_weight = net_weight - gross_weight;				//获取实物的AD采样数值。
+	
+		net_weight = (int32_t)((float)net_weight/GapValue); 	//计算实物的实际重量
+																		//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的GapValue这个除数。
+																		//当发现测试出来的重量偏大时,增加该数值。
+
+		APP_LOG(TS_OFF, VLEVEL_M, "\r\n #####  Net Weight =%d   \r\n", net_weight);//如果测试出来的重量偏小时,减小改数值。
+	}
+}
+
+
+//延时nus
+//nus为要延时的us数.
+static uint8_t  fac_us=0;//us延时倍乘数
+static uint16_t fac_ms=0;//ms延时倍乘数
+
+
+void delay_us(uint32_t nus)
+{
+	fac_us=SystemCoreClock/8000000;	//为系统时钟的1/8
+	uint32_t temp;
+	SysTick->LOAD=nus*fac_us; //时间加载	  		 
+	SysTick->VAL=0x00;        //清空计数器
+	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //开始倒数	 
+	do
+	{
+		temp=SysTick->CTRL;
+	}
+	while(temp&0x01&&!(temp&(1<<16)));//等待时间到达			//bit16置一说明时间到,跳出循环   
+	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //关闭计数器
+	SysTick->VAL =0X00;       //清空计数器	 
+}
+//延时nms
+//注意nms的范围
+//SysTick->LOAD为24位寄存器,所以,最大延时为:
+//nms<=0xffffff*8*1000/SYSCLK
+//SYSCLK单位为Hz,nms单位为ms
+//对72M条件下,nms<=1864 
+void delay_ms(uint16_t nms)
+{	 		  	  
+	fac_us=SystemCoreClock/8000000;	//为系统时钟的1/8
+	fac_ms=(uint16_t)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数
+	uint32_t temp;
+	SysTick->LOAD=(uint32_t)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
+	SysTick->VAL =0x00;           //清空计数器
+	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //开始倒数  
+	do
+	{
+		temp=SysTick->CTRL;
+	}
+	while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   
+	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //关闭计数器
+	SysTick->VAL =0X00;       //清空计数器	  	    
+} 

From fbd0721b08f528cc23913ecbb6a0de89fb0d8dec Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 10 Oct 2024 15:28:11 +0800
Subject: [PATCH 23/25] --- update bin file

---
 STM32CubeIDE/.settings/language.settings.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/STM32CubeIDE/.settings/language.settings.xml b/STM32CubeIDE/.settings/language.settings.xml
index 90666d3..7768bdb 100644
--- a/STM32CubeIDE/.settings/language.settings.xml
+++ b/STM32CubeIDE/.settings/language.settings.xml
@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1200016478792897337" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1048471218779752885" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,7 +16,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1200016478792897337" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1048471218779752885" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>

From 5b6a7416c9209a487ea7e41c06a6257626f2325c Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Thu, 10 Oct 2024 20:45:39 +0800
Subject: [PATCH 24/25] wip

---
 STM32CubeIDE/Release/makefile   | 1 +
 STM32CubeIDE/Release/sources.mk | 1 +
 2 files changed, 2 insertions(+)

diff --git a/STM32CubeIDE/Release/makefile b/STM32CubeIDE/Release/makefile
index cc20b6b..809ed37 100644
--- a/STM32CubeIDE/Release/makefile
+++ b/STM32CubeIDE/Release/makefile
@@ -15,6 +15,7 @@ RM := rm -rf
 -include Drivers/STM32WLxx_HAL_Driver/subdir.mk
 -include Drivers/CMSIS/subdir.mk
 -include Drivers/BSP/STM32WLxx_Nucleo/subdir.mk
+-include Drivers/BSP/53L8A1/subdir.mk
 -include Application/User/Startup/subdir.mk
 -include Application/User/LoRaWAN/Target/subdir.mk
 -include Application/User/LoRaWAN/App/subdir.mk
diff --git a/STM32CubeIDE/Release/sources.mk b/STM32CubeIDE/Release/sources.mk
index a11435c..b0e063e 100644
--- a/STM32CubeIDE/Release/sources.mk
+++ b/STM32CubeIDE/Release/sources.mk
@@ -26,6 +26,7 @@ Application/User/Core \
 Application/User/LoRaWAN/App \
 Application/User/LoRaWAN/Target \
 Application/User/Startup \
+Drivers/BSP/53L8A1 \
 Drivers/BSP/STM32WLxx_Nucleo \
 Drivers/CMSIS \
 Drivers/STM32WLxx_HAL_Driver \

From b997ca7603918803df7cd771465f31dd38eee292 Mon Sep 17 00:00:00 2001
From: YunHorn Technology <dp.s@yunhorn.com>
Date: Fri, 11 Oct 2024 20:24:30 +0800
Subject: [PATCH 25/25] --- updated for region

---
 LoRaWAN/Target/lorawan_conf.h   | 4 ++--
 STM32CubeIDE/Release/makefile   | 1 -
 STM32CubeIDE/Release/sources.mk | 1 -
 3 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/LoRaWAN/Target/lorawan_conf.h b/LoRaWAN/Target/lorawan_conf.h
index a098ff6..2a1f57e 100644
--- a/LoRaWAN/Target/lorawan_conf.h
+++ b/LoRaWAN/Target/lorawan_conf.h
@@ -94,10 +94,10 @@ extern "C" {
 /*#define REGION_CN470*/
 /*#define REGION_CN779*/
 /*#define REGION_EU433*/
-#define REGION_EU868
+/*#define REGION_EU868*/
 /*#define REGION_KR920*/
 /*#define REGION_IN865*/
-#define REGION_US915
+/*#define REGION_US915*/
 /*#define REGION_RU864*/
 
 /*!
diff --git a/STM32CubeIDE/Release/makefile b/STM32CubeIDE/Release/makefile
index 809ed37..cc20b6b 100644
--- a/STM32CubeIDE/Release/makefile
+++ b/STM32CubeIDE/Release/makefile
@@ -15,7 +15,6 @@ RM := rm -rf
 -include Drivers/STM32WLxx_HAL_Driver/subdir.mk
 -include Drivers/CMSIS/subdir.mk
 -include Drivers/BSP/STM32WLxx_Nucleo/subdir.mk
--include Drivers/BSP/53L8A1/subdir.mk
 -include Application/User/Startup/subdir.mk
 -include Application/User/LoRaWAN/Target/subdir.mk
 -include Application/User/LoRaWAN/App/subdir.mk
diff --git a/STM32CubeIDE/Release/sources.mk b/STM32CubeIDE/Release/sources.mk
index b0e063e..a11435c 100644
--- a/STM32CubeIDE/Release/sources.mk
+++ b/STM32CubeIDE/Release/sources.mk
@@ -26,7 +26,6 @@ Application/User/Core \
 Application/User/LoRaWAN/App \
 Application/User/LoRaWAN/Target \
 Application/User/Startup \
-Drivers/BSP/53L8A1 \
 Drivers/BSP/STM32WLxx_Nucleo \
 Drivers/CMSIS \
 Drivers/STM32WLxx_HAL_Driver \