123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- /* Copyright (C) 2018 RDA Technologies Limited and/or its affiliates("RDA").
- * All rights reserved.
- *
- * This software is supplied "AS IS" without any warranties.
- * RDA assumes no responsibility or liability for the use of the software,
- * conveys no license or title under any patent, copyright, or mask work
- * right to the product. RDA reserves the right to make changes in the
- * software without notification. RDA also make no representation or
- * warranty that such application will be suitable for the specified use
- * without further testing or modification.
- */
- #ifndef _DRV_LCD_V2_H_
- #define _DRV_LCD_V2_H_
- #include "drv_lcd_defs.h"
- #include "osi_compiler.h"
- OSI_EXTERN_C_BEGIN
- /**
- * \brief opaque data struct for LCD
- */
- typedef struct drvLcd drvLcd_t;
- /**
- * \brief initialize LCD module
- */
- void drvLcdInitV2(void);
- /**
- * \brief get LCD driver instance by name
- *
- * \param name LCD driver name
- * \return
- * - LCD instance
- * - NULL on invalid parameter
- */
- drvLcd_t *drvLcdGetByname(unsigned name);
- /**
- * \brief open LCD instance
- *
- * When it is the first time to open the LCD, it will probe the panel.
- *
- * After open, pixel data can be send to panel. However, unless back light
- * id enabled, picture can't be seen on panel.
- *
- * \param d LCD driver instance
- * \return
- * - true on success
- * - false on invalid parameter, or invalid panel
- */
- bool drvLcdOpenV2(drvLcd_t *d);
- /**
- * \brief open LCD instance
- *
- * Usually, it is not needed to be called. For power saving, \p drvLcdSleep
- * and \p drvLcdWakeup should be called.
- *
- * \param d LCD driver instance
- */
- void drvLcdCloseV2(drvLcd_t *d);
- /**
- * \brief LCD enter sleep mode
- *
- * When LCD is not in sleep, system can't sleep also.
- *
- * \param d LCD driver instance
- * \return
- * - true on success
- * - false on invalid parameter
- */
- bool drvLcdSleep(drvLcd_t *d);
- /**
- * \brief LCD exit sleep mode
- *
- * \param d LCD driver instance
- * \return
- * - true on success
- * - false on invalid parameter
- */
- bool drvLcdWakeup(drvLcd_t *d);
- /**
- * \brief turn on or off back light of LCD
- *
- * \param d LCD instance
- * \param enabled true to turn on back light, false to turn off
- */
- void drvLcdSetBackLightEnable(drvLcd_t *d, bool enabled);
- /**
- * \brief get panel information
- *
- * When the panel is invalid, it will return false.
- *
- * After direction transform is changed, the width and height of panel
- * may be swapped.
- *
- * \param d LCD driver instance
- * \param info output panel information
- * \return
- * - true on success
- * - false on invalid parameter or panel invalid
- */
- bool drvLcdGetPanelInfo(drvLcd_t *d, drvLcdPanelInfo_t *info);
- /**
- * \brief set screen direction
- *
- * \param d LCD driver instance
- * \param dir direction
- */
- void drvLcdSetDirection(drvLcd_t *d, drvLcdDirection_t dir);
- /**
- * \brief flush LCD display
- *
- * When \p sync is false, this will return immediate after data transfer is
- * started. Otherwise, this will wait data transfer is finished.
- *
- * When previous data transfer is on-going, it will wait previous data
- * transfer finish anyway.
- *
- * Dcache clean will be performed inside.
- *
- * \param d LCD driver instance
- * \param layers layers definition
- * \param sync true to wait data transfer done
- * \return
- * - true on success
- * - false on invalid parameter
- */
- bool drvLcdFlush(drvLcd_t *d, const drvLcdLayers_t *layers, bool sync);
- /**
- * \brief fill solid color in screen ROI
- *
- * When \p screen_roi is NULL, fill full screen.
- *
- * \param d LCD driver instance
- * \param color color in RGB565
- * \param screen_roi screen ROI, NULL for full screen
- * \param sync true to wait data transfer done
- * \return
- * - true on success
- * - false on invalid parameter
- */
- bool drvLcdFill(drvLcd_t *d, uint16_t color, const drvLcdArea_t *screen_roi, bool sync);
- /**
- * \brief blend layers to memory
- *
- * It will reuse the hardware resource, and not bind to LCD. It will wait
- * previous data transfer done.
- *
- * There is only "sync" version, that it, it will always wait data transfer
- * done before return.
- *
- * Dcache clean for layer buffers and dcache invalidate for outptu will be
- * performed inside. Caller should take care alignment of \p buf, to avoid
- * invalidate other varaiables.
- *
- * The output format is fixed to RGB565. \p buf should point to the original
- * pixel of blended layer ROI. The unit of \p stride is pixel, not bytes.
- *
- * \param layers layers definition
- * \param buf output buffer
- * \param stride output buffer stride in pixel
- * \return
- * - true on success
- * - false on invalid parameter
- *
- */
- bool drvLcdBlend(const drvLcdLayers_t *layers, void *buf, unsigned stride);
- /**
- * \brief wait on-going data transfer done
- */
- void drvLcdWaitTransferDone(void);
- typedef enum
- {
- LPS_CONSTRAINT_NONE = (0),
- LPS_CONSTRATNT_AUDIO = (1 << 0),
- LPS_CONSTRAINT_LCD = (1 << 1),
- } LPS_CONSTRAINT_TYPE;
- void drvSwitchLCDPower(bool enabled, LPS_CONSTRAINT_TYPE type);
- OSI_EXTERN_C_END
- #endif
|