📄 number.cpp
字号:
// Number.cpp : implementation file
//
#include "stdafx.h"
#include "version.h"
#include "card.h"
#include "cardtest.h"
#include "Number.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNumber dialog
CNumber::CNumber(CWnd* pParent /*=NULL*/, CCard* pCard)
: CDialog(CNumber::IDD, pParent)
{
//{{AFX_DATA_INIT(CNumber)
m_sMonth = _T("");
m_sYear = _T("");
m_sSerial = _T("");
m_sType = _T("");
m_bErase = FALSE;
m_nType = 0;
m_nVol = 0;
m_bRevD2 = FALSE;
//}}AFX_DATA_INIT
m_nFail=0;
m_nSuc=0;
m_bLoop=FALSE;
m_pCard=pCard;
m_pParent=(CCardtestDlg*)pParent;
}
void CNumber::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNumber)
DDX_Text(pDX, IDC_MONTH, m_sMonth);
DDX_Text(pDX, IDC_YEAR, m_sYear);
DDX_Text(pDX, IDC_SERIALN, m_sSerial);
DDX_Text(pDX, IDC_TYPEN, m_sType);
DDX_Check(pDX, IDC_ERASE, m_bErase);
DDX_Radio(pDX, IDC_TYPE_UNKNOWN, m_nType);
DDX_Radio(pDX, IDC_VOL_UNKNOWN, m_nVol);
DDX_Check(pDX, IDC_VERSION, m_bRevD2);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNumber, CDialog)
//{{AFX_MSG_MAP(CNumber)
ON_BN_CLICKED(IDC_TYPE_XS, OnTypeXs)
ON_BN_CLICKED(IDC_TYPE_XD, OnTypeXd)
ON_BN_CLICKED(IDC_TYPE_XM, OnTypeXm)
ON_BN_CLICKED(IDC_TYPE_XQ, OnTypeXq)
ON_BN_CLICKED(IDC_TYPE_III, OnTypeIii)
ON_BN_CLICKED(IDC_ERASE, OnErase)
ON_BN_CLICKED(IDC_REFRESH, OnRefresh)
ON_BN_CLICKED(IDC_WRITE, OnWrite)
ON_BN_CLICKED(IDC_VOL_NONE, OnVol)
ON_BN_CLICKED(IDC_STARTLOOP, OnStartloop)
ON_MESSAGE(WM_I2CLOOP, OnI2CLoop)
ON_BN_CLICKED(IDC_STOPLOOP, OnStoploop)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_TYPE_XDPRO, OnTypeXdpro)
ON_BN_CLICKED(IDC_VOL_62429, OnVol)
ON_BN_CLICKED(IDC_VOL_ANASW, OnVol)
ON_BN_CLICKED(IDC_TYPE_XSPRO, OnTypeXspro)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNumber message handlers
BOOL CNumber::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
GetHeader();
GetDlgItem(IDC_STOPLOOP)->EnableWindow(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
const int g_nVol[]={VOL_UNKNOWN, VOL_NONE, VOL_62429, VOL_NONE, VOL_ANASW, VOL_NONE, VOL_ANASW, VOL_ANASW, VOL_ANASW};
void CNumber::GetHeader()
{
UCHAR Head[12];
char buf[20];
if(!m_pCard->GetEepromHeader(Head)){
MessageBox("EEPROM 出错!", "错误", MB_ICONSTOP);
g_Main->OutString("读EEPROM出错。");
}
else
g_Main->OutString("读EEPROM正确。");
int nVendor=((Head[2]<<8)|(Head[3]));
m_pCard->SetCardType(CNumber::GetType((Head[0]<<8)|(Head[1])), Head[6]&0x80);
if(nVendor==0xffff){
CTime time=CTime::GetCurrentTime();
m_nType=m_pParent->GetLastType();
m_nVol=g_nVol[m_nType];
sprintf(buf, "%02d", time.GetMonth());
m_sMonth=buf;
sprintf(buf, "%02d", time.GetYear()-2000);
m_sYear=buf;
buf[1]=0;
buf[0]=TypeToChar(m_nType);
m_sType=buf;
int nSerial=m_pParent->GetLastSerial();
if(m_nType==TYPE_XQ||m_nType==TYPE_XDPRO){
int nBus, nSlot;
m_pCard->GetBusSlot(&nBus, &nSlot);
if(nSlot==4)
nSerial++;
}
else
nSerial++;
sprintf(buf, "%05d", nSerial);
m_sSerial=buf;
GetDlgItem(IDC_ERASE)->EnableWindow(FALSE);
}
else{
if(nVendor!=0x5468)
m_nType=TYPE_UNKNOWN;
else
m_nType=GetType((Head[0]<<8)|Head[1]);
if(nVendor==0x0010)
m_nType=TYPE_SS3000;
m_nVol=GetVol(Head[6]&0x07);
m_bRevD2=((Head[6]&0x80)!=0);
m_nSerial=(Head[7]<<24)|(Head[8]<<16)|(Head[9]<<8)|(Head[10]);
sprintf(buf, "%010d", m_nSerial);
char buf2[3];
buf2[2]=0;
buf2[0]=buf[0];
buf2[1]=buf[1];
m_sYear=buf2;
buf2[0]=buf[2];
buf2[1]=buf[3];
m_sMonth=buf2;
buf2[1]=0;
buf2[0]=buf[4];
m_sType=buf2;
m_sSerial=buf+5;
DisableInput();
GetDlgItem(IDC_ERASE)->EnableWindow(TRUE);
}
m_pCard->SetCardType(m_nType, Head[6]&0x80);
UpdateData(FALSE);
//GetDlgItem(IDC_TYPE_UNKNOWN)->EnableWindow(FALSE);
//GetDlgItem(IDC_VOL_UNKNOWN)->EnableWindow(FALSE);
}
void CNumber::EnableInput()
{
GetDlgItem(IDC_TYPES)->EnableWindow(TRUE);
#if(TARGET==AVE2K)
GetDlgItem(IDC_TYPE_XS)->EnableWindow(TRUE);
GetDlgItem(IDC_TYPE_XD)->EnableWindow(TRUE);
GetDlgItem(IDC_TYPE_XM)->EnableWindow(TRUE);
GetDlgItem(IDC_TYPE_XQ)->EnableWindow(TRUE);
GetDlgItem(IDC_TYPE_XDPRO)->EnableWindow(TRUE);
GetDlgItem(IDC_TYPE_XSPRO)->EnableWindow(TRUE);
#else
GetDlgItem(IDC_TYPE_III)->EnableWindow(TRUE);
#endif
GetDlgItem(IDC_VOLS)->EnableWindow(TRUE);
GetDlgItem(IDC_VOL_NONE)->EnableWindow(TRUE);
GetDlgItem(IDC_VOL_62429)->EnableWindow(TRUE);
GetDlgItem(IDC_VOL_ANASW)->EnableWindow(TRUE);
GetDlgItem(IDC_SERIAL)->EnableWindow(TRUE);
GetDlgItem(IDC_YEAR)->EnableWindow(TRUE);
GetDlgItem(IDC_MONTH)->EnableWindow(TRUE);
GetDlgItem(IDC_TYPEN)->EnableWindow(TRUE);
GetDlgItem(IDC_SERIALN)->EnableWindow(TRUE);
GetDlgItem(IDC_WRITE)->EnableWindow(TRUE);
UpdateData();
if(m_nType==4 || m_nType==6)
GetDlgItem(IDC_VERSION)->EnableWindow(TRUE);
}
void CNumber::DisableInput()
{
GetDlgItem(IDC_TYPES)->EnableWindow(FALSE);
GetDlgItem(IDC_TYPE_XS)->EnableWindow(FALSE);
GetDlgItem(IDC_TYPE_XD)->EnableWindow(FALSE);
GetDlgItem(IDC_TYPE_XM)->EnableWindow(FALSE);
GetDlgItem(IDC_TYPE_XQ)->EnableWindow(FALSE);
GetDlgItem(IDC_TYPE_III)->EnableWindow(FALSE);
GetDlgItem(IDC_TYPE_XDPRO)->EnableWindow(FALSE);
GetDlgItem(IDC_TYPE_XSPRO)->EnableWindow(FALSE);
GetDlgItem(IDC_VOLS)->EnableWindow(FALSE);
GetDlgItem(IDC_VOL_NONE)->EnableWindow(FALSE);
GetDlgItem(IDC_VOL_62429)->EnableWindow(FALSE);
GetDlgItem(IDC_VOL_ANASW)->EnableWindow(FALSE);
GetDlgItem(IDC_SERIAL)->EnableWindow(FALSE);
GetDlgItem(IDC_YEAR)->EnableWindow(FALSE);
GetDlgItem(IDC_MONTH)->EnableWindow(FALSE);
GetDlgItem(IDC_TYPEN)->EnableWindow(FALSE);
GetDlgItem(IDC_SERIALN)->EnableWindow(FALSE);
GetDlgItem(IDC_WRITE)->EnableWindow(FALSE);
GetDlgItem(IDC_VERSION)->EnableWindow(FALSE);
m_bErase=0;
}
int CNumber::GetVol(int nVolCode)
{
switch(nVolCode){
case 0:
return VOL_NONE;
case 3:
return VOL_62429;
case 4:
return VOL_ANASW;
default:
return VOL_UNKNOWN;
}
}
int CNumber::GetType(int nTypeCode)
{
switch(nTypeCode){
case 0x2000:
case 0x2001:
return TYPE_XS;
case 0x2002:
return TYPE_XD;
case 0x2003:
return TYPE_XM;
case 0x2004:
return TYPE_XQ;
case 0x2005:
return TYPE_XDPRO;
case 0x2006:
return TYPE_XSPRO;
case 3:
return TYPE_III;
case 0x5410:
return TYPE_SS3000;
default:
return TYPE_UNKNOWN;
}
}
char CNumber::TypeToChar(int nType)
{
switch(nType){
case TYPE_XS:
return '1';
case TYPE_XD:
return '2';
case TYPE_XM:
return '4';
case TYPE_III:
return '7';
case TYPE_XQ:
return '5';
case TYPE_XDPRO:
return '6';
case TYPE_XSPRO:
return '7';
default:
return 0;
}
}
void CNumber::SelectType(BOOL bNewVersion)
{
UpdateData();
m_nVol=g_nVol[m_nType];
m_sType=TypeToChar(m_nType);
UpdateData(FALSE);
if(bNewVersion)
GetDlgItem(IDC_VERSION)->EnableWindow(TRUE);
else{
GetDlgItem(IDC_VERSION)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_VERSION))->SetCheck(0);
}
}
void CNumber::OnTypeXs()
{
// TODO: Add your control notification handler code here
SelectType(FALSE);
}
void CNumber::OnTypeXd()
{
// TODO: Add your control notification handler code here
SelectType(FALSE);
}
void CNumber::OnTypeXm()
{
// TODO: Add your control notification handler code here
SelectType(FALSE);
}
void CNumber::OnTypeXq()
{
// TODO: Add your control notification handler code here
SelectType(TRUE);
}
void CNumber::OnTypeIii()
{
// TODO: Add your control notification handler code here
SelectType(FALSE);
}
void CNumber::OnTypeXdpro()
{
// TODO: Add your control notification handler code here
SelectType(TRUE);
}
void CNumber::OnTypeXspro()
{
// TODO: Add your control notification handler code here
SelectType(FALSE);
((CButton*)GetDlgItem(IDC_VERSION))->SetCheck(1);
}
void CNumber::OnErase()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_bErase)
EnableInput();
else
DisableInput();
}
void CNumber::OnRefresh()
{
// TODO: Add your control notification handler code here
GetHeader();
}
void CNumber::OnWrite()
{
// TODO: Add your control notification handler code here
UpdateData();
m_pParent->SetLastSerial(atol(m_sSerial));
m_pParent->SetLastType(m_nType);
//m_pCard->SetCardType(m_nType);
char buf[20];
UCHAR Head[12];
int nTypeCodes[]={0xffff, 0x2001, 0x2002, 0x2003, 0x2004, 0x0003, 0x2005, 0x2006, 0x2007};
int nVolCodes[]={0xff, 0, 3, 4};
int nTypeCode=nTypeCodes[m_nType];
Head[0]=nTypeCode>>8;
Head[1]=nTypeCode&0xff;
Head[2]=0x54;
Head[3]=0x68;
Head[4]=0x25;
Head[5]=0x0f;
Head[6]=nVolCodes[m_nVol];
//XS Pro only has REVD2
//beside of XS Pro, only XDPRO & XQ have REVD2
if(m_nType==7 ||((m_nType==4 || m_nType==6) && m_bRevD2))
Head[6]|=0x80;//bit 7 is flag for OSD, relay & VIDV
else
Head[6]&=0x7f;
strcpy(buf, m_sYear);
strcat(buf, m_sMonth);
strcat(buf, m_sType);
strcat(buf, m_sSerial);
int nSerial=atol(buf);
Head[7]=(nSerial>>24)&0xff;
Head[8]=(nSerial>>16)&0xff;
Head[9]=(nSerial>>8)&0xff;
Head[10]=(nSerial)&0xff;
//memset(Head, 0xff, 11);
m_pCard->SetCardType(CNumber::GetType((Head[0]<<8)|(Head[1])), Head[6]);
if(m_bErase)
g_Main->OutString("覆盖写入新数据。");
if(!m_pCard->SetEepromHeader(Head)){
MessageBox("EEPROM 出错!", "错误", MB_ICONSTOP);
g_Main->OutString("写入EEPROM 出错。");
}
else
g_Main->OutString("写入EEPROM正确。");
}
void CNumber::OnVol()
{
// TODO: Add your control notification handler code here
UpdateData();
UpdateData(FALSE);
}
void CNumber::OnStartloop()
{
// TODO: Add your control notification handler code here
/* PUCHAR pBuf=m_FirstBuf;
if(!m_pCard->GetEepromContent(pBuf)){
MessageBox("Read error!", "Error", MB_ICONWARNING);
}*/
PostMessage(WM_I2CLOOP, 0, 0);
// add i2c test code here
// i2cinit
// i2cwrite
// i2cread
m_bLoop=TRUE;
GetDlgItem(IDC_STARTLOOP)->EnableWindow(FALSE);
GetDlgItem(IDC_STOPLOOP)->EnableWindow(TRUE);
}
void CNumber::OnI2CLoop(ULONG wParam, ULONG lParam)
{
/*
UCHAR buf[256];
PUCHAR pBuf=buf;
BOOL bFail;
bFail=!m_pCard->GetEepromContent(pBuf);
for(int i=0; i<256; i++){
if(buf[i]!=m_FirstBuf[i]){
bFail=TRUE;
break;
}
}
if(bFail)//!m_pCard->GetEepromHeader(Head))
{
m_nFail++;
CString s;
s.Format("%d", m_nFail);
GetDlgItem(IDC_LOOPFAIL)->SetWindowText(s);
}
else{
m_nSuc++;
CString s;
s.Format("%d", m_nSuc);
GetDlgItem(IDC_LOOPSUC)->SetWindowText(s);
}*/
if(m_pCard->InitMTV118("0 2 - 0 4 - 0 5 / C H a b c d ")==0){
m_nFail++;
CString s;
s.Format("%d", m_nFail);
GetDlgItem(IDC_LOOPFAIL)->SetWindowText(s);
}
else{
m_nSuc++;
CString s;
s.Format("%d", m_nSuc);
GetDlgItem(IDC_LOOPSUC)->SetWindowText(s);
}
if(m_bLoop)
SetTimer(1, 5, NULL);
}
void CNumber::OnStoploop()
{
// TODO: Add your control notification handler code here
m_bLoop=FALSE;
GetDlgItem(IDC_STOPLOOP)->EnableWindow(FALSE);
GetDlgItem(IDC_STARTLOOP)->EnableWindow(TRUE);
}
void CNumber::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
KillTimer(1);
PostMessage(WM_I2CLOOP, 0, 0);
CDialog::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -