📄 menu.c
字号:
/* * interface.c * * ============================================================================ * Copyright (c) Texas Instruments Inc 2005 * * Use of this software is controlled by the terms and conditions found in the * license agreement under which this software has been supplied or provided. * ============================================================================ *//* Standard Linux headers */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>/* Davinci EVM utility libraries */#include <msp430lib.h>#include <simplewidget.h>/* Application header file */#include "interface.h"/* The font size */#define PTSIZE 16/* Davini logo picture */#define DAVINCI_IMAGE_NTSC "data/pics/davinci_ntsc.png"#define DAVINCI_IMAGE_PAL "data/pics/davinci_pal.png"/* Button placements on OSD */#define DAVINCI_X 80#define DAVINCI_Y YSCALE(30)#define NAV_BUTTON_X 80#define NAV_BUTTON_Y 300#define BUTTON_WIDTH 240#define BUTTON_HEIGHT YSCALE(60)#define BUTTON_RED 0x22#define BUTTON_GREEN 0x22#define BUTTON_BLUE 0x77#define BUTTON_BORDER 5#define ENCDECBTNTEXT "Encode + Decode"#define ENCBTNTEXT "Encode"#define DECBTNTEXT "Decode"#define TPARTYBTNTEXT "Third Party Menu"#define BUTTON_X 400#define BUTTON_Y_1 YSCALE(50)#define BUTTON_Y_2 YSCALE(150)#define BUTTON_Y_3 YSCALE(250)#define BUTTON_Y_4 YSCALE(350)enum InitLevels { CREATEDINTERFACE = 1, MSP430LIBINITIALIZED,};typedef struct Button { simplewidget_png *pressedImgPtr; simplewidget_png *origImgPtr; int x; int y;} Button; /* OSD widgets */static simplewidget_screen simpleScreen = NULL;static simplewidget_png navImg = NULL;static simplewidget_png navLeftImg = NULL;static simplewidget_png navRightImg = NULL;static simplewidget_png navUpImg = NULL;static simplewidget_png navDownImg = NULL;static simplewidget_png navOkImg = NULL;static simplewidget_png davinciImg = NULL;#define NUM_BUTTONS 4static simplewidget_button simpleButtons[NUM_BUTTONS] = { NULL, NULL, NULL, NULL};static int buttonIdx = 0;enum Buttons { NAVLEFT, NAVRIGHT, NAVUP, NAVDOWN, NAVOK};static Button buttons[5] = { { &navLeftImg, &navImg, NAV_BUTTON_X, NAV_BUTTON_Y }, { &navRightImg, &navImg, NAV_BUTTON_X, NAV_BUTTON_Y }, { &navUpImg, &navImg, NAV_BUTTON_X, NAV_BUTTON_Y }, { &navDownImg, &navImg, NAV_BUTTON_X, NAV_BUTTON_Y }, { &navOkImg, &navImg, NAV_BUTTON_X, NAV_BUTTON_Y }};/****************************************************************************** * uiPressButton ******************************************************************************/static int uiPressButton(enum Buttons btnIdx){ Button *btnPtr = &buttons[btnIdx]; if (simplewidget_png_show(*btnPtr->pressedImgPtr, simpleScreen, btnPtr->x, YSCALE(btnPtr->y)) == -1) { ERR("Failed to show pressed button png image\n"); return FAILURE; } usleep(500000); if (simplewidget_png_show(*btnPtr->origImgPtr, simpleScreen, btnPtr->x, YSCALE(btnPtr->y)) == -1) { ERR("Failed to show original button png image\n"); return FAILURE; } return SUCCESS;} /****************************************************************************** * uiCreate ******************************************************************************/static int uiCreate(void){ /* Initialize the screens on which to draw widgets */ if (simplewidget_screen_init(getDisplay(), SCREEN_WIDTH, SCREEN_HEIGHT, &simpleScreen) == -1) { ERR("Failed to initialize simplewidget screen\n"); return FAILURE; } /* Create the navigation button in all permutations */ if (simplewidget_png_create(NAV_BUTTON, &navImg) == -1) { ERR("Failed to create png image\n"); return FAILURE; } if (simplewidget_png_create(NAV_BUTTON_LEFT_PRESSED, &navLeftImg) == -1) { ERR("Failed to create png image\n"); return FAILURE; } if (simplewidget_png_create(NAV_BUTTON_RIGHT_PRESSED, &navRightImg) == -1) { ERR("Failed to create png image\n"); return FAILURE; } if (simplewidget_png_create(NAV_BUTTON_UP_PRESSED, &navUpImg) == -1) { ERR("Failed to create png image\n"); return FAILURE; } if (simplewidget_png_create(NAV_BUTTON_DOWN_PRESSED, &navDownImg) == -1) { ERR("Failed to create png image\n"); return FAILURE; } if (simplewidget_png_create(NAV_BUTTON_OK_PRESSED, &navOkImg) == -1) { ERR("Failed to create png image\n"); return FAILURE; } if (getYFactor() == NTSC) { if (simplewidget_png_create(DAVINCI_IMAGE_NTSC, &davinciImg) == -1) { ERR("Failed to create png image\n"); return FAILURE; } } else { if (simplewidget_png_create(DAVINCI_IMAGE_PAL, &davinciImg) == -1) { ERR("Failed to create png image\n"); return FAILURE; } } /* Create the selection buttons */ if (simplewidget_button_create(BUTTON_X, BUTTON_Y_1, BUTTON_WIDTH, BUTTON_HEIGHT, BUTTON_RED, BUTTON_GREEN, BUTTON_BLUE, PTSIZE, BUTTON_BORDER, ENCDECBTNTEXT, &simpleButtons[0]) == -1) { ERR("Failed to create button\n"); return FAILURE; } if (simplewidget_button_create(BUTTON_X, BUTTON_Y_2, BUTTON_WIDTH, BUTTON_HEIGHT, BUTTON_RED, BUTTON_GREEN, BUTTON_BLUE, PTSIZE, BUTTON_BORDER, ENCBTNTEXT, &simpleButtons[1]) == -1) { ERR("Failed to create button\n"); return FAILURE; } if (simplewidget_button_create(BUTTON_X, BUTTON_Y_3, BUTTON_WIDTH, BUTTON_HEIGHT, BUTTON_RED, BUTTON_GREEN, BUTTON_BLUE, PTSIZE, BUTTON_BORDER, DECBTNTEXT, &simpleButtons[2]) == -1) { ERR("Failed to create button\n"); return FAILURE; } if (simplewidget_button_create(BUTTON_X, BUTTON_Y_4, BUTTON_WIDTH, BUTTON_HEIGHT, BUTTON_RED, BUTTON_GREEN, BUTTON_BLUE, PTSIZE, BUTTON_BORDER, TPARTYBTNTEXT, &simpleButtons[3]) == -1) { ERR("Failed to create button\n"); return FAILURE; } DBG("Successfully created OSD\n"); return SUCCESS;}/****************************************************************************** * uiDraw ******************************************************************************/static int uiDraw(void){ int i; /* Clear the OSD window */ simplewidget_screen_clear(simpleScreen, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); if (simplewidget_png_show(davinciImg, simpleScreen, DAVINCI_X, DAVINCI_Y) == -1) { ERR("Failed to show png image\n"); return FAILURE; } if (simplewidget_png_show(navImg, simpleScreen, NAV_BUTTON_X, YSCALE(NAV_BUTTON_Y)) == -1) { ERR("Failed to show png image\n"); return FAILURE; } for (i=0; i<NUM_BUTTONS; i++) { if (simplewidget_button_show(simpleButtons[i], simpleScreen) == FAILURE) { ERR("Failed to show button\n"); return FAILURE; } } if (simplewidget_button_press(simpleButtons[buttonIdx], simpleScreen) == FAILURE) { ERR("Failed to press button\n"); return FAILURE; } return SUCCESS;}/****************************************************************************** * uiDelete ******************************************************************************/static int uiDelete(void){ int i; for (i=0; i<NUM_BUTTONS; i++) { if (simpleButtons[i]) { simplewidget_button_delete(simpleButtons[i]); } } if (navUpImg) { simplewidget_png_delete(navUpImg); } if (navDownImg) { simplewidget_png_delete(navDownImg); } if (navRightImg) { simplewidget_png_delete(navRightImg); } if (navLeftImg) { simplewidget_png_delete(navLeftImg); } if (navOkImg) { simplewidget_png_delete(navOkImg); } if (navImg) { simplewidget_png_delete(navImg); } if (davinciImg) { simplewidget_png_delete(davinciImg); } if (simpleScreen) { simplewidget_screen_exit(simpleScreen); } return SUCCESS;}/****************************************************************************** * keyAction ******************************************************************************/static int keyAction(enum msp430lib_keycode key, int *quitPtr){ switch(key) { case MSP430LIB_KEYCODE_STOP: *quitPtr = NOSELECTION; break; case MSP430LIB_KEYCODE_CHANINC: if (simplewidget_button_show(simpleButtons[buttonIdx], simpleScreen) == FAILURE) { ERR("Failed to show button\n"); return FAILURE; } buttonIdx--; if (buttonIdx < 0) { buttonIdx = NUM_BUTTONS - 1; } if (simplewidget_button_press(simpleButtons[buttonIdx], simpleScreen) == FAILURE) { ERR("Failed to press button\n"); return FAILURE; } if (uiPressButton(NAVUP) == FAILURE) { return FAILURE; } break; case MSP430LIB_KEYCODE_CHANDEC: if (simplewidget_button_show(simpleButtons[buttonIdx], simpleScreen) == FAILURE) { ERR("Failed to show button\n"); return FAILURE; } buttonIdx = (buttonIdx + 1) % NUM_BUTTONS; if (simplewidget_button_press(simpleButtons[buttonIdx], simpleScreen) == FAILURE) { ERR("Failed to press button\n"); return FAILURE; } if (uiPressButton(NAVDOWN) == FAILURE) { return FAILURE; } break; case MSP430LIB_KEYCODE_OK: *quitPtr = TRUE; break; default: ERR("Unknown key pressed!\n"); } return SUCCESS;}/****************************************************************************** * interfaceFxn ******************************************************************************/int menuFxn(DemoEnv *envp){ enum InitLevels initLevel = 0; int status = SUCCESS; int quit = 0; enum msp430lib_keycode key; if (uiCreate() == FAILURE) { CLEANUP(FAILURE); } initLevel = CREATEDINTERFACE; if (uiDraw() == FAILURE) { CLEANUP(FAILURE); } if (msp430lib_init() == MSP430LIB_FAILURE) { ERR("Failed to initialize msp430lib.\n"); CLEANUP(FAILURE); } initLevel = MSP430LIBINITIALIZED; while (!quit) { /* See if an IR remote key has been pressed */ if (msp430lib_get_ir_key(&key) == MSP430LIB_FAILURE) { ERR("Failed to get IR value.\n"); } DBG("Got IR key %#x from the MSP430\n", key); /* If an IR key had been pressed, service it */ if (key != 0) { if (keyAction(key, &quit) == FAILURE) { BREAK_LOOP(FAILURE); } } usleep(500000); } envp->demoSelect = buttonIdx; if (quit == NOSELECTION) { status = NOSELECTION; }cleanup: if (initLevel >= MSP430LIBINITIALIZED) { msp430lib_exit(); } if (initLevel >= CREATEDINTERFACE) { uiDelete(); } return status;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -