3 Aufgabe 2 - Vorbereitung

Transcription

3 Aufgabe 2 - Vorbereitung
3 Aufgabe 2 - Vorbereitung
Ausgabe: Montag, 19.04.2010.
Abgabe: (Eintrag ins SVN-System) Montag, 26.04.2010: 18:00 Uhr.
3.1 Anleitungen A2
3.1.1 Anleitung A2 - Gruppe A
Der Sensor/Aktor Knoten BTnode
Eine BTnode ist eine vielseitige, autonome, kabellose Datenübertragungs- und -bearbeitungsPlattform, sie wurde in der Anleitung zur Aufgabe 1 bereits kurz vorgestellt.
Aufbau der BTnode
Das BTnode-System enthält den Mikrokontroller Atmel ATmega128L. Die neueste Version beinhaltet ein neues Zeevo ZV4002 Bluetooth-System, welches bis zu 4 unabhängige
Piconetze mit je 7 Slaves unterstützt. Zusätzlich wurde ein Chipcon CC1000 FunkSystem integriert, was die Kompatibilität zu den Mica2 Motes“ gewährleistet. Neben
”
einem SRAM Modul gibt es ein 128 KB Flash ROM, sowie ein 4 KB EEPROM. Die
Stromversorgung wird entweder durch einen Gleichstromanschluss gesichert, kann aber
auch durch 2 AA Batterien, welche direkt in den BTnode eingesetzt werden, erfolgen.
Durch die sehr kleinen Maße von 58.15mmx32.5mm eignen sich BTnodes hervorragend für den Einsatz in Sensor- und ad-hoc-Netzwerken. Bei Bedarf können die FunkSubsysteme unabhängig voneinander oder auch gleichzeitig senden und empfangen, aber
auch unabhängig voneinander vollständig ausgeschalten werden, was den BlindleistungsVerbrauch des Gerätes nennenswert reduziert.
Die technischen Daten des BTnode v3.22 im Überblick:
• Atmel Atmega 128L (8 MHz @ 8 MIPS) Mikrokontroller
• 64 + 180 KB SRAM, 128 KB FLASH ROM, 4 KB EEPROM
• Zeevo ZV4002 Bluetooth-Subsystem mit Unterstützung für AFH/SFH Scatternets,
Bluetooth v1.2 kompatibel
• Chipcon CC1000 Low-Power Funk-Subsystem, ISM Band (433 - 915 MHz)
• ISP, UART, SPI, I2C, GPIO, ADC Schnittstellen
18
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
Abbildung 3.1: Aufbau der BTnode [1]
• Stromversorgung entweder durch 2 AA Batterien oder Gleichstrom Anschluss von
3,6 bis 5,0 V
Abbildung 3.1 gibt einen Überblick über den Aufbau der BTnode.
Die BTnode System-Software ist ein einfaches Betriebssystem, aufgebaut aus interrupt-gesteuerten low-level Treibern und einem einfachen Dispatcher/Scheduler, um multiple Threads behandeln zu können. Dieses Betriebssystem ist gut geeignet für Anwendungen solch kleiner Netzwerkgeräte, die größtenteils aus einfachen Input/Output und
Überwachungsanwendungen bestehen. Es gibt hier zwei Programmiermodelle: Ein sequenzielles Modell und ein Event-basiertes Modell mit kooperativem Multitasking. Es
gibt daher auch verschiedene System-Software für beide Modelle. Das sequenzielle Modell
erlaubt zwar die genaue Kontrolle aller Ressourcen, führt aber zu erhöhtem Aufwand bei
der Anwendungs-Programmierung. Dagegen bietet das Event-basierte Modell komfortable Funktionen für das Ressourcen-Management, jedoch nur eingeschränkten Zugriff auf
die Hardware Ressourcen.
Unterstützt werden die opensource BTnut System-Software und die Standard C Programmierung. BTnodes sind TinyOS kompatibel und unterstützen die AVR-GCC Tool
Chain unter Windows/Linux/MacOS. Nut/OS ist ein bewusst einfach gehaltenes EchtzeitBetriebssystem für kleine eingebettete Systeme die auf dem Atmel ATmega 128 Mikrokontroller basieren. Es stellt die wichtigsten Funktionen des Nut/Net TCP/IP Stacks
zur Verfügung:
• Kooperatives Multithreading
• Events
• Periodische und One-Shot Timer
• Dynamische Speicherverwaltung
19
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
• Interruptgesteuertes Stream I/O
Die Eigenschaften des TCP/IP Stacks sind:
• Basisprotokolle ARP, IP, ICMP, UDP und TCP
• Benutzerdefinierte Protokolle DHCP, DNS und HTTP
• Socket API
• Host, Net und default Routing
• Interrupt-Gesteuerter Ethernet-Treiber
NUT/OS ist modular aufgebaut, so dass nur die Module im finalen Kernel-Image zu
finden sind, die auch tatsächlich benötigt werden. Dies hat zur Folge, dass das Image
des NUT/OS sehr klein ist. Dies ist wünschenswert, da eingebettete Systeme über eingeschränkte Speicherkapazitäten verfügen. NUT/OS unterstützt kooperatives Multithreading, dadurch wird das Scheduling vereinfacht. Der aktive Prozess gibt die Kontrolle an
die CPU ab, sobald er z.B. auf Ressourcen warten muss.
BTNUT/OS erweitert das herkömmliche NUT/OS Betriebssystem um BTnode-spezifische Treiber und einen Bluetooth-Stack. BTNUT/OS besteht aus dem Systemkern,
einer Reihe von Bibliotheken, Include-Dateien und einer API-Dokumentation (Application Programming Interface).
Die Kommunikation mit dem BTnode soll über ein Terminalprogramm erfolgen. Terminalprogramme dienen vorzugsweise dem Aufbau und der Abwicklung von Datenverbindungen über Modem. Im einfachsten Fall kann man mit ihrer Hilfe aber den PC auch
nur in ein dummes“ Terminal verwandeln und über seine seriellen PC-Schnittstellen
”
(COM-Ports) kommunizieren. So lassen sich z.B. die von dem BTnode ausgesandten
Daten überwachen oder der interne Zustand einer BTNode ermitteln und kontrollieren.
Zum Lieferumfang von WINDOWS gehört das Terminalprogramm Hyper Terminal“.
”
Mit seiner Hilfe lassen sich vielfältige Steuerungs- und Überwachungsaufgaben realisieren. Im Folgenden soll das Einrichten dieses Programms an einem Beispiel erläutert
werden. Zuerst muss es aber gefunden werden. Abb. 3.2 zeigt den Weg zum Auffinden
des von Microsoft etwas versteckten Terminal-Programms.
Nach dem Programmstart wird man zur Namenseingabe für eine neue Verbindung
aufgefordert (Abb.3.3). Nennen wir beispielsweise die Verbindung: BTNodes“. Der Na”
me hat dabei keinerlei Einfluss auf die tatsächlich benutzten Betriebsparameter.
Im Feld Verbinden über:“ wird der COM-Port angegeben (Abb.3.4), an dem der
”
BTNode angeschlossen wurde, z.B. COM1. Für Direktverbindungen über COM-Ports
20
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
Abbildung 3.2: Lokalisierung des Hyper-Terminal-Programms“
”
Abbildung 3.3: Connection-Menu
Abbildung 3.4: Com-Port-Eingabe
21
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
sind hier die anderen Eingaben nicht erforderlich.
Sehr wichtig sind die Anschlusseinstellungen (Abb.3.5). Dabei ist vor allem auf die
Einstellung der richtigen Datenrate (hier: 57600 Bit pro Sekunde) und des richtigen
Protokoll-Modus (hier: None, Abb. 3.5) zu achten.
Wird im Feld Protokoll“ etwas anderes als None“ gewählt, so kann es sein, dass vom
”
”
Programm auf ein ggf. nicht vorhandenes Freigabesignal zur Datenaussendung gewartet
wird und eingegebene Zeichen daher nicht ausgesandt werden.
Abbildung 3.5: COM-Properties-Menu
Der Suchassistent oder Research Agent“
”
In Abbildung 3.6 ist die Inquiry Prozedur“ dargestellt. Bevor ein Bluetooth-Gerät eine
”
Verbindung zu einem anderen Gerät aufbauen kann, muss es zunächst feststellen, ob sich
ein BT-Gerät in seiner Kommunikationsreichweite befindet. Sobald also ein Bluetoothfähiges Gerät aktiviert wird, sendet dieses Suchsignale aus, um weitere Netzknoten zu
finden. Dieses Gerät übernimmt hier die Rolle eines Suchassistenten (Research Agent).
Dies geschieht mittels der Inquiry Prozedur (dt. Erkundigung, Anfrage). Der Inquiry
Befehl ist die einzige broadcast-ähnliche Funktion im Bluetooth-Standard, die die Suche
nach Bluetooth-Geräten in der Umgebung ermöglicht. Hierbei sendet das Gerät periodisch ID-Pakete aus, die einen so genannten Inquiry Access Code (IAC) enthalten und
signalisiert den anderen Stationen damit, dass nach ihnen gesucht wird. Das ID-Paket
enthält keine Informationen über die sendende Quelle, wodurch die Anonymität gewahrt
wird.
Die ID-Pakete werden nacheinander auf verschiedenen Frequenzen gesendet. Dabei
werden die Frequenzen 3200-mal in der Sekunde gewechselt, um in kürzester Zeit so
viel Frequenzen wie möglich abzudecken und damit schnell Bluetooth-fähige Geräte zu
entdecken. Als Initiator dieser Verbindung übernimmt dieses Gerät die Rolle des Masters.
22
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
Abbildung 3.6: Inquiry Prozedur
Die Gegenseite (inquiry scanning device), also der Slave, wechselt die Frequenzen im
Vergleich zum Master nur alle 1,28 Sekunden und somit langsamer. Diese unterschiedlichen Geschwindigkeiten im Frequenzwechsel führen dazu, dass sich früher oder später
beide Geräte auf derselben Frequenz befinden. Das Inquiry-scannende Gerät kann sich
nicht nur auf einer festen Frequenz befinden, da durch Interferenzen der Umgebung oder
durch andere Sender im ISM Band (z.B. WLAN) diese Frequenz gestört werden kann.
Auf die Inquiry-Nachricht antwortet der Slave mit einem Frequency Hopping Syn”
chronisation“ Paket. Das Antwortpaket enthält die Informationen wie die Bluetooth
MAC-Adresse, sowie Informationen über den aktuellen Wert der Systemuhr und die
Stärke des empfangenen Inquiry Signals. Die MAC-Adresse ist die eindeutige Kennung des Gerätes und wird für die Identifizierung der Kommunikationspartner benötigt.
Zusätzlich kann man einem Gerät auch einen Klartextnamen zuweisen.
Nach dem Inquiry erfolgt eine Page-Prozedur, die eine Verbindung zwischen dem Master und dem Slave aufbaut. Befinden sich zwei Geräte bereits in einem Piconetz, so
entfällt die Inquiry-Prozedur.
Einführung in die Entwicklungsumgebung
Allgemeines
Als integrierte Entwicklungsumgebung wird Eclipse verwendet. Der Source-Code wird
mit dem GNU-AVR-Compiler für die Zielarchitektur, die Atmega128 RISC-CPU, kompiliert. Den GNU-AVR-Compiler nennt man Cross Compiler“, da das Kompilieren auf
”
dem Windows Host-Rechner und nicht auf der Zielarchitektur stattfindet. Im Rahmen
der nächsten Aufgaben werden Funktionen zum Steuern der LEDs sowie zur Ein- und
23
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
Ausgabe über GPIO Pins bearbeitet. Fertig kompilierte Programme werden dann mit
Hilfe des Bootloaders über die serielle Schnittstelle auf die BTnode geladen.
WinAVR und avr-gcc
Für das Kompilieren der Programme stehen die Compiler avr-gcc und WinAVR zur
Verfügung. avr-gcc ist ein freier C-Compiler, mit dem man C-Code in ausführbare Programme übersetzen kann, die auf Mikrokontrollern der AVR-Familie lauffähig sind. An
Sprachen versteht avr-gcc sowohl C, GNU-C als auch C++. Da die Praktikumsaufgaben
auf einem Windows-Rechner bearbeitet werden, wird WinAVR benutzt. WinAVR ist
die Windows-Distribution des C-Compilers avr-gcc für AVR-Mikrokontroller. WinAVR
enthält neben dem Compiler noch einige andere Pakete, z.B. die C-Standardbibliothek
avr-libc (inkl. Dokumentation).
Der WinAVR Compiler kann aus der Windows Command Shell gestartet werden. Diese wird mit dem Befehl cmd aus dem Start → Run Menu aufgerufen. Für die Lösung
der Aufgaben empfiehlt es sich allerdings, den WinAVR nicht direkt aufzurufen sondern
Makefiles zu benutzen. Das Makefile dient allgemein zur Aktualisierung und Regenerierung von miteinander in Beziehung stehenden Dateien. Der Grundgedanke dabei ist,
dass gewisse Dateien in Abhängigkeit zu anderen Dateien stehen. So hängen beispielsweise Objektdateien von Ihren jeweiligen Quellcode und Headerdateien ab.
Ändert man jetzt eine Datei, so kann es passieren, dass dadurch wiederum andere
Dateien sich ändern und neu compiliert werden müssen. Damit man sich darum nicht
kümmern muss kann man einfach ein Makefile benutzten. Darin stehen dann die ganzen
Kommandos und Optionen für den Compiler. In dem Installationsverzeichnis von WinAVR findet sich in dem Ordner /sample ein Beispiel Makefile. Dies kann man für seine
Zwecke anpassen. Mehr Informationen können unter [8] gefunden werden.
Bootloader
Das fertig kompilierte Programm wird mittels Bootloader auf die BTnode über den Port
com1 geladen. Der dazu benötigte Befehl wird im Windows Eingabeaufforderung-Fenster
(Command Shell) eingegeben und sieht wie folgt aus:
bootld -port com1 fprogram program name
Hilfreiche Links
http://oss.kernelconcepts.de/nutos/
http://www.btnode.ethz.ch/
http://www.btnode.ethz.ch/static docs/doxygen/btnut/
http://ethernut.de/en/software/index.html
http://e-collection.ethbib.ethz.ch/ecol-pool/incoll/incoll 869.pdf
24
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
3.1.2 Anleitung A2 - Gruppe B
Einführung in das Mobiltelefon
Die Grundlage für die mobile Telefonie ist auf der einen Seite das zellulare Kommu”
nikationsnetz“, auf der anderen Seite sind es die mobilen Telefone. Das zellulare Kommunikationsnetz bzw. Mobilfunknetz besteht aus einzelnen Zellen, wobei in etwa deren
geographische Mitte eine Basisstation“, d.h. ein Sende/Empfangsmast (Transceiver)
”
steht.
In Deutschland werden Mobilfunknetze der zweiten und dritten Generation betrieben. Dabei sind die Netze der zweiten Generation (2G) zwar prinzipiell datenfähig,
aber noch sehr auf Sprachübertragung optimiert. Der wichtigste 2G-Standard ist GSM,
technisch auch CSD (Circuit Switch Data) genannt. Die Einführung der dritten Generation (3G) erfolgt schrittweise, indem zunächst mit dem Standard GPRS eine Zwischengeneration ( 2.5G-Netze“) geschaffen wird. Dabei wird das Mobilvermittlungsnetz
”
um die Fähigkeit zur paketorientierten Datenübertragung erweitert, das Funknetz jedoch nicht verändert. Die Einführung datenoptimierter 3G-Netze schließlich zielt auf
Erhöhung der Datenübertragungsraten und beseitigt außerdem Kapazitätsprobleme bei
der Sprachübertragung. Erweiterte Funktionalitäten, etwa im Bereich Multimedia, folgen mit dem Ausbau der 3G-Netze. Der wichtigste 3G-Standard ist UMTS.
Immer mehr von den mobilen Endgeräten in zellularen Funktnetzen sind sog. Smartphones, die den Leistungsumfang eines Mobiltelefons mit dem eines PDAs vereinen. Die
meistbenutzten Betriebssysteme in Smartphones sind Symbian OS, Palm OS (entwickelt
von PalmSource), Windows Mobile (Erweiterung von Windows CE, das für PocketPC
entworfen wurde) und Linux. Neuerdings sollten noch Apples OS X (iPhone) und Googles Android erwähnt werden.
Aufbau des Mobiltelefons
Die Grundstruktur eines Mobiltelefons besteht aus einem Lautsprecher, einem Mikrofon, einem Bedienteil (Tastatur und Anzeige) und einer Steuerung (enthält meist einen
Mikrokontroller, Abb.: 3.7). Die Displays sind heutzutage bereits kleine Computerbildschirme. Zusätzlich hat es einen Funkteil (Sendeempfänger und Antenne) und eine eigene
Stromversorgung (meist einen Akkumulator). Das im Praktikum verwendete Mobiltelefon Sony Ericsson K550i verwendet als Betriebssystem eine Eigenentwicklung des Herstellers, aber Sie dürfen auch gern auf ihre eigenen Mobiltelefone zurückgreifen. Wie alle
Geräte mit integriertem Prozessor ist auch ein Mobilfunktelefon nicht frei von Softwarefehlern. Bislang sind einige wenige Handyviren für Symbian-basierte Geräte bekannt,
die Anzahl wird aber steigen.
Im Rahmen zunehmender Integration mobiler Geräte (Mobiltelefone, PDAs, Smartphones, Notebooks) stellt Bluetooth eine bequeme und flexible Möglichkeit, Geräte untereinander zu vernetzen, dar. Werden einige wenige mobile Endgeräte miteinander ver-
25
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
netzt, so spricht man von einem Personal Area Network (PAN). Speziell im Mobiltelefonsektor konnte sich Bluetooth bei der Verwendung von drahtlosen Headsets etablieren.
Darüber hinaus ermöglicht Bluetooth einfachen und schnellen Datenaustausch zwischen
zwei Mobiltelefonen. Im Gegensatz zu IrDA (Infrared Data Association) ist auch kein
Sichtkontakt der beiden Geräte notwendig. Die Anwendung von Bluetooth zielt darauf
ab, Geräte dynamisch und jederzeit miteinander zu vernetzen, um Informationen auszutauschen (pervasive computing).
Die Nutzung von Bluetooth ist allerdings nicht gefahrlos, da Authentifizierungs- und
Datenübertragungs-Mechanismen des aktuellen Protokolls Sicherheitslücken aufweisen.
Es besteht die Möglichkeit, sich anonym und ohne Wissen des Besitzers mit einem Bluetooth Gerät zu verbinden und vertrauliche Daten auszulesen. Diese Daten beinhalten das
Telefonbuch, die Kalendereinträge und die IMEI (International Mobile Equipment Identity). Dieser Angriff ist unter dem Namen SNARF attack bekannt, der genaue Vorgang
wird aus Sicherheitsgründen von den Herstellern jedoch nicht erläutert. Desweiteren besteht die Möglichkeit, mit einem ehemals als vertrauenswürdig eingestuften Gerät auf
sämtliche Daten zuzugreifen, auch wenn dieses Gerät aus der Liste der paired Geräte“
”
entfernt wurde. Dieser als Backdoor attack“ bekannte Angriff erlaubt nicht nur das
”
Auslesen von Daten, sondern auch die Nutzung von bereitgestellten Diensten. Außerdem kann der vollständige AT-Befehlssatz (Befehle für Modems) genutzt werden, indem
eine Verbindung mit seriellem Profil aufgebaut wird.
Abbildung 3.7: Aufbau eines Mobiltelefons
Aus den oben genannten Gründen empfiehlt es sich, Bluetooth nur bei Bedarf einzu-
26
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
schalten oder sich zumindest für andere unsichtbar zu machen. Unerwartete BluetoothNachrichten sollten einfach abgewiesen werden.
Fast alle neueren Mobiltelefone enthalten einen Interpreter für die Programmiersprache Java in einer Minimalausgabe (Mobile Information Device Profile, MIDP), die aber
die wesentlichen Funktionen von Java enthält.
Der Suchassistent oder Research Agent“ in einem drahtlosen Bluetooth-Netzwerk
”
Netzwerk
In drahtlosen Sensor/Aktor-Netzwerken muss ein mobiler Knoten, der in ein bestehendes Netz eindringt, zunächst nach BT-Geräten in der Umgebung, d.h. im erreichbaren
Sende/Empfangsbereich suchen, um sich in das Netz zu integrieren (Inquiry). Nach der
Integration kann der mobile Knoten auf den gefundenen BT-Geräten nach gewünschten
Dienstleistungen(Services) suchen und diese anfordern.
In Abbildung 3.6 ist die Inquiry Prozedur“ dargestellt. Die Beschreibung dazu finden
”
Sie in Abschnitt 3.1.1.
Einführung in die Entwicklungsumgebungen
Allgemeines
In dieser Aufgabe lernen wir die Entwicklungsumgebung des Java Micro Edition SDK
(Software Development Kit) 3.0 kennen, wobei es sich um eine etwas modifizierte Netbeans Version handelt, die speziell für Handy-Entwicklungen angepasst wurde. Zudem
gibt es eine Einführung in die MIDlet bzw. Bluetooth-Programmierung. Es wird empfohlen mit dem Java ME SDK zu entwickeln, da es bereits alle benötigten Hilfsmittel zur
Verfügung stellt und die Arbeit erleichtert. Alternativ könnten auch Netbeans, Eclipse
oder ähnliche Software Development Tools verwendet werden.
Java ME SDK 3.0
Das Java ME SDK (Fig. 3.8) basiert auf Netbeans und ist somit eine Entwicklungsumgebung, die komplett in der Programmiersprache Java geschrieben ist. NetBeans wurde
für Java entwickelt, es werden aber auch Sprachen wie C, C++, Ruby und Fortran unterstützt. Die Architektur der Software ist vollständig modular aufgebaut und durch so
genannte Module bzw. Plugins erweiterbar. Zusätzlich gibt es so genannte Packs, welche
die IDE (Integrated Development Environment) um größere Funktionspakete erweitern.
Schwerpunkte bei der Entwicklung von NetBeans bildeten Funktionen, die den Entwickler produktiver machen [5]. Sun Microsystems gründete das NetBeans-Open-SourceProjekt im Juni 2000 und ist dessen Hauptsponsor. NetBeans enthält u.a. einen Editor, Debugger, GUI-Builder, kann für alle Java Editionen und fast alle BetriebssystemPlattformen verwendet werden. Erst später entwickelte sich als Ableger davon das Java
27
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
ME SDK, womit NetBeans und dass bis dato übliche Java Wireless Toolkit vereint wurden und man nur noch diese eine Software benötigt. [7]
Zu Empfehlen ist das Durcharbeiten eines passenden Tutorials. Beispielprojekte sind
auf der Start Page des JME SDK oder im Internet zu finden.
Abbildung 3.8: Entwicklungsumgebung Java ME SDK
Der größte Vorteil ist der mitgelieferte Emulator (Fig. 3.9), mit dem mobile Endgeräte
verschiedener Typen emuliert werden können und somit der Testprozess teils deutlich
vereinfacht wird. Die Anwendungsspezifischen Details können somit sauber ausgearbeitet werden, die Kommunikation mit den Remote-Knoten muss selbstverständlich extra
getestet werden, mit der echten Hardware. Zum Testen eines Programms klicken Sie einfach nach dem Kompilieren auf Run. Es öffnet sich ein neues Fenster mit einem Handy,
welches Sie per Maus bedienen können.
Abbildung 3.9: Der Emulator des JME SDK
Um Ihr Programm auf das Handy zu laden, gehen Sie auf Project -> Package ->
28
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
Create Package. Sie finden dann im bin\ Unterordner ihres Projekts ein jar-File, welches
Sie z.B. per Bluetooth auf das Handy laden können.
Für eine erste Einführung in die MIDlet-Programmierung verwenden sie am besten
Getting Started aus den JME SDK Optionen, oder Tutorials aus dem Internet. Interessante Punkte sind:
• Using Sample Projects
• Creating and Editing Projects
• Running Projects in the Emulator
Anhand der mitgelieferten Beispielprojekte sind die Grundlagen der MIDlet Programmierung gut nachvollziehbar. Anschließend sollen Sie sich mit der Bluetooth-Funktionalität
und den zugehörigen Bibliotheken vertraut machen und diese mittels eines MIDlets auf
dem Mobiltelefon realisieren. Ihre Applikation soll in der Lage sein per Bluetooth mit
dem Host und den BTNodes zu kommunizieren und die dort angebotenen Dienste abzufragen und zu nutzen.
MIDlet Debugging
Es gibt verschiedene Möglichkeiten MIDlet Software zu debuggen. Die gängigste Variante ist direktes Debugging der Simulation aus der Entwicklungsumgebung heraus.
Aber Sony Ericsson Geräte unterstützen zusätzlich ein On-Device-Debugging [2]. Diese Variante lohnt sich aber hauptsächlich wenn Geräte-spezifische Probleme auftauchen. Im übrigen sollten füer unsere Zwecke das Debuggen mit dem JME SDK und
system.out.println(<txt>)-Ausgaben genügen.
Hilfreiche Links
http://www.bluetooth.com
www.thebunker.net/security/bluetooth.htm
Sauter, Martin; Grundkurs Mobile Kommunikationssysteme, Vieweg, 2004
http://java.sun.com/javame/reference/apis.jsp
http://java.sun.com/javame/reference/apis/jsr082/
http://java.sun.com/javame/downloads/index.jsp hier finden Sie das JME SDK
Special Interest Group: Specification of the bluetooth system - wireless connections made
http://wireless.klings.org/klings jabwt master thesis.pdf
http://www.netbeans.org/kb/55/quickstart-mobility.html
www.google.de → netbeans on device debug tutorial inurl:sonyericsson
29
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
3.1.3 Anleitung A2 - Gruppe C
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:
1. Identifikationsnummer des Remote-Host
2. Portnummer des Remote-Host
3. Identifikationsnummer des Local-Host
4. Portnummer des Local-Host
Diese Informationen sind allerdings vom verwendeten Protokoll abhängig, so ist die
Adress-Information 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 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 "offnen
InputStream input
= clientSocket.getInputStream();
30
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
//Daten lesen
int data
= input.read();
//Verbindung schließen
clientSocket.close();
}
Java Bluetooth Development Kits
Zur Entwicklung von Bluetooth-Anwendungen gibt es Java Development Kits, welche
die Arbeit vereinfachen sollen. Dabei wird zwischen drei Arten von Development Kits
unterschieden.
1. 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.
2. 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 AvetanaBT. AvetanaBT unterstützt javax.bluetooth. Weitere SWDevelopment Kits sind BlueCove, Atinav, Harald, Rococo.
3. 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
In der Vergangenheit konnten mit Linux Ubuntu und Windows XP sehr gute Ergebnissee erzielt werden. In der Linux-Umgebung kann die JSR82-Implementierung von
AvetanaBT [10] oder die erweiterte Version für Linux von BlueCove [11] verwendet werden. Hier muss der Bluetooth-Stack BlueZ installiert sein. Für die Programmierung in
der Windows-Umgebung (oder Mac OS X) bietet sich die JSR82- Implementierung BlueCove [11] an, die auf dem bereits installierten Bluetooth Stack von Windows bzw. Mac
OS X arbeitet.
Als Entwicklungsumgebung wird Eclipse empfohlen [3]. Hier muss ein neues JavaProjekt angelegt werden. Es muss die jeweilige Bibliothek ins Projekt eingebunden werden (über RechteMaustaste auf Projekt → BuildPath → Configure Build Path → Add
External Jars).
Machen Sie sich auch mit der Java JSR 82 API vertraut [9].
31
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
Bluez Protokoll-Stack
BlueZ [6] ist der offizielle Bluetooth-Stack für Linux und kann unter http://www.bluez.org
heruntergeladen werden. Er besitzt folgende Eigenschaften:
1. Flexible, effiziente und modulare Architektur
2. Unterstützung für mehrere Bluetooth Geräte
3. Hardwareabstraktion
4. Standard Socketinterface zu allen Protokollschichten
Für aktuelle Informationen über BlueZ und den Protokollstack (Vers. 4.56):
http://www.bluez.org/about/.
Installation
Der Bluez Stack wird in der Version 4.56 als bluez-4.56.tar.gz zur Verfügung gestellt.
(http://www.bluez.org/download/).
Zur Installation halten Sie sich bitte an die Beschreibung in der README-Datei.
Achten Sie auch darauf, dass Sie alle notwendigen Packages, die in der README-Datei
stehen mit dem Synaptic Package Manager installiert haben (Terminal → sudo synaptic
→ Packages suchen und installieren).
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.
Bei Fragen bitte rechtzeitig an den Betreuer wenden!
32
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
3.2 Aufgabe 2
3.2.1 Gruppe A
Allgemeines In dieser Aufgabe lernen Sie die Entwicklungsumgebung der BTnode kennen. Zudem führen Sie eine Inquiry“ (s. Anleitung) über eine Bluetooth-Verbindung
”
aus.
• Als Editor empfehlen wir den Eclipse-Editor.
• Besorgen Sie sich eine BTnode-Hardware von ihrem Betreuer mit Zubehör (Übungsplatine, Ladekabel, Akkus).
• Zum “Laden der Programme auf den BTNode Mikrokontroller brauchen Sie das
”
Programm bootloader. Dieses Programm befindet Sie im SVN-Odner Zubehör.
Beispielprogramm Hello World
Laden Sie sich bei http://btnode.ethz.ch folgendes Softwarepaket herunter:
btnut snap btnode3 binary 1.8.tar.gz
• Finden Sie das Beispielprogramm hello-world und die entsprechende Make le- Datei
im btnut-Softwarepaket
• Kopieren Sie diese Dateien in den Ordner in dem Sie kompilieren wollen.
• Passen Sie die Pfade im Make le an, so dass das Btnut-Wurzelverzeichnis von make
erkannt wird.
• Öffnen Sie die Kommandozeile und kompilieren Sie das hello-world Programm mit
WINAVR. Verwenden Sie die folgenden Parameter: make btnode3
• Laden Sie die Object-Datei in die BTnode und führen Sie sie aus. Folgen Sie dabei
der Anleitung für das Laden
• Verwenden Sie das Hyper-Terminal“ (siehe Anleitung), um den hello-World-String
”
anzuzeigen. Führen Sie Ihr Hello World“-Programm ihrem Betreuer vor.
”
Inquiry:
• Schreiben Sie ein Programm, das ein Inquiry abschickt.
• Erkennen Sie aus den gefundenen Geräten das MT an der MAC-Adresse.
33
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
Fragen:
Lesen Sie die Anleitung für die Gruppe A.
1. Was ist NUT/OS? Welche Erweiterung von NUT/OS führt zur Variante BTNUT/OS?
2. NUT/OS hat mehrere Charakteristika, die in modernen eingebetteten Systemen
erwünscht sind. Erklären Sie die in NUT/OS verwendeten folgenden Konzepte:
a) NUT/OS implementiert ein kooperatives Multithread Schema. Was bedeutet
das? Was ist der Unterschied zum ”preemptive Multithread”?
b) NUT/OS ist Event-orientiert. Erklären Sie diesen Aspekt!
3. Erklären Sie anhand des Blockschaltbilds den Hardware-Aufbau der BTnodes.
4. Für welche Anwendungen kann die BTnode eingesetzt werden?
5. Über welche Schnittstelle und in welchen Speicher wird das BTnode Programm
geladen?
6. Verständnisfragen BTnode:
a) Welchen Prozessortyp enthält der BTnode?
b) Welche Vor- und Nachteile hat dieser gegenüber anderen Prozessoren?
c) Was sind External Interfaces“ wie ISP, UART, SPI, I2C und GPIO? Wel”
chem Zweck dienen sie?
d) Wie ist die Baudrate definiert? Was sagt die Baudrate über eine serielle Verbindung aus?
e) Wie kann ein BTnode-Programm mit Hilfe eines PC debugged werden, d.
h. wie können Rückmeldungen aus einem solchen Programm auf einem PC
angezeigt werden?
3.2.2 Gemeinsame Fragen für die Gruppen B und C
Zur Beantwortung der folgenden Fragen ziehen Sie das Buch Bluetooth Application
”
Programming With JAVA API“ zu Rate:
1. Lesen Sie Kapitel 6.1 und 6.2
2. Fragen zu Kapitel 6.3.1:
a) Wozu dient der Aufruf LocalDevice.getLocalDevice()?
Was ist der Rückgabewert?
Welche Exceptions sind möglich?
b) Nennen sie mindestens 3 weitere Methoden der Klasse LocalDevice.
c) Beschreiben sie die Methode getDiscoveryAgent().
34
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
3. Fragen zu Kapitel 6.3.2 (DiscoveryListener)
a) Welches Interface ist notwendig, um ein Inquiry durchzuführen?
Welche Methoden müssen dafür implementiert werden? Was sind die Aufgaben dieser Methoden?
b) Welche Methode führt schlussendlich die Inquiry durch? Was sind die Argumente und die möglichen Rückgabewerte? Welche Aussagen haben die verschiedenen Rückgabewerte? Was für Exception kann diese Methode werden?
3.2.3 Gruppe B
1. In dieser Aufgabe lernen Sie das Java ME SDK 3.0“ als integrierte Entwicklungs”
umgebung für die Programmierung des Mobiltelefons kennen. Zudem sollen Sie ein
Inquiry“ aussenden und die Ergebnisse auf dem MT-Bildschirm anzeigen. Für die
”
Gruppe B ist der Praktikumsrechner Nr. 2 bestimmt. Sie können natürlich auch
Ihren eigenen PC verwenden.
2. Installieren und Starten sie das Java Micro Edition SDK und schauen Sie sich die
Getting Started Section an. Das JME SDK finden sie Gratis auf den Seiten von
Sun, ein Link ist in der zugehörigen Anleitung hinterlegt.
3. Führen Sie einige Application-Demos, z.B.: die Audio-Demo, etc. mit dem Emulator durch.
4. Schauen Sie sich im Source-Verzeichnis der Bluetooth-Demo die einzelnen Dateien
an. Sie stellen die Klassen des Bluetooth-Midlets dar. Wir empfehlen Ihnen eine
ähnliche Klasseneinteilung für Ihre Programm-Implementierung SE-Midlet“ zu
”
wählen.
5. Schreiben Sie ein kleines Hallo Nachbar“-Programm und simulieren Sie es mit
”
dem Emulator. Führen Sie die Simulation ihrem Betreuer vor.
Fragen
1. Informieren Sie sich über Symbian-OS! Welches ist die neueste Version? Beschreiben Sie die Haupt-Eigenschaften dieses Betriebssystems!
2. Welche Compiler gibt es für Symbian-OS?
3. Warum wird Bluetooth in Mobiltelefonen eingesetzt?
4. Welche Gefahren sehen Sie in der Nutzung von Bluetooth und wie kann man sie
ver-meiden?
5. Beantworten Sie die gemeinsamen Fragen für die Gruppen B und C“, Abschnitt
”
3.2.2.
35
Programmierprojekt Sommersemester 2010
Uni Tübingen, Arbeitsbereich Technische Informatik
Abbildung 3.10: Beispielprogramm für die Ausgabe aller sich in der Umgebung befinden
Bluetooth-Geräte.
3.2.4 Gruppe C
1. Beantworten Sie die gemeinsamen Fragen für die Gruppen B und C“, Abschnitt
”
3.2.2.
2. Wenn Sie sich für Linux entscheiden, dann installieren Sie den offiziellen Bluetooth
Stack BlueZ.
3. Laden Sie die passende JSR-82 Implementierung herunter. AvetanaBT oder Bluecove (mit GPL) für Linux, Bluecove für Windows bzw. Mac OS X.
4. Erstellen Sie ein neues Projekt und binden Sie die jeweilige Bibliothek ein.
5. Programmieren Sie ein kleines Programm mit GUI (siehe Abbildung 3.10). Auf
Knopfdruck soll ein Inquiry durchgeführt und die gefundenen Geräte in einem
Feld ausgegeben werden.
36
Literaturverzeichnis
[1] Btnodes - a distributed environment for prototyping ad hoc networks.
http://www.btnode.ethz.ch/BTnodes.
[2] Sony Ericsson.
On-device-debugging tutorial for netbeans.
http:
//developer.sonyericsson.com/site/global/newsandevents/latestnews/
newssept06/p_getstarted_ondevice_debugging_netbeans_tutorial.jsp.
[3] The Eclipse Foundation. Eclipse - open development platform. http://eclipse.
org/.
[4] Sun Microsystems. Java wireless toolkit 2.5 for cldc release. http://java.sun.
com/products/sjwtoolkit/download-2_5.html.
[5] Sun Microsystems. Netbeans ide. http://www.netbeans.org.
[6] BlueZ Project. Bluez - official linux bluetooth protocol stack. http://www.bluez.
org.
[7] Martin Sauter. Grundkurs Mobile Kommunikationssysteme. Vieweg Verlag, 2004.
[8] Open Source.
Winavr user manual.
WinAVR-user-manual.html.
http://winavr.sourceforge.net/
[9] Inc. Sun Microsystems. Jsr 82 bluetooth api and obex api. http://java.sun.com/
javame/reference/apis/jsr082/.
[10] AvetanaBT Team. Avetanabt - java library for bluetooth (jsr-82).
sourceforge.net/projects/avetanabt/.
[11] BlueCove Team. Bluecove - java library for bluetooth (jsr-82).
37
http://