/*
 * zinitix_driver.h
 *
 * Copyright (C) 2020, Samsung Electronics Co., Ltd.
 *
 * Zinitix touchscreen routines, header file
 */

#pragma once

#include "touch_queue.h"
#include "tuiHal.h"

/* Touch Event */
typedef enum {
    COORDINATE_EVENT = 0,
    STATUS_EVENT,
    GESTURE_EVENT,
    CUSTOM_EVENT,
} EVENT_ID;

typedef enum {
    FINGER_NONE = 0,
    FINGER_PRESS,
    FINGER_MOVE,
    FINGER_RELEASE,
} TOUCH_STATUS_TYPE;


typedef enum {
    TOUCH_NOTYPE = -1,
    TOUCH_NORMAL,
    TOUCH_HOVER,
    TOUCH_FLIP_COVER,
    TOUCH_GLOVE,
    TOUCH_STYLUS,
    TOUCH_PALM,
    TOUCH_WET,
    TOUCH_PROXIMITY,
    TOUCH_JIG,
} TOUCH_TYPE;

typedef enum {
    SWIPE_UP = 0,
    DOUBLE_TAP,
    PRESSURE,
    FINGERPRINT,
    SINGLE_TAP,
    GESTURE_NONE = 255,
} GESTURE_TYPE;

/* zinitix bit control */
#define zinitix_bit_set(val, n)      ((val) &= ~(1<<(n)), (val) |= (1<<(n)))
#define zinitix_bit_clr(val, n)      ((val) &= ~(1<<(n)))
#define zinitix_bit_test(val, n)     ((val) & (1<<(n)))
#define zinitix_swap_v(a, b, t)      ((t) = (a), (a) = (b), (b) = (t))
#define zinitix_swap_16(s)           (((((s) & 0xff) << 8) | (((s) >> 8) & 0xff)))

struct zinitix_ts_info {
    unsigned int width;
    unsigned int height;
};

extern struct zinitix_ts_info zinitix_data;

int zt_driver_init(struct zinitix_ts_info *zt_dev);
int zt_driver_release(void);
int zt_irq_process(void);
