www.pudn.com > pCom.rar > CommandMeter.cpp
// CommandMeter.cpp: implementation of the CommandMeter class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CommandMeter.h"
#include "Decl-32.h"
#include ".\commandmeter.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define WM_RADIOALERT (WM_USER+301)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CommandMeter::CommandMeter()
{
m_gsm_loss="0.5";
m_dcs_loss="0.7";
m_TestSet = ibdev(0,m_padd_TestSet,m_sadd_TestSet,11,1,1);
}
CommandMeter::~CommandMeter()
{
}
int CommandMeter::InitMeter()
{
m_TestSet = ibdev(0,m_padd_TestSet,m_sadd_TestSet,11,1,1);
Sleep(200);
WriteCommand(m_TestSet,"SYST:REM:ADDR:SEC 2,'GSM900MS_Sig'");
WriteCommand(m_TestSet,"SYST:REM:ADDR:SEC 4,'GSM1800MS_Sig'");
m_gsm = ibdev(0,m_padd_TestSet,98,13,1,1);
if(m_gsm<0)
{
return false;
}
m_dcs = ibdev(0,m_padd_TestSet,100,13,1,1);
if(m_dcs<0)
{
return false;
}
WriteCommand(m_TestSet,"SYST:PRES:ALL");
WriteCommand(m_TestSet,"*cls");
WriteCommand(m_TestSet,"CONF:SYNC:FREQ:REF 10MHZ");
WriteCommand(m_TestSet,"CONF:SYNC:FREQ:REF:MODE INT");
////////GSM SET//////////////////////////////////////////////////////////////////////////
WriteCommand(m_gsm,"ABOR:SENS:SSH");
WriteCommand(m_gsm,"ABOR:POW:MPR");
// WriteCommand(m_gsm,"PROC:SIGN:ACT SOFF");
WriteCommand(m_gsm,"INP:STAT RF2");
WriteCommand(m_gsm,"OUTP:STAT RF2");
WriteCommand(m_gsm,"conf:bss:lev:utim -80");
WriteCommand(m_gsm,"conf:bss:lev:unt -20");
WriteCommand(m_gsm,"conf:bss:timeslot 4");
WriteCommand(m_gsm,"SENS:LEV:ATT LNO");
WriteCommand(m_gsm,"CONF:POW:CONT SCAL,5");
WriteCommand(m_gsm,"CONF:POW:MPR:CONT:REP SING,NONE,NONE");
WriteCommand(m_gsm,"CONF:POW:TIME:MODE GSM");
WriteCommand(m_gsm,"CONF:POW:MPR:CONT SCAL,5");
WriteCommand(m_gsm,"CONF:BSS:SPE HAND");
WriteCommand(m_gsm,"CONF:RXQ:BER1:CONT:LEV:UTIM -104");
WriteCommand(m_gsm,"CONF:RXQ:BER1:CONT:LEV:UNT -20.0");
WriteCommand(m_gsm,"CONF:RXQ:CONT:HTIM 0.1,0.1");
WriteCommand(m_gsm,"CONF:RXQ:BER1:CONT:REP NONE,NONE");
WriteCommand(m_gsm,"CONF:RXQ:BER1:CONT BBB,88");
WriteCommand(m_gsm,"CONF:SENS:SSH:TSET AP1");
WriteCommand(m_gsm,"LEV:MODE PCL");
WriteCommand(m_gsm,"CONF:ARR:SPEC:MOD:RANG -0.6,11");
WriteCommand(m_gsm,"CONF:ARR:SPEC:SWIT:RANG -1.8,9");
WriteCommand(m_gsm,"CONF:SPEC:MOD:CONT SCAL,20");
WriteCommand(m_gsm,"CONF:SPEC:SWIT:CONT SCAL,20");
WriteCommand(m_gsm,"CONF:MOD:CONT SCAL,10");
////////DCS Set//////////////////////////////////////////////////////////////////////////
WriteCommand(m_dcs,"ABOR:SENS:SSH");
WriteCommand(m_dcs,"ABOR:POW:MPR");
// WriteCommand(m_dcs,"PROC:SIGN:ACT SOFF");
WriteCommand(m_dcs,"INP:STAT RF2");
WriteCommand(m_dcs,"OUTP:STAT RF2");
WriteCommand(m_dcs,"conf:bss:lev:utim -80");
WriteCommand(m_dcs,"conf:bss:lev:unt -20");
WriteCommand(m_dcs,"conf:bss:timeslot 4");
WriteCommand(m_dcs,"SENS:LEV:ATT LNO");
WriteCommand(m_dcs,"CONF:POW:CONT SCAL,5");
WriteCommand(m_dcs,"CONF:POW:MPR:CONT:REP SING,NONE,NONE");
WriteCommand(m_dcs,"CONF:POW:TIME:MODE GSM");
WriteCommand(m_dcs,"CONF:POW:MPR:CONT SCAL,5");
WriteCommand(m_dcs,"CONF:BSS:SPE HAND");
WriteCommand(m_dcs,"CONF:RXQ:BER1:CONT:LEV:UTIM -104");
WriteCommand(m_dcs,"CONF:RXQ:BER1:CONT:LEV:UNT -20.0");
WriteCommand(m_dcs,"CONF:RXQ:CONT:HTIM 0.1,0.1");
WriteCommand(m_dcs,"CONF:RXQ:BER1:CONT:REP NONE,NONE");
WriteCommand(m_dcs,"CONF:RXQ:BER1:CONT BBB,88");
WriteCommand(m_dcs,"CONF:SENS:SSH:TSET AP1");
WriteCommand(m_dcs,"LEV:MODE PCL");
WriteCommand(m_dcs,"CONF:ARR:SPEC:MOD:RANG -0.6,11");
WriteCommand(m_dcs,"CONF:ARR:SPEC:SWIT:RANG -1.8,9");
WriteCommand(m_dcs,"CONF:SPEC:MOD:CONT SCAL,20");
WriteCommand(m_dcs,"CONF:SPEC:SWIT:CONT SCAL,20");
WriteCommand(m_dcs,"CONF:MOD:CONT SCAL,10");
// m_str = "SENS:CORR:LOSS:INP2 "+m_dcs_loss;
// WriteCommand(m_dcs,m_str);
// m_str = "SENS:CORR:LOSS:OUTP2 "+m_dcs_loss;
// WriteCommand(m_dcs,m_str);
//////////////////////////////////////////////////////////////////////////
WriteCommand(m_gsm,"CONF:BSS:CHAN 2");
WriteCommand(m_gsm,"CONF:NETW:POW 5");
WriteCommand(m_gsm,"proc:sign:act son");
return true;
}
int CommandMeter::WriteCommand(int m_dev, CString command)
{
ibwrt(m_dev,command.GetBuffer(command.GetLength()),command.GetLength());
if(iberr)
{
ibclr(m_dev);
return false;
}
return true;
}
CString CommandMeter::QueryResult(int m_dev)
{
char buf[300]="",get_buf[300]="";
int i=0,j=0;
//////////////////////////////////
ibrd(m_dev,buf,300);
if(iberr||strcmp(buf,get_buf)==0)
{
// AfxMessageBox("some error occured during reading data!!!");
ibclr(m_dev);
return "999999";
}
////////////////////////////////////////////////////////////////////////////
while(i<299)
{
if(buf[i]!='\n') //此循环用于将有时返回数据中
{ //的双引号去掉,以便返回正确数据
if(buf[i]!='"') //并取得数组中的有用信息
{
get_buf[j] = buf[i];
j++;
}
}
else
break;
i++;
}
get_buf[j] = '\0';
// AfxMessageBox(get_buf);
///////////////////////////////////以下的动态数组是否可以不用?
// if((str = new char[j])==NULL) //apply dynamic for memory
// AfxMessageBox("can't allocate more memory\n");
// for(i=0;iGetMainWnd()->PostMessage(WM_RADIOALERT);
str = QueryResult(m_dev);
if(str.Compare("CEST")==0)
{
return true;
}
}
if(str.Compare("SOFF")==0)
WriteCommand(m_dev,"proc:sign:act son");
Sleep(350);
}
return false;
}
int CommandMeter::PickData(CString m_result)
{
/*
*/
int i = 0,j = 0,k,m_last_pot;
for(i=0;i<30;i++)
{
pot[i] = 0;
}
for(i=0;i<31;i++)
{
m_pot_data[i] = "";
}
i = 0;
m_last_pot = m_result.GetLength()-1;
do {
k = m_result.Find(",",i);
if(k !=-1)
{
pot[j] = k;
j++;
i = k+1;
}
else
{
break;
}
} while(im_pot_data[0] = m_result;
}
else
{
for(i=0;i<=j;i++)
{
if(i==0)
{
this->m_pot_data[i] = m_result.Mid(0,pot[0]);
}
else if(i==j)
{
this->m_pot_data[i] = m_result.Mid(pot[i-1]+1,m_last_pot-pot[i-1]);
}
else
{
this->m_pot_data[i] = m_result.Mid(pot[i-1]+1,pot[i]-pot[i-1]-1);
}
}
}
for(i=0;i<=j;i++)
{
if(atof(m_pot_data[i])!=0.0)
{
m_pot_data[i] = this->ConvertData(m_pot_data[i]);
}
}
return true;
}
CString CommandMeter::ConvertData(CString str)
{
double m_float_data;
CString m_str_data;
m_float_data = atof(str);
m_str_data.Format("%0.2f",m_float_data);
return m_str_data;
}
int CommandMeter::TestRSSI(int m_dev)
{
CString m_command,m_count;
int m_first,m_last,i = 0;
WriteCommand(m_dev,"rrep:count?");
m_count = QueryResult(m_dev);
m_first = atoi(m_count);
do
{
WriteCommand(m_dev,"rrep:count?");
m_count = QueryResult(m_dev);
m_last = atoi(m_count);
if(m_last-m_first>3)
break;
i++;
Sleep(20);
}while(i<200);
m_command = "rrep:rxl?";
WriteCommand(m_dev,m_command);
CString m_RSSI = QueryResult(m_dev);
PickData(m_RSSI);
return true;
}
int CommandMeter::TestBitErr(int m_dev)
{
CString m_result;
WriteCommand(m_dev,"init:rxq:ber");
WriteCommand(m_dev,"fetc:rxq:ber?");
m_result = QueryResult(m_dev);
///////
this->PickData(m_result);
////////
return true;
}
int CommandMeter::EndCall()
{
// WriteCommand(m_dcs,"PROC:SIGN:ACT CREL");
// WriteCommand(m_dcs,"proc:sign:act soff");
// WriteCommand(m_gsm,"proc:sign:act soff");
WriteCommand(m_gsm,"PROC:SIGN:ACT SON");
Sleep(200);
return true;
}
int CommandMeter::MeasureSpectrum(int m_dev)
{
WriteCommand(m_dev,"INIT:SPEC");
CString str;
WriteCommand(m_dev,"READ:ARR:SPEC:CURRE?");
str=QueryResult(m_dev);
WriteCommand(m_dev,"READ:ARR:SPEC:AVER?");
WriteCommand(m_dev,"READ:ARR:SPEC:MAXI?");
WriteCommand(m_dev,"READ:ARR:SPEC:MINI?");
return true;
}
int CommandMeter::Init850Band(void)
{
return 0;
}
int CommandMeter::Init900Band(void)
{
return 0;
}
int CommandMeter::Init1800Band(void)
{
return 0;
}
int CommandMeter::Init1900Band(void)
{
return 0;
}
int CommandMeter::Handover900To1800(void)
{
WriteCommand(m_dcs,"CONF:BSS:CHAN 517");
WriteCommand(m_dcs,"CONF:NETW:POW 0");
WriteCommand(m_dcs,"CONF:BSS:TCH:LEV:UTIM -80");
//////handover//////////////////////////////////////////////////////////////////////////
WriteCommand(m_gsm,"CONF:HAND:TARG 'GSM1800MsDualBand'");
WriteCommand(m_gsm,"PROC:SIGN:ACT HAND");
for(int i=0;i<10;i++)
{
WriteCommand(m_dcs,"SENS:SIGN:STAT?");
if(QueryResult(m_dcs).Compare("CED")==0)
{
return true;
}
Sleep(100);
}
return false;
}
int CommandMeter::Handover1800To850(void)
{
return 0;
}
int CommandMeter::Handover1800To1900(void)
{
return 0;
}
int CommandMeter::Handover850To1900(void)
{
return 0;
}