mirror of
https://gitee.com/moluo-tech/AT-Command
synced 2025-06-18 16:27:53 +00:00
74 lines
2.6 KiB
C
74 lines
2.6 KiB
C
![]() |
/******************************************************************************
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* Copyright (c) 2017~2020, <morro_luo@163.com>
|
|||
|
*
|
|||
|
* SPDX-License-Identifier: Apache-2.0
|
|||
|
*
|
|||
|
* Change Logs:
|
|||
|
* Date Author Notes
|
|||
|
* 2017-08-10 Morro Initial version
|
|||
|
******************************************************************************/
|
|||
|
#include "key.h"
|
|||
|
#include <stddef.h>
|
|||
|
|
|||
|
static key_t *keyhead = NULL; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>*/
|
|||
|
|
|||
|
/*******************************************************************************
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[in] key - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[in] readkey - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* @param[in] event - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* @return true - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>, false - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|||
|
******************************************************************************/
|
|||
|
bool key_create(key_t *key, int (*readkey)(void),
|
|||
|
void (*event)(int type, unsigned int duration))
|
|||
|
{
|
|||
|
key_t *keytail = keyhead;
|
|||
|
if (key == NULL || readkey == NULL || event == NULL)
|
|||
|
return 0;
|
|||
|
key->event = event;
|
|||
|
key->readkey = readkey;
|
|||
|
key->next = NULL;
|
|||
|
if (keyhead == NULL) {
|
|||
|
keyhead = key;
|
|||
|
return 1;
|
|||
|
}
|
|||
|
while (keytail->next != NULL) /*ת<><D7AA><EFBFBD><EFBFBD>β*/
|
|||
|
keytail = keytail->next;
|
|||
|
keytail->next = key;
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
/*******************************************************************************
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>账<EFBFBD><EFBFBD>
|
|||
|
* @return none
|
|||
|
******************************************************************************/
|
|||
|
void key_scan_process(void)
|
|||
|
{
|
|||
|
key_t *k;
|
|||
|
for (k = keyhead; k != NULL; k = k->next) {
|
|||
|
if (k->readkey()) {
|
|||
|
if (k->tick) {
|
|||
|
if (is_timeout(k->tick, LONG_PRESS_TIME)) /*<2A><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
|||
|
k->event(KEY_LONG_DOWN, get_tick() - k->tick);
|
|||
|
} else {
|
|||
|
k->tick = get_tick(); /*<2A><>¼<EFBFBD>״ΰ<D7B4><CEB0><EFBFBD>ʱ<EFBFBD><CAB1>*/
|
|||
|
}
|
|||
|
} else if (k->tick) {
|
|||
|
if (is_timeout(k->tick, LONG_PRESS_TIME)) { /*<2A><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> */
|
|||
|
k->event(KEY_LONG_UP, get_tick() - k->tick);
|
|||
|
}
|
|||
|
|
|||
|
/*<2A>̰<EFBFBD><CCB0>ͷŲ<CDB7><C5B2><EFBFBD> ---------------------------------------------------*/
|
|||
|
if (is_timeout(k->tick, KEY_DEBOUNCE_TIME) &&
|
|||
|
!is_timeout(k->tick, LONG_PRESS_TIME)) {
|
|||
|
k->event(KEY_PRESS, get_tick() - k->tick);
|
|||
|
}
|
|||
|
|
|||
|
k->tick = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|