#ifndef __TOUCH_H__
#define __TOUCH_H__
#include <rtthread.h>
#include <rtdevice.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef RT_USING_RTC
#define rt_touch_get_ts() time(RT_NULL)
#else
#define rt_touch_get_ts() rt_tick_get()
#endif
#define RT_PIN_NONE 0xFFFF
#define RT_TOUCH_VENDOR_UNKNOWN (0)
#define RT_TOUCH_VENDOR_GT (1)
#define RT_TOUCH_VENDOR_FT (2)
#define RT_TOUCH_TYPE_NONE (0)
#define RT_TOUCH_TYPE_CAPACITANCE (1)
#define RT_TOUCH_TYPE_RESISTANCE (2)
#define RT_TOUCH_CTRL_GET_ID (0)
#define RT_TOUCH_CTRL_GET_INFO (1)
#define RT_TOUCH_CTRL_SET_MODE (2)
#define RT_TOUCH_CTRL_SET_X_RANGE (3)
#define RT_TOUCH_CTRL_SET_Y_RANGE (4)
#define RT_TOUCH_CTRL_SET_X_TO_Y (5)
#define RT_TOUCH_CTRL_DISABLE_INT (6)
#define RT_TOUCH_CTRL_ENABLE_INT (7)
#define RT_TOUCH_EVENT_NONE (0)
#define RT_TOUCH_EVENT_UP (1)
#define RT_TOUCH_EVENT_DOWN (2)
#define RT_TOUCH_EVENT_MOVE (3)
struct rt_touch_info
{
rt_uint8_t type;
rt_uint8_t vendor;
rt_uint8_t point_num;
rt_int32_t range_x;
rt_int32_t range_y;
};
struct rt_touch_config
{
struct rt_device_pin_mode irq_pin;
char *dev_name;
void *user_data;
};
typedef struct rt_touch_device *rt_touch_t;
struct rt_touch_device
{
struct rt_device parent;
struct rt_touch_info info;
struct rt_touch_config config;
const struct rt_touch_ops *ops;
rt_err_t (*irq_handle)(rt_touch_t touch);
};
struct rt_touch_data
{
rt_uint8_t event;
rt_uint8_t track_id;
rt_uint8_t width;
rt_uint16_t x_coordinate;
rt_uint16_t y_coordinate;
rt_tick_t timestamp;
};
struct rt_touch_ops
{
rt_size_t (*touch_readpoint)(struct rt_touch_device *touch, void *buf, rt_size_t touch_num);
rt_err_t (*touch_control)(struct rt_touch_device *touch, int cmd, void *arg);
};
int rt_hw_touch_register(rt_touch_t touch,
const char *name,
rt_uint32_t flag,
void *data);
#ifdef __cplusplus
}
#endif
#endif