diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 751a611..902f79e 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -64,8 +64,8 @@ void Error_Handler(void); #define LED1_Pin GPIO_PIN_15 #define LED1_GPIO_Port GPIOB #endif -#define LED2_Pin GPIO_PIN_9 -#define LED2_GPIO_Port GPIOB +// #define LED2_Pin GPIO_PIN_9 +// #define LED2_GPIO_Port GPIOB #define BUT1_Pin GPIO_PIN_0 #define BUT1_GPIO_Port GPIOA #define BUT1_EXTI_IRQn EXTI0_IRQn @@ -78,6 +78,7 @@ void Error_Handler(void); #if defined(STM32WL55xx) #define BUT3_Pin GPIO_PIN_6 #define BUT3_GPIO_Port GPIOC +#endif #define BUT3_EXTI_IRQn EXTI9_5_IRQn #endif #if defined(STM32WLE5xx) @@ -92,9 +93,42 @@ void Error_Handler(void); #define USARTx_TX_GPIO_Port GPIOA /* USER CODE BEGIN Private defines */ +#if defined(STS_O7)||defined(L8) + +#define HALL1_Pin GPIO_PIN_0 // DOOR CONTACT +#define HALL1_GPIO_Port GPIOA +#define HALL1_EXTI_IRQn EXTI0_IRQn + +#define HALL2_Pin GPIO_PIN_1 // EMERGENCY BUTTON OR SOS BUTTON +#define HALL2_GPIO_Port GPIOA +#define HALL2_EXTI_IRQn EXTI1_IRQn + +#define PIR_Pin GPIO_PIN_6 // PIR SENSOR PIN +#define PIR_GPIO_Port GPIOB +#define PIR_EXTI_IRQn EXTI9_5_IRQn +#if 0 +#define HALL3_Pin GPIO_PIN_9 // ALARM MUTE PIN +#define HALL3_GPIO_Port GPIOA +#define HALL3_EXTI_IRQn EXTI9_5_IRQn + +#define HALL4_Pin GPIO_PIN_10 // ALARM RESET PIN +#define HALL4_GPIO_Port GPIOA +#define HALL4_EXTI_IRQn EXTI15_10_IRQn + +#define ALARM_MUTE_Pin HALL3_Pin // ALARM MUTE BUTTON +#define ALARM_RESET_Pin HALL4_Pin // ALARM RESET BUTTON +#endif +#define HALL1_STATE HAL_GPIO_ReadPin(HALL1_GPIO_Port, HALL1_Pin) //DOOR CONTACT +#define HALL2_STATE HAL_GPIO_ReadPin(HALL2_GPIO_Port, HALL2_Pin) //SOS BUTTON +#define HALL3_STATE HAL_GPIO_ReadPin(HALL3_GPIO_Port, HALL3_Pin) //ALARM MUTE BUTTON +#define HALL4_STATE HAL_GPIO_ReadPin(HALL4_GPIO_Port, HALL4_Pin) //ALARM RESET BUTTON +#define PIR_STATE HAL_GPIO_ReadPin(PIR_GPIO_Port, PIR_Pin) //PIR SENSOR + +#else #define BUT1_Pin GPIO_PIN_0 #define BUT1_GPIO_Port GPIOA #define BUT1_EXTI_IRQn EXTI0_IRQn +#endif #define BUT2_Pin GPIO_PIN_1 #define BUT2_GPIO_Port GPIOA @@ -126,6 +160,27 @@ void Error_Handler(void); #define BUT1_State HAL_GPIO_ReadPin(BUT1_GPIO_Port, BUT1_Pin) #define BUT2_State HAL_GPIO_ReadPin(BUT2_GPIO_Port, BUT2_Pin) +// RED LED +#define LED2_Pin GPIO_PIN_7 +#define LED2_GPIO_Port GPIOB + +// GREEN LED +#define LED1_ON HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET ) +#define LED1_OFF HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET) + +// RED LED +#define LED2_ON HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET ) +#define LED2_OFF HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET) + +#define LED_GREEN_ON LED1_ON +#define LED_GREEN_OFF LED1_OFF + +#define LED_RED_ON LED2_ON +#define LED_RED_OFF LED2_OFF + +#define LED1_STATE HAL_GPIO_ReadPin(LED1_GPIO_Port, LED1_Pin) +#define LED1_TOGGLE HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin) + #define LED1_ON HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET ) #define LED1_OFF HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET) #define LED1_STATE HAL_GPIO_ReadPin(LED1_GPIO_Port, LED1_Pin) @@ -137,7 +192,12 @@ void Error_Handler(void); #define MEMS_RESET_Pin GPIO_PIN_4 #define MEMS_RESET_GPIO_Port GPIOB +#else +#define MEMS_POWER_Pin GPIO_PIN_4 // PMU_ENABLE +#define MEMS_POWER_GPIO_Port GPIOB // PMU_ENABLE +#define MEMS_RESET_Pin GPIO_PIN_4 +#define MEMS_RESET_GPIO_Port GPIOB #endif @@ -235,17 +295,15 @@ void Error_Handler(void); #endif // defined(VL53LX)||defined(VL53L0) /* VL53L8A1 for Power_En, LPn, Int */ +/* for Yunhorn STS_RM1.3 Round PCB */ #ifdef L8 -#define TOF_INT_EXTI_PIN (GPIO_PIN_10) //(GPIO_PIN_4) +#define TOF_INT_EXTI_PIN (GPIO_PIN_15) //(GPIO_PIN_4) #define TOF_INT_EXTI_PORT (GPIOA) //(GPIOA) #define TOF_INT_EXTI_IRQn EXTI15_10_IRQn - -#define VL53L8A1_PWR_EN_C_PIN (GPIO_PIN_7) //(GPIO_PIN_7) -#define VL53L8A1_PWR_EN_C_PORT (GPIOA) //(GPIOA) - -#define VL53L8A1_LPn_C_PIN (GPIO_PIN_4) //(GPIO_PIN_0) -#define VL53L8A1_LPn_C_PORT (GPIOB) //(GPIOB) - +#define VL53L8A1_PWR_EN_C_PIN (GPIO_PIN_4) //(GPIO_PIN_7) +#define VL53L8A1_PWR_EN_C_PORT (GPIOB) //(GPIOA) +#define VL53L8A1_LPn_C_PIN (GPIO_PIN_10) //(GPIO_PIN_0) +#define VL53L8A1_LPn_C_PORT (GPIOA) //(GPIOB) #endif @@ -256,9 +314,14 @@ void Error_Handler(void); // FOR STM32WLE5CCU6 UFQFPN48 PA12 PA11 #ifdef STM32WLE5xx -#define I2C2_STANDARD_100K 0x00000E14 -#define I2C2_FAST_400K 0x00000004 -#define I2C2_FAST_PLUS_1M 0x00000000 +//#define I2C2_STANDARD_100K 0x00000E14 +//#define I2C2_FAST_400K 0x00000004 +//#define I2C2_FAST_PLUS_1M 0x00000000 + +#define I2C2_STANDARD_100K 0x10805D88 +#define I2C2_FAST_400K 0x0090194B +#define I2C2_FAST_PLUS_1M 0x00700814 + #else /* * FOR STM32WLE5CCU6 UFQFPN48 PA12 PA11 diff --git a/Core/Inc/sts_lamp_bar.h b/Core/Inc/sts_lamp_bar.h index 1942548..7ca28e0 100644 --- a/Core/Inc/sts_lamp_bar.h +++ b/Core/Inc/sts_lamp_bar.h @@ -38,7 +38,6 @@ extern "C" { #define STS_Status_Alarm_Mute_Release (1) //Normal Open NO:Close# #define STS_Status_Alarm_Reset_Pushdown (0) //Normal Open NO:Open #define STS_Status_Alarm_Reset_Release (1) //Normal Open NO:Close# - enum sts_lamp_color { STS_DARK = 0, //灭:0, Code 0x00 STS_GREEN, //绿:1 0 1 0 code 0x01 0b0000 0001 @@ -64,7 +63,6 @@ enum sts_lamp_color { STS_REDGREEN=0x45, // RED/GREEN FLASH 'E' STS_BLUEGREEN=0x46 // BLUE/GREEN FLASH 'F' }; - enum sts_oo_work_mode { STS_NETWORK_MODE = 0, // 0 NETWORK MODE STS_WIRED_MODE, // 1 WIRED MODE === WATER LEAKAGE, SOAP CAPACITY SENSOR MODE diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h index f10502a..37cdd34 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_H /** * @brief Enable trace logs diff --git a/Core/Inc/utilities_def.h b/Core/Inc/utilities_def.h index 35411f6..4eb4807 100644 --- a/Core/Inc/utilities_def.h +++ b/Core/Inc/utilities_def.h @@ -85,7 +85,7 @@ typedef enum #if defined(STS_M1)||defined(STS_O6)||defined(STS_O5) CFG_SEQ_Task_YunhornSTSEventP1, /* REEDSWITCH, IO */ #endif -#if defined(STS_O6) +#if defined(STS_O6)||defined(O1L) CFG_SEQ_Task_YunhornSTSEventP2, /* MOTION */ #endif #if (defined(STS_T6)||defined(STS_O6)||defined(STS_O7)) diff --git a/Core/Src/dma.c b/Core/Src/dma.c index de0dc82..63bb4ba 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -64,10 +64,12 @@ void MX_DMA_Init(void) #endif #endif - /* DMA1_Channel5_IRQn interrupt configuration */ - - // HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 2, 0); - // HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn); +#ifdef O1L + /* TIM1_CH1 */ + /* DMA1_Channel1_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); +#endif // I2C2 /* DMA1_Channel4_IRQn interrupt configuration */ @@ -85,8 +87,7 @@ void MX_DMA_Init(void) //HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 0, 0); //HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn); - HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 2, 0); - HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn); + } diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 287b9b3..89c5503 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -76,8 +76,8 @@ void MX_GPIO_Init(void) #else /*Configure GPIO pins : PAPin PAPin */ - GPIO_InitStruct.Pin = BUT1_Pin; //|BUT2_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pin = BUT1_Pin|BUT2_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); #endif @@ -90,6 +90,7 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); +#if 0 /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = BUT3_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; @@ -109,7 +110,7 @@ void MX_GPIO_Init(void) /*Configure GPIO pins : PAPin PAPin */ GPIO_InitStruct.Pin = TOF_INT_EXTI_PIN; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; - GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(TOF_INT_EXTI_PORT, &GPIO_InitStruct); /*Configure GPIO pins : VL53L8A1_PWR_EN_C_PIN */ @@ -195,11 +196,20 @@ void MX_GPIO_Init(void) /* ============== SOAP LEVEL DETECTION ========================= */ +#if defined(PIR) + /*Configure GPIO pins : PIR_Pin PIR_Pin */ + GPIO_InitStruct.Pin = PIR_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; + GPIO_InitStruct.Pull = GPIO_NOPULL; //GPIO_NOPULL; + HAL_GPIO_Init(PIR_GPIO_Port, &GPIO_InitStruct); + HAL_NVIC_SetPriority(PIR_EXTI_IRQn, 15, 0); + HAL_NVIC_EnableIRQ(PIR_EXTI_IRQn); +#endif /* EXTI interrupt init*/ - HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); + HAL_NVIC_SetPriority(EXTI0_IRQn, 15, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); - HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0); + HAL_NVIC_SetPriority(EXTI1_IRQn, 15, 0); HAL_NVIC_EnableIRQ(EXTI1_IRQn); HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0); diff --git a/Core/Src/main.c b/Core/Src/main.c index ed857e0..910e63a 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -35,6 +35,7 @@ #include "app_tof.h" #elif defined(L8) #include "app_tof.h" +#include "sts_lamp_bar.h" #endif /* USER CODE END Includes */ @@ -66,12 +67,14 @@ void SystemClock_Config(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ +#if 1 int _write(int file, char *ptr, int len) { (void) file; HAL_UART_Transmit (&huart2, (uint8_t*)ptr, len, 0xFFFF); return len; } +#endif /* USER CODE END 0 */ /** @@ -116,12 +119,19 @@ int main(void) #if defined(STS_T6) MX_TIM1_Init(); #endif + MX_TIM1_Init(); + MX_USART2_UART_Init(); + MX_LoRaWAN_Init(); + } //PME_ON; //WATER_LEAKAGE_ENABLE; + + printf("\r\n Start O7"); + /* USER CODE BEGIN 2 */ - //MX_USART2_UART_Init(); + /* USER CODE END 2 */ /* Infinite loop */ diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index 110506c..50938c1 100644 --- a/Core/Src/stm32wlxx_it.c +++ b/Core/Src/stm32wlxx_it.c @@ -69,6 +69,10 @@ extern DMA_HandleTypeDef hdma_usart2_rx; extern DMA_HandleTypeDef hdma_tim1_ch2; extern DMA_HandleTypeDef hdma_tim1_ch1; +#ifdef O1L +//extern DMA_HandleTypeDef hdma_tim1_ch2; +extern DMA_HandleTypeDef hdma_tim1_ch1; +#endif /* USER CODE END EV */ /******************************************************************************/ @@ -284,7 +288,7 @@ void EXTI4_IRQHandler(void) /* USER CODE END EXTI1_IRQn 1 */ } - +#ifdef O1L /** * @brief This function handles DMA1 Channel 1 Interrupt. */ @@ -301,6 +305,7 @@ void DMA1_Channel1_IRQHandler(void) /* USER CODE END DMA1_Channel1_IRQn 1 */ } +#endif /* SPI1 */ /** @@ -392,6 +397,20 @@ void DMA1_Channel7_IRQHandler(void) /* USER CODE END DMA1_Channel7_IRQn 1 */ } +/** + * @brief This function handles SPI1 Interrupt. + */ +void SPI1_IRQHandler(void) +{ + /* USER CODE BEGIN SPI1_IRQn 0 */ + + /* USER CODE END SPI1_IRQn 0 */ + //HAL_SPI_IRQHandler(&hspi1); + /* USER CODE BEGIN SPI1_IRQn 1 */ + + /* USER CODE END SPI1_IRQn 1 */ +} + /** * @brief This function handles EXTI Lines [9:5] Interrupt. */ @@ -408,6 +427,11 @@ void EXTI9_5_IRQHandler(void) HAL_GPIO_EXTI_IRQHandler(TOF_INT_EXTI_PIN); #endif + //HAL_GPIO_EXTI_IRQHandler(TOF_INT_EXTI_PIN); + + HAL_GPIO_EXTI_IRQHandler(PIR_Pin); + + /* USER CODE BEGIN EXTI9_5_IRQn 1 */ /* USER CODE END EXTI9_5_IRQn 1 */ diff --git a/Core/Src/stm32wlxx_nucleo_bus.c b/Core/Src/stm32wlxx_nucleo_bus.c index 751b22b..145b527 100644 --- a/Core/Src/stm32wlxx_nucleo_bus.c +++ b/Core/Src/stm32wlxx_nucleo_bus.c @@ -400,7 +400,8 @@ __weak HAL_StatusTypeDef MX_I2C2_Init(I2C_HandleTypeDef* hi2c) HAL_StatusTypeDef ret = HAL_OK; hi2c->Instance = I2C2; - hi2c->Init.Timing = 0x20303E5D; + //hi2c->Init.Timing = 0x20303E5D; + hi2c->Init.Timing = 0x0090194B; // 2024 NOV 13 10:20PM hi2c->Init.OwnAddress1 = 0; hi2c->Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c->Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; @@ -448,14 +449,14 @@ static void I2C2_MspInit(I2C_HandleTypeDef* i2cHandle) GPIO_InitStruct.Pin = BUS_I2C2_SCL_GPIO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = BUS_I2C2_SCL_GPIO_AF; HAL_GPIO_Init(BUS_I2C2_SCL_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.Pin = BUS_I2C2_SDA_GPIO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = BUS_I2C2_SDA_GPIO_AF; HAL_GPIO_Init(BUS_I2C2_SDA_GPIO_PORT, &GPIO_InitStruct); diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index 01fb69b..77b9b99 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -28,25 +28,25 @@ #include "yunhorn_sts_sensors.h" -#define ONE_PULSE (40) //36 -#define ZERO_PULSE (20) - +#define ONE_PULSE (24) //36 +#define ZERO_PULSE (12) +#define STS_LAMP_BAR_LED_NUM (27) //60 for 46CM length LED strip #define LED_DATA_LEN 24 #define WS2812B_DATA_LEN (LED_DATA_LEN * (STS_LAMP_BAR_LED_NUM)) -#define RESET_PULSE (24) //(80) TO FIX DARK_COLOR AND SM2 +#define RESET_PULSE (16) //(80) TO FIX DARK_COLOR AND SM2 typedef struct ws2812b_e { //uint16_t head[3]; - uint16_t GRB[WS2812B_DATA_LEN]; - uint16_t tail; + uint16_t GRB[WS2812B_DATA_LEN+RESET_PULSE]; + uint16_t tail[RESET_PULSE]; } WS2812B_FrameTypeDef; volatile WS2812B_FrameTypeDef rgb_buf = { -// .head[0] = 0, -// .head[1] = 0, -// .head[2] = 0, - .tail = 0 +// .head[0] = 10, +// .head[1] = 10, +// .head[2] = 10, + //.tail = 00 }; uint8_t color_rgb[8][3] = { //STS_COLOR R G B MAPPING TABLE @@ -204,7 +204,7 @@ void STS_Lamp_Bar_Set_STS_RGB_Color(uint8_t sts_lamp_color, uint8_t lum) void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) { - __HAL_TIM_SetCompare(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL,0); + //__HAL_TIM_SetCompare(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL,0); HAL_TIM_PWM_Stop_DMA(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL); } @@ -248,7 +248,8 @@ void STS_Lamp_Bar_Self_Test(void) STS_Lamp_Bar_Set_Dark(); } else { - STS_Lamp_Bar_Set_STS_RGB_Color(STS_GREEN, lum_level); + //STS_Lamp_Bar_Set_STS_RGB_Color(STS_GREEN, lum_level); + STS_Lamp_Bar_Set_STS_RGB_Color(STS_VACANT_COLOR, lum_level); } diff --git a/Core/Src/sys_app.c b/Core/Src/sys_app.c index 64cf9ae..e2a9720 100644 --- a/Core/Src/sys_app.c +++ b/Core/Src/sys_app.c @@ -38,7 +38,8 @@ #endif //#ifdef L8 #include "app_tof.h" -//#endif +#include "sts_lamp_bar.h" +#endif /* USER CODE END Includes */ /* External variables ---------------------------------------------------------*/ @@ -125,6 +126,7 @@ void SystemApp_Init(void) EnvSensors_Init(); #if defined(L8) MX_TOF_Init(); + //STS_Lamp_Bar_Self_Test(); #endif #if defined(STS_R1D) MX_TOF_Init(); @@ -138,6 +140,25 @@ void SystemApp_Init(void) STS_Lamp_Bar_Self_Test(); #endif +#if defined(STS_T6)||defined(L8) + //STS_TOF_VL53LX_PresenceDetection_Process_Init(); + //STS_Lamp_Bar_Self_Test_Simple(); + STS_Lamp_Bar_Self_Test(); + LED_GREEN_ON;HAL_Delay(50); + LED_RED_ON;HAL_Delay(50); + LED_GREEN_OFF;HAL_Delay(50); + LED_RED_OFF;HAL_Delay(50); + LED_GREEN_ON;HAL_Delay(150); + LED_RED_ON;HAL_Delay(150); + LED_GREEN_OFF;HAL_Delay(150); + LED_RED_OFF;HAL_Delay(150); + LED_GREEN_ON;HAL_Delay(50); + LED_RED_ON;HAL_Delay(50); + LED_GREEN_OFF;HAL_Delay(50); + LED_RED_OFF;HAL_Delay(50); + +#endif + /*Init low power manager*/ UTIL_LPM_Init(); /* Disable Stand-by mode */ diff --git a/Core/Src/usart.c b/Core/Src/usart.c index 0275f76..f5139f8 100644 --- a/Core/Src/usart.c +++ b/Core/Src/usart.c @@ -41,8 +41,8 @@ void MX_USART2_UART_Init(void) /* USER CODE END USART2_Init 1 */ huart2.Instance = USART2; -#if defined(L8)||defined(STS_P2)||defined(STS_T6) - huart2.Init.BaudRate = 460800; +#if defined(L8) || defined(STS_P2) || defined(STS_T6) || defined(L8) + huart2.Init.BaudRate = 460800; #else huart2.Init.BaudRate = 115200; #endif diff --git a/Core/Src/usart_if.c b/Core/Src/usart_if.c index 8ac0e4a..7a9a992 100644 --- a/Core/Src/usart_if.c +++ b/Core/Src/usart_if.c @@ -128,7 +128,7 @@ UTIL_ADV_TRACE_Status_t vcom_DeInit(void) /* ##-3- Disable the NVIC for DMA ########################################### */ /* USER CODE BEGIN 1 */ HAL_NVIC_DisableIRQ(DMA1_Channel6_IRQn); - + HAL_NVIC_DisableIRQ(DMA1_Channel7_IRQn); return UTIL_ADV_TRACE_OK; /* USER CODE END 1 */ /* USER CODE BEGIN vcom_DeInit_2 */ diff --git a/LMZ/VL53LMZ_ULD_API/changelog.txt b/LMZ/VL53LMZ_ULD_API/changelog.txt new file mode 100644 index 0000000..5c5c0bc --- /dev/null +++ b/LMZ/VL53LMZ_ULD_API/changelog.txt @@ -0,0 +1,39 @@ +******************************************************************************** +* +* STMicroelectronics - VL53L7CH/VL53L8CH Ultra Lite Driver +* +******************************************************************************** + +# Driver version history + +--------------------------------------------------------------------------------------------------------------- +Version : 2.0.10 +Date: 07/12/2023 +Comments : +- Fixed wrong conversion of Ambient and Histogram values in Example_12. Values were a factor of 2x too low. +- Fixed incorrect sizing of cnh_data_buffer_t. +- Fixed incorrect comparison for is_auto_stop_enabled. +- Added VL53LMZ_POWER_MODE_DEEP_SLEEP mode. +- Include MM FW v1.7 which contains: +.... Improved rad2perp for L8 +.... Improved wrap-around check algo +.... Option to skip intr on first two frames of detection thresholds +.... Calculation of a FW checksum +.... Fix for incorrect operation with very negative values of CNH start_bin +.... Added first_bin to sci_persistent_data[2][31:16] +--------------------------------------------------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------------------- +Version : 2.0.9 +Date : 25/07/2023 +Comments : +- Fixed issue in vl53lmz_enable/disable_internal_cp functions which prevented use with VL53L7CH. +- Added module_type to VL53LMZ_Configuration to provide a public location to read the module type. This +field is set during calls to vl53lmz_is_alive() and vl53lmz_init(). +--------------------------------------------------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------------------- +Version : 2.0.8 +Date : 16/06/2023 +Comments : Initial driver release. +--------------------------------------------------------------------------------------------------------------- diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index ca02418..077c718 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -34,15 +34,22 @@ #include "CayenneLpp.h" #include "sys_sensors.h" #include "flash_if.h" +#include "stdio.h" +#include "timer_if.h" +#ifdef CLOCK_SYNC +#include "LmhpClockSync.h" +#endif /* USER CODE BEGIN Includes */ #include "app_tof_pin_conf.h" #include "app_tof_peoplecount.h" #include "yunhorn_sts_prd_conf.h" #include "yunhorn_sts_sensors.h" -#if defined(STS_O6)||defined(STS_T6)||defined(O1L) + +#if (defined(STS_O6)||defined(STS_T6)||defined(O1L)) #include "sts_lamp_bar.h" #endif + /* USER CODE END Includes */ /* External variables ---------------------------------------------------------*/ @@ -52,6 +59,9 @@ extern volatile uint8_t sts_ac_code[20], sts_service_mask; extern volatile uint8_t sts_work_mode, sts_cloud_netcolor, sts_lamp_bar_color, sts_status_color, luminance_level; volatile static bool r_b=true; extern volatile sts_cfg_nvm_t sts_cfg_nvm; +extern volatile uint8_t sts_work_mode, sts_cloud_netcolor, sts_lamp_bar_color, sts_status_color, luminance_level; +volatile static bool r_b=true; +extern volatile uint8_t sts_pir_read; extern volatile uint32_t rfac_timer; extern volatile uint32_t STS_TOFScanPeriod_msec, STS_TxPeriod_sec, STS_HeartBeatTimerPeriod_sec; volatile uint8_t sts_data_buf[LORAWAN_APP_DATA_BUFFER_MAX_SIZE]={0x0}; @@ -59,6 +69,28 @@ volatile uint8_t sts_data_buf[LORAWAN_APP_DATA_BUFFER_MAX_SIZE]={0x0}; #ifdef STS_M1 extern volatile uint8_t sts_water_leakage_state; #endif + +extern volatile uint8_t fhmos_fall, fhmos_human_movement, fhmos_occupancy, fhmos_sos_alarm; +extern volatile uint32_t fhmos_fall_counter; +// extern volatile uint32_t sts_low_threshold, sts_high_threshold, sts_occupancy_threshold; +extern volatile sts_fhmos_sensor_data_t fhmos_data; +extern volatile sts_fhmos_sensor_config_t fhmos_cfg; +extern volatile sts_fhmos_sensor_ambient_height_t fhmos_bg; +// volatile LmHandlerAppData_t sts_app_data={ 0, 0, sts_data_buf }; +extern volatile uint8_t sts_hall1_read, sts_hall2_read; // Above hall1_read == reed_hall_result, hall2_read == emergency_button +extern volatile uint8_t sts_hall3_read, sts_hall4_read; +//extern volatile uint8_t sts_pir_state, sts_pir_result; +extern volatile uint8_t last_sts_hall1_read, last_sts_hall2_read, last_sts_hall3_read, last_sts_hall4_read, last_sts_pir_read; +//volatile uint8_t sts_PIR_read = 0; +volatile bool locklow = false; +volatile uint32_t lowin=0; +volatile bool takelowTime; +uint32_t check_time=0; +volatile bool motionDetected =false; +uint32_t lastMotionTime =0; +const uint32_t ledOnDuration = 10000; + + /* USER CODE END EV */ /* Private typedef -----------------------------------------------------------*/ @@ -88,7 +120,7 @@ typedef enum TxEventType_e /** * LEDs period value of the timer in ms */ -#define LED_PERIOD_TIME 500 +#define LED_PERIOD_TIME 800 /** * Join switch period value of the timer in ms @@ -370,6 +402,8 @@ static UTIL_TIMER_Object_t YunhornSTSHeartBeatTimer; /** * @brief Timer to handle the application Lamp Bar LED Timer refresh */ +//static UTIL_TIMER_Object_t YunhornSTSLampBarColorTimer; + static UTIL_TIMER_Object_t STSLampBarColorTimer; /** @@ -418,6 +452,8 @@ static UTIL_TIMER_Object_t RxLedTimer; */ static UTIL_TIMER_Object_t JoinLedTimer; +static volatile bool IsClockSynched = false; + /* USER CODE END PV */ /* Exported functions ---------------------------------------------------------*/ @@ -431,7 +467,7 @@ void LoRaWAN_Init(void) uint32_t feature_version = 0UL; /* USER CODE END LoRaWAN_Init_LV */ - APP_LOG(TS_OFF, VLEVEL_M, "\n\n# YUNHORN SMARTOILETS: (%s) MTM:%d.%d HWFW:%d.%d V:%d.%d.%d #\n\n",(char*)YUNHORN_STS_PRD_STRING, + APP_LOG(TS_OFF, VLEVEL_M, "\n\r# YUNHORN SMARTOILETS: (%s) MTM:%d.%d HWFW:%d.%d V:%d.%d.%d #\n\r",(char*)YUNHORN_STS_PRD_STRING, (uint8_t)sts_mtmcode1, (uint8_t)sts_mtmcode2,(uint8_t)sts_hardware_ver,(uint8_t)FirmwareVersion, (uint8_t)MajorVer,(uint8_t)MinorVer,(uint8_t)SubMinorVer); /* USER CODE BEGIN LoRaWAN_Init_1 */ @@ -490,6 +526,12 @@ void LoRaWAN_Init(void) UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LoRaStoreContextEvent), UTIL_SEQ_RFU, StoreContext); UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LoRaStopJoinEvent), UTIL_SEQ_RFU, StopJoin); + // TODO XXX 2024-06-04 +#ifdef CLOCK_SYNC + LmHandlerPackageRegister( PACKAGE_ID_CLOCK_SYNC, NULL ); + IsClockSynched = false; +#endif + /* Init Info table used by LmHandler*/ LoraInfo_Init(); @@ -566,6 +608,20 @@ void LoRaWAN_Init(void) // UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer, 1000*STS_HeartBeatTimerPeriod_sec, UTIL_TIMER_PERIODIC, OnYunhornSTSHeartBeatTimerEvent, NULL); // UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer, 1000*STS_HeartBeatTimerPeriod_sec, UTIL_TIMER_ONESHOT, OnYunhornSTSHeartBeatTimerEvent, NULL); // UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); +#if defined(STS_T6)||defined(STS_O6)||defined(O1L) + UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP3), UTIL_SEQ_RFU, STS_YunhornSTSEventP3_Process); +#endif + +#if defined(STS_P2)||defined(STS_T6)||defined(L8) + UTIL_TIMER_Create(&YunhornSTSWakeUpScanTimer, STS_TOFScanPeriod_msec, UTIL_TIMER_PERIODIC, (void*)STS_YunhornSTSEventP5_Process, NULL); + UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer); +#endif + + UTIL_TIMER_Start(&STSLampBarColorTimer); + UTIL_TIMER_Start(&STSDurationCheckTimer); + //UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer, 1000*STS_HeartBeatTimerPeriod_sec, UTIL_TIMER_PERIODIC, OnYunhornSTSHeartBeatTimerEvent, NULL); +// UTIL_TIMER_Create(&YunhornSTSHeartBeatTimer, 1000*STS_HeartBeatTimerPeriod_sec, UTIL_TIMER_ONESHOT, OnYunhornSTSHeartBeatTimerEvent, NULL); +// UTIL_TIMER_Start(&YunhornSTSHeartBeatTimer); /* USER CODE END LoRaWAN_Init_Last */ } @@ -574,6 +630,7 @@ void LoRaWAN_Init(void) void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { + switch (GPIO_Pin) { #ifdef STS_O5 @@ -633,16 +690,89 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) #else case BUT1_Pin: /* Note: when "EventType == TX_ON_TIMER" this GPIO is not initialized */ - if (EventType == TX_ON_EVENT) + HAL_Delay(250); + __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + //__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + sts_hall1_read = HALL1_STATE; + if (last_sts_hall1_read != sts_hall1_read) // to eliminate power drop issue of PCB with long REEDSWITCH CABLES + { +// 1) record event start/stop time + APP_LOG(TS_OFF, VLEVEL_M,"\r\n EXIT_CALLBACK, Door state =%d \r\n", sts_hall1_read); + OnSensor1StateChanged(); +// 2) change lamp bar color + if (sts_hall1_read == STS_Status_Door_Close) + { + sts_lamp_bar_color = STS_OCCUPY_COLOR; + sts_status_color = STS_OCCUPY_COLOR; + // APP_LOG(TS_OFF, VLEVEL_M,"\r\n EXIT_CALLBACK, Door CLOSED: sts status color =%d, lampbar_color=%d \r\n", sts_status_color, sts_lamp_bar_color); + } else + { + //sts_lamp_bar_color = prev_color; + sts_status_color = STS_VACANT_COLOR; + sts_lamp_bar_color = STS_VACANT_COLOR; + // APP_LOG(TS_OFF, VLEVEL_M,"\r\n EXTI_CALLBACK, Door Open: sts status color =%d, lampbar_color=%d \r\n", sts_status_color, sts_lamp_bar_color); + } +// 3) combine states and colors + //STS_YunhornSTSEventP1_Process(); + //STS_Combined_Status_Processing(); + +// 4) upload state change messages + //if (EventType == TX_ON_EVENT) +#if 0 + if (sts_hall1_read == STS_Status_Door_Close) { UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + fhmos_occupancy = 1; } +#endif + + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + last_sts_hall1_read = sts_hall1_read; + } //else { + //APP_LOG(TS_OFF, VLEVEL_M, "\r\n --- ---- ----- -------- hall 1, door close again \r\n"); + //} break; #ifndef STS_R4 +#if 1 case BUT2_Pin: - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaStopJoinEvent), CFG_SEQ_Prio_0); + HAL_Delay(100); + __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + sts_hall2_read = HALL2_STATE; + //printf("\r\n HALL 2 state =%d \r\n", sts_hall2_read); +// 1) record event start/stop time + OnSensor2StateChanged(); +// 2) change lamp bar color + + if (sts_hall2_read == STS_Status_SOS_Pushdown) + { + sts_lamp_bar_color = STS_SOS_COLOR; + sts_status_color = STS_SOS_COLOR; + fhmos_sos_alarm = 1; + } + else if (sts_hall2_read ==STS_Status_SOS_Release) + { + sts_lamp_bar_color = STS_VACANT_COLOR; + sts_status_color = STS_VACANT_COLOR; + fhmos_sos_alarm = 0; + } + last_sts_hall2_read = sts_hall2_read; + // 3) combine states and colors + + //STS_YunhornSTSEventP1_Process(); + +// 4) upload state change messages +#if 0 + if (sts_hall2_read == STS_Status_SOS_Release) + { + fhmos_sos_alarm = 0; + + } +#endif + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + last_sts_hall2_read = sts_hall2_read; + break; #endif #endif @@ -651,11 +781,62 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaStoreContextEvent), CFG_SEQ_Prio_0); break; #endif +#if 1 + case PIR_Pin: + sts_pir_read = PIR_STATE; + __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + OnSensorPIR1StateChanged(); +#endif + //OnSensor3StateChanged(); + //OnSensorPIR1StateChanged(); + //STS_YunhornSTSEventP1_Process(); + //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + //last_sts_hall3_read = sts_hall3_read; +#if 0 + HAL_Delay(100); + __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + + sts_pir_state = PIR_STATE; + printf("\r\n PIR state =%d \r\n", sts_pir_state); + if (sts_pir_state == 1) { + fhmos_human_movement = 1; + } else { + fhmos_human_movement = 0; + + } +#endif + if (sts_pir_read != last_sts_pir_read) + { + last_sts_pir_read = sts_hall3_read; + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + } + + break; +#if 0 + case HALL4_Pin: + sts_hall4_read = HALL4_STATE; + HAL_Delay(30); //de-bouncing + if (sts_hall4_read == HALL4_STATE) + { + //APP_LOG(TS_OFF, VLEVEL_L, "\n\n ALARM RESET Button Read = %02x --%s\r\n", sts_hall4_read, sts_sos_status_code[sts_hall4_read]); + OnSensor4StateChanged(); + //sensor_data_ready =1; + //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0); + { + STS_YunhornSTSEventP1_Process(); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + + } + last_sts_hall4_read = sts_hall4_read; + } + break; +#endif #if (defined(VL53L0)||defined(VL53LX)||defined(L8)) case TOF_INT_EXTI_PIN: ToF_EventDetected = 1; break; #endif + default: break; } @@ -801,7 +982,7 @@ void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, uint8 LmHandlerErrorStatus_t status = LORAMAC_HANDLER_ERROR; UTIL_TIMER_Time_t nextTxIn = 0; - if (LmHandlerIsBusy() == false) + //if (LmHandlerIsBusy() == false) { for (uint8_t i=0;i 0) { - APP_LOG(TS_ON, VLEVEL_H, "Next Tx in : ~%d second(s)\r\n", (nextTxIn / 1000)); + APP_LOG(TS_ON, VLEVEL_M, "Next Tx in : ~%d second(s)\r\n", (nextTxIn / 1000)); } } @@ -849,6 +1033,9 @@ static void SendTxData(void) sts_r_sensor_data_t sts_m1_sensor_data={0}; #elif defined(STS_O5) STS_OO_SensorDataTypeDef oo_data; +#elif defined(STS_L8) + sts_fhmos_sensor_data_t fhmos_data={0}; +#elif defined(STS_XX) #endif if (LmHandlerIsBusy() == false) @@ -857,15 +1044,18 @@ static void SendTxData(void) uint8_t channel = 0; #else /* + uint32_t i = 0; +#if 0 uint16_t pressure = 0; int16_t temperature = 0; uint16_t humidity = 0; - uint32_t i = 0; + int32_t latitude = 0; int32_t longitude = 0; uint16_t altitudeGps = 0; */ uint32_t i = 0; +#endif #endif /* CAYENNE_LPP */ EnvSensors_Read(&sensor_data); @@ -880,7 +1070,9 @@ static void SendTxData(void) STS_M1_sensor_read(&sts_m1_sensor_data); #endif - +#ifdef STS_L8 + STS_FHMOS_sensor_read(&fhmos_data); +#endif #ifdef VL53LX #ifdef STS_P2 @@ -1057,8 +1249,93 @@ static void SendTxData(void) #endif //STS_T6 #if defined(L8) - AppData.Buffer[i++] = 1; - AppData.Buffer[i++] = 8; //testing + //AppData.Buffer[i++] = 4; +#if 0 + if ((fhmos_data.state_fall ==3)||(fhmos_data.state_occupancy ==3)||(fhmos_data.state_human_movement ==3)) + { + AppData.Buffer[i++] = 10; + AppData.Buffer[i++] = 0x04; // payload type, 0x01= regular payload + AppData.Buffer[i++] = fhmos_data.state_fall; + AppData.Buffer[i++] = fhmos_data.state_human_movement; + AppData.Buffer[i++] = fhmos_data.state_occupancy; + AppData.Buffer[i++] = fhmos_data.state_sos_alarm; + AppData.Buffer[i++] = fhmos_data.lamp_bar_color; + if (fhmos_data.state_fall ==3) + { + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_fall_confirmed>>24); + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_fall_confirmed>>16); + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_fall_confirmed>>8); + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_fall_confirmed); + } else if (fhmos_data.state_occupancy ==3){ + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_overstay_confirmed>>24); + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_overstay_confirmed>>16); + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_overstay_confirmed>>8); + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_overstay_confirmed); + + } else if (fhmos_data.state_human_movement ==3) + { + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_motionless_confirmed>>24); + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_motionless_confirmed>>16); + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_motionless_confirmed>>8); + AppData.Buffer[i++] = 0xff&(fhmos_data.time_stamp_motionless_confirmed); + } + + } else +#endif + { + + AppData.Buffer[i++] = 9; + AppData.Buffer[i++] = 0x01; + AppData.Buffer[i++] = fhmos_data.state_fall; + AppData.Buffer[i++] = fhmos_data.state_human_movement; + AppData.Buffer[i++] = fhmos_data.state_occupancy; + AppData.Buffer[i++] = fhmos_data.state_sos_alarm; + + AppData.Buffer[i++] = fhmos_data.lamp_bar_color; + AppData.Buffer[i++] = fhmos_data.state_hall_1; + AppData.Buffer[i++] = fhmos_data.state_hall_2; + AppData.Buffer[i++] = fhmos_data.state_PIR; + + if (fhmos_data.state_fall_released == 1) + { + fhmos_data.state_fall_released == 0; + + AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_data.time_stamp_fall_confirmed>>24); + AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_data.time_stamp_fall_confirmed>>16); + AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_data.time_stamp_fall_confirmed>>8); + AppData.Buffer[i++] = (uint8_t) 0xff&(fhmos_data.time_stamp_fall_confirmed); + + } + } + // AppData.Buffer[i++] = 0x01; // payload type, 0x01= regular payload +#if 0 + AppData.Buffer[i++] = fhmos_data.state_fall; + AppData.Buffer[i++] = fhmos_data.state_human_movement; + AppData.Buffer[i++] = fhmos_data.state_occupancy; + AppData.Buffer[i++] = fhmos_data.state_sos_alarm; + + AppData.Buffer[i++] = fhmos_data.lamp_bar_color; + AppData.Buffer[i++] = fhmos_data.state_hall_1; + AppData.Buffer[i++] = fhmos_data.state_hall_2; + AppData.Buffer[i++] = fhmos_data.state_PIR; +#endif + +#elif defined(L8) + sts_data->lamp_bar_color = sts_lamp_bar_color; + sts_data->state_hall_1 = sts_hall1_read; + sts_data->state_hall_2 = sts_hall2_read; + sts_data->state_PIR = sts_pir_read;; + + AppData.Buffer[i++] = 8; + AppData.Buffer[i++] = fhmos_data.state_fall; + AppData.Buffer[i++] = fhmos_data.state_human_movement; + AppData.Buffer[i++] = fhmos_data.occupancy; + AppData.Buffer[i++] = fhmos_data.state_sos_alarm; + AppData.Buffer[i++] = fhmos_data.lamp_bar_color; + AppData.Buffer[i++] = fhmos_data.batteryLevel; + + + //(uint8_t)((sts_l8_sensor_data.tof_range_presence_state & 0xFF)); #endif //STS_T6 @@ -1080,6 +1357,18 @@ static void SendTxData(void) AppData.BufferSize = i&(~sts_service_mask); +#ifdef CLOCK_SYNC + if( IsClockSynched == false ) + { + status = LmhpClockSyncAppTimeReq( ); + + if (LORAMAC_HANDLER_SUCCESS == status) { + OnSysTimeUpdate(); + } + } +#endif + + if ((JoinLedTimer.IsRunning) && (LmHandlerJoinStatus() == LORAMAC_HANDLER_SET)) { UTIL_TIMER_Stop(&JoinLedTimer); @@ -1089,7 +1378,7 @@ static void SendTxData(void) status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false); if (LORAMAC_HANDLER_SUCCESS == status) { - APP_LOG(TS_ON, VLEVEL_L, "SEND REQUEST\r\n"); + APP_LOG(TS_ON, VLEVEL_M, "SEND REQUEST\r\n"); } else if (LORAMAC_HANDLER_DUTYCYCLE_RESTRICTED == status) { @@ -1213,9 +1502,9 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) } AppData.Port = 1; AppData.BufferSize = 16; - UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer, (uint8_t *)"YUNHORN168", 10); - UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer+10, (uint8_t *)(uint8_t*)YUNHORN_STS_PRD_STRING, sizeof(YUNHORN_STS_PRD_STRING)); - AppData.BufferSize = sizeof(YUNHORN_STS_PRD_STRING)+10; + // UTIL_MEM_cpy_8(AppData.Buffer, (uint8_t*)"YUNHORN168", 10); + UTIL_MEM_cpy_8((uint8_t*)AppData.Buffer, (uint8_t *)YUNHORN_STS_PRD_STRING, sizeof(YUNHORN_STS_PRD_STRING)); + AppData.BufferSize = sizeof(YUNHORN_STS_PRD_STRING); LmHandlerParams.IsTxConfirmed = true; LmHandlerErrorStatus_t status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false); if (status ==LORAMAC_HANDLER_SUCCESS ) LmHandlerParams.IsTxConfirmed = false; @@ -1229,6 +1518,7 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) } //UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer); + // UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer); /* USER CODE END OnJoinRequest_1 */ } @@ -1270,7 +1560,7 @@ static void OnBeaconStatusChange(LmHandlerBeaconParams_t *params) static void OnSysTimeUpdate(void) { /* USER CODE BEGIN OnSysTimeUpdate_1 */ - + IsClockSynched = true; /* USER CODE END OnSysTimeUpdate_1 */ } @@ -1483,6 +1773,22 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) UTIL_TIMER_Stop(&STSLampBarColorTimer); + if (high4==0) + { + STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); + } else + { + STS_Lamp_Bar_Set_STS_RGB_Color(r_b?high4:low4, luminance_level); + r_b = !r_b; + } + + UTIL_TIMER_Start(&STSLampBarColorTimer); +#if 0 +#if defined(STS_O6)||defined(O1L) + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP3), CFG_SEQ_Prio_0); + + UTIL_TIMER_Stop(&STSLampBarColorTimer); + if (high4==0) { STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); @@ -1496,6 +1802,7 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) UTIL_TIMER_Start(&STSLampBarColorTimer); #endif +#endif } /** @@ -1504,6 +1811,8 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) */ static void OnYunhornSTSDurationCheckTimerEvent(void *context) { + //printf("\r\n----Duration check process ----"); + YunhornSTSDurationCheckTimer(); #ifdef STS_O6 #endif @@ -1564,6 +1873,8 @@ static void OnYunhornSTSHeartBeatTimerEvent(void *context) appHeartBeatDataPort = YUNHORN_STS_O5_LORA_APP_HTBT_PORT; #elif defined(STS_M1) appHeartBeatDataPort = YUNHORN_STS_M1_LORA_APP_HTBT_PORT; +#elif defined(L8) + appHeartBeatDataPort = YUNHORN_STS_L8_LORA_APP_HTBT_PORT; #endif appHeartBeatBufferSize = 2; @@ -1612,6 +1923,8 @@ void OnYunhornSTSHeartBeatPeriodicityChanged(uint32_t periodicity) static void OnYunhornSTSWakeUpScanTimerEvent(void *context) { #if defined(STS_P2)||defined(STS_T6)||defined(L8) + UTIL_TIMER_Stop(&YunhornSTSWakeUpScanTimer); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP5), CFG_SEQ_Prio_0); //UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer); @@ -1619,6 +1932,30 @@ static void OnYunhornSTSWakeUpScanTimerEvent(void *context) } +void STSWakeupScanTimerStop(void) +{ + UTIL_TIMER_Stop(&YunhornSTSWakeUpScanTimer); +} + +uint32_t STS_Get_Date_Time_Stamp(void) +{ + struct tm localtime={0}; + + SysTime_t UnixEpoch = SysTimeGet(); + UnixEpoch.Seconds -= 18; /*removing leap seconds*/ + + SysTimeLocalTime(UnixEpoch.Seconds, &localtime); + APP_LOG(TS_OFF, VLEVEL_M, "UTC TIME:%02dh%02dm%02ds on %02d/%02d/%04d\r\n", + localtime.tm_hour, localtime.tm_min, localtime.tm_sec, + localtime.tm_mday, localtime.tm_mon + 1, localtime.tm_year + 1900); + + return (uint32_t)UnixEpoch.Seconds; +} + +void STSWakeupScanTimerStart(void) +{ + UTIL_TIMER_Start(&YunhornSTSWakeUpScanTimer); +} /** * @brief Yunhorn STS Tx Periodicity Change function * @param duration of periodicty in ms (1/1000 sec) diff --git a/LoRaWAN/Target/lorawan_conf.h b/LoRaWAN/Target/lorawan_conf.h index 9ddccb0..443d818 100644 --- a/LoRaWAN/Target/lorawan_conf.h +++ b/LoRaWAN/Target/lorawan_conf.h @@ -69,7 +69,7 @@ extern "C" { * - Firmware Management Protocol (Package ID: 4, Default Port: 203) * The Certification Protocol is also defined as a mandatory package (Package ID: 0, Default Port: 224) */ -#define LORAWAN_DATA_DISTRIB_MGT 0 +#define LORAWAN_DATA_DISTRIB_MGT 1 /*! * @brief LoRaWAN packages version @@ -109,7 +109,7 @@ extern "C" { * - CHANNEL_PLAN_GROUP_AS923_4 (Freq offset = -5.90 MHz / Freq range = 917-920MHz) * - CHANNEL_PLAN_GROUP_AS923_1_JP (Freq offset = 0.0 MHz / Freq range = 920.6-923.4MHz) */ -#define REGION_AS923_DEFAULT_CHANNEL_PLAN CHANNEL_PLAN_GROUP_AS923_1_JP +#define REGION_AS923_DEFAULT_CHANNEL_PLAN CHANNEL_PLAN_GROUP_AS923_1 /*! * @brief Limits the number usable channels by default for AU915, CN470 and US915 regions diff --git a/LoRaWAN/Target/radio_board_if.h b/LoRaWAN/Target/radio_board_if.h index 187e0d4..09d8e4d 100644 --- a/LoRaWAN/Target/radio_board_if.h +++ b/LoRaWAN/Target/radio_board_if.h @@ -151,6 +151,12 @@ typedef enum RBI_SWITCH_RFO_LP = RADIO_SWITCH_RFO_LP, RBI_SWITCH_RFO_HP = RADIO_SWITCH_RFO_HP, } RBI_Switch_TypeDef; +typedef enum +{ + RBI_RFO_LP_MAXPOWER = 0, + RBI_RFO_HP_MAXPOWER = 1, +} RBI_RFOMaxPowerConfig_TypeDef; + #elif defined(YUNHORN_STS_WLE5CCxx) typedef enum { diff --git a/STM32CubeIDE/.cproject b/STM32CubeIDE/.cproject index 8648789..5832993 100644 --- a/STM32CubeIDE/.cproject +++ b/STM32CubeIDE/.cproject @@ -99,7 +99,7 @@ - + @@ -126,6 +126,7 @@