Ved nærmere eftertanke...
Ved inferrød sender og modtager man på samme bølgelængde, så man kan ikke sende og modtage på samme tid, og alt det man sender vil man også modtage.
Hvis begge ender forsøger at sende på samme tid vil der opstå en konflikt, og man modtager ikke det samme som man har sendt. Så når man sender må man også modtage og checke om der modtages det samme som der sendes, ellers er der konflikt, og så må man stoppe.
Jeg har fået den til i en while lykke at tjekke om der er kommet nogen meddelelse med ReadFile(), men jeg modtager intet, og jeg sætter mit gameboy op til den inferrøde port når den er i loop lykke, dvs. at jeg kan være sikker på at modtage det (tror jeg da).
desuden så når jeg sender noget via porten så modtager jeg det igen, som du sagde at man ville.
jeg har desuden også prøvet med 9600, 19200, 57600 og 115200 uden resultat.
jeg bruger CreateFile med COM3.
min kode er her:
#include <stdio.h>
#include <windows.h>
#include <iostream>
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);
WriteFile(Port, "\\r\\n", 2, &Dummy, 0);
}
void Rx(HANDLE Port)
{
char Buffer[128];
DWORD Length, i;
ReadFile(Port, Buffer, 128, &Length, 0);
for(i = 0; i < Length; i++)
if(Buffer[i] != '\\r')
printf("%c", Buffer[i]);
printf("%i\\n", Length);
}
int main(void)
{
DCB dcb;
HANDLE ComPort = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
GetCommState(ComPort, &dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fOutxCtsFlow = 1;
SetCommState(ComPort, &dcb);
SetTimeOut(ComPort, 1);
Tx(ComPort, "AT");
Rx(ComPort);
Tx(ComPort, "ATZ");
while(true)
{
Rx(ComPort);
}
CloseHandle(ComPort);
int a;
std::cin >> a;
return 0;
}
Er der andet jeg kan gøre for at modtage, har jeg lavet en fejl, er det umiligt eller hvad?
[Redigeret d. 27/04-05 20:44:04 af Andreas]