📄 comm.cpp
字号:
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
HANDLE ComOpen(uint32 com,uint32 baud)
{
HANDLE hCom;
DCB dcb;
TCHAR port[5];
HANDLE hReturn;
//char* szCOM[]= {{"COM1"},{"COM2"},{"COM3"},{"CMO4"}};
//char* szBAUD[]= {{"2400"},{"4800"},{"9600"},{"19200"},{"38400"},{"57600"},{"115200"}};
if(com==0)
wsprintf(port, _T("%s"), _T("COM1:"));
else if(com==1)
wsprintf(port, _T("%s"), _T("COM2:"));
else if(com==2)
wsprintf(port, _T("%s"), _T("COM3:"));
else if(com==3)
wsprintf(port, _T("%s"), _T("COM4:"));
else if(com==4)
wsprintf(port, _T("%s"), _T("COM5:"));
else if(com==5)
wsprintf(port, _T("%s"), _T("COM6:"));
else if(com==6)
wsprintf(port, _T("%s"), _T("COM7:"));
else if(com==7)
wsprintf(port, _T("%s"), _T("COM8:"));
if(baud==0)
baud=CBR_2400 ;
else if(baud==1)
baud=CBR_4800 ;
else if(baud==2)
baud=CBR_9600 ;
else if(baud==3)
baud=CBR_19200;
else if(baud==4)
baud=CBR_38400;
else if(baud==5)
baud=CBR_57600;
else if(baud==6)
baud=CBR_115200 ;
else if(baud==7)
baud=230400 ;
else if(baud==8)
baud=460800 ;
hCom= CreateFile( port,
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened w/exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hCom == INVALID_HANDLE_VALUE)
{
return hCom;
}
GetCommState(hCom, &dcb);
dcb.BaudRate = baud;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if(DTR)
dcb.fDtrControl = DTR_CONTROL_ENABLE;
else
dcb.fDtrControl = DTR_CONTROL_DISABLE;
if(RTS)
dcb.fRtsControl = RTS_CONTROL_ENABLE;
else
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fParity = 0;
dcb.fInX = 0;
dcb.fOutX = 0;
dcb.fDsrSensitivity = 0;
dcb.fTXContinueOnXoff = 0;
dcb.fOutxDsrFlow = 0;
dcb.fOutxCtsFlow = 0;
SetCommState(hCom, &dcb);
hReturn = CreateThread(NULL,0, ReadThread,NULL, 0,NULL);
if ( hReturn == NULL )
{
}
return hCom;
}
void ComClose(HANDLE hCom)
{
CloseHandle(hCom);
}
static unsigned char RecvBuffer[1024];
unsigned long RecvBufferLen;
static unsigned char SendBuffer[1024];
unsigned long SendBufferLen;
unsigned char jy;
static TCHAR RecvBufferW[1024];
void ComSendACK()
{
int i;
unsigned char jy=0;
char tempbuffer[1024];
unsigned long len=0;
tempbuffer[0]=0x5A;
for(i=0;i<SendBuffer[1]+2;i++)
{
tempbuffer[i+1]=SendBuffer[i];
jy+=SendBuffer[i];
}
tempbuffer[i+1]=jy;
tempbuffer[i+2]=0xA5;
SendBufferLen=i+3;
WriteFile(m_hComPort, tempbuffer, SendBufferLen, &len, NULL);
}
void ProcessCmd()
{
unsigned char ch;
TCHAR * buf;
//Process com command
switch(RecvBuffer[0])
{
case CmdTest:
SendBuffer[0]=CmdTest;
SendBuffer[1]=0;
ComSendACK();
break;
case CmdCreateFile:
buf = (TCHAR *)malloc((RecvBuffer[1] + 1) * 2);
for(ch=0;ch<RecvBuffer[1];ch++)
{
buf[ch]=RecvBuffer[2+ch];
}
buf[ch]=0;
gFile.Open(buf,CFile::modeCreate|CFile::modeReadWrite);
free(buf);
SendBuffer[0]=CmdCreateFile;
SendBuffer[1]=0;
ComSendACK();
break;
case CmdOpenFile:
buf = (TCHAR *)malloc((RecvBuffer[1] + 1) * 2);
for(ch=0;ch<RecvBuffer[1];ch++)
{
buf[ch]=RecvBuffer[2+ch];
}
buf[ch]=0;
gFile.Open(buf,CFile::modeCreate|CFile::modeReadWrite);
free(buf);
SendBuffer[0]=CmdOpenFile;
SendBuffer[1]=0;
ComSendACK();
break;
case CmdWriteFile:
SendBuffer[0]=CmdWriteFile;
SendBuffer[1]=0;
ComSendACK();
gFile.Write(&(RecvBuffer[2]),RecvBuffer[1]);
break;
case CmdReadFile:
break;
case CmdFileSeek:
break;
case CmdCloseFile:
gFile.Close();
SendBuffer[0]=CmdCloseFile;
SendBuffer[1]=0;
ComSendACK();
break;
case CmdEnd:
break;
case CmdGetFileAttr:
break;
case CmdSetFileAttr:
break;
case CmdGetFileSize:
break;
case CmdGetFileTime:
break;
case CmdSetFileTime:
break;
case CmdCreateDir:
buf = (TCHAR *)malloc((RecvBuffer[1] + 1) * 2);
for(ch=0;ch<RecvBuffer[1];ch++)
{
buf[ch]=RecvBuffer[2+ch];
}
buf[ch]=0;
if(!CreateDirectory(buf,NULL))
{
SendBuffer[0]=CmdCreateDir;
SendBuffer[1]=0;
}
else
{
SendBuffer[0]=0xFE;
SendBuffer[1]=0;
}
free(buf);
ComSendACK();
break;
case CmdRemoveDir:
buf = (TCHAR *)malloc((RecvBuffer[1] + 1) * 2);
for(ch=0;ch<RecvBuffer[1];ch++)
{
buf[ch]=RecvBuffer[2+ch];
}
buf[ch]=0;
if(!RemoveDirectory(buf))
{
SendBuffer[0]=CmdCreateDir;
SendBuffer[1]=0;
}
else
{
SendBuffer[0]=0xFE;
SendBuffer[1]=0;
}
free(buf);
ComSendACK();
break;
case CmdCopyFile:
break;
case CmdDeleteFile:
buf = (TCHAR *)malloc((RecvBuffer[1] + 1) * 2);
for(ch=0;ch<RecvBuffer[1];ch++)
{
buf[ch]=RecvBuffer[2+ch];
}
buf[ch]=0;
if(!DeleteFile(buf))
{
SendBuffer[0]=CmdCreateDir;
SendBuffer[1]=0;
}
else
{
SendBuffer[0]=0xFE;
SendBuffer[1]=0;
}
free(buf);
ComSendACK();
break;
case CmdFdFirstFile:
break;
case CmdFdNextFile:
break;
case CmdFdClose:
break;
default:
SendBuffer[0]=0xFF;
SendBuffer[1]=0;
ComSendACK();
break;
}
}
static DWORD WINAPI
ReadThread(
PVOID pContext /* @parm [IN] Pointer to main data structure. */
)
{
HWND hWnd = NULL;
TCHAR szTitle[] = _T("Com test"); // The title bar text
TCHAR szWindowClass[] = _T("Com test"); // The window class name
unsigned long len=0,len1;
char buf[2];
HWND hEdit;
uint32 textlen;
RecvBufferLen=0xFF;
while(1)
{
Sleep(1);
hWnd = FindWindow(szWindowClass, szTitle);
if (!hWnd)
break;
if(m_hComPort)
{
len=1;
while(len)
{
ReadFile(m_hComPort, buf,1, &len, NULL);
if(len)
{
if(RecvBufferLen==0xFF || RecvBufferLen==0xFE)
{
if(buf[0]==0x55)
{
RecvBufferLen=0;
jy=0;
}
else
{
RecvBufferLen=0xFE;
hEdit = GetDlgItem(hWnd, ID_SEND_DATA);
SetWindowText(hEdit, _T("Expect 0x55!"));
}
continue;
}
if(RecvBufferLen==0)
{
RecvBuffer[RecvBufferLen]=buf[0];
RecvBufferLen++;
jy+=(unsigned char)(buf[0]);
continue;
}
if(RecvBufferLen==1)
{
RecvBuffer[RecvBufferLen]=buf[0];
RecvBufferLen++;
jy+=(unsigned char)(buf[0]);
continue;
}
if(RecvBuffer[1]>RecvBufferLen-2)
{
RecvBuffer[RecvBufferLen]=buf[0];
RecvBufferLen++;
jy+=(unsigned char)(buf[0]);
continue;
}
if(RecvBuffer[1]==RecvBufferLen-2)
{
if((unsigned char)(buf[0])==jy)
{
RecvBufferLen++;
continue;
}
else
{
RecvBufferLen=0xFE; //Command Error
hEdit = GetDlgItem(hWnd, ID_SEND_DATA);
SetWindowText(hEdit, _T("JY Error!"));
continue;
}
}
if(RecvBuffer[1]==RecvBufferLen-3)
{
if((unsigned char)(buf[0])==0xAA)
{
RecvBufferLen=0xFF; //Get Command OK
}
else
{
RecvBufferLen=0xFE; //Command Error
hEdit = GetDlgItem(hWnd, ID_SEND_DATA);
SetWindowText(hEdit, _T("Expect 0xAA!"));
continue;
}
}
else
{
//Get command error!
RecvBufferLen=0xFE; //Command Error
//Never to here
continue;
}
if(RecvBufferLen==0xFF)
{
ProcessCmd();
}
else if(RecvBufferLen==0xFE)
{
//SendBuffer[0]=0xFE;
//SendBuffer[1]=0;
//ComSendACK();
}
}
else
{
break;
}
}
}
}
return(0);
}
LPWSTR str2Wstr(char *str, TCHAR* buf)
{
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, buf, 1024);
return buf;
}
char* Wstr2str(TCHAR *wstr, char* str)
{
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, wstr, -1, str, 1024, NULL, NULL);
return str;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -