diff --git a/Core/Inc/yunhorn_sts_prd_conf.h b/Core/Inc/yunhorn_sts_prd_conf.h index 6c0b0a3..46ac3d8 100644 --- a/Core/Inc/yunhorn_sts_prd_conf.h +++ b/Core/Inc/yunhorn_sts_prd_conf.h @@ -223,19 +223,27 @@ //#define YUNHORN_STS_M10_LORA_APP_DATA_PORT 9U //#define YUNHORN_STS_M10_LORA_APP_HTBT_PORT 9U -#define STS_IOC_IN_0 ((uint8_t)0x01) /* I/O Control sensor 1 */ -#define STS_IOC_IN_1 ((uint8_t)0x02) /* I/O Control sensor 2 */ -#define STS_IOC_IN_2 ((uint8_t)0x04) /* I/O Control sensor 3 */ -#define STS_IOC_IN_3 ((uint8_t)0x08) /* I/O Control sensor 4 */ +#define STS_IOC_IN_0 ((uint8_t)0x01) /* I/O Control sensor 1 */ // HALL-1 +#define STS_IOC_IN_1 ((uint8_t)0x02) /* I/O Control sensor 2 */ // HALL-2 +#define STS_IOC_IN_2 ((uint8_t)0x04) /* I/O Control sensor 3 */ // MOTION-1 +#define STS_IOC_IN_3 ((uint8_t)0x08) /* I/O Control sensor 4 */ // HALL-4 + #define STS_IOC_OUT_0 ((uint8_t)0x10) /* I/O Control out interface 1 */ #define STS_IOC_OUT_1 ((uint8_t)0x20) /* I/O Control out interface 2 */ #define STS_IOC_OUT_2 ((uint8_t)0x40) /* I/O Control out interface 3 */ #define STS_IOC_OUT_3 ((uint8_t)0x80) /* I/O Control out interface 4 */ -#define STS_IOC_MASK (0xFFu) /* I/O Control mask */ +#define STS_IOC_MASK_ALL (0xFF) /* I/O Control mask */ +#define STS_IOC_MASK_NONE (0x00) /* NONE enabled */ #define STS_IOC_IN_ALL (STS_IOC_IN_0|STS_IOC_IN_1 |STS_IOC_IN_2 |STS_IOC_IN_3) #define STS_IOC_OUT_ALL (STS_IOC_OUT_0|STS_IOC_OUT_1|STS_IOC_OUT_2|STS_IOC_OUT_3) #define IS_STS_LAMP_BAR_OUTPUT_ENABLE STS_IOC_OUT_0 #define IS_STS_RS485_OUTPUT_ENABLE STS_IOC_OUT_1 +#define STS_IOC_MODE_0_MASK STS_IOC_OUT_0 //NETWOR MODE, NO ON-BOARD INTERFACE, OUT LAMP BAR ENABLED +#define STS_IOC_MODE_1_MASK STS_IOC_IN_1 //WIRED MODE, ONE ON-BOARD INTEFACE ENABLE, NO LAMP BAR +#define STS_IOC_MODE_2_MASK STS_IOC_IN_0|STS_IOC_IN_1 //REEDSWITCH MODE, ONE ON-BOARD INTERFACE ENABLED, LAMP BAR ENABLED +#define STS_IOC_MODE_3_MASK STS_IOC_IN_2|STS_IOC_IN_1|STS_IOC_OUT_0 // RSS MODE, ONE ON-BOARD INTERFACE MOTION ENABLED, LAMP BAR ENABLED +#define STS_IOC_MODE_4_MASK STS_IOC_IN_0|STS_IOC_IN_1|STS_IOC_IN_2|STS_IOC_OUT_0|STS_IOC_OUT_1 //DUAL MODE +#define STS_IOC_MODE_5_MASK STS_IOC_IN_ALL|STS_IOC_OUT_ALL //UNI_MODE #define MajorVer 24U #define MinorVer 8U diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index ed48e59..9d47fae 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -169,56 +169,37 @@ void STS_Lamp_Bar_Refresh(void) void STS_Lamp_Bar_Set_STS_RGB_Color(uint8_t sts_lamp_color, uint8_t lum) { - - switch (sts_lamp_color) + if (sts_lamp_color <=8) { - case STS_DARK: - STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0); - break; - case STS_GREEN: - STS_Lamp_Bar_Set_RGB_Color(0x0, lum, 0x0); - break; - case STS_RED: - STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, 0x0); - break; - case STS_BLUE: - STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, lum); - break; - case STS_YELLOW: - STS_Lamp_Bar_Set_RGB_Color(lum, lum, 0x0); - break; - case STS_PINK: - STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, lum); - break; - case STS_CYAN: - STS_Lamp_Bar_Set_RGB_Color(0x0, lum, lum); - break; - case STS_WHITE: - STS_Lamp_Bar_Set_RGB_Color(lum, lum, lum); - break; - case STS_COLOR_MAX: - sts_lamp_bar_color = STS_RED_BLUE; - break; - case STS_GREENDARK: - sts_lamp_bar_color = STS_GREEN_DARK; - break; - case STS_REDDARK: - sts_lamp_bar_color = STS_RED_DARK; - break; - case STS_REDBLUE: - sts_lamp_bar_color = STS_RED_BLUE; - break; - case STS_BLUEDARK: - sts_lamp_bar_color = STS_BLUE_DARK; - break; - case STS_REDGREEN: - sts_lamp_bar_color = STS_RED_GREEN; - break; - case STS_BLUEGREEN: - sts_lamp_bar_color = STS_BLUE_GREEN; - break; - + switch (sts_lamp_color) + { + case STS_DARK: + STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0); + break; + case STS_GREEN: + STS_Lamp_Bar_Set_RGB_Color(0x0, lum, 0x0); + break; + case STS_RED: + STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, 0x0); + break; + case STS_BLUE: + STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, lum); + break; + case STS_YELLOW: + STS_Lamp_Bar_Set_RGB_Color(lum, lum, 0x0); + break; + case STS_PINK: + STS_Lamp_Bar_Set_RGB_Color(lum, 0x0, lum); + break; + case STS_CYAN: + STS_Lamp_Bar_Set_RGB_Color(0x0, lum, lum); + break; + case STS_WHITE: + STS_Lamp_Bar_Set_RGB_Color(lum, lum, lum); + break; + } } + } void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 074728f..06db1a5 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -479,8 +479,9 @@ void STS_Combined_Status_Processing(void) switch (sts_work_mode) { case STS_NETWORK_MODE: - sts_status_color = sts_cloud_netcolor+0x30; - sts_lamp_bar_color = sts_cloud_netcolor+0x30; + sts_status_color = sts_cloud_netcolor; + sts_lamp_bar_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; @@ -848,7 +849,7 @@ void STS_PRESENCE_SENSOR_Init(void) APP_LOG(TS_ON, VLEVEL_M, "##### YunHorn SmarToilets(r) Presence Sensor Started\r\n"); sts_o7_sensorData.workmode = (uint8_t)sts_work_mode; //STS_DUAL_MODE; - //sts_o7_sensorData.lamp_bar_color = (uint8_t)STS_GREEN; + sts_o7_sensorData.lamp_bar_color = (uint8_t)STS_GREEN; sts_o7_sensorData.battery_Pct = 99; sts_o7_sensorData.dutycycletimelevel = 1; sts_o7_sensorData.event_sensor1_start_time = 0; diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index f07d22c..7b2570c 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -83,6 +83,7 @@ volatile uint8_t upload_message_timer=0; volatile uint8_t heart_beat_timer =0; volatile uint32_t wcnt=0; volatile bool p2_work_finished=true; +extern volatile uint8_t luminance_level; uint8_t outbuf[255]={0x0}; volatile static bool r_b=true; volatile sts_cfg_nvm_t sts_cfg_nvm = { @@ -613,7 +614,7 @@ void LoRaWAN_Init(void) UTIL_TIMER_Create(&TxLedTimer, LED_PERIOD_TIME, UTIL_TIMER_ONESHOT, OnTxTimerLedEvent, NULL); UTIL_TIMER_Create(&RxLedTimer, LED_PERIOD_TIME, UTIL_TIMER_ONESHOT, OnRxTimerLedEvent, NULL); UTIL_TIMER_Create(&JoinLedTimer, LED_PERIOD_TIME, UTIL_TIMER_PERIODIC, OnJoinTimerLedEvent, NULL); - UTIL_TIMER_Create(&STSLampBarColorTimer, LED_PERIOD_TIME, UTIL_TIMER_PERIODIC, OnYunhornSTSLampBarColorTimerEvent, NULL); + UTIL_TIMER_Create(&STSLampBarColorTimer, LED_PERIOD_TIME, UTIL_TIMER_ONESHOT, OnYunhornSTSLampBarColorTimerEvent, NULL); UTIL_TIMER_Create(&STSDurationCheckTimer, 20*LED_PERIOD_TIME, UTIL_TIMER_PERIODIC, OnYunhornSTSDurationCheckTimerEvent, NULL); if (FLASH_IF_Init(NULL) != FLASH_IF_OK) @@ -939,7 +940,7 @@ static void SendTxData(void) } else if (sts_work_mode == STS_UNI_MODE) { AppData.Port = (uint8_t)YUNHORN_STS_O7_LORA_APP_DATA_PORT; - } else if ((sts_work_mode == STS_RSS_MODE)||(sts_work_mode == STS_REEDSWITCH_MODE)) + } else if ((sts_work_mode == STS_RSS_MODE)||(sts_work_mode == STS_REEDSWITCH_MODE)||(sts_work_mode == STS_NETWORK_MODE)||(sts_work_mode == STS_WIRED_MODE)) { AppData.Port = (uint8_t)YUNHORN_STS_O2_LORA_APP_DATA_PORT; } @@ -953,7 +954,7 @@ static void SendTxData(void) AppData.Port = (uint8_t)YUNHORN_STS_O6_LORA_APP_HTBT_PORT; //LORAWAN_USER_APP_PORT+1; else if (sts_work_mode == STS_UNI_MODE) AppData.Port = (uint8_t)YUNHORN_STS_O7_LORA_APP_HTBT_PORT; //LORAWAN_USER_APP_PORT+1; - else if ((sts_work_mode == STS_RSS_MODE)||(sts_work_mode == STS_REEDSWITCH_MODE)) + else if ((sts_work_mode == STS_RSS_MODE)||(sts_work_mode == STS_REEDSWITCH_MODE)||(sts_work_mode == STS_NETWORK_MODE)||(sts_work_mode == STS_WIRED_MODE)) AppData.Port = (uint8_t)YUNHORN_STS_O2_LORA_APP_HTBT_PORT; //LORAWAN_USER_APP_PORT+1; //AppData.Port = (uint8_t)sts_sendhtbtport; //LORAWAN_USER_APP_PORT+1; @@ -1161,15 +1162,23 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) //uint8_t lum=DEFAULT_LUMINANCE_LEVEL; //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&0x07; + uint8_t high4=(sts_lamp_bar_color>>4)&0x0f, low4=sts_lamp_bar_color&0x0f; +#if 0 + luminance_level += 10; + luminance_level %= 60; + luminance_level = MAX(10,luminance_level); +#endif + //if (STSLampBarColorTimer.IsRunning) + { + UTIL_TIMER_Stop(&STSLampBarColorTimer); if (high4==0) { - if (last_sts_lamp_bar_color != sts_lamp_bar_color) + //if (last_sts_lamp_bar_color != sts_lamp_bar_color) { - __disable_irq(); - STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, DEFAULT_LUMINANCE_LEVEL); - __enable_irq(); + //__disable_irq(); + STS_Lamp_Bar_Set_STS_RGB_Color(sts_lamp_bar_color, luminance_level); + //__enable_irq(); //STS_WS2812B_Refresh(); last_sts_lamp_bar_color = sts_lamp_bar_color; } @@ -1178,22 +1187,25 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context) if (r_b) { //__disable_irq(); - STS_Lamp_Bar_Set_STS_RGB_Color(high4, DEFAULT_LUMINANCE_LEVEL); + STS_Lamp_Bar_Set_STS_RGB_Color(high4, luminance_level); //__enable_irq(); - last_sts_lamp_bar_color = high4; + //last_sts_lamp_bar_color = high4; //STS_WS2812B_Refresh(); } else { //__disable_irq(); - STS_Lamp_Bar_Set_STS_RGB_Color(low4, DEFAULT_LUMINANCE_LEVEL); + STS_Lamp_Bar_Set_STS_RGB_Color(low4, luminance_level); //__enable_irq(); - last_sts_lamp_bar_color = low4; + //last_sts_lamp_bar_color = low4; //STS_WS2812B_Refresh(); } r_b = !r_b; } + UTIL_TIMER_Start(&STSLampBarColorTimer); + } + } static void OnYunhornSTSDurationCheckTimerEvent(void *context) @@ -1419,21 +1431,23 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams) if (STS_LoRa_WAN_Joined) { heart_beat_timer = 1; - //SendTxData(); - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + SendTxData(); - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + + //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); - UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); //UTIL_TIMER_Start(&TxTimer); //UTIL_TIMER_Start(&STSDurationCheckTimer); OnYunhornSTSHeartBeatPeriodicityChanged(HeartBeatPeriodicity); UTIL_TIMER_Create(&YunhornSTSRSSWakeUpTimer, YUNHORN_STS_RSS_WAKEUP_CHECK_TIME, UTIL_TIMER_ONESHOT, OnYunhornSTSOORSSWakeUpTimerEvent, NULL); + UTIL_TIMER_Start(&YunhornSTSRSSWakeUpTimer); STS_SENSOR_Distance_Test_Process(); APP_LOG(TS_OFF, VLEVEL_H, "\r\nRSS Measured Distance=[%u] mm \r\n", (uint16_t)sts_distance_rss_distance); + } /* USER CODE END OnJoinRequest_1 */ @@ -2278,7 +2292,40 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) if (sts_work_mode == STS_NETWORK_MODE) { //network mode sts_cloud_netcolor = (uint8_t)(tlv_buf[CFG_CMD5]-0x30); - APP_LOG(TS_OFF, VLEVEL_L, "\r\n Cloud Color Set to %u = %02X \r\n", sts_cloud_netcolor, (uint8_t)tlv_buf[CFG_CMD5]); + if (sts_cloud_netcolor == STS_COLOR_MAX) sts_cloud_netcolor = STS_RED_BLUE; + else if (sts_cloud_netcolor > STS_COLOR_MAX) + { +#if 1 + switch((uint8_t)tlv_buf[CFG_CMD5]) + { + case STS_GREENDARK: + sts_lamp_bar_color = STS_GREEN_DARK; + sts_cloud_netcolor = STS_GREEN_DARK; + break; + case STS_REDDARK: + sts_lamp_bar_color = STS_RED_DARK; + sts_cloud_netcolor = STS_RED_DARK; + break; + case STS_REDBLUE: + sts_lamp_bar_color = STS_RED_BLUE; + sts_cloud_netcolor = STS_RED_BLUE; + break; + case STS_BLUEDARK: + sts_lamp_bar_color = STS_BLUE_DARK; + sts_cloud_netcolor = STS_BLUE_DARK; + break; + case STS_REDGREEN: + sts_lamp_bar_color = STS_RED_GREEN; + sts_cloud_netcolor = STS_RED_GREEN; + break; + case STS_BLUEGREEN: + sts_lamp_bar_color = STS_BLUE_GREEN; + sts_cloud_netcolor = STS_BLUE_GREEN; + break; + } + } +#endif + APP_LOG(TS_OFF, VLEVEL_L, "\r\n Cloud Color Set to 0X%02X \r\n",sts_cloud_netcolor); } sts_service_mask = STS_SERVICE_MASK_L0; @@ -2382,9 +2429,33 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) //sts_service_mask = STS_SERVICE_MASK_L0; //sts_lamp_bar_color = STS_GREEN; + switch (sts_work_mode) { + case STS_NETWORK_MODE: + sts_cfg_nvm.sts_ioc_mask = STS_IOC_MODE_0_MASK; + break; + case STS_WIRED_MODE: + sts_cfg_nvm.sts_ioc_mask = STS_IOC_MODE_1_MASK; + break; + case STS_REEDSWITCH_MODE: + sts_cfg_nvm.sts_ioc_mask = STS_IOC_MODE_2_MASK; + break; + case STS_RSS_MODE: + sts_cfg_nvm.sts_ioc_mask = STS_IOC_MODE_3_MASK; + break; + case STS_DUAL_MODE: + sts_cfg_nvm.sts_ioc_mask = STS_IOC_MODE_4_MASK; + break; + case STS_UNI_MODE: + sts_cfg_nvm.sts_ioc_mask = STS_IOC_MODE_5_MASK; + break; + default: + sts_cfg_nvm.sts_ioc_mask = STS_IOC_MASK_NONE; + break; + } sts_cfg_nvm.work_mode = (uint8_t)sts_work_mode; if (sts_work_mode == STS_UNI_MODE) { sts_presence_fall_detection=TRUE; + } else { sts_presence_fall_detection=FALSE; }