1*4882a593Smuzhiyun /** 2*4882a593Smuzhiyun * @file lv_port_indev_templ.c 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun /* Copy this file as "lv_port_indev.c" and set this value to "1" to enable conten */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <stdlib.h> 9*4882a593Smuzhiyun #include "lvgl.h" 10*4882a593Smuzhiyun #include "lv_port_indev.h" 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include "evdev.h" 13*4882a593Smuzhiyun #include "key.h" 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun typedef struct _GROUP_NODE { 16*4882a593Smuzhiyun struct _GROUP_NODE *next; 17*4882a593Smuzhiyun lv_group_t *group; 18*4882a593Smuzhiyun } GROUP_NODE; 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun static int rot_indev; 21*4882a593Smuzhiyun lv_indev_t * indev_touchpad; 22*4882a593Smuzhiyun lv_indev_t * indev_key; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun GROUP_NODE *group_list = NULL; 25*4882a593Smuzhiyun lv_port_indev_group_create(void)26*4882a593Smuzhiyunlv_group_t *lv_port_indev_group_create(void) 27*4882a593Smuzhiyun { 28*4882a593Smuzhiyun struct _GROUP_NODE *group_node = NULL; 29*4882a593Smuzhiyun lv_group_t *group = lv_group_create(); 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun lv_indev_set_group(indev_key, group); 32*4882a593Smuzhiyun lv_group_set_default(group); 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun group_node = (struct _GROUP_NODE *)malloc(sizeof(struct _GROUP_NODE)); 35*4882a593Smuzhiyun group_node->group = group; 36*4882a593Smuzhiyun group_node->next = NULL; 37*4882a593Smuzhiyun if (group_list) { 38*4882a593Smuzhiyun group_node->next = group_list; 39*4882a593Smuzhiyun group_list = group_node; 40*4882a593Smuzhiyun } else { 41*4882a593Smuzhiyun group_list = group_node; 42*4882a593Smuzhiyun } 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun return group; 45*4882a593Smuzhiyun } 46*4882a593Smuzhiyun lv_port_indev_group_destroy(lv_group_t * group)47*4882a593Smuzhiyunvoid lv_port_indev_group_destroy(lv_group_t *group) 48*4882a593Smuzhiyun { 49*4882a593Smuzhiyun if (group_list) { 50*4882a593Smuzhiyun struct _GROUP_NODE *group_node = NULL; 51*4882a593Smuzhiyun group_node = group_list; 52*4882a593Smuzhiyun if (group_list->group == group) { 53*4882a593Smuzhiyun group_list = group_list->next; 54*4882a593Smuzhiyun if (group_list) { 55*4882a593Smuzhiyun lv_indev_set_group(indev_key, group_list->group); 56*4882a593Smuzhiyun lv_group_set_default(group_list->group); 57*4882a593Smuzhiyun } else { 58*4882a593Smuzhiyun lv_indev_set_group(indev_key, NULL); 59*4882a593Smuzhiyun lv_group_set_default(NULL); 60*4882a593Smuzhiyun } 61*4882a593Smuzhiyun free(group_node); 62*4882a593Smuzhiyun } else { 63*4882a593Smuzhiyun while (group_node->next) { 64*4882a593Smuzhiyun struct _GROUP_NODE *group_node_next = group_node->next; 65*4882a593Smuzhiyun if (group_node_next->group == group) { 66*4882a593Smuzhiyun group_node->next = group_node_next->next; 67*4882a593Smuzhiyun free(group_node_next); 68*4882a593Smuzhiyun break; 69*4882a593Smuzhiyun } 70*4882a593Smuzhiyun group_node = group_node->next; 71*4882a593Smuzhiyun } 72*4882a593Smuzhiyun } 73*4882a593Smuzhiyun lv_group_del(group); 74*4882a593Smuzhiyun } 75*4882a593Smuzhiyun } 76*4882a593Smuzhiyun lv_port_indev_init(int rot)77*4882a593Smuzhiyunvoid lv_port_indev_init(int rot) 78*4882a593Smuzhiyun { 79*4882a593Smuzhiyun /** 80*4882a593Smuzhiyun * Here you will find example implementation of input devices supported by LittelvGL: 81*4882a593Smuzhiyun * - Touchpad 82*4882a593Smuzhiyun * - Mouse (with cursor support) 83*4882a593Smuzhiyun * - Keypad (supports GUI usage only with key) 84*4882a593Smuzhiyun * - Encoder (supports GUI usage only with: left, right, push) 85*4882a593Smuzhiyun * - Button (external buttons to press points on the screen) 86*4882a593Smuzhiyun * 87*4882a593Smuzhiyun * The `..._read()` function are only examples. 88*4882a593Smuzhiyun * You should shape them according to your hardware 89*4882a593Smuzhiyun */ 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun static lv_indev_drv_t indev_drv; 92*4882a593Smuzhiyun static lv_indev_drv_t key_drv; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun rot_indev = rot; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun /*------------------ 97*4882a593Smuzhiyun * Touchpad 98*4882a593Smuzhiyun * -----------------*/ 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /*Initialize your touchpad if you have*/ 101*4882a593Smuzhiyun evdev_init(rot); 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun /*Register a touchpad input device*/ 104*4882a593Smuzhiyun lv_indev_drv_init(&indev_drv); 105*4882a593Smuzhiyun indev_drv.type = LV_INDEV_TYPE_POINTER; 106*4882a593Smuzhiyun indev_drv.read_cb = evdev_read; 107*4882a593Smuzhiyun indev_touchpad = lv_indev_drv_register(&indev_drv); 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun #if USE_KEY 110*4882a593Smuzhiyun key_init(); 111*4882a593Smuzhiyun lv_indev_drv_init(&key_drv); 112*4882a593Smuzhiyun key_drv.type = LV_INDEV_TYPE_KEYPAD; 113*4882a593Smuzhiyun key_drv.read_cb = key_read; 114*4882a593Smuzhiyun indev_key = lv_indev_drv_register(&key_drv); 115*4882a593Smuzhiyun lv_port_indev_group_create(); 116*4882a593Smuzhiyun #endif 117*4882a593Smuzhiyun } 118