Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Projekt</strong> MiCarpet <strong>Projekt</strong>bericht<br />
dwDesiredAccess: spezifiziert die Art von auszuführenden Aktionen auf dem Objekt. Es<br />
wurde in GENERIC_READ oder GENERIC_WRITE gesetzt.<br />
dwShareMode: setzt den entsprechenden sharing mode, welcher festlegt ob ein weiteres<br />
HANDLE erzeugt werden darf, wenn ein anderer Prozess bereits Zugriff auf diese Datei<br />
hat bzw. wie die Zugriffsrechte dann aussehen. Es wurde auf 0 gesetzt und damit der weitere<br />
Zugriff verboten.<br />
lpSecurityAttributes: ist ein Zeiger auf eine SECURITY_ATTRIBUTES Struktur,<br />
über den feststellt wird, ob die HANDLE-Datei an einen Kindprozess vererbt werden kann<br />
oder nicht. Es wurde auf NULL gesetzt.<br />
dwCreationDisposition: definiert die Aktion, die unternommen wird, wenn die Datei<br />
HANDLE existiert oder nicht. Dafür gibt 5 Stati: CREATE_VIEW, CREATE_ALWAYS,<br />
OPEN_EXISTING, OPEN_ALWAYS und TRUNCATE_EXISTING. Es wurde in unserem<br />
Programm OPEN_EXISTING gesetzt.<br />
dwFlagsAndAttributes: definiert die Dateiattribute und bezeichnet die Datei. Es wurde<br />
auf 0 gesetzt.<br />
hTemplateFile: spezifizierte das HANDLE mit Lesenzugriff auf die Datei. Es wurde auf<br />
0 gesetzt.<br />
Zusammenzufasst sieht die Portöffnungs- und Herstellungsmethode, wie wir sie konfiguriert<br />
haben, mit allen Sicherheitsabfragen, ob der Port geöffnet wurde, folgendenmaßen aus:<br />
bool CSiosCom::openPort(char* portname){<br />
hcom=CreateFile(portname,<br />
GENERIC_READ | GENERIC_WRITE,<br />
0,<br />
0,<br />
OPEN_EXISTING,<br />
0,<br />
0);<br />
}<br />
if(hcom==INVALID_HANDLE_VALUE)<br />
{<br />
printf("FEHLER: SIOS-Port %s: Öffnen fehlgeschlagen.\n", portname);<br />
return false;<br />
}<br />
printf("SIOS-Port ist erfolgreich geoeffnet: %s\n", portname);<br />
return true;<br />
Obwohl der Port geöffnet ist, genügt dies nicht, um eine Kommunikation mit den SIOS<br />
durchzuführen. Ein Grund dafür ist, dass die Konfiguration der SIOS in dem Gerätkontrollbock<br />
fehlt. Deshalb wurde eine Konfigurationsmethode geschrieben.<br />
(b) setConfigurationPort(DWORD BaudRate, BYTE ByteSize, DWORD fParity,<br />
BYTE Parity, BYTE StopBits)<br />
Diese Funktion konfiguriert den seriellen Port, auf welchem die Kommunikation mit der<br />
SIOS abläuft. An Parametern werden die Baudrate, die Bytegröße, die Bitparität, die Parität<br />
und den Stoppbit der SIOS benötigt. Mit diesen Eingaben werden die Informationen über das<br />
Gerät mit der Struktur DCB mittels der Funktionen GetCommstate und SetCommState<br />
an den seriellen Port übermittelt.<br />
Mit ihnen wird geprüft, ob die Struktur in dem Gerätkontrollblock für die HANDLE-datei<br />
tatsächlich gepackt ist oder nicht. (2do)<br />
Dazu werden die Rückgabenwerte von GetCommstate und SetCommState abgefragt;<br />
sind diese FALSE, dann liefert die gesamte Konfigurationsfunktion FALSE zurück mit der<br />
Fehlermeldung, dass die Portkonfiguration fehlgeschlagen ist und die HANDLE-Datei wird<br />
geschlossen. Ansonsten wird TRUE mit der entsprechender Meldung zurückgegeben.<br />
6. Januar 2005 Seite 181