From 044ad7c3987460ede48ff27afd6bdb0ca05a0432 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 4 Jul 2011 20:52:54 +0200 Subject: import at91lib from at91lib_20100901_softpack_1_9_v_1_0_svn_v15011 it's sad to see that atmel doesn't publish their svn repo or has a centralized location or even puts proper version/release info into the library itself --- utility/demo-fw/common/dfm_button.c | 248 ++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 utility/demo-fw/common/dfm_button.c (limited to 'utility/demo-fw/common/dfm_button.c') diff --git a/utility/demo-fw/common/dfm_button.c b/utility/demo-fw/common/dfm_button.c new file mode 100644 index 0000000..b0d9d54 --- /dev/null +++ b/utility/demo-fw/common/dfm_button.c @@ -0,0 +1,248 @@ +/* ---------------------------------------------------------------------------- + * 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. + * ---------------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include + +#include "dfm_init.h" +#include "dfm_cmd.h" +#include "dfm_button.h" +#include "dfm_lcd_tsd.h" + +//------------------------------------------------------------------------------ +// variable definition +//------------------------------------------------------------------------------ +/// global BUTTON entry +TInputEntry gButtonEntry = \ + {0, {NULL,NULL}, BTN_ShowPrompt, BTN_CommandIsReady, BTN_GetCommand, NULL}; + +/// global active icon, a focus circle should be drawn around it +unsigned int gActiveIconIndex; + +//button pin definition +static Pin pinsPushButtons[] = {PINS_PUSHBUTTONS}; + +//------------------------------------------------------------------------------ +// Exported functions +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +/// Init button +//------------------------------------------------------------------------------ +int BTN_Init(void) +{ + printf("\n\r Init Button!"); + + gActiveIconIndex = 0; + + //memset(keyStatus, 1, 2); + + PIO_Configure(pinsPushButtons, PIO_LISTSIZE(pinsPushButtons)); + + return 0; +} + +//decleare to init it in level 5 +DFM_INIT(5, BTN_Init); + +//------------------------------------------------------------------------------ +/// Draw a focus circle around current active icon +/// \param colormask, color mask to generate a masked color to draw +//------------------------------------------------------------------------------ +static void DrawIconSelection(unsigned int linkZoneIndex, unsigned int colorMask) +{ + unsigned int i, left, bottom, width, height; + unsigned short color16; + unsigned int color, color24; + + //index correcttion + if(linkZoneIndex >= gActiveSlideHeader.linkcount) + linkZoneIndex = gActiveSlideHeader.linkcount - 1; + + bottom = gActiveSlideHeader.linkinfo[linkZoneIndex].linkboxbottom; + left = gActiveSlideHeader.linkinfo[linkZoneIndex].linkboxleft; + width = gActiveSlideHeader.linkinfo[linkZoneIndex].linkboxwidth; + height = gActiveSlideHeader.linkinfo[linkZoneIndex].linkboxheight; + +#ifndef RGB16ToRGB24 +/// Convert 16-bits color to 24-bits color, detail lost, only for compatible. +#define RGB16ToRGB24(color) (((color & 0XF800) << 8) | \ + ((color & 0x7E0) << 5) | \ + ((color & 0x1F) << 3)) +#endif + + for(i = 0; i < (width + 2); ++i) { + color16 = LCDD_ReadPixel((void *)BOARD_LCD_BASE, + left + i, + bottom); + color = RGB16ToRGB24(color16); + color24 = color ^ colorMask; + + LCDD_DrawPixel((void *)BOARD_LCD_BASE, + left + i, + bottom, + color24); + + color16 = LCDD_ReadPixel((void *)BOARD_LCD_BASE, + left + i, + bottom - height - 1); + color = RGB16ToRGB24(color16); + color24 = color ^ colorMask; + + LCDD_DrawPixel((void *)BOARD_LCD_BASE, + left + i, + bottom - height - 1, + color24); + } + + for(i = 1; i < (height + 1); ++i) { + color16 = LCDD_ReadPixel((void *)BOARD_LCD_BASE, + left, + bottom - i); + + color = RGB16ToRGB24(color16); + color24 = color ^ colorMask; + + LCDD_DrawPixel((void *)BOARD_LCD_BASE, + left, + bottom - i, + color24); + + color16 = LCDD_ReadPixel((void *)BOARD_LCD_BASE, + left + width + 1, + bottom - i); + + color = RGB16ToRGB24(color16); + color24 = color ^ colorMask; + + LCDD_DrawPixel((void *)BOARD_LCD_BASE, + left + width + 1, + bottom - i, + color24); + } + +} + +//------------------------------------------------------------------------------ +/// Draw a focus circle on current active icon +//------------------------------------------------------------------------------ +int BTN_ShowPrompt() +{ + static unsigned int iconDrawedIndex = 0xFFFFFFFF; + static unsigned int slidePageLoaded = 0xFFFFFFFF; + + if(slidePageLoaded != gActiveSlideIndex) { + slidePageLoaded = gActiveSlideIndex; + iconDrawedIndex = gActiveIconIndex = 0; + + DrawIconSelection(gActiveIconIndex, COLOR_AZUR); + } else { + if(iconDrawedIndex != gActiveIconIndex) { + DrawIconSelection(iconDrawedIndex, COLOR_AZUR); + + DrawIconSelection(gActiveIconIndex, COLOR_AZUR); + + iconDrawedIndex = gActiveIconIndex; + } + } + + return 0; +} + +//------------------------------------------------------------------------------ +/// Check button press/release status, if OK button press/released, then true +/// \return 0 means not ready, 1 means yes. +//------------------------------------------------------------------------------ +//check if button is pressed +unsigned int BTN_CommandIsReady() +{ + //unsigned int i; + static unsigned int selPressFlag = 0; + static unsigned int okPressFlag = 0; + unsigned int ret = 0; + unsigned char btnStatus; + + //read icon selection button status + btnStatus = PIO_Get(&(pinsPushButtons[0])); + + //icon selection button pressed + if(btnStatus == 0) { + if(!selPressFlag) { +// //use same color mask to clear previous focus circle +// DrawIconSelection(COLOR_AZUR); + + //increase icon index to next + ++gActiveIconIndex; + if(gActiveIconIndex >= gActiveSlideHeader.linkcount) + gActiveIconIndex = 0; + +// //use a color mask to draw a focus circle for icon +// DrawIconSelection(COLOR_AZUR); + + //set selection button pressed flag to wait button release + selPressFlag = 1; + } + } else { + //pressed key released + selPressFlag = 0; + } + + //read icon confirm button status + btnStatus = PIO_Get(&(pinsPushButtons[1])); + + //ok button pressed + if(btnStatus == 0) + { + if(!okPressFlag) { + //set ok button pressed flag to wait button release + okPressFlag = 1; + } + } else { + if(okPressFlag) { + //pressed key released,then return 1 to id command is ready + ret = 1; + okPressFlag = 0; + } + } + + return ret; +} + +//------------------------------------------------------------------------------ +/// Get commands for selected icon +/// \return command string for the selected icon +//------------------------------------------------------------------------------ +const char * BTN_GetCommand() +{ + return GetLinkStrFromActiveSlide(gActiveIconIndex + 1); +} + -- cgit v1.2.3