Hjælp til COM
Hej, jeg har et problem med nedenstående kode...-----------------------------------------------------------------
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <iostream>
char GlobalBuffer1[128], GlobalBuffer2[128], GlobalBuffers[128];
int i;
DWORD GlobalLength, GlobalDummy;
void SetTimeOut(HANDLE Port, int sec)
{
COMMTIMEOUTS commtimeouts;
GetCommTimeouts(Port, &commtimeouts);
commtimeouts.ReadIntervalTimeout = MAXDWORD;
commtimeouts.ReadTotalTimeoutMultiplier = 0;
commtimeouts.ReadTotalTimeoutConstant = 0;
SetCommTimeouts(Port, &commtimeouts);
}
void SendCom1()
{
DCB dcb;
HANDLE ComPort = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(ComPort == INVALID_HANDLE_VALUE)
{
printf("Failed to open port nr 1\n");
}
GetCommState(ComPort, &dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fOutxCtsFlow = 1;
SetCommState(ComPort, &dcb);
SetTimeOut(ComPort, 1);
WriteFile(ComPort, GlobalBuffer2, strlen(GlobalBuffer2), &GlobalDummy, 0);
for(i = 0; i < 128; i++)
{
GlobalBuffer2[i] = '\0';
}
CloseHandle(ComPort);
}
void SendCom2()
{
DCB dcb;
HANDLE ComPort = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(ComPort == INVALID_HANDLE_VALUE)
{
printf("Failed to open port nr 2\n");
}
GetCommState(ComPort, &dcb);
dcb.BaudRate = 4800;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fOutxCtsFlow = 1;
SetCommState(ComPort, &dcb);
SetTimeOut(ComPort, 1);
WriteFile(ComPort, GlobalBuffer1, strlen(GlobalBuffer1), &GlobalDummy, 0);
for(i = 0; i < 128; i++)
{
GlobalBuffer1[i] = '\0';
}
CloseHandle(ComPort);
}
void SendCom2s()
{
DCB dcb;
HANDLE ComPort = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(ComPort == INVALID_HANDLE_VALUE)
{
printf("Failed to open port nr 2\n");
}
GetCommState(ComPort, &dcb);
dcb.BaudRate = 4800;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fOutxCtsFlow = 1;
SetCommState(ComPort, &dcb);
SetTimeOut(ComPort, 1);
WriteFile(ComPort, GlobalBuffers, strlen(GlobalBuffers), &GlobalDummy, 0);
CloseHandle(ComPort);
}
void ModtagerCom1()
{
DCB dcb;
HANDLE ComPort = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(ComPort == INVALID_HANDLE_VALUE)
{
printf("Failed to open port nr 3\n");
}
GetCommState(ComPort, &dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fOutxCtsFlow = 1;
SetCommState(ComPort, &dcb);
SetTimeOut(ComPort, 1);
ReadFile(ComPort, GlobalBuffer1, 128, &GlobalLength, 0);
CloseHandle(ComPort);
}
void ModtagerCom2()
{
DCB dcb;
HANDLE ComPort = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(ComPort == INVALID_HANDLE_VALUE)
{
printf("Failed to open port nr 4\n");
}
GetCommState(ComPort, &dcb);
dcb.BaudRate = 4800;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fOutxCtsFlow = 1;
SetCommState(ComPort, &dcb);
SetTimeOut(ComPort, 1);
ReadFile(ComPort, GlobalBuffer2, 128, &GlobalLength, 0);
CloseHandle(ComPort);
}
int main()
{
int DONE=0, in1;
char in2[128];
while(!DONE)
{
ModtagerCom1();
SendCom2();
if(kbhit())
{
if ((in1 = getch()) == '\x1B')
{
DONE = 1;
}
else
{
putch(in1);
GlobalBuffers[0] = in1;
GlobalBuffers[1] = 0;
SendCom2s();
}
}
ModtagerCom2();
SendCom1();
}
}
-----------------------------------------------------------------
Hvis man sender ordet "start" over COM1 så skulle hele ordet blive sendt videre til COM2, men der bliver kun udskrevet et tegn eller to... det er lidt forskelligt!
Jeg er på bar bund i henhold til hvor de manglende tegn bliver af!
I bund og grund er meningen med programmet at det skal kunne modtage et signal fra COM1 og sende til videre til COM2 på en anden PC og omvendt.
Skriv hvis jeg skal forklare det bedre! :D
MVH
Fossy