ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΜΕΛΕΤΗ ΑΠΟΔΟΣΗΣ ΤΟΥ ΠΡΟΤΥΠΟΥ BLUETOOTH V2 ΜΕΣΩ ΤΗΣ ΚΑΤΑΣΚΕΥΗΣ ΕΦΑΡΜΟΓΙΔΙΟΥ ΓΙΑ ΚΙΝΗΤΑ ΤΗΛΕΦΩΝΑ ΜΕ ΧΡΗΣΗ ΤΗΣ ΠΛΑΤΦΟΡΜΑΣ JAVA 2 MICRO EDITION (J2ME) Συγγραφή: Αργυρίδης Κυριάκος Επιβλέπων: Αναπληρωτής Καθηγητής Παπαδημητρίου Γεώργιος 1
Πίνακας Περιεχομένων ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ... 2 1 ΕΙΣΑΓΩΓΗ... 5 2 J2ME ΚΑΙ ΥΠΟΔΟΜΗ... 7 2.1 ΤΙ ΕΙΝΑΙ Η J2ME?... 7 2.1.1 Διαμόρφωση (Configuration)... 9 2.1.2 Προφίλ... 12 2.1.3 Midlet... 14 2.1.4 Περιεχόμενο Midlet (Midlet Container)... 15 2.1.5 Το αρχείο JAR (Java Archive File)... 16 2.1.6 Το αρχείο JAD (Java Application Descriptor)... 17 2.1.7 Εικονική Μηχανή Κ (K Virtual Machine, KVM)... 17 2.2 ΥΠΟΔΟΜΗ... 18 2.2.1 Εργαλείο Ανάπτυξης Java (Java Development Kit)... 18 2.2.2 Ασύρματο Εργαλείο (Wireless Toolkit)... 19 2.2.3 Ολοκληρωμένο Περιβάλλον Ανάπτυξης (Intergraded Development Environment, IDE)... 19 3 Η ΣΤΟΙΒΑ ΠΡΩΤΟΚΟΛΛΩΝ ΤΟΥ BLUETOOTH... 20 3.1 OVERVIEW... 20 3.2 Η ΣΤΟΙΒΑ ΠΡΩΤΟΚΟΛΛΩΝ... 20 3.3 ΠΡΟΦΙΛ (PROFILES)... 22 3.4 ΤΟ ΚΑΝΑΛΙ ΡΑΔΙΟΕΠΙΚΟΙΝΩΝΙΑΣ ΤΟΥ ΠΡΟΤΥΠΟΥ BLUETOOTH... 24 3.5 ΜΕΤΑΠΗΔΗΣΗ ΣΥΧΝΟΤΗΤΑΣ(FREQUENCY HOPPING) ΣΤΟ BLUETOOTH... 24 3.6 ΜΙΚΡΟΔΙΚΤΥΑ (PICONETS) ΚΑΙ ΔΙΚΤΥΑ ΔΙΑΣΠΟΡΑΣ (SCATTERNETS)... 25 3.7 ΜΟΡΦΗ ΠΑΚΕΤΟΥ BLUETOOTH... 27 3.8 Η ΑΣΦΑΛΕΙΑ ΣΤΟ BLUETOOTH... 28 3.8.1 Πιστοποίηση (Authentication )... 28 3.8.2 Εξουσιοδότηση (Authorization)... 28 3.8.3 Κρυπτογράφηση (Encryption)... 29 3.9 ΣΥΣΤΑΤΙΚΑ BLUETOOTH... 29 3.9.1 Αρχικοποίηση Στοίβας... 29 3.9.2 Ανακάλυψη Συσκευής... 30 3.9.3 Διαχείριση Συσκευής... 30 3.9.4 Ανακάλυψη Υπηρεσιών... 31 3.9.5 Επικοινωνία... 31 2
4 ΠΕΡΙΟΡΙΣΜΟΙ ΣΥΣΚΕΥΗΣ ΚΑΙ ΣΧΕΔΙΑΣΗ... 33 4.1 ΠΕΡΙΟΡΙΣΜΟΙ ΣΥΣΚΕΥΗΣ... 33 4.1.1 Περιορισμός Οθόνης... 33 4.1.2 Περιορισμός Μνήμης... 33 4.1.3 Αλληλεπίδραση Χρήστη... 33 4.2 ΣΧΕΔΙΑΣΗ... 34 4.2.1 Bluetooth και Γενικό Πλαίσιο Σύνδεσης (Generic Connection Framework). 35 4.2.2 Απαιτήσεις... 37 Απαιτήσεις Εφαρμογής:... 37 4.2.3 Περιπτώσεις Χρήσης (Use Cases) Εφαρμογής... 39 4.2.4 Διαγράμματα Ακολουθίας (Sequence Diagrams) Εφαρμογής... 41 4.2.5 Διαγράμματα Κλάσεων... 44 5 ΥΛΟΠΟΙΗΣΗ ΕΦΑΡΜΟΓΗΣ... 47 5.1 ΕΙΣΑΓΩΓΗ... 47 5.2 ΤΟ ΓΡΑΦΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΧΡΗΣΗΣ (GUI)... 49 Το Γραφικό Περιβάλλον Χρήσης της συσκευής Server υλοποιείται με βάση τον κώδικα σε Java που ακολουθεί:... 49 5.3 ΥΛΟΠΟΙΗΣΗ ΣΥΝΔΕΣΗΣ BLUETOOTH ΓΙΑ SERVER/MASTER... 52 5.3.1 Δημιουργία Σύνδεσης... 52 5.3.2 Καταχώρηση Υπηρεσιών (Service Registration)... 53 5.3.3 Αποδοχή πακέτων δεδομένων στον Server από Client... 54 5.4 ΥΛΟΠΟΙΗΣΗ BLUETOOTH ΣΥΝΔΕΣΗΣ CLIENT/SLAVE... 56 5.4.1 Δημιουργία Σύνδεσης... 56 5.4.2 Ανεύρεση Συσκευής... 57 5.4.3 Ανακάλυψη Υπηρεσιών... 59 5.4.4 Ανάκτηση Δεδομένων από το ΑρχείοΥπηρεσιών (Service Record)... 61 5.5 ΥΛΟΠΟΙΗΣΗ ΑΛΓΟΡΙΘΜΟΥ ΠΑΡΑΓΩΓΗΣ/ΑΠΟΣΤΟΛΗΣ ΠΑΚΕΤΩΝ ΔΕΔΟΜΕΝΩΝ... 63 5.6 ΕΜΦΑΝΙΣΗ ΣΤΑΤΙΣΤΙΚΩΝ ΑΠΟΤΕΛΕΣΜΑΤΩΝ... 70 6 ΕΞΕΤΑΣΗ ΚΑΙ ΈΛΕΓΧΟΣ ΛΕΙΤΟΥΡΓΙΑΣ ΕΦΑΡΜΟΓΗΣ... 72 6.1 ΕΞΕΤΑΣΗ ΛΕΙΤΟΥΡΓΙΑΣ ΣΤΟ SONYERICSSON W800... 74 7 ΑΝΑΛΥΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΚΑΙ ΣΥΜΠΕΡΑΣΜΑΤΑ... 79 7.1 ΑΝΑΛΥΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ... 79 7.2 ΣΥΜΠΕΡΑΣΜΑΤΑ... 87 8 ΠΑΡΑΡΤΗΜΑ... 89 8.1 ΠΙΝΑΚΕΣ ΚΑΤΑΓΡΑΦΗΣ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΠΡΟΣΟΜΟΙΩΣΗΣ... 89 8.2 ΠΗΓΑΙΟΣ ΚΩΔΙΚΑΣ JAVA ΕΦΑΡΜΟΓΗΣ... 101 3
8.2.1 BT Server source code:... 101 8.2.2 BT Client Source Code:... 119 8.2.3 Support Source Code... 147 ΒΙΒΛΙΟΓΡΑΦΙΑ... 154 4
1 ΕΙΣΑΓΩΓΗ Μερικά χρόνια πριν, οι βιομηχανίες τηλεπικοινωνιών, αντιλήφθηκαν ότι μπορούν να αντικαταστήσουν το βασικό καλώδιο σύνδεσης χρησιμοποιώντας κάποιον ασύρματο σύνδεσμο που να ενώνει διαφορετικού τύπου ηλεκτρονικές συσκευές. Στα μέσα της δεκαετίας του 90, η Ericsson Mobile Communication άρχισε μία έρευνα με στόχο την επίτευξη του στόχου αυτού και έδωσε το όνομα Bluetooth στην τεχνολογία αυτή. Σκοπός ήταν η επίτευξη μίας σύνδεσης χαμηλής εμβέλειας, βασισμένης στην ραδιοεκμπομπή, (short-range radio based connection) μεταξύ μικρών περιφερειακών συσκευών, που θα εξυπηρετούσε στο διαμοιρασμό και ανταλλαγή δεδομένων. Τα κερδοσκοπικά κλειδιά που προσφέρει η τεχνολογία Bluetooth είναι το χαμηλό κόστος, η χαμηλή κατανάλωση ισχύος, η μεγαλύτερη διάρκεια μπαταρίας, η χαμηλή πολυπλοκότητα όπως και η peer-to-peer (P2P) συνδεσιμότητα. Ο βασικός στόχος της μελέτης αυτής είναι η ανάπτυξη και η υλοποίηση ενός εφαρμογιδίου που να υποστηρίζει ένα μοντέλο ανταλλαγής δεδομένων μεταξύ κινητών συσκευών, μέσω του οποίου θα προσπαθήσουμε να μελετήσουμε την απόδοση του προτύπου Bluetooth v2.0. Η εφαρμογή απαρτίζεται από δύο κύρια μέρη: α) Τον κόμβο Εξυπηρέτη (Sever node), ο οποίος θα λαμβάνει δεδομένα μέσα στο Μικροδίκτυο (Piconet) από β) τον κόμβο Πελάτη ο οποίος θα είναι ικανός να παράγει και να μεταδίδει (ασύρματα) δεδομένα, καθώς επίσης, μετά το πέρας της αποστολής δεδομένων, θα τυπώνει τα διάφορα στατιστικά αποτελέσματα αποστολής-λήψης. Με τη βοήθεια της πλατφόρμας Java 2 Micro Edition (J2ME) [1][7] κατάφερα να ολοκληρώσω το έργο αυτό και να υλοποιήσω την προσωπική μου εφαρμογή ανταλλαγής δεδομένων μέσω Bluetooth, την οποία εγκατάστησα στη συνέχεια σε κινητά τηλέφωνα για να μελετήσω την απόδοση του προτύπου. Η εκτέλεση της εφαρμογής διεξάγεται με προσομοίωση με συνδυασμό της πλατφόρμας Sun Java Wireless Toolkit 2.5.1 (WTK 2.5.1) [3] και του SonyEricsson Software Developer Kit (SDK) 2.2.4 [3] με τις ακόλουθες προδιαγραφές: 5
CLDC 1.0, CLDC 1.1, MIDP 1.0, MIDP 2.0, MMAPI (JSR 135), WMA 1.1 (JSR 120), WMA 2.0 (JSR 205), Mobile 3D Graphics (JSR 184), Bluetooth and OBEX (JSR 82), PDA Optional Package (JSR 75), Web Services for Java ME (JSR 172); Java ME Unified Emulator Interface (UEI), Advanced Multimedia Supplements (JSR 234). 6
2 J2ME και ΥΠΟΔΟΜΗ 2.1 Τι είναι η J2ME? Η πλατφόρμα Java 2 Micro Edition (J2ME) [1][7] είναι μία από τις τρεις υποκατηγορίες των γλωσσών προγραμματισμού Java 2, η οποία επιτρέπει την ανάπτυξη και εκτέλεση εφαρμογών και προγραμμάτων που αφορούν ασύρματες κινητές συσκευές περιορισμένων δυνατοτήτων, με περιορισμούς στη μνήμη, στο σύστημα αρχείων, στην επεξεργασία και αποθήκευση. Ακολουθεί μία γενική αρχιτεκτονική της J2ME: Η Αρχιτεκτονική J2ME: Επίπεδο Προφίλ (Profile Layer) Επίπεδο Διαμόρφωσης (Configuration Layer) Εικονική Μηχανή Java (Java Virtual Machine) Λειτουργικό Σύστημα Ξενιστή (Host Operating System) Εικόνα1. Αρχιτεκτονική J2ME 7
Επίπεδο Λειτουργικού Συστήματος Ξενιστή (Host Operating System Layer): Το επίπεδο αυτό αποτελεί το Λειτουργικό Σύστημα το οποίο παρέχει ένα ασφαλές και προστατευμένο περιβάλλον, πάνω στο οποίο η Εικονική Μηχανή Java ( Java Virtual Machine JVM ) μπορεί να τρέξει. Επίπεδο Εικονικής Μηχανής Java (Java Virtual Machine Layer): Το επίπεδο αυτό είναι η υλοποίηση μίας εικονικής μηχανής Java η οποία είναι προορισμένη για το λειτουργικό σύστημα ξενιστή μίας συγκεκριμένης συσκευής και υποστηρίζει μία συγκεκριμένη διαμόρφωση J2ME. Επίπεδο Διαμόρφωσης (Configuration Layer): Το επίπεδο Διαμόρφωσης καθορίζει το ελάχιστο σύνολο χαρακτηριστικών μίας Εικονικής Μηχανής Java όπως και τις βιβλιοθήκες που είναι διαθέσιμες για μία συγκεκριμένη κατηγορία συσκευών. Κατά έναν τρόπο, μία διαμόρφωση καθορίζει την κοινοτυπία των χαρακτηριστικών και των βιβλιοθηκών μίας πλατφόρμας Java, τα οποία οι κατασκευαστές μπορούν να υπολογίζουν ότι είναι διαθέσιμα για όλες τις συσκευές που ανήκουν σε μία συγκεκριμένη κατηγορία Το επίπεδο αυτό είναι λιγότερο ορατό στους χρήστες, αλλά και πολύ σημαντικό για τους κατασκευαστές προφίλ. Επίπεδο Προφίλ (Profile layer): Το επίπεδο Προφίλ καθορίζει το ελάχιστο σύνολο των Διεπαφών Προγραμματισμού Εφαρμογών, ΔΠΕ (Application Programming Interfaces, APIs) που είναι διαθέσιμα για μία συγκεκριμένη οικογένεια συσκευών. Τα προφίλ υλοποιούνται πάνω από συγκεκριμένη διαμόρφωση. Επίσης οι εφαρμογές δημιουργούνται για κάποιο συγκεκριμένο προφίλ και κατά συνέπεια είναι συμβατές για οποιαδήποτε συσκευή που υποστηρίζει το συγκεκριμένο προφίλ. Μία συσκευή μπορεί να υποστηρίζει πολλαπλά προφίλ. Το επίπεδο προφίλ είναι το επίπεδο που είναι περισσότερο ορατό στους χρήστες και στους παροχείς εφαρμογών. 8
2.1.1 Διαμόρφωση (Configuration) Η Sun έχει διαχωρίσει την Java 2 Micro Edition σε διαμορφώσεις ώστε να υποστηρίζεται μία μεγάλη ποικιλία διαφορετικών τύπων συσκευών. Οι διαμορφώσεις καθορίζουν τα χαρακτηριστικά της εικονικής μηχανής, τα χαρακτηριστικά της γλώσσας Java, όπως και τις κλάσεις του Java API για κάθε περιβάλλον διαμόρφωσης. Μία διαμόρφωση J2ME καθορίζει επίσης μία ελάχιστη πλατφόρμα για κάθε οικογένεια συσκευών με παραπλήσιες απαιτήσεις σε συνολικό ποσοστό μνήμης και επεξεργαστική δύναμη. Επίσης, μία διαμόρφωση πέρα από την γλώσσα Java και τα χαρακτηριστικά της εικονικής μηχανής, καθορίζει και τις βιβλιοθήκες που ένας κατασκευαστής συσκευών (που υποστηρίζονται από την J2ME) αναμένει να είναι διαθέσιμες σε όλες τις συσκευές που ανήκουν στην ίδια κλάση. Η διαμόρφωση είναι ένα περιβάλλον εκτέλεσης Java και απαρτίζεται από τρία κύρια συστατικά: Την Εικονική Μηχανή Java (Java Virtual Machine, JVM) για την εκτέλεση του κώδικα. Τον τοπικό κώδικα διεπαφής του υποκείμενου συστήματος. Το σύνολο των εκτελούμενων κλάσεων του πυρήνα της Java. Οι απαιτήσεις για τη χρήση μίας διαμόρφωσης που αφορά μία συσκευή, θα πρέπει να είναι συμβατές με το τι καθορίζουν οι προδιαγραφές της διαμόρφωσης. Γενικά, οι διαμορφώσεις δεν καθορίζουν κλάσεις διεπαφής χρήστη. Η J2ME καθορίζει δύο διαμορφώσεις: Διαμόρφωση Περιορισμένης Συνδεδεμένης Συσκευής (Connected Limited Device Configuration, CLDC). Διαμόρφωση Συνδεδεμένης Συσκευής (Connected Device Configuration, CDC). 9
Διαμόρφωση Συνδεδεμένης Συσκευής (Connected Device Configuration, CDC) Η Διαμόρφωση Συνδεδεμένης Συσκευής (CDC) [3][7] κατασκευάστηκε από την Java Community Process (JCP) [17] με σκοπό να παρέχει μία Εικονική Μηχανή Java βασισμένη στα πρότυπα και στη συμβατότητα με συσκευές όπως έξυπνα τηλέφωνα (smart phones), προσωπικούς ψηφιακούς βοηθούς (PDAs), συστήματα πλοήγησης αυτοκινήτων (car navigation systems) και γενικά οποιεσδήποτε άλλες φορητές συσκευές. Η Διαμόρφωση Συνδεδεμένης Συσκευής (CDC) είναι ένα υποσύνολο της Java 2 Standard Edition (J2SE) [8] και περιλαμβάνει τις βασικές Διεπαφές Προγραμματισμού Εφαρμογών (APIs) που είναι απαραίτητες για κάποιον κατασκευαστή που θέλει να δημιουργήσει τη δική του εφαρμογή, βασισμένη στα πρότυπα και το περιβάλλον της J2ME. Προδιαγραφές Υλικού: Συνολική Μνήμη > 512 KB 32 bits CPU Σταθερή σύνδεση σε broadband δίκτυο πρόσβασης (broadband network access), συχνά με μία ασύρματη, διακεκομμένη σύνδεση και με περιορισμένο (9600 bps ή λιγότερο) εύρος ζώνης Εικονικές Μηχανές: Compact Virtual Machine (CVM) - Sun Java Virtual Machine (JVM) - Sun J9 IBM 10
Διαμόρφωση Περιορισμένης Συνδεδεμένης Συσκευής (Connected Limited Device Configuration, CLDC) Η Διαμόρφωση Περιορισμένης Συνδεδεμένης Συσκευής (CLDC) [3][7] δημιουργήθηκε επίσης από την Java Community Process (JPC) και είναι ο μινιμαλιστής των υλοποιήσεων της J2ME. Η διαμόρφωση αυτή αφορά περιορισμένες συσκευές που διαθέτουν χαμηλή επεξεργαστική ισχύ και διάρκεια μπαταρίας. Η CLDC αποτελεί υποσύνολο της CDC όπου οι βιβλιοθήκες πυρήνα είναι πιο περιορισμένες απ ότι στη CDC, και σχεδιασμένες με τέτοιο τρόπο ώστε να παρέχουν την καλύτερη αποδοτικότητα για τις χαμηλής κατανάλωσης ισχύος φορητές συσκευές. Προδιαγραφές Υλικού: 128 KB έως 512 KB διαθέσιμης μνήμης για διεργασίες Java 16 ή 32 bits CPU Τροφοδοτούμενες από μπαταρία συσκευές, χαμηλή κατανάλωση ισχύος Πλήρως υποστήριξη γλώσσας Java language (εκτός από υποστήριξη μεταβλητών δεικτών, οριστικοποίησης και διαχείρισης σφαλμάτων (floating pointers, finalization, and error handling) ) Μικρό εύρος ζώνης πάνω από μία ενδεχομένως διακεκομμένη σύνδεση. Εικονικές Μηχανές: K Virtual Machine (KVM) - Sun Monty - Sun Microchai Virtual Machine Hewlett-Packard (HP) Jbed (Esmertec) 11
J2SE CDC CLDC Εικόνα 1. Σχέση CDC - CLDC 2.1.2 Προφίλ Ένα προφίλ καθορίζει τον τύπο των υποστηριζόμενων συσκευών. Για παράδειγμα το Mobile Information Device Profile (MIDP), καθορίζει κλάσεις που αφορούν κυψελωτά τηλέφωνα Παραθέτει επίσης κλάσεις στη διαμόρφωση της J2ME που ορίζουν περαιτέρω χρήσεις παρόμοιων συσκευών. Τα δύο προφίλ που έχουν καθοριστεί για την J2ME και έχουν κατασκευαστεί πάνω στη CLDC είναι: KJava και MIDP [3][7]. Τόσο το προφίλ KJava όσο και το MIDP σχετίζονται άμεσα με τη CLDC καθώς και με μικρότερες συσκευές. Τα προφίλ είναι υλοποιημένα πάνω από τις διαμορφώσεις. Επειδή τα προφίλ προδιαγράφονται ανάλογα με το μέγεθος της συσκευής (ποσοστό μνήμης) πάνω στην οποία τρέχει μία εφαρμογή, συγκεκριμένα προφίλ συσχετίζονται με συγκεκριμένες διαμορφώσεις. Προφίλ 1: KJava Το KJava προφίλ είναι το ιδιωτικό προφίλ της Sun και περιέχει τη KJava Διεπαφή Προγραμματισμού Εφαρμογής (KJava API). Το προφίλ KJava είναι υλοποιημένο πάνω από τη CLDC διαμόρφωση. Η KJava εικονική μηχανή (KJava virtual machine, KVM), δέχεται τον ίδιο κώδικα byte και μορφή αρχείου κλάσεων με την κλασσική εικονική μηχανή J2SE. Το KJava επίσης διαθέτει ένα συγκεκριμένο API το οποίο τρέχει πάνω στο Λειτουργικό Σύστημα Palm (Palm OS). 12
Προφίλ 2: MIDP (Mobile Information Device Profile) Το MIDP προφίλ προορίζεται κυρίως για κινητές συσκευές, όπως κυψελωτά τηλέφωνα και βομβητές. Το MIDP, όπως και το KJava, είναι υλοποιημένο πάνω από τη CLDC και παρέχει ένα σταθερό περιβάλλον εκτέλεσης, που επιτρέπει τη δυναμική ανάπτυξη νέων εφαρμογών και υπηρεσιών σε τερματικές (ως προς το χρήστη) συσκευές (end-user devices). Το MIDP είναι ένα κοινό, βιομηχανικά-σταθερό προφίλ για κινητές συσκευές οι οποίες δεν είναι εξαρτώμενες από ένα συγκεκριμένο κατασκευαστή. Αντίθετα, αποτελεί ένα ολοκληρωμένο και γενικά υποστηριζόμενο θεμέλιο ανάπτυξης εφαρμογών που προορίζονται για κινητές συσκευές. Προδιαγραφές: Μνήμη: 128 KB μη-πτητικής μνήμης για MIDP συστατικά, 8 KB μη-πτητικής μνήμης για persistent data και 32 KB πτητικής μνήμης Οθόνη: 96 x 54, 1 bit Αλληλεπίδραση Χρήστη: Πληκτρολόγιο (με ένα ή δύο χέρια), οθόνη αφής Δίκτυο: Αμφίδρομο, ασύρματο, χαμηλού εύρους ζώνης Εικόνα 2.Αρχιτεκτονική MIDP 13
2.1.3 Midlet Το MIDlet [3][7] είναι μία MIDP εφαρμογή και τρέχει σε συσκευές που υποστηρίζουν MIDP. Το MIDlet χρησιμοποιεί μόνο τα APIs που καθορίζονται από τις MIDP και CLDC προδιαγραφές. Αποτελεί επίσης μία διεπαφή μέσα στο MIDlet API πακέτο του MIDP. Η κατανόηση του κύκλου ζωής του MIDlet είναι απαραίτητη για τη δημιουργία οποιουδήποτε MIDlet. Ο κύκλος ζωής καθορίζει τα στάδια εκτέλεσης ενός MIDlet δημιουργία, αρχή, παύση, και έξοδος όπως και τις έγκυρες μεταβάσεις καταστάσεων. Το λογισμικό διαχείρισης εφαρμογής (application management software, AMS) είναι το λογισμικό σε μία συσκευή που διαχειρίζεται τον κύκλο ζωής των MIDlets. Το AMS παρέχει το περιβάλλον εκτέλεσης για ένα MIDlet. Επιβάλλει ασφάλεια, παρέχει άδειες και καταστάσεις εκτέλεσης, ενώ παράλληλα παρέχει τις κλάσεις συστήματος και χρονοπρογραμματισμό (scheduling). PAUSE newmidlet() startapp() ACTIVE destroyapp() destroyapp() DESTROYED Εικόνα 3. Κύκλος Ζωής Midlet 14
Πιο κάτω παρουσιάζεται υποδειγματικά κώδικας σε Java του κύκλου ζωής ενός Midlet : import javax.microedition.midlet.midlet; public class newmidlet extends MIDlet public newmidlet () public void startapp() public void pauseapp() public void destroyapp(boolean unconditional) 2.1.4 Περιεχόμενο Midlet (Midlet Container) Μία σουίτα MIDlet γνωστή και ως MIDlet suite προσφέρει μεγαλύτερο έλεγχο πάνω στις MIDP εφαρμογές ενώ ταυτόχρονα εξυπηρετεί και την οργάνωση των πηγαίων αρχείων και των αρχείων χαρακτηριστικών μίας MIDP εφαρμογής. Με τη κατασκευή μίας MIDlet σουίτας, δημιουργείται αυτόματα το απαραίτητο JAR αρχείο, το οποίο περιέχει τα αρχεία της εφαρμογής. Το Java Mobility IDE επίσης δημιουργεί το Java Αρχείο Περιγραφής Εφαρμογής (Java Application Descriptor file), γνωστό και ως JAD αρχείο, που είναι απαραίτητο για την ολοκληρωμένη υλοποίηση της εφαρμογής. myapp.jad myapp.jar Container A.class B.class /res myapp.jar C.class D.class MANIFEST.MF META-INF Εικόνα 4. Σουίτα Midlet (Midlet Suite) 15
2.1.5 Το αρχείο JAR (Java Archive File) Η διάταξη του Java Archive (JAR) [10] μας προσφέρει τη δυνατότητα να πακετάρουμε πολλαπλά αρχεία μέσα σε ένα μοναδικό archive file. Ένα JAR αρχείο περιέχει τα αρχεία κλάσεων και τους βοηθητικούς πόρους που σχετίζονται με τις εφαρμογές. Η διάταξη ενός JAR αρχείου παρέχει πολλά πλεονεκτήματα: Ασφάλεια: Ο κατασκευαστής ενός JAR αρχείου μπορεί να τοποθετήσει τη ψηφιακή υπογραφή του στο JAR αρχείο, με αποτέλεσμα μόνο οι επιθυμητοί χρήστες, να μπορούν να κατέχουν κάποια ξεχωριστά προνόμια σε ότι αφορά τη χρήση του JAR. Μειωμένος Χρόνος downloading: Εάν to εφαρμογίδιο (applet) είναι ενσωματωμένο σε ένα JAR file, τότε τα αρχεία κλάσεων του εφαρμογιδίου όπως και οι συσχετιζόμενοι πόροι μπορούν να ανακτηθούν μέσω μίας μοναδικής HTTP συναλλαγής χωρίς την ανάγκη δημιουργίας νέας σύνδεσης για την ανάκτηση κάθε αρχείου ξεχωριστά. Συμπίεση: Η διάταξη ενός JAR αρχείου επιτρέπει την συμπίεση ολόκληρου του JAR για πιο αποδοτική αποθήκευση. Πακετοποίηση για περαιτέρω επέκταση: Το πλαίσιο επεκτάσεων (extensions framework) παρέχει τα μέσα ώστε να είναι εφικτή η προσθήκη περαιτέρω λειτουργικότητας στον πυρήνα της πλατφόρμας Java, ενώ η διάταξη του JAR αρχείου καθορίζει την πακετοποίηση για επεκτάσεις. Σφράγισμα Πακέτου: Τα πακέτα που αποθηκεύονται σε κάποιο JAR αρχείο μπορούν προαιρετικά να σφραγιστούν, ώστε να επιτευχτεί συνέπεια έκδοσης (version consistency). Με το σφράγισμα ενός πακέτου που εμπεριέχεται μέσα σε ένα JAR αρχείο, θα πρέπει όλες οι κλάσεις που καθορίζονται στο συγκεκριμένο πακέτο, να βρίσκονται και στο ίδιο JAR αρχείο. Έκδοση Πακέτου: Ένα JAR αρχείο μπορεί να κατέχει δεδομένα σχετικά με τα αρχεία που αυτό εμπεριέχει, όπως πχ τον κατασκευαστή και την έκδοση. 16
2.1.6 Το αρχείο JAD (Java Application Descriptor) Το αρχείο JAD (Java Application Descriptor) χρησιμοποιείται για την περιγραφή μίας εφαρμογής και είναι το άλλο κομμάτι που μαζί με το JAR αρχείο συνθέτουν ένα MIDLET. Ιδιότητες: Διαχείριση εφαρμογής Διαχείριση εγκατάστασης Διαχείριση Ταυτοποίησης Διαχείριση Ανάκτησης 2.1.7 Εικονική Μηχανή Κ (K Virtual Machine, KVM) Η Εικονική Μηχανή K, KVM [3] αποτελεί ένα εξολοκλήρου νέο περιβάλλον εκτέλεσης Java, το οποίο σχεδιάστηκε αποκλειστικά για την παροχή μίας λιτής εικονικής μηχανής Java, η οποία θα μπορεί να χρησιμοποιηθεί σε συσκευές με μικρή μνήμη. Η KVM αποτελεί τον πυρήνα της Java 2 Micro Edition (J2ME). Η KVM σχεδιάστηκε με τρόπο ώστε να μπορεί να αντεπεξέλθει σε τρείς τεχνικές προκλήσεις: Να μειώσει το μέγεθος της εικονικής μηχανής αλλά και τις ίδιες τις βιβλιοθήκες, να μειώσει το ποσοστό μνήμης που χρησιμοποιούσε η εικονική μηχανή κατά τη διάρκεια της εκτέλεσης, να επιτρέπει στα συστατικά μέρη της εικονικής μηχανής να διαμορφώνονται με τρόπο ώστε να είναι κατάλληλα για συγκεκριμένες συσκευές. Η ομάδα σχεδίασης της KVM εφάρμοσε ένα αριθμό από στρατηγικές με σκοπό την αντιμετώπιση αυτών των τεχνικών προκλήσεων. Μία από αυτές τις στρατηγικές ήταν ο διαμοιρασμός των δυνατοτήτων της εικονικής μηχανής. Η ομάδα επίσης σχεδίασε τον διερμηνέα κώδικα και το συλλέκτη άχρηστων δεδομένων ( byte code interpreter και garbage collector), με σκοπό την ελαχιστοποίηση χρήσης της δυναμικής μνήμης, ενώ 17
υλοποίησε με μεγάλη προσοχή την εικονική μηχανή και τις βιβλιοθήκες ώστε το μέγεθός τους να μειωθεί. 2.2 Υποδομή 2.2.1 Εργαλείο Ανάπτυξης Java (Java Development Kit) Για να γίνει εφικτή η ανάπτυξη οποιασδήποτε Java εφαρμογής απαιτείται η εγκατάσταση του Εργαλείου Ανάπτυξης Java (Java Development Kit, JDK) [3]. Τα πρωταρχικά συστατικά του JDK είναι: javac: Ο μεταγλωττιστής, ο οποίος είναι υπεύθυνος για τη μετατροπή του πηγαίου κώδικα σε byte κώδικα jar: Ο αρχειοθέτης, ο οποίος πακετάρει συσχετιζόμενες βιβλιοθήκες κλάσεων σε ένα μοναδικό JAR αρχείο javadoc: Ο δημιουργός κειμένου, ο οποίος δημιουργεί αυτόματα κείμενο με βάση τα σχόλια που εμπεριέχονται στον πηγαίο κώδικα. jdb: Αποσφαλματωτής (debugger) Το JDK περιέχει επίσης το Περιβάλλον Εκτέλεσης Java (Java Runtime Environment, JRE) υπεύθυνο για την εκτέλεση των εφαρμογών, την Εικονική Μηχανή Java (Java Virtual Machine, JVM) καθώς και όλες τις απαιτούμενες βιβλιοθήκες για την ανάπτυξη της εφαρμογής. 18
2.2.2 Ασύρματο Εργαλείο (Wireless Toolkit) To Sun Java Wireless Toolkit (γνωστό και σαν Java 2 Platform, Micro Edition (J2ME) Wireless Toolkit) είναι μία εργαλειοθήκη που χρησιμεύει στην ανάπτυξη ασύρματων εφαρμογών που είναι βασισμένες στη Limited Device Configuration (CLDC) της J2ME και στο Mobile Information Device Profile (MIDP), ενώ είναι σχεδιασμένο για να τρέχει σε κινητά τηλέφωνα, προσωπικούς ψηφιακούς βοηθούς, όπως και σε άλλες μικρές κινητές συσκευές. Η συγκεκριμένη εργαλειοθήκη περιλαμβάνει το περιβάλλον προσομοίωσης, βελτιστοποίηση επίδοσης και χαρακτηριστικά συντονισμού, καθώς και διάφορα παραδείγματα για το πώς οι κατασκευαστές μπορούν να δημιουργήσουν γρήγορα, με αποτελεσματικό και επιτυχή τρόπο, ασύρματες εφαρμογές. 2.2.3 Ολοκληρωμένο Περιβάλλον Ανάπτυξης (Intergraded Development Environment, IDE) Στα πρωταρχικά στάδια ενασχόλησής μου με τη συγκεκριμένη εργασία, πειραματίστηκα με τρία IDEs. Το Netbeans [9], το IntelJ [10] και το Eclipse [11]. Μετά από αρκετή επεξεργασία κατέληξα στην επιλογή του Netbeans IDE, το οποίο είναι πιο εύχρηστο και παρέχει όλες τις βασικές λειτουργίες ενός ολοκληρωμένου IDE. Το Netbeans IDE, παρέχει καλή οργάνωση σε ότι αφορά τα υπό ανάπτυξη projects και παράλληλα η υλοποίηση του κώδικα είναι πολύ πιο κατανοητή και αποδοτική. Επίσης, πειραματίστηκα με το Sony Ericsson Wireless Toolkit το οποίο κατά την άποψή μου είναι πολύ πιο αξιόπιστο σε συνεργασία με το Netbeans. Χάρη στη διαδικασία αυτόματης εγκατάστασης, τα πάντα λειτούργησαν με τον αναμενόμενο τρόπο και έτσι κατάφερα να ολοκληρώσω το project μου. 19
3 Η Στοίβα Πρωτοκόλλων του Bluetooth 3.1 Overview Το Bluetooth [12] αρχικά δημιουργήθηκε με σκοπό την παροχή χαμηλής εμβέλειας ραδιοεπικοινωνιών με χαμηλό κόστος. Στη συνέχεια κατάφερε να διαδοθεί και να καθιερωθεί ως μία καθολική τεχνολογική προδιαγραφή, ασύρματης επικοινωνίας μεταξύ φορητών συσκευών, περιφερειακών συσκευών και συσκευών γραφείου. Το πρότυπο Bluetooth υποστηρίζει δύο είδη συνδέσεων: Την ασύγχρονη ασυνδετική ζεύξη (Asynchronous Connection-Less, ACL) [12] για μετάδοση δεδομένων και τη σύγχρονη συνδεσιοστρεφή ζεύξη (Synchronous Connection Oriented, SCO) [12] για μετάδοση πληροφοριών φωνής. Ο ρυθμός μετάδοσης δεδομένων Bluetooth είναι 1 Mbps ενώ η μέγιστη χωρητικότητα που προσφέρεται από μία σύνδεση ACL (η οποία χρησιμοποιεί το αποδοτικότερο μέγεθος πακέτου των πέντε χρονικών σχισμών και καμία κωδικοποίηση FEC) είναι 432,6 Κbps για μία συμμετρική σύνδεση ACL και 721/57,6 Kbps για μία ασύμμετρη σύνδεση ACL. Το Bluetooth υποστηρίζει επίσης μέχρι και τρία κανάλια SCO (με ρυθμό μετάδοσης 64 Kbps) ανά συσκευή. 3.2 Η Στοίβα Πρωτοκόλλων Η Στοίβα Πρωτοκόλλων του Bluetooth [13] μπορεί να διακριθεί σε δύο κύριες κατηγορίες: Στο υλικό μέρος (hardware) που υλοποιείται κυρίως από τον ελεγκτή (controller) και από την αλληλεπίδραση των εφαρμογών και υπηρεσιών. Τα κύρια επίπεδα της στοίβας πρωτοκόλλων συνοψίζονται παρακάτω: Η διασύνδεση ελεγκτή υπολογιστή υπηρεσίας (Host Controller Interface, HCI) δεν αποτελεί επίπεδο της στοίβας αλλά μία διασύνδεση που παρέχει τα μέσα για την πρόσβαση στις δυνατότητες του υλικού Bluetooth. 20
Το επίπεδο λογικής ζεύξης και εφαρμογής (Logical Link Control and Adaptation Layer, L2CAP) παρέχει τόσο συνδεσιοστρεφή όσο και ασυνδετικές υπηρεσίες σε πρωτόκολλα ανώτερων επιπέδων με δυνατότητα πολυπλεξίας πρωτοκόλλων, λειτουργίες κατάτμησης και επανασυναρμολόγησης (segmentation and reassembly, SAR), και αφαίρεση ομάδων. Το L2CAP επιτρέπει στα πρωτόκολλα και τις εφαρμογές υψηλότερου επιπέδου να μεταδίδουν και να λαμβάνουν πακέτα L2CAP μήκους έως και 64 kilobyte. Το επίπεδο εντοπισμού υπηρεσιών (Service Discovery Protocol, SDP) όπως προσδιορίζει και η ονομασία του χρησιμοποιείται προκειμένου μια συσκευή Bluetooth να ενημερωθεί για υπηρεσίες που προσφέρονται και να λάβει πληροφορίες για τις γειτονικές συσκευές. Το επίπεδο επικοινωνίας ράδιο-συχνότητας (Radio Frequency Communication, RFCOMM) εκτελεί το πρωτόκολλο προσομοίωσης ελέγχου σειριακής γραμμής RS-232 και σηματοδοσίας δεδομένων. Χρησιμοποιείται για την αντικατάσταση της καλωδίωσης προσφέροντας δυνατότητες μεταφοράς μέσω της ασύρματης σύνδεσης σε εφαρμογές που χρησιμοποιούν σειριακές γραμμές ως μηχανισμό μεταφοράς δεδομένων. Το πρωτόκολλο ανταλλαγής αντικειμένων (Object Exchange Protocol, OBEX) που αρχικά προσδιορίστηκε από την Infrared Data Association (IrDA), υποστηρίζει την ανταλλαγή αντικειμένων (όπως vcard και vcalendar synchronization data). Το πρωτόκολλο αυτό όπως και άλλα (πχ το WAP) δεν προσδιορίζονται ειδικά για το Bluetooth αλλά εφαρμόζονται προκειμένου να καταστεί δυνατή η λειτουργία εφαρμογών υψηλών επιπέδων. 21
OBEX (Object Exchange) Service Discovery Protocol (SDP) (Service Discovery API) RFCOMM (Serial Enumeration API) Logical Link Control and Adaption Protocol (L2CAP) (Handles multiplexing, packet segmentation in memory and quality) Host Controller Interface (HCI) Εικόνα 5. Η Στοίβα Πρωτοκόλλων Bluetooth 3.3 Προφίλ (Profiles) Το τμήμα των προφίλ του Bluetooth [12] χρησιμοποιείται για την ταξινόμηση των εφαρμογών Bluetooth σε εννέα προφίλ εφαρμογών. Καθένα από αυτά υλοποιεί μόνο ένα συγκεκριμένο σύνολο των πρωτοκόλλων της στοίβας. Η ύπαρξη των προφίλ εφαρμογών στοχεύει στην εξασφάλιση διαλειτουργικότητας μεταξύ των συσκευών Bluetooth. Προκειμένου να πιστοποιηθεί μία συσκευή για μία συγκεκριμένη εφαρμογή Bluetooth, πρέπει να ακολουθεί το αντίστοιχο προφίλ Τα κύρια προφίλ Bluetooth: Το προφίλ γενικής πρόσβασης (Generic Access Profile, GAP) καθορίζει τη λειτουργία των χαμηλών επιπέδων της στοίβας πρωτοκόλλων Bluetooth και περιλαμβάνει τις λειτουργίες που απαιτούνται για τη χρήση όλων των άλλων 22
προφίλ του συστήματος. Το GAP πρέπει να υποστηρίζεται από όλες τις συσκευές Bluetooth. Το προφίλ ανακάλυψης υπηρεσιών (Service Discover Application Profile, SDAP) επιτρέπει στους χρήστες να έχουν πρόσβαση στο πρωτόκολλο ανακάλυψης υπηρεσιών (SDP) προκειμένου να διαπιστώσουν ποιες υπηρεσίες υποστηρίζονται από μια συγκεκριμένη συσκευή. Στην περίπτωση που δεν υποστηρίζεται το προφίλ αυτό, στο SDP μπορούν να έχουν πρόσβαση μόνο εφαρμογές και όχι χρήστες. Το προφίλ σειριακής θύρας (Serial Port Profile, SPP) προσομοιώνει τις σειριακές θύρες RS232 και USB, προκειμένου να επιτραπεί στις εφαρμογές η ανταλλαγή δεδομένων μέσω μίας σειριακής σύνδεσης. Το προφίλ δικτύωσης μέσω τηλεφώνου (Dial-up Networking Profile, DUNP) χρησιμοποιεί το προφίλ σειριακής θύρας για να παρέχει τηλεφωνικές συνδέσεις μέσω κινητών τηλεφώνων που υποστηρίζουν το πρότυπο Bluetooth. Το προφίλ γενικής ανταλλαγής αντικειμένων (Generic Object Exchange Profile, GOEP), καθορίζει τις λειτουργίες που απαιτούνται από τις συσκευές Bluetooth προκειμένου να υποστηρίζουν ανταλλαγές αντικειμένων. Το προφίλ προώθησης αντικειμένων (Object Push Profile, OPP) καθορίζει τις λειτουργίες που απαιτούνται για την υποστήριξη προωθημένων δεδομένων (όπως για παράδειγμα προώθηση vcard, vcalendar, vnote και vmessage). Το προφίλ μεταφοράς αρχείων (File Transfer Profile, FTP) επιτρέπει τις μεταφορές αρχείων μεταξύ των συσκευών Bluetooth. Το προφίλ συγχρονισμού (Synchronization Profile, SP) επιτρέπει τον αυτόματο συγχρονισμό δεδομένων μεταξύ συσκευών Bluetooth. Για παράδειγμα, μπορεί να χρησιμοποιηθεί για το συγχρονισμό του βιβλίου διευθύνσεων ενός χρήστη μεταξύ του υπολογιστή γραφείου του και του φορητού του υπολογιστή. 23
3.4 Το κανάλι ραδιοεπικοινωνίας του προτύπου Bluetooth Το κανάλι ραδιοεπικοινωνίας του προτύπου Bluetooth, το οποίο αποτελεί αρμοδιότητα του επιπέδου ραδιοεπικοινωνίας, παρέχει την ηλεκτρική διασύνδεση για τη μεταφορά πακέτων Bluetooth στο ασύρματο μέσο. Το κανάλι ραδιοεπικοινωνίας λειτουργεί στη ζώνη ISM των 2,4 GHz με μεταπήδηση συχνοτήτων σε ένα σύνολο 79 (ΗΠΑ και Ευρώπη) ή 23 (Ισπανία, Γαλλία και Ιαπωνία) καναλιών συχνοτήτων τα οποία διαχωρίζονται κατά 1 MHz. Η ασύρματη σύνδεση περιλαμβάνει χρονικές σχισμές μήκους 0,625 msec η κάθε μία, με κάθε σχισμή να αντιστοιχεί σε κάθε συχνότητα μεταπήδησης. Ο ονομαστικός ρυθμός μεταπήδησης είναι 1600 hops/sec. Σε κάθε μεταπήδηση, το μεταδιδόμενο σήμα διαμορφώνεται με τη χρήση γκαουσιανής διαμόρφωσης συχνότητας (GFSK), όπου το δυαδικό 1 αντιπροσωπεύεται από μία θετική μετατόπιση συχνότητας και το δυαδικό 0 από μία αρνητική. Παρά το γεγονός ότι αυτή η διαμόρφωση παρέχει ταχύτητες σύνδεσης έως και 1 Mbps, οι πραγματικές ταχύτητες μεταφοράς δεδομένων που τελικά επιτυγχάνονται είναι χαμηλότερες. Ο λόγος είναι ότι τα διάφορα επίπεδα πρωτοκόλλων χρησιμοποιούν τμήματα του πακέτου δεδομένων για να προσθέσουν πληροφορίες κεφαλίδας προκειμένου να επικοινωνούν με τα ομότιμα επίπεδα. Προφανώς κάποιες αποδοτικότερες τεχνικές διαμόρφωσης θα μπορούσαν να επιτύχουν υψηλότερες ταχύτητες, αλλά η χρήση της GFSK προτιμάται επειδή επιτρέπει την υλοποίηση συσκευών χαμηλού κόστους. 3.5 Μεταπήδηση Συχνότητας(frequency hopping) στο Bluetooth Όπως αναφέρθηκε και στην προηγούμενη παράγραφο, η μετάδοση δεδομένων πάνω από μία Bluetooth σύνδεση γίνεται με μεταπήδηση συχνότητας. Με τον όρο μεταπήδηση συχνότητας εννοούμε ότι η τεχνολογία Bluetooth μεταδίδει και αποδέχεται δεδομένα σε 79 συχνότητες από 2402 έως 2480 MHz, μεταπηδώντας σε μια ψευδοτυχαία ακολουθία, 1600 φορές το δευτερόλεπτο. Σε κάθε μεταπήδηση έχουμε αναφέρει, ότι το μεταδιδόμενο σήμα διαμορφώνεται με τη χρήση γκαουσιανής διαμόρφωσης μετατόπισης 24
συχνότητας (GFSK) με μέγιστο ρυθμό μετάδοσης 721Kbps. Οι παρεμβολές αποφεύγονται με τη χρήση της τεχνικής FHSS (Frequency-Hop Spread Spectrum). Η τεχνολογία αυτή είναι κατάλληλη για χαμηλής ισχύος και χαμηλού κόστους ραδιοεπικοινωνίες και χρησιμοποιείται σε ορισμένα ασύρματα LAN προϊόντα. Το κύριο πλεονέκτημα της μετάδοσης Bluetooth είναι ο υψηλός ρυθμός μεταπήδησης των 1600 βημάτων το δευτερόλεπτο. Το Bluetooth επίσης χρησιμοποιεί μικρού μήκους πακέτα που είναι ακόμη ένα σημαντικό πλεονέκτημα. Η ISM ζώνη συχνοτήτων χωρίζεται σε ένα αριθμό από κανάλια μεταπήδησης. Κάθε hop είναι ένα τμήμα της συνολικής ζώνης συχνοτήτων. Στο Bluetooth, κάθε κανάλι χρησιμοποιείται κάθε 625 microseconds(1 slot) και ακολουθείται από μία μεταπήδηση (σε ψευδοτυχαία διάταξη) σε άλλο κανάλι για άλλα 625 microseconds. Με τον τρόπο αυτό η μεταπήδηση εξαπλώνει τη κίνηση Bluetooth σε όλη την ISM ζώνη και εξασφαλίζεται καλή προστασία από παρεμβολές. Αν κάποια από τις μεταδόσεις διακοπεί, για οποιοδήποτε λόγο, η πιθανότητα παρεμβολής στο επόμενο κανάλι μεταπήδησης είναι πολύ χαμηλή. Εικόνα 6. Μεταπήδηση Συχνότητας στο Bluetooth 3.6 Μικροδίκτυα (Piconets) και δίκτυα διασποράς (Scatternets) Όταν δύο συσκευές Bluetooth επιθυμούν να συνδεθούν μεταξύ τους, αυτή που ζητά τη σύνδεση αναφέρεται ως κύρια συσκευή (Master) και η άλλη ως εξαρτημένη (Slave). Τον έλεγχο της σύνδεσης που δημιουργείται μεταξύ των δύο συσκευών τον έχει πάντα η 25
κύρια συσκευή. Η συσχέτιση κύριας και εξαρτημένης συσκευής ισχύει μόνο για μία συγκεκριμένη εγκατάσταση σύνδεσης με δεδομένο ότι οποιαδήποτε μονάδα Bluetooth μπορεί να λειτουργήσει είτε κύρια είτε ως εξαρτημένη. Μία κύρια συσκευή μπορεί να διατηρεί μέχρι επτά συνδέσεις με ενεργές εξαρτημένες συσκευές. Ένα μικροδίκτυο (piconet) ονομάζεται η διασύνδεση δύο ή περισσότερων συσκευών Bluetooth και χαρακτηρίζεται σαν ένα δυναμικό (ad-hoc) δίκτυο. Στο μικροδίκτυο η μία συσκευή ενεργεί σαν κύρια (Master) και οι υπόλοιπες σαν εξαρτημένες (Slaves). Όταν μία ή περισσότερες εξαρτημένες συσκευές συμμετέχουν σε διαφορετικά μικροδίκτυα, με την προσέγγιση ότι κάθε μία από αυτές είναι συνδεδεμένη με δύο διαφορετικές κύριες συσκευές, τότε αναφερόμαστε σε ένα δίκτυο διασποράς (Scatternet). Scatternet Piconet A S M S S M S Piconet B Master Slave Εικόνα 8. Μικροδίκτυο (Piconet) και Δίκτυο Διασποράς (Scatternet) Bluetooth 26
3.7 Μορφή Πακέτου Bluetooth Όπως ήδη αναφέρθηκε, στο πρότυπο Bluetooth κάθε χρονική σχισμή αντιστοιχεί σε ένα υποκανάλι συχνοτήτων και διαρκεί 0,625 msec. Όταν δύο συσκευές Bluetooth επικοινωνούν μεταξύ τους, η κύρια συσκευή αρχίζει πάντα τη μετάδοση σε σχισμές με άρτια αρίθμηση, ενώ η μετάδοση των εξαρτημένων συσκευών μπορεί να ξεκινήσει μόνο σε σχισμές με περιττή αρίθμηση. Σε κάθε μικροδίκτυο, ένα πακέτο μπορεί να μεταδοθεί σε οποιαδήποτε σχισμή. Η μορφή των πακέτων που ανταλλάσσονται μέσω μίας σύνδεσης Bluetooth περιλαμβάνει τα ακόλουθα πεδία: Έναν κωδικό πρόσβασης των 72 bit που καθορίζεται από την κύρια συσκευή και είναι μοναδικός για το συγκεκριμένο μικροδίκτυο και χρησιμοποιείται από τις συσκευές Bluetooth προκειμένου να προσδιορίζουν τα εισερχόμενα πακέτα. Αν μια συσκευή διαπιστώσει ότι ο κωδικός πρόσβασης ενός εισερχόμενου πακέτου δεν ταιριάζει με τον κωδικό του μικροδικτύου της, το απορρίπτει. Επιπλέον, το πεδίο αυτό χρησιμοποιείται από τους παραλήπτες για λόγους συγχρονισμού. Μία κεφαλίδα πακέτου των 54 bit, η οποία περιέχει πληροφορίες που αφορούν τη διευθυνσιοδότηση επιπέδου πρόσβασης το μέσο (Medium Access Control, MAC), τον τύπο των πακέτων, τον έλεγχο ροής, την αυτόματη αίτηση επανάληψης και τη διόρθωση σφαλμάτων κεφαλίδας (Head Error Connection, HEC). Ένα ωφέλιμο φορτίο μεταβλητού μήκους που μπορεί να ακολουθεί την κεφαλίδα. Επειδή η διάρκεια παραμονής σε κάθε υποκανάλι είναι 0.625 msec, μέσω μιας σύνδεσης 1 Mbps μπορούν να μεταδοθούν 625 bit, έτσι ώστε να δίνεται στους πομπούς και στους δέκτες αρκετός χρόνος για να μεταπηδήσουν στην επόμενη συχνότητα και να σταθεροποιηθούν. Έτσι το πραγματικό ωφέλιμο φορτίο ενός πακέτου που μεταδίδεται μέσω ενός υποκαναλιού είναι 366 bit μείον το μέγεθος του κωδικού πρόσβασης και της κεφαλίδας του πακέτου (126 bit), δηλαδή 240 bit (30 Byte). Τα πακέτα πολλαπλών σχισμών (multislot) μπορούν να έχουν μεγαλύτερο ωφέλιμο φορτίο. 27
3.8 Η Ασφάλεια στο Bluetooth Αναγνωρίζοντας το γεγονός ότι η ασύρματη μετάδοση υπόκειται σε σφάλματα ασφαλείας, το πρότυπο Bluetooth παρέχει ένα πλήθος χαρακτηριστικών ασφαλείας. Συγκεκριμένα το πρωτόκολλο Bluetooth [16] παρέχει τρεις κύριους τρόπους ώστε να ασφαλίζει τα δεδομένα του: Πιστοποίηση (Authentication) Εξουσιοδότηση (Authorization) Κρυπτογράφηση (Encryption) 3.8.1 Πιστοποίηση (Authentication ) Ο πρώτος τρόπος προστασίας των δεδομένων ονομάζεται πιστοποίηση και γίνεται με τη χρήση ενός κλειδιού το οποίο ονομάζεται Universally Unique Identifier (UUID) [16] 10203045060708090000A0B0C0D0E0F0. Το UUID έχει μήκος 128 bit και με βάση αυτό η κύρια συσκευή (Master) ζητά πιστοποίηση από την εξαρτημένη (Slave). Εάν το αποκομισμένο κλειδί είναι το ίδιο τότε δημιουργείται μία σύνδεση Bluetooth. Στην εφαρμογή η πιστοποίηση επιτυγχάνεται με τη χρήση του Bluetooth προφίλ σειριακής θύρας (Bluetooth Serial Port Profile, BTSPP) όπως φαίνεται παρακάτω: String key = btssp://localhost: 10203045060708090000A0B0C0D0E0F0;name=BTapplication;authenticate=true 3.8.2 Εξουσιοδότηση (Authorization) Ο δεύτερος τρόπος ασφάλειας είναι επιπρόσθετος στη μέθοδο της πιστοποίησης και ονομάζεται εξουσιοδότηση. Στην περίπτωση αυτή η κύρια συσκευή απαιτεί εξουσιοδότηση από την εξαρτημένη με τη χρήση ενός κλειδιού το οποίο έχει μορφή όπως φαίνεται παρακάτω: String key = btssp://localhost:f0e0d0c0b0a000908070605040302010; name=btapplication;authenticate=true;authorize=true 28
3.8.3 Κρυπτογράφηση (Encryption) Η τελευταία μέθοδος προστασίας των δεδομένων είναι η κρυπτογράφηση. Η κρυπτογράφηση στοχεύει στην πλήρη ασφάλεια και προστασία των δεδομένων κατά τη μετάδοσή τους στο δίκτυο. Για την κρυπτογράφηση των δεδομένων απαιτείται ένα κλειδί κρυπτογράφησης και η επιλογή του τρόπου κρυπτογράφησης της πληροφορίας, συμμετρική ή ασύμμετρη. Στη συμμετρική κρυπτογράφηση η κύρια και η εξαρτημένη συσκευή χρησιμοποιούν το ίδιο κλειδί για την κρυπτογράφηση και αποκρυπτογράφηση των δεδομένων. Στην περίπτωση της ασύμμετρης αποκρυπτογράφησης χρησιμοποιείται διαφορετικό κλειδί για την κρυπτογράφηση και διαφορετικό κλειδί για την αποκρυπτογράφηση. Ακολουθεί η μέθοδος κρυπτογράφησης (για την εφαρμογή): String key = btssp://localhost:f0e0d0c0b0a000908070605040302010; name=btapplication;authenticate=true;authorize=true;encrypt=true 3.9 Συστατικά Bluetooth Για να εγκαταστήσουμε μία σύνδεση Bluetooth [16] πρέπει να λάβουμε υπόψη πέντε βασικά βήματα: Αρχικοποίηση Στοίβας (Stack Initialization) Ανακάλυψη Συσκευής (Device Discovery) Διαχείριση Συσκευής (Device Management) Ανακάλυψη Υπηρεσιών (Service Discovery) Επικοινωνία (Communication) 3.9.1 Αρχικοποίηση Στοίβας Όταν επιθυμούμε να δημιουργήσουμε ένα σύνδεσμο επικοινωνίας, θα πρέπει αρχικά να αρχικοποιήσουμε τη στοίβα Bluetooth. Σκοπός της αρχικοποίησης στοίβας είναι να 29
σιγουρευτούμε ότι η συσκευή Bluetooth θα είναι έτοιμη για ασύρματη μετάδοση δεδομένων. 3.9.2 Ανακάλυψη Συσκευής Για την εγκατάσταση σύνδεσης μεταξύ γειτονικών συσκευών Bluetooth είναι αναγκαίο να θέσουμε ορατή τη συσκευή μας ως προς τις υπόλοιπες, ώστε να μπορεί να εντοπιστεί από αυτές. Η διαδικασία ανακάλυψης συσκευής διεξάγεται από την πλευρά της εξαρτημένης συσκευής. Όσο αφορά την εφαρμογή, η ανακάλυψη συσκευής επιτυγχάνεται με τη χρήση δύο κλάσεων DiscoveryAgent και DiscoveryListener. Με την κλάση DiscoveryAgent καλούμε τη μέθοδο startinquiry() (έναρξη ερωτημάτων) ώστε να αρχίσει η αναζήτηση για παραπλήσιες συσκευές. Όταν ανακαλυφθεί μία συσκευή καλούμε τη μέθοδο devicediscovered() η οποία υλοποιεί τη διεπαφή DiscoveryListener η οποία στη συνέχεια παρέχει μία αναπαράσταση τη συσκευής σαν ένα αντικείμενο απομακρυσμένης συσκευής (RemoteDevice). Ο DiscoveryListener ακούει και ενημερώνει για λάθη τα οποία εμφανίστηκαν κατά τη διάρκεια ανακάλυψης της συσκευής. 3.9.3 Διαχείριση Συσκευής Η διαχείριση Συσκευής (Device Management) διεξάγεται με τη χρήση των κλάσεων LocalDevice και RemoteDevice. Οι κλάσεις αυτές παρέχουν πληροφορίες σχετικές με την ίδια τοπική συσκευή όπως και για παραπλήσιες Bluetooth συσκευές. Ένα παράδειγμα τέτοιας πληροφορίας είναι η μοναδική διεύθυνση κάθε συσκευής η οποία είναι ορατή μέσω της μεθόδου getbluetoothaddress(). Για να μπορέσουμε να εντοπίσουμε οποιαδήποτε παραπλήσια συσκευή υποθέτουμε ότι η συσκευή αυτή είναι ορατή. Αυτό γίνεται με το κάλεσμα της μεθόδου setdiscoverable() στο αντικείμενο LocalDevice. 30
3.9.4 Ανακάλυψη Υπηρεσιών Η Ανακάλυψη Υπηρεσιών είναι πανομοιότυπη με την Ανακάλυψη Συσκευής, όπου επίσης καλείται μέσω του DiscoveryAgent. Από τη στιγμή που καταφέρνουμε να ανακαλύψουμε μία συσκευή, τότε ζητούμε τις διαθέσιμες υπηρεσίες που αυτή μπορεί να δώσει. Η μέθοδος που χρησιμοποιείται είναι η searchservices() και όταν οι υπηρεσίες εντοπιστούν, η JVM θα καλέσει τη μέθοδο servicesdiscovered στο αντικείμενο που δημιουργήθηκε από την διεπαφή DiscoveryListener και θα περάσει ένα αντικείμενο ServiceRecord (καταχώρηση υπηρεσίας) που θα αφορά την υπηρεσία αυτή. Πριν να μπορέσει μία εξαρτημένη συσκευή (Slave) Bluetooth να προχωρήσει στην Ανακάλυψη Υπηρεσιών από μία Bluetooth συσκευή εξυπηρέτη (server device), ο Bluetooth εξυπηρέτης θα πρέπει πρώτα να καταχωρήσει τις υπηρεσίες του στη Βάση Δεδομένων Ανακάλυψης Υπηρεσιών (Service Discovery Database, SDDB). Η κίνηση αυτή ονομάζεται Καταχώρηση Υπηρεσιών (Service Registration). Για να γίνει η Καταχώρηση Υπηρεσιών ο εξυπηρέτης καλεί την μέθοδο Connector.open() και μετατρέπει την σύνδεση που προκύπτει σε ένα αντικείμενο που ονομάζεται StreamConnectionNotifier. Η μέθοδος Connector.open() δημιουργεί μία καταχώρηση υπηρεσίας (ServiceRecord) η οποία μπορεί να μεταβληθεί από τον εξυπηρέτη. Όταν ο εξυπηρέτης τεθεί σε κατάσταση επικοινωνίας, καλείται η μέθοδος StreamConnectionNotifier.acceptAndOpen() και το σύστημα αυτόματα δημιουργεί μία ServiceRecord μέσα στη Βάση Δεδομένων Ανακάλυψης Υπηρεσιών (SDDB). 3.9.5 Επικοινωνία Για να εγκατασταθεί επικοινωνία μεταξύ των συσκευών πρέπει να χρησιμοποιήσουμε το πρωτόκολλο RFCOMM με τη βοήθεια του Προφίλ Σειριακής Θύρας (SPP). Αφού θέσουμε τον εξυπηρέτη σε κατάσταση ανακάλυψης (discoverable mode) και καταχωρηθούν οι υπηρεσίες του, τότε αυτός είναι έτοιμος για επικοινωνία. Για την 31
έναρξη επικοινωνίας ο εξυπηρέτης δημιουργεί ένα StreamConnectionNotifier αντικείμενο. Το αντικείμενο αυτό χρησιμεύει στη δημιουργία ενός StreamConnection αντικειμένου το οποί με τη σειρά του χρησιμεύει στην αποδοχή συνδέσεων με εξαρτημένες συσκευές. Στη συνέχεια αφού η εξαρτημένη συσκευή έχει εκτελέσει ανακάλυψη συσκευής και υπηρεσιών, μπορεί να αρχίσει η επικοινωνία. Αυτό υλοποιείται με τη δημιουργία μίας σύνδεσης ροής (stream connection) προς τον εξυπηρέτη με χρήση του URL που ανακτήθηκε από την καταχώρηση υπηρεσίας. Πιο κάτω μπορούμε να δούμε τη λειτουργία ενός Bluetooth Midlet με χρήση διεπαφών και κλάσεων: <<διεπαφή>> DiscoveryListener <<κλάση>> <<διεπαφή>> RemoteDevice StreamConnection <<διεπαφή>> StreamConnectionNotifier Bluetooth (JSR-82) MIDLET <<διεπαφή>> ServiceRecord <<κλάση>> LocalDevice <<κλάση>> DiscoveryAge Εικόνα 9. Ανατομία ενός Bluetooth Midlet 32
4 Περιορισμοί Συσκευής και Σχεδίαση 4.1 Περιορισμοί συσκευής Είναι πολύ σοβαρό πριν την ανάπτυξη και υλοποίηση της εφαρμογής μας να λάβουμε υπόψη τους περιορισμούς της συσκευής στην οποία πρόκειται να τρέξουμε την εφαρμογή. Είναι προφανές το γεγονός ότι κάθε κατασκευαστής προσπαθεί να κατασκευάσει όσο πιο καλά και δημιουργικά γίνεται τα προϊόντα του. 4.1.1 Περιορισμός Οθόνης Ένας κύριος παράγοντας, που θα πρέπει οπωσδήποτε να ληφθεί υπόψη κατά τη διάρκεια εγγραφής του Java κώδικα, είναι τα όρια οθόνης που διαθέτει η συσκευή. Θα πρέπει να λάβουμε υπόψη ότι το μέγεθος της οθόνης είναι διαφορετικό σχεδόν σε κάθε κινητό τηλέφωνο καθώς επίσης και οι γραμματοσειρές και τα χρώματα της οθόνης. Με χρήση των διάφορων μεθόδων που παρέχονται από την κλάση Display μπορούμε να ελέγξουμε τον τρόπο εμφάνισης κάθε αντικειμένου την οθόνη μας και να διασφαλίσουμε ότι όλα τα επιθυμητά δεδομένα εξόδου θα είναι ορατά στον χρήστη. 4.1.2 Περιορισμός Μνήμης Η έλλειψη μνήμης είναι ακόμα ένα πρόβλημα το οποίο θα πρέπει να αντιμετωπίσουμε κατά την ανάπτυξη της εφαρμογής μας. Όπως έχει αναφερθεί σε προηγούμενη ενότητα, στις συσκευές όπου χρησιμοποιείται CLDC διαμόρφωση η διαθέσιμη μνήμη είναι από 128kb έως 512kb. Για το λόγο αυτό θα πρέπει να είμαστε πολύ προσεκτικοί σε ότι αφορά τον τρόπο υλοποίησης του κώδικά μας, έτσι ώστε να μην υπερφορτώσουμε τον καταχωρητή μνήμη (buffer), διαφορετικά η εφαρμογή μας δε θα μπορεί να λειτουργήσει. 4.1.3 Αλληλεπίδραση Χρήστη Κάθε αγοραστής κινητής συσκευής απαιτεί και περιμένει η συσκευή που θα αγοράσει να διαθέτει λογισμικό με φιλικό περιβάλλον προς το χρήστη. Είναι πολύ σημαντικό οποιαδήποτε εφαρμογή που προορίζεται είτε για έμπειρους είτε για άπειρους χρήστες να μπορεί να διαχειριστεί εύκολα και αποδοτικά. 33
Ευκολία κατανόησης: Η εφαρμογή δεν πρέπει να έχει μεγάλο βαθμό πολυπλοκότητας έτσι ώστε ο χρήστης να μπορεί εύκολα να έχει πρόσβαση σε αυτήν. Επομένως θα επιδιώξουμε η εφαρμογή μας να διαθέτει μεγάλο βαθμό κατανόησης ενώ παράλληλα θα λάβουμε υπόψη τη χειρότερη περίπτωση κατά την οποία υποθέτουμε ότι ο χρήστης δεν έχει ιδέα πως ένα κινητό τηλέφωνο λειτουργεί. Ευχρηστία: Αφού οργανώσουμε μία κατανοητή εφαρμογή, το επόμενο βήμα είναι αυτή να διακρίνεται και από όσο το δυνατό υψηλότερο βαθμό ευχρηστίας. Θα πρέπει επομένως να επιδιώξουμε τη δημιουργία μενού και κουμπιών που να προσφέρουν εύκολη πρόσβαση και καθοδήγηση στο χρήστη από το ένα στάδιο στο επόμενο. Ταχύτητα και Αποδοτικότητα: Πέρα από εύκολη κατανόηση και ευχρηστία η εφαρμογή θα πρέπει να διαθέτει αποδοτικότητα και ταχύτητα χρήσης. Μερικές φορές η παρουσία πολλών μενού και επεξηγηματικών πληροφοριών στέκονται εμπόδιο στη γρήγορη και ουσιαστική χρήση μίας εφαρμογής. Επομένως πρέπει να επιδιώξουμε η εφαρμογή να είναι πρώτα απ όλα αποδοτική και λειτουργική και παράλληλα να παρέχει μία ουσιαστική αλληλεπίδραση με τον χρήστη. 4.2 Σχεδίαση Στην προηγούμενη ενότητα έγινε μία συνοπτική επεξήγηση για τον τρόπο λειτουργίας του προτύπου Bluetooth. Στο υπόλοιπο της ενότητας αυτής ακολουθεί μία λεπτομερής επεξήγηση σχετικά με την Bluetooth Διεπαφή Προγραμματισμού Εφαρμογής (API) και του τρόπου σύνδεσης των επιμέρους κομματιών της εφαρμογής μου. 34
4.2.1 Bluetooth και Γενικό Πλαίσιο Σύνδεσης (Generic Connection Framework) Αρχικά το Γενικό Πλαίσιο Σύνδεσης (Generic Connection Framework, GCF) [18] ορίστηκε για τη διαμόρφωση Connected Limited Device Configuration (CLDC) στις πλατφόρμες J2ME s. Το GFC χρησιμοποιείται για την εγκατάσταση σύνδεσης και για τη διεξαγωγή λειτουργιών Εισόδου/Εξόδου (I/O). Πιο κάτω φαίνεται η υλοποίηση του Bluetooth και του Γενικού Πλαισίου Σύνδεσης (GCF): <<διεπαφή>> Connection << διεπαφή >> << διεπαφή >> << διεπαφή >> << διεπαφή >> DatagramConnection InputConnection OuputConnection StreamConnectionNotifier extends extends <<κλάση>> << διεπαφή >> ConnectionNotFoundException StreamConnection extends << διεπαφή >> ContentConnection <<κλάση>> Connector (Connection Factory) << διεπαφή >> Datagram Εικόνα 10. Bluetooth και Γενικό Πλαίσιο Σύνδεσης (Generic Connection Framework) 35
Connector <<κλάση>>: Η κλάση αυτή χρησιμοποιείται για τη δημιουργία νέων αντικειμένων Σύνδεσης και υποστηρίζει τα προφίλ σύνδεσης RFCOMM και OBEX. Μέθοδοι της κλάσης javax.microedition.io.connector: Οι μέθοδοι που ακολουθούν έχουν χρησιμοποιηθεί στην εφαρμογή μου και περιγράφονται σύντομα πιο κάτω: open(): Δημιουργεί και ανοίγει μία σύνδεση. Επιστρέφει ένα νέο αντικείμενο Σύνδεσης (Connection object). java.io.dataoutputstream - opendataoutputstream(): Δημιουργεί και ανοίγει μία σύνδεση ροής εξόδου. Επιστρέφει δεδομένα ροής εξόδου(dataoutputstream). java.io.datainputstream - opendatainputstream(): Δημιουργεί και ανοίγει μία σύνδεση ροής εισόδου. Επιστρέφει δεδομένα ροής εισόδου (DataInputStream). java.io.outputstream - openoutputstream(): Δημιουργεί και ανοίγει μία σύνδεση ροής εξόδου. Επιστρέφει μία ροή εξόδου (OutputStream). java.io.inputstream - openinputstream(): Δημιουργεί και ανοίγει μία σύνδεση ροής εισόδου. Επιστρέφει μία ροή εισόδου (InputStream). StreamConnectionNotifier<<διεπαφή>>: Επιστρέφει τη σύνδεση ροής ενός αντικειμένου στην πλευρά του εξυπηρέτη. Περιέχει μόνο τη μέθοδο acceptandopen() η οποία περιμένει και ανοίγει εισερχόμενες σύνδεσης ροής. acceptandopen(): Επιστρέφει ένα αντικείμενο StreamConnection object που αναπαριστά μία θύρα σύνδεσης (socket connection) στην πλευρά του εξυπηρέτη. StreamConnection <<διεπαφή>>: Είναι η συνολική διεπαφή και των δύο τύπων συνδέσεων, εισόδου και εξόδου. java.io.datainputstream - opendatainputstream(): Δημιουργεί και ανοίγει μία σύνδεση ροής εισόδου. Επιστρέφει δεδομένα ροής εισόδου (DataInputStream). 36
java.io.inputstream - openinputstream(): Δημιουργεί και ανοίγει μία σύνδεση ροής εισόδου. Επιστρέφει μία ροή εισόδου (InputStream). 4.2.2 Απαιτήσεις Απαιτήσεις Εφαρμογής: Κύρια Συσκευή (Master) ή Εξυπηρέτης (Server) : Είναι υπεύθυνη για τη δημιουργία μίας Bluetooth σύνδεσης σε ένα μικροδίκτυο και να δέχεται δεδομένα μέσω της σύνδεσης αυτής. Ο χρήστης της κύριας συσκευής είναι ικανός: Να αποδέχεται την εγκατάσταση Bluetooth σύνδεσης με εξαρτημένες συσκευές που επιθυμούν να συνδεθούν μαζί του. Να βλέπει τα ονόματα των εξαρτημένων συσκευών με τις οποίες διατηρεί κάποια Bluetooth σύνδεση. Να βλέπει τα εισερχόμενα πακέτα δεδομένων που δέχεται από κάποιαν εξαρτημένη συσκευή και να τα απαριθμεί. Να διακόψει οποιαδήποτε υπάρχουσα Bluetooth σύνδεση με εξαρτημένη συσκευή. Η κύρια συσκευή θα πρέπει να είναι ικανή: Να δημιουργεί συνδέσεις Bluetooth για ανταλλαγή δεδομένων. Να δημοσιεύει υπηρεσίες. Να αναμένει και να διαχειρίζεται συνδέσεις Bluetooth από εξαρτημένες συσκευές. Να διαχειρίζεται οποιεσδήποτε εξαιρέσεις (exceptions) προκύψουν. Να χρησιμοποιεί ειδοποιήσεις (Alerts). 37
Εξαρτημένη συσκευή (Slave) ή Πελάτης (Client): Είναι υπεύθυνος για τη δημιουργία Bluetooth σύνδεσης σε ένα μικροδίκτυο και για την αποστολή πακέτων δεδομένων μέσω της σύνδεσης αυτής. Ο χρήστης εξαρτημένης συσκευής είναι ικανός: Να εκτελεί αναζήτηση κάποιας κύριας συσκευής. Να θέτει το χρόνο προσομοίωσης αποστολής πακέτων, το μέγεθος του buffer και το μήκος των προς αποστολή πακέτων. Να θέτει το φόρτο (load) εργασίας, ο οποίος καθορίζει τον αριθμό των πακέτων δεδομένων που θα δημιουργηθούν, για αποστολή. Να βλέπει τα στατιστικά στοιχεία μετά το πέρας της προσομοίωσης. Η εξαρτημένη συσκευή θα πρέπει να είναι ικανή: Να εντοπίζει παραπλήσιες (κύριες) συσκευές και τις υπηρεσίες που αυτές προσφέρουν. Να ζητάει άδεια δημιουργίας σύνδεσης Bluetooth με τις συσκευές αυτές. Να διαχειρίζεται οποιεσδήποτε εξαιρέσεις (exceptions) προκύψουν. Να χρησιμοποιεί ειδοποιήσεις (Alerts). 38
4.2.3 Περιπτώσεις Χρήσης (Use Cases) Εφαρμογής Τα διαγράμματα Περιπτώσεων Χρήσης (Use Case Diagrams) δημιουργήθηκαν με τη βοήθεια της Ενοποιημένης Γλώσσας Μοντελοποίησης (Unified Model Language, UML) [19] και παρέχουν ένα πιο πρακτικό τρόπο κατανόησης της αλληλεπίδρασης μεταξύ χρήστη και των μεθόδων/συναρτήσεων που εμπεριέχονται στην εφαρμογή. Γενική Περίπτωση Χρήσης: Με την εκκίνηση του προγράμματος ο χρήστης έχει δύο επιλογές. Εάν επιθυμεί μπορεί να επιλέξει την έξοδό του από το πρόγραμμα. Εικόνα 11. Γενική Περίπτωση Χρήσης Χρήστη-Εφαρμογής Περίπτωση Χρήσης Κύριας Συσκευής/Εξυπηρέτη: Όταν ο χρήστης τρέξει την εφαρμογή σαν εξυπηρέτης/κύρια συσκευή, μπορεί να επιλέξει αν θα επιτραπεί η δημιουργία Bluetooth σύνδεσης ή όχι. Στην περίπτωση επιλογής δημιουργίας Bluetooth σύνδεσης, ο χρήστης μπορεί να παρακολουθεί τα ονόματα όλων των εξαρτημένων συσκευών/πελατών με τις οποίες είναι συνδεδεμένος, όπως και τα πακέτα δεδομένων που λαμβάνει από αυτές. Εικόνα 12. Περίπτωση Χρήσης Κύριας Συσκευής/Εξυπηρέτη κατά τη δημιουργία Bluetooth σύνδεσης 39
Περίπτωση Χρήσης Εξαρτημένης Συσκευής/Πελάτη: Στην περίπτωση που ο χρήστης εκτελεί την εφαρμογή ως εξαρτημένη συσκευή/πελάτης, μπορεί να αναζητήσει παραπλήσιες συσκευές και να επιλέξει αν θα εγκαταστήσει σύνδεση Bluetooth με αυτές ή όχι. Εικόνα 13. Περίπτωση Χρήσης Εξαρτημένης Συσκευής/Πελάτη κατά τη δημιουργία Bluetooth σύνδεσης Αφού ο χρήστης-πελάτης εγκαταστήσει μία Bluetooth σύνδεση με τον Εξυπηρέτη, μπορεί να θέσει τις τιμές σε συγκεκριμένες μεταβλητές ώστε να αρχίσει η προσομοίωση αποστολής πακέτων δεδομένων προς τον Εξυπηρέτη. Εικόνα 14. Περίπτωση Χρήσης αλληλεπίδρασης του χρήστη ως Πελάτης με τις μεταβλητές της εφαρμογής 40
4.2.4 Διαγράμματα Ακολουθίας (Sequence Diagrams) Εφαρμογής Ένα διάγραμμα ακολουθίας χρησιμοποιείται για την απεικόνιση μιας συνεργασίας μεταξύ αντικειμένων. Τα διαγράμματα ακολουθίας μπορούν να χρησιμοποιηθούν κατά τη διάρκεια της φάσης σχεδίασης, ώστε να εξαχθούν οι αλληλεπιδράσεις μεταξύ των αντικειμένων της εφαρμογής. Διάγραμμα Ακολουθίας Κύριας Συσκευής/Εξυπηρέτη : Το διάγραμμα ακολουθίας Εξυπηρέτη απεικονίζει της Υπηρεσιών (Service Registration). Bluetooth σύνδεσης, γνωστής και ως Καταχώρηση Εικόνα 15. Υλοποίηση Εξυπηρέτη για Καταχώρηση Υπηρεσιών (Διαδικασία Bluetooth) 41