URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [CORTEX_AT91SAM3U256_IAR/] [AT91Lib/] [drivers/] [lcd/] [draw_hx8347.c] - Rev 580
Compare with Previous | Blame | View Log
/* ---------------------------------------------------------------------------- * ATMEL Microcontroller Software Support * ---------------------------------------------------------------------------- * Copyright (c) 2008, Atmel Corporation * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the disclaimer below. * * Atmel's name may not be used to endorse or promote products derived from * this software without specific prior written permission. * * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ---------------------------------------------------------------------------- */ //------------------------------------------------------------------------------ // Headers //------------------------------------------------------------------------------ #include "draw.h" #include "font.h" #include <board.h> #include <utility/assert.h> #include <hx8347/hx8347.h> #include <string.h> //------------------------------------------------------------------------------ // Global functions //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ /// Fills the given LCD buffer with a particular color. /// Only works in 24-bits packed mode for now. /// \param pBuffer LCD buffer to fill. /// \param color Fill color. //------------------------------------------------------------------------------ void LCDD_Fill(void *pBuffer, unsigned int color) { unsigned int i; unsigned short color16 = RGB24ToRGB16(color); LCD_SetCursor((void *)BOARD_LCD_BASE, 0, 0); LCD_WriteRAM_Prepare((void *)BOARD_LCD_BASE); for (i = 0; i < (BOARD_LCD_WIDTH * BOARD_LCD_HEIGHT); i++) { LCD_WriteRAM((void *)BOARD_LCD_BASE, color16); } } //------------------------------------------------------------------------------ /// Sets the specified pixel to the given color. /// !!! Only works in 24-bits packed mode for now. !!! /// \param pBuffer LCD buffer to draw on. /// \param x X-coordinate of pixel. /// \param y Y-coordinate of pixel. /// \param color Pixel color. //------------------------------------------------------------------------------ void LCDD_DrawPixel( void *pBuffer, unsigned int x, unsigned int y, unsigned int color) { unsigned short color16 = RGB24ToRGB16(color); LCD_SetCursor(pBuffer, x, y); LCD_WriteRAM_Prepare(pBuffer); LCD_WriteRAM(pBuffer, color16); } //------------------------------------------------------------------------------ /// Draws a rectangle inside a LCD buffer, at the given coordinates. /// \param pBuffer LCD buffer to draw on. /// \param x X-coordinate of upper-left rectangle corner. /// \param y Y-coordinate of upper-left rectangle corner. /// \param width Rectangle width in pixels. /// \param height Rectangle height in pixels. /// \param color Rectangle color. //------------------------------------------------------------------------------ void LCDD_DrawRectangle( void *pBuffer, unsigned int x, unsigned int y, unsigned int width, unsigned int height, unsigned int color) { unsigned int rx, ry; for (ry=0; ry < height; ry++) { for (rx=0; rx < width; rx++) { LCDD_DrawPixel(pBuffer, x+rx, y+ry, color); } } } //------------------------------------------------------------------------------ /// Draws a string inside a LCD buffer, at the given coordinates. Line breaks /// will be honored. /// \param pBuffer Buffer to draw on. /// \param x X-coordinate of string top-left corner. /// \param y Y-coordinate of string top-left corner. /// \param pString String to display. /// \param color String color. //------------------------------------------------------------------------------ void LCDD_DrawString( void *pBuffer, unsigned int x, unsigned int y, const char *pString, unsigned int color) { unsigned xorg = x; while (*pString != 0) { if (*pString == '\n') { y += gFont.height + 2; x = xorg; } else { LCDD_DrawChar(pBuffer, x, y, *pString, color); x += gFont.width + 2; } pString++; } } //------------------------------------------------------------------------------ /// Returns the width & height in pixels that a string will occupy on the screen /// if drawn using LCDD_DrawString. /// \param pString String. /// \param pWidth Pointer for storing the string width (optional). /// \param pHeight Pointer for storing the string height (optional). /// \return String width in pixels. //------------------------------------------------------------------------------ void LCDD_GetStringSize( const char *pString, unsigned int *pWidth, unsigned int *pHeight) { unsigned int width = 0; unsigned int height = gFont.height; while (*pString != 0) { if (*pString == '\n') { height += gFont.height + 2; } else { width += gFont.width + 2; } pString++; } if (width > 0) width -= 2; if (pWidth) *pWidth = width; if (pHeight) *pHeight = height; }