#include <iostream>
#include <string.h>
#include <windows.h>
using namespace std;
int main()
{
HANDLE h; /* handler, sera el descriptor del puerto */
DCB dcb; /* estructura de configuracion */
DWORD dwEventMask; /* mascara de eventos */
/* abrimos el puerto */
h=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(h == INVALID_HANDLE_VALUE) {
/* ocurrio un error al intentar abrir el puerto */
}
/* obtenemos la configuracion actual */
if(!GetCommState(h, &dcb)) {
/* error: no se puede obtener la configuracion */
}
/* Configuramos el puerto */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fBinary = TRUE;
dcb.fParity = TRUE;
/* Establecemos la nueva configuracion */
if(!SetCommState(h, &dcb)) {
/* Error al configurar el puerto */
}
/* Para que WaitCommEvent espere el evento RXCHAR */
SetCommMask(h, EV_RXCHAR);
while(1) {
DWORD n;
char enviar;
char recibido;
/* Enviamos... */
enviar = 'f';
if(!WriteFile(h, &enviar/*puntero al buffer*/, 1/* 1 byte*/, &n, NULL)){
/* Error al enviar */
}
/* De la llamada a WaitCommEvent solo se retorna cuando ocurra
* el evento seteado con SetCommMask */
WaitCommEvent(h, &dwEventMask, NULL);
/* Recibimos algun dato!*/
while(1) {
ReadFile(h, &recibido, 1/* leemos un byte */, &n, NULL);
if(!n)
break;
cout << recibido; /* mostramos en pantalla */
};
if(recibido == 'q')
break;
}
return 0;
}