📄 commtestdlg.cpp
字号:
NULL, OPEN_ALWAYS, 0, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
CFile myFile((int)hFile);
myFile.Seek(0,CFile::begin);
FileBank = 0;
for(mFLength=0;mFLength<2048;mFLength++)
{
vHexModefy(FileBank);
myFile.Write(hexTxbuff, 268);
FileBank +=0x0080;
}
}
CloseHandle(hFile);
mFLength = m_Pathname.GetLength();
mFLength -= 6;
if(m_Pathname.Find("00",mFLength) != -1)
{
FileTxtRplace = m_Pathname.Replace("00.HEX", ".H00");
ASSERT(FileTxtRplace == 1);
}
if(m_Pathname.Find("01",mFLength) != -1)
{
FileTxtRplace = m_Pathname.Replace("01.HEX", ".H01");
ASSERT(FileTxtRplace == 1);
}
if(m_Pathname.Find("02",mFLength) != -1)
{
FileTxtRplace = m_Pathname.Replace("02.HEX", ".H02");
ASSERT(FileTxtRplace == 1);
}
if(m_Pathname.Find("03",mFLength) != -1)
{
FileTxtRplace = m_Pathname.Replace("03.HEX", ".H03");
ASSERT(FileTxtRplace == 1);
}
}
void CCommtestDlg::OnFileChange(CString mStr)
{
unsigned char FileTxtRplace;
FileTxtRplace = m_Pathname.Replace("H00", mStr);
if(FileTxtRplace == 0)
{
FileTxtRplace = m_Pathname.Replace("H01", mStr);
if(FileTxtRplace == 0)
{
FileTxtRplace = m_Pathname.Replace("H02", mStr);
if(FileTxtRplace == 0)
{
FileTxtRplace = m_Pathname.Replace("H03", mStr);
if(FileTxtRplace == 0)
{
ASSERT(FileTxtRplace == 1);
}
}
}
}
}
void CCommtestDlg::vDataDownLoad(unsigned short int SectorOffset)
{
//数据包格式: :ll kk aaaa tt [dd...] cc
//: 包头
//ll 数据长度
//kk 程序分区数
//aaaa 扇区地址
//dd... 数据域
//cc 和校验 cc = 0x01H + NOT(ll + kk + aa +aa +tt + dd...)
unsigned char Txchar;
unsigned short int num;
memset(hexTxbuff, 0, sizeof(hexTxbuff)); //发送缓冲区清0
CheckSum = 0;
Txbuffptr = hexTxbuff;
Binptr = &Filesbuf[SectorOffset];
*Txbuffptr++ = ':'; //包头
Txchar = (unsigned)(m_DataLong%256); //数据长度
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
Txchar = (unsigned)(SectorOffset/256); //扇区地址
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
Txchar = (unsigned)(SectorOffset%256); //扇区地址
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
*Txbuffptr++ = '0'; //数据类型
*Txbuffptr++ = '0';
CheckSum += 0x00;
for(num=0;num<m_Sector;num++)
{
Txchar = *Binptr++;
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
}
CheckSum = ~CheckSum;
CheckSum +=1;
Txchar = (unsigned char)CheckSum; //和校验
BinToChar(Txchar,&Txbuffptr);
*Txbuffptr++ = 0x00;
Txbuffptr = hexTxbuff;
m_Ports.WriteToPort(Txbuffptr);
}
void CCommtestDlg::vHexModefy(unsigned short int SectorOffset)
{
//数据包格式: :ll kk aaaa tt [dd...] cc
//: 包头
//ll 数据长度
//kk 程序分区数
//aaaa 扇区地址
//dd... 数据域
//cc 和校验 cc = 0x01H + NOT(ll + kk + aa +aa +tt + dd...)
unsigned char Txchar;
unsigned short int num;
memset(hexTxbuff, 0, sizeof(hexTxbuff)); //发送缓冲区清0
CheckSum = 0;
Txbuffptr = hexTxbuff;
Binptr = &Filesbuf[SectorOffset];
*Txbuffptr++ = ':'; //包头
*Txbuffptr++ = '8'; //数据长度
*Txbuffptr++ = '0';
CheckSum += 0x80;
Txchar = (unsigned)(SectorOffset/256); //扇区地址
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
Txchar = (unsigned)(SectorOffset%256); //扇区地址
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
*Txbuffptr++ = '0'; //数据类型
*Txbuffptr++ = '0';
CheckSum += 0x00;
for(num=0;num<128;num++)
{
Txchar = *Binptr++;
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
}
CheckSum = ~CheckSum;
CheckSum +=1;
Txchar = (unsigned char)CheckSum; //和校验
BinToChar(Txchar,&Txbuffptr);
*Txbuffptr++ = 0x0D; //结束标志
*Txbuffptr++ = 0x0A;
}
void CCommtestDlg::vCOmSend(unsigned char m_ComLength, unsigned char m_ComType, unsigned short int m_AdderData)
{
//数据包格式: :ll kk aaaa tt [dd...] cc
//: 包头
//ll 数据长度
//kk 程序分区数
//aaaa 扇区地址
//dd... 数据域
//cc 和校验 cc = 0x01H + NOT(ll + kk + aa +aa +tt + dd...)
unsigned char Txchar;
memset(hexTxbuff, 0, sizeof(hexTxbuff)); //发送缓冲区清0
CheckSum = 0;
Txbuffptr = hexTxbuff;
*Txbuffptr++ = ':'; //包头
Txchar = m_ComLength; //数据长度
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
Txchar = 0x00; //地址
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
Txchar = 0x00;
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
Txchar = m_ComType; //数据类型
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
if(m_ComLength !=0)
{
Txchar = (unsigned)(m_AdderData/256);
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
Txchar = (unsigned)(m_AdderData%256);
CheckSum += Txchar;
BinToChar(Txchar,&Txbuffptr);
}
CheckSum = ~CheckSum;
CheckSum +=1;
Txchar = (unsigned char)CheckSum; //和校验
BinToChar(Txchar,&Txbuffptr);
Txbuffptr = hexTxbuff;
m_Ports.WriteToPort(Txbuffptr);
}
void CCommtestDlg::BinToChar(unsigned char BinChar, char ** TxDataPtr)
{
//转换后的HEX代码直接存储在全局变量数组中
unsigned char byte,byte_tmp;
byte_tmp = byte = (unsigned)BinChar;
byte >>= 4;
if(0<= byte && byte <=9)
{
byte += '0';
*(*TxDataPtr)++ = byte;
}
else
{
byte += 'A' - 10;
*(*TxDataPtr)++ = byte;
}
byte = byte_tmp;
byte &= 0x0F;
if(0<= byte && byte <=9)
{
byte += '0';
*(*TxDataPtr)++ = byte;
}
else
{
byte += 'A' - 10;
*(*TxDataPtr)++ = byte;
}
}
unsigned char CCommtestDlg::toint(unsigned char hex_data)
{
unsigned char vhex;
switch(hex_data)
{
case '0' : vhex = 0; break;
case '1' : vhex = 1; break;
case '2' : vhex = 2; break;
case '3' : vhex = 3; break;
case '4' : vhex = 4; break;
case '5' : vhex = 5; break;
case '6' : vhex = 6; break;
case '7' : vhex = 7; break;
case '8' : vhex = 8; break;
case '9' : vhex = 9; break;
case 'A' : vhex = 10; break;
case 'B' : vhex = 11; break;
case 'C' : vhex = 12; break;
case 'D' : vhex = 13; break;
case 'E' : vhex = 14; break;
case 'F' : vhex = 15; break;
default: break;
}
return vhex;
}
void CCommtestDlg::vWriteBuff(unsigned char * buf,unsigned char * hbuff, unsigned short int set,unsigned short int leng)
{
unsigned short int i;
unsigned char * k;
k = buf;
k += set;
for(i=0;i<leng;i++)
{
*(k++) = hbuff[i];
}
}
void PASCAL TimerProc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
CString str;
static int counter(0);
static int NumC(0);
static unsigned short int PerNum;
static float PerN(0);
CCommtestDlg * pDlg = (CCommtestDlg * )dwUser;
NumC++;
PerN += 256.0;
if(NumC==2)
{
NumC = 0;
PerNum = (unsigned short int)(PerN/65536.0+0.5);
counter = (pDlg->m_prog).GetPos();
str.Format("%3d%c", counter,'%');
if(pDlg->GetDlgItem(IDC_STATIC_SHOW)->GetSafeHwnd())
pDlg->GetDlgItem(IDC_STATIC_SHOW)->SetWindowText(str);
(pDlg->m_prog).SetPos(PerNum);
(pDlg->m_prog).StepIt();
if(PerNum==100)
{
PerNum = 0;
PerN = 0;
}
//pDlg->UpdateWindow();
}
}
LONG CCommtestDlg::OnCTSDetected(WPARAM, LPARAM port)
{
if(port <= 0 || port > 4)
return -1;
return 0;
}
void CCommtestDlg::OnSeriaPortSet()
{
CConfigDlg* dlg = new CConfigDlg(this, m_Ports.GetDCB());
dlg->m_strSendBuffer.Format("%d", m_Ports.GetWriteBufferSize());
DWORD dwCommEvents = m_Ports.GetCommEvents();
dlg->m_CommBreakDetected = (dwCommEvents & EV_BREAK) > 0 ? TRUE : FALSE;
dlg->m_CommCTSDetected = (dwCommEvents & EV_CTS) > 0 ? TRUE : FALSE;
dlg->m_CommDSRDetected = (dwCommEvents & EV_DSR) > 0 ? TRUE : FALSE;
dlg->m_CommERRDetected = (dwCommEvents & EV_ERR) > 0 ? TRUE : FALSE;
dlg->m_CommRingDetected = (dwCommEvents & EV_RING) > 0 ? TRUE : FALSE;
dlg->m_CommRLSDDetected = (dwCommEvents & EV_RLSD) > 0 ? TRUE : FALSE;
dlg->m_CommRxchar = (dwCommEvents & EV_RXCHAR) > 0 ? TRUE : FALSE;
dlg->m_CommRxcharFlag = (dwCommEvents & EV_RXFLAG) > 0 ? TRUE : FALSE;
dlg->m_CommTXEmpty = (dwCommEvents & EV_TXEMPTY) > 0 ? TRUE : FALSE;
if (dlg->DoModal() == IDOK)
{
DWORD dwCommEvents = 0;
if (dlg->m_CommBreakDetected)
dwCommEvents |= EV_BREAK;
if (dlg->m_CommCTSDetected)
dwCommEvents |= EV_CTS;
if (dlg->m_CommDSRDetected)
dwCommEvents |= EV_DSR;
if (dlg->m_CommERRDetected)
dwCommEvents |= EV_ERR;
if (dlg->m_CommRingDetected)
dwCommEvents |= EV_RING;
if (dlg->m_CommRLSDDetected)
dwCommEvents |= EV_RLSD;
if (dlg->m_CommRxchar)
dwCommEvents |= EV_RXCHAR;
if (dlg->m_CommRxcharFlag)
dwCommEvents |= EV_RXFLAG;
if (dlg->m_CommTXEmpty)
dwCommEvents |= EV_TXEMPTY;
m_Ports.InitPort(this,
atoi(dlg->m_strComBank),
atoi(dlg->m_strBaudRate),
dlg->m_strParity[0],
atoi(dlg->m_strDataBits),
atoi(dlg->m_strStopBits),
dwCommEvents,
atoi(dlg->m_strSendBuffer));
m_Ports.StartMonitoring();
}
delete dlg;
}
void CCommtestDlg::OnVerify()
{
char * SectorID = ":0000001CE4"; //扇区设置命令
static char szFilter[] = "Files (*.H00)|*.H00|Files (*.BIN)|*.BIN";
if((m_Pathname.IsEmpty()) != 0)
{
CFileDialog MyFileDlg(TRUE,NULL,"*.H00",OFN_HIDEREADONLY,szFilter,NULL);
MyFileDlg.DoModal();
m_Pathname = MyFileDlg.GetPathName( );
m_prog.SetStep(m_setStep); //设置进度条步长
m_prog.SetPos(0); //设置进度条当前位置
}
m_ProcessType = 0x00; //比较处理
m_Ports.WriteToPort(SectorID); //扇区设置命令
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -