diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 8982877..779e237 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -130,7 +130,7 @@ void Error_Handler(void); */ #define STS_LAMP_BAR_PWM_TIM_PERIOD (60 - 1) #define STS_LAMP_BAR_HTIM htim1 -#define STS_LAMP_BAR_LED_NUM (7) //50 +#define STS_LAMP_BAR_LED_NUM (30) //50 #define WSDATA_PORT_PIN_PA8 //#define WSDATA_PORT_PIN_PA9 diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index 20a5a9b..500bc9f 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -32,14 +32,13 @@ #define ZERO_PULSE (20) #define LED_DATA_LEN 24 -#define WS2812B_DATA_LEN (LED_DATA_LEN * (STS_LAMP_BAR_LED_NUM+4)) -//#define DEFAULT_LUMINANCE_LEVEL (30) -#define RESET_PULSE (10) //(80) TO FIX DARK_COLOR AND SM2 +#define WS2812B_DATA_LEN (24 * STS_LAMP_BAR_LED_NUM+1) +#define RESET_PULSE (24) //(80) TO FIX DARK_COLOR AND SM2 typedef struct ws2812b_e { uint16_t head[3]; - uint16_t GRB[24*STS_LAMP_BAR_LED_NUM]; + uint16_t GRB[WS2812B_DATA_LEN]; uint16_t tail; } WS2812B_FrameTypeDef; @@ -95,15 +94,17 @@ void STS_Lamp_Bar_Set_Dark(void) for (uint8_t i=0; i< STS_LAMP_BAR_LED_NUM; i++) { STS_WS2812B_Set_RGB(0x00,0x00,0x00,i); + } STS_WS2812B_Refresh(); } void STS_WS2812B_Refresh(void) { - HAL_TIM_PWM_Start_DMA(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL, (uint32_t *)&rgb_buf, (uint16_t)(RESET_PULSE+WS2812B_DATA_LEN+1)); - - HAL_TIM_PWM_Start_IT(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL); + __disable_irq(); + HAL_TIM_PWM_Start_DMA(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL, (uint32_t *)&rgb_buf, (uint16_t)(sizeof(rgb_buf))); + __enable_irq(); + //HAL_TIM_PWM_Start_IT(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL); } void STS_Lamp_Bar_Init(void) @@ -111,13 +112,13 @@ void STS_Lamp_Bar_Init(void) if (sts_service_mask == STS_SERVICE_MASK_L0) { STS_Lamp_Bar_Set_STS_RGB_Color(STS_GREEN, luminance_level); - //STS_WS2812B_Refresh(); + HAL_Delay(200); STS_Lamp_Bar_Set_STS_RGB_Color(STS_RED, luminance_level); - //STS_WS2812B_Refresh(); + HAL_Delay(200); STS_Lamp_Bar_Set_STS_RGB_Color(STS_BLUE, luminance_level); - //STS_WS2812B_Refresh(); + HAL_Delay(200); } } @@ -129,18 +130,13 @@ void STS_Lamp_Bar_Scoller(uint8_t color, uint8_t lum_level) for(uint8_t i = 0; i>j)? ONE_PULSE : ZERO_PULSE); - rgb_buf.GRB[idx*24+8+j] = (uint16_t)((R&(0X80)>>j)? ONE_PULSE : ZERO_PULSE); - rgb_buf.GRB[idx*24+16+j] = (uint16_t)((B&(0X80)>>j)? ONE_PULSE : ZERO_PULSE); + rgb_buf.GRB[idx*24+j] = (uint16_t)(((G<>j)? ONE_PULSE : ZERO_PULSE; - rgb_buf.GRB[i*24+8+j] = (red&(0x80)>>j)? ONE_PULSE : ZERO_PULSE; - rgb_buf.GRB[i*24+16+j] = (blue&(0x80)>>j)? ONE_PULSE : ZERO_PULSE; - } + STS_WS2812B_Set_RGB(red, green, blue, i); } + STS_WS2812B_Set_RGB(0,0,0, i); + if (sts_service_mask == STS_SERVICE_MASK_L0) { STS_WS2812B_Refresh(); } } - void STS_Lamp_Bar_Refresh(void) { STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); } + void STS_Lamp_Bar_Set_STS_RGB_Color(uint8_t sts_lamp_color, uint8_t lum) { - //static bool r_b = false; - //STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0); switch (sts_lamp_color&0x0f) { case STS_DARK: @@ -217,13 +208,6 @@ void STS_Lamp_Bar_Set_STS_RGB_Color(uint8_t sts_lamp_color, uint8_t lum) case STS_WHITE: STS_Lamp_Bar_Set_RGB_Color(lum, lum, lum); break; - //case STS_RED_BLUE: -// if (r_b) -// STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, 0x0); -// else -// STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, lum); -// r_b = !r_b; - //break; } } @@ -231,196 +215,12 @@ void STS_Reed_Hall_Working(void) { } -void STS_Combined_Status_Processing(void) -{ - switch (sts_work_mode) - { - case STS_NETWORK_MODE: - sts_status_color = sts_cloud_netcolor; - break; - case STS_WIRED_MODE: // NO LAMP BAR FOR THOSE WATER LEAKAGE SENSOR OR SOAP CAPACITY SENSORS - sts_status_color = STS_DARK; -#ifdef STS_M1 - sts_water_leakage_result = (sts_reed_hall_result == STS_Status_Door_Open )?STS_RESULT_WATER_LEAKAGE_YES:STS_RESULT_WATER_LEAKAGE_NO; - sts_water_leakage_changed_flag = 1; -#endif - break; - case STS_REEDSWITCH_MODE: - sts_status_color = (sts_reed_hall_result == STS_Status_Door_Open )? STS_GREEN: STS_RED; - - break; - case STS_RSS_MODE: - if (sts_rss_result == STS_RESULT_NO_MOTION){ - sts_status_color = STS_GREEN; - } else if ((sts_rss_result == STS_RESULT_MOTION)) - { - sts_status_color = STS_RED; - } - break; - case STS_DUAL_MODE: // FOR STS_O6 - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_SOS_Release )) - { - sts_status_color = STS_GREEN; - - } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close )||(sts_reed_hall_2_result == STS_Status_SOS_Pushdown )) - { - sts_status_color = STS_RED; - - if (sts_reed_hall_2_result == STS_Status_SOS_Pushdown ) - { - sts_status_color = STS_RED_BLUE; - } - } - break; - - case STS_UNI_MODE: //FOR STS-O7 - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_SOS_Release )) - { - sts_status_color = STS_GREEN; - - } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close )||(sts_reed_hall_2_result == STS_Status_SOS_Pushdown )) - { - sts_status_color = STS_RED; - - if (sts_reed_hall_2_result == STS_Status_SOS_Pushdown ) - { - sts_status_color = STS_RED_BLUE; - } - } - - switch(sts_fall_rising_detected_result) - { - case STS_PRESENCE_NORMAL: - //do nothing - break; - - case STS_PRESENCE_LAYDOWN: - sts_lamp_bar_color = STS_YELLOW; - sts_status_color = STS_YELLOW; - break; - - case STS_PRESENCE_FALL: //RED_BLUE FLASH - sts_lamp_bar_color = STS_RED_BLUE; - sts_status_color = STS_RED_BLUE; - break; - - case STS_PRESENCE_RISING: //NORMAL OCCUPANCY STATUS - // sts_lamp_bar_color = STS_RED; - // sts_status_color = STS_RED; - break; - - default: -// sts_lamp_bar_color = STS_RED; -// sts_status_color = STS_RED; - break; - } - - break; - - case STS_REMOTE_REED_RSS_MODE: - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_result == STS_Status_Door_Open )) - { - sts_status_color = STS_GREEN; - - } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_result == STS_Status_Door_Close )) - { - sts_status_color = STS_RED; - } - break; - case STS_DUAL_RSS_MODE: - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_rss_2nd_result == STS_RESULT_NO_MOTION)) - { - sts_status_color = STS_GREEN; - } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_rss_2nd_result == STS_RESULT_MOTION)) - { - sts_status_color = STS_RED; - } - - break; - case STS_TOF_RSS_MODE: - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_tof_result == STS_RESULT_NO_PRESENCE)){ - sts_status_color = STS_GREEN; - - } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_tof_result == STS_RESULT_PRESENCE)) - { - sts_status_color = STS_RED; - } - - break; -// TO-DO LIST *********************************************************** - case STS_TOF_DISTANCE_MODE: - if ((sts_tof_result == STS_RESULT_NO_PRESENCE)) { - sts_status_color = STS_GREEN; - } else if ((sts_tof_result == STS_RESULT_PRESENCE)) { - sts_status_color = STS_RED; - } - break; - case STS_TOF_PRESENCE_MODE: - if ((sts_tof_result == STS_RESULT_NO_PRESENCE)) { - sts_status_color = STS_GREEN; - } else if ((sts_tof_result == STS_RESULT_PRESENCE)) { - sts_status_color = STS_RED; - } - break; - case STS_TOF_IN_OUT_MODE: - if ((sts_tof_result == STS_RESULT_NO_PRESENCE)) { - sts_status_color = STS_GREEN; - } else if ((sts_tof_result == STS_RESULT_PRESENCE)) { - sts_status_color = STS_RED; - } - break; -// TO-DO LIST *********************************************************** - default: - break; - } - - if ((sts_work_mode == STS_WIRED_MODE) || (sts_service_mask > STS_SERVICE_MASK_L0)) - { - sts_status_color = STS_DARK; - sts_lamp_bar_color = STS_DARK; - last_lamp_bar_color = STS_DARK; - STS_Lamp_Bar_Set_Dark(); - } - else - { - - if ((last_lamp_bar_color != sts_status_color)) - { - sts_lamp_bar_color = ((sts_service_mask == STS_SERVICE_MASK_L0)? sts_status_color:STS_DARK); - - STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); - - if ((sts_service_mask == STS_SERVICE_MASK_L0) || (sts_lamp_bar_color == STS_DARK)) - { - // STS_WS2812B_Refresh(); - } - - last_lamp_bar_color = sts_lamp_bar_color; - } - } - - //STS_Lamp_Bar_Refresh(); -#if 1 - if ((sts_rss_result_changed_flag)|| (sts_reed_hall_changed_flag)|| (sts_reed_hall_changed_flag)) - { - - //sts_rss_result_changed_flag =0; - //sts_reed_hall_changed_flag =0; - //sts_tof_result_changed_flag =0; -#ifdef STS_M1 - sts_water_leakage_changed_flag=0; -#endif - //sensor_data_ready = 1; - //STS_PRESENCE_SENSOR_Prepare_Send_Data(); - } -#endif -} void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) { __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); + HAL_TIM_PWM_Stop_DMA(&STS_LAMP_BAR_HTIM, STS_LAMP_BAR_TIM_CHANNEL); } @@ -440,6 +240,7 @@ void STS_Lamp_Bar_Self_Test_Simple(void) } APP_LOG(TS_OFF, VLEVEL_H, "\r\n [#1] RGB Space Lumianance Level Testing Finished\r\n"); } + void STS_Lamp_Bar_Self_Test(void) { uint8_t color=0, lum_level=DEFAULT_LUMINANCE_LEVEL; @@ -466,6 +267,7 @@ void STS_Lamp_Bar_Self_Test(void) STS_Lamp_Bar_Set_Dark(); } + void sts_rgb_unit_test(void) { @@ -493,3 +295,4 @@ void sts_rgb_unit_test(void) } + diff --git a/Core/Src/tim.c b/Core/Src/tim.c index 2b36273..7f8401c 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -133,7 +133,7 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) hdma_tim1_ch1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_tim1_ch1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; //DMA_MDATAALIGN_HALFWORD; hdma_tim1_ch1.Init.Mode = DMA_CIRCULAR; - hdma_tim1_ch1.Init.Priority = DMA_PRIORITY_HIGH; //was HIGH + hdma_tim1_ch1.Init.Priority = DMA_PRIORITY_LOW; //was HIGH if (HAL_DMA_Init(&hdma_tim1_ch1) != HAL_OK) { diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 22826ca..7019cb8 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -452,6 +452,194 @@ void STS_YunhornSTSFallDetection(void) } +void STS_Combined_Status_Processing(void) +{ + switch (sts_work_mode) + { + case STS_NETWORK_MODE: + sts_status_color = sts_cloud_netcolor; + break; + case STS_WIRED_MODE: // NO LAMP BAR FOR THOSE WATER LEAKAGE SENSOR OR SOAP CAPACITY SENSORS + sts_status_color = STS_DARK; +#ifdef STS_M1 + sts_water_leakage_result = (sts_reed_hall_result == STS_Status_Door_Open )?STS_RESULT_WATER_LEAKAGE_YES:STS_RESULT_WATER_LEAKAGE_NO; + sts_water_leakage_changed_flag = 1; +#endif + break; + case STS_REEDSWITCH_MODE: + + sts_status_color = (sts_reed_hall_result == STS_Status_Door_Open )? STS_GREEN: STS_RED; + + break; + case STS_RSS_MODE: + if (sts_rss_result == STS_RESULT_NO_MOTION){ + sts_status_color = STS_GREEN; + } else if ((sts_rss_result == STS_RESULT_MOTION)) + { + sts_status_color = STS_RED; + } + break; + case STS_DUAL_MODE: // FOR STS_O6 + if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_SOS_Release )) + { + sts_status_color = STS_GREEN; + + } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close )||(sts_reed_hall_2_result == STS_Status_SOS_Pushdown )) + { + sts_status_color = STS_RED; + + if (sts_reed_hall_2_result == STS_Status_SOS_Pushdown ) + { + sts_status_color = STS_RED_BLUE; + } + } + break; + + case STS_UNI_MODE: //FOR STS-O7 + if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_SOS_Release )) + { + sts_status_color = STS_GREEN; + + } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close )||(sts_reed_hall_2_result == STS_Status_SOS_Pushdown )) + { + sts_status_color = STS_RED; + + if (sts_reed_hall_2_result == STS_Status_SOS_Pushdown ) + { + sts_status_color = STS_RED_BLUE; + } + } + + switch(sts_fall_rising_detected_result) + { + case STS_PRESENCE_NORMAL: + //do nothing + break; + + case STS_PRESENCE_LAYDOWN: + sts_lamp_bar_color = STS_YELLOW; + sts_status_color = STS_YELLOW; + break; + + case STS_PRESENCE_FALL: //RED_BLUE FLASH + sts_lamp_bar_color = STS_RED_BLUE; + sts_status_color = STS_RED_BLUE; + break; + + case STS_PRESENCE_RISING: //NORMAL OCCUPANCY STATUS + // sts_lamp_bar_color = STS_RED; + // sts_status_color = STS_RED; + break; + + default: +// sts_lamp_bar_color = STS_RED; +// sts_status_color = STS_RED; + break; + } + + break; + + case STS_REMOTE_REED_RSS_MODE: + if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_result == STS_Status_Door_Open )) + { + sts_status_color = STS_GREEN; + + } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_result == STS_Status_Door_Close )) + { + sts_status_color = STS_RED; + } + break; + case STS_DUAL_RSS_MODE: + if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_rss_2nd_result == STS_RESULT_NO_MOTION)) + { + sts_status_color = STS_GREEN; + } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_rss_2nd_result == STS_RESULT_MOTION)) + { + sts_status_color = STS_RED; + } + + break; + case STS_TOF_RSS_MODE: + if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_tof_result == STS_RESULT_NO_PRESENCE)){ + sts_status_color = STS_GREEN; + + } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_tof_result == STS_RESULT_PRESENCE)) + { + sts_status_color = STS_RED; + } + + break; +// TO-DO LIST *********************************************************** + case STS_TOF_DISTANCE_MODE: + if ((sts_tof_result == STS_RESULT_NO_PRESENCE)) { + sts_status_color = STS_GREEN; + } else if ((sts_tof_result == STS_RESULT_PRESENCE)) { + sts_status_color = STS_RED; + } + break; + case STS_TOF_PRESENCE_MODE: + if ((sts_tof_result == STS_RESULT_NO_PRESENCE)) { + sts_status_color = STS_GREEN; + } else if ((sts_tof_result == STS_RESULT_PRESENCE)) { + sts_status_color = STS_RED; + } + break; + case STS_TOF_IN_OUT_MODE: + if ((sts_tof_result == STS_RESULT_NO_PRESENCE)) { + sts_status_color = STS_GREEN; + } else if ((sts_tof_result == STS_RESULT_PRESENCE)) { + sts_status_color = STS_RED; + } + break; +// TO-DO LIST *********************************************************** + default: + break; + } + + if ((sts_work_mode == STS_WIRED_MODE) || (sts_service_mask > STS_SERVICE_MASK_L0)) + { + sts_status_color = STS_DARK; + sts_lamp_bar_color = STS_DARK; + last_lamp_bar_color = STS_DARK; + STS_Lamp_Bar_Set_Dark(); + } + else + { + + if ((last_lamp_bar_color != sts_status_color)) + { + sts_lamp_bar_color = ((sts_service_mask == STS_SERVICE_MASK_L0)? sts_status_color:STS_DARK); + + STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); + + if ((sts_service_mask == STS_SERVICE_MASK_L0) || (sts_lamp_bar_color == STS_DARK)) + { + // STS_WS2812B_Refresh(); + } + + last_lamp_bar_color = sts_lamp_bar_color; + } + } + + //STS_Lamp_Bar_Refresh(); +#if 1 + if ((sts_rss_result_changed_flag)|| (sts_reed_hall_changed_flag)|| (sts_reed_hall_changed_flag)) + { + + //sts_rss_result_changed_flag =0; + //sts_reed_hall_changed_flag =0; + //sts_tof_result_changed_flag =0; +#ifdef STS_M1 + sts_water_leakage_changed_flag=0; +#endif + //sensor_data_ready = 1; + //STS_PRESENCE_SENSOR_Prepare_Send_Data(); + } +#endif +} + + + void STS_PRESENCE_SENSOR_NVM_CFG(void) { sts_presence_rss_config.default_start_m = (float)((float)sts_cfg_nvm.p[RSS_CFG_START_M]*0.1f); diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 5ff51c2..32c96bb 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -72,7 +72,7 @@ extern volatile uint32_t event_start_time, event_stop_time; extern volatile uint16_t sts_unconscious_threshold; volatile uint8_t sts_occupancy_overtime_state = 0; volatile uint8_t sts_presence_fall_detection=TRUE; -volatile uint32_t SamplingPeriodicity = 3000; //unit ms +volatile uint32_t SamplingPeriodicity = 2000; //unit ms volatile uint32_t HeartBeatPeriodicity = 120000; //unit ms volatile uint8_t STS_LoRa_WAN_Joined = 0; volatile uint8_t mems_int1_detected = 0; @@ -1108,7 +1108,8 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) //HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); /* STS GREEN */ //if ((sts_work_mode != STS_WIRED_MODE)) uint8_t high4=(sts_lamp_bar_color>>4)&0x0f, low4=sts_lamp_bar_color&0x0f; - if (high4==0) { + if (high4==0) + { if (last_sts_lamp_bar_color != sts_lamp_bar_color) { STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, DEFAULT_LUMINANCE_LEVEL); @@ -1149,6 +1150,7 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) } #endif + } static void OnYunhornSTSDurationCheckTimerEvent(void *context) @@ -1340,7 +1342,7 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) } heart_beat_timer = 1; UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); - HAL_Delay(3000); + //HAL_Delay(3000); UTIL_TIMER_Start(&STSLampBarColorTimer); //UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer);