key.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "key"
  2. #include "gpio.h"
  3. #include "elog.h"
  4. #if 1
  5. #define LOGD log_d
  6. #define LOGE log_e
  7. #else
  8. #define LOGD printf
  9. #define LOGE printf
  10. #endif
  11. #define K1_GPIO 101
  12. #define K2_GPIO 102
  13. #define K3_GPIO 103
  14. typedef struct {
  15. int gpio;
  16. uint16_t key;
  17. uint8_t active_level;
  18. }io_info_t;
  19. static io_info_t io_info[USER_KEY_MAX]={
  20. {K1_GPIO, KEY_LEFT, PRESS_LEVEL},
  21. {K2_GPIO, KEY_OK, PRESS_LEVEL},
  22. {K3_GPIO, KEY_RIGHT, PRESS_LEVEL};
  23. };
  24. typedef struct {
  25. int tp;
  26. int key;
  27. int up; //0: release 1: press
  28. uint64_t ms;
  29. }key_info_t;
  30. typedef struct {
  31. int fd;
  32. key_info_t k1;
  33. key_info_t k2;
  34. }key_data_t;
  35. typedef struct {
  36. key_data_t key[USER_KEY_MAX];
  37. }key_handle_t;
  38. static key_handle_t keyHandle={0};
  39. static uint64_t get_ms(void)
  40. {
  41. struct timeval tv;
  42. gettimeofday(&tv, NULL);
  43. return (uint64_t)(tv.tv_sec)*1000 + (uint64_t)(tv.tv_usec)/1000;
  44. }
  45. static int key_init(key_handle_t *h)
  46. {
  47. int i;
  48. for(i=0; i<USER_KEY_MAX; i++) {
  49. h->key[i].fd = gpio_init(io_info[i].gpio, GPIO_IN);
  50. }
  51. return (h->fd<0)?-1:0;
  52. }
  53. static int key_deinit(key_handle_t *h)
  54. {
  55. int i;
  56. for(i=0; i<USER_KEY_MAX; i++) {
  57. gpio_deinit(h->key[i].fd);
  58. }
  59. return 0;
  60. }
  61. static int key_get(key_handle_t *h, key_data_t *k)
  62. {
  63. int r;
  64. struct input_event event;
  65. r = read(h->fd, &event, sizeof(event));
  66. if(r<0) {
  67. return -1;
  68. }
  69. printf("_____ evt.type: %d, value: %d, code: %d\n", event.type, event.value, event.code);
  70. switch (event.type) {
  71. case EV_KEY:
  72. {
  73. k->tp = event.type;
  74. k->up = (event.value==0)?1:0;
  75. k->key = event.code;
  76. }
  77. break;
  78. }
  79. return 0;
  80. }