Добавил:
Mymnan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сборка Часть1 / avmis_labs / неразобрано / 503 / Лаб_СОМ / Машнин / COM
.cpp// com_laba.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;
HANDLE hComm1, hComm2;
void InitComPort()
{
// HANDLE hComm1, hComm2;
DCB dcb1, dcb2; // структура device control block (DCB)
hComm1= CreateFile(TEXT("COM1"),GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,NULL);
hComm2 = CreateFile(TEXT("COM2"),GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,NULL);
if(hComm1 == INVALID_HANDLE_VALUE)
{
puts("Error opening port!!!");
_getch();
abort();
}
if(hComm2 == INVALID_HANDLE_VALUE)
{
puts("Error opening port!!!");
_getch();
abort();
}
// Получили существующую структуру DCB
if (!GetCommState(hComm1, &dcb1))
{
puts("Error opening DCB structure!!!");
_getch();
abort();
}
if (!GetCommState(hComm2, &dcb2))
{
puts("Error opening DCB structure!!!!!!");
_getch();
abort();
}
// Установили в ней свои параметры
dcb1.BaudRate = CBR_57600; //Скорость передачи данных.
dcb1.ByteSize = 8; //Определяет число информационных бит в передаваемых и принимаемых байтах.
dcb1.Parity = NOPARITY; //Бит четности отсутствует
dcb1.StopBits = ONESTOPBIT; //Один стоповый бит
dcb1.fRtsControl = RTS_CONTROL_TOGGLE;//Задает, что сигнал RTS установлен, когда есть данные для передачи.
//Когда все символы из передающего буфера переданы, сигнал сбрасывается.
dcb2.BaudRate = CBR_57600; //Скорость передачи данных.
dcb2.ByteSize = 8; //Определяет число информационных бит в передаваемых и принимаемых байтах.
dcb2.Parity = NOPARITY; //Бит четности отсутствует
dcb2.StopBits = ONESTOPBIT; //Один стоповый бит
dcb2.fRtsControl = RTS_CONTROL_TOGGLE;//Задает, что сигнал RTS установлен, когда есть данные для передачи.
// Установили новую структуру
if (!SetCommState(hComm1, &dcb1))
{
puts("Error creating DCB structure!!! ");
_getch();
abort();
}
if (!SetCommState(hComm2, &dcb2))
{
puts("Error creating DCB structure!!! ");
_getch();
abort();
}
}
void WriteCom(HANDLE hComm,char ch)
{
DWORD writeNumByte = 0;
if(!WriteFile(hComm, &ch, 1, &writeNumByte, NULL))
{
if(GetLastError() != ERROR_IO_PENDING)
{
puts("Error writing!!!");
_getch();
abort();
}
}
}
int ReadCom(HANDLE hComm, char &ch)
{
DWORD dwRead;
ReadFile(hComm, &ch, 1,&dwRead,0);
return dwRead;
}
int main()
{
HANDLE hComm;
InitComPort();
char str[100];
DWORD dwBytesRead;
COORD coordRead, coordWrite; // Структура COORD : SHORT X; SHORT Y;
HANDLE hStdOut;
hStdOut=GetStdHandle(STD_OUTPUT_HANDLE); // Дескриптор устройства стандартного вывода.
COMSTAT ComStat; // В структуре храняться данные для коммуникации
DWORD ErrorMask = 0;
char chWrite;
char ch;
setlocale(LC_ALL,"Russian");
PurgeComm(hComm1, PURGE_TXCLEAR); // Чистим исхдящий буффер
PurgeComm(hComm2, PURGE_RXCLEAR); // Чистим входной буффер
coordWrite.X=0; coordWrite.Y=0;
coordWrite.X=0; coordWrite.Y=2;
coordRead.X=0; coordRead.Y=12;
SetConsoleCursorPosition(hStdOut,coordWrite);
puts("Enter text: ");
SetConsoleCursorPosition(hStdOut,coordRead);
puts("Text Received: ");
coordWrite.Y = 4;
coordRead.Y = 14;
SetConsoleCursorPosition(hStdOut,coordWrite);
while(1)
{
//Данная функция вызывается когда появляется ошибка соединения,
//и очищает флаг ошибки для разрещения записи или чтения
ClearCommError(hComm2, &ErrorMask, &ComStat);
chWrite = _getch();
WriteFile(hComm1, (LPVOID)&chWrite, 1, &dwBytesRead, NULL);
if(coordWrite.X==80)
{
coordWrite.X=0;
coordWrite.Y++;
}
SetConsoleCursorPosition(hStdOut,coordWrite);
cout << chWrite;
coordWrite.X++;
Sleep(10);
ReadFile(hComm2, (LPVOID)&ch, 1, &dwBytesRead, NULL);
coordRead.X++;
SetConsoleCursorPosition(hStdOut,coordRead);
cout << ch;
if(coordRead.X==79)
{
coordRead.X=40;
coordRead.Y++;
}
cout << ch;
// }
//}*/
}
/*cin >> str;
WriteFile(hComm1, str, 100, &dwBytesRead, NULL);
Sleep(1000);
ReadFile(hComm2, str, 100, &dwBytesRead, NULL);
cout << str;*/
return 0;
}