1*4882a593Smuzhiyun /** 2*4882a593Smuzhiyun * @file evdev.c 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun /********************* 7*4882a593Smuzhiyun * INCLUDES 8*4882a593Smuzhiyun *********************/ 9*4882a593Smuzhiyun #include "key.h" 10*4882a593Smuzhiyun #if USE_KEY != 0 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <stdio.h> 13*4882a593Smuzhiyun #include <unistd.h> 14*4882a593Smuzhiyun #include <fcntl.h> 15*4882a593Smuzhiyun #include <linux/input.h> 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /********************* 18*4882a593Smuzhiyun * DEFINES 19*4882a593Smuzhiyun *********************/ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /********************** 22*4882a593Smuzhiyun * TYPEDEFS 23*4882a593Smuzhiyun **********************/ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /********************** 26*4882a593Smuzhiyun * STATIC PROTOTYPES 27*4882a593Smuzhiyun **********************/ 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /********************** 30*4882a593Smuzhiyun * STATIC VARIABLES 31*4882a593Smuzhiyun **********************/ 32*4882a593Smuzhiyun static int key_fd; 33*4882a593Smuzhiyun static int key_button; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun static int key_val; 36*4882a593Smuzhiyun /********************** 37*4882a593Smuzhiyun * MACROS 38*4882a593Smuzhiyun **********************/ 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /********************** 41*4882a593Smuzhiyun * GLOBAL FUNCTIONS 42*4882a593Smuzhiyun **********************/ 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun /** 45*4882a593Smuzhiyun * Initialize the evdev interface 46*4882a593Smuzhiyun */ key_init(void)47*4882a593Smuzhiyunvoid key_init(void) 48*4882a593Smuzhiyun { 49*4882a593Smuzhiyun key_fd = open(KEY_NAME, O_RDWR | O_NOCTTY | O_NDELAY); 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun if(key_fd == -1) { 52*4882a593Smuzhiyun perror("unable open evdev interface:"); 53*4882a593Smuzhiyun return; 54*4882a593Smuzhiyun } 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun fcntl(key_fd, F_SETFL, O_ASYNC | O_NONBLOCK); 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun key_val = 0; 59*4882a593Smuzhiyun key_button = LV_INDEV_STATE_REL; 60*4882a593Smuzhiyun } 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun /** 63*4882a593Smuzhiyun * Get the current position and state of the evdev 64*4882a593Smuzhiyun * @param data store the evdev data here 65*4882a593Smuzhiyun * @return false: because the points are not buffered, so no more data to be read 66*4882a593Smuzhiyun */ key_read(lv_indev_drv_t * drv,lv_indev_data_t * data)67*4882a593Smuzhiyunvoid key_read(lv_indev_drv_t * drv, lv_indev_data_t * data) 68*4882a593Smuzhiyun { 69*4882a593Smuzhiyun struct input_event in; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun while(read(key_fd, &in, sizeof(struct input_event)) > 0) { 72*4882a593Smuzhiyun if(in.type == EV_KEY) { 73*4882a593Smuzhiyun data->state = (in.value) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; 74*4882a593Smuzhiyun switch(in.code) { 75*4882a593Smuzhiyun case 1: 76*4882a593Smuzhiyun data->key = LV_KEY_ESC; 77*4882a593Smuzhiyun break; 78*4882a593Smuzhiyun case 139: 79*4882a593Smuzhiyun data->key = LV_KEY_ENTER; 80*4882a593Smuzhiyun break; 81*4882a593Smuzhiyun //case KEY_UP: 82*4882a593Smuzhiyun // data->key = LV_KEY_UP; 83*4882a593Smuzhiyun // break; 84*4882a593Smuzhiyun case 105: 85*4882a593Smuzhiyun data->key = LV_KEY_PREV; 86*4882a593Smuzhiyun break; 87*4882a593Smuzhiyun case 106: 88*4882a593Smuzhiyun data->key = LV_KEY_NEXT; 89*4882a593Smuzhiyun break; 90*4882a593Smuzhiyun //case KEY_DOWN: 91*4882a593Smuzhiyun // data->key = LV_KEY_DOWN; 92*4882a593Smuzhiyun // break; 93*4882a593Smuzhiyun default: 94*4882a593Smuzhiyun data->key = 0; 95*4882a593Smuzhiyun break; 96*4882a593Smuzhiyun } 97*4882a593Smuzhiyun key_val = data->key; 98*4882a593Smuzhiyun key_button = data->state; 99*4882a593Smuzhiyun return ; 100*4882a593Smuzhiyun } 101*4882a593Smuzhiyun } 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun if(drv->type == LV_INDEV_TYPE_KEYPAD) { 104*4882a593Smuzhiyun /* No data retrieved */ 105*4882a593Smuzhiyun data->key = key_val; 106*4882a593Smuzhiyun data->state = key_button; 107*4882a593Smuzhiyun return ; 108*4882a593Smuzhiyun } 109*4882a593Smuzhiyun } 110*4882a593Smuzhiyun #endif 111