📄 myapp1dlg.cpp
字号:
ei++;
}
DWORD CpuType,NonBlankLen,SetLen;
sscanf(str,"p%u,%u,%u",&CpuType,&NonBlankLen,&SetLen);
// DisplayMessage("[",0);DisplayMessage(ttt);DisplayMessage("]",0);
// DisplayMessage(str);
if(NonBlankLen==0)
{
DisplayMessage("空白芯片!");
ReadButton->EnableWindow();
WButton->EnableWindow();
return;
}else
if(NonBlankLen<plen)
{
plen=NonBlankLen;
if(!SetLength(plen))
{
DisplayMessage("设定程序长度超时!");
ReadButton->EnableWindow();
WButton->EnableWindow();
return;
};
}
sprintf(str,"长度:%u字节。",plen);
DisplayMessage(str);
// DisplayMessage(plen);
//
}
com.ClearRecvBuff();
HANDLE RFile=CreateFile(m_edit3,GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(RFile==INVALID_HANDLE_VALUE)
{
//AfxMessageBox( "GetLastError()");
DisplayMessage("创建文件"+m_edit3+"失败!");
ReadButton->EnableWindow();
WButton->EnableWindow();
return;
}
DWORD nNumberOfBytesToWrite=1;
LPDWORD lpNumberOfBytesWritten=&nNumberOfBytesToWrite;
char c='r';
com.Write(&c,1);
c=0;
do{
if(!GetOneChar(&c))
{
DisplayMessage("读命令不响应!");
CloseHandle(RFile);
ReadButton->EnableWindow();
WButton->EnableWindow();
return;
}
}while(c!='r');
DisplayMessage("读取程序 ... ...");
for(DWORD i=0;i<plen;i++)
{
if(!GetOneChar(str))
{
DisplayMessage("读取超时!");
CloseHandle(RFile);ReadButton->EnableWindow();
WButton->EnableWindow();
return;
}
if(!GetOneChar(str+1))
{
DisplayMessage("读取超时!");
CloseHandle(RFile);
ReadButton->EnableWindow();
WButton->EnableWindow();
return;
}
str[0]>='A'?str[0]-='A'-10:str[0]-='0';
str[1]>='A'?str[1]-='A'-10:str[1]-='0';
str[0]=(str[0]<<4)|str[1];
if(WriteFile(RFile,str,nNumberOfBytesToWrite,lpNumberOfBytesWritten,NULL)==NULL)
{
DisplayMessage("写文件"+m_edit3+"失败!");
CloseHandle(RFile);
ReadButton->EnableWindow();
WButton->EnableWindow();
return;
}
m_nProgress.SetPos(100*(i+1)/plen);
}
CloseHandle(RFile);
DisplayMessage("读取完成。");
DisplayMessage("保存为 "+m_edit3);
ReadButton->EnableWindow();
WButton->EnableWindow();
m_nProgress.SetPos(0);
}
void CMYAPP1Dlg::OnButton2() //write
{
// TODO: Add your control notification handler code here
CButton* ReadButton=(CButton*)GetDlgItem(IDC_BUTTON4);
CButton* WButton=(CButton*)GetDlgItem(IDC_BUTTON2);
WButton->EnableWindow(FALSE);
ReadButton->EnableWindow(FALSE);
//AfxGetMainWnd()->EnableWindow(FALSE);
HANDLE WFile=CreateFile(m_edit2,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(WFile==INVALID_HANDLE_VALUE)
{
//AfxMessageBox( "GetLastError()");
DisplayMessage("打开文件"+m_edit2+"失败!");
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
DWORD plen,plen2,SetLen;
switch(m_radio1)
{
case 0: plen=2048; break;
case 1: plen=4096; break;
case 2: plen=4096*1;break;
case 3: plen=4096*2;break;
case 4: plen=4096*5;break;
default:plen=4096*1;break;
}
if(!SetLength(plen))
{
DisplayMessage("设定芯片长度超时!");
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
};
com.ClearRecvBuff();
//查空和擦除
char str[60],EraseNumber=0,c;
DWORD NonBlankLen=1,CpuType;
while(NonBlankLen && EraseNumber++<10)
{
com.ClearRecvBuff();
sprintf(str,"第%u次擦除...",EraseNumber);
DisplayMessage(str);
com.ClearRecvBuff();
c='e';
com.Write(&c,1);
if(com.GetStrWait(str,10)<10 || _stricmp(str,"e\n\r ok\n\r >")!=0)
{
DisplayMessage("擦除超时!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
//DisplayMessage(str);AfxGetMainWnd()->EnableWindow();return;
if(m_radio1>1)
{
sprintf(str,"第%u次查空...",EraseNumber);
DisplayMessage(str);
com.ClearRecvBuff();
c='p';
com.Write(&c,1);
if(com.GetStrWait(str,10,6000)<10)
{
DisplayMessage("查空超时!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
int ei;
while(str[strlen(str)-1]!='>' || ei>20)
{
if(!com.GetCharWait(&c))
{
DisplayMessage("查空超时!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
char l=strlen(str);
str[l]=c;
str[l+1]='\0';
ei++;
}
sscanf(str,"p%u,%u,%u",&CpuType,&NonBlankLen,&SetLen);
}
else if(m_radio1==0)
{
NonBlankLen=0;
DisplayMessage("2051对擦除不作检查!");
}
else
{
NonBlankLen=0;
DisplayMessage("4051对擦除不作检查!");
}
}//查空和擦除结束
if(EraseNumber>=10)
{
DisplayMessage("无法擦除!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
};
plen=GetFileSize(WFile,&plen2);
sprintf(str,"程序长度:%u字节。",plen);
DisplayMessage(str);
if(plen>SetLen)
{
DisplayMessage("文件程序长度错误!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
};
if(!SetLength(plen))
{
DisplayMessage("设定程序长度超时!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
};
//写
com.ClearRecvBuff();
c='w';
com.Write(&c,1);
do{
if(!com.GetCharWait(&c))
{
DisplayMessage("写命令不响应!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
//DisplayMessage("<",0);DisplayMessage(c);DisplayMessage(">",0);
}
while(c!='w');
DWORD i=0;
DWORD nNumberOfBytesToRead=1;
LPDWORD lpNumberOfBytesRead=&nNumberOfBytesToRead;
DisplayMessage("写程序... ...");
while(i<plen)
{
if(!com.GetCharWait(&c))
{
DisplayMessage("写超时!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
};
//DisplayMessage(c);
if(c==XON)
{
if(!ReadFile(WFile,str,nNumberOfBytesToRead,lpNumberOfBytesRead,NULL))
{
DisplayMessage("读文件失败!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
};
com.Write(str,1);
i++;
m_nProgress.SetPos(100*(i+1)/plen);
}
else if(c==XOFF)
{
Sleep(10);
}
else
{
DisplayMessage("写无应答!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
}//END while(i<plen)
//DisplayMessage(plen);
//sprintf(str,"%u,%u,%u",CpuType,NonBlankLen,SetLen);
//DisplayMessage(str);
// char str[100];
// com.ReadString(str, 100);
//
CloseHandle(WFile);
//开始校验
//
com.ClearRecvBuff();
WFile=CreateFile(m_edit2,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(WFile==INVALID_HANDLE_VALUE)
{
DisplayMessage("校验读文件"+m_edit2+"失败!");
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
nNumberOfBytesToRead=1;
lpNumberOfBytesRead=&nNumberOfBytesToRead;
c='r';
com.Write(&c,1);
c=0;
do{
if(!GetOneChar(&c))
{
DisplayMessage("校验读命令不响应!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
}while(c!='r');
DisplayMessage("校验程序 ... ...");
for(i=0;i<plen;i++)
{
if(!GetOneChar(str))
{
DisplayMessage("校验读取超时!");
CloseHandle(WFile);WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
if(!GetOneChar(str+1))
{
DisplayMessage("校验读取超时!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
str[0]>='A'?str[0]-='A'-10:str[0]-='0';
str[1]>='A'?str[1]-='A'-10:str[1]-='0';
str[0]=(str[0]<<4)|str[1];
if(!ReadFile(WFile,str+3,nNumberOfBytesToRead,lpNumberOfBytesRead,NULL))
{
DisplayMessage("校验读文件失败!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
};
if(str[0]!=str[3])
{
DisplayMessage("校验错误!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
m_nProgress.SetPos(100*(i+1)/plen);
}
DisplayMessage("校验正确!");
CloseHandle(WFile);
//加密
if(m_check2)
{
com.ClearRecvBuff();
DisplayMessage("加密... ...");
c='l';
com.Write(&c,1);
if(com.GetStrWait(str,10)<10 || _stricmp(str,"l\n\r ok\n\r >")!=0)
{
DisplayMessage("加密超时!");
CloseHandle(WFile);
WButton->EnableWindow();
ReadButton->EnableWindow();
return;
}
DisplayMessage("加密完成!");
}
DisplayMessage("写程序"+m_edit2+"成功。");
WButton->EnableWindow();
ReadButton->EnableWindow();
m_nProgress.SetPos(0);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -