wndw_mtn_md.c

来自「TECHWELL 之tw2835 四画面合一之驱动代码,CCIR656输出,KE」· C语言 代码 · 共 545 行 · 第 1/2 页

C
545
字号
#include	"hdr.h"

//==================================================================================
U8 idata	wndw_mtn_md_blck_strt;

//U8 bdata	wndw_flag_mtn = 0x00;
//sbit	b_mtn_dspl = wndw_flag_mtn^7;


//==================================================================================
//						Motion and 2Dbox window function description
//==================================================================================
void Enable2DBox(U8 _pth, U8 _dvc, U8 _ch)
{
//	U8	_rdat_;
//
//	_rdat_ = ReadAsicByte(_dvc,DVC_PG2,0x60+(_ch<<3));
//	ClearBit(_rdat_,_2DBOX_EN_X|_2DBOX_EN_Y);
//	WriteAsicByte(_dvc,DVC_PG2,0x60+(_ch<<3),_path|_rdat_);
	U8 _t1_=0;
	
	if(BitSet(_pth,PTH_X))	_t1_ |= BIT7;
	if(BitSet(_pth,PTH_Y))	_t1_ |= BIT6;
	SetAsicFlgType(_dvc,DVC_PG2,0x60+(_ch<<3),0xc0,_t1_);
}
//==================================================================================
/*
void Disable2DBox(U8 _path, U8 _dvc, U8 _ch)
{
	U8	_rdat_;

	_rdat_ = ReadAsicByte(_dvc,DVC_PG2,0x60+(_ch<<3));
	WriteAsicByte(_dvc,DVC_PG2,0x60+(_ch<<3),(~ _path) & _rdat_);
}
//==================================================================================
void	Set2DBoxCtrl(U8 _dvc, U8 _ch, U8 _property, U8 _tgl)
{
	U8 t_rdata;

	t_rdata = ReadAsicByte(_dvc,DVC_PG2,0x60+(_ch<<3));
	if(BitSet(_tgl,0x08)){
		t_rdata = (t_rdata & 0xcf)|(_tgl & 0x30);
	}
	else{
		if(_tgl == ON)	SetBit(t_rdata,_property);
		else	ClearBit(t_rdata,_property);
	}
	WriteAsicByte(_dvc,DVC_PG2,0x60+(_ch<<3),t_rdata);
}
//	*/
//==================================================================================
void Aply2DBoxCh(U8 _dvc, U8 _ch)
{
	U8 _hl_, _hr_, _vt_, _vb_;
	U8 _t1_, _t2_;

	_hl_ = ReadAsicByte(_dvc,DVC_PG1,0x30+(_ch<<2));
	_hr_ = ReadAsicByte(_dvc,DVC_PG1,0x31+(_ch<<2));
	_vt_ = ReadAsicByte(_dvc,DVC_PG1,0x32+(_ch<<2));
	_vb_ = ReadAsicByte(_dvc,DVC_PG1,0x33+(_ch<<2));

	//... 2d box setting
	WriteAsicByte(_dvc,DVC_PG2,0x62+(_ch<<3),_hl_+1);
	WriteAsicByte(_dvc,DVC_PG2,0x64+(_ch<<3),_vt_);
	_t1_ = (_hr_-_hl_-1)>>3;
	if(_t1_ > 1)	_t2_ = _t1_ - 1;
	else	_t2_ = 0;
	WriteAsicByte(_dvc,DVC_PG2,0x63+(_ch<<3),_t2_);
	//... (HW + 1(md_bnd))*(16 / 2(resol)) = HR - HL - 1(ch_bnd) - pixel_offset(full:4,quad:2,pip:1... -> not contain)
	_t1_ = (_vb_-_vt_)/6;
	if(_t1_ > 1)	_t2_ = _t1_ - 1;
	else	_t2_ = 0;
	WriteAsicByte(_dvc,DVC_PG2,0x65+(_ch<<3),_t2_);
}
//==================================================================================
void Set2DBoxPos(U8 _dvc, U8 _ch, U16 _boxhl, U16 _boxvt)
{
	U8	_rdat_;

	_rdat_ = ReadAsicByte(_dvc,DVC_PG2,0x61+(_ch<<3));
	if(BitSet(_boxhl, BIT0))	SetBit(_rdat_, BIT1);
	else	ClearBit(_rdat_, BIT1);
	if(BitSet(_boxvt, BIT0))	SetBit(_rdat_, BIT0);
	else	ClearBit(_rdat_, BIT0);

	WriteAsicByte(_dvc,DVC_PG2,0x61+(_ch<<3),_rdat_);
	WriteAsicByte(_dvc,DVC_PG2,0x62+(_ch<<3),(U8)(_boxhl>>1));
	WriteAsicByte(_dvc,DVC_PG2,0x64+(_ch<<3),(U8)(_boxvt>>1));
}
//==================================================================================
void Set2DBoxSize(U8 _dvc, U8 _ch, U8 _boxhw, U8 _boxvw)
{
	WriteAsicByte(_dvc,DVC_PG2,0x63+(_ch<<3),_boxhw);
	WriteAsicByte(_dvc,DVC_PG2,0x65+(_ch<<3),_boxvw);
}
//==================================================================================
void Set2DBox(U8 _dvc, U8 _ch, U16 _boxhl, U8 _boxhw, U16 _boxvt, U8 _boxvw)
{
	Set2DBoxPos(_dvc,_ch,_boxhl,_boxvt);
	Set2DBoxSize(_dvc,_ch,_boxhw,_boxvw);
}
//==================================================================================
void Set2DBoxCell(U8 _dvc, U8 _ch, U8 _lngth, U8 _hght)
{
	WriteAsicByte(_dvc,DVC_PG2,0x66+(_ch<<3),(--_lngth)<<4|(--_hght));
}
//==================================================================================
//void Set2DBoxCur(U8 _dvc, U8 _ch, U8 _pos_x, U8 _pos_y)
//{
//	WriteAsicByte(_dvc,DVC_PG2,0x67+(_ch<<3),(_pos_x<<4)|_pos_y);
//}
//==================================================================================
void	Set2DBoxTable(U8 _pth, U8 _dvc, U8 _ch, U8 _osd_pos_x, U8 _osd_pos_y, U8 _lngth, U8 _hght, U8 _osd_per_cell)
{
	Set2DBox(_dvc,_ch,(_osd_pos_x<<3)-4,7+(_osd_per_cell<<3),(_osd_pos_y*10)+OSD_DLY_V-1,9);
	Set2DBoxCell(_dvc,_ch,_lngth,_hght);
	
	Enable2DBox(_pth,_dvc,_ch);
}
//==================================================================================
void	SetMskBlck(U8 _dvc, U8 _ch, U8 _blk_hl, U8 _blk_vt, U8 _blk_wdth, U8 _blk_hght)
{
	U16 _msk_;
//	U8	_rdat_;
	U8 _x_, _y_, _pos_end_y_, _pos_end_x_;
	
	_pos_end_y_ = _blk_vt + _blk_hght;
	_pos_end_x_ = _blk_hl + _blk_wdth;

//	_rdat_ = ReadAsicByte(_dvc,DVC_PG2,0x82+0x20*_ch);
//	WriteAsicByte(_dvc,DVC_PG2,0x83+0x20*_ch,_rdat_|BIT7);
	SetAsicFlgType(_dvc,DVC_PG2,0x83+0x20*_ch,0xc0,0x80);			//... MD_MASK_RD_MD=2

	for(_y_ = _blk_vt ; _y_ < _pos_end_y_ ; _y_++){
		_msk_ = 0;
		_msk_ |= ReadAsicByte(_dvc,DVC_PG2,0x86+0x20*_ch+(_y_<<1))<<8;
		_msk_ |= ReadAsicByte(_dvc,DVC_PG2,0x86+0x20*_ch+(_y_<<1)+1);

			for(_x_ = _blk_hl ; _x_ < _pos_end_x_ ; _x_++)	_msk_ ^= BIT0<<_x_;

		WriteAsicByte(_dvc,DVC_PG2,0x86+0x20*_ch+(_y_<<1),(U8)((_msk_&0xff00)>>8));
		WriteAsicByte(_dvc,DVC_PG2,0x86+0x20*_ch+(_y_<<1)+1,(U8)(_msk_&0x00ff));
	}
}
//==================================================================================
//==================================================================================
void	RunWndwMtnMdOSDChArw(U8 _pth, U8 _osd_pos_x, U8 _osd_pos_y)
{
	RunMseOnOSDH(_pth,_osd_pos_x,_osd_pos_y,WNDW_MTN_MD_CH_DEC_X,WNDW_MTN_MD_CH_INC_X,WNDW_MTN_MD_CH_NUM_Y,MSE_ON_OSD_MD_CH);
}
//==================================================================================
void	RunWndwMtnMdOSDArw(U8 _pth, U8 _osd_pos_x, U8 _osd_pos_y)
{
	RunMseOnOSDH(_pth,_osd_pos_x,_osd_pos_y,WNDW_MTN_MD_SENS_DEC_X,WNDW_MTN_MD_SENS_INC_X,WNDW_MTN_MD_SENS_CL_Y,MSE_ON_OSD_MD_CL);
	RunMseOnOSDH(_pth,_osd_pos_x,_osd_pos_y,WNDW_MTN_MD_SENS_DEC_X,WNDW_MTN_MD_SENS_INC_X,WNDW_MTN_MD_SENS_LV_Y,MSE_ON_OSD_MD_LV);
	RunMseOnOSDH(_pth,_osd_pos_x,_osd_pos_y,WNDW_MTN_MD_SENS_DEC_X,WNDW_MTN_MD_SENS_INC_X,WNDW_MTN_MD_SENS_SP_Y,MSE_ON_OSD_MD_SP);
	RunMseOnOSDH(_pth,_osd_pos_x,_osd_pos_y,WNDW_MTN_MD_SENS_DEC_X,WNDW_MTN_MD_SENS_INC_X,WNDW_MTN_MD_SENS_TM_Y,MSE_ON_OSD_MD_TM);
	RunMseOnOSDH(_pth,_osd_pos_x,_osd_pos_y,WNDW_MTN_MD_SENS_DEC_X,WNDW_MTN_MD_SENS_INC_X,WNDW_MTN_MD_SENS_VL_Y,MSE_ON_OSD_MD_VL);
}
//==================================================================================
//==================================================================================
void	SetWndwMtnMdOSDChNum(U8 _pth)
{
	U8 _t1_;

#if	defined(__16CH__)
	if(wndw_pop_crnt_ch < 10)		_t1_ = OSD_CLR;
	else	_t1_ = 0x00;
	WriteOSDFnt(_pth,MASTER,WNDW_MTN_MD_CH_NUM_X-1,WNDW_MTN_MD_CH_NUM_Y,_t1_,0x11);
#endif
	if(wndw_pop_crnt_ch > 9)		_t1_ = wndw_pop_crnt_ch+6;			//... +6 -> +0x10 -10;
	else	_t1_ = wndw_pop_crnt_ch+0x10;
	WriteOSDFnt(_pth,MASTER,WNDW_MTN_MD_CH_NUM_X,WNDW_MTN_MD_CH_NUM_Y,0x00,_t1_);
}
//==================================================================================
void	SetWndwMtnMdOSDCh(U8 _pth)
{
	WriteOSDStr(_pth,MASTER,WNDW_MTN_MD_POS_X+3,WNDW_MTN_MD_CH_NUM_Y,0x00,str_wndw_cmn_ch);
	RunWndwMtnMdOSDChArw(_pth,0,0);

	SetWndwMtnMdOSDChNum(_pth);
}
//==================================================================================
//==================================================================================
U8	GetWndwMtnMdNum(U8 _osd_pos_y)
{
	U8 _t1_;
	
//	if(_osd_pos_y == WNDW_MTN_MD_SENS_CL_Y)		_t1_ = GetMtnMdSens(wndw_crnt_dvc,wndw_crnt_ch,MD_SENS_CL);
//	else if(_osd_pos_y == WNDW_MTN_MD_SENS_LV_Y)	_t1_ = GetMtnMdSens(wndw_crnt_dvc,wndw_crnt_ch,MD_SENS_LV);
//	else if(_osd_pos_y == WNDW_MTN_MD_SENS_VL_Y)	_t1_ = GetMtnMdSens(wndw_crnt_dvc,wndw_crnt_ch,MD_SENS_VL);
//	else if(_osd_pos_y == WNDW_MTN_MD_SENS_SP_Y)	_t1_ = GetMtnMdIrq(wndw_crnt_dvc,wndw_crnt_ch,MD_IRQ_SP);
//	else if(_osd_pos_y == WNDW_MTN_MD_SENS_TM_Y)	_t1_ = GetMtnMdIrq(wndw_crnt_dvc,wndw_crnt_ch,MD_IRQ_TM);
	if(_osd_pos_y == WNDW_MTN_MD_SENS_CL_Y)		_t1_ = GetAsicVar8Type(wndw_crnt_dvc,DVC_PG2,0x83+0x20*wndw_crnt_ch,0x62);//MD_SENS_CL);
	else if(_osd_pos_y == WNDW_MTN_MD_SENS_LV_Y)	_t1_ = GetAsicVar8Type(wndw_crnt_dvc,DVC_PG2,0x83+0x20*wndw_crnt_ch,0x05);//MD_SENS_LV);
	else if(_osd_pos_y == WNDW_MTN_MD_SENS_SP_Y)	_t1_ = GetAsicVar8Type(wndw_crnt_dvc,DVC_PG2,0x85+0x20*wndw_crnt_ch,0x04);//MD_IRQ_SP);
	else if(_osd_pos_y == WNDW_MTN_MD_SENS_TM_Y)	_t1_ = GetAsicVar8Type(wndw_crnt_dvc,DVC_PG2,0x85+0x20*wndw_crnt_ch,0x44);//MD_IRQ_TM);
	else if(_osd_pos_y == WNDW_MTN_MD_SENS_VL_Y)	_t1_ = GetAsicVar8Type(wndw_crnt_dvc,DVC_PG2,0x84+0x20*wndw_crnt_ch,0x06);//MD_SENS_VL);

	return	_t1_;
}
//==================================================================================
void	SetWndwMtnMdNum(U8 _osd_pos_y, U8 _data)
{
	if(_osd_pos_y == WNDW_MTN_MD_SENS_CL_Y)		SetAsicVar8Type(wndw_crnt_dvc,DVC_PG2,0x83+0x20*wndw_crnt_ch,0x62,_data);
	else if(_osd_pos_y == WNDW_MTN_MD_SENS_LV_Y)	SetAsicVar8Type(wndw_crnt_dvc,DVC_PG2,0x83+0x20*wndw_crnt_ch,0x05,_data);
	else if(_osd_pos_y == WNDW_MTN_MD_SENS_SP_Y)	SetAsicVar8Type(wndw_crnt_dvc,DVC_PG2,0x85+0x20*wndw_crnt_ch,0x04,_data);
	else if(_osd_pos_y == WNDW_MTN_MD_SENS_TM_Y)	SetAsicVar8Type(wndw_crnt_dvc,DVC_PG2,0x85+0x20*wndw_crnt_ch,0x44,_data);
	else if(_osd_pos_y == WNDW_MTN_MD_SENS_VL_Y)	SetAsicVar8Type(wndw_crnt_dvc,DVC_PG2,0x84+0x20*wndw_crnt_ch,0x06,_data);
}
//==================================================================================
void	SetWndwMtnMdOSDNum(U8 _pth, U8 _osd_pos_y, U8 _data)
{
	_data = ConvDec2Bcd(_data);
	WriteOSDFnt(_pth,MASTER,WNDW_MTN_MD_SENS_NUM_X,_osd_pos_y,0x00,(_data&0x0f)+0x10);
	if(_osd_pos_y == WNDW_MTN_MD_SENS_CL_Y){}
	else{
		_data >>= 4;
		if(_data == 0)	WriteOSDFnt(_pth,MASTER,WNDW_MTN_MD_SENS_NUM_X-1,_osd_pos_y,OSD_CLR,0x00);
		else	WriteOSDFnt(_pth,MASTER,WNDW_MTN_MD_SENS_NUM_X-1,_osd_pos_y,0x00,_data+0x10);
	}
}
//==================================================================================
void	SetWndwMtnMdOSDChk(U8 _pth, U8 _osd_pos_y)
{
//	U8 _dvc_, _ch_;
	U8 _t1_;//, _t2_;
	
	if(_osd_pos_y == WNDW_MTN_MD_CHK_MTN_Y)
		_t1_ = GetAsicFlgType(wndw_crnt_dvc,DVC_PG2,0x60+(wndw_crnt_ch<<3),BIT5);
	else if(_osd_pos_y == WNDW_MTN_MD_CHK_MSK_Y)
		_t1_ = GetAsicFlgType(wndw_crnt_dvc,DVC_PG2,0x61+(wndw_crnt_ch<<3),BIT5);

	if(_t1_ == BIT5)	_t1_ = OSD_CHK_BOX_CHK;
	else	_t1_ = OSD_CHK_BOX_BLK;
	WriteOSDFnt(_pth,MASTER,WNDW_MTN_MD_CHK_X,_osd_pos_y,0x00,_t1_);
}
//==================================================================================
//void	SetWndwMtnMdOSDDspl(U8 _pth)
//{
//	WriteOSDStr(_pth,MASTER,WNDW_MTN_MD_CHK_X+2,WNDW_MTN_MD_CHK_MTN_Y,0x00,str_wndw_mtn_dspl_mtn);
//	WriteOSDStr(_pth,MASTER,WNDW_MTN_MD_CHK_X+2,WNDW_MTN_MD_CHK_MSK_Y,0x00,str_wndw_mtn_dspl_msk);
//
//	SetWndwMtnMdOSDChk(_pth);
//}
//==================================================================================
void	SetWndwMtnMdOSDNumAll(U8 _pth)
{
	U8 _t1_;
	
	_t1_ = GetWndwMtnMdNum(WNDW_MTN_MD_SENS_CL_Y);
	SetWndwMtnMdOSDNum(_pth,WNDW_MTN_MD_SENS_CL_Y,_t1_);
	_t1_ = GetWndwMtnMdNum(WNDW_MTN_MD_SENS_LV_Y);
	SetWndwMtnMdOSDNum(_pth,WNDW_MTN_MD_SENS_LV_Y,_t1_);
	_t1_ = GetWndwMtnMdNum(WNDW_MTN_MD_SENS_SP_Y);
	SetWndwMtnMdOSDNum(_pth,WNDW_MTN_MD_SENS_SP_Y,_t1_);
	_t1_ = GetWndwMtnMdNum(WNDW_MTN_MD_SENS_TM_Y);
	SetWndwMtnMdOSDNum(_pth,WNDW_MTN_MD_SENS_TM_Y,_t1_);
	_t1_ = GetWndwMtnMdNum(WNDW_MTN_MD_SENS_VL_Y);
	SetWndwMtnMdOSDNum(_pth,WNDW_MTN_MD_SENS_VL_Y,_t1_);
}
//==================================================================================
void	SetWndwMtnMdOSD(U8 _pth)
{
////	SetOSDGrp(_pth,WNDW_MTN_MD_SENS_TTL_X-1,WNDW_MTN_MD_SENS_CL_Y,18,7,0x00,str_wndw_grp_mtn);
//	SetOSDGrp(_pth,WNDW_MTN_MD_SENS_TTL_X-1,WNDW_MTN_MD_SENS_CL_Y,18,5,0x00,str_null);
	SetOSDWndw(_pth,OSD_WNDW_TYPE_DECO,WNDW_MTN_MD_SENS_TTL_X,WNDW_MTN_MD_SENS_CL_Y,16,5,str_null);

	WriteOSDStr(_pth,MASTER,WNDW_MTN_MD_SENS_TTL_X,WNDW_MTN_MD_SENS_CL_Y,0x00,str_wndw_mtn_cll);
	WriteOSDStr(_pth,MASTER,WNDW_MTN_MD_SENS_TTL_X,WNDW_MTN_MD_SENS_LV_Y,0x00,str_wndw_mtn_lvl);
	WriteOSDStr(_pth,MASTER,WNDW_MTN_MD_SENS_TTL_X,WNDW_MTN_MD_SENS_SP_Y,0x00,str_wndw_mtn_sptl);
	WriteOSDStr(_pth,MASTER,WNDW_MTN_MD_SENS_TTL_X,WNDW_MTN_MD_SENS_TM_Y,0x00,str_wndw_mtn_tmpl);
	WriteOSDStr(_pth,MASTER,WNDW_MTN_MD_SENS_TTL_X,WNDW_MTN_MD_SENS_VL_Y,0x00,str_wndw_mtn_vel);

⌨️ 快捷键说明

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