📄 freqtest.cpp
字号:
// FreqTest.cpp : implementation file
//
#include "stdafx.h"
#include "TelMateDemo.h"
#include "FreqTest.h"
#include <io.h>
#include <fcntl.h>
#include <sys/stat.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFreqTest dialog
CFreqTest::CFreqTest(CWnd* pParent /*=NULL*/)
: CDialog(CFreqTest::IDD, pParent)
{
//{{AFX_DATA_INIT(CFreqTest)
m_External = _T("");
//}}AFX_DATA_INIT
}
void CFreqTest::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFreqTest)
DDX_Control(pDX, IDC_STOP, m_Stop);
DDX_Control(pDX, IDC_START, m_Start);
DDX_Control(pDX, IDC_LIST, m_FreqList);
DDX_Text(pDX, IDC_EXTERNAL, m_External);
DDV_MaxChars(pDX, m_External, 10);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFreqTest, CDialog)
//{{AFX_MSG_MAP(CFreqTest)
ON_BN_CLICKED(IDC_START, OnStart)
ON_BN_CLICKED(IDC_STOP, OnStop)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_DIAL, OnDial)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFreqTest message handlers
BOOL CFreqTest::OnInitDialog()
{
CDialog::OnInitDialog();
DWORD dwStyle = m_FreqList.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;
dwStyle|=LVS_EX_GRIDLINES;
dwStyle|=LVS_EX_FLATSB;
dwStyle|=LVS_EX_HEADERDRAGDROP;
dwStyle|=LVS_EX_TRACKSELECT;
m_FreqList.SetExtendedStyle(dwStyle);
m_FreqList.ModifyStyle(0,LVS_NOLABELWRAP|LVS_ICON,0);
m_FreqList.InsertColumn(0,(LPTSTR)(LPCTSTR)"频率",LVCFMT_CENTER,100);
m_FreqList.InsertColumn(1,(LPTSTR)(LPCTSTR)"概率",LVCFMT_CENTER,100);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CFreqTest::OnStart()
{
if(TV_IsTalkState())
{
MessageBox("正在通话,不能进行频率分析,请先挂机!","错误",MB_OK|MB_ICONWARNING);
return;
}else if(TV_GetPcState() || TV_GetTelState())
{
MessageBox("话机已被摘机,不能进行频率分析,请先挂机!","错误",MB_OK|MB_ICONWARNING);
return;
}
m_FreqList.DeleteAllItems();
m_lAnaTimes = 0;
m_iAnaTimes = 0;
TV_OffHookCtrl(1);
m_RecDelayTimer=SetTimer(2,1000,NULL);
m_Start.EnableWindow(FALSE);
m_Stop.EnableWindow(TRUE);
}
void CFreqTest::OnStop()
{
TV_StopRecordFile(1);
TV_HangUpCtrl(1);
DeleteFile("c:\\temp.pcm");
if(m_RecTimer != NULL)
{
KillTimer(m_RecTimer);
m_RecTimer =NULL;
}
if(m_RecDelayTimer != NULL)
{
KillTimer(m_RecDelayTimer);
m_RecDelayTimer = NULL;
}
if(m_DialTimer != NULL)
{
KillTimer(m_DialTimer);
m_DialTimer = NULL;
}
TV_Event Event;
while(TV_GetEvent(1,&Event))
{
}
m_Start.EnableWindow(TRUE);
m_Stop.EnableWindow(FALSE);
}
void CFreqTest::OnTimer(UINT nIDEvent)
{
TV_Event Event;
TV_GetEvent(1,&Event);
if(nIDEvent == m_DialTimer)//开始拨叫内线电路
{
KillTimer(nIDEvent);
m_DialTimer = NULL;
TV_StartDial(1,(LPTSTR)(LPCTSTR)m_ExterString);
m_RecDelayTimer=SetTimer(2,1000,NULL);
}
else if(nIDEvent == m_RecDelayTimer)
{
KillTimer(nIDEvent);
m_RecDelayTimer = NULL;
StartRec();
}else if(nIDEvent == m_RecTimer)
{
KillTimer(nIDEvent);
m_RecTimer = NULL;
TV_StopRecordFile(1);
// TV_HangUpCtrl(1);
StartAna();
}
CDialog::OnTimer(nIDEvent);
}
void CFreqTest::StartRec()
{
TV_StartRecordFile(1,(LPTSTR)(LPCTSTR)("c:\\temp.pcm"),0,0x1000000L);
m_RecTimer=SetTimer(3,1000,NULL);
}
void CFreqTest::StartAna()
{
int iFromFile=_open((LPTSTR)(LPCTSTR)("c:\\temp.pcm"),_O_BINARY|_O_RDWR,_S_IREAD|_S_IWRITE);
if(iFromFile == -1)
{
MessageBox("openfromfilefail");
return;
}
int inum=512;
unsigned char buf[512];
while(TRUE)
{
memset(buf,0,inum);
int iNum=_read(iFromFile,buf,inum);
if(iNum<=0)
break;
int iret=VS_GetSigFreq(buf,inum);
if(iret > 0)
AddAnaRet(iret);
}
//m_Static.SetWindowText("分析数据完毕");
m_iAnaTimes ++;
if(m_iAnaTimes >= 15)
{
OnStop();
}
else
{
StartRec();
}
//m_Start.EnableWindow(TRUE);
//m_Stop.EnableWindow(FALSE);
}
void CFreqTest::AddAnaRet(int iret)
{
int L=m_FreqList.GetItemCount();
m_lAnaTimes++;
CString cStr,gStr;
int idata;
bool bSign=false;
cStr.Format("%d赫兹",iret);
for(int i=0;i<L;i++)
{
CString Str=m_FreqList.GetItemText(i,0);
idata=m_FreqList.GetItemData(i);
if(Str == cStr)
{
idata++;
m_FreqList.SetItemData(i,idata);
bSign=true;
}
gStr.Format("%.2f",(float)idata*100/(float)m_lAnaTimes);
gStr+="%";
m_FreqList.SetItemText(i,1,(LPTSTR)(LPCTSTR)gStr);
}
if(!bSign)
{
m_FreqList.InsertItem(i,(LPTSTR)(LPCTSTR)cStr);
m_FreqList.SetItemData(i,1);
CString gStr;
gStr.Format("%.2f",1.0*100/(float)m_lAnaTimes);
gStr+="%";
m_FreqList.SetItemText(i,1,(LPTSTR)(LPCTSTR)gStr);
}
}
void CFreqTest::OnDial()
{
UpdateData(TRUE);
TV_StartDial(1,(LPTSTR)(LPCTSTR)m_External);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -