/** ****************************************************************************** * @file sts_remote_control.c * * @author Yunhorn (r) Technology Limited Application Team * * @brief Yunhorn (r) SmarToilets (r) HMAC-SHA1 Process file. * ****************************************************************************** * @attention * * Copyright (c) 2023 Yunhorn Technology Limited. * Copyright (c) 2023 Shenzhen Yunhorn Technology Co., Ltd. * All rights reserved. ****************************************************************************** */ #include "main.h" #include "sts_remote_control.h" #include "yunhorn_sts_prd_conf.h" #include "yunhorn_sts_sensors.h" service_period_per_day_t rc_service_period[4] = { {0x1f, 6, 30, 12, 00}, {0x60, 13, 00, 18, 00}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}; static bool sts_rc_in_service_period = true; static void STS_Check_Service_Period(void) { struct tm time_now = {0}; SysTime_t UnixEpoch = SysTimeGet(); UnixEpoch.Seconds -= 18; /*removing leap seconds*/ SysTimeLocalTime(UnixEpoch.Seconds, &time_now); bool sts_rc_in_service_period_try = false; for (uint8_t i = 0; i < 4; i++) { if (rc_service_period[i].enable) { if ((time_now.tm_hour >= rc_service_period[i].start_hour) && (time_now.tm_hour < rc_service_period[i].end_hour)) { sts_rc_in_service_period_try = true; } } } sts_rc_in_service_period = sts_rc_in_service_period_try; } extern uint8_t rf_payload[3]; /* * measure humidity --> over threshold --> caution wet floor + power on() * measure humidity --> not over threshold --> welcome pic or power off * button- switch 1:power off ---> power off * button- switch 2/1: local control ? via internal sensor * button- switch 2/2: cloud control ? * key_name --> 1/2/3/4/5/6/7/8 or ON/OFF/FIRST/NEXT/5S/10S/15S/30S * cmd_value---> key2cmd[key_name] 0x01,0x08,0x0c,0x * */ static void SendRemoteControlData(void) { /* sts_rf_cmd_status: global cmd process status */ /* */ switch (sts_rf_cmd_status) { case STS_NODESELF_CMD_PENDING_SEND: if (sts_rf_projector_power_on == true) // rf_payload[2] |= rf_button_2_cmd4bits[sts_rc_cmd_value]; STS_RF_Send_Button_Multi_Times(rf_payload, sts_rf_cmd_value); sts_rf_cmd_status = STS_RF_CMD_SENT_OUT; break; case STS_CLOUD_CMD_PENDING_SEND: // CLOUD DOWNLINK INSTRUCTION if (sts_rf_cloud_cmd == BUTTON_OFF) // if ask to power off { sts_rf_cmd_value = BUTTON_OFF; // rf_payload[2] |= rf_button_2_cmd4bits[sts_rc_cmd_value]; //rf_cmd[BUTTON_ON];//sts_rf_cloud_cmd; sts_rf_projector_power_on = false; } else { // else other show pic cmd if (sts_rf_projector_power_on == false) // if it's still powered off yet, power it on { sts_rf_cmd_value = BUTTON_ON; // rf_payload[2] |= rf_button_2_cmd4bits[sts_rc_cmd_value]; STS_RF_Send_Button_Multi_Times(rf_payload, sts_rf_cloud_cmd); sts_rf_projector_power_on = true; HAL_Delay(2000); // need to test 2 sec good enough or not... maybe 30 seconds... } // delay 2 sec, then send cloud cmd... // rf_payload[2] |= rf_button_2_cmd4bits[sts_rc_cloud_cmd]; STS_RF_Send_Button_Multi_Times(rf_payload, sts_rf_cloud_cmd); } sts_rf_cmd_status = STS_RF_CMD_SENT_OUT; break; case STS_RF_CMD_SENT_OUT: // Do nothing break; case STS_RF_CMD_NONE: // No cmd to send out break; case 4: break; case 5: break; case 6: break; case 7: break; case 8: break; case 9: break; case 10: break; case 11: break; case 12: break; case 13: break; case 14: break; case 15: break; } } /* end of sts_remote_control.c*/