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

📄 bbktuner.c

📁 关于收音功能代码,并且显示在OSD和VFD上
💻 C
📖 第 1 页 / 共 5 页
字号:
/**************************************************************************************/
/***********************                    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 + -