/*
 * @Description: 按键模块-svc层
 * @Author: yangsw
 * @Date: 2021-06-11 09:49:42
 * @LastEditTime: 2022-06-17 10:18:35
 * @LastEditors: yangsw
 * @Reference:
 */
#include "svc_key.h"
#include "../../log/svc/svc_log.h"
#include "../../lcd/svc/svc_lcd.h"
#include "../../ir/svc/svc_ir_uart.h"
#include "../../flash/svc/svc_flash.h"
#include "../../cloud/svc/svc_cloud.h"
static S_Key *ps_key;
// static S_Flash_Data *ps_flash_key;
//static S_Lcd *ps_lcd;
/**
 * @brief: 按键模块初始化
 * @param  {void}
 * @return {void}
 * @note:
 * @see:
 */
void Svc_Key_Init(S_Key *ps_key_temp)
{
  ps_key = ps_key_temp;
  Bsp_Key_Gpio_Init();
  //  ps_flash_key = Svc_Flash_Get_Data();
//  ps_lcd = Svc_Lcd_Get_Data();
}

/**
 * @brief: 按键释放后操作
 * @return {void}
 * @note:
 * @see:
 * @param {S_Key} *ps_key 按键相关参数
 */
void Svc_Key_Release(S_Key *ps_key)
{
  if (ps_key->key_cnt >= KEY_6S) // 按键按下的时间超过6s
  {
    ps_key->e_keyPressType = E_KEY_6S_STATE;
  }

  else if (ps_key->key_cnt >= KEY_3S && ps_key->key_cnt < KEY_6S)
  {
    ps_key->e_keyPressType = E_KEY_3S_STATE;
  }
  else
  {
    ps_key->e_keyPressType = E_KEY_1S_STATE;
  }
  ps_key->key_cnt = 0; // 清除按键按下时间计数
}

void Svc_Key_Clear_Key_UpCnt(void)
{
  ps_key->key_up_cnt = 0;
}

/**
 * @brief: 按键按下后操作 ,按下高电平
 * @return {void}
 * @note:
 * @see:
 * @param {S_Key} *ps_key 按键相关参数
 */
void Svc_Key_Press(S_Key *ps_key)
{
    ps_key->key_cnt++; // 按键按下时间累加
    Svc_Log_Printf(LOG_INFO, "%s->Key Press:%u s.", __FUNCTION__, ps_key->key_cnt);
    if (ps_key->key_cnt >= KEY_BREAK) // 按键超时
    {
        ps_key->e_keyPressType = E_KEY_INIT_STATE;
        ps_key->key_cnt = 0;
        Svc_Flash_Set_Device_Alarm(b16Key_Abn); // 到时间就显示按键超时
    }
    else if (ps_key->key_cnt == KEY_6S) // 显示UP
    {
        Svc_Lcd_Display_EnUpdata();
    }
    else if (ps_key->key_cnt == KEY_3S) // 显示IR-OPEN
    {
        Svc_Lcd_Display_EnIr();
    }
    else if(ps_key->key_cnt == 2)
    {
        Svc_Lcd_Init_Config(); 
    }
    else
    {
    }
}

/**
 * @brief: 获取按键当前状态
 * @param  {void}
 * @return {E_Gpio_State} 按键当前状态
 * @note:
 * @see:
 */
E_Gpio_State Svc_Key_Get_State(void)
{
  return Bsp_Key_Get_State();
}

/**
 * @brief: 按键模块是否忙
 * @param  {void}
 * @return {E_Result_Check} E_CHECK_OK:按键模块忙，E_CHECK_FAIL:按键模块空闲
 * @note:
 * @see:
 */
E_Result_Check Svc_Key_Is_Busy(void)
{
  if (ps_key->e_keyPressType != E_KEY_INIT_STATE)
  {
    return E_CHECK_OK;
  }
  return E_CHECK_FAIL;
}
