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://