/* * Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved. * * SPDX-License-Identifier: MIT */ #ifndef __MESON_KEYPAD_H #define __MESON_KEYPAD_H #ifdef __cplusplus extern "C" { #endif #include "common.h" #include #include #include "FreeRTOS.h" #include #include #include #include /* common macro */ #define TIMER_CYCLE_TIME 40 #define KEY_JITTER_COUNT 1 /* key event */ #define EVENT_SHORT (1 << 0) #define EVENT_LONG (1 << 1) /* adc keypad */ #define ADCKEY_ID_BASE 512 #define SAMPLE_DEVIATION 160 enum KeyType { GPIO_KEY = 0, ADC_KEY, KEY_TYPE_NUM }; enum GpioLevel { LOW = 0, HIGH }; enum KeyState { UP = 0, DOWN, }; struct xReportEvent { uint32_t ulCode; uint32_t event; TickType_t responseTime; void *data; }; typedef void (*CallBack_t)(struct xReportEvent arg); struct xKeyInitInfo { uint32_t ulKeyId; uint32_t eventMask; uint32_t repeatTimeMs; uint32_t repeatDelayTimeMs; uint32_t longDTTMs; uint32_t doubleDTTMs; uint32_t combLongDTTMs; uint32_t combDTTMs; CallBack_t CallBack; void *data; }; struct xGpioKeyInfo { int ulInitLevel; struct xKeyInitInfo keyInitInfo; }; struct xAdcKeyInfo { int32_t ulValue; struct AdcInstanceConfig xAdcDecp; struct xKeyInitInfo keyInitInfo; }; #define KEY_INIT_INFO(_ulKeyId, _eventMask, _repeatTimeMs, _repeatDelayTimeMs, _longDTTMs, \ _doubleDTTMs, _combLongDTTMs, _combDTTMs, _CallBack, _data) \ { \ .ulKeyId = _ulKeyId, .eventMask = _eventMask, .repeatTimeMs = _repeatTimeMs, \ .repeatDelayTimeMs = _repeatDelayTimeMs, .longDTTMs = _longDTTMs, \ .doubleDTTMs = _doubleDTTMs, .combLongDTTMs = _combLongDTTMs, \ .combDTTMs = _combDTTMs, .CallBack = _CallBack, .data = _data, \ } #define GPIO_KEY_INFO(_ulKeyId, _ulInitLevel, _eventMask, _CallBack, _data) \ { \ .ulInitLevel = _ulInitLevel, \ .keyInitInfo = \ KEY_INIT_INFO(_ulKeyId, _eventMask, 0, 0, 0, 0, 0, 0, _CallBack, _data), \ } #define ADC_KEY_INFO(_ulKeyId, _ulValue, _adcChan, _eventMask, _CallBack, _data) \ { \ .ulValue = _ulValue, .xAdcDecp = { _adcChan, NO_AVERAGING, 1 }, \ .keyInitInfo = \ KEY_INIT_INFO(_ulKeyId, _eventMask, 0, 0, 0, 0, 0, 0, _CallBack, _data), \ } void vCreateGpioKey(struct xGpioKeyInfo *keyArr, uint16_t keyNum); void vDestroyGpioKey(void); void vGpioKeyEnable(void); void vGpioKeyDisable(void); int vGpioKeyIsEmpty(void); void vGpioKeySetShortPressCycle(uint16_t cycle); void vGpioKeySetLongPressCycle(uint16_t cycle); void vCreateAdcKey(struct xAdcKeyInfo *keyArr, uint16_t keyNum); void vDestroyAdcKey(void); void vAdcKeyEnable(void); void vAdcKeyDisable(void); int vAdcKeyIsEmpty(void); void vAdcKeySetShortPressCycle(uint16_t cycle); void vAdcKeySetLongPressCycle(uint16_t cycle); void vKeyPadCreate(void); void vKeyPadInit(void); void vKeyPadDeinit(void); void vDynamicKeypadInit(void); #ifdef __cplusplus } #endif #endif /* __MESON_KEYPAD_H */