📄 bbktuner.c
字号:
/**************************************************************************************/
/*********************** BBK CONFIDENTIAL ************************/
/*********************** ************************/
/*********************** Description : Digital Audio Process ************************/
/*********************** ************************/
/*********************** Company: BBK AV ELECTRONICS CORP.,LTD ************************/
/*********************** ************************/
/*********************** Programmer : Terry Lee ******** ****************/
/**************************************************************************************/
#define BBKTUNER_PAR
#pragma NOAREGS
#include "general.h"
#include "..\..\procdef.h"
#include "..\..\typedef.h"
#include "..\..\vardef.h"
#ifdef BBK_RD2_NEW_TUNER
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
#define PROC_BRET(bRet) \
{ \
if( (RET_SUCCESS == bRet) || (RET_ABORT == bRet) ) \
{ \
return UOP_OK; \
} \
if( (RET_KEEP == bRet) || (RET_BUSY == bRet) ) \
{ \
return UOP_FAIL; \
} \
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static code S_TUNER_BRW_DATA _sTunerBrwDataBand[TUNER_BAND_NS] =
{
{OSD_MSG_TUNER_FM,OSD_MSG_TUNER_FM},
{OSD_MSG_TUNER_AM,OSD_MSG_TUNER_AM},
};
static code S_TUNER_BRW_DATA _sTunerBrwDataSignal[TUNER_SIGNAL_NS] =
{
{OSD_MSG_TUNER_STEREO,OSD_MSG_TUNER_VAL_STEREO},
{OSD_MSG_TUNER_MONO, OSD_MSG_TUNER_VAL_MONO},
};
static code S_TUNER_BRW_DATA _sTunerBrwDataAmstep[AM_STEP_NS] =
{
{OSD_MSG_TUNER_10KSTEP, OSD_MSG_TUNER_VAL_10KSTEP},
{OSD_MSG_TUNER_9KSTEP, OSD_MSG_TUNER_VAL_9KSTEP},
};
static code S_TUNER_BRW_ITEM _sTunerBrwItem[TUNER_BRW_ITEM_NS] =
{
{OSD_MSG_TUNER_CHANNEL,TUNER_BRW_ITEM_CH_START_Y},
{OSD_MSG_TUNER_BAND,TUNER_BRW_ITEM_BAND_START_Y},
{OSD_MSG_TUNER_SIGNAL,TUNER_BRW_ITEM_SIGNAL_START_Y},
{OSD_MSG_TUNER_AMSTEP,TUNER_BRW_ITEM_AMSTEP_START_Y},
{OSD_MSG_TUNER_ATUOSEARCH,TUNER_BRW_ITEM_AUTO_START_Y},
{OSD_MSG_NULL,TUNER_BRW_ITEM_LINE_START_Y},
{OSD_MSG_SAVECH,TUNER_BRW_ITEM_SAVE_START_Y},
};
#define _wItemMsg(bItem) _sTunerBrwItem[bItem].wItemMsg
#define _wItemStY(bItem) _sTunerBrwItem[bItem].wItemStY
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vTnrClearMenuArea(void) large
{
_wStartX = 0;
_wStartY = 0;
_wEndX = WB_TUNER_MENU_WIDTH;
_wEndY = WB_TUNER_MENU_HEIGHT;
vRectangle(WB_TUNER_MENU, 0, 0, TRUE, TUNER_MENU_BG);
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vTnrClearMsgArea(void) large
{
_wStartX = TUNER_BRW_MSG_START_X;
_wStartY = TUNER_BRW_MSG_START_Y;
_wEndX = TUNER_BRW_MSG_END_X;
_wEndY = TUNER_BRW_MSG_END_Y;
vRectangle(WB_TUNER_MENU, 0, 0, TRUE, TUNER_MENU_BG);
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vHnrPasteCorner(BYTE bWBIndex, BYTE bTopLeft, BYTE bTopRight, BYTE bBottomLeft, BYTE bBottomRight) large
{
WORD wStartXTmp = _wStartX;
WORD wStartYTmp = _wStartY;
WORD wEndXTmp = _wEndX;
WORD wEndYTmp = _wEndY;
vOsdPasteBmpXY(wStartXTmp, wStartYTmp, bWBIndex, bTopLeft);
vOsdPasteBmpXY((wEndXTmp - BRW_CORNER_WIDTH), wStartYTmp, bWBIndex, bTopRight);
vOsdPasteBmpXY(wStartXTmp, (wEndYTmp - BRW_CORNER_HEIGHT), bWBIndex, bBottomLeft);
vOsdPasteBmpXY((wEndXTmp - BRW_CORNER_WIDTH), (wEndYTmp - BRW_CORNER_HEIGHT), bWBIndex, bBottomRight);
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vTnrGetMenuMsgCol(BOOL fgHili, BYTE *bFillCol, BYTE *bBodyCol) large
{
if(fgHili)
{
*bFillCol = TUNER_MENU_RED44;
*bBodyCol = TUNER_MENU_WHITE44;
}
else
{
*bFillCol = TUNER_MENU_GRAY43;
*bBodyCol = TUNER_MENU_WHITE44;
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vTnrGetSlotSlideCol(BOOL fgHili, BYTE *bFillCol, BYTE *bBodyCol, BYTE *bSlideCol) large
{
if(fgHili)
{
*bBodyCol = TUNER_MENU_RED41;
*bSlideCol = TUNER_MENU_WHITE;
*bFillCol = TUNER_MENU_RED44;
}
else
{
*bBodyCol = TUNER_MENU_WHITE41;
*bSlideCol = TUNER_MENU_YELLOW;
*bFillCol = TUNER_MENU_GRAY43;
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vTnrGetFreqStr(WORD wFreqTmp, BYTE *pbFreqStr) large
{
if(fgGetRealFreq(&wFreqTmp) == FALSE)
{
wFreqTmp = 0;
}
if(TUNER_BAND_FM == _eTunerBand)
{
if(wFreqTmp > 9999)
{
pbFreqStr[0] = 5;
pbFreqStr[1] = wFreqTmp / 10000 + '0';
wFreqTmp = wFreqTmp % 10000;
pbFreqStr[2] = wFreqTmp / 1000 + '0';
wFreqTmp = wFreqTmp % 1000;
pbFreqStr[3] = wFreqTmp / 100 + '0';
wFreqTmp = wFreqTmp % 100;
pbFreqStr[4] = wFreqTmp / 10 + '0';
pbFreqStr[5] = wFreqTmp % 10 + '0';
}
else
{
pbFreqStr[0] = 4;
pbFreqStr[1] = wFreqTmp / 1000 + '0';
wFreqTmp = wFreqTmp % 1000;
pbFreqStr[2] = wFreqTmp / 100 + '0';
wFreqTmp = wFreqTmp % 100;
pbFreqStr[3] = wFreqTmp / 10 + '0';
pbFreqStr[4] = wFreqTmp % 10 + '0';
}
}
else if(TUNER_BAND_AM == _eTunerBand)
{
if(wFreqTmp > 999)
{
pbFreqStr[0] = 4;
pbFreqStr[1] = wFreqTmp / 1000 + '0';
wFreqTmp = wFreqTmp % 1000;
pbFreqStr[2] = wFreqTmp / 100 + '0';
wFreqTmp = wFreqTmp % 100;
pbFreqStr[3] = wFreqTmp / 10 + '0';
pbFreqStr[4] = wFreqTmp % 10 + '0';
}
else
{
pbFreqStr[0] = 3;
pbFreqStr[1] = wFreqTmp / 100 + '0';
wFreqTmp = wFreqTmp % 100;
pbFreqStr[2] = wFreqTmp / 10 + '0';
pbFreqStr[3] = wFreqTmp % 10 + '0';
}
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vTnrShowSaveFreqMsg(WORD wFreq, BYTE bStation) large
{
BYTE bStr[8];
WORD wMsgId;
vTnrClearMsgArea();
#ifdef BBK_RD2_RDS
_bTimeCnt=100;//_bRDSTime = 100;
#endif
vTnrGetFreqStr(wFreq, bStr);
if(TUNER_BAND_FM == _eTunerBand)
{
if(5 == bStr[0])
{
bStr[0] = 7;
if(bStation > 9)
{
bStr[6] = bStation / 10 + '0';
bStr[7] = bStation % 10 + '0';
}
else
{
bStr[6] = bStation + '0';
bStr[7] = ' ';
}
wMsgId = OSD_MSG_TUNER_SAVE_FMSTATION5;
}
else //4 == bStr[0]
{
bStr[0] = 6;
if(bStation > 9)
{
bStr[5] = bStation / 10 + '0';
bStr[6] = bStation % 10 + '0';
}
else
{
bStr[5] = bStation + '0';
bStr[6] = ' ';
}
wMsgId = OSD_MSG_TUNER_SAVE_FMSTATION4;
}
}
else if(TUNER_BAND_AM == _eTunerBand)
{
if(4 == bStr[0])
{
bStr[0] = 6;
if(bStation > 9)
{
bStr[5] = bStation / 10 + '0';
bStr[6] = bStation % 10 + '0';
}
else
{
bStr[5] = bStation + '0';
bStr[6] = ' ';
}
wMsgId = OSD_MSG_TUNER_SAVE_AMSTATION4;
}
else //3 == bStr[0]
{
bStr[0] = 5;
if(bStation > 9)
{
bStr[4] = bStation / 10 + '0';
bStr[5] = bStation % 10 + '0';
}
else
{
bStr[4] = bStation + '0';
bStr[5] = ' ';
}
wMsgId = OSD_MSG_TUNER_SAVE_AMSTATION3;
}
}
vSetMsgCol4(WB_TUNER_MENU, TUNER_MENU_BG, TUNER_MENU_BG, TUNER_MENU_BG, TUNER_MENU_YELLOW);
vOsdShowArgXY(TUNER_BRW_MSG_START_X, TUNER_BRW_MSG_START_Y, WB_TUNER_MENU, wMsgId, OSD_TIMEOUT_MINI, bStr);
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vTnrShowActiveFrequency(void) large
{
BYTE bFreqStr[7];
WORD wFreqTmp;
BYTE bFillCol;
BYTE bBodyCol;
if((TUNER_STATE_BROWSER == _eTunerState) && (TUNER_BRW_STATE_HEAD == _eTunerBrwState))
{
vTnrGetMenuMsgCol(TRUE, &bFillCol, &bBodyCol);
}
else
{
vTnrGetMenuMsgCol(FALSE, &bFillCol, &bBodyCol);
}
_wStartX = MENU_FREQ_MSG_START_X;
_wStartY = MENU_FREQ_MSG_START_Y;
vSetMsgCol4(WB_TUNER_MENU, bFillCol, bFillCol, bFillCol, bFillCol);
vOsdMsgPasteCenter(WB_TUNER_MENU, OSD_MSG_TUNER_FREQ_CLEAR, MENU_FREQ_MSG_SPACE_WIDTH);
vSetMsgCol4(WB_TUNER_MENU, bFillCol, bFillCol, bFillCol, bBodyCol);
vTnrGetFreqStr(_wActiveFreq, bFreqStr);
if(TUNER_BAND_AM == _eTunerBand)
{
vOsdPasteStrCenter(WB_TUNER_MENU, bFreqStr, MENU_FREQ_MSG_SPACE_WIDTH);
}
else
{
if(5 == bFreqStr[0])
{
vOsdShowArgCenter(WB_TUNER_MENU, OSD_MSG_TUNER_FM5, OSD_NO_DISAPPEAR, bFreqStr, MENU_FREQ_MSG_SPACE_WIDTH);
}
else
{
vOsdShowArgCenter(WB_TUNER_MENU, OSD_MSG_TUNER_FM4, OSD_NO_DISAPPEAR, bFreqStr, MENU_FREQ_MSG_SPACE_WIDTH);
}
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vTnrShowActiveFreqUnit(void) large
{
BYTE bFillCol;
BYTE bBodyCol;
if(TUNER_STATE_BROWSER == _eTunerState && TUNER_BRW_STATE_HEAD == _eTunerBrwState)
{
vTnrGetMenuMsgCol(TRUE, &bFillCol, &bBodyCol);
}
else
{
vTnrGetMenuMsgCol(FALSE, &bFillCol, &bBodyCol);
}
/*clear first!*/
vSetMsgCol4(WB_TUNER_MENU, bFillCol, bFillCol, bFillCol, bFillCol);
vOsdPasteMsgRightXY(MENU_NUIT_MSG_END_X, MENU_UNIT_MSG_START_Y, WB_TUNER_MENU, OSD_MSG_TUNER_MHZ);
vSetMsgCol4(WB_TUNER_MENU, bFillCol, bFillCol, bFillCol, bBodyCol);
if(TUNER_BAND_FM == _eTunerBand)
{
vOsdPasteMsgRightXY(MENU_NUIT_MSG_END_X, MENU_UNIT_MSG_START_Y, WB_TUNER_MENU, OSD_MSG_TUNER_MHZ);
}
else if(TUNER_BAND_AM == _eTunerBand)
{
vOsdPasteMsgRightXY(MENU_NUIT_MSG_END_X, MENU_UNIT_MSG_START_Y, WB_TUNER_MENU, OSD_MSG_TUNER_KHZ);
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vTnrDrawMenuMsgFrequency(BOOL fgHili) large
{
BYTE bFillCol;
BYTE bBodyCol;
vTnrGetMenuMsgCol(fgHili, &bFillCol, &bBodyCol);
vSetMsgCol4(WB_TUNER_MENU, bFillCol, bFillCol, bFillCol, bBodyCol);
vOsdPasteMsgXY(MENU_RADIO_MSG_START_X, MENU_RADIO_MSG_START_Y, WB_TUNER_MENU, OSD_MSG_TUNER_RADIO);
vTnrShowActiveFrequency();
vTnrShowActiveFreqUnit();
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static BOOL fgTnrGetSlidePos(WORD wFreq, WORD *prPostion) large
{
DWRD dwTemp;
if(TUNER_BAND_FM == _eTunerBand)
{
if((wFreq > FM_CH_MAX) || (wFreq < FM_CH_MIN) || (FM_CH_MAX <= FM_CH_MIN))
{
return(FALSE);
}
else
{
dwTemp = ((DWRD)(wFreq - FM_CH_MIN)) * (MENU_SLOT_WIDTH - MENU_SLIDE_WIDTH + 1);
*prPostion = (WORD)(dwTemp / (FM_CH_MAX - FM_CH_MIN) + MENU_SLOT_START_X);
}
}
else
{
if(wFreq < AM_CH_MIN)
{
return(FALSE);
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -