| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #include "key"
- #include "gpio.h"
- #include "elog.h"
- #if 1
- #define LOGD log_d
- #define LOGE log_e
- #else
- #define LOGD printf
- #define LOGE printf
- #endif
- #define K1_GPIO 101
- #define K2_GPIO 102
- #define K3_GPIO 103
- typedef struct {
- int gpio;
- uint16_t key;
- uint8_t active_level;
- }io_info_t;
- static io_info_t io_info[USER_KEY_MAX]={
- {K1_GPIO, KEY_LEFT, PRESS_LEVEL},
- {K2_GPIO, KEY_OK, PRESS_LEVEL},
- {K3_GPIO, KEY_RIGHT, PRESS_LEVEL};
- };
- typedef struct {
- int tp;
- int key;
- int up; //0: release 1: press
- uint64_t ms;
- }key_info_t;
- typedef struct {
- int fd;
- key_info_t k1;
- key_info_t k2;
- }key_data_t;
- typedef struct {
- key_data_t key[USER_KEY_MAX];
- }key_handle_t;
- static key_handle_t keyHandle={0};
- static uint64_t get_ms(void)
- {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return (uint64_t)(tv.tv_sec)*1000 + (uint64_t)(tv.tv_usec)/1000;
- }
- static int key_init(key_handle_t *h)
- {
- int i;
- for(i=0; i<USER_KEY_MAX; i++) {
- h->key[i].fd = gpio_init(io_info[i].gpio, GPIO_IN);
- }
- return (h->fd<0)?-1:0;
- }
- static int key_deinit(key_handle_t *h)
- {
- int i;
- for(i=0; i<USER_KEY_MAX; i++) {
- gpio_deinit(h->key[i].fd);
- }
- return 0;
- }
- static int key_get(key_handle_t *h, key_data_t *k)
- {
- int r;
- struct input_event event;
-
- r = read(h->fd, &event, sizeof(event));
- if(r<0) {
- return -1;
- }
-
- printf("_____ evt.type: %d, value: %d, code: %d\n", event.type, event.value, event.code);
- switch (event.type) {
- case EV_KEY:
- {
- k->tp = event.type;
- k->up = (event.value==0)?1:0;
- k->key = event.code;
- }
- break;
- }
-
- return 0;
- }
|