/* 远程按键驱动模块：
 * 按键数据由外部（如远程显示、串口等）写入 g_tRemoteKey，
 * 本模块通过 Key_Read() 供菜单等上层逻辑读取。
 */
#include "key.h"

tagRKeyCtrl g_tRemoteKey;             /* 远程按键控制结构 */

/******************************************************************************
 * 函数名: Key_Init
 * 功能:   按键模块初始化，将远程按键控制结构体复位为默认状态
 * 参数:   无
 * 返回:   无
 * 说明:   清除有效标志、键值置 KEY_NONE、关闭远程按键使能
 *****************************************************************************/
void Key_Init(void)
{
    g_tRemoteKey.byKeyValid = EN_KEY_FLAG_NULL;  /* 无新按键 */
    g_tRemoteKey.byKeyValue = KEY_NONE;         /* 键值清零 */
    g_tRemoteKey.bUseRkey = 1;                  /* 不启用远程按键 */
}

/******************************************************************************
 * 函数名: Key_Read
 * 功能:   读取当前按键值（消费式读取）
 * 参数:   无
 * 返回:   按键值（KEY_U/KEY_D/KEY_L/KEY_R/KEY_ENT/KEY_ESC/KEY_F1/KEY_F2 等），
 *         无按键时返回 KEY_NONE
 * 说明:   若存在新按键则返回键值并清除有效标志；每次调用最多消费一个按键事件
 *****************************************************************************/
uint8_t Key_Read(void)
{
    uint8_t byKeyTmp;                 /* 本次读取到的键值 */

    byKeyTmp = KEY_NONE;

    if (EN_KEY_FLAG_NEW == g_tRemoteKey.byKeyValid)
    {
        byKeyTmp = g_tRemoteKey.byKeyValue;       /* 取出键值 */
        g_tRemoteKey.byKeyValid = EN_KEY_FLAG_NULL;  /* 消费后清除标志 */
    }

    return byKeyTmp;
}


