/*******************************************************************************
*
*
* File:        app_tp_for_custom.h
* Description  tp 协议处理文件，包括特定配置的宏
* Version      V0.1
* Date         2021-10-14
* Author       zhanghz
*******************************************************************************/
#ifndef __APP_TP_FOR_CUSTOM_S8_H__
#define __APP_TP_FOR_CUSTOM_S8_H__
#include "test_cfg_global.h"

#include "string.h"
#include "tau_device_datatype.h"
#include "tau_common.h"
#include "app_tp_transfer.h"
#include "hal_gpio.h"

#define AP_TP_TRANSFER            1

#if AMOLED_NT37280
    #define PHONE_SLAVE_TRANSFER_I2C       1                //1:表示手机跟芯片之间，touch 数据采用 I2C 通信；
    #define PHONE_SLAVE_TRANSFER_SPI       0                //1:表示手机跟芯片之间，touch 数据采用 SPI 通信；
    #define SCREEN_MASTER_TRANSFER_I2C     0                //1:表示屏幕跟芯片之间，touch 数据采用 I2C 通信；
    #define SCREEN_MASTER_TRANSFER_SPI     1                //1:表示屏幕跟芯片之间，touch 数据采用 SPI 通信；
#elif LCD_HX83112A
    #define PHONE_SLAVE_TRANSFER_I2C       1                //1:表示手机跟芯片之间，touch 数据采用 I2C 通信；
    #define PHONE_SLAVE_TRANSFER_SPI       0                //1:表示手机跟芯片之间，touch 数据采用 SPI 通信；
    #define SCREEN_MASTER_TRANSFER_I2C     0                //1:表示屏幕跟芯片之间，touch 数据采用 I2C 通信；
    #define SCREEN_MASTER_TRANSFER_SPI     0                //1:表示屏幕跟芯片之间，touch 数据采用 SPI 通信；
#else // #if LCD_TD4310
    #define PHONE_SLAVE_TRANSFER_I2C       1                //1:表示手机跟芯片之间，touch 数据采用 I2C 通信；
    #define PHONE_SLAVE_TRANSFER_SPI       0                //1:表示手机跟芯片之间，touch 数据采用 SPI 通信；
    #define SCREEN_MASTER_TRANSFER_I2C     1                //1:表示屏幕跟芯片之间，touch 数据采用 I2C 通信；
    #define SCREEN_MASTER_TRANSFER_SPI     0                //1:表示屏幕跟芯片之间，touch 数据采用 SPI 通信；
#endif

#ifdef USE_FOR_SUMSUNG_S20U
#define CHIP_I2C_ADDRESS               0x48             //芯片本身 I2C 从机地址.机板I2C地址
#define SCREEN_I2C_ADDRESS             0x49             //屏幕 I2C 从机地址

#elif defined(USE_FOR_SUMSUNG_S9PLUS)
#define CHIP_I2C_ADDRESS               0x48             //芯片本身 I2C 从机地址
#define SCREEN_I2C_ADDRESS             0x20             //屏幕 I2C 从机地址

#else
#define CHIP_I2C_ADDRESS               0x48             //芯片本身 I2C 从机地址
#define SCREEN_I2C_ADDRESS             0x49             //屏幕 I2C 从机地址
#endif

#define CHIP_I2C_ADDR_BITS             I2C_ADDR_BITS_7  //屏幕 I2C 地址位数 7/10，默认为7
#define SCREEN_I2C_ADDR_BITS           I2C_ADDR_BITS_7  //屏幕 I2C 地址位数 7/10，默认为7
#define I2C_MASTER_SPEED               800000           //设置 I2C 主机通信速率

#define SPI_MASTER_SPEED               10000000    //设置 SPI 主机通信速率

#define BUFFER_SIZE_MAX                200         //定义 bufrer 最大的字节数

#define INPUT_WIDTH_VALUE              1440        //原装屏 X 坐标码值的最大值
#define INPUT_HEIGHT_VALUE             3200        //原装屏 Y 坐标码值的最大值

#if LCD_FT8006S_TRULY59
#define OUTPUT_WIDTH_VALUE             720        //维修屏 X 坐标码值的最大值
#define OUTPUT_HEIGHT_VALUE            1520        //维修屏 Y 坐标码值的最大值

#else
#define OUTPUT_WIDTH_VALUE             1080        //维修屏 X 坐标码值的最大值
#define OUTPUT_HEIGHT_VALUE            2400//2340        //维修屏 Y 坐标码值的最大值
#endif


#define SCREEN_TRANSFER_WRITE          false       //接收到screen io中断，发送数据之后不用读回
#define SCREEN_TRANSFER_READ           true        //接收到screen io中断，发送数据之后要读回数据

typedef enum
{
    I2C_ADDR_BITS_7  = 7,
    I2C_ADDR_BITS_10 = 10
} en_I2C_ADDR_BITS_mdoe;

typedef struct
{
    uint8_t *buffer;                               //接收到screen io中断后，通信的发送buffer指针
    size_t txbuffer_size;                          //发送 buffer 数据长度；需要读回时，目前只支持4个字节
    size_t rxbuffer_size;                          //发送完数据之后，要读回的数据长度
    bool read_flag;                                //true 接收到screen io中断，发送数据之后要读回数据
} st_screen_data;

typedef struct
{
    const uint8_t *buffer;                         //通信的发送buffer指针
    size_t txbuffer_size;                          //发送 buffer 数据长度；需要读回时，目前只支持4个字节
    size_t rxbuffer_size;                          //发送完数据之后，要读回的数据长度
    bool read_flag;                                //true 接收到screen io中断，发送数据之后要读回数据
} st_screen_const_data;

typedef struct
{
    uint8_t reg_size;                              //接收buffer的个数
    size_t write_back_size;                        //要发送的数据长度
    const uint8_t *reg_data;                       //接收buffer
    const uint8_t *write_back;                     //发送bufer
} st_reg_const_data;

typedef struct
{
    uint8_t reg_size;                              //接收buffer的个数
    size_t write_back_size;                        //要发送的数据长度
    uint8_t *reg_data;                             //接收buffer
    uint8_t *write_back;                           //发送bufer
} st_reg_data;

extern io_pad_e g_screen_input_rst_pad;
extern io_pad_e g_screen_input_int_pad;
extern io_pad_e g_phone_input_rst_pad;
extern io_pad_e g_phone_output_int_pad;

extern uint8_t phone_start_flag;
extern uint8_t phone_touch_flag;
extern const uint8_t screen_reg_int_data_size;
extern const uint8_t screen_reg_start_data_size;
extern st_screen_data screen_reg_int_data[];
extern st_screen_const_data screen_reg_start_data[];
//extern st_reg_const_data phone_reg_const_data[];

/**************************************************************************
* @name : app_tp_screen_analysis_const
* @brief : screen start 阶段数据解析函数，由客户定制
* @param[in] :
* @return :
* @retval :
**************************************************************************/
uint8_t app_tp_screen_analysis_const(uint8_t transfer_now, uint8_t *rxbuffer, size_t data_size);

/**************************************************************************
* @name : app_tp_screen_analysis_int
* @brief : screen 来IO中断后的 数据解析函数，由客户定制
* @param[in] :
* @return :
* @retval :
**************************************************************************/
uint8_t app_tp_screen_analysis_int(uint8_t transfer_now, uint8_t *rxbuffer, size_t data_size);

/**************************************************************************
* @name : app_tp_phone_analysis_data
* @brief : phone 数据解析函数，由客户定制
* @param[in] :
* @return :
* @retval :
**************************************************************************/
void app_tp_phone_analysis_data(uint8_t *rxbuffer, size_t rxbuffer_size, const uint8_t **txbuffer, size_t *txbuffer_size);


#endif

