📄 main.cpp
字号:
iPackLen=PackLen;
//计算内存空间
iLen=3+2+2+4+2+2+(PackLen)+1;
//分配动态内存空间
szSendCmd=new unsigned char[iLen+1];
memset(szSendCmd,0,iLen+1);
memcpy(szSendCmd,szHead,3);
szSendCmd[3]=(iLen - 5)/256;
szSendCmd[4]=(iLen - 5)%256;
szSendCmd[5]=0x20;
szSendCmd[6]=iCmdNo;
szSendCmd[7]=iFileLen>>24;
szSendCmd[8]=iFileLen>>16;
szSendCmd[9]=iFileLen>>8;
szSendCmd[10]=iFileLen;
//
szSendCmd[11]=iPackNo/256;
szSendCmd[12]=iPackNo%256;
szSendCmd[13]=iPackLen/256;
szSendCmd[14]=iPackLen%256;
memcpy(&szSendCmd[15],parm,iPackLen );
//计算校验和
szSum=char(0x00);
for(unsigned int i=0;i<iLen-1;i++)
szSum+=szSendCmd[i];
szSendCmd[iLen-1]=szSum;
//打开串口
iRetCode=Init232(ipCom,1050);
if(iRetCode!=0)
return C_OPEN_COM_ERR;
//清除输出缓冲
PurgeComm(hCom,PURGE_TXCLEAR);
//清除输入缓冲
PurgeComm(hCom,PURGE_RXCLEAR);
dwByteWrite=0;
//发送数据8字节
Sleep(300);
if(WriteFile(hCom,szSendCmd,iLen,&dwByteWrite,NULL)==false)
{
ClearCommError(hCom,&dwErrorMask,&comst);
Close232();
return C_WRITE_COM_ERR;
}
//延时
//iSeconds=10000;
if(SetTimeOut(iSeconds)!=0)
{
Close232();
return C_SETTIMES_ERR;
}
//接收数据
dwByteRead=0;
//接收数包头
ReadFile(hCom,szRecHeadBuf,3,&dwByteRead,NULL);
if(dwByteRead!=3)
{
delete[] szSendCmd;
Close232();
return C_DATA_LEN_ERR;
}
if(memcmp(szRecHeadBuf,szHead,3)!=0)
{
delete[] szSendCmd;
Close232();
return C_DATA_HEAD_ERR;
}
//接收数据长度值
dwByteRead=0;
ReadFile(hCom,szRecLengthBuf,2,&dwByteRead,NULL);
if(dwByteRead!=2)
{
delete[] szSendCmd;
Close232();
return C_DATA_LEN_ERR;
}
iLenF=szRecLengthBuf[0];
iLenS=szRecLengthBuf[1];
iDataLen=iLenF*256+iLenS;
dwByteRead=0;
szDataBuf=new unsigned char[iDataLen+1];
memset(szDataBuf,0,iDataLen+1);
ReadFile(hCom,szDataBuf,iDataLen,&dwByteRead,NULL);
//接收数据数量不对
if(dwByteRead!=iDataLen)
{
delete[] szDataBuf;
delete[] szSendCmd;
Close232();
return C_DATA_LEN_ERR;
}
szSum=0x1A+0x72+0x73;
szSum+=szRecLengthBuf[0];
szSum+=szRecLengthBuf[1];
for(unsigned int i=0;i<iDataLen-1;i++)
{
szSum+=szDataBuf[i];
}
//校验和出错
if(szSum!=szDataBuf[iDataLen-1])
{
delete[] szDataBuf;
delete[] szSendCmd;
Close232();
return C_CRCERR;
}
//返回命令字 //特征提取
if((szDataBuf[0]!=0x20) || (szDataBuf[1]!=iCmdNo))
{
delete[] szDataBuf;
delete[] szSendCmd;
Close232();
return C_CMDERR;
}
if(szDataBuf[3]!=0x00)
{
iRetCode=szDataBuf[3];
delete[] szDataBuf;
delete[] szSendCmd;
Close232();
return iRetCode;
}
else
{
delete[] szDataBuf;
delete[] szSendCmd;
Close232();
return 0;
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (OpenDialog1->Execute())
Edit1->Text=OpenDialog1->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
if (OpenDialog1->Execute())
Edit2->Text=OpenDialog1->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
if (OpenDialog1->Execute())
Edit3->Text=OpenDialog1->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
if (OpenDialog1->Execute())
Edit4->Text=OpenDialog1->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
if (OpenDialog1->Execute())
Edit5->Text=OpenDialog1->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
iCom = 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
iCom=ComboBox1->ItemIndex +1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMemoryStream *msFile;
unsigned char *szBuf;
unsigned int iLen,iTimes;
int iCount;
msFile=new TMemoryStream();
iCount=0;
if (CheckBox1->Checked) iCount++;
if (CheckBox2->Checked) iCount++;
if (CheckBox3->Checked) iCount++;
if (CheckBox4->Checked) iCount++;
if (CheckBox5->Checked) iCount++;
if (iCount==0) return;
iTimes=500;
iRetCode=DTM_FlashDown_Connect(&iCom,&iTimes,szBuf);
if (iRetCode!=0)
{
msFile->Free();
ShowMessage("发送'更新FLASH命令'出错,代码:"+IntToStr(iRetCode));
return;
}
if (CheckBox1->Checked)
{
Label2->Caption="正在下载BOOTLOAD代码命令";
msFile->LoadFromFile(Edit1->Text);
if (msFile->Size==0)
{
msFile->Free();
ShowMessage("文件不存在或为空!");
return;
}
iLen=msFile->Size;
ProgressBar1->Max=iLen/1024+1;
ProgressBar1->Position=0;
Application->ProcessMessages();
szBuf=new unsigned char[1025];
memset(szBuf,0,1025);
for (unsigned int i=0;i<(iLen/1024+1);i++)
{
if (i==iLen/1024)
{
msFile->Read(szBuf,iLen - i*1024);
iRetCode=DTM_FlashDown_Transfer(&iCom,&iTimes,0x31,iLen,&i,iLen - i*1024,szBuf);
}
else
{
msFile->Read(szBuf,1024);
iRetCode=DTM_FlashDown_Transfer(&iCom,&iTimes,0x31,iLen,&i,1024,szBuf);
}
if (iRetCode!=0)
{
msFile->Free();
ShowMessage("下载BOOTLOAD代码命令出错,代码:"+IntToStr(iRetCode));
delete[] szBuf;
return;
}
ProgressBar1->Position++;
Application->ProcessMessages();
}
Label2->Caption="";
delete[] szBuf;
msFile->Clear();
}
if (CheckBox2->Checked)
{
Label2->Caption="正在下载DOWNCODE";
Application->ProcessMessages();
msFile->LoadFromFile(Edit2->Text);
if (msFile->Size==0)
{
msFile->Free();
ShowMessage("文件不存在或为空!");
return;
}
iLen=msFile->Size;
ProgressBar1->Max=iLen/1024+1;
ProgressBar1->Position=0;
Application->ProcessMessages();
szBuf=new unsigned char[1025];
memset(szBuf,0,1025);
iTimes=2000;
for (unsigned int i=0;i<(iLen/1024+1);i++)
{
if (i==iLen/1024)
{
msFile->Read(szBuf,iLen - i*1024);
iRetCode=DTM_FlashDown_Transfer(&iCom,&iTimes,0x32,iLen,&i,iLen - i*1024,szBuf);
}
else
{
msFile->Read(szBuf,1024);
iRetCode=DTM_FlashDown_Transfer(&iCom,&iTimes,0x32,iLen,&i,1024,szBuf);
}
if (iRetCode!=0)
{
msFile->Free();
ShowMessage("下载DOWNCODE代码命令出错,代码:"+IntToStr(iRetCode));
delete[] szBuf;
return;
}
ProgressBar1->Position++;
Application->ProcessMessages();
}
Label2->Caption="";
delete[] szBuf;
msFile->Clear();
}
if (CheckBox3->Checked)
{
Label2->Caption="正在下载应用程序";
msFile->LoadFromFile(Edit3->Text);
if (msFile->Size==0)
{
msFile->Free();
ShowMessage("文件不存在或为空!");
return;
}
iLen=msFile->Size;
ProgressBar1->Max=iLen/1024+1;
ProgressBar1->Position=0;
Application->ProcessMessages();
szBuf=new unsigned char[1025];
memset(szBuf,0,1025);
for (unsigned int i=0;i<(iLen/1024+1);i++)
{
if (i==iLen/1024)
{
msFile->Read(szBuf,iLen - i*1024);
iRetCode=DTM_FlashDown_Transfer(&iCom,&iTimes,0x33,iLen,&i,iLen - i*1024,szBuf);
}
else
{
msFile->Read(szBuf,1024);
iRetCode=DTM_FlashDown_Transfer(&iCom,&iTimes,0x33,iLen,&i,1024,szBuf);
}
if (iRetCode!=0)
{
msFile->Free();
ShowMessage("下载应用程序出错,代码:"+IntToStr(iRetCode));
delete[] szBuf;
return;
}
ProgressBar1->Position++;
Application->ProcessMessages();
}
Label2->Caption="";
delete[] szBuf;
msFile->Clear();
}
if (CheckBox4->Checked)
{
Label2->Caption="正在下载汉字库";
Application->ProcessMessages();
msFile->LoadFromFile(Edit4->Text);
if (msFile->Size==0)
{
msFile->Free();
ShowMessage("文件不存在或为空!");
return;
}
iLen=msFile->Size;
ProgressBar1->Max=iLen/1024+1;
ProgressBar1->Position=0;
Application->ProcessMessages();
szBuf=new unsigned char[1025];
memset(szBuf,0,1025);
for (unsigned int i=0;i<(iLen/1024+1);i++)
{
if (i==iLen/1024)
{
msFile->Read(szBuf,iLen - i*1024);
iRetCode=DTM_FlashDown_Transfer(&iCom,&iTimes,0x34,iLen,&i,iLen - i*1024,szBuf);
}
else
{
msFile->Read(szBuf,1024);
iRetCode=DTM_FlashDown_Transfer(&iCom,&iTimes,0x34,iLen,&i,1024,szBuf);
}
if (iRetCode!=0)
{
msFile->Free();
ShowMessage("下载汉字库出错,代码:"+IntToStr(iRetCode));
delete[] szBuf;
return;
}
ProgressBar1->Position++;
Application->ProcessMessages();
}
Label2->Caption="";
delete[] szBuf;
msFile->Clear();
}
if (CheckBox5->Checked)
{
Label2->Caption="正在下载其他代码";
Application->ProcessMessages();
msFile->LoadFromFile(Edit5->Text);
if (msFile->Size==0)
{
msFile->Free();
ShowMessage("文件不存在或为空!");
return;
}
iLen=msFile->Size;
ProgressBar1->Max=iLen/1024+1;
ProgressBar1->Position=0;
Application->ProcessMessages();
szBuf=new unsigned char[1025];
memset(szBuf,0,1025);
for (unsigned int i=0;i<(iLen/1024+1);i++)
{
if (i==iLen/1024)
{
msFile->Read(szBuf,iLen - i*1024);
iRetCode=DTM_FlashDown_Transfer(&iCom,&iTimes,0x35,iLen,&i,iLen - i*1024,szBuf);
}
else
{
msFile->Read(szBuf,1024);
iRetCode=DTM_FlashDown_Transfer(&iCom,&iTimes,0x35,iLen,&i,1024,szBuf);
}
if (iRetCode!=0)
{
msFile->Free();
ShowMessage("下载其他代码出错,代码:"+IntToStr(iRetCode));
delete[] szBuf;
return;
}
ProgressBar1->Position++;
Application->ProcessMessages();
}
Label2->Caption="";
delete[] szBuf;
msFile->Clear();
}
iTimes=500;
iRetCode=DTM_FlashDown_Write(&iCom,&iTimes,szBuf);
if (iRetCode!=0)
{
msFile->Free();
ShowMessage("发送'重启命令'出错,代码:"+IntToStr(iRetCode));
return;
}
msFile->Free();
ShowMessage("下载成功!");
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -