⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data.cpp

📁 vc ad
💻 CPP
字号:
// Data.cpp : implementation file
//

#include "stdafx.h"
#include "Card.h"
#include "cardtest.h"
#include "Data.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern AVE2KLIB_DISPLAY_PARAMETER g_ParaPrimary;

/////////////////////////////////////////////////////////////////////////////
// CData dialog


CData::CData(CWnd* pParent, CCard *pCard)
	: CDialog(CData::IDD, pParent)
{
	//{{AFX_DATA_INIT(CData)
	m_sIndex = _T("00");
	m_sReg = _T("");
	//}}AFX_DATA_INIT
	m_pCard=pCard;
	m_bReceive=FALSE;
	m_nRegIndex=0;
	//init counter source
	m_pCard->WriteReg(0xe4, (m_nRegIndex<<2)|0x03);
	//threshold
	m_pCard->WriteReg(0xec, 0xfff);
}

void CData::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CData)
	DDX_Control(pDX, IDC_DATA, m_DataWindow);
	DDX_Text(pDX, IDC_SINDEX, m_sIndex);
	DDX_Text(pDX, IDC_REG, m_sReg);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CData, CDialog)
	//{{AFX_MSG_MAP(CData)
	ON_WM_COMPAREITEM()
	ON_WM_MEASUREITEM()
	ON_WM_DRAWITEM()
	ON_WM_TIMER()
	ON_WM_DESTROY()
	ON_NOTIFY(UDN_DELTAPOS, IDC_REGSEL, OnDeltaposRegsel)
	ON_WM_MOVE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CData message handlers

BOOL CData::Create() 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::Create(IDD);
}

BOOL CData::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_hMem=GlobalAlloc(GMEM_FIXED , 8192);
	m_pBuf=(PUCHAR)GlobalLock(m_hMem);
	//m_pBuf=(PUCHAR)malloc(8192);
	if((ULONG)m_pBuf&0xfffff000==0)
		m_pWork=m_pBuf;
	else
		m_pWork=(PUCHAR)(((ULONG)m_pBuf&0xfffff000)+0x1000);
	ULONG PhyAddress;
	memset(m_pWork, 0, 2352);
	m_pCard->TransAddress((ULONG)m_pWork, &PhyAddress);
	//m_pCard->TransAddress((ULONG)g_ParaPrimary.VirtualAddress, &PhyAddress);
	m_pCard->ConfigAudio(PhyAddress);
	m_pCard->WriteReg(MC1, 0x80000000);
	m_pCard->ConfigAudio(PhyAddress);
	for(int i=0; i<147; i++){
		m_DataWindow.AddString("");
	}
	RECT rect;
	GetWindowRect(&rect);
	SetWindowPos(NULL, 
		350,
		0,
		rect.right-rect.left,
		rect.bottom-rect.top,
		SWP_NOZORDER);
	SetTimer(1, 100, NULL);
	m_nTimerCnt=0;
	//m_DisplayAddress=(PUCHAR)g_ParaPrimary.VirtualAddress+y*g_ParaPrimary.Pitch+x*g_ParaPrimary.Depth;
	m_DisplayAddress=(PUCHAR)g_ParaPrimary.VirtualAddress+
		(GetSystemMetrics(SM_CYDLGFRAME)+GetSystemMetrics(SM_CYCAPTION))*g_ParaPrimary.Pitch+
		(350+GetSystemMetrics(SM_CXDLGFRAME))*g_ParaPrimary.Depth;
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

int CData::OnCompareItem(int nIDCtl, LPCOMPAREITEMSTRUCT lpCompareItemStruct) 
{
	// TODO: Add your message handler code here and/or call default
	if(nIDCtl==IDC_DATA)
		return 1;
	return CDialog::OnCompareItem(nIDCtl, lpCompareItemStruct);
}

void CData::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
{
	// TODO: Add your message handler code here and/or call default
	if(nIDCtl==IDC_DATA){
		lpMeasureItemStruct->CtlType=ODT_LISTBOX;
		lpMeasureItemStruct->CtlID=nIDCtl;
		lpMeasureItemStruct->itemWidth=40;
		lpMeasureItemStruct->itemHeight=12;
		return;
	}
	CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}

char HexToChar(int n)
{
	if(n<=9)
		return n+'0';
	return n-10+'A';
}

void DumpBuffer(unsigned char *pBuf, char *Out)
{
	unsigned char c;
	char hex[3];
	int i;
	Out[0]=0;
	hex[2]=' ';
	hex[3]=0;
	for(i=0; i<16; i++){
		c=*pBuf++;
		hex[0]=HexToChar(c>>4);
		hex[1]=HexToChar(c&0x0f);
		strcat(Out, hex);
		if(i==7)
			strcat(Out, "- ");
	}
	strcat(Out, "\n");
}

void CData::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your message handler code here and/or call default
	if(nIDCtl==IDC_DATA){
		PUCHAR pShow=m_pWork+16*lpDrawItemStruct->itemID;
		HDC hDC=lpDrawItemStruct->hDC;
		char sOut[60];
		DumpBuffer(pShow, sOut);
		DrawText(hDC, sOut, 50, &lpDrawItemStruct->rcItem, DT_VCENTER);
		return;
	}
	CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

void CData::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if(m_bReceive)
		memcpy(m_DisplayAddress, m_pWork, 800);
	if(m_nTimerCnt<5){
		m_nTimerCnt++;
		return;
	}
	m_nTimerCnt=0;
	int nReg=m_pCard->ReadReg(0x118);//PSR
	//clear counter
	m_pCard->WriteReg(0xe4, (m_nRegIndex<<2)|0x03);
	CString s;
	s.Format("%d", nReg&0xfff);
	m_sReg=s;
	UpdateData(FALSE);
	if(m_bReceive)
		InvalidateRect(NULL);
	CDialog::OnTimer(nIDEvent);
}

void CData::StartReceive()
{
	m_bReceive=TRUE;
}

void CData::StopReceive()
{
	m_bReceive=FALSE;
}

void CData::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	//free(m_pBuf);
	GlobalUnlock(m_hMem);
	GlobalFree(m_hMem);
}

void CData::OnDeltaposRegsel(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	// TODO: Add your control notification handler code here
	if(pNMUpDown->iDelta<0)
		//a up button checked
		m_nRegIndex++;
	else
		//a down button checked
		m_nRegIndex--;
	//limit the range
	if(m_nRegIndex>0x3f)
		m_nRegIndex=0x3f;
	if(m_nRegIndex<0)
		m_nRegIndex=0;
	m_sIndex.Format("%02x", m_nRegIndex);
	UpdateData(FALSE);
	//select counter source and clear it
	m_pCard->WriteReg(0xe4, (m_nRegIndex<<2)|0x03);
	*pResult = 0;
}

void CData::OnMove(int x, int y) 
{
	CDialog::OnMove(x, y);
	
	// TODO: Add your message handler code here
	m_DisplayAddress=(PUCHAR)g_ParaPrimary.VirtualAddress+y*g_ParaPrimary.Pitch+x*g_ParaPrimary.Depth;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -