/**
 * @file spi_oled.h
 * @brief This is spi oled file
 * @version 1.0
 * @date 2021-09-10
 *
 * @copyright Copyright 2021-2023 Tuya Inc. All Rights Reserved.
 *
 */

#ifndef __OLED_SPI_DMA_H__
#define __OLED_SPI_DMA_H__

#include "tuya_cloud_types.h"
#include "tal_gpio.h"
#include "gpio.h"

#ifdef __cplusplus
extern "C" {
#endif

/***********************************************************************
 ********************* constant ( macro and enum ) *********************
 **********************************************************************/
#define  OLED_SCL_PIN   TUYA_GPIO_NUM_32
#define  OLED_SDA_PIN   TUYA_GPIO_NUM_31
#define  OLED_RES_PIN   TUYA_GPIO_NUM_34    
#define  OLED_DC_PIN    TUYA_GPIO_NUM_33 
#define  OLED_CS_PIN    /* 片选默认接地了 */

#define OLED_SCL_Clr() tal_gpio_write(OLED_SCL_PIN,TUYA_GPIO_LEVEL_LOW)//SCL
#define OLED_SCL_Set() tal_gpio_write(OLED_SCL_PIN,TUYA_GPIO_LEVEL_HIGH)

#define OLED_SDA_Clr() tal_gpio_write(OLED_SDA_PIN,TUYA_GPIO_LEVEL_LOW)//SDA
#define OLED_SDA_Set() tal_gpio_write(OLED_SDA_PIN,TUYA_GPIO_LEVEL_HIGH)

#define OLED_RES_Clr() tal_gpio_write(OLED_RES_PIN,TUYA_GPIO_LEVEL_LOW)//RES
#define OLED_RES_Set() tal_gpio_write(OLED_RES_PIN,TUYA_GPIO_LEVEL_HIGH)

#define OLED_DC_Clr()  tal_gpio_write(OLED_DC_PIN,TUYA_GPIO_LEVEL_LOW)//DC
#define OLED_DC_Set()  tal_gpio_write(OLED_DC_PIN,TUYA_GPIO_LEVEL_HIGH)




#if USE_HORIZONTAL==0||USE_HORIZONTAL==180 /* 竖屏显示 */
#define oled_x  64
#define oled_y  16
#else                                      /* 横屏显示 */
#define oled_x  128
#define oled_y  8
#endif



/**
    @brief OLED 发送数据类型(指令/数据)
*/
typedef enum
{
    OLED_DC_TYPE_CMD = 0,
    OLED_DC_TYPE_DATA,
}oled_dc_type_t;

/**
    @brief OLED DMA状态(空闲/忙)
*/
typedef enum
{
	OLED_DMA_IDLE,
	OLED_DMA_BUSY,
}oled_dma_status_t;

/**
    @brief OLED 数据发送数据结构
*/
typedef struct
{
	volatile oled_dma_status_t dma_status;
	uint8_t  OLED_GRAM[oled_x+16][oled_y];

}oled_send_t;
 		     

/***********************************************************************
 ********************* struct ******************************************
 **********************************************************************/


/***********************************************************************
 ********************* variable ****************************************
 **********************************************************************/


/***********************************************************************
 ********************* function ****************************************
 **********************************************************************/

/**
 * @brief oled_spi_dma_init
 *
 * @param[in] param1:
 * @param[in] param2:
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
int32_t oled_spi_dma_init(VOID_T);
int32_t oled_spi_dma_send(oled_dc_type_t type, uint8_t *txbuf, uint16_t txlen);



#ifdef __cplusplus
}
#endif

#endif /* __APP_LED_H__ */

