📄 ch.c
字号:
#include "hdr.h"
//==================================================================================
// Channel definition & variable description
//==================================================================================
//==================================================================================
// Channel property(position & size, scale, ... ) function description
//==================================================================================
void SetSclH(U8 _pth, U8 _dvc, U8 _ch, U16 _scl_h)
{
// SetSclHValue(_pth,_dvc,_ch,_scl_h);
// SetSclHFilter(_pth,_dvc,_ch);
U8 _t1_;
U8 _rdat_;
if(BitSet(_pth,PTH_X)){
_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x80+0x10*_ch);
_scl_h >>= 8;
if(_scl_h > 191){ // HSCLMSB > 192(0xc0)
_t1_ = 0;
}
else if(_scl_h > 111){ // 112(0x70) < HSCLMSB < 191(0xbf)
_t1_ = 1;
}
else if(_scl_h > 79){ // 80(0x50) < HSCLMSB < 111(0x6f)
_t1_ = 2;
}
else{ // HSCLMSB < 79(0x4f)
_t1_ = 3;
}
WriteAsicByte(_dvc,DVC_PG0,0x80+0x10*_ch,(_rdat_&0xfc)+_t1_); //... filter data
WriteAsicByte(_dvc,DVC_PG0,0x83+0x10*_ch,(U8)_scl_h); //... scale data (MSB)
}
if(BitSet(_pth,PTH_PB)){
_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x85+0x10*_ch);
_scl_h >>= 8;
if(_scl_h > 191){ // HSCLMSB > 192(0xc0)
_t1_ = 0;
}
else if(_scl_h > 111){ // 112(0x70) < HSCLMSB < 191(0xbf)
_t1_ = 1;
}
else if(_scl_h > 79){ // 80(0x50) < HSCLMSB < 111(0x6f)
_t1_ = 2;
}
else{ // HSCLMSB < 79(0x4f)
_t1_ = 3;
}
WriteAsicByte(_dvc,DVC_PG0,0x85+0x10*_ch,(_rdat_&0xfc)+_t1_); //... filter data
WriteAsicByte(_dvc,DVC_PG0,0x88+0x10*_ch,(U8)_scl_h); //... scale data (MSB)
}
if(BitSet(_pth,PTH_Y)){
_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x8a+0x10*_ch);
_scl_h >>= 8;
if(_scl_h > 0x7f) _t1_ = 0;
else _t1_ = BIT4|1;
WriteAsicByte(_dvc,DVC_PG0,0x8a+0x10*_ch,(_rdat_&0xec)+_t1_); //... filter data
}
}
//==================================================================================
void SetSclV(U8 _pth, U8 _dvc, U8 _ch, U16 _scl_v)
{
// SetSclVValue(_pth,_dvc,_ch,_VSCL);
// SetSclVFilter(_pth,_dvc,_ch);
U8 _t1_;
U8 _rdat_;
if(BitSet(_pth,PTH_X)){
_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x80+0x10*_ch);
_scl_v >>= 8;
if(_scl_v > 191){ // HSCLMSB > 192(0xc0)
_t1_ = 0;
}
else if(_scl_v > 111){ // 112(0x70) < HSCLMSB < 191(0xbf)
_t1_ = 0;
}
else if(_scl_v > 79){ // 80(0x50) < HSCLMSB < 111(0x6f)
_t1_ = 1;
}
else{ // HSCLMSB < 79(0x4f)
_t1_ = 2;
}
WriteAsicByte(_dvc,DVC_PG0,0x80+0x10*_ch,(_rdat_&0xf3)+(_t1_<<2)); //... filter data
WriteAsicByte(_dvc,DVC_PG0,0x81+0x10*_ch,(U8)_scl_v); //... scale data (MSB)
if((b_cmn_jp_vdo == VDO_PAL)&&(_scl_v > 191))
// WriteAsicByte(_dvc,DVC_PG0,0xc5,0x0f);
SetAsicFlgType(_dvc,DVC_PG0,0xc5,BIT0<<_ch,BIT0<<_ch);
else
// WriteAsicByte(_dvc,DVC_PG0,0xc5,0x00);
SetAsicFlgType(_dvc,DVC_PG0,0xc5,BIT0<<_ch,0x00);
}
if(BitSet(_pth,PTH_PB)){
_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x85+0x10*_ch);
_scl_v >>= 8;
if(_scl_v > 191){ // HSCLMSB > 192(0xc0)
_t1_ = 0;
}
else if(_scl_v > 111){ // 112(0x70) < HSCLMSB < 191(0xbf)
_t1_ = 0;
}
else if(_scl_v > 79){ // 80(0x50) < HSCLMSB < 111(0x6f)
_t1_ = 1;
}
else{ // HSCLMSB < 79(0x4f)
_t1_ = 2;
}
WriteAsicByte(_dvc,DVC_PG0,0x85+0x10*_ch,(_rdat_&0xf3)+(_t1_<<2)); //... filter data
WriteAsicByte(_dvc,DVC_PG0,0x86+0x10*_ch,(U8)_scl_v); //... scale data (MSB)
}
if(BitSet(_pth,PTH_Y)){
_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x8a+0x10*_ch);
_scl_v >>= 8;
if(_scl_v > 0x7f) _t1_ = 0;
else _t1_ = BIT5;
WriteAsicByte(_dvc,DVC_PG0,0x8a+0x10*_ch,(_rdat_&0xd3)+_t1_); //... filter data
if((b_cmn_jp_vdo == VDO_PAL)&&(_scl_v > 191))
// WriteAsicByte(_dvc,DVC_PG0,0xc5,0xf0);
SetAsicFlgType(_dvc,DVC_PG0,0xc5,BIT4<<_ch,BIT4<<_ch);
else
// WriteAsicByte(_dvc,DVC_PG0,0xc5,0x00);
SetAsicFlgType(_dvc,DVC_PG0,0xc5,BIT4<<_ch,0x00);
}
}
//==================================================================================
//==================================================================================
void SetSclRtoH(U8 _pth, U8 _dvc, U8 _ch, U8 _rto_x)
{
U16 _scl_h_;
U8 _rto1_, _rto2_;
U8 _trgt_ch_;
_rto1_ = (_rto_x&0xf0)>>4;
_rto2_ = _rto_x&0x0f;
if(_rto1_ > _rto2_) _rto1_ = _rto2_;
if(BitSet(_pth,PTH_X)){
// _trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x10+(_ch<<3))&0x03; //... need to verify
_trgt_ch_ = _ch;
_scl_h_ = (0xffff/_rto2_)*_rto1_;
SetSclH(PTH_X,_dvc,_trgt_ch_,_scl_h_);
}
if(BitSet(_pth,PTH_PB)){
// _trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x16+(_ch<<3))&0x0f;
_trgt_ch_ = _ch;
_scl_h_ = (0xffff/_rto2_)*_rto1_;
SetSclH(PTH_PB,_dvc,_trgt_ch_,_scl_h_);
}
if(BitSet(_pth,PTH_Y)){
if((_rto_x == 0x12)||(_rto_x == 0x11)){
// _trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x60+3*_ch)&0x03;
_trgt_ch_ = _ch;
// _scl_h_ = (0xffff/_rto2_)*_rto1_;
if(_rto_x == 0x11) _scl_h_ = 0xffff;
else _scl_h_ = 0x7fff;
SetSclH(PTH_Y,_dvc,_trgt_ch_,_scl_h_);
}
}
}
//==================================================================================
void SetSclRtoV(U8 _pth, U8 _dvc, U8 _ch, U8 _rto_y)
{
U16 _scl_v_;
U8 _rto1_, _rto2_;
U8 _trgt_ch_;
_rto1_ = (_rto_y&0xf0)>>4;
_rto2_ = _rto_y&0x0f;
if(_rto1_ > _rto2_) _rto1_ = _rto2_;
if(BitSet(_pth,PTH_X)){
// _trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x10+(_ch<<3))&0x03; //... need to verify
_trgt_ch_ = _ch;
_scl_v_ = (0xffff/_rto2_)*_rto1_;
SetSclV(PTH_X,_dvc,_trgt_ch_,_scl_v_);
}
if(BitSet(_pth,PTH_PB)){
// _trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x16+(_ch<<3))&0x0f;
_trgt_ch_ = _ch;
_scl_v_ = (0xffff/_rto2_)*_rto1_;
SetSclV(PTH_PB,_dvc,_trgt_ch_,_scl_v_);
}
if(BitSet(_pth,PTH_Y)){
if((_rto_y == 0x12)||(_rto_y == 0x11)){
// _trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x60+3*_ch)&0x03;
_trgt_ch_ = _ch;
// _scl_v_ = (0xffff/_rto2_)*_rto1_;
if(_rto_y == 0x11) _scl_v_ = 0xffff;
else _scl_v_ = 0x7fff;
SetSclV(PTH_Y,_dvc,_trgt_ch_,_scl_v_);
}
}
}
//==================================================================================
void SetSclRto(U8 _pth, U8 _dvc, U8 _ch, U8 _rto_x, U8 _rto_y)
{
SetSclRtoH(_pth,_dvc,_ch,_rto_x);
SetSclRtoV(_pth,_dvc,_ch,_rto_y);
// SetScaleFilter(_pth,_dvc,_ch);
}
//==================================================================================
//==================================================================================
void SetPicPos(U8 _pth, U8 _dvc, U8 _ch, U8 _pichl, U8 _picvt)
{
U8 _rdat_, _picxx_;
// if(_ch < 4){ //... main channel
// _picxx_ = 0x30;
// }
// else{ //... dummy channel
// _picxx_ = 0x40;
// _ch &= 0x03;
// }
//
// if(BitSet(_pth,PTH_X)){
if(BitSet(_pth,PTH_X)||BitSet(_pth,PTH_PB)){
if(BitSet(_pth,PTH_PB)) //... dummy channel
_picxx_ = 0x40;
else//if(_ch < 4){ //... main channel
_picxx_ = 0x30;
WriteAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2),_pichl);
WriteAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2)+2,_picvt);
if(BitSet(_pth,PTH_X)){
//... SetPic..(..)窃荐甫 荤侩且版快,
//... motion box狼 potition鳖瘤 窃膊 官差骨肺 pb俊 措秦 control且 版快 live俊 措茄 motion box郴侩捞 官柴.
//... 2d box setting
WriteAsicByte(_dvc,DVC_PG2,0x62+(_ch<<3),_pichl+1);
WriteAsicByte(_dvc,DVC_PG2,0x64+(_ch<<3),_picvt);
}
}
if(BitSet(_pth,PTH_Y)){
_rdat_ = ReadAsicByte(_dvc,DVC_PG1,0x6d);
if((_pichl == 90)||(_pichl == 0)){
if(_pichl == 0) ClearBit(_rdat_,BIT0<<(_ch<<1));
else SetBit(_rdat_,BIT0<<(_ch<<1));
}
if((_picvt == (cmn_bot>>1))||(_picvt == 0)){
if(_picvt == 0) ClearBit(_rdat_,BIT1<<(_ch<<1));
else SetBit(_rdat_,BIT1<<(_ch<<1));
}
WriteAsicByte(_dvc,DVC_PG1,0x6d,_rdat_);
}
}
//==================================================================================
//void SetPicSz(U8 _pth, U8 _dvc, U8 _ch, U8 v_PICHR, U8 v_PICVB)
//{
// if(BitSet(_pth,PTH_X){
// ary_picxx[_ch][1] = v_PICHR;
// ary_picxx[_ch][3] = v_PICVB;
// WriteAsicByte(_dvc,DVC_PG1,REG_PICHR+4*_ch,v_PICHR);
// WriteAsicByte(_dvc,DVC_PG1,REG_PICVB+4*_ch,v_PICVB);
// }
// if(BitSet(_pth,PTH_Y){
// WriteAsicByte(_dvc,DVC_PG1,REG_PICHR+7*_ch+0x30,v_PICHR);
// WriteAsicByte(_dvc,DVC_PG1,REG_PICVB+7*_ch+0x30,v_PICVB);
// }
//}
// */
//==================================================================================
void SetPicSzRto(U8 _pth, U8 _dvc, U8 _ch, U8 _rto_x, U8 _rto_y)
{ // div_~ : ex) 0x14 -> 1/4, 0x23 -> 2/3, 0x13 -> 1/3, ...
U8 _rto1_, _rto2_;
U8 _pichr_, _picvb_, _picxx_;
U8 _rdat_;
// if(_ch < 4){ //... main channel
// _picxx_ = 0x30;
// }
// else{ //... dummy channel
// _picxx_ = 0x40;
// _ch &= 0x03;
// }
//
// if(BitSet(_pth,PTH_X)){
if(BitSet(_pth,PTH_X)||BitSet(_pth,PTH_PB)){
if(BitSet(_pth,PTH_PB)) //... dummy channel
_picxx_ = 0x40;
else//if(_ch < 4){ //... main channel
_picxx_ = 0x30;
_rto1_ = (_rto_x&0xf0)>>4;
_rto2_ = _rto_x&0x0f;
if(_rto1_ > _rto2_) _rto1_ = _rto2_;
// ary_picxx[_ch][1] = (180*_rto1_)/_rto2_; // SAM87 micom (IAR C-compiler)
_pichr_ = (180/_rto2_)*_rto1_; // 8051 micom (Keil C-compiler)
_rdat_ = ReadAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2)); //... PICHL
_pichr_ += _rdat_;
if(_pichr_ > 180) _pichr_ = 180;
WriteAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2)+1,_pichr_); //... PICHR
if(BitSet(_pth,PTH_X)){
//... SetPic..(..)窃荐甫 荤侩且版快,
//... motion box狼 potition鳖瘤 窃膊 官差骨肺 pb俊 措秦 control且 版快 live俊 措茄 motion box郴侩捞 官柴.
//... 2d box setting
WriteAsicByte(_dvc,DVC_PG2,0x63+(_ch<<3),((_pichr_-_rdat_-(8>>_rto2_))>>3)-1);
//... (HW + 1(md_bnd))*(16 / 2(resol)) = HR - HL - 1(ch_bnd) - pixel_offset(full:4,quad:2,pip:1... -> not contain)
}
_rto1_ = (_rto_y&0xf0)>>4;
_rto2_ = _rto_y&0x0f;
if(_rto1_ > _rto2_) _rto1_ = _rto2_;
// ary_picxx[_ch][3] = (cmn_bot*_rto1_)/_rto2_; // SAM87 micom (IAR C-compiler)
_picvb_ = (cmn_bot/_rto2_)*_rto1_; // 8051 micom (Keil C-compiler)
_rdat_ = ReadAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2)+2); //... PICVT
_picvb_ += _rdat_;
if(_picvb_ > cmn_bot) _picvb_ = cmn_bot;
WriteAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2)+3,_picvb_); //... PICVB
if(BitSet(_pth,PTH_X)){
//... SetPic..(..)窃荐甫 荤侩且版快,
//... motion box狼 potition鳖瘤 窃膊 官差骨肺 pb俊 措秦 control且 版快 live俊 措茄 motion box郴侩捞 官柴.
//... 2d box setting
// if(BitSet(t_2dbox_ctl,_2DBOX_EN_X)
WriteAsicByte(_dvc,DVC_PG2,0x65+(_ch<<3),((_picvb_-_rdat_)/6)-1);
}
}
if(BitSet(_pth,PTH_Y)){
_rdat_ = ReadAsicByte(_dvc,DVC_PG1,0x6c);
if((_rto_x == 0x12)||(_rto_x == 0x11)){
if(_rto_x == 0x11){
SetBit(_rdat_,BIT0<<(_ch<<1));
_pichr_ = 176;//180-4;
}
else{
ClearBit(_rdat_,BIT0<<(_ch<<1));
_pichr_ = 88;//90-2;
}
}
if((_rto_y == 0x12)||(_rto_y == 0x11)){
if(_rto_y == 0x11){
SetBit(_rdat_,BIT1<<(_ch<<1));
_picvb_ = cmn_bot;
}
else{
ClearBit(_rdat_,BIT1<<(_ch<<1));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -