Скачиваний:
34
Добавлен:
15.09.2014
Размер:
2.76 Кб
Скачать
// 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;
}