M
ich hab mal für elexs versucht ne klasse zum comport zu schreiben, sie wurde nie fertieg, ihr könnt sie benutzten und erweitern, wenn ihr mir die erweiterungen->verbesserungen mitteilt
Die CPORT.CPP
#include <windows.h>
#include "CPORT.H"
HANDLE hCom;
DWORD COMStatus;
ComPort::SetOPEN(int PORT)
{
if(PORT<=0||PORT>4)
{
return WRONG_PORT;
}
char*CP[]={"COM1","COM2","COM3","COM4"};
hCom = CreateFile(CP[PORT-1],
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0, /* no overlapped I/O */
NULL); /* must be NULL for comm devices */
return 0;
}
ComPort::SetCLOSE()
{
CloseHandle(hCom);
return 0;
}
ComPort::SetDTR(bool mode)
{
if(mode==ON)
{
EscapeCommFunction(hCom, SETDTR); // setzen
}
else
{
EscapeCommFunction(hCom, CLRDTR); // Loeschen
}
return 0;
}
ComPort::SetRTS(bool mode)
{
if(mode==ON)
{
EscapeCommFunction(hCom, SETRTS); // setzen
}
else
{
EscapeCommFunction(hCom, CLRRTS); // Loeschen
}
return 0;
}
ComPort::SetTXD(bool mode)
{
if(mode==ON)
{
EscapeCommFunction(hCom, SETBREAK); // setzen
}
else
{
EscapeCommFunction(hCom, CLRBREAK); // Loeschen
}
return 0;
}
int ComPort::SENDEN (char* text)
{
//WriteFile(hCom,text);
return 0;
}
char* ComPort::EMPFANGEN ()
{
char* text;
//ReadFile(hCom,text);
return text;
}
void ComPort::WARTE(int ms)
{
Sleep(ms);
}
bool ComPort::GetCTS()
{
GetCommModemStatus(hCom, &COMStatus);
if(COMStatus & MS_CTS_ON)
{
return ON;
}
return OFF;
}
bool ComPort::GetDSR()
{
GetCommModemStatus(hCom, &COMStatus);
if(COMStatus & MS_DSR_ON)
{
return ON;
}
return OFF;
}
Die CPORT.H
#pragma once
#define WRONG_PORT 100
#define INVALID_PORT 101
#define ON true
#define OFF false
class ComPort
{
public:
int SetOPEN (int PORT);
int SetCLOSE (void);
int SetDTR (bool mode);
int SetRTS (bool mode);
int SetTXD (bool mode);
int SENDEN (char* text);
bool GetCTS ();
bool GetDSR ();
void WARTE (int ms);
char* EMPFANGEN (void);
};
das #pragma once bewirkt, das die header nur einmal eingebun´den wird beim vc++
da gibts bestimmt auch ne bessere methode