SSPC-Tester/Driver/PCIE8586/Samples/VC/Advanced/ADFrm.cpp

490 lines
13 KiB
C++
Raw Normal View History

// ADFrm.cpp : implementation of the CADFrame class
//
#include "stdafx.h"
#include "Sys.h"
#include "MainFrm.h"
#include "ADFrm.h"
#include "ADDoc.h"
#include "ADDigitView.h"
#include "ADWaveView.h"
#include "QSortData.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////
#include "ADStatusView.h"
#include "ParaCfgView.h"
extern CADStatusView* pADStatusView;
extern CParaCfgView* pParaCfgView;
////////////////////////////////////////////////////////////////////////////
// CADFrame
IMPLEMENT_DYNCREATE(CADFrame, CMDIChildWnd)
BEGIN_MESSAGE_MAP(CADFrame, CMDIChildWnd)
ON_COMMAND_EX(CG_ID_VIEW_DLGBAR, OnBarCheck)
ON_UPDATE_COMMAND_UI(CG_ID_VIEW_DLGBAR, OnUpdateControlBarMenu)
ON_COMMAND_EX(CG_ID_VIEW_SHOWSTATUS1, OnBarCheck)
ON_UPDATE_COMMAND_UI(CG_ID_VIEW_SHOWSTATUS1, OnUpdateControlBarMenu)
ON_COMMAND_EX(CG_ID_VIEW_SHOWSTATUS, OnBarCheck)
ON_UPDATE_COMMAND_UI(CG_ID_VIEW_SHOWSTATUS, OnUpdateControlBarMenu)
ON_WM_CREATE()
ON_COMMAND_EX(CG_ID_VIEW_SETUPDLG, OnBarCheck)
ON_UPDATE_COMMAND_UI(CG_ID_VIEW_SETUPDLG, OnUpdateControlBarMenu)
//{{AFX_MSG_MAP(CADFrame)
ON_WM_CLOSE()
ON_WM_CANCELMODE()
ON_WM_LBUTTONUP()
//ON_COMMAND(IDM_History_Digit, OnHistoryDigit)
ON_COMMAND(IDM_History_Wave, OnHistoryWave)
//ON_UPDATE_COMMAND_UI(IDM_History_Digit, OnUpdateHistoryDigit)
ON_UPDATE_COMMAND_UI(IDM_History_Wave, OnUpdateHistoryWave)
ON_COMMAND(IDM_MoveVolt, OnMoveVolt)
ON_WM_DESTROY()
ON_WM_CREATE()
ON_UPDATE_COMMAND_UI(IDM_MoveVolt, OnUpdateMoveVolt)
ON_BN_CLICKED(IDC_CHECK_CheckOverflow, OnCHECKCheckOverflow)
ON_COMMAND(IDM_ShowCfgAnalBar, OnShowCfgAnalBar)
ON_UPDATE_COMMAND_UI(IDM_ShowCfgAnalBar, OnUpdateShowCfgAnalBar)
ON_COMMAND(IDM_ShowStatusBar, OnShowStatusBar)
ON_UPDATE_COMMAND_UI(IDM_ShowStatusBar, OnUpdateShowStatusBar)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CADFrame construction/destruction
CADFrame::CADFrame()
{
// TODO: add member initialization code here
// m_ProcessDigitalMode=1;
m_ProcessGraphicMode = 1;
m_AnalyzeCheck = false;
m_bShowCfgAnalBar = true;
m_bShowStatusBar = true;
m_ProcessMoveVolt = 1;
gl_ReadSizeWords = 0;
gl_ScreenVolume = (int)VOLT_RANGE;
}
CADFrame::~CADFrame()
{
if(m_pWndSTCBar != NULL)
{
delete m_pWndSTCBar;
m_pWndSTCBar = NULL;
}
pParaCfgView = NULL;
pADStatusView = NULL;
}
/////////////////////////////////////////////////////////////////////////////
// CADFrame diagnostics
#ifdef _DEBUG
void CADFrame::AssertValid() const
{
CMDIChildWnd::AssertValid();
}
void CADFrame::Dump(CDumpContext& dc) const
{
CMDIChildWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CADFrame message handlers
BOOL CADFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
if (!m_wndSplitter.CreateStatic(this, 1, 2)) // <20><><EFBFBD><EFBFBD>1<EFBFBD><31>2<EFBFBD>зָ<D0B7>
{
TRACE0("Failed to CreateStaticSplitter\n");
return FALSE;
}
// add the first splitter pane - the default view in column 0
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Ĭ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!m_wndSplitter.CreateView(0, 0,
RUNTIME_CLASS(CADDigitView), CSize(360, 50), pContext))//CADDigitView
{
TRACE0("Failed to create first pane\n");
return FALSE;
}
if (!m_wndSplitter.CreateView(0, 1,
RUNTIME_CLASS(CADWaveView), CSize(0, 470), pContext))//
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
return TRUE;
}
void CADFrame::ActivateFrame(int nCmdShow)
{
nCmdShow = SW_SHOWMAXIMIZED; // ʹ<><CAB9>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMDIChildWnd::ActivateFrame(nCmdShow);
}
int CADFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// <20><><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>CControlBar<61><72><EFBFBD><EFBFBD>
m_pWndSTCBar = new CCfgTabCtrlBar;
m_pWndSTCBar->Create(this, CSize(235, 100), IDW_PROP_BAR);
m_pWndSTCBar->SetBarStyle(CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);//CBRS_SIZE_DYNAMIC);
m_pWndSTCBar->EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(m_pWndSTCBar, AFX_IDW_DOCKBAR_RIGHT);
{ // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼû<CDBC><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pParaCfgView=(CParaCfgView*)m_pWndSTCBar->AddView(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), RUNTIME_CLASS(CParaCfgView/*CParaCfgView*/));//CParaCfgView
pParaCfgView->m_pADFrm = this;
}
{// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pADStatusView=(CADStatusView*)m_pWndSTCBar->AddView(_T("<EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD>"), RUNTIME_CLASS(CADStatusView));//CADStatusView
}
OldADPara = ADPara;
// TODO: Add a menu item that will toggle the visibility of the
{
// Initialize dialog bar m_wndShowStatus
if (!m_wndShowStatus.Create(this, CG_IDD_Status,
CBRS_BOTTOM | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
CG_IDD_Status))
{
TRACE0("Failed to create dialog bar m_wndShowStatus\n");
return -1; // fail to create
}
m_wndShowStatus.EnableDocking(CBRS_ALIGN_BOTTOM | CBRS_ALIGN_TOP);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndShowStatus);
CProgressCtrl* pT=(CProgressCtrl*)m_wndShowStatus.GetDlgItem(IDC_PROGRESS);
pT->SetRange(0, 50);
if (!m_wndDlgSave.Create(this, CG_IDD_DIALOG_Save,
CBRS_BOTTOM | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
CG_IDD_DIALOG_Save))
{
TRACE0("Failed to create dialog bar m_wndShowStatus\n");
return -1; // fail to create
}
m_wndDlgSave.ShowWindow(SW_HIDE);
m_wndDlgSave.EnableDocking(CBRS_ALIGN_BOTTOM | CBRS_ALIGN_TOP);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndDlgSave);
}
CEdit* pFreqEdit=(CEdit*)(this->m_wndShowStatus).GetDlgItem(IDC_EDIT_MeasureFreq);
pFreqEdit->SetWindowText(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ"));
//m_ToolTip.Create(this,TTS_ALWAYSTIP|WS_CHILD|WS_VISIBLE);
if(pParaCfgView != NULL)
{
CComboBox * pTriggerSource =(CComboBox *)pParaCfgView->GetDlgItem(IDC_COMBO_TriggerSource);
CComboBox * pTriggerDir =(CComboBox *)pParaCfgView->GetDlgItem(IDC_COMBO_OutTriggerDir);
CEdit * pBufferID =(CEdit *)pParaCfgView->GetDlgItem(IDC_EDIT_BufferID);
CSliderCtrl* pSLIDER_Offset =(CSliderCtrl*)pParaCfgView->GetDlgItem(IDC_SLIDER_Offset);
/*m_ToolTip.AddTool(pFrequency,_T("<22>趨Ƶ<E8B6A8><C6B5>"));
m_ToolTip.AddTool(pTriggerSource,_T("<EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
m_ToolTip.AddTool(pTriggerDir,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
m_ToolTip.AddTool(pBufferID,_T("<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>񻺳<EFBFBD><EFBFBD><EFBFBD>"));
m_ToolTip.AddTool(pSLIDER_Offset,_T("<EFBFBD>ڻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>"));*/
}
return 0;
}
void CADFrame::OnClose()
{
// TODO: Add your message handler code here and/or call default
CMDIChildWnd::OnClose();
}
void CADFrame::OnCancelMode()
{
CMDIChildWnd::OnCancelMode();
// TODO: Add your message handler code here
}
void CADFrame::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMDIChildWnd::OnLButtonUp(nFlags, point);
}
//void CADFrame::OnHistoryDigit()
//{
// // TODO: Add your command handler code here
// STARTUPINFO StartupInfo;
// memset(&StartupInfo,0,sizeof(STARTUPINFO));
// StartupInfo.cb=sizeof(STARTUPINFO);
//
// PROCESS_INFORMATION ProcessInfo;
//
// ::CreateProcess
// (_T("\\User\\SysTest\\Release\\SysTest.exe"),
// _T(" Digit"), // ע<><EFBFBD><E2A3BA>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ո<EFBFBD>
// NULL,
// NULL,
// FALSE,
// 0,
// NULL,
// NULL,
// &StartupInfo,
// &ProcessInfo);
//}
void CADFrame::OnHistoryWave()
{
// TODO: Add your command handler code here
STARTUPINFO StartupInfo;
memset(&StartupInfo,0,sizeof(STARTUPINFO));
StartupInfo.cb=sizeof(STARTUPINFO);
PROCESS_INFORMATION ProcessInfo;
::CreateProcess
(_T("\\User\\SysTest\\Release\\SysTest.exe"),
_T(" Wave"), // ע<><EFBFBD><E2A3BA>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ո<EFBFBD>
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&StartupInfo,
&ProcessInfo);
}
//void CADFrame::OnUpdateHistoryDigit(CCmdUI* pCmdUI)
//{
// // TODO: Add your command update UI handler code here
// pCmdUI->Enable(FALSE);
//}
void CADFrame::OnUpdateHistoryWave(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(FALSE);
}
void CADFrame::OnMoveVolt() //ƽ<>Ƶ<EFBFBD>ѹ<EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
{
LONG m_DataMiddle; // <20>м<EFBFBD><D0BC><EFBFBD>ԭ<EFBFBD><D4AD>
ULONG nArrayCount=-1;
ULONG m=0;
TCHAR str[100];
//m_ProcessMoveVolt=m_ProcessMoveVolt==0?1:0;
CSysApp *pApp=(CSysApp *)AfxGetApp();
CADDoc* pDoc=pApp->m_pADDoc;
CString strn;
CADDigitView* pDigitView=(CADDigitView*)(CWnd::FromHandle(pDoc->m_hWndDigit));
CADWaveView* pWaveView=(CADWaveView*)(CWnd::FromHandle(pDoc->m_hWndWave));
if(m_ProcessMoveVolt == 1) // <20><>ʼ<EFBFBD><CABC><EFBFBD>м<EFBFBD>ֵ
{
m_ProcessMoveVolt = 0;
if(gl_ReadSizeWords == 0)
{
// AfxMessageBox(_T("<22><>û<EFBFBD>п<EFBFBD>ʼ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>!");
// return;
}
ULONG lCount = (gl_ReadSizeWords%4096)/gl_nChannelCount;
if (lCount == 0)
{
if (gl_ReadSizeWords < MAX_RAM_SIZE)
{
lCount = gl_ReadSizeWords/gl_nChannelCount;
}
else
{
lCount = (gl_ReadSizeWords%MAX_RAM_SIZE)/gl_nChannelCount;
}
if (lCount == 0)
{
lCount = MAX_RAM_SIZE/gl_nChannelCount;
}
}
//pADStatusView->m_nMoveVolt.ResetContent();
if (lCount>8192) // 8192ΪSHORT DataAnalyze[MAX_CHANNEL_COUNT][8192];
{
lCount = 8192;
}
for(int nChannel=0; nChannel<MAX_CHANNEL_COUNT; nChannel++)
{
if (ADPara.bChannelArray[nChannel] == TRUE)
{
for(ULONG Index=0; Index<lCount; Index++)
{
DataAnalyze[nChannel][Index] = ((ADBuffer[glBufferID][Index*gl_nChannelCount+gl_CHIdx[nChannel]])&gl_wMaxLSB);
}
}
}
/////////////////////////////////////////////
for(int k=0; k<MAX_CHANNEL_COUNT; k++)//ÿͨ<C3BF><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (ADPara.bChannelArray[k] == TRUE)
{
m_QSortData.Sort(DataAnalyze[k], 0, lCount);
m_DataMiddle = m_QSortData.GetMidData(); // ȡ<><C8A1><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
// m_DataMiddle<6C>Ƿ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EBA3AC>ԭ<EFBFBD><EFBFBD><EBA3AC>0-gl_fLsbCount<6E>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ֵ
// gl_MiddleLsb <20><>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>ȥgl_lLsbHalf<6C><66><EFBFBD><EFBFBD>ֵ,<2C><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD>ֵ
// gl_MiddleLsb[k]=(int)((m_DataMiddle)-gl_lLsbHalf);
gl_MiddleLsb[k]=(int)(m_DataMiddle - gl_lLsbHalf);
// gl_MiddleLsb[k] = gl_MiddleLsb[k];
CString StrMoveVolt;
switch(m_DigitalDataShowMode)
{
case 0: // ʮ<><CAAE><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
_stprintf(str, _T("CH%d %d Dec"),k,m_DataMiddle-gl_lLsbHalf);
break;
case 1: // ʮ<><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
//StrMoveVolt.Format(_T("%x Hec"),m_DataMiddle.value);
_stprintf(str, _T("CH%d %x Hec"),k,m_DataMiddle);
break;
case 2: // <20><>ѹֵ
//StrMoveVolt.Format(_T("%5.2fmV"),(m_DataMiddle.value-8192)*VOLT_RANGE/gl_fLsbCount);
_stprintf(str, _T("CH%d %5.2fmV"),k,(m_DataMiddle-gl_lLsbHalf)*gl_PerLsbVoltM[k]);
break;
}
//pADStatus->m_nMoveVolt.SetWindowText(StrMoveVolt);
if(pADStatusView != NULL)
pADStatusView->m_nMoveVolt.AddString (str);
}
m_AnalyzeAllCount=0;
m_OverLimitCount=0;
}
if(pADStatusView != NULL)
pADStatusView->m_nMoveVolt.SetCurSel(0);
}
else
{
m_ProcessMoveVolt = 1;
for(int i=0;i<MAX_CHANNEL_COUNT;i++)
{
gl_MiddleLsb[i] = 0;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>, <20><>ƫ<EFBFBD><C6AB>ֵΪ0
//gl_MiddleLsb[i] = 0;
}
if(pADStatusView != NULL)
{
while(pADStatusView->m_nMoveVolt.GetCount()>0)
pADStatusView->m_nMoveVolt.DeleteString(0);
CString StrMoveVolt;
StrMoveVolt=" ";
pADStatusView->m_nMoveVolt.AddString (StrMoveVolt);
}
}
if(gl_bDeviceADRun==FALSE) // <20><><EFBFBD><EFBFBD><EFBFBD>豸û<E8B1B8><C3BB><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
{
pDigitView->RedrawWindow();
pWaveView->OnDrawPolyLine(gl_nDocDrawLen,gl_nDocDrawIdx);
return;
}
if(nProcessMode == DATA_MODE) // <20><><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2>η<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ʽ
{
pDigitView->RedrawWindow();
}
if(nProcessMode == WAVE_MODE) // <20><>֮<EFBFBD><D6AE>Ȼ
{
pWaveView->OnDrawPolyLine(gl_nDocDrawLen,gl_nDocDrawIdx);
}
}
void CADFrame::OnUpdateMoveVolt(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(!m_ProcessMoveVolt);
}
void CADFrame::OnDestroy()
{
// TODO: Add your message handler code here
ACTS1000_SaveParaAD(NULL, &ADPara);
if(gl_bDeviceADRun)//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>
{
CADDoc* pDoc=(CADDoc*)GetActiveDocument();
pDoc->Public_ReleaseDevice();
}
;
CSysApp* pApp = (CSysApp*)AfxGetApp();
// ACTS1000_ReleaseDevice(pApp->m_hDevice);
pApp->m_bCreateADFrm = FALSE;
pApp->m_ADFrame = NULL;
CMDIChildWnd::OnDestroy();
}
void CADFrame::OnCHECKCheckOverflow()
{
// TODO: Add your control notification handler code here
MessageBox(_T("OnCHECKCheckOverflow"));
}
void CADFrame::OnShowCfgAnalBar()
{
// TODO: Add your command handler code here
m_bShowCfgAnalBar = !m_bShowCfgAnalBar;
ShowControlBar(m_pWndSTCBar, m_bShowCfgAnalBar, false);
}
void CADFrame::OnUpdateShowCfgAnalBar(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_bShowCfgAnalBar);
}
void CADFrame::OnShowStatusBar()
{
// TODO: Add your command handler code here
m_bShowStatusBar = !m_bShowStatusBar;
ShowControlBar(&m_wndShowStatus, m_bShowStatusBar, false);
}
void CADFrame::OnUpdateShowStatusBar(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_bShowStatusBar);
}
BOOL CADFrame::PreTranslateMessage(MSG* pMsg)
{
//m_ToolTip.RelayEvent(pMsg);
return CMDIChildWnd::PreTranslateMessage(pMsg);
}