137 lines
4.1 KiB
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*/
|