⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 virtual_keyboard.c

📁 Sunplus 8202S source code.
💻 C
字号:
/**********************************************************
**  Description: for virtual keyboard
**  Creater:liweihua
**  Date:03-8-15 21:09
**  Modify Record
**	1. liweihua 2004-2-21 21:37 
**	   change the mode of call ircmd_xxx to the mode of call the function of call_ir_func(IRC_xxx)
***********************************************************/
#include "user_init.h"
#include "global.h"
#include "memmap0.h"
#include "ircmd.h"
#include "types.h"
#include "memcfg.h"
#include "framebuf.h"
#include "memmap.h"
#include "osd.h"
#include "keyboard_bmp.h"
#include "ircode.h"

#ifdef VIRTUAL_KEYBOARD

extern void osd_init_keyboard(void);
extern UINT8 *get_osdbuf_region_ptr(int _region, int _field);

#define __palette4F(G,B,R,A) \
        ( ((UINT32)((G)&0xff)<<24)|((UINT32)((B)&0xff)<<16)|((UINT32)((R)&0xff)<<8)|(A&0xff) ) 
#ifdef CD_PLAYER
#define KEY_R  4    //define the region of drawing keyboard
#else
#define KEY_R  3    
#endif
BYTE KeyID=0;//Define ID variable for the keys on virtual keyboard


//Draw virtual keyboard on osd region r
//The bmp image of virtual keyboard was made by image processing software.
void osd_draw_virtual_keyboard(int xStart, int yStart,BYTE r)
{
	//BYTE    *pIcon;
    UINT32  *pTopLine, *pBtmLine;
    UINT32  iDispLoc;
    
    int     i, j, k;
    int     iFontWidth, iFontHigh;
    int     iRegionWidth = region[r].osd_w;

    //osd_tog_region(r, OSD_ON);
    osd_tog_region(r, OSD_OFF); //20040225

	iRegionWidth = region[r].osd_w;
    //initialize buffer start
    pTopLine = (UINT32 *)get_osdbuf_region_ptr(r,0);   // region r top
    pBtmLine = (UINT32 *)get_osdbuf_region_ptr(r,1);   // region r bot
   
    //skip n blank line on top(in pixel)
    //for interlace mode, we will skip n/2 blank lines, for example 4/2=2
    yStart+=2;

	UINT32 pixel4;
    UINT32 pos;

    //get Keyboard bmp information
    iFontWidth  = bmp_key[0];
    iFontHigh   = bmp_key[1];

    //start to process
    pos = 2;    
        
    for (j=0; j<iFontHigh; j++)
    {
        int yy;
        UINT32 *pp;
        yy = (p_scan) ? yStart : yStart>>1;
        pp = (yStart&1) ? pBtmLine : pTopLine;

        iDispLoc = (yy*iRegionWidth*2/8) + (xStart);
        for (i=0; i<(iFontWidth/4); i++) // every 4-bytes a time, every 1-pixel a byte
        {
        	pixel4=0;
            // 0x12345678  ==>  0x78563412
            for (k=0;k<4;k++)
            {
            	unsigned curByte = bmp_key[pos++];
	            pixel4 = pixel4 | (curByte<<8*k);
            }
            pp[iDispLoc+i] =  pixel4;
        }
        yStart++;
    }//for key heigh
    osd_tog_region(r, OSD_ON);//20040225
    timeout_osd[r] = 0;
}

//Set all keys of keyboard the default color
//The keys of virtual keyboard are draw in different colors
//The numbers,"201, 70, 200, 185, 187, 127", are the positions of keys in color palette. 
void set_button_color(void)
{
	// alan, 2003/8/27 10:43AM
	SetOsdCol(KEY_R,KEY_R,201, __palette4F(0,160,0,0xff));//set the play/pause key color
	SetOsdCol(KEY_R,KEY_R,70, __palette4F(0,160,0,0xff));//set the forward key color
	SetOsdCol(KEY_R,KEY_R,200, __palette4F(0,160,0,0xff));//set the next key color
	SetOsdCol(KEY_R,KEY_R,185, __palette4F(0,160,0,0xff));//set the stop key color
	SetOsdCol(KEY_R,KEY_R,187, __palette4F(0,160,0,0xff)); //set the prev key color
	SetOsdCol(KEY_R,KEY_R,127, __palette4F(0,160,0,0xff));//set the backward key color
}

//=====================================
// set the selected key highlight color
// SelectID=0: select play/pause key
// SelectID=1: select forward key
// SelectID=2: select next key
// SelectID=3: select stop key
// SelectID=4: select prev key
// SelectID=5: select backward key 
//=====================================
void hl_keyboard_button(BYTE SelectID)
{
	set_button_color();

	switch(SelectID)
	{
		case 0:
			SetOsdCol(KEY_R,KEY_R,201, __palette4F(0xff,0xff,0xff,0xff));	// alan, 2003/8/27 10:43AM
			break;		
		case 1:
			SetOsdCol(KEY_R,KEY_R,70, __palette4F(0xff,0xff,0xff,0xff));	// alan, 2003/8/27 10:43AM
			break;
		case 2:
			SetOsdCol(KEY_R,KEY_R,200, __palette4F(0xff,0xff,0xff,0xff));	// alan, 2003/8/27 10:43AM
			break;
		case 3:
			SetOsdCol(KEY_R,KEY_R,185, __palette4F(0xff,0xff,0xff,0xff));	// alan, 2003/8/27 10:43AM
			break;
		case 4:
			SetOsdCol(KEY_R,KEY_R,187,__palette4F(0xff,0xff,0xff,0xff));	// alan, 2003/8/27 10:43AM
			break;
		case 5:
			SetOsdCol(KEY_R,KEY_R,127, __palette4F(0xff,0xff,0xff,0xff));	// alan, 2003/8/27 10:43AM
			break;
	}
}

//Show virtual keyboard on osd region KEY_R in default state
void show_virtual_keyboard(void)
{
	KeyID=0;
	osd_init_keyboard();
	osd_draw_virtual_keyboard(0,0,KEY_R);	
	hl_keyboard_button(KeyID);		
}

//Run the related function of selected key 
void virtual_keyboard_select(void)
{
	
       if(is_menu()){
       	invalid_key();
	return;
       }//wangap add 2004/3/3	
	if(KeyID==0)
    {
/*
    	if ( (adv_search_time!=0) && (adv_search_time!=1) )	// alan, 2003/8/26 04:23PM
    		ircmd_play();
    	else
		if((play_state==VCD_STATE_PAUSE)||(play_state==VCD_STATE_STOP))
		{
			if (resumeMSF==0)
				ircmd_play();
			else
				ircmd_resume();
		} else {
			ircmd_pause();
		}
*/
		call_ir_func(IRC_PAUSEPLAY);//nono 20040217
    }
    else if(KeyID==1)
    {
    	/*
    	if (play_state!=VCD_STATE_STOP)
    		ircmd_forward();
    	else
    		invalid_key();
    	*/
    	call_ir_func(IRC_FORWARD);
    }
    else if(KeyID==2)
    {
    	/*
    	if (play_state!=VCD_STATE_STOP)
    		ircmd_next();
    	else
    		invalid_key();
    	*/
    	call_ir_func(IRC_NEXT);
    }
    else if(KeyID==3)
    {
    	//ircmd_stop();
    	call_ir_func(IRC_STOP);
    }
    else if(KeyID==4)
    {
    	/*
    	if (play_state!=VCD_STATE_STOP)
    		ircmd_prev();
    	else
    		invalid_key();
    	*/
    	call_ir_func(IRC_PREV);
    }
    else if(KeyID==5)
    {
    	/*
    	if (play_state!=VCD_STATE_STOP)
    		ircmd_backward();
    	else
    		invalid_key();
    	*/
    	call_ir_func(IRC_BACKWARD);
    }
}

//change selected color in
void virtual_keyboard_left()
{
	if(KeyID<=0)
		KeyID=5;
	else
		KeyID--;
	hl_keyboard_button(KeyID);
}

void virtual_keyboard_right()
{
	if(KeyID>=5)
		KeyID=0;
	else
		KeyID++;
	//osd_init_key();
	hl_keyboard_button(KeyID);
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -