📄 commport.cpp
字号:
int ReadFile(CHAR *filename)
{
int ret=1;
CString msg;
char temps[0x10];
FILE *FileIn=fopen(filename,"rb");
if (FileIn==NULL) {
msg.Format("Can not open file : %s",filename);
AfxMessageBox(msg);
return 0;
}
fseek(FileIn,0,SEEK_END);
//将指针指向文件的结尾
m_filelen=ftell(FileIn)-256;
//ftell()得到当前的指针偏移头文件的位置
fseek(FileIn,0,SEEK_SET);
//将文件指针指向文件的开始处
//BYTE* m_Buffer=NULL;
if (m_Buffer!=NULL) {
//m_hwnd = this->m_hWnd
SetWindowText(m_hwnd,"DVR - Buffer is freeing, please wait ...");
free(m_Buffer);
m_Buffer = NULL;
SetWindowText(m_hwnd,"DVR");
}
m_Buffer=(BYTE*)malloc(m_filelen+0x10000);//m_filelen+64k
memset(&m_Buffer[m_filelen],0xFF,0x10000);
fread(m_filemsg,1,256,FileIn);
//BYTE m_filemsg[256];一次读一个字节读256次。存到m_filemsg数组
//FileIn为文件型指针,m_filemsg为指针(指向存放数据的数组)
memset(temps,0,0x10);
//char temps[0x10];
memcpy(temps,&m_filemsg[0xf0],0x0f);
//将文件的第240个字节后的15个数据拷贝到temps
//char m_format[0x10] = "SACM FORMAT 1.0";
if (strcmp(temps,m_format)){//format is not right
//msg.Format("File format is not right!!");
//AfxMessageBox(msg);
return 2;
}
DWORD block = 512;
DWORD rsize=0,percount=0,count;
BYTE *p=m_Buffer;
float flen100=((float)m_filelen)/100;
if (flen100 == 0)
flen100=1;
//feof( FileIn ) 若到文件尾,返回非零
while( !feof( FileIn ) ) {
//每次读1个字节
count=fread( p, 1, block, FileIn );
rsize += count;
p += count;
if ( rsize > flen100*percount) {
percount++;
msg.Format("DVR - Read file %3.0i%%",(int)(rsize/flen100));
SetWindowText(m_hwnd,msg);
}
//CString msg;
MSG wmsg;
if (::PeekMessage(&wmsg,NULL,0,0,PM_REMOVE)){
::TranslateMessage(&wmsg);
::DispatchMessage(&wmsg);
if (wmsg.message==WM_CHAR){
if (wmsg.wParam == VK_ESCAPE) {
ret = 0;
break;
}
}
}
}
SetWindowText(m_hwnd,"DVR");
fclose(FileIn);
return ret;
}
void WriteFile(CHAR *filename)
{
int ret=1;
CString msg;
FILE *FileOut;
FileOut = fopen(filename,"wb");
if (FileOut==NULL)
{
msg.Format("Can not open file : %s",filename);
AfxMessageBox(msg);
return;
}
//BYTE m_filemsg[256]
//ReadFile(hComm,m_buf0,258,&m_lrc,NULL);//BYTE m_buf0[300]
//memcpy(m_filemsg,m_buf0,256);//BYTE m_filemsg[256];
fwrite(m_filemsg,1,0xF0,FileOut);
fwrite(m_format,1,0x10,FileOut);
DWORD block = 512;
DWORD wtsize=0,percount=0,wsize;
BYTE *p=m_Buffer;//m_Buffer为全局变量,存放上载到PC的资料。
float flen100=((float)m_filelen)/100;
if (flen100 == 0)
flen100=1;
while (wtsize < m_filelen)
{
wsize = ((m_filelen-wtsize) > block) ? block : (m_filelen-wtsize);
fwrite(p,1,wsize,FileOut);//将p中存放的数据写到FileOut文件中
wtsize += wsize;
p += wsize;
if ( wtsize > flen100*percount)
{
percount++;
msg.Format("DVR - Write file %3.0i%%",(int)(wtsize/flen100));
SetWindowText(m_hwnd,msg);
}
MSG wmsg;
if (::PeekMessage(&wmsg,NULL,0,0,PM_REMOVE))
{
::TranslateMessage(&wmsg);
::DispatchMessage(&wmsg);
if (wmsg.message==WM_CHAR)
{
if (wmsg.wParam == VK_ESCAPE)
{
break;
}
}
}
}
SetWindowText(m_hwnd,"DVR");
fclose(FileOut);
}
int FunDownload(GDFS3 *fp3)
{
// TODO: Add your command handler code here
DWORD i;
DWORD temp;
CString msg;
//check if enough ram
//check if enough ram
//DWORD temp;
//BYTE m_filemsg[256];
//1.Write message info to PC
//2.Download data
i=0;
while(1)
{
memset(m_buf0,0x00,2);
m_buf1[0]=0xFF;
m_buf1[2]=SD_DnldH;
m_buf1[1]=SD_DnldL+1;
WriteFile(hComm,m_buf1,3,&m_lrc,NULL);
////////需要延时吗?????
ReadFile(hComm,m_buf0,2,&m_lrc,NULL);
if ((m_buf0[0]!=RD_DnldL+1)||(m_buf0[1]!=RD_DnldH))
{
//process error
return 2;
}
memcpy(m_buf1,&m_Buffer[i],256);
//--------------------------------------------------------
//将数据下载到串口线
//--------------------------------------------------------
DnldChecksum();
WriteFile(hComm,m_buf1,258,&m_lrc,NULL);
ReadFile(hComm,m_buf0,2,&m_lrc,NULL);
if (((m_buf0[0]&0x7F)!=(RD_DnldL+1))||(m_buf0[1]!=RD_DnldH))
{
//process error
return 2;
}
if ((m_buf0[0]&0x80)==0)
{ //not rednld
if (i>=m_filelen) break;
i = i+256;
int percent=0;
if (m_filelen > 0)
percent=(int)i*100/m_filelen;
if (percent > 100)
percent=100;
fp3(percent);
MSG msg;
if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
if (msg.message==WM_CHAR)
{
if (msg.wParam == VK_ESCAPE)
{
return 3;
}
}
}
}
}
//3.end download
while (1)
{
m_buf1[0]=0xFF;
m_buf1[1]=SD_DnldL+2;
m_buf1[2]=SD_DnldH;
WriteFile(hComm,m_buf1,3,&m_lrc,NULL);
ReadFile(hComm,m_buf0,2,&m_lrc,NULL);
if ((m_buf0[0]!=RD_DnldL+2)||(m_buf0[1]!=RD_DnldH))
{
//process error
return 2;
}
memset(m_buf1,0xFF,256);
DnldChecksum();
WriteFile(hComm,m_buf1,258,&m_lrc,NULL);
ReadFile(hComm,m_buf0,2,&m_lrc,NULL);
if (((m_buf0[0]&0x7F)!=(RD_DnldL+2))||(m_buf0[1]!=RD_DnldH))
{
//process error
return 2;
}
if ((m_buf0[0]&0x80)==0) break;
}
return 1;
}
int FunUpload(int msgno,GDFS3 *fp3)
{
// TODO: Add your command handler code here
DWORD i,ret;
DWORD len;
WORD temp;
BYTE count;
CString msg;
//BYTE m_msgno
m_msgno=msgno;
m_buf1[0] = 0xFF;
m_buf1[1] = SD_ConnectL; //#define SD_ConnectL 0x5C
m_buf1[2] = SD_ConnectH; //#define SD_ConnectH 0xAA
WriteFile(hComm,m_buf1,3,&m_lrc,NULL);//BYTE m_buf1[300]
ReadFile(hComm,m_buf0,2,&m_lrc,NULL);//BYTE m_buf0[300]
//1.upload message info
//2.upload data
if (m_Buffer!=NULL) {free(m_Buffer);m_Buffer = NULL;}
m_Buffer=(BYTE*)malloc(len+0x10000);
i=0;
count=0;
m_buf1[0]=0xFF;
m_buf1[1]=SD_UploadL+m_msgno;////#define SD_UploadL 0x00
m_buf1[2]=SD_UploadH;//#define SD_UploadH 0xD0
while(1)
{
WriteFile(hComm,m_buf1,3,&m_lrc,NULL);
//需要延时吗????????????????????
ReadFile(hComm,m_buf0,2,&m_lrc,NULL);
if ((m_buf0[0]!=(RD_UploadL+1))||(m_buf0[1]!=RD_UploadH))
{
if ((m_buf0[0]==(RD_UploadL+2))&&(m_buf0[1]==RD_UploadH))
{
m_filelen=i;
ReadFile(hComm,m_buf0,258,&m_lrc,NULL);
if (m_lrc!=258)
{
//process error
return 2;
}
break;
}
//process error
return 2;
}
ReadFile(hComm,m_buf0,258,&m_lrc,NULL);//BYTE m_buf0[300]
if (m_lrc==258)
{
ret=UpldChecksum();
if (ret==1)
{
// process message
m_buf1[1]=SD_UploadL+m_msgno;
// m_Buffer=(BYTE*)malloc(len+0x10000);
memcpy(&m_Buffer[i],m_buf0,256);
i=i+256;
count=0;
int percent=0;
if (len > 0)
percent=(int)i*100/len;
if (percent > 100)
percent=100;
fp3(percent);
MSG msg;
if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
if (msg.message==WM_CHAR)
{
if (msg.wParam == VK_ESCAPE)
{
return 3;
}
}
}
}
else m_buf1[1]=SD_UploadL+0x80+m_msgno;
}
else
{
m_buf1[1]=SD_UploadL+0x80+m_msgno;
count = count + 1;
if (count == 20 )
{
return 4;
}
}
}
return 1;
}
/*
void let_msg_go()
{
MSG msg;
while ( ::PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ){
if ( msg.message==WM_QUIT ){
::PostQuitMessage(-1);
return;
}
if (!AfxGetApp()->PreTranslateMessage(&msg)){
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
AfxGetApp()->OnIdle(0);
AfxGetApp()->OnIdle(1);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -