141 lines
4.7 KiB
C
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_ */
|