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

📄 osdprgm.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
#include    "winav.h"#include    "input.h"#include    "osd.h"#include    "hal.h"#include    "cc.h"#include    "gdi.h"#include    "dvdinfo.h"#include    "cdinfo.h"#include    "linear.h"#include    "navigate.h"#include    "fmanager.h" //Kevin1.10#include    "thumb.h" //Kevin1.10// Brian2.37, Program UI need to use 16 pixel CHAR_SPACE#ifdef SUPPORT_FONT_26#undef  CHAR_SPACE#define CHAR_SPACE  CHAR_SPACE16#endif#ifdef CT908_UI// Brian1.00, move to String.*#define OSDPRGM_MAIN_FILE#include "string.lan" // Brian1.07, use .lan file to include the string fileWORD code aDigit[] = {CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, CHAR_7, CHAR_8, CHAR_9};WORD code aArrowDown[] = {1, CHAR_N_DWN_16}; WORD code aArrowUp[] = {1, CHAR_N_UP_16}; #ifdef SUPPORT_SIMPLE_FM_PROGRAM //Kevin1.10 WORD code aDir[] = {1, CHAR_OPENFOLDER_26};WORD code aFile[] = {1, CHAR_N_TITLE};#endif//Brian1.00, move to String.*/*WORD code aProgram[][8]={ {7, CHAR_P, CHAR_R, CHAR_O, CHAR_G, CHAR_R, CHAR_A, CHAR_M},                          {2, CHAR_BIAN, CHAR_ALBUM2} };                          WORD code aPrgmInstr[][23] = { {22, CHAR_N_LEFT, CHAR_N_UP, CHAR_N_RIGHT, CHAR_N_DOWN, CHAR_MOUHOW, CHAR_SPACE_26, CHAR_S_26, CHAR_ee_26, CHAR_ll_26, CHAR_ee_26, CHAR_cc_26, CHAR_tt_26, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_N_PLAY, CHAR_MOUHOW, CHAR_SPACE_26, CHAR_P_26, CHAR_ll_26, CHAR_aa_26, CHAR_yy_26},                                {16, CHAR_N_LEFT, CHAR_N_UP, CHAR_N_RIGHT, CHAR_N_DOWN, CHAR_MOUHOW, CHAR_SPACE_26, CHAR_SELECT1, CHAR_SELECT2, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_N_PLAY, CHAR_MOUHOW, CHAR_SPACE_26, CHAR_PLAY1, CHAR_PLAY2} }; WORD code aTitle[][6] = { {5, CHAR_T_26, CHAR_ii_26, CHAR_tt_26, CHAR_ll_26, CHAR_ee_26},                          {2, CHAR_TITLE1, CHAR_TITLE2} };WORD code aChapter[][8] = { {7, CHAR_C_26, CHAR_hh_26, CHAR_aa_26, CHAR_pp_26, CHAR_tt_26, CHAR_ee_26, CHAR_rr_26},                            {2, CHAR_CHAPTER1, CHAR_CHAPTER2} };WORD code aTrack[][6] = { {5, CHAR_T_26, CHAR_rr_26, CHAR_aa_26, CHAR_cc_26, CHAR_kk_26},                          {2, CHAR_SINGLE2, CHAR_MU} };*/    extern  BYTE    DATA    _bOSDLang;//#define SUPPORT_PRGM_NUM_INPUT //Kevin1.06 //Kevin1.24, move to customer.h//#define SUPPORT_CLEARALL_IN_PROGRAM//#define SUPPORT_CIRCULAR_WRAP   //Kevin1.05, add#ifdef SUPPORT_CLEARALL_IN_PROGRAM#define MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME       6 //7#define MAX_ENTRY_NUM_SHOWN_IN_TITLE_FRAME      5 //6#define MAX_ENTRY_NUM_SHOWN_IN_CHAPTER_FRAME    5 //6#else#define MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME       5 //6#define MAX_ENTRY_NUM_SHOWN_IN_TITLE_FRAME      5 //6#define MAX_ENTRY_NUM_SHOWN_IN_CHAPTER_FRAME    5 //6#endif// Brian1.24, this value will offset the entire Program UI#define PROGRAM_GLOBAL_OFFSET     (-16)   //0#include "osdvp.h"// Brian2.37#ifdef SUPPORT_FONT_26#define ENTRY_HEIGHT        26#else#define ENTRY_HEIGHT        32#endif#define FRAME_THICKNESS     2  #define ARROW_HEIGHT        20    #define PRGM_FRAME_X0		(50+PROGRAM_GLOBAL_OFFSET) // Brian1.24#define PRGM_FRAME_Y0		OSDLD_START_V //60//30#ifdef USE_LARGE_FONT //CoCo2.30, tune the background for large font#define PRGM_FRAME_X1		(600+PROGRAM_GLOBAL_OFFSET) // Brian1.24#else#define PRGM_FRAME_X1		(590+PROGRAM_GLOBAL_OFFSET) // Brian1.24#endif#define PRGM_FRAME_Y1		395//400            #define MAIN_FRAME_X0       (100+PROGRAM_GLOBAL_OFFSET) // Brian1.24//#define MAIN_FRAME_Y0       130 //100#define FRAME_Y0            136 //130 //100///#ifdef SUPPORT_CLEARALL_IN_PROGRAM#define MAIN_FRAME_Y0       FRAME_Y0///#else///#define MAIN_FRAME_Y0       FRAME_Y0+ENTRY_HEIGHT///#endif#define MAIN_FRAME_X1       (350+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //390#define MAIN_FRAME_Y1       MAIN_FRAME_Y0+MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME*ENTRY_HEIGHT+2*FRAME_THICKNESS     #define TITLE_FRAME_X0      (380+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //410//#define TITLE_FRAME_Y0      MAIN_FRAME_Y0+ENTRY_HEIGHT#ifdef SUPPORT_CLEARALL_IN_PROGRAM#define TITLE_FRAME_Y0      FRAME_Y0+ENTRY_HEIGHT#else#define TITLE_FRAME_Y0      FRAME_Y0#endif#define TITLE_FRAME_X1      (450+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //470#define TITLE_FRAME_Y1      TITLE_FRAME_Y0+MAX_ENTRY_NUM_SHOWN_IN_TITLE_FRAME*ENTRY_HEIGHT+2*FRAME_THICKNESS #ifdef SUPPORT_FONT_26               #define CHAPTER_FRAME_X0    (470+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //490#else#define CHAPTER_FRAME_X0    (480+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //490#endif//#define CHAPTER_FRAME_Y0    MAIN_FRAME_Y0+ENTRY_HEIGHT#ifdef SUPPORT_CLEARALL_IN_PROGRAM#define CHAPTER_FRAME_Y0    FRAME_Y0+ENTRY_HEIGHT#else#define CHAPTER_FRAME_Y0    FRAME_Y0#endif#define CHAPTER_FRAME_X1    (570+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //550 //Kevin1.00 CHAPTER_FRAME_X1 for CDROM_M1. CHAPTER_FRAME_X1-20 for others#define CHAPTER_FRAME_Y1    CHAPTER_FRAME_Y0+MAX_ENTRY_NUM_SHOWN_IN_CHAPTER_FRAME*ENTRY_HEIGHT+2*FRAME_THICKNESS                   #define MAIN_FRAME			1#define TITLE_FRAME			2#define CHAPTER_FRAME		3#define CLEAR_HIGHLIGHT		0#define SET_HIGHLIGHT		1//Internal Functionsstatic void _ShowOneEntry(WORD wEntry);static void _ShowMainList(void);static void _ShowTitleList(void);static void _ShowChapterList(void);static void _SetClearHighlight(BYTE bFlag);void _OSDPRGM_OutputNum(WORD wNum, BYTE bDigit); //CoCo1.21void _OSDPRGM_InitialOutputString(WORD wChar); //CoCo1.21void _OSDPRGM_UpdateProgramChapter(BYTE bDigits); //CoCo1.21;void _OSDPRGM_UpdateChapterList(void); //CoCo1.21void _OSDPRGM_UpdateTitleList(void); //CoCo1.21void _OSDPRGM_ProceedToNextMainEntry(void); //Kevin1.23DMTech//MAX_PROG_ITEM                 //total # of tracks to be programmedBYTE _bTotalTitle;       //total # of titles in the discWORD _wTotalChapter;     //total # of chapters corresponding to the selected title//show entry fromBYTE    _bMainStart; BYTE    _bTitleStart;    WORD    _wChapterStart;      //current pos BYTE    _bMainHighlightPos; BYTE    _bTitleHighlightPos;WORD    _wChapterHighlightPos;//current frame BYTE    _bCurrentFrame;extern BYTE  IDATA     __bTemp;BYTE    _bOSDPRGMTemp, _bOSDPRGMTemp1; //for temp useWORD    _wOSDPRGMTemp;#ifdef SUPPORT_PRGM_NUM_INPUT //Kevin1.06extern WORD __wNumberQueue; //declare a local var in OSDPRGM later => not necessayBYTE    __bProgramTitle;   WORD    __wProgramChapter; BYTE    _bPrgmDigitPos;  #define PROGRAM_NUM_CURSOR_TITLE        0x1#define PROGRAM_NUM_CURSOR_CHAPTER      0x2   //static void _TitleChapterNumErr(BYTE bTitleOrChapter);static void _TitleChapterNumErr(void); //CoCo1.21, modify the function prototype#define TITLE_NUM_ERROR             0x1#define CHAPTER_NUM_ERROR           0x2#define TITLE_CHAPTER_NUM_ERROR     (TITLE_NUM_ERROR | CHAPTER_NUM_ERROR)static BYTE _OSDPRGM_ProcessNumInput(BYTE bKey, WORD wParam);#define PRGM_NUMBERINPUT_CHECK      1#define PRGM_NUMBERINPUT_CLEAR      2#define PRGM_NUMBERINPUT_NUMBER     3#endif //#ifdef SUPPORT_PRGM_NUM_INPUT//  *********************************************************************************//  Function    :   OSDPRGM_Display//  Description :   Display UI when Enter/Exit Program UI//  Arguments   :   bMessage, MSG_SETPROGRAM/MSG_CLEARPROGRAM//  Return      :   None//  Side Effect :   None//  *********************************************************************************//void OSDPRGM_Display(bMessage, wParam, bSec) //--CoCo, modify the function declaraction to remove unused argumentvoid OSDPRGM_Display(bMessage){    //Kevin1.00, fix the video hang/audio broken when invoking Program GUI    HAL_PreFillBuffer(HAL_FILL_AV_BUFFER, NULL);	    if (bMessage == MSG_SETPROGRAM) //Enter Program UI    {        #ifdef MINI_OSD_REGION //CoCo2.30, borrow frame buffer to show OSD.        GDI_ClearRegion(0); // clera the mini OSD region        __bColorMode = COLOR_MODE_4_BIT;        __dwRegionHeight = GDI_REGION_HEIGHT; // 460        // Need to set to the correct DRAM address        __dwRegionTAddr = W99AV_ADDR_MPEG_FRAME_FOR_OS_T; //Use frame buffer. //0x35A00+0x26100(LOGO)        __dwRegionBAddr = W99AV_ADDR_MPEG_FRAME_FOR_OS_B; //Use frame buffer. //0x5BB00+0x9A80((0x6F000-0x5BB00)/2)        GDI_ClearRegion_By_RISC(0);        GDI_InitialRegion (0); // initialize region to set it to 8-bit mode#endif        		GDI_SetMixRatio(GDI_GENERAL_MIX_RATIO);               		GDI_SetCurrentRegion(0);		GDI_ActivateRegion();						//Initialization of Variables #ifdef SUPPORT_CLEARALL_IN_PROGRAM		_bMainStart = 0; #else		_bMainStart = 1; #endif            		_bTitleStart = 1;    		_wChapterStart = 1;  		#ifdef SUPPORT_CLEARALL_IN_PROGRAM            		_bMainHighlightPos = 2; //highlight 1. __-__  #else		_bMainHighlightPos = 1; //highlight 1. __-__ #endif		_bTitleHighlightPos = 1;		_wChapterHighlightPos = 1;				_bCurrentFrame = MAIN_FRAME;						//outter frame		GDI_FILL_RECT(PRGM_FRAME_X0, PRGM_FRAME_Y0, PRGM_FRAME_X1, PRGM_FRAME_Y1,			GDI_ENTRY_4B_COLOR_GENERAL_BG_BLUE			);       		                //Alan2.37, fix the drawing UI slowly when playing CDDA in Anti-Shock#ifndef SUPPORT_ANTISHOCK		//Kevin1.00, fix the video hang/audio broken when invoking Program GUI		HAL_PreFillBuffer(HAL_FILL_AV_BUFFER, NULL);#else                if (BOOK_CDDA != __wDiscType)                {                    HAL_PreFillBuffer(HAL_FILL_AV_BUFFER, NULL);                }#endif				GDI_SetTextColor(TEXT_BG_COLOR, GDI_ENTRY_4B_COLOR_GENERAL_BG_BLUE);		GDI_SetTextColor(TEXT_FG_COLOR, GDI_ENTRY_4B_COLOR_WHITE);		GDI_OUTPUT_TEXT(PRGM_FRAME_X0+25, PRGM_FRAME_Y0+20, aProgram[_bOSDLang]);		GDI_OUTPUT_TEXT(PRGM_FRAME_X0+25, PRGM_FRAME_Y1-40, aPrgmInstr[_bOSDLang]);						if (__wDiscType & BOOK_DVD)            		{			GDI_OUTPUT_TEXT(TITLE_FRAME_X0, TITLE_FRAME_Y0-55, aTitle[_bOSDLang]);			GDI_OUTPUT_TEXT(CHAPTER_FRAME_X0, CHAPTER_FRAME_Y0-55, aChapter[_bOSDLang]);		}		else if (!(__wDiscType & CDROM_M1)) //BOOK_VCD		{			GDI_OUTPUT_TEXT(TITLE_FRAME_X0, TITLE_FRAME_Y0-55, aTrack[_bOSDLang]);    		}                #ifdef SUPPORT_SIMPLE_FM_PROGRAM //Kevin1.10		else		{			GDI_SetTextColor(TEXT_SHADOW_COLOR_1, GDI_ENTRY_4B_COLOR_GENERAL_BG_BLUE); //aDir&aFile is 4-color icon			GDI_SetTextColor(TEXT_SHADOW_COLOR_2, GDI_ENTRY_4B_COLOR_WHITE);   			GDI_OUTPUT_TEXT(TITLE_FRAME_X0, TITLE_FRAME_Y0-55, aDir);			GDI_OUTPUT_TEXT(CHAPTER_FRAME_X0, CHAPTER_FRAME_Y0-55, aFile);                		}#endif		GDI_SetTextColor(TEXT_FG_COLOR, GDI_ENTRY_4B_COLOR_BLACK); //other texts always use BLACK color 				//main frame                         		_ShowMainList();		_SetClearHighlight(SET_HIGHLIGHT);            				//title frame		//uncomment when DVD/VCD is in the loader		//DVD_ParseInfo ( DVD_TOTAL_TITLES, &__dwTemp, NULL );    		//_bTotalTitle = (BYTE)__dwTemp;						if (__wDiscType & BOOK_DVD)  			_bTotalTitle=__bTitle_Ns;		//else if (__wDiscType & CDROM_M1) //PicCD/JPEG/MP3		//	return;	//later move to caller of OSDPRGM_Display()/OSDPRGM_ProcessKey()																													else if (__wDiscType & BOOK_CDDA)			_bTotalTitle=(BYTE)__wTrackEnd;						else if (!(__wDiscType & CDROM_M1)) //BOOK_VCD/BOOK_CVD/BOOK_SVCD  						_bTotalTitle=(BYTE)__wTrackEnd-1;#ifdef SUPPORT_SIMPLE_FM_PROGRAM //Kevin1.10		else //CDROM_M1			_bTotalTitle=__bFMTotalDirs;#endif						_ShowTitleList();		_bCurrentFrame = MAIN_FRAME; /////highlight remains in the Main Frame				//chapter frame: shown when a title is highlighted		#ifdef SUPPORT_PRGM_NUM_INPUT //Kevin1.06		_OSDPRGM_ProcessNumInput(PRGM_NUMBERINPUT_CLEAR, NULL); //clear global vairables for number input #endif    }    else if (bMessage == MSG_CLEARPROGRAM)    //Exit Program UI    {		//clear Search IR region		GDI_FILL_RECT(PRGM_FRAME_X0, PRGM_FRAME_Y0, PRGM_FRAME_X1, PRGM_FRAME_Y1,			GDI_ENTRY_4B_COLOR_TRANSPARENT			);      }    

⌨️ 快捷键说明

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