Добавил:
Mymnan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сборка Часть1 / avmis_labs / неразобрано / 501 / Лаб_СОМ / Бичан М.А / com
.cpp// com.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
#include <iostream>
#include "COMPort.h"
#define BUFSIZE 256
using namespace std;
int main(int argc, char *argv[])
{
int port, rate = 57600;
bool res, asyn = false;
char buf[BUFSIZE];
DWORD rw;
ComPort cp;
HANDLE HStdin, HStdout;
char c;
puts("Press '1' - for choice 'client'(put data), \npress '2' for choice 'server'(get data)");
c = getch();
system("cls");
if(c == '1')
{
port = 2;
res = cp.Open(port, rate);
if(res == false)
{
puts("Open Error..");
getch();
return 0;
}
puts("Synchronous mode");
puts("press '#' to exit, \npress '~' for move over to synchronous/asynchronous state):");
HStdin = GetStdHandle(STD_INPUT_HANDLE);
cp.Clean();
while(1)
{
puts("Write string:");
ReadFile(HStdin, buf, BUFSIZE, &rw, NULL);
if(buf[0] == '~')
{
cp.Close();
if(asyn == false)
{
res = cp.Open(port, rate, 0);
asyn = true;
if(res == false)
{
puts("Open Error..");
getch();
return 0;
}
system("cls");
puts("Asynchronous mode");
}
else
{
res = cp.Open(port, rate);
asyn = false;
if(res == false)
{
puts("Open Error..");
getch();
return 0;
}
system("cls");
puts("Synchronous mode");
}
}
cp.Send(buf, rw);
if(buf[0] == '#') break;
}
CloseHandle(HStdin);
}
else if(c == '2')
{
port = 3;
res = cp.Open(port, rate);
if(res == false)
{
puts("Open Error..");
getch();
return 0;
}
HStdout = GetStdHandle(STD_OUTPUT_HANDLE);
puts("Synchronous mode");
puts("Get data:");
DWORD dwBytesRead = 0;
while(1)
{
dwBytesRead = cp.Recv(buf, BUFSIZE);
if(buf[0] == '~')
{
//Sleep(1000);
cp.Close();
if(asyn == false)
{
res = cp.Open(port, rate, 1);
asyn = true;
if(res == false)
{
puts("Open Error..");
getch();
return 0;
}
system("cls");
puts("Asynchronous mode");
puts("Get data:");
}
else
{
res = cp.Open(port, rate);
asyn = false;
if(res == false)
{
puts("Open Error..");
getch();
return 0;
}
system("cls");
puts("Synchronous mode");
puts("Get data:");
}
buf[0] = 0;
}
if(dwBytesRead != 0)
{
puts("Read:");
WriteFile(HStdout, buf, dwBytesRead, &rw, NULL);
}
if(buf[0] == '#') break;
}
CloseHandle(HStdout);
}
cp.Close();
return 0;
}