1 Seminar zum Programmierprojekt SS 2008 Uni Tübingen, Arbeitsbereich Technische Informatik Anleitung C3 Einführung in der Entwicklungsumgebung und BT-Stack Allgemeines In dieser Aufgabe lernen wir die integrierte Entwicklungsumgebung Eclipse und die JavaProgrammierung im Host für bidirektionale Kommunikation und für Bluettoth kennen. Eclipse Eclipse wurde von der Fa. IBM entwickelt und als Open Source zur Verfügung gestellt. Eclipse ist ein Open-Source-Framework zur Entwicklung von Rich-Client-Applikationen (RCP). Die bekannteste Anwendung ist die Nutzung als Entwicklungsumgebung (IDE Integrated Development Environment) für die Programmiersprache Java. Eclipse ist nicht auf Java festgelegt und wird aufgrund seiner offenen plugin-basierten Struktur mittlerweile für sehr unterschiedliche Entwicklungsaufgaben eingesetzt. Eclipse basiert auf Java-Technologie, seit Version 3.0 konkret auf einem OSGi-Framework (Open Services Gateway Initiative) namens Equinox, das auch Grundlage des IBM Workplace Clients ist, einer Weiterentwicklung von Lotus Notes. Eclipse ist der Nachfolger von IBM "Visual Age" für Java 4.0. Der Quellcode für Eclipse, der einen Wert von angeblich 40 Millionen US-Dollar haben soll, wurde am 7. November 2001 von IBM freigegeben. Etwa die Hälfte der derzeitig am Eclipse-Basisframework arbeitenden Entwickler wird weiterhin von IBM bezahlt. Am 2. Februar 2004 beschloss das von IBM geführte Eclipse-Konsortium die Gründung der rechtlich eigenständigen Eclipse Foundation, die seitdem für die Entwicklung von Eclipse verantwortlich ist. Bis einschliesslich zur Version 2.1 war Eclipse als erweiterbare IDE konzipiert. Seit Version 3.0 ist Eclipse selbst nur der Kern, der die einzelnen Plugins lädt, die dann die eigentliche Funktionalität zur Verfügung stellen. Diese Funktionalität nennt sich Rich Client Platform (kurz RCP) und basiert auf dem OSGi-Standard. Sowohl Eclipse als auch die Plugins sind vollständig in Java implementiert. Als GUI-Framework zur Erstellung der grafischen 2 Oberfläche wurde SWT (Standard Widget Toolkit) verwendet. Zur Darstellung der GUIKomponenten basiert SWT ähnlich wie AWT (Abstract Window Toolkit) auf den nativen GUI-Komponenten des jeweiligen Betriebssystems. Eclipse ist daher nicht plattformunabhängig, wird aber für 11 verschiedene Systeme und Architekturen bereitgestellt. Die Plugins lassen sich durch den Download direkt in Eclipse von einem Update-Server oder durch einfaches Entpacken installieren. Für die Eclipse-IDE wurden schon zahlreiche Plugins geschrieben, teils Proprietär, teils frei verwendbar. Primär wird Eclipse als Java-IDE verwendet, es existieren aber etliche Plugins für andere Sprachen oder zur Entwicklung von OSGi-Bundles. Dazu zählt vor allem das CDT-Projekt (Eclipse C/C++ Development Tooling), das C und C++ unterstützt, jedoch nur den GNU-C-Compiler abdeckt. Darüber hinaus gibt es auch Plugins für Perl, PHP, Ruby, Python usw. Diese können auf bequeme Art und Weise über ein Menu in Eclipse eingebunden werden. Gruppe wird das Java-DIE verwenden. JAVA Programmierung im HOST Sockets Da die drahtlose Kommunikation über Bluetooth eine bidirektionale KommunikationsSchnittstelle darstellt, ist als Grundlage die Kenntnis über Sockets angebracht. Ein Socket ist eine grundlegende bidirektionale Software-Schnittstelle zur Interprozess- (IPC) oder Netzwerk-Kommunikation. Bei einem Socket handelt es sich um ein Ende einer Kommunikationsschnittstelle zwischen zwei Programmen, welche Daten über ein Netzwerk austauschen. Eine Applikation fordert einen Socket vom Betriebssystem an, und kann über diesen anschließend Daten verschicken und empfangen. Das Betriebssystem hat die Aufgabe, alle benutzten Sockets sowie die zugehörigen Verbindungsinformationen zu verwalten. Verschiedene Socket-Klassen repräsentieren die Verbindung auf der Client- wie auf der Serverseite. Eine Socket-Adresse kann z. B. definiert sein durch: • • • • Identifikationsnummer des Remote-Host Portnummer des Remote-Host Identifikationsnummer des Local-Host Portnummer des Local-Host Diese Informationen sind allerdings vom verwendeten Protokoll abhängig, so ist die AdressInformation für einen UNIX Domain Socket (wird benutzt für Interprozesskommunikation) ein Dateipfad. Typischerweise handelt es sich bei der Adress-Information im Internet um die IP-Adresse und den Port. Die Vergabe der Portnummern erfolgt beim Verbindungsaufbau. Die Portnummern werden zum Großteil vom System beliebig vergeben. Ausnahmen sind die sogenannten Well-Known-Ports welche von bekannten Applikationen fest verwendet werden. Socket-Programmierung in Java Java als plattformunabhängige Programmiersprache unterstützt im Package java.net unmittelbar die Socket-Programmierung. Die Implementierung der Sockets für die verschiedenen Plattformen (Linux, Windows, Spezialsysteme) erfolgt in der 3 Klassenbibliothek der virtuellen Maschine. Die Klassen für die Socket-Programmierung sind Socket und ServerSocket. Folgendes Kurzbeispiel zeigt die Verwendung: //Serversocket mit bestimmter Portnummer erstellen ServerSocket theServerSocket = new ServerSocket(port); //auf Anfragen warten while(true) { Socket clientSocket = theServerSocket.accept(); //InputStream-Objekt öffnen InputStream input = clientSocket.getInputStream(); //Daten lesen int data = input.read(); //Verbindung schließen clientSocket.close(); } Java Bluetooth Development Kits Zur Entwicklung von Bluetooth-Anwendungen gibt es für Java Development Kits, welche die Arbeit vereinfachen sollen. Dabei wird zwischen drei Arten von Development Kits unterschieden. • • • Complete Development Kits - enthalten Bluetooth-Hardware, Java-Software, Anleitungen und Beispielprogramme. Sie eignen sich besonders für Einsteiger, da sie alle Komponenten zur Softwareentwicklung enthalten. JB-22 ist ein solches Development Kit und kann über das Internet gekauft werden. Weitere CDKs: BlipNet, Possio PX 30. Software Only Development Kits - wie der Name sagt enthalten sie nur die Software. Auf Kompatibilität mit evtl. vorhandener Hardware muss geachtet werden. Ein Beispiel ist Blue Cove. Blue Cove unterstützt nur javax.bluetooth. Weitere SWDevelopment Kits sind Atinav, Avetana, Harald, Rococo. Simulation Development Kits - dienen zur Simulation der Interaktion der JVM mit Bluetooth-Hardware. Programme die mit Simulation Development Kits entworfen werden sind nicht zwingend kompatibel mit echter Hardware. Zum Beispiel wird im Prorammierprojekt für das Mobiltelefon das J2ME Wireless Toolkit verwendet. Weitere Simulation Development Kits sind Rococo und Nokia Developer's Suite for J2ME. Bluetooth im Host Für die Programmierung in der Windows-Umgebung soll die Java BT Implementierung von Benhui Bluecove sowie das Java J2SE Development Kit und die J2SE Runtime Environment 5.0 Update 10 oder höher verwendet werden. Als Entwicklungsumgebung bietet sich Eclipse an. Hier muss ein neues Java-Projekt angelegt werden. Es muss die Benhui Bluecove Bibliothek ins Projekt eingebunden werden (über RechteMaustaste auf Projekt -> BuildPath -> Configure Build Path -> Add External Jars). Für die Programmierung in der Linux-Umgebung bietet sich der BlueZ-Stack [3,4] an. Bluez Protokoll-Stack BlueZ ist der offizielle Bluetooth Stack für Linux und kann unter http://bluez.sourceforge.net heruntergeladen werden. Er besitzt folgende Eigenschaften: • Flexible, effiziente und modulare Architektur 4 • • • Unterstützung für mehrere Bluetooth Geräte Hardwareabstraktion Standard Socketinterface zu allen Protokollschichten Der aktuelle Protokollstack (Vers. 2.0) besteht aus: • HCI Core • HCI UART, USB und HCI Emulation Treiber • L2CAP Protokoll als ladbares Kernel-Modul • Konfigurations- und Testprogramme Die folgende Abbildung zeigt eine Übersicht des BlueZ Protokoll Stack. Installation Der Bluez Stack ist ab Version 2.0-pre7 in drei Teile aufgeteilt: • • • BlueZ-libs: Enthält die benötigten Bibliotheken BlueZ-kernel: Enthält die benötigten Kernel-Module BlueZ-utils: Enthält Programme zum Testen bzw. Konfigurieren des Stacks Das Verzeichnis, in dem sich der zu übersetzende Quelltext befindet, enthält auch das configure-Script welches automatisch alle Informationen, die der Compiler benötigt ermittelt und diese im Makefile ablegt. Leider funktioniert dieses Script besonders beim CrossKompilieren nicht immer ohne Probleme. Meist müssen noch weitere Informationen als Übergabeparameter in der Kommandozeile übergeben bzw. bestimmte Umgebungsvariablen gesetzt werden. Sollte auch dies nicht zum gewünschten Erfolg führen, so muss ggf. die Datei config.in editiert werden. In dieser Datei stehen Angaben wie z.B. lib-Verzeichnisse, aus denen mittels autoconfig das configure-Script generiert wird. Wichtig hierbei kann es auch sein, das alte config.cach zu löschen um auf jeden Fall eine aktualisierte Version zu erstellen. 5 Beim Update auf eine neuere Version von BlueZ ist es wichtig, vorher die alten Module zu löschen, da sich Verzeichnisse ändern können und das alte Modul somit nicht überschrieben wird und es dem Zufall überlassen bleibt, welches Modul geladen wird. Die drei Teile von BlueZ können mit ./configure make make install erzeugt und installiert werden. Die Installation des Stacks ist auch im BlueZ-Howto [4] ausführlich beschrieben. RFCOMM ist als Dämon realisiert und setzt auf den BlueZ-Stack auf. Um eine Verbindung über RFCOMM erstellen zu können muss ein Server und ein Client definiert werden, die dann miteinander kommunizieren können [7]. Anhang Literatur und Quellen [1] The Java APIs for Bluetooth Wireless Technology [2] JSR 82 [3] BlueZ Homepage [4] BlueZ Howto [5] Wikipedia Eintrag zu Sockets [6] http://www.eclipse.org [7] www.rooijen.de