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

655 lines
18 KiB
C++
Raw Permalink Normal View History

// ADDoc.cpp : implementation of the CADDoc class
//
#include "stdafx.h"
#include "Sys.h"
#include "ADDoc.h"
#include "ADDigitView.h"
#include "ADWaveView.h"
#include "ADStatusView.h"
#include "ParaCfgView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#ifdef ACTS1000_CreateSystemEvent
#define ACTS1000_CreateSystemEvent ACTS1000_TCreateSystemEvent
#endif
////////////////////////////////////////////////////////////////////////
WORD* ADBuffer[MAX_SEGMENT]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD* ADDrawBuffer; // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>»<EFBFBD><C2BB><EFBFBD>
BOOL m_bDrawComp= FALSE;
BOOL gl_bAutoCollect = FALSE;
int CurrentIndex; // AD<41><44><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>̵߳<DFB3>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ReadIndex; // AD<41><44><EFBFBD>ݲɼ<DDB2><C9BC>̵߳<DFB3>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL gl_bDeviceADRun=FALSE;
BOOL gl_bAutoTrig=TRUE;
ACTS1000_PARA_AD ADPara;
ACTS1000_PARA_AD OldADPara;
ACTS1000_STATUS_AD gl_ADStatus;
ACTS1000_AD_MAIN_INFO gl_ADMainInfo;
WORD gl_wMaxLSB = 0x3FFF;
float gl_fLsbCount = 16384.0;
WORD gl_lLsbHalf = 8192;
//BOOL bCheckOverflow=FALSE; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>FIFO<46><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
int gl_nSampleMode = PRO_MODE; // <20>ɼ<EFBFBD>ģʽ(1,<2C><>ѯ<EFBFBD><D1AF> 2, <20>жϣ<D0B6> 3<><33> DMA)
UINT ReadDataThread(PVOID hWnd);//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
UINT ProccessDataThread(PVOID hWnd); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
BOOL m_bFirstCreateDeviceFile;
int m_ProcessGraphicMode;//Ϊ1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
BOOL m_AnalyzeCheck;//<2F><><EFBFBD>ƾ<EFBFBD><C6BE>ȷ<EFBFBD><C8B7><EFBFBD>
int gl_ScreenVolume;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int m_TriggerVolt;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
int gl_MiddleLsb[MAX_CHANNEL_COUNT];
float m_AnalyzeAllCount;
UINT m_OverLimitCount;
int m_ProcessMoveVolt;//Ϊ1ʱ,ƽ<>Ƶ<EFBFBD>ѹ
BOOL bCreateDevice;
BOOL m_bProgress; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>
int nProcessMode; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ʽ 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ 3<><33><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
CEdit* pCountEdit;
CEdit* pRangeEdit;
CEdit* pRatioEdit;
CADDigitView* m_pDigitView;
CADWaveView* m_pWaveView;
CADStatusView* pADStatusView = NULL;
CParaCfgView* pParaCfgView = NULL;
HANDLE hEvent; // <20>ɼ<EFBFBD><C9BC>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵߳<DFB3>ͬ<EFBFBD><CDAC><EFBFBD>ź<EFBFBD>
int m_DigitalDataShowMode; // <20><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>ʾģʽ
int DeviceID; // <20>ó<EFBFBD><C3B3><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5>豸ID
HANDLE g_ArrFileOut;
int gl_nChannelCount = MAX_CHANNEL_COUNT;
int gl_nSaveFileCount = MAX_CHANNEL_COUNT;
BOOL m_bCloseFile;
HANDLE hExitEvent;
float Center, PerY;
CRect ClientRect;
float middle1;
BOOL bDrawing=FALSE;
ULONGLONG FileLenghtWords;
int nChannelArrayClient[MAX_CHANNEL_COUNT];// ͨ<><CDA8><EFBFBD><EFBFBD>
int gl_CurrentbufNum = 0; // <20><>ǰ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int DisplayChannel[MAX_CHANNEL_COUNT];// <20><><EFBFBD>ڱ<EFBFBD>־<EFBFBD><D6BE>ͨ<EFBFBD><CDA8><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ
float OutAnalogValve; // <20><>ʾģ<CABE><C4A3><EFBFBD><EFBFBD><E2B4A5><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
ULONG gl_nSampleLenth = MAX_RAM_SIZE; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int gl_InputRange[MAX_CHANNEL_COUNT]; // <20><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>õĵ<C3B5>ѹ<EFBFBD><D1B9><EFBFBD>̷<EFBFBD>Χ
float gl_PerLsbVoltM[MAX_CHANNEL_COUNT]; // <20><>λLSB<53>ĵ<EFBFBD>ѹֵ
CString g_strFileFullName;
ULONG gl_StartAddr;
TCHAR g_strChannelEn[2][64] = { L"<EFBFBD><EFBFBD>ֹ", L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" };
TCHAR g_strGain[4][64] = { L"1<EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>", L"2<EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>", L"4<EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>", L"8<EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>" };
TCHAR g_strRefGround[3][64] = { L"ֱ<EFBFBD><EFBFBD>", L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"};
TCHAR g_strAIRange[3][64] = {L"<EFBFBD><EFBFBD>5V", L"<EFBFBD><EFBFBD>1V", L"<EFBFBD><EFBFBD>10V"};
TCHAR g_strInputImped[2][64] = {L"1M<EFBFBD><EFBFBD>", L"50<EFBFBD><EFBFBD>"};
ULONG m_nSampRangeCount;
ULONG m_nSampRangeVal[8];
ULONG gl_CHIdx[MAX_CHANNEL_COUNT] =
{
0,1,2,3,4,5,6,7
};
CCriticalSection gl_Section;
ULONG gl_nDrawLen = 1024;
ULONG gl_nDocDrawLen = 1024;
ULONG gl_nDrawIdx = 0;
ULONG gl_nDocDrawIdx = 0;
//##############################################
//ʹ<>ö<EFBFBD>ý<EFBFBD>嶨ʱ<E5B6A8><CAB1><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>50֡<30><D6A1><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ٶ<EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD>Ļ
#include "stdio.h"
#include "MmSystem.h"
void PASCAL DrawWindowProc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2);
#define ONE_MILLI_SECOND 1
#define TWO_SECOND 2000
// <20><> <20><> ʱ <20><> <20><> <20><> <20>ʣ<EFBFBD> <20><> <20><> <20><> Ϊ <20><> λ ----
#define TIMER_ACCURACY 1
UINT wAccuracy; // <20><> <20><> <20><> <20><> <20><>
UINT TimerID; // <20><> <20><> <20><> ʱ <20><> <20><> <20><>
////////////////////////////////////////////////////////////////////////////
// CADDoc
IMPLEMENT_DYNCREATE(CADDoc, CDocument)
BEGIN_MESSAGE_MAP(CADDoc, CDocument)
//{{AFX_MSG_MAP(CADDoc)
ON_COMMAND(IDM_TileWave, OnTileWave)
ON_COMMAND(IDM_SuperPoseWave, OnSuperPoseWave)
ON_UPDATE_COMMAND_UI(IDM_SuperPoseWave, OnUpdateSuperPoseWave)
ON_UPDATE_COMMAND_UI(IDM_TileWave, OnUpdateTileWave)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
///////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CADDoc construction/destruction
extern CSysApp theApp;
CADDoc::CADDoc()
{
// TODO: add one-time construction code here
m_bProgress=FALSE; // һ<><D2BB>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>
nProcessMode = DATA_MODE; // Ĭ<>Ϸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
m_TriggerVolt=(int)VOLT_RANGE; // <20>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD>ij<EFBFBD>ֵΪ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_bFirstCreateDeviceFile=TRUE; // һ<><D2BB>ʼ<EFBFBD><CABC>Ϊ<EFBFBD><CEAA>һ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
m_bCloseFile=TRUE; // û<>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ر<EFBFBD>
gl_nChannelCount=0;
ACTS1000_LoadParaAD(theApp.m_hDevice, &ADPara); // <20><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
for (int i=gl_ADMainInfo.nChannelCount; i<ACTS1000_AD_MAX_CHANNELS; i++)
{
ADPara.bChannelArray[i] = 0;
}
for (int nCH=0; nCH<gl_ADMainInfo.nChannelCount; nCH++)
{
if (ADPara.bChannelArray[nCH])
{
gl_nChannelCount++;
}
}
//gl_nChannelCount = MAX_CHANNEL_COUNT;
}
CADDoc::~CADDoc()
{
}
BOOL CADDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CADDoc serialization
void CADDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CADDoc diagnostics
#ifdef _DEBUG
void CADDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CADDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
BOOL gl_bTerminateDrawThr = TRUE;
void CADDoc::StartDeviceAD()
{
CSysApp *pApp=(CSysApp *)AfxGetApp();
////////////////////////////////////////////////////////////////////////
if(pApp->m_hDevice==INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("<EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."),MB_ICONERROR);
return;
}
if(!gl_bTerminateDrawThr)
{
AfxMessageBox(_T(" <20>߳<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ֹ"));
return;
}
FileLenghtWords = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC>
m_DrawWindowThread = AfxBeginThread(ProccessDataThread,NULL, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
m_DrawWindowThread->m_bAutoDelete = TRUE; // <20>Զ<EFBFBD>ɾ<EFBFBD><C9BE>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲɼ<DDB2><C9BC><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
hEvent = ACTS1000_CreateSystemEvent();
hExitEvent = ACTS1000_CreateSystemEvent();
bCollectData=TRUE; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>󣬿<EFBFBD><F3A3ACBF>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲɼ<DDB2>
// for(int i=0;i<MAX_CHANNEL_COUNT;i++)
// gl_MiddleLsb[i]=0;
if(!m_bFirstCreateDeviceFile) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
{
header.HeadSizeBytes = sizeof(FILE_HEADER); // ͷ<><CDB7>Ϣ<EFBFBD><CFA2>С
header.FileType = DEFAULT_FILE_TYPE;
header.BusType = gl_ADMainInfo.nDeviceType>>16; // <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
header.DeviceNum = DEFAULT_DEVICE_NUM;
header.DeviceType = gl_ADMainInfo.nDeviceType&0xFFFF; // <20>豸ID<49><44>
header.ChannelCount = gl_nChannelCount; // ÿͨ<C3BF><CDA8><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>Ϊ1
header.DataWidth = gl_ADMainInfo.nSampResolution; // 12λ
header.bXorHighBit = 0; // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
header.nRevisionID = theApp.m_nRevisionID;
ULONG nSampRangeCount;
ULONG nSampRangeVal[8];
if (!ACTS1000_GetSupportRangeInfo(theApp.m_hDevice, &nSampRangeCount,nSampRangeVal))
{
AfxMessageBox(L"<EFBFBD><EFBFBD>ȥ֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣʧ<EFBFBD><EFBFBD>",MB_ICONWARNING,0);
return;
}
// <20><>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch(ADPara.InputRange[0]) // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
{
case ACTS1000_INPUT_N1000_P1000mV: // <20><>1000<30><30><EFBFBD><EFBFBD>
header.VoltTopRange = 1000;
header.VoltBottomRange = -1000;
break;
case ACTS1000_INPUT_N10000_P10000mV: // <20><>5000<30><30><EFBFBD><EFBFBD>
header.VoltTopRange = 10000;
header.VoltBottomRange = -10000;
break;
case ACTS1000_INPUT_N5000_P5000mV:
header.VoltTopRange = 5000;
header.VoltBottomRange = -5000;
break;
}
header.ADPara = ADPara;
header.CrystalFreq = gl_ADMainInfo.nBaseRate; // <20><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
header.HeadEndFlag = HEAD_END_FLAG;
header.ADStatus = gl_ADStatus;
time_t nowtime;
time(&nowtime);
header.CreateFTime = (ULONGLONG)nowtime;
memcpy(&header.ADMainInfo, &gl_ADMainInfo, sizeof(gl_ADMainInfo));
// д<>ļ<EFBFBD>ͷ
// g_ArrFileOut[Index].Write((WORD*)&header, header.HeadSizeBytes);
DWORD dTmp;
if (!WriteFile(g_ArrFileOut, (WORD*)&header, header.HeadSizeBytes,
&dTmp, NULL))
{
AfxMessageBox(L"error");
}
}
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
CADDigitView* pDigitView=(CADDigitView*)(CWnd::FromHandle(m_hWndDigit));
CADWaveView* pWaveView=(CADWaveView*)(CWnd::FromHandle(m_hWndWave));
CADFrame* pShow=((CSysApp*)AfxGetApp())->m_ADFrame ; // ȡ<><C8A1><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
CProgressCtrl* pProgress=(CProgressCtrl*)(pShow->m_wndShowStatus.GetDlgItem(IDC_PROGRESS));
pProgress->SetPos(0); // <20>ͷ<EFBFBD><CDB7>豸ʱ<E8B1B8><CAB1><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֵ
// <20><><EFBFBD><EFBFBD><EFBFBD>
if(!MyStartDeviceAD(pApp->m_hDevice)) // <20><><EFBFBD><EFBFBD><EFBFBD>豸,<2C><>ʼ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>"));
return;
}
gl_bDeviceADRun = TRUE;
if(pParaCfgView != NULL)
{
pParaCfgView->EnableWindows(FALSE); // <20><><EFBFBD><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pParaCfgView->StartAD();
}
m_DrawWindowThread->ResumeThread(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD>߳<EFBFBD>
}
BOOL gl_Event = FALSE;
//################### <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> ################################################3###
UINT ProccessDataThread(PVOID hWnd)
{
CSysApp *pApp=(CSysApp *)AfxGetApp();
CADFrame *pFrm=pApp->m_ADFrame ;
CADDoc* pDoc=pApp->m_pADDoc;
// <20><><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͼָ<CDBC><D6B8>
CADDigitView* pDigitView=(CADDigitView*)(CWnd::FromHandle(pDoc->m_hWndDigit));
CADWaveView* pWaveView=(CADWaveView*)(CWnd::FromHandle(pDoc->m_hWndWave));
CString str;
BOOL bFirst=TRUE;
ULONG WroteMB=0;
pDoc->m_Wrote8KWCounter=0;
pDoc->m_WroteMB=0;
CurrentIndex=0;
int ShowCount=0,i;
ULONG ulTime = 0;
ULONG nDrawL = 0;
ULONG nDrawI = 0;
while(gl_bDeviceADRun) // ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AD<41><44><EFBFBD><EFBFBD>
{
do{
if(!gl_bDeviceADRun) goto ExitProcDataThread;
} while(WaitForSingleObject(hEvent, 100) != WAIT_OBJECT_0);
gl_bTerminateDrawThr = FALSE;
gl_Event = TRUE;
switch(nProcessMode) // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
{
case DATA_MODE: // <20><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>
if ((GetTickCount()-ulTime)>100)
{
gl_Section.Lock();
nDrawL =gl_nDrawLen;
nDrawI =gl_nDrawIdx;
gl_nDocDrawLen = gl_nDrawLen;
gl_nDocDrawIdx =gl_nDrawIdx;
gl_Section.Unlock();
::SendMessage(pDoc->m_hWndDigit, WM_SHOWDIGIT, nDrawL, nDrawI);
m_bProgress=TRUE; // ʹOnDraw<61><77><EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><DCB8>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>
ulTime = GetTickCount();
}
/*else
{
if (gl_bSmlThenSize)
{
gl_bSmlThenSize = FALSE;
}
}*/
break;
case WAVE_MODE: // <20><><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>
if ((GetTickCount()-ulTime)>120)
{
gl_Section.Lock();
nDrawL =gl_nDrawLen;
nDrawI =gl_nDrawIdx;
gl_nDocDrawLen = gl_nDrawLen;
gl_nDocDrawIdx =gl_nDrawIdx;
gl_Section.Unlock();
::SendMessage(pDoc->m_hWndWave,WM_SHOWWAVE, nDrawL, nDrawI);
m_bProgress=TRUE; // ʹOnDraw<61><77><EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><DCB8>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>
ulTime = GetTickCount();
//Sleep(1);
}
break;
case SAVE_MODE: // <20><><EFBFBD>ݴ<EFBFBD><DDB4>̴<EFBFBD><CCB4><EFBFBD>
WroteMB=(WroteMB+32)%1024;
pFrm->m_Progress()->SetPos((int)WroteMB);
str.Format(_T("%d"), (FileLenghtWords/512));
i=str.GetLength()-3;
while(i>0)
{
str.Insert(i, ',');
i-=3;
}
str+=" Kb";
pFrm->m_FileLenght()->SetWindowText(str);
ShowCount++;
break;
}//end switch
}//end while
ExitProcDataThread:
gl_bTerminateDrawThr = TRUE; // <20>߳<EFBFBD><DFB3><EFBFBD>ֹ
return TRUE;
}
//##########################################################################################
void CADDoc::Public_ReleaseDevice(void) // <20><>MDI<44><49><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>
{
StopDeviceAD();
}
void CADDoc::StopDeviceAD()
{
CSysApp *pApp=(CSysApp *)AfxGetApp();
// gl_bDeviceADRun = FALSE; // ֹͣ<CDA3><D6B9><EFBFBD>߳̽<DFB3><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲɼ<DDB2>
CADFrame* pShow=((CSysApp*)AfxGetApp())->m_ADFrame ; // ȡ<><C8A1><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
// bCreateDevice = FALSE;
// SetEvent(hExitEvent);
// WaitForSingleObject(hExitEvent, 100); // <20>ȴ<EFBFBD><C8B4>ɼ<EFBFBD><C9BC>߳<EFBFBD><DFB3>˳<EFBFBD>
// <20><>ֹ<EFBFBD>ɼ<EFBFBD><C9BC>߳<EFBFBD>
CProgressCtrl* pProgress=(CProgressCtrl*)(pShow->m_wndShowStatus.GetDlgItem(IDC_PROGRESS));
pProgress->SetPos(0); // <20>ͷ<EFBFBD><CDB7>豸ʱ<E8B1B8><CAB1><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֵ
// <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ͷź<CDB7><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(pParaCfgView != NULL)
{
pParaCfgView->EnableWindows(TRUE);
}
bCreateDevice = FALSE; // <20>ͷ<EFBFBD><CDB7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸δ<E8B1B8><CEB4><EFBFBD><EFBFBD>
// ::SendMessage(m_hWndDigit, WM_SHOWDIGIT, gl_nDocDrawLen, NULL);
// ::SendMessage(m_hWndWave,WM_SHOWWAVE, gl_nDocDrawLen, NULL);
if(!MyStopDeviceAD(pApp->m_hDevice)) // <20>ر<EFBFBD>AD<41>
{
AfxMessageBox(_T("<EFBFBD>ر<EFBFBD>AD<EFBFBD>豸ʧ<EFBFBD><EFBFBD>!"));
return;
}
if(nProcessMode == SAVE_MODE) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ʽΪ<CABD><CEAA><EFBFBD><EFBFBD>
{
OnCloseFile();//<2F>ͷ<EFBFBD><CDB7>ļ<EFBFBD>
nProcessMode = DATA_MODE; // <20>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>ַ<EFBFBD>ʽ
if(pADStatusView != NULL)
{
CButton* pDataSave=(CButton*)(pADStatusView->GetDlgItem(IDM_DataSave));
pDataSave->EnableWindow(FALSE); // ʹ<><CAB9><EFBFBD>̷<EFBFBD>ʽ<EFBFBD><CABD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ч
}
}
ACTS1000_ReleaseSystemEvent(hEvent); // <20>ͷ<EFBFBD><CDB7><EFBFBD>Ϣ
ACTS1000_ReleaseSystemEvent(hExitEvent); // <20>ͷ<EFBFBD><CDB7><EFBFBD>Ϣ
gl_Section.Lock();
gl_nDocDrawLen = gl_nDrawLen;
gl_nDocDrawIdx =gl_nDrawIdx;
gl_Section.Unlock();
::SendMessage(m_hWndDigit, WM_SHOWDIGIT, gl_nDrawLen, gl_nDrawIdx);
::SendMessage(m_hWndWave,WM_SHOWWAVE, gl_nDrawLen, gl_nDrawIdx);
}
void CADDoc::OnDataFileNew()
{
// TODO: Add your command handler code here
CString strNewFileName;
CString TempFileName;
CSysApp* pApp=(CSysApp*)AfxGetApp();
if (!(pApp->DoPromptFileName(strNewFileName, IDS_NEW_FILE,
OFN_HIDEREADONLY | OFN_CREATEPROMPT, TRUE, NULL)))
return;
if(!m_bFirstCreateDeviceFile)
{ // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>һ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
if ( ! CloseHandle( g_ArrFileOut ) )
{
AfxMessageBox(L"<EFBFBD>ͷ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>...",MB_ICONSTOP,0);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
int FileNameLength=strNewFileName.GetLength();
//TempFileName=strNewFileName.Left(FileNameLength-4);
g_ArrFileOut =CreateFile(strNewFileName, GENERIC_READ|GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
if (g_ArrFileOut == INVALID_HANDLE_VALUE )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>..."),MB_ICONSTOP,0);
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>򿪵<EFBFBD><F2BFAAB5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
g_strFileFullName = strNewFileName;
gl_nSaveFileCount = gl_nChannelCount;
CADFrame* pShow=((CSysApp*)AfxGetApp())->m_ADFrame ; // ȡ<><C8A1><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
pShow->ShowHideDlgSave (); //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pShow->ShowHideStatus(FALSE);//<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
if(pADStatusView != NULL)
{
CButton* pDataSave=(CButton*)(pADStatusView->GetDlgItem(IDM_DataSave));
pDataSave->EnableWindow(TRUE); // ʹ<><CAB9><EFBFBD>̷<EFBFBD>ʽ<EFBFBD><CABD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ч
}
_ULARGE_INTEGER dlFreeSpace, dlTotalSpace, dlUserSpace;
GetDiskFreeSpaceEx(strNewFileName.Left(3), &dlUserSpace, &dlUserSpace, &dlFreeSpace);
(void)dlTotalSpace;
(void)dlUserSpace;
ULONGLONG DiskFreeBytes = dlFreeSpace.QuadPart;
// ȡ<><C8A1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>̿<EFBFBD><CCBF>ÿռ<C3BF> */
m_RemainMB=(ULONG)(DiskFreeBytes/(1024*1024)); // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>M<EFBFBD><4D>
CString str;
if(m_RemainMB<2)
{
AfxMessageBox(_T("Ӳ<EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>2M<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD><EFBFBD><EFBFBD>..."),MB_ICONSTOP,0);
return;
}
str.Format(_T("%d Mb"),m_RemainMB);
pShow->m_DiskFree()->SetWindowText (str);// <20>õ<EFBFBD>ǰӲ<C7B0>̿<EFBFBD><CCBF>ÿռ<C3BF>MB
pShow->m_Progress()->SetRange32(0,1024);// <20><><EFBFBD>ý<EFBFBD><C3BD>̷<EFBFBD>Χ
pShow->m_Progress()->SetPos(0);
/////////////
pShow->m_FileName()->SetWindowText(strNewFileName);//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
m_bFirstCreateDeviceFile=FALSE; // <20><><EFBFBD>ɹ<EFBFBD><C9B9>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>־
m_bCloseFile=FALSE; // <20><><EFBFBD>ļ<EFBFBD>û<EFBFBD>йر<D0B9>,<2C><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رյ<D8B1>ǰ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>˵<EFBFBD>
if(pADStatusView != NULL)
pADStatusView->SetDlgCheck();
nProcessMode = SAVE_MODE; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6>Ҫ<EFBFBD><D2AA><EFBFBD>д<EFBFBD><D0B4>̴<EFBFBD><CCB4><EFBFBD>
pADStatusView->SetDlgCheck();
}
void CADDoc::OnCloseFile()
{
// TODO: Add your command handler code here
DWORD dTmp;
header.HeadSizeBytes = sizeof(FILE_HEADER);
header.ADStatus = gl_ADStatus; // gl_ADStatus.bTrigFlag;
// g_ArrFileOut.SeekToBegin();
// g_ArrFileOut.Write(&header, sizeof(FILE_HEADER));
// g_ArrFileOut.Close();
SetFilePointer(g_ArrFileOut, 0, 0, FILE_BEGIN);
//ACTS1000_WriteFile(hFileObject[nChannel], &header, sizeof(FILE_HEADER));
if (!WriteFile(g_ArrFileOut, &header, sizeof(FILE_HEADER), &dTmp, NULL))
{
AfxMessageBox(L"error");
}
CloseHandle( g_ArrFileOut);
CString strTitle;
strTitle = GetTitle(); // Ϊ<><CEAA>ֹSetPathName<6D>ı<EFBFBD><C4B1>ĵ<EFBFBD><C4B5><EFBFBD>Title<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
// <20><><EFBFBD>ӵ<EFBFBD> <20><><EFBFBD>򿪵<EFBFBD><F2BFAAB5>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1><EFBFBD>
m_bCloseFile=TRUE; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ر<EFBFBD>
nProcessMode = DATA_MODE; // <20><><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD>д<EFBFBD><D0B4>̴<EFBFBD><CCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>ַ<EFBFBD>ʽ
m_bFirstCreateDeviceFile=TRUE; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>رպ<D8B1><D5BA><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ǵ<EFBFBD>һ<EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD>
///////
CADFrame* pADFrm = ((CSysApp*)AfxGetApp())->m_ADFrame ; // ȡ<><C8A1><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
CButton* pDataSave=(CButton*)(pADStatusView->GetDlgItem(IDM_DataSave));
pDataSave->EnableWindow(TRUE); // ʹ<><CAB9><EFBFBD>̷<EFBFBD>ʽ<EFBFBD><CABD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ч
CString str;
str.Format(_T("%d"), 0);
pADFrm->m_DiskFree()->SetWindowText(str);
if (gl_bAutoCollect)
{
// SetPathName(g_strFileFullName[1]);
SetPathName(g_strFileFullName);
SetTitle(strTitle); // <20>ָ<EFBFBD><D6B8>ĵ<EFBFBD><C4B5><EFBFBD>Title
pADFrm->ShowHideDlgSave (FALSE); // <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
pADFrm->ShowHideStatus();//<2F><>ʾ״̬<D7B4><CCAC>
}
pADFrm->m_Progress()->SetRange32(0,1024); // <20><><EFBFBD>ý<EFBFBD><C3BD>̷<EFBFBD>Χ
pADFrm->m_Progress()->SetPos(0);
// һ<>׽<EFBFBD><D7BD><EFBFBD>
pADStatusView->SetDlgCheck();
}
void CADDoc::OnTileWave()
{
// TODO: Add your command handler code here
gl_bTileWave = TRUE;
CButton* pButtonTile = (CButton*)pADStatusView->GetDlgItem(IDM_TileWave);
pButtonTile->SetCheck(1);
CButton* pButtonPose = (CButton*)pADStatusView->GetDlgItem(IDM_SuperPoseWave);
pButtonPose->SetCheck(0);
CADWaveView* pWaveView=(CADWaveView*)(CWnd::FromHandle(m_hWndWave));
pWaveView->m_ADScopeCtrl.InvalidateCtrl();
pWaveView->OnDrawPolyLine(gl_nDocDrawLen,gl_nDocDrawIdx);
}
void CADDoc::OnSuperPoseWave()
{
// TODO: Add your command handler code here
gl_bTileWave = FALSE;
CButton* pButtonTile = (CButton*)pADStatusView->GetDlgItem(IDM_TileWave);
pButtonTile->SetCheck(0);
CButton* pButtonPose = (CButton*)pADStatusView->GetDlgItem(IDM_SuperPoseWave);
pButtonPose->SetCheck(1);
CADWaveView* pWaveView = (CADWaveView*)(CWnd::FromHandle(m_hWndWave));
pWaveView->m_ADScopeCtrl.InvalidateCtrl();
pWaveView->OnDrawPolyLine(gl_nDocDrawLen,gl_nDocDrawIdx);
}
void CADDoc::OnUpdateSuperPoseWave(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(gl_bTileWave==TRUE ? 0:1);
}
void CADDoc::OnUpdateTileWave(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(gl_bTileWave==TRUE ? 1:0);
}