【文件属性】:
文件名称:串口调试助手 大文件传输
文件大小:3.59MB
文件格式:RAR
更新时间:2014-08-23 11:41:19
串口 SerialPort类 大文件传输
LONG CSCOMMDlg::OnCommunication(WPARAM ch, LPARAM port)
{
g_ucRecvBuf[g_ulRecvLen++]=UCHAR(ch);
if(g_ulRecvLen>=51)
{
memcpy(&g_ADData,g_ucRecvBuf,51);
//return 1;
}
// return 1;
if(g_ulRecvLen<4)
return 1; //1表示接收数据长度不够
ULONG ulCheckSum =0;
CMDHEADER header;
header = *((CMDHEADER *)g_ucRecvBuf);
//如果不相等,将Buffer中的每个数据前移动一个位置
if(CMD_SYN_WORD!= header.ulSyncWord)
{
memmove(g_ucRecvBuf,g_ucRecvBuf+1,3);
return 2;//2表示没有接收到同步字
}
if(g_ulRecvLen1024*1024)
// {
// strTemp.Format("%0.3fKB",m_nFileRecvLen/1024.0/1024.0);
// }
// //显示"传输总耗时"
// const ULONG ulFrameBytes = g_nBaud/10 -(sizeof(CMDHEADER)+4);
// long lComm_TimeSum = m_nFileRecvLen/ulFrameBytes;
// //传输总耗时间,单位:秒
//
// WORD wHour =0;
// WORD wMinute =0;
// WORD wSecond =0;
//
// wSecond = lComm_TimeSum%60;
// wMinute = lComm_TimeSum/60%60;
// wHour = lComm_TimeSum/60/60%60;
//
// if((0==wSecond)&&(0==wMinute)&&(0==wHour))
// wSecond =1;
// strTemp.Format("%02d:%02d:%02d",wHour,wMinute,wSecond);
g_ulRecvLen =0;
}
break;
case CMD_FILEDATA: //发送文件中数据的命令
if(g_ulRecvLen1024*1024)
{
strTemp.Format("%0.3fKB",m_nFileRecvLen/1024.0/1024.0);
}*/
}
break;
case CMD_FILEEOF://文件发送结束命令
if(g_ulRecvLen1024*1024)
{
strTemp.Format("%0.3fKB",m_nFileRecvLen/1024.0/1024.0);
}
}
break;
//=================处理接收端的响应信息 begin 信息头=================
case CMD_FILEINFO_RESP://发送文件信息命令后,发到接收端的响应信息
if(CMD_STATE_OK==header.cmdState)
{
m_bFileInfoIsOK = TRUE;
g_ulRecvLen = 0;
g_bIsRecvData = TRUE;
}
else if(CMD_STATE_ERROR==header.cmdState)
{
m_bFileInfoIsOK = FALSE;
g_ulRecvLen=0;
SendFileInfo();
}
break;
//=================处理接收端的响应信息 文件数据=================
case CMD_FILEDATA_RESP://发送文件体命令后,发到接收端的响应信息
if(CMD_STATE_OK==header.cmdState)
m_bFileDataIsOK = TRUE;
else if(CMD_STATE_ERROR==header.cmdState)
m_bFileDataIsOK = FALSE;
g_ulRecvLen =0;
g_bIsRecvData = TRUE;
break;
//=================处理接收端的响应信息 文件结尾=================
case CMD_FILEEOF_RESP://发送文件尾命令后,发到接收端的响应信息
if(CMD_STATE_OK==header.cmdState)
{
m_bFileEOFIsOK = TRUE;
g_bFileSendEnd = TRUE;
}
else if (CMD_STATE_ERROR == header.cmdState)
{
m_bFileEOFIsOK = FALSE;
m_bSendFileIsBegin = FALSE;
}
g_ulRecvLen = 0;
g_bIsRecvData = TRUE;
break;
//====================默认处理=================
default:break;
}
//设置信号量
SetEvent(m_hRecvMsgEvent);
return 0; //返回0表示正确
}
【文件预览】:
SCOMM
----SCOMM()
--------SCOMM()