📄 nim.cpp
字号:
m_i2c.data_s(0xD0); m_i2c.a_s();
m_i2c.data_s(0xF3); m_i2c.a_s();
m_i2c.data_s(0x0F); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(0xD1); m_i2c.a_s();
data[3]=m_i2c.data_g(); m_i2c.a_s();
m_i2c.stop_s();
//-----
// data[0]=m_i2c.data_g(); m_i2c.a_s();
// data[1]=m_i2c.data_g(); m_i2c.a_s();
// data[2]=m_i2c.data_g(); m_i2c.a_s();
// data[3]=m_i2c.data_g(); m_i2c.a_s();
CString t; t.Format("%.2X %.2X %.2X %.2X",data[3],data[2],data[1],data[0]); MessageBox(t);
return data[0]|(data[0]<<8)|(data[0]<<16)|(data[0]<<24);
}
void Cnim::set_dialog_status()
{
long status=0;
CString t;
get_status();
//-----LOCK status-----
m_status_lock.LoadBitmaps( IDB_BITMAP_lump_black,IDB_BITMAP_lump_black,0,0 );
m_status_lock2.LoadBitmaps( IDB_BITMAP_lump_black,IDB_BITMAP_lump_black,0,0 );
m_status_lock3.LoadBitmaps( IDB_BITMAP_lump_black,IDB_BITMAP_lump_black,0,0 );
m_status_lock4.LoadBitmaps( IDB_BITMAP_lump_black,IDB_BITMAP_lump_black,0,0 );
if(nim_status.timing_lock) m_status_lock.LoadBitmaps( IDB_BITMAP_lump_green,IDB_BITMAP_lump_green,0,0 );
if(nim_status.carrire_found) m_status_lock2.LoadBitmaps( IDB_BITMAP_lump_green,IDB_BITMAP_lump_green,0,0 );
if(nim_status.puncture_rate_found) m_status_lock3.LoadBitmaps( IDB_BITMAP_lump_green,IDB_BITMAP_lump_green,0,0 );
if(nim_status.lk) m_status_lock4.LoadBitmaps( IDB_BITMAP_lump_green,IDB_BITMAP_lump_green,0,0 );
// // Packet_delineator_status | UWP_LOCK
// if( m_demod->m_status.lock_demod_uwp){
// m_status_lock.LoadBitmaps( IDB_BITMAP_lump_green,IDB_BITMAP_lump_green,0,0 );
// }
// //
// if( m_demod->m_status.lock_packet_delineator){
// m_status_lock2.LoadBitmaps( IDB_BITMAP_lump_green,IDB_BITMAP_lump_green,0,0 );
// }
// //
// // if( (status)&0x04 ){
// // m_status_lock3.LoadBitmaps( IDB_BITMAP_lump_green,IDB_BITMAP_lump_green,0,0 );
// // }
m_status_lock.SizeToContent( ); m_status_lock.Invalidate( TRUE );
m_status_lock2.SizeToContent( ); m_status_lock2.Invalidate( TRUE );
m_status_lock3.SizeToContent( ); m_status_lock3.Invalidate( TRUE );
m_status_lock4.SizeToContent( ); m_status_lock4.Invalidate( TRUE );
//V0.03[xxxxx]
//-----baud-----
// t.Format(" %.3lf",double(nim_status.symbolrate)/1000.); //[ksps]->[Msps]
t.Format(" %.3lf",(double(nim_status.symbolrate)+.5)/1000.); //[ksps]->[Msps]
m_baud=t;
//-----agc-----
t.Format(" %d",nim_status.agc);
m_agc=t;
// t.Format(" %d",m_demod->m_status.agc2);
// m_agc2=t;
//-----df-----
if(nim_status.df>0) t.Format(" +%.3f",double(nim_status.df)/1000.);
else t.Format(" %.3f",double(nim_status.df)/1000.);
m_df=t;
//-----PR-----
switch(nim_status.pr)
{
case 0: /* PR 1/2 */
m_pr=" 1/2";
break;
case 1: /* PR 2/3 */
m_pr=" 2/3";
break;
case 2: /* PR 3/4 */
m_pr=" 3/4";
break;
case 3: /* PR 5/6 */
m_pr=" 5/6";
break ;
case 4: /* PR 6/7 */
m_pr=" 6/7";
break;
case 5: /* PR 7/8 */
m_pr=" 7/8";
break;
default :
break;
}
//-----BER-----
t.Format(" %.3e",double(nim_status.viterbi_ber)*1.e-7);
m_vber=t;
// //-----spectral inversion-----
// if(m_demod->m_status.spectral_inversion)
// m_spectral_inversion=" invert";
// else
// m_spectral_inversion=" normal";
m_edit_update="updating";
int i;
for(i=1;i<=update_count;i++){
m_edit_update+=".";
}
UpdateData(FALSE);
}
void Cnim::init_dialog_status()
{
long status=0;
m_status_lock.LoadBitmaps( IDB_BITMAP_lump_black,IDB_BITMAP_lump_black,0,0 );
m_status_lock.SizeToContent( ); m_status_lock.Invalidate( TRUE );
m_status_lock2.LoadBitmaps( IDB_BITMAP_lump_black,IDB_BITMAP_lump_black,0,0 );
m_status_lock2.SizeToContent( ); m_status_lock2.Invalidate( TRUE );
m_status_lock3.LoadBitmaps( IDB_BITMAP_lump_black,IDB_BITMAP_lump_black,0,0 );
m_status_lock3.SizeToContent( ); m_status_lock3.Invalidate( TRUE );
m_status_lock4.LoadBitmaps( IDB_BITMAP_lump_black,IDB_BITMAP_lump_black,0,0 );
m_status_lock4.SizeToContent( ); m_status_lock4.Invalidate( TRUE );
CString t;
t.Format(" -");
//V0.03[xxxxxx]
//-----baud-----
m_baud=t;
//
//-----agc-----
m_agc=t;
m_agc2=t;
//-----PR-----
m_pr=t;
//-----spectral inversion-----
m_spectral_inversion=t;
//-----df-----
m_df=t;
//-----BER-----
m_vber=t;
}
void Cnim::start_timer()
{
SetTimer(0,update_term,NULL);
}
long Cnim::stb0899_getdata(long address, long baseaddress)
{
long data[10]={0,0,0,0};
m_i2c.start_s();
m_i2c.data_s(demod.slave_address); m_i2c.a_s();
m_i2c.data_s(0xF3); m_i2c.a_s();
m_i2c.data_s(0xFC); m_i2c.a_s();
//
m_i2c.data_s( baseaddress&0xFF ); m_i2c.a_s();
m_i2c.data_s((baseaddress>>8)&0xFF); m_i2c.a_s();
m_i2c.data_s((baseaddress>>16)&0xFF); m_i2c.a_s();
m_i2c.data_s((baseaddress>>24)&0xFF); m_i2c.a_s();
m_i2c.stop_s();
//0-----
m_i2c.start_s();
m_i2c.data_s(demod.slave_address); m_i2c.a_s();
m_i2c.data_s( (address>>8)&0xFF ); m_i2c.a_s();
m_i2c.data_s( address&0xFF ); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(demod.slave_address|0x01); m_i2c.a_s();
data[0]=m_i2c.data_g(); m_i2c.a_s();
m_i2c.stop_s();
//1-----
m_i2c.start_s();
m_i2c.data_s(demod.slave_address); m_i2c.a_s();
m_i2c.data_s( (address>>8)&0xFF ); m_i2c.a_s();
m_i2c.data_s( (address&0xFF)+1 ); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(demod.slave_address|0x01); m_i2c.a_s();
data[1]=m_i2c.data_g(); m_i2c.a_s();
m_i2c.stop_s();
//2-----
m_i2c.start_s();
m_i2c.data_s( demod.slave_address ); m_i2c.a_s();
m_i2c.data_s( (address>>8)&0xFF ); m_i2c.a_s();
m_i2c.data_s( (address&0xFF)+2 ); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(demod.slave_address|0x01); m_i2c.a_s();
data[2]=m_i2c.data_g(); m_i2c.a_s();
m_i2c.stop_s();
//3-----
m_i2c.start_s();
m_i2c.data_s(demod.slave_address); m_i2c.a_s();
m_i2c.data_s( (address>>8)&0xFF ); m_i2c.a_s();
m_i2c.data_s( (address&0xFF)+3 ); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(demod.slave_address|0x01); m_i2c.a_s();
data[3]=m_i2c.data_g(); m_i2c.a_s();
m_i2c.stop_s();
return data[0]|(data[1]<<8)|(data[2]<<16)|(data[3]<<24);
}
//???
long Cnim::stb0899_getdata_0xFAFC(long address, long baseaddress)
{
long data[10]={0,0,0,0};
m_i2c.start_s();
m_i2c.data_s(demod.slave_address); m_i2c.a_s();
m_i2c.data_s(0xFA); m_i2c.a_s();
m_i2c.data_s(0xFC); m_i2c.a_s();
m_i2c.data_s(0xFA); m_i2c.a_s();
m_i2c.data_s(0xFD); m_i2c.a_s();
m_i2c.data_s(0xFA); m_i2c.a_s();
m_i2c.data_s(0xFE); m_i2c.a_s();
m_i2c.data_s(0xFA); m_i2c.a_s();
m_i2c.data_s(0xFF); m_i2c.a_s();
m_i2c.data_s( baseaddress&0xFF ); m_i2c.a_s();
m_i2c.data_s((baseaddress>>8)&0xFF); m_i2c.a_s();
m_i2c.data_s((baseaddress>>16)&0xFF); m_i2c.a_s();
m_i2c.data_s((baseaddress>>24)&0xFF); m_i2c.a_s();
m_i2c.stop_s();
//0-----
m_i2c.start_s();
m_i2c.data_s(demod.slave_address); m_i2c.a_s();
m_i2c.data_s( (address>>8)&0xFF ); m_i2c.a_s();
m_i2c.data_s( address&0xFF ); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(demod.slave_address|0x01); m_i2c.a_s();
data[0]=m_i2c.data_g(); m_i2c.a_s();
m_i2c.stop_s();
//1-----
m_i2c.start_s();
m_i2c.data_s(demod.slave_address); m_i2c.a_s();
m_i2c.data_s( (address>>8)&0xFF ); m_i2c.a_s();
m_i2c.data_s( (address&0xFF)+1 ); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(demod.slave_address|0x01); m_i2c.a_s();
data[1]=m_i2c.data_g(); m_i2c.a_s();
m_i2c.stop_s();
//2-----
m_i2c.start_s();
m_i2c.data_s( demod.slave_address ); m_i2c.a_s();
m_i2c.data_s( (address>>8)&0xFF ); m_i2c.a_s();
m_i2c.data_s( (address&0xFF)+2 ); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(demod.slave_address|0x01); m_i2c.a_s();
data[2]=m_i2c.data_g(); m_i2c.a_s();
m_i2c.stop_s();
//3-----
m_i2c.start_s();
m_i2c.data_s(demod.slave_address); m_i2c.a_s();
m_i2c.data_s( (address>>8)&0xFF ); m_i2c.a_s();
m_i2c.data_s( (address&0xFF)+3 ); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(demod.slave_address|0x01); m_i2c.a_s();
data[3]=m_i2c.data_g(); m_i2c.a_s();
m_i2c.stop_s();
return data[0]|(data[1]<<8)|(data[2]<<16)|(data[3]<<24);
}
void Cnim::OnSetfocusCOMBOfreq()
{
kill_timer();
}
void Cnim::OnSetfocusCOMBOsymbolrate()
{
kill_timer();
}
long Cnim::tun_getfreq(int *register_) //kHz
//double Cnim::tun_getfreq() //kHz
{
return m_pll->tun_getfreq(register_);
}
void Cnim::set_dialog_status_error()
{
init_dialog_status();
m_edit_update="i2c error!!";
m_update_data=0;
UpdateData(FALSE);
}
HBRUSH Cnim::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(*pWnd == *GetDlgItem(IDC_EDIT_update)) //偙偺晹昳偺応崌偩偗
{
if(m_i2c.check_i2c()){
//pDC->SetBkColor(RGB(255,0,0));
pDC->SetTextColor(RGB(255,0,0));
}
// double data;
// sscanf(m_ldpc_ber, "%lf", &data );
// if(data<6.e-2){
// pDC->SetBkColor(RGB(255,0,0)); //攚宨傪崟偵
// pDC->SetTextColor(RGB(255,255,255)); //暥帤傪敀偵
// }
}
return hbr;
}
BOOL Cnim::i2c_read_write(BOOL mode, int ChipAddress, int *Data, int NbData)
//BOOL Cnim::i2c_read_write(BOOL mode, unsigned char ChipAddress, unsigned char *Data, int NbData)
{
return m_i2c.i2c_read_write(mode,ChipAddress, Data, NbData);
// //write:mode=1 , read:mode=0
// return ((CMainFrame*)m_pParent)->m_i2c.i2c_read_write(mode,ChipAddress, Data, NbData);
}
//******************************************************************************************************************************************************
//******************************************************************************************************************************************************
//******************************************************************************************************************************************************
//******************************************************************************************************************************************************
//******************************************************************************************************************************************************
//******************************************************************************************************************************************************
//******************************************************************************************************************************************************
//******************************************************************************************************************************************************
//******************************************************************************************************************************************************
//******************************************************************************************************************************************************
void Cnim::bus_open()
{
m_demod->bus_open(demod.reg);
}
void Cnim::bus_close()
{
//0288
m_demod->bus_close(demod.reg);
}
int Cnim::demod_address()
{
return demod.slave_address;
}
void Cnim::OnBUTTONtest2()
{
int data[10]={0x0C,0x1C,0xFD,0x64};
//unsigned char data[10]={0x0C,0x1C,0xFD,0x64};
i2c_read_write(1,0xC0,&data[0],5);
}
void Cnim::demod_setdata(int address, int data)
{
int data_[10];
data_[0]=address;
data_[1]=data;
i2c_read_write(1,demod_address(),data_,2);
}
void Cnim::demod_getdata(int address, int *data)
{
i2c_read_write(1,demod_address(),&address,1);
i2c_read_write(0,demod_address(),data,1);
}
void Cnim::get_status()
{//@@@@@
//read only data
m_demod->demod_288_read_data_read_only(demod.reg);
//status
nim_status.timing_lock=m_demod->demod_288_timing_lock(demod.reg);
nim_status.carrire_found=m_demod->demod_288_cf(demod.reg);
nim_status.puncture_rate_found=m_demod->demod_288_prf(demod.reg);
nim_status.lk=m_demod->demod_288_lk(demod.reg);
//df
nim_status.df=m_demod->demod_288_calc_derot_freq(demod.reg);
//VBER(BER)
nim_status.viterbi_ber=m_demod->demod_288_get_error(demod.reg);
//PR
nim_status.pr=m_demod->demod_288_pr(demod.reg);
//AGC
nim_status.agc=m_demod->demod_288_agc(demod.reg);
//spectral inversion
//nim_status.spectral_inversion=m_demod->demod_288_spectral_inversion(demod.reg);
//V0.03[xxxxxx]
nim_status.symbolrate=m_demod->demod_288_get_symbolrate(demod.reg)/1000; //[sps]->[ksps]
//CString t; t.Format("%d",nim_status.symbolrate); MessageBox(t);
//V0.05[061204]
//lock again after signal re-connected
if( check_lock() )
nim_status.df_last_locked=nim_status.df;
}
void Cnim::open_dialog_ber()
{
//modless dialog
//if (m_demod == NULL)
if (!m_ber->IsWindowVisible())
{
if (1)
{
//m_demod = new Cdemod(this);
if (m_ber->Create() == TRUE){
// GetDlgItem(IDOK)->EnableWindow(FALSE);
}
}
else
m_ber->SetActiveWindow();
}
}
void Cnim::BoxDone_ber()
{
BoxDone();
}
void Cnim::OnBUTTONber()
{
open_dialog_ber();
}
//V0.03[xxxxxx]
BOOL Cnim::tun_setbw(long baud_, int *byte_) //ksps
{
BOOL flag=0;
m_pll->tun_setbw(baud_,byte_);
return flag;
}
void Cnim::OnBUTTONautosearch()
{
kill_timer();
open_dialog_autosearch();
}
void Cnim::BoxDone_autosearch()
{
BoxDone();
}
void Cnim::open_dialog_autosearch()
{
//modless dialog
if (!m_autosearch->IsWindowVisible())
{
if (1)
{
if (m_autosearch->Create() == TRUE){
}
}
else
m_autosearch->SetActiveWindow();
}
}
void Cnim::demod_read_all_data()
{
m_demod->demod_read_all_data();
}
//V0.04[061109] [STB0288+ix2410]
void Cnim::demod_288_init()
{
int register_[0x1FF];
int i;
for(i=0;i<0xFF;i++) register_[i]=demod.reg[i];
m_demod->demod_288_init(register_);
}
BOOL Cnim::check_signal()
{
BOOL flag=0;
long freq_;
long baud_;
int byte_[10];
int register_[0x1FF];
int i;
freq_=tuner.freq/1000; //Hz -> kHz [Hz:unsigned long!!]
baud_=demod.symbolrate/1000; //sps -> ksps
for(i=0;i<5;i++) byte_[i]=tuner.byte[i];
for(i=0;i<0xFF;i++) register_[i]=demod.reg[i];
return m_demod->check_signal(freq_,baud_,byte_,register_); //kHz,ksps
}
BOOL Cnim::demod_288_algo()
{
long freq_;
long baud_;
int byte_[10];
int register_[0x1FF];
int i;
freq_=tuner.freq/1000; //Hz -> kHz [Hz:unsigned long!!]
baud_=demod.symbolrate/1000; //sps -> ksps
for(i=0;i<5;i++) byte_[i]=tuner.byte[i];
for(i=0;i<0xFF;i++) register_[i]=demod.reg[i];
return m_demod->demod_288_algo(freq_,baud_,byte_,register_); //kHz,ksps
}
//V0.05[061204]
//lock again after signal re-connected
void Cnim::observe_tuner()
{
if(!check_lock()) m_demod->demod_288_rewrite_derotetor(demod.reg);
}
//V0.05[061204]
//lock again after signal re-connected
BOOL Cnim::check_lock()
{
if( (nim_status.timing_lock) && (nim_status.carrire_found) && (nim_status.puncture_rate_found) && (nim_status.lk) )
return TRUE;
else
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -