rt-thread-official/bsp/imxrt/imxrt1170-nxp-evk/m7/video/display/fsl_display.h

141 lines
4.7 KiB
C

/*
* Copyright 2017-2018 NXP
* All rights reserved.
*
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _FSL_DISPLAY_H_
#define _FSL_DISPLAY_H_
#include "fsl_video_common.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/*! @brief Display common configuration. */
typedef struct _display_common_cfg_t
{
uint16_t width;
uint16_t height;
uint16_t hsw; /*!< HSYNC pulse width. */
uint16_t hfp; /*!< Horizontal front porch. */
uint16_t hbp; /*!< Horizontal back porch. */
uint16_t vsw; /*!< VSYNC pulse width. */
uint16_t vfp; /*!< Vrtical front porch. */
uint16_t vbp; /*!< Vertical back porch. */
uint32_t clock; /* !< pixecl clock in kHz>. */
} display_common_cfg;
/*! @brief Display control flags. */
enum _display_flags
{
kDISPLAY_VsyncActiveLow = 0U, /*!< VSYNC active low. */
kDISPLAY_VsyncActiveHigh = (1U << 0U), /*!< VSYNC active high. */
kDISPLAY_HsyncActiveLow = 0U, /*!< HSYNC active low. */
kDISPLAY_HsyncActiveHigh = (1U << 1U), /*!< HSYNC active high. */
kDISPLAY_DataEnableActiveHigh = 0U, /*!< Data enable line active high. */
kDISPLAY_DataEnableActiveLow = (1U << 2U), /*!< Data enable line active low. */
kDISPLAY_DataLatchOnRisingEdge = 0U, /*!< Latch data on rising clock edge. */
kDISPLAY_DataLatchOnFallingEdge = (1U << 3U), /*!< Latch data on falling clock edge. */
};
/*! @brief Display configuration. */
typedef struct _display_config
{
uint32_t resolution; /*!< Resolution, see @ref video_resolution_t and @ref FSL_VIDEO_RESOLUTION. */
uint16_t hsw; /*!< HSYNC pulse width. */
uint16_t hfp; /*!< Horizontal front porch. */
uint16_t hbp; /*!< Horizontal back porch. */
uint16_t vsw; /*!< VSYNC pulse width. */
uint16_t vfp; /*!< Vrtical front porch. */
uint16_t vbp; /*!< Vertical back porch. */
uint32_t controlFlags; /*!< Control flags, OR'ed value of @ref _display_flags. */
uint8_t dsiLanes; /*!< MIPI DSI data lanes number. */
uint32_t pixelClock_Hz; /*!< Pixel clock in Hz. */
video_pixel_format_t pixelFormat; /*!< Pixel format. */
} display_config_t;
typedef struct _display_handle display_handle_t;
/*! @brief Display device operations. */
typedef struct _display_operations
{
status_t (*init)(display_handle_t *handle, const display_config_t *config); /*!< Init the device. */
status_t (*deinit)(display_handle_t *handle); /*!< Deinit the device. */
status_t (*start)(display_handle_t *handle); /*!< Start the device. */
status_t (*stop)(display_handle_t *handle); /*!< Stop the device. */
} display_operations_t;
/*! @brief Display handle. */
struct _display_handle
{
const void *resource;
const display_operations_t *ops;
uint16_t width;
uint16_t height;
video_pixel_format_t pixelFormat;
};
/*******************************************************************************
* API
******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif
/*!
* @brief Initializes the display device with user defined configuration.
*
* @param handle Display device handle.
* @param config Pointer to the user-defined configuration structure.
* @return Returns @ref kStatus_Success if initialize success, otherwise returns
* error code.
*/
static inline status_t DISPLAY_Init(display_handle_t *handle, const display_config_t *config)
{
return handle->ops->init(handle, config);
}
/*!
* @brief Deinitialize the display device.
*
* @param handle Display device handle.
* @return Returns @ref kStatus_Success if success, otherwise returns error code.
*/
static inline status_t DISPLAY_Deinit(display_handle_t *handle)
{
return handle->ops->deinit(handle);
}
/*!
* @brief Start the display device.
*
* @param handle Display device handle.
* @return Returns @ref kStatus_Success if success, otherwise returns error code.
*/
static inline status_t DISPLAY_Start(display_handle_t *handle)
{
return handle->ops->start(handle);
}
/*!
* @brief Stop the display device.
*
* @param handle Display device handle.
* @return Returns @ref kStatus_Success if success, otherwise returns error code.
*/
static inline status_t DISPLAY_Stop(display_handle_t *handle)
{
return handle->ops->stop(handle);
}
#if defined(__cplusplus)
}
#endif
#endif /* _FSL_DISPLAY_H_ */