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

📄 bbktuner.c

📁 关于收音功能代码,并且显示在OSD和VFD上
💻 C
📖 第 1 页 / 共 5 页
字号:
			if(AM_STEP_9K == _eAmStep)
			{
				if((wFreq > AM_CH_9K_MAX) || (AM_CH_9K_MAX <= AM_CH_MIN))
				{
					return(FALSE);
				}
				else
				{
					dwTemp = ((DWRD)(wFreq - AM_CH_MIN)) * (MENU_SLOT_WIDTH - MENU_SLIDE_WIDTH + 1);
					*prPostion = (WORD)(dwTemp / (AM_CH_9K_MAX - AM_CH_MIN) + MENU_SLOT_START_X);
				}
			}
			else
			{
				if((wFreq > AM_CH_10K_MAX) || (AM_CH_10K_MAX <= AM_CH_MIN))
				{
					return(FALSE);
				}
				else
				{
					dwTemp = ((DWRD)(wFreq - AM_CH_MIN)) * (MENU_SLOT_WIDTH - MENU_SLIDE_WIDTH + 1);
					*prPostion = (WORD)(dwTemp / (AM_CH_10K_MAX - AM_CH_MIN) + MENU_SLOT_START_X);
				}
			}
		}
	}

	return(TRUE);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static void vTnrShowMenuPoint(BYTE bStationNo, BOOL fgHili, BOOL fgShow) large
{
	BYTE bBodyCol;
	BYTE bSlideCol;
	BYTE bFillCol;
	WORD wPosition;
	BYTE i;

	for(i = 0; i < _bFmAmStationMax; i++)
	{
		if((i != (bStationNo - 1)) && (_wStationFreq[bStationNo - 1] == _wStationFreq[i]))
		{
			return;
		}
	}

	vTnrGetSlotSlideCol(fgHili, &bFillCol, &bBodyCol, &bSlideCol);

	if(fgShow)
	{
		if(fgTnrGetSlidePos(_wStationFreq[bStationNo - 1], &wPosition) == TRUE)
		{
			_wStartX = wPosition;
			_wStartY = MENU_SLOT_START_Y;  
			_wEndX = _wStartX + MENU_POINT_WIDTH - 1;  
			_wEndY = MENU_SLOT_END_Y;  
			vRectangle(WB_TUNER_MENU, 0, 0, TRUE, bSlideCol);
		}
	}
	else
	{
		if(fgTnrGetSlidePos(_wStationFreq[bStationNo - 1], &wPosition) == TRUE)
		{
			_wStartX = wPosition;
			_wStartY = MENU_SLOT_START_Y;  
			_wEndX = _wStartX + MENU_POINT_WIDTH - 1;  
			_wEndY = MENU_SLOT_END_Y;  
			vRectangle(WB_TUNER_MENU, 0, 0, TRUE, bBodyCol);
		}
	}
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static void vTnrShowMenuSlide(BOOL fgShow) large
{
	BYTE bBodyCol;
	BYTE bSlideCol;
	BYTE bFillCol;
	WORD wPosition;
	BYTE i;
	WORD wFreqOffL;
	WORD wFreqOffR;

	if(TUNER_STATE_BROWSER == _eTunerState && TUNER_BRW_STATE_HEAD == _eTunerBrwState)
	{
		vTnrGetSlotSlideCol(TRUE, &bFillCol, &bBodyCol, &bSlideCol);
	}
	else
	{
		vTnrGetSlotSlideCol(FALSE, &bFillCol, &bBodyCol, &bSlideCol);
	}

	if(fgShow)
	{
		if(fgTnrGetSlidePos(_wActiveFreq, &wPosition) == TRUE)
		{
			vSetMsgCol4(WB_TUNER_MENU, bFillCol, bFillCol, bFillCol, bSlideCol);
			vOsdPasteMsgXY(wPosition, MENU_SLIDE_START_Y, WB_TUNER_MENU, OSD_MSG_TUNER_SLIDE);
		}	
	}
	else
	{
		if(fgTnrGetSlidePos(_wActiveFreq, &wPosition) == TRUE)
		{
			vSetMsgCol4(WB_TUNER_MENU, bFillCol, bFillCol, bFillCol, bFillCol);
			vOsdPasteMsgXY(wPosition, MENU_SLIDE_START_Y, WB_TUNER_MENU, OSD_MSG_TUNER_SLIDE);

			_wStartX = wPosition;  
			_wStartY = MENU_SLOT_START_Y;  
			_wEndX = wPosition + MENU_SLIDE_WIDTH;  
			_wEndY = MENU_SLOT_END_Y;  
			vRectangle(WB_TUNER_MENU, 0, 0, TRUE, bBodyCol);

			if(_wActiveFreq >= 8)
			{
				wFreqOffL = _wActiveFreq - 8;
			}
			else
			{
				wFreqOffL = 0;
			}

			wFreqOffR = _wActiveFreq + 8;
		}	
			
		for(i=0; i<_bFmAmStationMax; i++)
		{
			if(_wStationFreq[i] >= wFreqOffL && _wStationFreq[i] <= wFreqOffR)
			{
				if(fgTnrGetSlidePos(_wStationFreq[i], &wPosition) == TRUE)
				{
					_wStartX = wPosition;
					_wStartY = MENU_SLOT_START_Y;  
					_wEndX = _wStartX + MENU_POINT_WIDTH - 1;  
					_wEndY = MENU_SLOT_END_Y;  
					vRectangle(WB_TUNER_MENU, 0, 0, TRUE, bSlideCol);
				}
			}
		}
	}
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static void vTnrDrawMenuSlotSlide(BOOL fgInit, BOOL fgHili) large
{
	BYTE bBodyCol;
	BYTE bSlideCol;
	BYTE bFillCol;
	WORD wPosition;
	BYTE i;

	vTnrGetSlotSlideCol(fgHili, &bFillCol, &bBodyCol, &bSlideCol);

	/*Clear slide area first!*/
	_wStartX = MENU_SLOT_START_X;
	_wEndX = MENU_SLOT_END_X + 4;
	_wStartY = MENU_SLIDE_START_Y;
	_wEndY = MENU_SLIDE_END_Y;
	vChgColRep(WB_TUNER_MENU, bSlideCol, bFillCol);

	/*show slot!*/
	_wStartX = MENU_SLOT_START_X;  
	_wStartY = MENU_SLOT_START_Y;  
	_wEndX = MENU_SLOT_END_X;  
	_wEndY = MENU_SLOT_END_Y;  
	vRectangle(WB_TUNER_MENU, 0, 0, TRUE, bBodyCol);

	if(fgInit)
	{
		return;
	}

	/*show frequency's points*/
	for(i=0; i<_bFmAmStationMax; i++)
	{
		if(fgTnrGetSlidePos(_wStationFreq[i], &wPosition) == TRUE)
		{
			_wStartX = wPosition;
			_wStartY = MENU_SLOT_START_Y;  
			_wEndX = _wStartX + MENU_POINT_WIDTH - 1;  
			_wEndY = MENU_SLOT_END_Y;  
			vRectangle(WB_TUNER_MENU, 0, 0, TRUE, bSlideCol);
		}
	}

	/*show slide*/
	if(fgTnrGetSlidePos(_wActiveFreq, &wPosition) == TRUE)
	{
		vSetMsgCol4(WB_TUNER_MENU, bFillCol, bFillCol, bFillCol, bSlideCol);
		vOsdPasteMsgXY(wPosition, MENU_SLIDE_START_Y, WB_TUNER_MENU, OSD_MSG_TUNER_SLIDE);
	}
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static BOOL fgTnrGetNextFreq(BOOL fgUp) large
{
	BOOL fgRet = FALSE;
	WORD wFreq;

	if(fgUp)
	{
		if(TUNER_BAND_FM == _eTunerBand)
		{
			if(_wActiveFreq < FM_CH_MAX)
			{
				_wActiveFreq ++;
				fgRet = TRUE;
			}
		}
		else if(TUNER_BAND_AM == _eTunerBand)
		{
			if(AM_STEP_9K == _eAmStep)
			{
				if(_wActiveFreq < AM_CH_9K_MAX)
				{
					_wActiveFreq ++;
					fgRet = TRUE;
				}
			}
			else
			{
				if(_wActiveFreq < AM_CH_10K_MAX)
				{
					_wActiveFreq ++;
					fgRet = TRUE;
				}
			}
		} 
	}
	else
	{
		if(TUNER_BAND_FM == _eTunerBand)
		{
			if(_wActiveFreq > FM_CH_MIN)
			{
				_wActiveFreq --;
				fgRet = TRUE;
			}
		}
		else if(TUNER_BAND_AM == _eTunerBand)
		{
			if(_wActiveFreq > AM_CH_MIN)
			{
				_wActiveFreq --;
				fgRet = TRUE;
			}
		} 
	}

	if(fgRet)
	{
		wFreq = _wActiveFreq;
		if(fgGetRealFreq(&wFreq))
		{
			vVfdShowFreq(wFreq, _eTunerBand);   
		}
	}

	return(fgRet);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static void vTnrDrawMainMenuChNum(void) large
{
	BYTE i;
	BYTE bChStr[4];
	BYTE bChTmp;


	if(_bStationNo > _bFmAmStationMax)
	{
		_bStationNo = _bFmAmStationMax;
	}

	bChTmp = _bStationNo;
	bChStr[0] = 1;
	bChStr[1] = (bChTmp / 10) + '0';
	bChStr[2] = 1;
	bChStr[3] = (bChTmp % 10) + '0';

	for(i=0; i<CHANNEL_INPUT_NS; i++)
	{
		if(i == _eChInput)
		{
			vSetMsgCol4(WB_TUNER_MENU, TUNER_MENU_RED44, TUNER_MENU_RED44, TUNER_MENU_RED44, TUNER_MENU_WHITE44);
		}
		else
		{
			vSetMsgCol4(WB_TUNER_MENU, TUNER_MENU_WHITE41, TUNER_MENU_WHITE41, TUNER_MENU_WHITE41, TUNER_MENU_WHITE44);
		}

		switch(i)
		{
			case CHANNEL_INPUT_1:
				vOsdShowStrXY(MENU_CH_DIG1_START_X, MENU_CH_DIG1_START_Y, WB_TUNER_MENU, bChStr + 0);
			break;

			case CHANNEL_INPUT_2:
				vOsdShowStrXY(MENU_CH_DIG2_START_X, MENU_CH_DIG2_START_Y, WB_TUNER_MENU, bChStr + 2);
			break;

			default:
			break;
		}
	}
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static void vTnrDrawMainMenuChannel(void) large
{
	vSetMsgCol4(WB_TUNER_MENU, TUNER_MENU_GRAY43, TUNER_MENU_GRAY43, TUNER_MENU_GRAY43, TUNER_MENU_WHITE44);
	vOsdPasteMsgXY(MENU_CH_MSG_START_X, MENU_CH_MSG_START_Y, WB_TUNER_MENU, OSD_MSG_TUNER_CHANNEL);

	vTnrDrawMainMenuChNum();

	/*Paste up and down arrow!*/
	vOsdPasteBmpXY(MENU_CH_UPBMP_START_X, MENU_CH_UPBMP_START_Y, WB_TUNER_MENU, BMP_TUNER_UP); 
	vOsdPasteBmpXY(MENU_CH_DOWNBMP_START_X, MENU_CH_DOWNBMP_START_Y, WB_TUNER_MENU, BMP_TUNER_DOWN); 
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static void vTnrMainMenuHiliArrow(BOOL fgUp, BOOL fgHili) large
{
	if(fgUp)
	{
		vSetStartEndXY(MENU_CH_UPBMP_START_X, MENU_CH_UPBMP_START_Y, MENU_CH_UPBMP_END_X , MENU_CH_UPBMP_END_Y);
	}
	else
	{
		vSetStartEndXY(MENU_CH_DOWNBMP_START_X, MENU_CH_DOWNBMP_START_Y, MENU_CH_DOWNBMP_END_X, MENU_CH_DOWNBMP_END_Y);
	}

	if(fgHili)
	{
		vChgColRep(WB_TUNER_MENU, TUNER_MENU_WHITE44, TUNER_MENU_RED44);
	}
	else
	{
		vChgColRep(WB_TUNER_MENU, TUNER_MENU_RED44, TUNER_MENU_WHITE44);
	}
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static void vTnrDrawMainMenuRect(void) large
{
	vSetStartEndXY(TUNER_MAIN_MENU_START_X, TUNER_MAIN_MENU_START_Y, TUNER_MAIN_MENU_END_X - 1, TUNER_MAIN_MENU_END_Y - 1);
	vRectangle(WB_TUNER_MENU, 0, 0, TRUE, TUNER_MENU_GRAY43);

	vSetStartEndXY(TUNER_MAIN_MENU_START_X, TUNER_MAIN_MENU_START_Y, TUNER_MAIN_MENU_END_X, TUNER_MAIN_MENU_END_Y);
	vHnrPasteCorner(WB_TUNER_MENU, BMP_CORNER_TL_B75_TRA, BMP_CORNER_TR_B75_TRA, BMP_CORNER_BL_B75_TRA, BMP_CORNER_BR_B75_TRA);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTnrDrawMainMenu(BOOL fgInit) large
{
	_eChInput = CHANNEL_INPUT_1;

	vTnrDrawMainMenuRect();
	vTnrDrawMenuMsgFrequency(FALSE);
	vTnrDrawMenuSlotSlide(fgInit, FALSE);
	vTnrDrawMainMenuChannel();
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static void vTnrMenuEnterStation(void) large
{
	//vTnrMainMenuHiliArrow(TRUE, FALSE);
	//vTnrMainMenuHiliArrow(FALSE, FALSE);

	if(_bStationNo > _bFmAmStationMax || _bStationNo < 1)
	{
		_bStationNo = 1;
	}

	vTnrShowMenuSlide(FALSE);
	_wActiveFreq = _wStationFreq[_bStationNo - 1];
	vTnrShowMenuSlide(TRUE);
			
	vTunerSaveChannel();
	vStartIFCounter(_wActiveFreq, FALSE);
	vTnrShowActiveFrequency();
}


/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static BOOL fgTnrMenuCancelKey(void) large
{
	BYTE bChTmp;

	vTnrMainMenuHiliArrow(TRUE, FALSE);
	vTnrMainMenuHiliArrow(FALSE, FALSE);

	_bStationNo = bTunerReadChannel();

	_eChInput = CHANNEL_INPUT_1;
	vTnrDrawMainMenuChNum();

	return(UOP_OK);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
static BOOL fgTnrMenuNumKey(void) large
{
	BYTE bTmp;

⌨️ 快捷键说明

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