wndw_rc_fmt_ls.c

来自「TECHWELL 之tw2835 四画面合一之驱动代码,CCIR656输出,KE」· C语言 代码 · 共 281 行

C
281
字号
#include	"hdr.h"

//==================================================================================
U8 idata	wndw_rc_fm_ls_md = LOSS_MD_BLUE;


//==================================================================================
//						Display wndwdow function description
//==================================================================================
void	SetWndwRcFmLsOSDMd(void)
{
	U8 _t1_, _t2_;

	WriteOSDStr(PTH_Y,MASTER,WNDW_RC_FM_LS_RDO_MD_X+2,WNDW_RC_FM_LS_RDO_MD_Y+LOSS_MD_BYPS,0x00,str_wndw_no_vid_byps);
	WriteOSDStr(PTH_Y,MASTER,WNDW_RC_FM_LS_RDO_MD_X+2,WNDW_RC_FM_LS_RDO_MD_Y+LOSS_MD_HOLD,0x00,str_wndw_no_vid_hold);
	WriteOSDStr(PTH_Y,MASTER,WNDW_RC_FM_LS_RDO_MD_X+2,WNDW_RC_FM_LS_RDO_MD_Y+LOSS_MD_BLUE,0x00,str_wndw_no_vid_blue_back);
	WriteOSDStr(PTH_Y,MASTER,WNDW_RC_FM_LS_RDO_MD_X+2,WNDW_RC_FM_LS_RDO_MD_Y+LOSS_MD_SKIP,0x00,str_wndw_no_vid_skip);

	for(_t1_=0;_t1_<4;_t1_++){
		if(_t1_ == wndw_rc_fm_ls_md)	_t2_ = OSD_RDO_CHK;
		else	_t2_ = OSD_RDO_BLK;
		WriteOSDFnt(PTH_Y,MASTER,WNDW_RC_FM_LS_RDO_MD_X,WNDW_RC_FM_LS_RDO_MD_Y+_t1_,0x00,_t2_);
	}
}
//==================================================================================
void	SetWndwRcFmLsOSDSk(void)
{
	U8 _t1_, _t2_, _t3_;

	if(wndw_rc_fm_ls_md == LOSS_MD_SKIP)	_t1_ = 0x00;
	else	_t1_ = OSD_MIX;

	WriteOSDStr(PTH_Y,MASTER,WNDW_RC_FM_LS_RDO_SK_X+2,WNDW_RC_FM_LS_RDO_SK_Y+LOSS_SKIP_AUTO,_t1_,str_wndw_no_vid_auto);
	WriteOSDStr(PTH_Y,MASTER,WNDW_RC_FM_LS_RDO_SK_X+2,WNDW_RC_FM_LS_RDO_SK_Y+LOSS_SKIP_MANL,_t1_,str_wndw_no_vid_manl);

	for(_t3_=0;_t3_<2;_t3_++){
		if(_t3_ == b_rc_fm_ls_sk)	_t2_ = OSD_RDO_CHK;
		else	_t2_ = OSD_RDO_BLK;
		WriteOSDFnt(PTH_Y,MASTER,WNDW_RC_FM_LS_RDO_SK_X,WNDW_RC_FM_LS_RDO_SK_Y+_t3_,_t1_,_t2_);
	}
}
//==================================================================================
void	SetWndwRcFmLsOSDSkMn(U16 _data)
{
	U8 _rdat_l_, _rdat_h_;
	U8 _t1_, _t2_, _t3_, _t4_;

	if((wndw_rc_fm_ls_md == LOSS_MD_SKIP)&&(b_rc_fm_ls_sk == LOSS_SKIP_MANL))	_t1_ = 0x00;
	else	_t1_ = OSD_MIX;

	SetOSDGrp(PTH_Y,WNDW_RC_FM_LS_SK_CH_X-1,WNDW_RC_FM_LS_SK_CH07_Y,17,4,_t1_,str_wndw_grp_skip_ch);

	_rdat_l_ = (U8)(_data&0x00ff);//ReadAsicByte(cmn_lst_slvr_y,DVC_PG1,0x5d);
	_rdat_h_ = (U8)((_data&0xff00)>>8);//ReadAsicByte(cmn_lst_slvr_y,DVC_PG1,0x5c);
	for(_t3_=0;_t3_<16;_t3_++){
#if	defined(__4CH__)
		if(_t3_ > 3)	_t1_ = OSD_MIX;
#endif
		if(_t3_ < 8){
			WriteOSDFnt(PTH_Y,MASTER,WNDW_RC_FM_LS_SK_CH_X+(_t3_<<1),WNDW_RC_FM_LS_SK_CH07_Y,_t1_,0x10+_t3_);
			if(BitSet(_rdat_l_,BIT0<<_t3_))	_t2_ = OSD_CHK_BOX_CHK;
			else	_t2_ = OSD_CHK_BOX_BLK;
			WriteOSDFnt(PTH_Y,MASTER,WNDW_RC_FM_LS_SK_CH_X+(_t3_<<1),WNDW_RC_FM_LS_SK_CHK07_Y,_t1_,_t2_);
		}
		else{
			_t4_ = _t3_-8;
			if(_t4_ < 2)	WriteOSDFnt(PTH_Y,MASTER,WNDW_RC_FM_LS_SK_CH_X+(_t4_<<1),WNDW_RC_FM_LS_SK_CH8F_Y,_t1_,0x18+_t4_);
			else	WriteOSDFnt(PTH_Y,MASTER,WNDW_RC_FM_LS_SK_CH_X+(_t4_<<1),WNDW_RC_FM_LS_SK_CH8F_Y,_t1_,0x1f+_t4_);
			if(BitSet(_rdat_h_,BIT0<<_t4_))	_t2_ = OSD_CHK_BOX_CHK;
			else	_t2_ = OSD_CHK_BOX_BLK;
			WriteOSDFnt(PTH_Y,MASTER,WNDW_RC_FM_LS_SK_CH_X+(_t4_<<1),WNDW_RC_FM_LS_SK_CHK8F_Y,_t1_,_t2_);
		}
	}
}
//==================================================================================
//==================================================================================
U16	GetWndwRcFmLsSkMn(void)
{
	U16 _rdat_;

	_rdat_ = ReadAsicByte(cmn_lst_slvr_y,DVC_PG1,0x5c);
	_rdat_ <<= 8;
	_rdat_ |=	ReadAsicByte(cmn_lst_slvr_y,DVC_PG1,0x5d);
	
	return	_rdat_;
}
//==================================================================================
void	SetWndwRcFmLsSkMn(U16 _data)
{
	U8 _t1_;

/*	//... update:050708 Rev2.0
	_t1_ = (U8)(_data&0x00ff);
	WriteAsicByte(cmn_lst_slvr_y,DVC_PG1,0x5d,_t1_);
	_t1_ = (U8)((_data&0xff00)>>8);
	WriteAsicByte(cmn_lst_slvr_y,DVC_PG1,0x5c,_t1_);
	//	*/
	_t1_ = (U8)(_data&0x00ff);
	WriteAsicByte(cmn_dvc,DVC_PG1,0x5d,_t1_);
	_t1_ = (U8)((_data&0xff00)>>8);
	WriteAsicByte(cmn_dvc,DVC_PG1,0x5c,_t1_);
}
//==================================================================================
void	SetWndwRcFmLsMd(void)
{
	U8 _rdat_;
	U8 _t1_, _t2_=0;

	//... update:050708 Rev2.0
#if	defined(__4CH__)
	for(_t1_=0;_t1_<cmn_max_ch;_t1_++){
		SetCrntDvcCh(_t1_,&wndw_crnt_dvc,&wndw_crnt_ch);

		if(wndw_crnt_dvc != _t2_){
			_t2_ = wndw_crnt_dvc;

			_rdat_ = ReadAsicByte(wndw_crnt_dvc,DVC_PG1,0x5b);
			if(wndw_rc_fm_ls_md == LOSS_MD_HOLD)	ClearBit(_rdat_,BIT3);
			else if(wndw_rc_fm_ls_md == LOSS_MD_SKIP)	SetBit(_rdat_,BIT3);
			WriteAsicByte(wndw_crnt_dvc,DVC_PG1,0x5b,_rdat_);
		}
	}
#endif
	
	if(wndw_rc_fm_ls_md == LOSS_MD_BYPS)	_t1_ = LOSS_MODE_BYPS;
	else if(wndw_rc_fm_ls_md == LOSS_MD_HOLD)	_t1_ = LOSS_MODE_FRZ;
	else if(wndw_rc_fm_ls_md == LOSS_MD_BLUE)	_t1_ = LOSS_MODE_BLAK;
	//... update:050708 Rev2.0
#if	defined(__4CH__)
	else if(wndw_rc_fm_ls_md == LOSS_MD_SKIP)	_t1_ = LOSS_MODE_FRZ;
#elif	defined(__16CH__)
	else if(wndw_rc_fm_ls_md == LOSS_MD_SKIP)	_t1_ = LOSS_MODE_BLK_FRZ;			//... LOSS_MODE_BLK_FRZ is same value as LOSS_MD_SKIP
#endif

//	_rdat_ = ReadAsicByte(MASTER,DVC_PG1,0x55);
//	_rdat_ = (_rdat_ & 0x3f)|(_t1_<<6);
//	WriteAsicByte(cmn_dvc,DVC_PG1,0x55,_rdat_);
	SetAsicFlgType(MASTER,DVC_PG1,0x55,0xc0,_t1_<<6);
}
//==================================================================================
//==================================================================================
void	InitWndwRcFmVarLsMd(void)
{
	U8 _rdat_;
	
//	_rdat_ = ReadAsicByte(MASTER,DVC_PG1,0x55);
//	_rdat_ = (_rdat_ & 0xc0)>>6;
	_rdat_ = GetAsicVar8Type(MASTER,DVC_PG1,0x55,0x62);
	if(_rdat_ == LOSS_MODE_FRZ){
		_rdat_ = ReadAsicByte(wndw_crnt_dvc,DVC_PG1,0x5b);
		if(BitSet(_rdat_,BIT3))	wndw_rc_fm_ls_md = LOSS_MD_SKIP;
		else	wndw_rc_fm_ls_md = LOSS_MD_HOLD;
	}
	else	wndw_rc_fm_ls_md = _rdat_;
}
//==================================================================================
//==================================================================================
void	CreateWndwRcFmLs(void)
{
	U16 _rdat_=0;
	
	b_rc_fm_loss = ON;

	WriteOSDClr(PTH_Y,MASTER,WNDW_RC_FM_LS_POS_X-1,WNDW_RC_FM_LS_POS_Y-1,WNDW_RC_FM_LS_L+2,WNDW_RC_FM_LS_H+2);
	SetOSDWndw(PTH_Y,OSD_WNDW_TYPE_MAIN,WNDW_RC_FM_LS_POS_X,WNDW_RC_FM_LS_POS_Y,WNDW_RC_FM_LS_L,WNDW_RC_FM_LS_H,str_wndw_ttl_no_vid);

	InitWndwRcFmVarLsMd();
	
	SetWndwRcFmLsOSDMd();
	SetWndwRcFmLsOSDSk();
	_rdat_ = GetWndwRcFmLsSkMn();
	SetWndwRcFmLsOSDSkMn(_rdat_);
}
//==================================================================================
void	RunWndwRcFmLs(void)//U8 _osd_pos_x_, U8 _osd_pos_y_)
{
	U16 _rdat_;
	U8 _t1_;
	U8	_osd_pos_x_, _osd_pos_y_;

	_osd_pos_x_ = GetMseOSDX(reg_crsr_pos_x);
	_osd_pos_y_ = GetMseOSDY(reg_crsr_pos_y);

	
	if(b_mse_btn_dwn_lb == 1){
		b_mse_btn_dwn_lb = 0;

		if((_osd_pos_x_ == WNDW_RC_FM_LS_CLOS_X)&&(_osd_pos_y_ == WNDW_RC_FM_LS_CLOS_Y)){
//			SetBoxBtnStrPush(LOSS_BOX_QUIT);
		}
	}
	if(b_mse_btn_dwn_rb == 1)	b_mse_btn_dwn_rb = 0;
	if(b_mse_clk_lb == 1){
		b_mse_clk_lb = 0;

		if((_osd_pos_x_ == WNDW_RC_FM_LS_CLOS_X)&&(_osd_pos_y_ == WNDW_RC_FM_LS_CLOS_Y)){
//			SetBoxBtnStrPull(LOSS_BOX_QUIT);
			
			WriteOSDClr(PTH_Y,MASTER,WNDW_RC_FM_LS_POS_X,WNDW_RC_FM_LS_POS_Y,WNDW_RC_FM_LS_L,WNDW_RC_FM_LS_H);
			WriteOSDClrX(MASTER,WNDW_RC_FM_LS_POS_X-1,WNDW_RC_FM_LS_POS_Y-1,WNDW_RC_FM_LS_L+2,WNDW_RC_FM_LS_H+2);
//			DisableBox(PTH_Y,LOSS_BOX_QUIT,LOSS_BOX_FRM);	// decoration wndwdow, main wndwdow

			b_rc_fm_loss = OFF;

			CreateWndwRcFm(PTH_Y);
		}
		else if((_osd_pos_y_ >= WNDW_RC_FM_LS_RDO_MD_Y)&&(_osd_pos_y_ <= (WNDW_RC_FM_LS_RDO_MD_Y+LOSS_MD_SKIP))){
			if(_osd_pos_x_ == WNDW_RC_FM_LS_RDO_MD_X){
				_t1_ = _osd_pos_y_ - WNDW_RC_FM_LS_RDO_MD_Y;
				if(_t1_ != wndw_rc_fm_ls_md){
					if((_t1_ < LOSS_MD_SKIP)&&(wndw_rc_fm_ls_md < LOSS_MD_SKIP)){
						wndw_rc_fm_ls_md = _t1_;
					}
					else{
						wndw_rc_fm_ls_md = _t1_;

						SetWndwRcFmLsOSDSk();
						SetWndwRcFmLsSkMn(0x0000);
						SetWndwRcFmLsOSDSkMn(0x0000);
					}
					SetWndwRcFmLsOSDMd();

					SetWndwRcFmLsMd();
				}
			}
		}
		else if(wndw_rc_fm_ls_md == LOSS_MD_SKIP){
			if((_osd_pos_y_ == WNDW_RC_FM_LS_RDO_SK_Y)||(_osd_pos_y_ == (WNDW_RC_FM_LS_RDO_SK_Y+LOSS_SKIP_MANL))){
				if(_osd_pos_x_ == WNDW_RC_FM_LS_RDO_SK_X){
					if(_osd_pos_y_ == WNDW_RC_FM_LS_RDO_SK_Y)	_t1_ = LOSS_SKIP_AUTO;
					else	_t1_ = LOSS_SKIP_MANL;
					if(_t1_ != b_rc_fm_ls_sk){
						b_rc_fm_ls_sk = _t1_;

						SetWndwRcFmLsOSDSk();
						if(b_rc_fm_ls_sk == LOSS_SKIP_AUTO){
							SetWndwRcFmLsSkMn(0x0000);
							SetWndwRcFmLsOSDSkMn(0x0000);
						}
						else{
							_rdat_ = GetWndwRcFmLsSkMn();
							SetWndwRcFmLsOSDSkMn(_rdat_);
						}
					}
				}
			}
			else if(b_rc_fm_ls_sk == LOSS_SKIP_MANL){
#if	defined(__4CH__)
				if(_osd_pos_y_ == WNDW_RC_FM_LS_SK_CHK07_Y){
					if((_osd_pos_x_ >= WNDW_RC_FM_LS_SK_CH_X)&&(_osd_pos_x_ <= (WNDW_RC_FM_LS_SK_CH_X+6))){
						_t1_ = _osd_pos_x_ - WNDW_RC_FM_LS_SK_CH_X;
						if(BitClear(_t1_,BIT0)){
							_t1_ >>= 1;
#elif	defined(__16CH__)
				if((_osd_pos_y_ == WNDW_RC_FM_LS_SK_CHK07_Y)||(_osd_pos_y_ == WNDW_RC_FM_LS_SK_CHK8F_Y)){
					if((_osd_pos_x_ >= WNDW_RC_FM_LS_SK_CH_X)&&(_osd_pos_x_ <= (WNDW_RC_FM_LS_SK_CH_X+14))){
						_t1_ = _osd_pos_x_ - WNDW_RC_FM_LS_SK_CH_X;
						if(BitClear(_t1_,BIT0)){
							_t1_ >>= 1;
							if(_osd_pos_y_ == WNDW_RC_FM_LS_SK_CHK8F_Y)	_t1_ += 8;
#endif
							_rdat_ = GetWndwRcFmLsSkMn();
							_rdat_ ^= 0x0001<<_t1_;
							SetWndwRcFmLsOSDSkMn(_rdat_);
							SetWndwRcFmLsSkMn(_rdat_);
						}
					}
				}
			}
		}
	}
	if(b_mse_clk_rb == 1)	b_mse_clk_rb = 0;
	if(b_mse_pshng_clk_lb == 1){
		b_mse_pshng_clk_lb = 0;

	}
	if(b_mse_pshng_clk_rb == 1)	b_mse_pshng_clk_rb = 0;
}
//==================================================================================

⌨️ 快捷键说明

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