Добавил:
Mymnan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сборка Часть1 / avmis_labs / неразобрано / 503 / Лаб_СОМ / Кобзев В.В / Main
.cpp#include "windows.h"
#include "iostream"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include <string>
HANDLE m_Handle2;
HANDLE hEvent;
HANDLE hCOM;
bool isClose = FALSE;
using namespace std;
void read()
{
char *buf = new char[30];
memset(buf, 0, 30*sizeof(char));
DWORD real;
while(1)
{
WaitForSingleObject(hEvent, INFINITE);
if(!ReadFile(m_Handle2, buf, 30, &real, NULL))
cout << "read error\n";
buf[real] = '\0';
if(buf[0] != '\0')
{
if(!strcmp(buf, ":q"))
{
WriteFile(m_Handle2, buf, 30, &real, NULL);
CloseHandle(hCOM);
return;
}
cout << "ACCEPTING: <" << buf << ">\n\n";
memset(buf, 0, 30*sizeof(char));
}
SetEvent(hEvent);
Sleep(1000);
}
}
void write(void *arg)
{
char buf[30];
memset(&buf, 0, 30*sizeof(char));
while(1)
{
gets(buf);
puts("");
if(buf[0] != '\0')
{
WaitForSingleObject(hEvent, INFINITE);
DWORD real;
if(!WriteFile(m_Handle2, buf, 30, &real, NULL))
cout << "write error \n";
SetEvent(hEvent);
memset(&buf, 0, 30*sizeof(char));
}
}
}
int main(int argc, char *argv[])
{
m_Handle2 = CreateFileA(argv[1], GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
hEvent = CreateEvent(NULL, FALSE, TRUE, NULL);
if(m_Handle2 == INVALID_HANDLE_VALUE) {
cout << GetLastError() << ": error at opening\n";
}
SetCommMask(m_Handle2, EV_RXCHAR);
SetupComm(m_Handle2, 128, 128);
COMMTIMEOUTS CommTimeOuts2;
GetCommTimeouts(m_Handle2, &CommTimeOuts2);
CommTimeOuts2.ReadIntervalTimeout = 50;
CommTimeOuts2.ReadTotalTimeoutMultiplier = 10;
CommTimeOuts2.ReadTotalTimeoutConstant = 50;
CommTimeOuts2.WriteTotalTimeoutMultiplier = 10;
CommTimeOuts2.WriteTotalTimeoutConstant = 50;
if(!SetCommTimeouts(m_Handle2, &CommTimeOuts2)) {
cout << GetLastError() << ": error of set of timeout\n";
}
DCB ComDCM2;
memset(&ComDCM2,0,sizeof(ComDCM2));
ComDCM2.DCBlength = sizeof(DCB);
GetCommState(m_Handle2, &ComDCM2);
ComDCM2.BaudRate = CBR_9600;
ComDCM2.ByteSize = 8;
ComDCM2.Parity = NOPARITY;
ComDCM2.StopBits = ONESTOPBIT;
ComDCM2.fAbortOnError = TRUE;
ComDCM2.fDtrControl = 1;
ComDCM2.fRtsControl = 0;
ComDCM2.fBinary = TRUE;
ComDCM2.fParity = FALSE;
ComDCM2.fInX = ComDCM2.fOutX = 1;
ComDCM2.fTXContinueOnXoff = 1;
ComDCM2.XonChar = 0x19;
ComDCM2.XoffChar = 0x13;
ComDCM2.fErrorChar = FALSE;
ComDCM2.fNull = FALSE;
ComDCM2.fOutxCtsFlow = 0;
ComDCM2.fOutxDsrFlow = 0;
ComDCM2.XonLim = 128;
ComDCM2.XoffLim = 128;
if(!SetCommState(m_Handle2, &ComDCM2)) {
cout << GetLastError << ": error of installation of state\n";
}
cout << "..............." << argv[1] << "...............\n\n";
hCOM = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)write, NULL, NULL, NULL);
HANDLE hCOM2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)read, NULL, NULL, NULL);
//WaitForSingleObject(hCOM, INFINITE);
WaitForSingleObject(hCOM2, INFINITE);
CloseHandle(hEvent);
CloseHandle(hCOM2);
CloseHandle(m_Handle2);
return 0;
}