Nein, hab ich wieder geändert.
Hier mal der komplette Code:
Code:
// SerielleSchnittstelle.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"
#include "strsafe.h"
void ErrorExit(LPTSTR lpszFunction);
int i = 1234567;
HANDLE hSerial;
COMMTIMEOUTS timeouts;
DCB dcbSerialParams;
char szBuff;
char szBuff1[8];
char szBuff2[8];
char szBuff3[8];
DWORD dwBytesRead;
DWORD dwBytesWrite;
int n = 8; //4096;
int _tmain(int argc, _TCHAR* argv[])
{
hSerial = CreateFile("COM4",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if(hSerial==INVALID_HANDLE_VALUE)
{
if(GetLastError()==ERROR_FILE_NOT_FOUND)
{
// Generate an error
// Fehlercode ausgeben
if(!GetProcessId(NULL))
{
ErrorExit(TEXT("GetProcessId"));
}
//serial port does not exist. Inform user.
printf("Fehler bei CreateFile. Serial Port existiert nicht!\n");
}
//some other error occurred. Inform user.
printf("Fehler bei CreateFile. Sonstiger Fehler!\n");
}
else
{
printf("Kein Fehler bei CreateFile!\n");
}
//////////////////////////////
if (!GetCommState(hSerial, &dcbSerialParams))
{
//error getting state
printf("Fehler bei GetCommState!\n");
}
else
{
printf("Kein Fehler bei GetCommState!\n");
}
/*dcbSerialParams.BaudRate=CBR_19200; //CBR_57600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
dcbSerialParams.fOutX=1;
dcbSerialParams.fInX=1;*/
dcbSerialParams.BaudRate=CBR_19200;//a; /* oder was Anders */
dcbSerialParams.DCBlength=sizeof(DCB); /* !!! */
dcbSerialParams.fBinary=1;
dcbSerialParams.fOutxCtsFlow=0;
dcbSerialParams.fOutxDsrFlow=0;
dcbSerialParams.fDtrControl=DTR_CONTROL_ENABLE;
dcbSerialParams.fDsrSensitivity=0;
dcbSerialParams.fRtsControl=RTS_CONTROL_ENABLE;
if(!SetCommState(hSerial, &dcbSerialParams))
{
//error setting serial port state
printf("Fehler bei GetCommState beim Parameter belegen!\n");
}
else
{
printf("Kein Fehler bei GetCommState beim Parameter belegen!\n");
}
///////////////////////////////
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutConstant=50;
timeouts.ReadTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=50;
timeouts.WriteTotalTimeoutMultiplier=10;
if(!SetCommTimeouts(hSerial, &timeouts))
{
//error occureed. Inform user
printf("Fehler bei Timeout!\n");
}
else
{
printf("Kein Fehler bei Timeout!\n");
}
//////////////////////////////////
while(i < 9999999)
{
i = 0;
if(!ReadFile(hSerial, &szBuff2, n, &dwBytesRead, NULL))
{
//error occurred. Report to user.
printf("Fehler bei ReadFile!\n");
}
else
{ i = atoi(szBuff2);
_itoa_s(i,szBuff3,10);
printf (szBuff3);
printf ("\n");
}
////////////////////////////////
//szBuff[0] = 'r';
i = 1234569;
_itoa_s(i,szBuff1,10);
if(!WriteFile(hSerial, &szBuff1, n, &dwBytesWrite, NULL))
{
//error occurred. Report to user.
printf("Fehler bei WriteFile!\n");
}
else
{
printf (szBuff1);
printf ("\n");
}
}
///////////////////////////////
CloseHandle(hSerial);
////////////////////////////////
system("pause");
return 0;
}
// Fehlerfunktion
void ErrorExit(LPTSTR lpszFunction)
{
// Retrieve the system error message for the last-error code
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
// Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf) / sizeof(TCHAR),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
ExitProcess(dw);
}
Lesezeichen