Добавил:
Mymnan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сборка Часть1 / avmis_labs / неразобрано / 503 / Лаб_СОМ / Мойсейчук / COM / COMu / COM / COM
.cpp#include "stdafx.h"
#include "windows.h"
#include <stdlib.h>
#include <conio.h>
int clsh=0;
DCB comSettings; // структура с настройками ком порта
COMMTIMEOUTS CommTimeouts;
char comp[10];
void *aRead(void *par)
{
char INBUFFER1[1];//буфер для передачи информации
OVERLAPPED ov2; //структура для асинхронного чтения
DWORD bytes_read1 = 0; //кол-во прочитанных байт
DWORD bStatus = 0; //состояние передачи
HANDLE comport2; //хэндл ком порта
clsh=0;
comport2 =
CreateFile(comp, // открытие ком порта
GENERIC_READ | GENERIC_WRITE, //
0, //
NULL, //
OPEN_EXISTING,
0,
NULL);
CommTimeouts.ReadIntervalTimeout = 100; //настройки нтервала для чтения
CommTimeouts.ReadTotalTimeoutMultiplier = 0;
CommTimeouts.ReadTotalTimeoutConstant = 200; //общее время ожидания
CommTimeouts.WriteTotalTimeoutMultiplier = 0;
CommTimeouts.WriteTotalTimeoutConstant = 0;
bStatus = SetCommTimeouts(comport2,&CommTimeouts);
GetCommState(comport2, &comSettings);
comSettings.BaudRate = CBR_9600; //скорость чтения
comSettings.fBinary = true;
comSettings.StopBits = ONESTOPBIT; //передача по битам
comSettings.ByteSize = 8; //размер байта
comSettings.Parity = NOPARITY;
comSettings.fParity = FALSE;
bStatus = SetCommState(comport2, &comSettings); //передача параметров
while(1)
{
INBUFFER1[0]='\0';
if(clsh==1)
{
CloseHandle(comport2);
return NULL;
}
bStatus = ReadFile(comport2, // Handle
&INBUFFER1, // входящая информация
1,
&bytes_read1,
NULL);
if(INBUFFER1[0]!='\0')
printf("%c",INBUFFER1[0]);
}
}
int main()
{
char OUTBUFFER[50]; //буфер для обмена информации
char a;
DWORD bytes_read = 0; // кол-во байт прочитанных с порта
DWORD bytes_written = 0; // кол-во байт считанных с порта
DWORD id;
HANDLE comport1 = NULL,rThr=NULL; // хэндл второго ком порта
int bStatus;
do
{
system("CLS");
puts("Enter com port to open");
gets(comp);
comport1 =
CreateFile(comp, // окрытие ком порта
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if(comport1==INVALID_HANDLE_VALUE)
{
puts("Cannot open COM port");
getch();
}
}while(comport1==INVALID_HANDLE_VALUE);
CloseHandle(comport1);
while(1)
{
CommTimeouts.ReadIntervalTimeout = 100;
CommTimeouts.ReadTotalTimeoutMultiplier = 0;
CommTimeouts.ReadTotalTimeoutConstant = 200;
CommTimeouts.WriteTotalTimeoutMultiplier = 0;
CommTimeouts.WriteTotalTimeoutConstant = 0;
GetCommState(comport1, &comSettings);
comSettings.BaudRate = CBR_9600;
comSettings.fBinary = true;
comSettings.StopBits = ONESTOPBIT;
comSettings.ByteSize = 8;
comSettings.Parity = NOPARITY;
comSettings.fParity = FALSE;
rThr=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)aRead,(void *)comport1,NULL,&id);
while(1)
{
system("CLS");
puts("1 - send string\n0 - exit");
a=getch();
if(a=='1')
{
clsh=1;
system("CLS");
puts("Enter string in COM:");
gets(OUTBUFFER);
comport1 = CreateFile(comp,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
bStatus = SetCommTimeouts(comport1,&CommTimeouts);
bStatus = SetCommState(comport1, &comSettings);
bStatus = WriteFile(comport1,
&OUTBUFFER,
strlen(OUTBUFFER),
&bytes_written,
NULL);
CloseHandle(comport1);
rThr=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)aRead,(void *)comport1,NULL,&id);
break;
}
if(a=='0')
{
TerminateThread(rThr,0);//закрытие второго потока
CloseHandle(comport1);
return 0;
}
}
}
return 0;
}