Hej....
Jeg vil gerne have nedenstående eks. til at virke. Problemet med koden er at den går ud og læser bufferen hver gang i stedet for at vente på 'EventChar'en bliver skrevet i bufferen. Jeg skal IKKE bruge WaitCommMask, medmindre man kan sætte en timeout på den! Eftersom den stopper programmet så man ikke kan skrive noget på tasteturet mens programmet kører fordi WaitCommMask venter på EventChar vil blive skrevet i bufferen.
Jeg skal nok prøve at beskrive det bedre hvis I har spørgsmål!
***************************Kode Begynd****************
#include <stdio.h>
#include <windows.h>
#include <conio.h>
void SetTimeOut(HANDLE Port, int sec)
{
COMMTIMEOUTS commtimeouts;
GetCommTimeouts(Port, &commtimeouts);
commtimeouts.ReadIntervalTimeout = 1000*sec;
commtimeouts.ReadTotalTimeoutMultiplier = 10;
commtimeouts.ReadTotalTimeoutConstant = 1000*sec;
SetCommTimeouts(Port, &commtimeouts);
}
void Tx(HANDLE Port, const char *data)
{
DWORD Dummy;
WriteFile(Port, data, strlen(data), &Dummy, 0);
}
void Rx(HANDLE Port)
{
char Buffer[128];
DWORD Length, i;
ReadFile(Port, Buffer, 128, &Length, 0);
for(i = 0; i < Length; i++)
printf("%c", Buffer
);
}
int main(void)
{
DWORD dwEvtMask = 0;
OVERLAPPED o;
DCB dcb;
HANDLE ComPort = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
GetCommState(ComPort, &dcb);
dcb.EvtChar = '\\n';
SetCommState(ComPort, &dcb);
SetTimeOut(ComPort, 1);
SetCommMask(ComPort, EV_RXFLAG);
int in1, DONE = 0;
char in2[128];
while(!DONE)
{
if (kbhit())
{
if ((in1 = getch()) == '\\x1B')
{
DONE = 1;
}
else
{
putch(in1);
in2[0] = in1;
Tx(ComPort, in2);
}
}
if(GetCommMask(ComPort, &dwEvtMask))
{
if(dwEvtMask & EV_RXFLAG)
{
Rx(ComPort);
}
}
}
CloseHandle(ComPort);
}
**************************Kode Slut********************
På forhånd tak!
Romsen