SSPC-Tester/Docs/PCIe8586驱动接入资料/Samples/VC/Advanced/ADHistDoc.cpp

244 lines
5.2 KiB
C++
Raw Normal View History

// HistDataDoc.cpp : implementation file
//
#include "stdafx.h"
#include "ADHistDoc.h"
#include "ADHistDigitView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CADHistDoc
IMPLEMENT_DYNCREATE(CADHistDoc, CDocument)
CADHistDoc::CADHistDoc()
{
m_Offset = 0;
m_SliderOffset = 0;
m_Rate = 1;
m_nFileNum = 0;
m_ReadDataSize = 4096;
m_bAsynMode = FALSE;
m_HistScreenWith = GetSystemMetrics(SM_CXSCREEN); // ȡ<><C8A1><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
for (int index=0; index<MAX_CHANNEL_COUNT; index++)
{
m_HistDataBuffer[index] = new WORD[m_HistScreenWith];
}
}
BOOL CADHistDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
return TRUE;
}
CADHistDoc::~CADHistDoc()
{
CSysApp *pApp = (CSysApp*)AfxGetApp();
//pApp->m_strFilePath = "";
for (int index=0; index<MAX_CHANNEL_COUNT; index++)
{
if (NULL != m_HistDataBuffer[index])
{
delete [] m_HistDataBuffer[index];
}
}
}
BEGIN_MESSAGE_MAP(CADHistDoc, CDocument)
//{{AFX_MSG_MAP(CADHistDoc)
ON_COMMAND(IDM_HistoryData, OnHistoryData)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CADHistDoc diagnostics
#ifdef _DEBUG
void CADHistDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CADHistDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CADHistDoc serialization
void CADHistDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CADHistDoc commands
BOOL CADHistDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
CSysApp *pApp = (CSysApp*)AfxGetApp();
//TCHAR* pFileName = pApp->m_strFilePath.GetBuffer(sizeof(pApp->m_strFilePath)); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
if (m_File.Open(lpszPathName, CFile::modeRead)) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
{
m_File.Seek(0, CFile::begin);
m_File.Read((WORD*)&m_Header, sizeof(m_Header));
m_ChannelCount = m_Header.ChannelCount;
m_ReadDataSize = m_ReadDataSize-m_ReadDataSize%(m_ChannelCount);
}
m_FileLength = ((m_File.GetLength() /*- sizeof(::_FILE_HEADER)*/)); // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>(<28><>)
if (m_FileLength<0x7FFFFFFF)
{
m_SliderRatio = 1;
}
else
{
m_SliderRatio = (m_FileLength/0x7FFFFFFF)+1;
// if (m_SliderRatio<100)
// {
// m_SliderRatio = 100;
// }
}
m_fLsbCount = (float)m_Header.ADMainInfo.nSampCodeCount;
m_wMaxLSB = (WORD)(m_Header.ADMainInfo.nSampCodeCount-1);
m_lLsbHalf = (WORD)(m_Header.ADMainInfo.nSampCodeCount/2);
int nSampChanCount = 0;
for (int nChannel=0; nChannel<MAX_CHANNEL_COUNT; nChannel++)
{
if (m_Header.ADPara.bChannelArray[nChannel] == TRUE)
{
m_ChCfg[nSampChanCount] =nChannel;
nSampChanCount++;
}
}
return TRUE;
}
void CADHistDoc::ReadData(void)
{
m_File.Seek(0, CFile::begin);
if (m_nCount>256) m_nCount = 256;
LONGLONG loffset = (m_Offset * sizeof(WORD))*m_ChannelCount + m_Header.HeadSizeBytes;
m_File.Seek(loffset, CFile::begin);
try
{
m_nCount = m_File.Read((ULONG*)&m_ADBuffer, sizeof(m_ADBuffer));
}
catch(...)
{
AfxMessageBox(_T("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
return;
}
m_nCount = m_nCount/sizeof(WORD)/m_ChannelCount;
}
void CADHistDoc::OnHistoryData()
{
// TODO: Add your command handler code here
((CSysApp*)AfxGetApp())->OnHistoryData();
}
PWORD CADHistDoc::GetBuffer(LONGLONG* pDataSizeWords) //
{
ASSERT(pDataSizeWords != NULL);
m_File.Seek(0, CFile::begin);
LONGLONG loffset = sizeof(::_FILE_HEADER)+(m_Offset*sizeof(WORD))*m_ChannelCount;
*pDataSizeWords = (m_FileLength /*- m_Header.HeadSizeBytes*/-loffset)/(sizeof(WORD)*m_ChannelCount);
if (*pDataSizeWords == -1)
{
int a= 0;
}
m_File.Seek(loffset, CFile::begin);
try
{
m_File.Read((ULONG*)&m_ADBuffer, sizeof(m_ADBuffer));
}
catch(...)
{
AfxMessageBox(_T("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
return 0;
}
return m_ADBuffer;
}
PWORD CADHistDoc::GetBuffer(int iChannel, LONGLONG iOffset, LONGLONG* pDataSizeWords)
{
ASSERT(iOffset >= 0);
if ((iChannel>=0) && (iChannel<MAX_CHANNEL_COUNT))
{
if ((iChannel>=0) && (iChannel<MAX_CHANNEL_COUNT))
{
LONGLONG iDataLength = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PWORD pDataBuff = this->GetBuffer(&iDataLength);
//iDataLength = iDataLength/m_ChannelCount; // ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>
int iDataPos = 0; // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ󻺳<DAB4><F3BBBAB3><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>
int iPos=0;
for ( iPos=0; iPos<m_HistScreenWith; iPos++)//??
{
if (iPos > iDataLength)
{
break;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ󻺳<DAB4><F3BBBAB3><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>
iDataPos = iPos * m_ChannelCount + (iChannel - 0);
m_HistDataBuffer[iChannel][iPos] = (SHORT)(pDataBuff[iDataPos] & m_wMaxLSB);
if ((iOffset+iPos) > (LONGLONG)((m_FileLength-sizeof(::_FILE_HEADER))/(sizeof(WORD) * m_ChannelCount)))
{
m_HistDataBuffer[iChannel][iPos] = NULL;
}
}
if (pDataSizeWords != NULL)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
*pDataSizeWords = iPos-1;
}
return m_HistDataBuffer[iChannel];
}
else
{
ASSERT(FALSE); // û<>жԸ<D0B6>ͨ<EFBFBD><CDA8><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
return NULL;
}
}
else
{
ASSERT(FALSE); // ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return NULL;
}
return NULL;
}