You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
2.7 KiB
C
115 lines
2.7 KiB
C
/**
|
|
* @file evdev.h
|
|
*
|
|
*/
|
|
|
|
#ifndef EVDEV_H
|
|
#define EVDEV_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#ifndef LV_DRV_NO_CONF
|
|
#ifdef LV_CONF_INCLUDE_SIMPLE
|
|
#include "lv_drv_conf.h"
|
|
#else
|
|
#include "../../lv_drv_conf.h"
|
|
#endif
|
|
#endif
|
|
|
|
#if USE_EVDEV || USE_BSD_EVDEV
|
|
|
|
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
|
#include "lvgl.h"
|
|
#else
|
|
#include "lvgl/lvgl.h"
|
|
#endif
|
|
|
|
/**********************
|
|
* TYPEDEFS
|
|
**********************/
|
|
|
|
typedef struct {
|
|
/*Device*/
|
|
int fd;
|
|
/*Config*/
|
|
bool swap_axes;
|
|
int ver_min;
|
|
int hor_min;
|
|
int ver_max;
|
|
int hor_max;
|
|
/*State*/
|
|
int root_x;
|
|
int root_y;
|
|
int key;
|
|
lv_indev_state_t state;
|
|
} evdev_device_t;
|
|
|
|
/**********************
|
|
* GLOBAL PROTOTYPES
|
|
**********************/
|
|
|
|
/**
|
|
* Initialize the global evdev device, as configured with EVDEV_NAME,
|
|
* EVDEV_SWAP_AXES, and EVDEV_CALIBRATE.
|
|
*/
|
|
void evdev_init();
|
|
/**
|
|
* Initialize an evdev device.
|
|
* @param dsc evdev device
|
|
*/
|
|
void evdev_device_init(evdev_device_t * dsc);
|
|
|
|
/**
|
|
* Reconfigure the path for the global evdev device.
|
|
* @param dev_path device path, e.g., /dev/input/event0, or NULL to close
|
|
* @return whether the device was successfully opened
|
|
*/
|
|
bool evdev_set_file(const char * dev_path);
|
|
/**
|
|
* Configure or reconfigure the path for an evdev device.
|
|
* @param dsc evdev device
|
|
* @param dev_path device path, e.g., /dev/input/event0, or NULL to close
|
|
* @return whether the device was successfully opened
|
|
*/
|
|
bool evdev_device_set_file(evdev_device_t * dsc, const char * dev_path);
|
|
|
|
/**
|
|
* Configure whether pointer coordinates of an evdev device sould be swapped.
|
|
* Default to false.
|
|
* @param dsc evdev device
|
|
* @param swap_axes whether to swap x and y axes
|
|
*/
|
|
void evdev_device_set_swap_axes(evdev_device_t * dsc, bool swap_axes);
|
|
|
|
/**
|
|
* Configure a coordinate transformation for an evdev device. Applied after
|
|
* axis swap, if any. Defaults to no transformation.
|
|
* @param dsc evdev device
|
|
* @param hor_min horizontal pointer coordinate mapped to 0
|
|
* @param ver_min vertical pointer coordinate mapped to 0
|
|
* @param ver_min pointer coordinate mapped to horizontal max of display
|
|
* @param ver_max pointer coordinate mapped to vertical max of display
|
|
*/
|
|
void evdev_device_set_calibration(evdev_device_t * dsc, int hor_min, int ver_min, int hor_max, int ver_max);
|
|
|
|
/**
|
|
* Read callback for the input driver.
|
|
* @param drv input driver where drv->user_data is NULL for the global evdev
|
|
* device or an evdev_device_t pointer.
|
|
* @param data destination for input events
|
|
*/
|
|
void evdev_read(lv_indev_drv_t * drv, lv_indev_data_t * data);
|
|
|
|
#endif /* USE_EVDEV */
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* EVDEV_H */
|