wndw_mtn_md.c
来自「一个比较好用的TW2835音视频芯片开发板的程序,」· C语言 代码 · 共 543 行 · 第 1/2 页
C
543 行
#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 Disable2DBoxDsply(U8 _dvc, U8 _ch)
{
SetAsicFlgType(_dvc,DVC_PG2,0x60+(_ch<<3),BIT5|BIT4,0x00); //... SBOX_EN=0
SetAsicFlgType(_dvc,DVC_PG2,0x61+(_ch<<3),BIT5,0x00);
}
//==================================================================================
/*
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 + -
显示快捷键?