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. ]