Anleitung C3 Einführung in der Entwicklungsumgebung und BT

Werbung
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
Herunterladen