/*
 *
 * Copyright (C) 2021, Samsung Electronics Co., Ltd.
 *
 * Novatek touchscreen routines, header file
 */

#pragma once

#include "tuiHal.h"
#include "touch_queue.h"

/* Touch parameters */
#define NVT_RETRY_COUNT                         3

struct novatek_ts_info {
    unsigned int max_x;
    unsigned int max_y;
    unsigned int width;
    unsigned int height;
    uint16_t event_format;
    uint8_t event_size;
    int (*i2c_read)(uint8_t *data, uint16_t size);
    int (*i2c_write)(uint8_t *data, uint16_t size);
};

#if defined(TUI_MODEL_A13X) || defined(TUI_MODEL_A33)
#define MT_PROTOCOL_B

/* customized gesture id */
#define DATA_PROTOCOL           30

#define POINT_DATA_CHECKSUM 1
#define POINT_DATA_CHECKSUM_LEN 65

#define NVT_POINT_DATA_LEN  108
#define SPI_BUF_LEN         (NVT_POINT_DATA_LEN + 1 + DUMMY_BYTES)

struct nvt_ts_event_coord {
    uint8_t status:3;
    uint8_t id:5;
    uint8_t x_11_4;
    uint8_t y_11_4;
    uint8_t y_3_0:4;
    uint8_t x_3_0:4;
    uint8_t w_major;
    uint8_t pressure_7_0;
} __attribute__ ((packed));
#else
#define NVT_POINT_DATA_LEN  65
#define SPI_BUF_LEN         (NVT_POINT_DATA_LEN + 1 + DUMMY_BYTES)

struct nvt_ts_event_coord {
    uint8_t status:2;
    uint8_t reserved_1:1;
    uint8_t id:5;
    uint8_t x_11_4;
    uint8_t y_11_4;
    uint8_t y_3_0:4;
    uint8_t x_3_0:4;
    uint8_t area;
    uint8_t pressure_7_0;
} __attribute__ ((packed));
#endif

extern struct novatek_ts_info novatek_data;

int nvt_driver_init(struct novatek_ts_info *nvt_dev);
int nvt_driver_release(void);
int nvt_irq_process(void);

TEE_Result nvt_process(void);
TEE_Result nvt_close(void);
TEE_Result nvt_open(uint32_t width, uint32_t height);
TEE_Result nvt_get_info(drTouchInfo_ptr touchSize);
