U
// Seriellport.h: Schnittstelle für die Klasse CSERIELL.
#if !defined(SERIELLPORT_H)
#define SERIELLPORT_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <windows.h>
class CSERIELL
{
public:
CSERIELL();
~CSERIELL();
bool Init(int iPort, int Baud =9600, int Size =8, int Parity =0, int stopbit=0, int fRtsControl =2, int Timeout =100, int TotalTimeout =1000);
int Receive(void *PUFFER, int MAXBYTES);
bool Send(void *PUFFER, unsigned int nBYTES);
bool Close();
char* Geterror();
bool isOpen();
private:
char* m_fehler;
HANDLE m_hPort;
};
#endif
// Seriellport.cpp: Implementierung der Klasse CSERIELL.
//
#include "stdafx.h"
#include "Seriellport.h"
#include <stdio.h>
#include <iostream.h>
CSERIELL::CSERIELL()
{
this->m_error= NULL;
this->m_hPort= 0;
}
CSERIELL::~CSERIELL()
{
this->Close();
}
/sendet Daten zur seriellen Schnittstelle
bool CSERIELL::Send(void *puffer, unsigned int len)
{
DWORD written= 0;
if(isOpen())
{
WriteFile(this->m_hPort, puffer, len, &written, NULL);
}
if(len == written)
return true;
return false;
}
//holt Daten von der seriellen Schnittstelle
int CSERIELL::Receive(void *puffer, int len)
{
DWORD receive=0;
if(m_hPort !=0 && len >0)
{
ReadFile(m_hPort, puffer, len, &receive, NULL);
}
if(receive==0)
return receive;
}
//schließt die serielle Schnittstelle
bool CSERIELL::Close()
{
if(isOpen())
{
CloseHandle(this->m_hPort);
this->m_hPort= 0;
return true;
}
return false;
}
//Ist serielle Schnittstelle offen
bool CSERIELL::isOpen()
{
if(m_hPort >0)
return true;
// this->m_error= ERROR_port_init;
return false;
}
char* CSERIELL::Geterror()
{
return m_error;
}
bool CSERIELL::Init(int iPort, int iBaud, int iSize, int iParity, int stopbit, int fRtsControl, int iTimeout, int iTotalTimeout)
{
char port[]= "COM0123456789:";
sprintf(port, "COM%i:", iPort);
m_hPort = CreateFile( port,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if((int)this->m_hPort == -1) //COMx ist nicht vorhanden
this->m_hPort=0;
if(this->m_hPort !=0)
{
COMMTIMEOUTS comtime;
GetCommTimeouts(this->m_hPort, &comtime);
comtime.ReadIntervalTimeout= iTimeout;
comtime.ReadTotalTimeoutConstant= iTotalTimeout;
comtime.WriteTotalTimeoutConstant= iTotalTimeout;
comtime.ReadTotalTimeoutMultiplier=2;
comtime.WriteTotalTimeoutMultiplier=0;
SetCommTimeouts(this->m_hPort, &comtime);
DCB dcb; //Gerätekommunikationsanpassung
GetCommState(this->m_hPort, &dcb);
dcb.BaudRate= iBaud;
dcb.ByteSize= iSize;
dcb.DCBlength= 28;
dcb.EofChar= 0;
dcb.ErrorChar= 0;
dcb.fRtsControl= fRtsControl;
dcb.Parity= iParity;
dcb.StopBits= stopbit;
dcb.fInX=0;
dcb.fOutX=0;
dcb.fAbort O n E r r o r = 1; //Bitte hier die leerzeichen
// wegmachen. Vermutlich Bug im Forum
SetCommState(this->m_hPort, &dcb);
return true;
}
return false;
}
Die ist eine Klasse um mit der Serielle Schnittstelle zu arbeiten.
Header und cpp-datei.
Terminator hat eine Möglichkeit gezeigt wie sie unter WinNT nicht funktioniert. Ob sie WINNT funzt kann ich nicht testen.
W2K läßt aber solche zugriffe nicht zu. Deshalb die ´behandlung des Comports als File.
[ Dieser Beitrag wurde am 01.02.2002 um 23:56 Uhr von Unix-Tom editiert. ]
[ Dieser Beitrag wurde am 01.02.2002 um 23:57 Uhr von Unix-Tom editiert. ]
[ Dieser Beitrag wurde am 01.02.2002 um 23:57 Uhr von Unix-Tom editiert. ]
[ Dieser Beitrag wurde am 01.02.2002 um 23:59 Uhr von Unix-Tom editiert. ]
[ Dieser Beitrag wurde am 02.02.2002 um 00:00 Uhr von Unix-Tom editiert. ]
[ Dieser Beitrag wurde am 02.02.2002 um 00:00 Uhr von Unix-Tom editiert. ]
[ Dieser Beitrag wurde am 02.02.2002 um 00:01 Uhr von Unix-Tom editiert. ]
[ Dieser Beitrag wurde am 02.02.2002 um 00:03 Uhr von Unix-Tom editiert. ]