read.c
来自「Sunplus 8202S source code.」· C语言 代码 · 共 884 行 · 第 1/2 页
C
884 行
/*
*************************************************************************
* File Name: read.h
* Created: 2003/8/1 12:49PM Maoyong
* Description: Repeat reading implement C file
* Maintain: Maoyong 2004.06.09 rewrite
************************************************************************
*/
#include "user_init.h"
#include "global.h"
#ifdef SUPPORT_REP_READ
#include "read.h"
#include "osd.h"
#include "func.h"
#include "osd_arc.h"
#include "stdlib.h"
#include "cfont.h"
#include "vpp.h"
#include "ircmd.h"
#include "emuio.h"
#include "sio.h"
#include "dsp3_def.h"
#include "dsp3_if.h"
/*
******************************************************************************
* EXTERN FUNC TIONPROTOTYPES
******************************************************************************
*/
extern void osd_draw_rect(UINT32 xStart, UINT32 yStart, UINT32 xLen, UINT32 yLen, BYTE bkColor);
extern void osd_draw_setup_button(BYTE xStart, BYTE yStart, BYTE xLen, BYTE color, BYTE bDown);
extern void osd_DrawString(BYTE xStart, BYTE yStart, const BYTE *str, BYTE fontColor, BYTE bkColor);
extern void osd_DrawRegionString(BYTE xStart, BYTE yStart, BYTE *str, BYTE fontColor, BYTE bkColor, BYTE r);
extern void osd_DrawRegionLine(UINT32 xStart, UINT32 yStart, UINT32 xEnd, UINT32 yEnd, BYTE color, BYTE lineWidth, BYTE r);
extern void osd_draw_button_outline(int x1, int y1, int x2, int y2, int bDown, unsigned mask, int r);
extern void osd_draw_region_rect(UINT32 xStart, UINT32 yStart, UINT32 xLen, UINT32 yLen, BYTE bkColor, BYTE r);
extern void osd_print_read_eq(UINT8 r, BYTE * p);
extern void osd_draw_read_button(BYTE xStart, BYTE yStart, BYTE xLen, BYTE color, BYTE bDown);
extern void osd_init_rep_reading(void);
extern int IsOSDChinese();
extern int is_menu(void);
#ifdef SUPPORT_SOUND_EFFECT
//2004AUDDRV extern int AudioIOControl(UINT16 wCode, UINT32 cType, UINT32 wParam);
#else
//2004AUDDRV extern int AudioIOControl(UINT16 wCode, BYTE cType, UINT16 wParam);
#endif
extern void setup_eq_display(UINT8 val);
extern void add_input_num(int *v);
extern UINT32 get_dsp3_pcm_value(unsigned x_off);
extern void set_dsp3_pcm_value(unsigned x_off, unsigned value);
#ifndef DVDRELEASE
#define READ_DBG
#endif
/*========================Begining of Implement Code ======================*/
UINT8 uReadSel[MAX_READ_ITEM] = {REC_Q_MIDDLE, FUDO_REPEAT, 0, 0}; //for selection initialization
const UINT8 uReadItem[MAX_READ_ITEM][MAX_ITEM_SEL]=
{
{SET_FUNC, STR_OS_REC_MODE, STR_OS_HIGH, STR_OS_MIDDLE, STR_OS_LOW, 0,},
{SET_FUNC, STR_OS_READ_MODE, STR_OS_GENDU, STR_OS_REPEAT, STR_OS_COMPARE, 0,},
{SET_NM, STR_OS_REP_TIMES, STR_OS_TIME_PROMP, 0, 0, 0},
{SET_CHART, STR_OS_READ_EQ, 0, 0, 0, 0},
};
const char *const read_osd_str[MAX_READ_OSD_LANGS][MAX_OSD_STR] =
{
//English
{
"REC MODE", //0
"HIGH", //1
"MIDDLE", //2
"LOW", //3
"READ MODE", //4
"FOLLOW", //5
"COMPARE", //6
"REPEAT", //7
"REP TIMES", //8
"EQ", //9
"__", //10
},
//Chinese
{
OS_REC_MODE, //0
OS_REC_HIGH, //1
OS_REC_MIDDLE, //2
OS_REC_LOW, //3
OS_READ_MODE, //4
OS_READ_GENDU, //5
OS_READ_COMPARE, //6
OS_READ_REPEAT, //7
OS_REP_TIMES, //8
OS_READ_EQ, //9
"__", //10
},
};
/*
******************************************************************************
* Function: RepReadSendCmd()
* Description: Send DSP command for record and rep reading control
* Syntax: void RepReadSendCmd(UINT8 uCmdType);
* Parameters: uCmdType-----type of rep read DSP command
* Returns: none
******************************************************************************
*/
int RepReadSendCmd(UINT8 uCmdType)
{
int iRes;
switch(uCmdType){
case FUDO_CMD_STOP:
//ClearReadMode();
printf("=========send fudu stop command========\n");
break;
case FUDO_CMD_REC:
//set_dsp3_pcm_value(22, 0);
SetReadRecording();
printf("=========send fudu record command========\n");
break;
case FUDO_CMD_PLAY:
SetReadPlayback();
printf("=========send fudu play command========\n");
break;
case FUDO_CMD_PAUSE:
printf("=========send fudu pause command========\n");
break;
case FUDO_CMD_Q_H:
printf("=========send fudu high quality setting command========\n");
break;
case FUDO_CMD_Q_M: //middle record quality
printf("=========send fudu middle quality setting command========\n");
break;
case FUDO_CMD_Q_L:
printf("=========send fudu low quality setting command========\n");
break;
default:
break;
}
iRes = DSP_AudioIOControl(RECORDMIC,uCmdType, 0);//2004AUDDRV AudioIOControl(RECORDMIC,uCmdType, 0);
return iRes;
}
/*
******************************************************************************
* Function: SetRecordQuality()
* Description: Setup rep read record quality
* Syntax: void SetRecordQuality(UINT8 uType);
* Parameters: uCmdType-----type of rep read DSP command
* Returns: none
******************************************************************************
*/
void SetRecordQuality(UINT8 uIndex)
{
switch(uIndex){
case 0:
RepReadSendCmd(FUDO_CMD_Q_H);
break;
case 1:
RepReadSendCmd(FUDO_CMD_Q_M);
break;
case 2:
RepReadSendCmd(FUDO_CMD_Q_L);
break;
default:
break;
}
}
/*
******************************************************************************
* Function: InitRead()
* Description: initial read related vars
* Syntax: void InitRead(void);
* Returns: none
******************************************************************************
*/
void InitRead(void)
{
uRecordMode = uReadSel[REC_MODE_ITEM];
uFudoMode = uReadSel[READ_MODE_ITEM];
uPlaybackTimes = DEF_REP_TIMES;
uReadMenuLevel = 0;
uReadShowEq = 0;
setup_eq_display(0x0f);
ClearReadMode();
}
/*
******************************************************************************
* Function: CancelRead()
* Description: cancel fudo state
* Syntax: void CancelRead(void);
* Returns: none
******************************************************************************
*/
void CancelRead(void)
{
full_scrn = 0;
osd_init();
setup_eq_display(0x0f);
ClearReadMode();
AUDIF_Demute();//2004AUDDRV AudioDemute();
}
/*
******************************************************************************
* Function: ClearReadMode()
* Description: clear read related vars and state and do some action
* Syntax: void ClearReadMode(void);
* Returns: none
******************************************************************************
*/
void ClearReadMode(void)
{
uReadStatus = READ_ST_NONE;
RepReadSendCmd(FUDO_CMD_STOP);
ReadShowPromptInfo(0);
uReadEqType = ORI_EQ;
uRealPBTimes = uPlaybackTimes;
uPlaybackFlag = 0;
}
/*
******************************************************************************
* Function: GetReadBtnMode()
* Description: Draw read panel item button
* Syntax: UINT8 GetReadBtnMode(UINT8 uIndex, UINT8 uLevel);
* Parameters: uIndex ---------- button's index
uLevel ---------- 0: Main Menu, 1: Sub Menu Level
* Returns: current button's mode of sub menu button
******************************************************************************
*/
UINT8 GetReadBtnMode(UINT8 uIndex)
{
if(uIndex == uReadSel[index_y] ){
if (uIndex == index_y2 )
return SEL_BTN_HL;
else
return SEL_BTN_NORM;
}else{
if (uIndex == index_y2 )
return UNSEL_BTN_HL;
else
return UNSEL_BTN_NORM;
}
}
/*
******************************************************************************
* Function: DrawReadItem()
* Description: Draw read panel item button
* Syntax: void DrawReadItem(UINT8 uID, UINT8 uUpDown, UINT8 uDrawY, UINT8 uLevel);
* Parameters: draw_y ---------- index in button vertical array
uLevel ---------- 0: Main Menu, 1: Sub Menu Level
uMode ---------- button's sel/unsel/hl...
* Returns: none
******************************************************************************
*/
void DrawReadItem(UINT8 uDrawY, UINT8 uLevel, UINT8 uMode)
{
const char *str;
UINT8 uCurrY ;
UINT8 uBtnX;
UINT8 uBtnStrX;
UINT8 uBtnLen;
UINT8 uUpDown;
UINT8 uBgColor;
UINT8 uFontColor;
UINT8 uID;
UINT8 uLangID = 0;
if(IsOSDChinese())
uLangID = 1;
if(uLevel){ //sub level
uBtnX = READ_SUB_MENU_X;
uBtnStrX = READ_SUB_MENU_X + 1;
uCurrY = index_y2;
uBtnLen = READ_BTN_WIDTH;
uID = uReadItem[index_y][uDrawY + 2];
}else{ //main level
uCurrY = index_y;
uBtnX = 1;
uBtnStrX = 2;
uBtnLen = READ_BTN_WIDTH;
uID = uReadItem[uDrawY][1];
}
str=read_osd_str[uLangID][uID];
switch(uMode)
{
default:
case UNSEL_BTN_NORM:
uFontColor = FONT_CLR;
uBgColor = BG_CLR;
uUpDown = BTN_UP;
break;
case UNSEL_BTN_HL:
uFontColor = ANTI_FONT_CLR;
uBgColor = ANTI_BG_CLR;
uUpDown = BTN_UP;
break;
case SEL_BTN_NORM:
uFontColor = SEL_FONT_CLR;
uBgColor = BG_CLR;
uUpDown = BTN_DOWN;
break;
case SEL_BTN_HL:
uFontColor = ANTI_FONT_CLR;
uBgColor = ANTI_BG_CLR;
uUpDown = BTN_DOWN;
break;
}
if(uLevel)
uDrawY += index_y_start;
osd_draw_read_button(uBtnX, uDrawY, uBtnLen, uBgColor, uUpDown);
osd_DrawRegionString(uBtnStrX, uDrawY*8 + 2, (BYTE *)str, uFontColor, uBgColor, READ_REGION);
}
/*
******************************************************************************
* Function: DrawRead2ndMenu()
* Description: Draw read panel item button
* Syntax: void DrawRead2ndMenu(UINT8 uTypee);
* Parameters: type ---------- 0: for info display 1: for sub menu display
* Returns: none
******************************************************************************
*/
void DrawRead2ndMenu(UINT8 uType)
{
UINT8 uID, i;
const char *str;
if(uType == 0){ //just show current setup information of every items
//show current record mode
uID = uReadItem[REC_MODE_ITEM][uRecordMode + 2];
str = read_osd_str[0][uID];
osd_DrawRegionString(READ_SUB_MENU_X + 1, REC_MODE_ITEM * 8 + 2, (BYTE *)str,
SEL_FONT_CLR, BG_CLR, READ_REGION);
//show current record mode
uID = uReadItem[READ_MODE_ITEM][uFudoMode + 2];
str = read_osd_str[0][uID];
osd_DrawRegionString(READ_SUB_MENU_X + 1, READ_MODE_ITEM * 8 + 2, (BYTE *)str,
SEL_FONT_CLR, BG_CLR, READ_REGION);
//show current playback times
psprintf(linebuf, "%02d", uPlaybackTimes);
osd_DrawRegionString(READ_SUB_MENU_X + 1, REPTIMES_ITEM * 8 + 2, linebuf,
SEL_FONT_CLR, BG_CLR, READ_REGION);
}else{ //draw sub menu for selection
osd_draw_region_rect( (READ_SUB_MENU_X - 1) * 16 , 8, (READ_BTN_WIDTH + 1)*16 + 4, 32*4,
BG_CLR, READ_REGION); //clear the old sub menu
osd_DrawRegionString(READ_SUB_MENU_X - 1, index_y * 8 + 2, Ch_arrorR,
FONT_CLR, BG_CLR, READ_REGION);//draw arrow
uReadSelMaxIndex = 0;
for(i = 2; i < MAX_ITEM_SEL; i++)
{
//show sub item except EQ item
if(uReadItem[index_y][0] != SET_CHART){
uID = uReadItem[index_y][i];
if(uID == 0)
break;
if( (i - 2) == uReadSel[index_y] ){
if(uReadMenuLevel)
DrawReadItem(i - 2, SUB_LEVEL, SEL_BTN_HL );
else
DrawReadItem(i - 2, SUB_LEVEL, SEL_BTN_NORM );
}
else
DrawReadItem(i - 2, SUB_LEVEL, UNSEL_BTN_NORM );
}
}
uReadSelMaxIndex = i - 2;
}
}
/*
******************************************************************************
* Function: ReadShowPromptInfo()
* Description: check if need to do fudo cmd and flow contrl
* Syntax: void ReadShowPromptInfo(UINT8 uShowHide);
* Parameters: uShowHide ---------- 0: Erase info, 1:Display info
* Returns: none
******************************************************************************
*/
void ReadShowPromptInfo(UINT8 uShowHide)
{
UINT8 uLangID = 0;
BYTE ccTimes[10];
if(!uReadShowEq)
return;
const char *ccInfo[MAX_READ_OSD_LANGS][3] =
{
{ "RECORD...", "READ...", "PLAYING",},
{ OS_PLEASE_REC, OS_PLEASE_READ, OS_PLAY_REC, },
};
if(IsOSDChinese())
uLangID = 1;
//clear original information
osd_draw_region_rect(INFO_STR_X * 16 - 2, INFO_STR_Y*4-2, (READ_BTN_WIDTH - 1) *16, 30, BG_CLR, READ_REGION);
if(uShowHide){
if( IsReadRecording() )
strcpy(linebuf, ccInfo[uLangID][0]);
else if( IsReadPlayback() ){
psprintf(ccTimes, " %d", uPlaybackTimes - uRealPBTimes + 1);
strcpy(linebuf, ccInfo[uLangID][2]);
strcat1(linebuf, ccTimes);
}else if( IsReadGendu() && uPlaybackFlag )
strcpy(linebuf, ccInfo[uLangID][1]);
else
linebuf[0] = '\0';
osd_DrawRegionString(INFO_STR_X, INFO_STR_Y, linebuf, INFO_FONT_CLR, BG_CLR, READ_REGION);
}
}
/*
******************************************************************************
* Function: ShowReadPage()
* Description: Show Read operaton osd panel
* Syntax: void ShowReadPage(void);
* Returns: none
******************************************************************************
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?