/*******************************************************************************
*
*
* 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 "string.h"
#include "tau_device_datatype.h"
#include "tau_common.h"
#include "app_tp_transfer.h"
#include "hal_gpio.h"
#include "s8_demo.h"

#define BUFFER_SIZE_MAX                250              //定义 bufrer 最大的字节数
#define SCREEN_INT_LOW_DEFAULT         0

/** 跟手机之间使用 I2C 通信 **/
#define PHONE_SLAVE_TRANSFER_I2C       1                //1:表示手机跟芯片之间，touch 数据采用 I2C 通信；
#define PHONE_I2CS_INDEX               I2C_INDEX_0
#define CHIP_I2C_ADDRESS               0x48             //芯片本身 I2C 从机地址
#define CHIP_I2C_ADDR_BITS             I2C_ADDR_BITS_7  //屏幕 I2C 地址位数 7/10，默认为7

/** 跟手机之间使用 SPI 通信 **/
#define PHONE_SLAVE_TRANSFER_SPI       0                //1:表示手机跟芯片之间，touch 数据采用 SPI 通信；
#define PHONE_SPI_CPHA                 0                //0:表示时钟在数据之后才切换，即第1个时钟沿有效
#define PHONE_SPI_CPOL                 0                //0:表示闲时时钟状态为低电平

/** 跟屏幕之间使用 I2C 通信 **/
#define SCREEN_MASTER_TRANSFER_I2C     0                //1:表示屏幕跟芯片之间，touch 数据采用 I2C 通信；
#define SCREEN_I2CM_INDEX              I2C_INDEX_1
#define SCREEN_I2C_ADDRESS             0x49             //屏幕 I2C 从机地址
#define SCREEN_I2C_ADDR_BITS           I2C_ADDR_BITS_7  //屏幕 I2C 地址位数 7/10，默认为7
#define I2C_MASTER_SPEED               400000           //设置 I2C 主机通信速率

/** 跟屏幕之间使用 SPI 通信 **/
#define SCREEN_MASTER_TRANSFER_SPI     1                //1:表示屏幕跟芯片之间，touch 数据采用 SPI 通信；
#define SCREEN_SPI_CPHA                0                //0:表示时钟在数据之后才切换，即第1个时钟沿有效
#define SCREEN_SPI_CPOL                0                //0:表示闲时时钟状态为低电平
#define SPI_MASTER_SPEED               8000000         //设置 SPI 主机通信速率


/** 坐标转换参数 **/
#define INPUT_WIDTH_VALUE              1440        //原装屏 X 坐标码值的最大值
#define INPUT_HEIGHT_VALUE             2960        //原装屏 Y 坐标码值的最大值
#define OUTPUT_WIDTH_VALUE             1080        //维修屏 X 坐标码值的最大值
#define OUTPUT_HEIGHT_VALUE            2280        //维修屏 Y 坐标码值的最大值





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 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);
/**************************************************************************
* @name : app_tp_write_other_operations
* @brief : 根据通信方式处理其它操作,比如拉高拉低中断，reset等
* @param[in] : txbuffer输入数组指针 or null
* @param[in] : buffer_size 输入数组长度 or 事件标志位
* @param[in] :
* @return :
* @retval : 参数可复用，当数组不为NULL时，buffer_size是数组数据长度；当数组为NULL时,buffer_size作为事件标志位
**************************************************************************/
void app_tp_write_other_operations(const uint8_t *txbuffer, uint32_t buffer_size);

#endif

