14.11.2012 Aufrufe

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!