WLE5CC_NODE_STS/STS/RC/sts_remote_control.c

137 lines
4.1 KiB
C

/**
******************************************************************************
* @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*/