⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nim.cpp

📁 通过PC并口模拟I2C信号
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -