/*******************************************************************************
*
*
* File:        app_tp_transfer.h
* Description  touch I2C/SPI 通信相关函数申明
* Version      V0.1
* Date         2021-10-14
* Author       zhanghz
*******************************************************************************/
#ifndef __APP_TP_TRANSFER_H__
#define __APP_TP_TRANSFER_H__

#include "string.h"
#include "tau_device_datatype.h"
#include "tau_common.h"
#include "hal_i2c_slave.h"
#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 enum
{
    data_num_00  = 0,
    data_num_01,
    data_num_02,
    data_num_03,
    data_num_04,
    data_num_05,
    data_num_06,
    data_num_07,
    data_num_08,
    data_num_09,
    data_num_10,
    data_num_11,
    data_num_12,
    data_num_13,
    data_num_14,
    data_num_15,
    data_num_16,
    data_num_17,
    data_num_18,
    data_num_19,
    data_num_20,
    data_num_21,
    data_num_22,
    data_num_23,
    data_num_24,
    data_num_25,
    data_num_26,
    data_num_27,
    data_num_28,
    data_num_29,
    data_num_30,
    data_num_31,
    data_num_32,
    data_num_33,
    data_num_34,
    data_num_35,
    data_num_36,
    data_num_37,
    data_num_38,
    data_num_39,
    data_num_40,
    data_num_41,
    data_num_42,
    data_num_43,
    data_num_44,
    data_num_45,
    data_num_46,
    data_num_47,
    data_num_48,
    data_num_49
} en_data_num;


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
{
    en_data_num data_num;                          //记录当前为第几个结构体数组元素
    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;                        //要发送的数据长度
    const uint8_t *reg_data;                       //接收buffer
    const uint8_t *write_back;                     //发送bufer
} st_reg_data;


/**************************************************************************
* @name : app_tp_screen_init
* @brief : screen IO 跳变，开始初始化
* @param[in] :
* @return :
* @retval :
**************************************************************************/
void app_tp_screen_init(void);

/**************************************************************************
* @name : app_tp_init
* @brief : 初始化通信相关
* @param[in] :
* @return :
* @retval :
**************************************************************************/
void app_tp_init(void);

/**************************************************************************
* @name : app_tp_transfer_screen_int
* @brief : 接收screen中断后，按照flow读写screen，即报点协议转换,注意接口实现不可阻塞!
* @param[in] :
* @return :
* @retval :
**************************************************************************/
void app_tp_transfer_screen_int(void);

/**************************************************************************
* @name : app_tp_transfer_screen_start
* @brief : 按照flow读写screen，开始开机初始化
* @param[in] :
* @return :
* @retval :
**************************************************************************/
void app_tp_transfer_screen_start(void);

/**************************************************************************
* @name : app_tp_phone_reset_on
* @brief : 获取手机复位信号的状态
* @param[in] :
* @return :
* @retval :
**************************************************************************/
bool app_tp_phone_reset_on(void);

/**************************************************************************
* @name : app_tp_phone_clear_reset_on
* @brief : 清除手机复位信号的状态
* @param[in] :
* @return :
* @retval :
**************************************************************************/
void app_tp_phone_clear_reset_on(void);

/**************************************************************************
* @name : app_tp_s_write
* @brief : 根据通信方式配置发送txbuffer中的数据
* @param[in] :txbuffer: 发送数据 buffer 头地址
* @param[in] :buffer_size: 发送数据 buffer 长度
* @return :
* @retval :
**************************************************************************/
void app_tp_s_write(i2c_index_e index, const uint8_t *txbuffer, size_t buffer_size);

/**************************************************************************
* @name : app_tp_enter_sleep_on
* @brief : 获取 tp 通信状态
* @param[in] :
* @return :
* @retval :
**************************************************************************/
bool app_tp_enter_sleep_on(void);

#endif

