📄 data.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 + -