📄 nim.cpp
字号:
// nim.cpp : 僀儞僾儕儊儞僥乕僔儑儞 僼傽僀儖
//
#include "stdafx.h"
#include "demo.h"
#include "nim.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Cnim 僟僀傾儘僌
//-----
#include"MainFrm.h"
//-----
#define update_term 500
#define update_count_max 4
Cnim::Cnim(CWnd* pParent /*=NULL*/)
: CDialog(Cnim::IDD, pParent)
{
m_pParent=pParent;
m_nID=Cnim::IDD;
//{{AFX_DATA_INIT(Cnim)
m_freq = _T("");
m_symbolrate = _T("");
m_update_data = -1;
m_agc = _T("");
m_agc2 = _T("");
m_spectral_inversion = _T("");
m_edit_update = _T("");
m_df = _T("");
m_vber = _T("");
m_qpskber = _T("");
m_pr = _T("");
m_baud = _T("");
//}}AFX_DATA_INIT
}
void Cnim::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Cnim)
DDX_Control(pDX, IDC_BUTTON_status_lock4, m_status_lock4);
DDX_Control(pDX, IDC_BUTTON_status_lock3, m_status_lock3);
DDX_Control(pDX, IDC_BUTTON_status_lock2, m_status_lock2);
DDX_Control(pDX, IDC_BUTTON_status_lock, m_status_lock);
DDX_CBString(pDX, IDC_COMBO_freq, m_freq);
DDX_CBString(pDX, IDC_COMBO_symbolrate, m_symbolrate);
DDX_Radio(pDX, IDC_RADIO_update, m_update_data);
DDX_Text(pDX, IDC_EDIT_agc, m_agc);
DDX_Text(pDX, IDC_EDIT_agc2, m_agc2);
DDX_Text(pDX, IDC_EDIT_spectral_inversion, m_spectral_inversion);
DDX_Text(pDX, IDC_EDIT_update, m_edit_update);
DDX_Text(pDX, IDC_EDIT_df, m_df);
DDX_Text(pDX, IDC_EDIT_vber, m_vber);
DDX_Text(pDX, IDC_EDIT_qpskber, m_qpskber);
DDX_Text(pDX, IDC_EDIT_pr, m_pr);
DDX_Text(pDX, IDC_EDIT_baud, m_baud);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(Cnim, CDialog)
//{{AFX_MSG_MAP(Cnim)
ON_BN_CLICKED(IDC_BUTTON_test, OnBUTTONtest)
ON_BN_CLICKED(IDC_BUTTON_demod, OnBUTTONdemod)
ON_BN_CLICKED(IDC_BUTTON_pll, OnBUTTONpll)
ON_BN_CLICKED(IDC_BUTTON_mop, OnBUTTONmop)
ON_BN_CLICKED(IDC_BUTTON_receive, OnBUTTONreceive)
ON_CBN_KILLFOCUS(IDC_COMBO_freq, OnKillfocusCOMBOfreq)
ON_CBN_KILLFOCUS(IDC_COMBO_symbolrate, OnKillfocusCOMBOsymbolrate)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_RADIO_update, OnRADIOupdate)
ON_CBN_SETFOCUS(IDC_COMBO_freq, OnSetfocusCOMBOfreq)
ON_CBN_SETFOCUS(IDC_COMBO_symbolrate, OnSetfocusCOMBOsymbolrate)
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_BUTTON_test2, OnBUTTONtest2)
ON_BN_CLICKED(IDC_BUTTON_init, OnBUTTONinit)
ON_BN_CLICKED(IDC_BUTTON_ber, OnBUTTONber)
ON_BN_CLICKED(IDC_BUTTON_autosearch, OnBUTTONautosearch)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Cnim 儊僢僙乕僕 僴儞僪儔
void Cnim::OnOK()
{
kill_timer();
//-----
((CMainFrame*)m_pParent)->BoxDone_nim();
// DestroyWindow();
//-----
m_pll->DestroyWindow();
m_demod->DestroyWindow();
CDialog::OnOK();
}
void Cnim::OnCancel()
{
// CDialog::OnCancel();
}
void Cnim::OnBUTTONtest()
{
demod_read_all_data();
//
// update();
// // m_demod->demod_288_calc_symbolrate_test(demod.reg);
//
//
// // //BinaryFloatDiv(SymbolRate,MasterClock_Hz,20);
// //
// // CString t;
// // t.Format("%X",m_demod->BinaryFloatDiv(27500,100000,20)); MessageBox(t);
// // // t.Format("%X",m_demod->BinaryFloatDiv(50000,100000,20)); MessageBox(t);
// // ;
// //
// // //open_dialog_ber();
}
BOOL Cnim::Create()
{
return CDialog::Create(m_nID,m_pParent);
}
//----- -----
//----- -----
//----- -----
//----- -----
//----- -----
void Cnim::open_dialog_demod()
{
//modless dialog
//if (m_demod == NULL)
if (!m_demod->IsWindowVisible())
{
if (1)
{
//m_demod = new Cdemod(this);
if (m_demod->Create() == TRUE){
// GetDlgItem(IDOK)->EnableWindow(FALSE);
}
}
else
m_demod->SetActiveWindow();
}
}
void Cnim::BoxDone_demod()
{
BoxDone();
// //m_demod=NULL;
// BoxDone();
}
void Cnim::open_dialog_pll()
{
//modless dialog
//if (m_pll == NULL)
if (!m_pll->IsWindowVisible())
{
//m_pll = new Cpll(this);
// m_pll->tuner->freq=d[1];
// int i;
// for(i=0;i<5;i++) m_pll->tuner->byte[i]=d[20+i];
if (m_pll->Create() == TRUE){
// GetDlgItem(IDOK)->EnableWindow(FALSE);
}
}
else
m_pll->SetActiveWindow();
}
void Cnim::BoxDone_pll()
{
//m_pll=NULL;
BoxDone();
}
void Cnim::BoxDone()
{
if( (m_pll==NULL) &&(m_demod==NULL)/**/ ){
// GetDlgItem(IDOK)->EnableWindow();
}
}
void Cnim::OnBUTTONdemod()
{
kill_timer();
open_dialog_demod();
}
void Cnim::OnBUTTONpll()
{
kill_timer();
open_dialog_pll();
}
void Cnim::OnBUTTONmop()
{
open_dialog_mop();
}
void Cnim::BoxDone_mop()
{
m_mop=NULL;
BoxDone();
}
void Cnim::open_dialog_mop()
{
//modless dialog
if (m_mop == NULL)
{
m_mop = new Cmop(this);
if (m_mop->Create() == TRUE){
// GetDlgItem(IDOK)->EnableWindow(FALSE);
}
}
else
m_mop->SetActiveWindow();
}
BOOL Cnim::OnInitDialog()
{
CDialog::OnInitDialog();
init_pll_demod_dialog();
init_combo();
set_dialog();
init_dialog_status();
init_i2c();
update_on_off=0;
update_count=0;
return TRUE; // 僐儞僩儘乕儖偵僼僅乕僇僗傪愝掕偟側偄偲偒丄栠傝抣偼 TRUE 偲側傝傑偡
// 椺奜: OCX 僾儘僷僥傿 儁乕僕偺栠傝抣偼 FALSE 偲側傝傑偡
}
void Cnim::set_dialog()
{
CString t;
t.Format(" %.3lf",double(tuner.freq)/1000000.); //Hz -> MHz
// t.Format(" %.3lf",tuner.freq_/1000.); //Hz -> MHz
m_freq=t;
t.Format(" %.3lf",double(demod.symbolrate)/1000000.); //sps -> Msps
// t.Format(" %.3lf",demod.symbolrate_/1000.); //ksps -> Msps
m_symbolrate=t;
UpdateData(FALSE);
}
void Cnim::get_dialog()
{
// long data;
double data_double;
UpdateData(TRUE);
//freq
sscanf(m_freq, "%lf", &data_double );
tuner.freq=unsigned long(data_double*1000000.);//hz
// tuner.freq_=data_double*1000.;//kHz
//sybmolrate
sscanf(m_symbolrate, "%lf", &data_double );
demod.symbolrate=int(data_double*1000000.);//sps
// demod.symbolrate_=data_double*1000.;//ksps
}
void Cnim::OnBUTTONinit()
{
kill_timer();
nim_reset();
}
void Cnim::OnBUTTONreceive()
{
get_dialog();
m_demod->message_reset();
nim_reset();
nim_receive();
// m_demod->show_message();
//____________________________________________________________
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
m_demod->message_reset();
CString t;
t.Format("%d\n",nim_status.signal_type);m_demod->message(t);
t.Format("%ld\n",nim_status.symbolrate);m_demod->message(t);
t.Format("%ld\n",nim_status.freq);m_demod->message(t);
//m_demod->show_message();
//____________________________________________________________
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
start_timer();
}
BOOL Cnim::nim_reset()
{
BOOL flag=0;
m_demod->demod_288_init(demod.reg);
return flag;
}
BOOL Cnim::nim_receive()
{
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];
//CString t; t.Format("freq_=%ld,%ld",freq_,tuner.freq); MessageBox(t);
m_demod->nim_receive(freq_,baud_,byte_,register_); //kHz,ksps
//V0.02[060613]
//update register value after "nim_receive"
for(i=0;i<5;i++) tuner.byte[i]=byte_[i];
for(i=0;i<0xFF;i++) demod.reg[i]=register_[i];
return flag;
}
BOOL Cnim::tun_setfreq(long freq,long baud,int *byte) //kHz
//BOOL Cnim::tun_setfreq()
{
BOOL flag=0;
m_pll->tun_setfreq(freq,baud,byte);//kHz
return flag;
}
//iiiii
void Cnim::init_i2c()
{
m_i2c.LINK_IC_ADDRESS=demod.slave_address; //DLL;
m_i2c.Init();
}
void Cnim::test()
{
}
void Cnim::i2c_write(int *data, int num)
{
int data_[10];
int i;
for(i=1;i<num;i++) data_[i-1]=data[i];
i2c_read_write(1,data[0],&data_[0],num-1);
//unsigned char data_[10];
//int i;
//for(i=1;i<num;i++) data_[i-1]=data[i];
//i2c_read_write(1,data[0],&data_[0],num-1);
}
void Cnim::init_combo()
{
CString t;
double symbolrate[100]={ 1. ,2. ,5. ,10. ,15. ,20. ,21.096 ,22. ,27.5 , 30. ,35. ,40. ,42. ,45. ,-1};
//double symbolrate[100]={ 20. , 24.45 , 27.5 , 30. ,-1};
CComboBox* pCB_freq=(CComboBox*)GetDlgItem(IDC_COMBO_freq);
while( (pCB_freq->DeleteString(0))>0 );
CComboBox* pCB_symbolrate=(CComboBox*)GetDlgItem(IDC_COMBO_symbolrate);
while( (pCB_symbolrate->DeleteString(0))>0 );
int i;
for(i=950 ; i<=2150; i+=100){
t.Format("%.3lf",double(i) );
pCB_freq->AddString(t);
}
i=0;
do{
t.Format("%.3lf",symbolrate[i] );
pCB_symbolrate->AddString(t);
i++;
}while(symbolrate[i]>0);
}
void Cnim::init_pll_demod_dialog()
{
m_demod = new Cdemod(this);
m_pll = new Cpll(this);
m_ber = new Cber(this);
m_autosearch = new Cautosearch(this);
}
void Cnim::OnKillfocusCOMBOfreq()
{
get_dialog();
set_dialog();
}
void Cnim::OnKillfocusCOMBOsymbolrate()
{
get_dialog();
set_dialog();
}
int Cnim::pll_getdata(int *byte_)
{
bus_open();
int data[10];
i2c_read_write(0,byte_[0],data,1);
return data[0];
}
void Cnim::OnTimer(UINT nIDEvent)
{
if(nIDEvent==0)
{
UpdateData(TRUE);
update();
//V0.02[060125]
update_count+=1;
if(update_count>update_count_max) update_count=0;
if(m_update_data) m_update_data=0;
else m_update_data=1;
UpdateData(FALSE);
//V0.05[061204]
//lock again after signal re-connected
observe_tuner();
}
CDialog::OnTimer(nIDEvent);
}
void Cnim::kill_timer()
{
update_on_off=0;
m_update_data=1;
m_edit_update="";
KillTimer(0);
UpdateData(FALSE);
}
void Cnim::update()
{
if(!m_i2c.check_i2c()) set_dialog_status(); //OK
else {
//kill_timer();
set_dialog_status_error(); //ERROR!
}
}
void Cnim::OnRADIOupdate()
{
if(update_on_off){
kill_timer();
update_on_off=0;
}
else{
update_on_off=1;
// SetTimer(0,500,NULL);
SetTimer(0,update_term,NULL);
}
UpdateData(FALSE);
}
long Cnim::test2()
{
long data[10]={0,0,0,0};
m_i2c.start_s();
m_i2c.data_s(0xD0); m_i2c.a_s();
m_i2c.data_s(0xF3); m_i2c.a_s(); //m_i2c.data_s(/*0xF3*/0xFA); m_i2c.a_s();
m_i2c.data_s(0xFC); m_i2c.a_s();
//
// m_i2c.data_s(0x40); m_i2c.a_s();
// m_i2c.data_s(0x04); m_i2c.a_s();
m_i2c.data_s(0x00); m_i2c.a_s();
m_i2c.data_s(0x00); m_i2c.a_s();
m_i2c.data_s(0x00); m_i2c.a_s();
m_i2c.data_s(0x00); m_i2c.a_s();
m_i2c.stop_s();
//0-----
m_i2c.start_s();
m_i2c.data_s(0xD0); m_i2c.a_s();
m_i2c.data_s(0xF3); m_i2c.a_s();
m_i2c.data_s(0x0C); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(0xD1); 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(0xD0); m_i2c.a_s();
m_i2c.data_s(0xF3); m_i2c.a_s();
m_i2c.data_s(0x0D); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(0xD1); 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(0xD0); m_i2c.a_s();
m_i2c.data_s(0xF3); m_i2c.a_s();
m_i2c.data_s(0x0E); m_i2c.a_s();
m_i2c.stop_s();
m_i2c.start_s();
m_i2c.data_s(0xD1); m_i2c.a_s();
data[2]=m_i2c.data_g(); m_i2c.a_s();
m_i2c.stop_s();
//3-----
m_i2c.start_s();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -