Σχεδίαση Συστήματος για τον Απομακρυσμένο Έλεγχο DSP Εφαρμογών Μέσω Android

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Σχεδίαση Συστήματος για τον Απομακρυσμένο Έλεγχο DSP Εφαρμογών Μέσω Android"

Transcript

1 Μεταπτυχιακή Διπλωματική Εργασία Σχεδίαση Συστήματος για τον Απομακρυσμένο Έλεγχο DSP Εφαρμογών Μέσω Android ΒΑΣΙΛΑΣ ΓΕΩΡΓΙΟΣ Ηλεκτρολόγος Μηχ. και Τεχν. Η/Υ (AM: 158) Επιβλέπων: Ε. Ζυγούρης Αναπλ. Καθηγητής ΔΠΜΣ: Ηλεκτρονική και Επεξεργασία της Πληροφορίας ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ, ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΠΑΤΡΑ, ΙΟΥΛΙΟΣ 2017

2

3 Μεταπτυχιακή Διπλωματική Εργασία Σχεδίαση Συστήματος για τον Απομακρυσμένο Έλεγχο DSP Εφαρμογών Μέσω Android System Design for Remote Control of DSP Applications Through Android ΒΑΣΙΛΑΣ ΓΕΩΡΓΙΟΣ Ηλεκτρολόγος Μηχ. και Τεχν. Η/Υ (AM: 158) Εγκρίθηκε από την τριμελή εξεταστική επιτροπή την 4 η Ιουλίου 2017 στα πλαίσια του ΔΠΜΣ Ηλεκτρονική και Επεξεργασία της Πληροφορίας Ευάγγελος Ζυγούρης Αναπληρωτής Καθηγητής Τμήμα Φυσικής Παν/μιο Πατρών Κωνσταντίνος Ψυχαλίνος Καθηγητής Τμήμα Φυσικής Παν/μιο Πατρών Δημήτριος Μπακάλης Επίκουρος Καθηγητής Τμήμα Φυσικής Παν/μιο Πατρών Πάτρα, Ιούλιος 2017

4

5 Αφιερώνεται στον καθηγητή μου Δρa Ευάγγελο Ζυγούρη για την αμέριστη εμπιστοσύνη και συμπαράσταση που μου έδειξε καθ όλη τη διάρκεια των σπουδών μου

6

7 Ευχαριστίες Πριν την παρουσίαση των αποτελεσμάτων της παρούσας διπλωματικής εργασίας, αισθάνομαι την υποχρέωση και χαρά να ευχαριστήσω τους ανθρώπους που γνώρισα, συνεργάστηκα μαζί τους και συνέβαλλαν καθοριστικά στην πραγματοποίησή της. Αρχικά θέλω να ευχαριστήσω τον επιβλέποντα καθηγητή της διπλωματικής εργασίας, Δρα Ευάγγελο Ζυγούρη για την πολύτιμη καθοδήγηση του, την εμπιστοσύνη και τη βοήθεια καθ όλη τη διάρκεια των σπουδών μου. Στη συνέχεια, θα ήθελα να ευχαριστήσω θερμά τον Δρα Αθανάσιο Καλατζόπουλο, για την βοήθεια και υποστήριξη, τις καίριες επισημάνσεις και συμβουλές του για την εκπόνηση της παρούσας εργασίας. Επίσης, θέλω να εκφράσω τις ευχαριστίες μου στους καθηγητές Δρα Κωνσταντίνο Ψυχαλίνο και Δρα Δημήτριο Μπακάλη που δέχτηκαν να είναι μέλη της τριμελούς επιτροπής αξιολόγησης. Τέλος, θέλω να ευχαριστήσω τη σύντροφο μου Ιλιάδα, για τη συμπαράσταση και την ενθάρρυνση που μου έδωσε σε όλη τη διάρκεια των μεταπτυχιακών σπουδών μου. vii

8 viii

9 Introduction The subject of this master thesis is the design and the implementation of a system for remote control of a DSP from a smartphone running android OS. The system consists of TMS320C6C713 DSK board which is based on the Texas Instruments TMS320C6713 DSP, daughtercard Bitec DSK- EYE Gigabit with the 5.2 Megapixel Omnivision OV5610 camera module and an LG G3 smartphone running Android 5.0 OS. The communication between DSP and smartphone is performed through TCP/IP protocol. The DSP is connected with a router through ethernet and the router is connected with the smartphone through Wi-Fi. A TCP/IP server is implemented in the DSP and a TCP/IP client is implemented in the smartphone. The user of the smartphone may request the DSP to capture an image or to apply an image processing algorithm (on an image that has already been captured and it is buffered on the DSP). When DSP performs the relevant actions, it sends the data to the smartphone. The user can display the received images on the phone, store or delete them. The stracture of this document allows the familirization of the reader with the android environment. The reader will be able to build a new application or to enhance the current project. For this reason, there are a lot of references to websites for further explanation on basic elements of the android OS. The first chapter is an introduction to the android world, presenting the basic components of the operating system. Additionally, there is a short introduction in the Android Studio. The second chapter presents Android Studio. A basic project on the android is built, providing several aspects of the android environment like activites, view system, application layout, android manifest etc. The third chapter refers to the DSP part of the system. The architecture of TMS320C6713 DSK card and the connection with DSK-EYE Gigabit daughtercard are presented. In the fourth chapter, the implementation of android application is provided. The activities, the view system, the libraries of the application are analyzed. Additionally, there are a lot of examples on troubleshooting or on usage of debugging tools like network analyzers or logcat. In the fifth chapter, the implementation of the DSP application is presented. The DSP project is analyzed. Additionally, flowcharts are provided, showing the communication between DSP and the smartphone. Finally, in chapter six the deployment of the whole system and the conclusion are presented, as well as, the issues that are faced during development and ideas for further improvement. ix

10 x

11 Πρόλογος Η παρούσα Μεταπτυχιακή Διπλωματική Εργασία εκπονήθηκε στα πλαίσια του Διατμηματικού Προγράμματος Μεταπτυχιακών Σπουδών Ειδίκευσης Ηλεκτρονική και Επεξεργασία της Πληροφορίας στο Τμήμα Φυσικής του Πανεπιστημίου Πατρών. Αντικείμενο της εργασίας αποτελεί η σχεδίαση και ανάπτυξη συστήματος για την επικοινωνία και ανταλλαγή δεδομένων μεταξύ κινητού τηλεφώνου που χρησιμοποιεί το λειτουργικό σύστημα android και του επεξεργαστή ψηφιακού σήματος Digital Signal Processor (DSP) TMS320C6713 με την κάρτα DSK-EYE gigabit. Στο κινητό τηλέφωνο υλοποιείται TCP πελάτης (client) που συνδέεται με τον TCP εξυπηρετητή (server) στο DSP. Ο χρήστης, μέσω του κινητού, ζητά την λήψη εικόνων από τον DSP και στη συνέχεια, την εφαρμογή κάποιου αλγορίθμου επεξεργασίας εικόνας. Ο DSP επεξεργάζεται τα μηνύματα που λαμβάνει από το κινητό και αποστέλλει τα ανάλογα δεδομένα. Όταν το κινητό λάβει τις εικόνες, ο χρήστης έχει τη δυνατότητα να τις αποθηκεύσει ή να τις προβάλει στο κινητό του. Το κινητό επικοινωνεί με τον DSP, μέσω ethernet - wifi με χρήση του TCP / IP πρωτοκόλλου. Η δομή της εργασίας επιτρέπει την εξοικείωση με το λειτουργικό σύστημα android και προσφέρει τα εργαλεία εκείνα, ώστε ο αναγνώστης να μπορέσει να αναπτύξει τη δικιά του εφαρμογή ή να επεκτείνει τις δυνατότητες της παρούσας. Για το λόγο αυτό γίνεται εκτεταμένη αναφορά σε ιστοσελίδες που αναλύουν στοιχεία του λειτουργικού συστήματος android καλύπτοντας τις βασικές του πτυχές. To πρώτο κεφάλαιο αποτελεί την εισαγωγή στον κόσμο του android, όπου παρουσιάζονται τα βασικά δομικά στοιχεία του λειτουργικού αυτού συστήματος. Στη συνέχεια, παρουσιάζεται το περιβάλλον ανάπτυξης εφαρμογών android studio καθώς και οι γλώσσες προγραμματισμού που μπορούν να χρησιμοποιηθούν σε αυτό. Στο δεύτερο κεφάλαιο παρουσιάζεται το android studio και περιγράφεται ο τρόπος ανάπτυξης εφαρμογών android. Παρουσιάζεται το χτίσιμο ενός έργου (project), μέσω του οποίου αναλύονται βασικά δομικά στοιχεία, ώστε ο αναγνώστης να εξοικειωθεί με την ανάπτυξη εφαρμογών στο android studio. Επίσης, γίνεται αναφορά σε ιστοσελίδες και βιβλία που μπορεί να ανατρέξει κανείς, ώστε να ξεκινήσει την ανάπτυξη της εκάστοτε εφαρμογής. Στο τρίτο κεφάλαιο παρουσιάζεται η αρχιτεκτονική του επεξεργαστή ψηφιακού σήματος DSP TMS320C6713 της εταιρείας texas instruments καθώς και της θυγατρικής κάρτας DSKEye gigabit της εταιρείας bitec, που συνδέεται με τον DSP και χρησιμοποιούνται στο σύστημα. Στο τέταρτο κεφάλαιο αναπτύσσεται η εφαρμογή στο android. Παρουσιάζεται το έργο, τα βασικά δομικά του στοιχεία (δραστηριότητες, σύστημα θέασης, βιβλιοθήκες, κλπ.) καθώς και ο κώδικας για την υλοποίηση της εφαρμογής. Επίσης, δίνονται χρήσιμες πληροφορίες ως προς το χτίσιμο ανάλογων εφαρμογών καθώς και πρακτικές για την εύρεση σφαλμάτων. xi

12 Στο πέμπτο κεφάλαιο αναπτύσσεται η εφαρμογή στον DSP. Παρουσιάζεται το έργο καθώς και τα βασικά στοιχεία του κώδικα της εφαρμογής, όπως ο TCP εξυπηρετητής και η επικοινωνία μέσω του TCP πρωτοκόλλου, οι αλγόριθμοι επεξεργασίας εικόνας. Ενώ στο έκτο και τελευταίο κεφάλαιο παρουσιάζεται η συνολική λειτουργία του συστήματος καθώς και τα τελικά συμπεράσματα. xii

13 Περιεχόμενα Ευχαριστίες... vii Introduction... ix Πρόλογος... xi Περιεχόμενα... xiii Λίστα Εικόνων... xvii Λίστα Πινάκων... xxi Λίστα Στοιχείων Κώδικα... xxiii Κεφάλαιο Εισαγωγή στο Android Εισαγωγή Ο Κόσμος του Android Τα Δομικά Στοιχεία του Android Εφαρμογές (Applications) To Πλαίσιο Λειτουργίας του Android (Application Framework) Οι Βασικές Βιβλιοθήκες του Android (Android Libraries) To Περιβάλλον Εκτέλεσης των Εφαρμογών (Android Runtime) Το Περιβάλλον Ανάπτυξης Εφαρμογών στο Android Το Android Studio Eclipse Android Development Tools Οι Γλώσσες Προγραμματισμού για το Android Περιβάλλον Κεφάλαιο Παρουσίαση του Android Μέσω Βασικών Εφαρμογών Εισαγωγή Εγκατάσταση του Android Studio Το Σύστημα Εγκατάστασης του Android Studio Εγκατάσταση της Java SDK Εγκατάσταση του Android Studio σε Windows H Βασική Εφαρμογή - Hello World xiii

14 2.3.1 Δημιουργία Νέου Έργου Η Δομή του Έργου Η Βασική Δραστηριότητα Διάταξη Βασικής Εμφάνισης To Μανιφέστο Χτίσιμο Έργου Εκτέλεση Εφαρμογής Η Δραστηριότητα Τα Στοιχεία Διεπαφής του Χρήστη Η Διάταξη Το Σύστημα θέασης Τα Στοιχεία Ελέγχου Εισόδου Τα Γεγονότα Εισόδου (Input Events) Οι Ανιχνευτές Γεγονότων Το Μενού Το Μενού Επιλογών Το Μενού Επιλογών Στοιχείου Το Αναδυόμενο Μενού Στοιχείου Οι Αναδυόμενες Ειδοποιήσεις Η Καταγραφή Μηνυμάτων Κεφάλαιο Σχεδίαση, Διασύνδεση και Προγραμματισμός του DSP Εισαγωγή O Επεξεργαστής Ψηφιακού Σήματος (DSP) Η Κάρτα DSK TMS320C Γενική Περιγραφή Ο Χάρτης Μνήμης Η Κάρτα DSK-EYE Gigabit ALTERA Cyclone II FPGA Ο Προσαρμογέας Δικτύου Gigabit Ethernet O CMOS Αισθητήρας Εικόνας OV5610 της Omnivision xiv

15 3.4.4 Το Πρωτόκολλο I2C Οι Καταχωρητές του OV H Διασύνδεση Το API του TCP/IP Το API του OV Το API της DSKeye Κεφάλαιο Ανάπτυξη της Εφαρμογής στο Android Εισαγωγή Οι Προδιαγραφές τις Εφαρμογής Η Λειτουργικότητα της Εφαρμογής Η Δομή του Έργου Οι Δραστηριότητες της Εφαρμογής Η Εισαγωγική Οθόνη (SplashScreen) Η Βασική Δραστηριότητα DSP2Android Η Κλάση του TCP Πελάτη Η Κλάση MyCustomAdapter Προβολή Εικόνων Η Δραστηριότητα Επεξεργασίας Αρχείων Λοιπά Στοιχεία τις Εφαρμογής Εικόνες και Εικονίδια Στοιχεία Εμφάνισης Κεφάλαιο Η Εφαρμογή στον DSP Εισαγωγή Οι Προδιαγραφές τις Εφαρμογής Το Έργο στον DSP Αρχική Κατάσταση της Εφαρμογής - O TCP Server στον DSP Λήψη Εικόνας από την Κάμερα Αποστολή Εικόνας στο Κινητό xv

16 5.3.4 Επεξεργασία Εικόνας Κεφάλαιο Συνολική Παρουσίαση Εφαρμογής - Αποτελέσματα - Συμπεράσματα Εισαγωγή Εκτέλεση της Εφαρμογής Συμπεράσματα - Προτάσεις Βιβλιογραφία Παράρτημα I. Ευρετήριο II. Συντομογραφίες xvi

17 Λίστα Εικόνων Εικόνα 1-1 To Πρώτο Android Πρωτότυπο με Πληκτρολόγιο... 2 Εικόνα 1-2 HTC Dream με Οθόνη Αφής και Πληκτρολόγιο... 3 Εικόνα 1-3 Μερίδιο Αγοράς των Λειτουργικών Συστημάτων σε Φορητές Συσκευές... 4 Εικόνα 1-4 Δομικά Στοιχεία του Android... 5 Εικόνα 1-5 Οι Δέκα πιο Δημοφιλείς Κατηγορίες Εφαρμογών σε Android [3]... 6 Εικόνα 1-6 Τυπικό Περιβάλλον του Android Studio Εικόνα 1-7 Τυπικό Eclipse ADT Περιβάλλον Εικόνα 2-1 Παράθυρο Επιβεβαίωσης Ορθής Εγκατάστασης της Java Εικόνα 2-2 Αρχική Οθόνη Εγκατάστασης Εικόνα 2-3 Επιλογή Πακέτων προς Εγκατάσταση Εικόνα 2-4 Όροι Εγκατάστασης Εικόνα 2-5 Επιλογή Τοποθεσίας Εγκατάστασης Εικόνα 2-6 Δημιουργία Συντομεύσεων Εικόνα 2-7 Ολοκλήρωση της Εγκατάστασης Εικόνα 2-8 Αρχική Εικόνα του Android Studio Εικόνα 2-9 Εισαγωγή Παλιότερων Ρυθμίσεων Εικόνα 2-10 Βοηθός Εγκατάστασης Πακέτων Εικόνα 2-11 Επιλογή Ρυθμίσεων Εικόνα 2-12 Έλεγχος Ρυθμίσεων Εικόνα 2-13 Λήψη Στοιχείων του Android Studio Εικόνα 2-14 Μήνυμα μη Συμβατότητας Επεξεργαστή Εικόνα 2-15 Τελική Οθόνη Εγκατάστασης Εικόνα 2-16 Παράθυρο Προτροπής για Νέες Ενημερώσεις Εικόνα 2-17 Αρχική Εικόνα του Android Studio Εικόνα 2-18 Δημιουργία Νέου Έργου 'Hello World' Εικόνα 2-19 Επιλογή Έκδοσης και Συσκευών Εικόνα 2-20 Λίστα με Διάφορες Μορφές Βασικών Δραστηριοτήτων Εικόνα 2-21 Ρυθμίσεις Βασικής Δραστηριότητας Εικόνα 2-22 Βασική Δομή του Έργου Εικόνα 2-23 Προβολή της Βασικής Οθόνης Εικόνα 2-24 Επιτυχές Χτίσιμο του Έργου HelloWorld Εικόνα 2-25 Δημιουργία Νέας Εικονικής Συσκευής Εικόνα 2-26 Επιλογή Τύπου Εικονικής Συσκευής Εικόνα 2-27 Επιλογή API Εικονικής Συσκευής Εικόνα 2-28 Αποτέλεσμα Εγκατάστασης Εικόνα 2-29 Επιλογή Επιπλέον Ρυθμίσεων της Συσκευή Εικόνα 2-30 Εκτέλεση της Εφαρμογής HelloWorld στην Εικονική Συσκευή Εικόνα 2-31 Εγκατάσταση της Εφαρμογής HelloWorld στο Τηλέφωνο Εικόνα 2-32 Παρουσίαση Εφαρμογής Καταγραφής Εικόνα 2-33 Ανάκτηση Επιλογών Προγραμματιστή Εικόνα 2-34 Ενεργοποίηση Εντοπισμού Σφαλμάτων μέσω USB Εικόνα 2-35 Επιλογή Συσκευής Εικόνα 2-36 Εμφάνιση Πληροφοριών Καταγραφής xvii

18 Εικόνα 2-37 Κύκλος Ζωής μιας Δραστηριότητας Εικόνα 2-38 Ιεραρχία Αντικειμένων Θέασης Εικόνα 2-39 Οθόνη της Απλής Κάθετης Διάταξης Εικόνα 2-40 Κληρονόμηση Ιδιοτήτων στο Σύστημα Θέασης Εικόνα 2-41 Γραμμική Διάταξη Εικόνα 2-42 Αποτέλεσμα Ενδεικτικού Κώδικα Γραμμικής Διάταξης Εικόνα 2-43 Σχετική Διάταξη Εικόνα 2-44 Αποτέλεσμα Ενδεικτικού Κώδικα Σχετικής Διάταξης Εικόνα 2-45 Στοιχεία Ελέγχου Εικόνα 2-46 Μενού Επιλογών Εικόνα 2-47 Μενού Επιλογών Στοιχείου Εικόνα 2-48 Αναδυόμενο Μενού Εικόνα 2-49 Παράδειγμα Αναδυόμενης Ειδοποίησης Εικόνα 3-1 Η Εξέλιξη των TMS Εικόνα 3-2 Μπλοκ Διάγραμμα της TMS320C6713 DSP Εικόνα 3-3 DSK TMS320C6713 της Spectrum Digital Εικόνα 3-4 Διάγραμμα του DSK TMS320C6713 της Spectrum Digital Εικόνα 3-5 Χάρτης Μνήμης του TMS320C6713 και του DSK C Εικόνα 3-6 Κάρτα DSK Eye της Gigabit Εικόνα 3-7 Εσωτερική Διασύνδεση στην DSK-EYE Εικόνα 3-8 Δομή της Βάσης του Συστήματος στο FPGA Εικόνα 3-9 Πυρήνας της DSKeye Εικόνα 3-10 Μπλοκ Διάγραμμα του αισθητήρα OV Εικόνα 3-11 Υποδειγματοληψία Ανάλυσης SXGA Εικόνα 3-12 Υποδειγματοληψία Ανάλυσης VGA Εικόνα 3-13 Υποδειγματοληψία Ανάλυσης HF Εικόνα 4-1 Διάγραμμα Ροής της DSP2Android Εφαρμογής Εικόνα 4-2 Δομή του Βασικού Έργου DSP2Android Εικόνα 4-3 Δομή του Θυγατρικού Έργου ImageViewTouch Εικόνα 4-4 Εισαγωγική Οθόνη της Εφαρμογής Εικόνα 4-5 Η Βασική Οθόνη της Εφαρμογής Εικόνα 4-6 Εμφάνιση του Μενού Εικόνα 4-7 Επικοινωνία Εξυπηρετητή - Πελάτη Εικόνα 4-8 Προβολή Εικόνων Εικόνα 4-9 Προβολή μιας Εικόνας Μεγένθυνση Εικόνα 4-10 Επιτυχές Σβήσιμο Αρχείων Εικόνα 4-11 Επιτυχής Αποθήκευση Εικόνων Εικόνα 4-12 Οι Φάκελοι Minmap και Drawable Εικόνα 4-13 Εικονίδιο της Εφαρμογής Εικόνα 4-14 Στοιχεία Εμφάνισης Εικόνα 5-1 Διάγραμμα Ροής του Προγράμματος στον DSP Εικόνα 5-2 Προτεραιότητες Διακοπών Εικόνα 5-3 Επιλογή Ανάλυσης Εικόνα 5-4 Παρεμβολή RGB Συνιστωσών Εικόνα 5-5 Η BMP Κεφαλίδα Εικόνα 5-6 Η Εικόνα από τον DSP σε RGB xviii

19 Εικόνα 5-7 Επιλογή Αλγορίθμου Εικόνα 5-8 Εφαρμγή του Ασπρόμαυρου Αλγορίθμου Εικόνα 5-9 Το Αρνητικό της Εικόνας Εικόνα 5-10 Εφαρμογή του Extra Solarize Αλγορίθμου Εικόνα 5-11 Οι Πίνακες του Sobel Εικόνα 5-12 Εφαρμογή του Sobel Εικόνα 5-13 Εφαρμογή Εξισορρόπησης Ιστογράμματος Εικόνα 6-1 Το Σύστημα Εικόνα 6-2 Φόρτωση του έργου στο CCS Studio Εικόνα 6-3 Σύνδεση του DSP με το PC Εικόνα 6-4 Φόρτωση του Προγράμματος στο DSP Εικόνα 6-5 Εκκίνηση του Προγράμματος στο DSP Εικόνα 6-6 Εκκίνηση της Εφαρμογής στο Κινητό Εικόνα 6-7 Εναρκτήρια Εικόνα Εικόνα 6-8 Σύνδεση Πελάτη με Εξυπηρετητή στο Κινητό Εικόνα 6-9 Σύνδεση Πελάτη με Εξυπηρετητή στο DSP Εικόνα 6-10 Εντολή για Ανάκτηση Εικόνας Εικόνα 6-11 Λήψη της Εικόνας στο Κινητό Εικόνα 6-12 Λήψη Eικόνας από τον DSP και Αποστολή στο Κινητό Εικόνα 6-13 Προβολή της Εικόνας στο Κινητό Εικόνα 6-14 Εντολή για Επεξεργασία της Εικόνας Εικόνα 6-15 Μετατροπή της Εικόνας στο Αρνητικό και Αποστολή της Εικόνα 6-16 Λήψη της Αρνητικής Εικόνας Εικόνα 6-17 Προβολή Ληφθέντων Εικόνων Εικόνα 6-18 Προβολή Όλων των Ληθφέντων Εικόνων Εικόνα 6-19 Προβολή και Μεγένθυνση μιας Εικόνας Εικόνα 6-20 Διαχείριση Αρχείων xix

20 xx

21 Λίστα Πινάκων Πίνακας 1-1 Εκδόσεις του Android... 3 Πίνακας 2-1 Ποσοστό των Ενεργών Συσκευών που Χρησιμοποιούν την Κάθε Έκδοση του Android Πίνακας 3-1 Εφαρμογές των DSPs Πίνακας 3-2 Η Λειτουργία του DSK Σύμφωνα με τις Τιμές των Διακοπτών Ελέγχου xxi

22 xxii

23 Λίστα Στοιχείων Κώδικα Κώδικας 2-1 Βασική Δραστηριότητα της Hello World Εφαρμογής Κώδικας 2-2 Εμφάνιση της Hello World Εφαρμογής Κώδικας 2-3 Το Μανιφέστο της Εφαρμογής Κώδικας 2-4 Απλή Κάθετη Διάταξη σε Ένα Αρχείο XML Κώδικας 2-5 Ενδεικτικός Κώδικας Γραμμικής Διάταξης Κώδικας 2-6 Ενδεικτικός Κώδικας Σχετικής Διάταξης Κώδικας 2-7 Σύνταξη του Καταγραφέα Μηνυμάτων Κώδικας 4-1 Μανιφέστο SplashScreen Δραστηριότητας Κώδικας 4-2 H Kλάση της Δραστηριότητας SplashScreen Κώδικας 4-3 Εμφάνσιη Δραστριότητας SplashScreen Κώδικας 4-4 Μανιφέστο DSP2Android Δραστηριότητας Κώδικας 4-5 Δραστηριότητα DSP2Android και η Μέθοδος oncreate Κώδικας 4-6 Η Κλάση ConnectTask Κώδικας 4-7 Εμφάνιση του Μενού Κώδικας 4-8 H Mέθοδος oncreateoptionsmenu Κώδικας 4-9 Η Μέθοδος OnPrepareOptionsMenu Κώδικας 4-10 Οι Επιλογές της Μεθόδου onoptionsitemselected Κώδικας 4-11 Επιλογή Request Image του Μενού Κώδικας 4-12 Επιλογή Display Image του Μενού Κώδικας 4-13 Επιλογή Delete Files & Backup Files του Μενού Κώδικας 4-14 Επιλογές Display Image του Μενού Κώδικας 4-15 Επιλογές Exit & Default του Μενού Κώδικας 4-16 Η Μέθοδος Run της Κλάσης TCPClient Κώδικας 4-17 Οι Υπόλοιπες Μέθοδοι της Κλάσης TCPClient Κώδικας 4-18 H Kλάση MyCustomAdapter Κώδικας 4-19 Η Μέθοδος oncreate της DisplayImage Κώδικας 4-20 Η Μέθοδος onclicklistener της DisplayImage Κώδικας 4-21 Η Εμφάνιση της Δραστηριότητας DisplayImage Κώδικας 4-22 Εμφάνιση DisplayOneImage Κώδικας 4-23 Η Δραστηριότητα DisplayOneImage Κώδικας 4-24 Η Μέθοδος DeleteAllFiles Κώδικας 4-25 Η Μέθοδος BackupAllFiles Κώδικας 4-26 XML Αρχείο Λεζαντών Κώδικας 5-1 Η Βασική Συνάρτηση της Εφαρμογής Κώδικας 5-2 Προετοιμασία του TCP Εξυπηρετητή Κώδικας 5-3 Λήψη Εικόνας από την Κάμερα Κώδικας 5-4 Demosaicing - Διαδικασία Παρεμβολής των Εικονοστοιχείων Κώδικας 5-5 Δημιουργία της Κεφαλίδας του BMP Κώδικας 5-6 Αποστολή Πακέτων Εικόνας Κώδικας 5-7 Επιλογή Αλγορίθμου Επεξεργασίας της Εικόνας Κώδικας 5-8 Μετροπή από RGB σε YCbCr Κώδικας 5-9 Μετατροπή από YCbCr σε RGB Κώδικας 5-10 Μετατροπή από RGB σε YCbCr xxiii

24 Κώδικας 5-11 Μετατροπή της Εικόνας στο Αρνητικό Κώδικας 5-12 Ο Extra Solarize Αλγόριθμος Κώδικας 5-13 Ο Αλγόριθμος Sobel Κώδικας 5-14 Αλγόριθμος Εξισσορόπησης Ιστογράμματος xxiv

25 Σ χ ε δ ί α σ η Σ υ σ τ ή μ α τ ο ς γ ι α τ ο ν Α π ο μ α κ ρ υ σ μ έ ν ο Έ λ ε γ χ ο D S P Ε φ α ρ μ ο γ ώ ν Μ έ σ ω A n d r o i d 1 Κεφάλαιο 1 1 Εισαγωγή στο Android 1.1 Εισαγωγή Στο κεφάλαιο αυτό παρουσιάζεται η σπουδαιότητα του λειτουργικού συστήματος android στο χώρο των έξυπνων τηλεφωνικών συσκευών. Γίνεται αναφορά στα δομικά στοιχεία του λειτουργικού αυτού συστήματος, καθώς και στο περιβάλλον ανάπτυξης και προγραμματισμού του. 1.2 Ο Κόσμος του Android Το λειτουργικό σύστημα android αναπτύχθηκε στην Καλιφόρνια των ΗΠΑ, ως ένα ερευνητικό σχέδιο με τεράστιες δυνατότητες στην ανάπτυξη εφαρμογών για κινητές συσκευές,

26 2 Ε ι σ α γ ω γ ή σ τ ο A n d r o i d που θα έχουν τη δυνατότητα γνωρίζοντας τη θέση του χρήστη, να του προσφέρουν άμεσα τις υπηρεσίες που χρειάζεται [1]. Ο αρχικός στόχος των δημιουργών του, ήταν να κατασκευάσουν ένα εξειδικευμένο λειτουργικό σύστημα για ψηφιακές κάμερες. Σύντομα όμως έγινε αντιληπτό ότι η συγκεκριμένη αγορά δεν ήταν αρκετά μεγάλη, οπότε στόχευσαν την ανάπτυξη ενός λειτουργικού συστήματος για smartphone, όπως το symbian ή το windows mobile. Μέχρι το Δεκέμβριο του 2006 οι προθέσεις των κατασκευαστών δεν ήταν ακόμα ξεκάθαρες σε σχέση με τις συσκευές android. Το πρώτο πρωτότυπο έμοιαζε με blackberry συσκευή με QWERTY πληκτρολόγιο [Εικόνα 1-1]. Η εμφάνιση όμως στην αγορά το 2007 του πρώτου iphone με τις καινοτομίες ως προς την οθόνη αφής, ανάγκασε τη google να αλλάξει τις προδιαγραφές του κινητού, προσθέτοντας την οθόνη αφής. Εικόνα 1-1 To Πρώτο Android Πρωτότυπο με Πληκτρολόγιο To 2007 δημιουργήθηκε η open handset alliance, μια κοινοπραξία εταιρειών τεχνολογίας, συμπεριλαμβανομένων κατασκευαστών συσκευών κινητής τηλεφωνίας, παρόχων υπηρεσιών κινητής τηλεφωνίας και κατασκευαστών επεξεργαστών. Βασικός της στόχος ήταν η ανάπτυξη της πρώτης πραγματικά ανοικτής και ολοκληρωμένης πλατφόρμας για κινητές συσκευές [2]. Το πρώτο εμπορικά διαθέσιμο κινητό βασισμένο στο λειτουργικό σύστημα android ήταν το HTC dream [Εικόνα 1-2]. Από το 2008, το λογισμικό του android ανανεώνεται συνεχώς, με κάθε νέα έκδοση του λειτουργικού συστήματος να προσφέρει βελτιώσεις, προσθέτοντας νέες δυνατότητες και λειτουργίες και λύνοντας προβλήματα των προηγούμενων εκδόσεων.

27 Ο Κ ό σ μ ο ς τ ο υ A n d r o i d 3 Η ονομασία των εκδόσεων του android ακολουθεί μια ιδιότυπη ονοματολογία, καθώς βασίζεται στα ονόματα γλυκισμάτων [Πίνακας 1-1]. Εικόνα 1-2 HTC Dream με Οθόνη Αφής και Πληκτρολόγιο Ονομασία Έκδοσης Αριθμός Έκδοσης Ημερομηνία Έκδοσης API Level (none) 1.0 Σεπτέμβριος, (none) 1.1 Φεβρουάριος, Cupcake 1.5 Απρίλιος, Donut 1.6 Σεπτέμβριος, Eclair Οκτώβριος, Froyo Μάιος, Gingerbread Δεκέμβριος, Honeycomb Φεβρουάριος, Ice Cream Sandwich Οκτώβριος, Jelly Bean Ιούλιος, KitKat Οκτώβριος, Lollipop Νοέμβριος, Marshmallow Οκτώβριος, Nougat Αύγουστος, Πίνακας 1-1 Εκδόσεις του Android

28 4 Ε ι σ α γ ω γ ή σ τ ο A n d r o i d Εικόνα 1-3 Μερίδιο Αγοράς των Λειτουργικών Συστημάτων σε Φορητές Συσκευές Το android από τα πρώτα του βήματα, ακολούθησε τις αρχές του ανοιχτού λογισμικού (open source) επιτρέποντας σε προγραμματιστές να πειραματιστούν φτιάχνοντας νέες εφαρμογές. Η δυνατότητα του κάθε προγραμματιστή να μοιραστεί τη δημιουργία του με μια ραγδαία αναπτυσσόμενη παγκόσμια κοινότητα χρηστών, έπαιξε καταλυτικό ρόλο στην επικράτηση του στην παγκόσμια αγορά λειτουργικών συστημάτων για φορητές συσκευές [Εικόνα 1-3]. Οι εφαρμογές αυτές δεν απευθύνονται μόνο σε συσκευές κινητής τηλεφωνίας, αλλά για ένα πλήθος έξυπνων συσκευών, που χρησιμοποιούν το android ως βασικό λειτουργικό σύστημα: Συσκευές επόπτευσης χώρου Οικιακές συσκευές (έξυπνα πλυντήρια, ψυγεία, τηλεοράσεις, Hi-Fi, παιχνιδομηχανές, κλπ.) Mini PCs Φωτογραφικές μηχανές και βιντεοκάμερες Αυτοκίνητα (π.χ. συστήματα πλοήγησης, συστήματα, διασκέδασης) Ρολόγια και άλλα είδη ένδυσης Συστήματα εικονικής ή επαυξημένης πραγματικότητας

29 Τ α Δ ο μ ι κ ά Σ τ ο ι χ ε ί α τ ο υ A n d r o i d Τα Δομικά Στοιχεία του Android Η αρχιτεκτονική του android βασίζεται στο linux. To linux προσεφέρει φορητότητα και ευελιξία, ασφάλεια, δικτύωση, πολύ καλή διαχείριση μνήμης και μεγάλο εύρος ανοιχτών βιβλιοθηκών. Στο παρακάτω σχήμα παρουσιάζονται τα πέντε βασικά δομικά στοιχεία του android. Εικόνα 1-4 Δομικά Στοιχεία του Android Εφαρμογές (Applications) Η δυνατότητα που δίνει το android σε προγραμματιστές να δημιουργήσουν αυτό που φαντάζονται, έδωσε στο λειτουργικό αυτό ένα πλήθος εφαρμογών που εκτείνονται σε πολλά διαφορετικά πεδία από τις κινητές τηλεπικοινωνίες ή τη διασκέδαση, ως τις εφαρμοσμένες επιστήμες. Στο παρακάτω γράφημα [Εικόνα 1-5] παρουσιάζεται το πλήθος των εφαρμογών στις δέκα πιο δημοφιλείς κατηγορίες.

30 6 Ε ι σ α γ ω γ ή σ τ ο A n d r o i d Εικόνα 1-5 Οι Δέκα πιο Δημοφιλείς Κατηγορίες Εφαρμογών σε Android [3] To Πλαίσιο Λειτουργίας του Android (Application Framework) To πλαίσιο λειτουργίας (framework) του android προσφέρει ότι είναι απαραίτητο για την ανάπτυξη μιας εφαρμογής, όπως ειδικά διαμορφωμένες βιβλιοθήκες σε java. Δραστηριότητες (Activities) H δραστηριότητα αποτελεί τη διεργασία, που προσφέρει το χώρο, όπου ο χρήστης μπορεί να αλληλοεπιδράσει με την εφαρμογή, να πάρει τηλέφωνο, να λάβει πληροφορίες, να φωτογραφίσει κλπ. Μια εφαρμογή μπορεί να έχει πολλές δραστηριότητες μεταξύ των οποίων ο χρήστης μπορεί να περιηγηθεί. Η κλάση (java class) δραστηριότητας προσφέρει ένα εύρος λειτουργιών, όπως την εμφάνιση της διεπαφής του χρήστη με τη μηχανή, τη δημιουργία νέων linux διεργασιών (processes), καθώς και την παραχώρηση της μνήμης μεταξύ των δραστηριοτήτων. Διαχειριστής Παραθύρων (Windows Manager)

31 Τ α Δ ο μ ι κ ά Σ τ ο ι χ ε ί α τ ο υ A n d r o i d 7 O διαχειριστής παραθύρων αποτελεί την υπηρεσία του συστήματος, που είναι υπεύθυνη για τη διαχείριση της λίστας παραθύρων (z-ordered list). Καθορίζει την ορατότητα και την εμφάνισή τους στην οθόνη. Επιπλέον, ρυθμίζει το τρόπο εμφάνισης και τον τρόπο μετάβασης των παραθύρων, όταν ανοίγει ή κλείνει η εφαρμογή ή αλλάζει ο προσανατολισμός της οθόνης. Πάροχος Περιεχομένου (Content Provider) O πάροχος περιεχομένου επιτρέπει στην εφαρμογή να αποκτήσει πρόσβαση σε αποθηκευμένα δεδομένα, τα οποία προέρχονται είτε από την ίδια ή από άλλες εφαρμογές. Επίσης, προσφέρει υπηρεσίες ταυτόχρονης πρόσβασης (από διαφορετικές εφαρμογές) και ασφάλειας στα δεδομένα [4]. Σύστημα Θέασης (View System) Το σύστημα θέασης αποτελεί τη βασική μέθοδο για τη δημιουργία της οπτικής διεπαφής χρήστη μηχανής. Διαχειρίζεται μια ορθογώνια περιοχή στην οθόνη, όπου εμφανίζονται τα αποτελέσματα και δίνεται η δυνατότητα στο χρήστη να εκτελέσει τις εντολές του. Τέλος, αποτελεί τη βασική κλάση για τον ορισμό των γραφικών στοιχείων (widgets). Διαχειριστής Πακέτων (Package Manager) O διαχειριστής πακέτων διαχειρίζεται τα πακέτα των εφαρμογών. Προσφέρει υπηρεσίες, όπως η εγκατάσταση / απεγκατάσταση και η αναβάθμιση της εφαρμογής, επίσης δίνει πληροφορίες για την εφαρμογή την ίδια, όπως την έκδοση, το μέγεθός της, την τοποθεσία εγκατάστασής της κλπ. Διαχειριστής Τηλεφωνίας (Telephony Manager) Ο διαχειριστής τηλεφωνίας προσφέρει πληροφορίες στις εφαρμογές που σχετίζονται με τις υπηρεσίες τηλεφωνίας, όπως την τρέχουσα κατάσταση της συσκευής (αν δέχεται κλίση) ή την αλλαγή της (τέλος κλίσης) ή πληροφορίες σε σχέση με τον συνδρομητή.

32 8 Ε ι σ α γ ω γ ή σ τ ο A n d r o i d Διαχειριστής Πόρων (Resource Manager) Ο διαχειριστής πόρων χειρίζεται τους πόρους που χρειάζεται μια εφαρμογή, πχ. μπορεί να παρέχει πρόσβαση σε μια σειρά από εικόνες και αρχεία ήχου ή βίντεο, διάφορα αρχεία σε γλώσσα Extensible Markup Language (XML), τα οποία περιγράφουν τις διατάξεις όπως πακέτα γλωσσών κλπ. Όλα αυτά βρίσκονται αποθηκευμένα σε ειδικούς φακέλους στην εφαρμογή. Σύστημα Τοποθεσίας (Location system) Το σύστημα τοποθεσίας, προσφέρει πληροφορίες στις εφαρμογές γύρω από την πραγματική θέση του χρήστη. Τα δεδομένα αυτά δίνονται από τέσσερις διαφορετικές πηγές όπως: Global Positioning System / Global Navigation Satellite System (GPS / GLONASS) WiFi Positioning System (WPS) Cell ID (πληροφορία από το δίκτυο κινητής τηλεφωνίας) Αισθητήρες (κίνησης, επιτάχυνσης, μαγνητικού πεδίου κλπ.) Σύστημα Ειδοποιήσεων (Notification System) To σύστημα ειδοποιήσεων, πληροφορεί το χρήστη για διάφορα συμβάντα κατά τη χρήση της εφαρμογής. Για παράδειγμα, μπορεί να προσφέρει ένδειξη για χαμηλή στάθμη της μπαταρίας ή για το αποτέλεσμα κάποιας ενέργειας, που δεν είναι άμεσα ορατό Οι Βασικές Βιβλιοθήκες του Android (Android Libraries) Το επόμενο επίπεδο του android περιλαμβάνει τις κεντρικές βιβλιοθήκες του λειτουργικού. Αυτές είναι γραμμένες σε C και C++. Υπάρχουν πολλοί τύποι βιβλιοθηκών, που απευθύνονται σε διαφορετικές συσκευές, που χρησιμοποιούν το λειτουργικό σύστημα android. Μερικές από τις βασικότερες βιβλιοθήκες είναι οι εξής:

33 Τα Δ ο μ ι κ ά Σ τ ο ι χ ε ί α τ ο υ A n d r o i d 9 Media Codec: Προσφέρει διάφορους κωδικοποιητές / αποκωδικοποιητές (codecs), ώστε να υποστηρίζονται διαφορετικές μορφοποιήσεις (formats) για ήχο (πχ. mp3, wav, flac, wma, ogg) για video (mpeg2, mpeg4, x264, h264) για εικόνες (jpeg, png, tiff, raw, bmp) κλπ. SQLite: Αποτελεί τη μηχανή της βάσης δεδομένων και προσφέρει σχεσιακή διαχείριση του συστήματος. WebKit: Είναι η μηχανή περιήγησης και προσφέρει γρήγορη απόδοση της HTML. OpenGL: Συνιστά Αποτελεί τη διεπαφή προγραμματισμού εφαρμογών για την απόδοση δισδιάστατων και τρισδιάστατων γραφικών To Περιβάλλον Εκτέλεσης των Εφαρμογών (Android Runtime) Το περιβάλλον εκτέλεσης android προγραμμάτων βρίσκεται στο ίδιο επίπεδο με τις βασικές βιβλιοθήκες. Μέχρι την έκδοση 4.4 του android χρησιμοποιούνταν η εικονική μηχανή Dalvik (virtual machine), ενώ από την πέμπτη έκδοση και μετά, η Dalvik έχει αντικατασταθεί από την εικονική μηχανή Android RunTime (ART). Και οι δύο εικονικές μηχανές είναι σχεδιασμένες και βελτιστοποιημένες για το android. Η εικονική μηχανή επιτρέπει σε κάθε εφαρμογή, να εκτελείται στη δική της διεργασία, με το δικό της στιγμιότυπο (instance). Σε αντίθεση με την Dalvik, όπου η μεταγλώττιση γίνεται κατά την εκτέλεση της εφαρμογής, η ART πραγματοποιεί τη μεταγλώττιση κατά την εγκατάσταση της εφαρμογής στην συσκευή. Ως αποτέλεσμα, επιτυγχάνεται καλύτερη απόδοση, εφόσον δεν χάνεται χρόνος για να γίνει η μεταγλώττιση του κώδικα όταν εκτελείται η εφαρμογή. Επιπλέον, η ART χρησιμοποιεί βελτιωμένο συλλέκτη σκουπιδιών (garbage collector). Στα μειονεκτήματα της ART είναι ότι απαιτείται περισσότερος χρόνος για να γίνει η εγκατάσταση. Επίσης, ο κώδικας μηχανής, που προκύπτει από τη μεταγλώττιση, είναι μεγαλύτερος σε μέγεθος, οπότε απαιτείται περισσότερος χώρος για την αποθήκευσή του. Το περιβάλλον εκτέλεσης παρέχει, επίσης, μία σειρά από βιβλιοθήκες, που επιτρέπουν στους προγραμματιστές να γράφουν εφαρμογές, χρησιμοποιώντας πολλές από τις κλάσεις, οι οποίες υπάρχουν στην java standard edition.

34 10 Ε ι σ α γ ω γ ή σ τ ο A n d r o i d 1.4 Το Περιβάλλον Ανάπτυξης Εφαρμογών στο Android Τα πιο δημοφιλή περιβάλλοντα ανάπτυξης android λογισμικού είναι: Android Studio Eclipse Android Development Tools Το Android Studio To android studio βασίζεται στο IntelliJ IDEA, το οποίο είναι ένα δημοφιλές περιβάλλον για την ανάπτυξη java εφαρμογών. Το android studio αποτελεί μια βελτιστοποιημένη έκδοση της IDEA, η οποία περιλαμβάνει την android προγραμματιστική εργαλειοθήκη (android Software Development Kit - SDK) καθώς και GUI εργαλεία για την ανάπτυξη των εφαρμογών. Εκτός από το περιβάλλον προγραμματισμού και την εύκολη πρόσβαση σε εργαλεία και βιβλιοθήκες, το android studio προσφέρει δείγματα (templates) κώδικα, διευκολύνοντας τη συγγραφή νέων εφαρμογών και κλάσεων. Ως αποτέλεσμα, η δημιουργία πακέτων του κώδικα είναι αρκετά απλή. To βασικό πλεονέκτημα του android studio και γενικότερα του IntelliJ περιβάλλοντος είναι ότι δημιουργεί ένα πίνακα περιεχομένων με ολόκληρο το πρόγραμμα. Επίσης, κάθε στιγμή, γνωρίζει που βρίσκεται ο χρήστης, καθώς και τις δυνατότητες που έχει, προσφέροντας του ιδέες για νέες προσθήκες ή για βελτιώσεις στον κώδικα. Εργαλεία όπως, η αυτόματη συμπλήρωση (autocompletion), που κάνει προτάσεις για την κλάση ή τη μέθοδο που μπορεί να χρησιμοποιηθεί, κάνει τη συγγραφή του κώδικα αρκετά αποδοτική. Κατά την εύρεση σφαλμάτων στον κώδικα (debugging), παρέχει τη δυνατότητα στο προγραμματιστή να θέσει οποιαδήποτε τιμή επιθυμεί στη μεταβλητή και να αποκτήσει άμεση πρόσβαση στα αποτελέσματα. Όλες αυτές, όμως, οι δυνατότητες έχουν κόστος στην απόδοση του περιβάλλοντος, κάνοντας αρκετά βαριά την ανάπτυξη ακόμα και μιας απλής εφαρμογής. Τέλος, το android studio είναι πια το επίσημο περιβάλλον δημιουργίας android εφαρμογών, καθώς υποστηρίζεται πλήρως από τη google. Σημείωση: Προτείνεται η χρήση του android studio, για την ανάπτυξη εφαρμογών, καθώς υποστηρίζει άμεσα τις τελευταίες εκδόσεις του λειτουργικού συστήματος.

35 Τ ο Π ε ρ ι β ά λ λ ο ν Α ν ά π τ υ ξ η ς Ε φ α ρ μ ο γ ώ ν σ τ ο A n d r o i d 11 Εικόνα 1-6 Τυπικό Περιβάλλον του Android Studio Eclipse Android Development Tools Το Android Development Tools (ADT) περιβάλλον βασίζεται στην eclipse. Η eclipse προσφέρει ένα περιβάλλον αρκετά εύχρηστο, με μεγάλο πλήθος λειτουργιών, που καθιστούν την ανάπτυξη προγραμμάτων αρκετά αποδοτική [Εικόνα 1-7]. To ADT αποτέλεσε για πολλά χρόνια το βασικό περιβάλλον δημιουργίας android εφαρμογών. Παρόλο που δεν αποτελεί πια το επίσημο προγραμματιστικό περιβάλλον, συνεχίζει να ανανεώνεται από την κοινότητα των προγραμματιστών, υποστηρίζοντας την ανάπτυξη εφαρμογών και για τις τελευταίες εκδόσεις του android [5]. Το μεγάλο πλεονέκτημα του ADT είναι το ελαφρύ του περιβάλλον, κάνοντας δυνατή τη χρήση του σε υπολογιστές με μικρές δυνατότητες. Τέλος, η μεγάλη κοινότητα χρηστών έχει δημιουργήσει αρκετά εργαλεία που διευκολύνουν το προγραμματισμό στο περιβάλλον αυτό.

36 12 Ε ι σ α γ ω γ ή σ τ ο A n d r o i d Εικόνα 1-7 Τυπικό Eclipse ADT Περιβάλλον 1.5 Οι Γλώσσες Προγραμματισμού για το Android Περιβάλλον Οι γλώσσες προγραμματισμού που χρησιμοποιούνται στο android λειτουργικό, είναι οι εξής: Java: Η βασική γλώσσα για την ανάπτυξη εφαρμογών, βασίζεται στο android SDK. C++: Χρησιμοποιείται για την ανάπτυξη βιβλιοθηκών, βασίζεται στο android Native Development Kit (NDK). Python, bash, κλπ. Χρησιμοποιούνται στο περιβάλλον δημιουργίας σεναρίων (scripting) / εξέτασης της εφαρμογής (testing).

37 Ο ι Γ λ ώ σ σ ε ς Π ρ ο γ ρ α μ μ α τ ι σ μ ο ύ γ ι α τ ο A n d r o i d Π ε ρ ι β ά λ λ ο ν 13 Εφαρμογές Διεπαφής προγραμματισμού (Application Programming Interface (API)) που χρησιμοποιούνται για δημιουργία android εφαρμογών: Corona: Επιτρέπει τον προγραμματισμό εφαρμογών και για άλλα λειτουργικά συστήματα όπως για iphone ή windows mobile. Βασίζεται στη γλώσσα LUA και στο ανάλογο SDK ενώ για τον προγραμματισμό των γραφικών στοιχείων χρησιμοποιεί c++ Phonegap / Cardova Χρησιμοποιεί την HTML 5, JavaScript, CSS για τη δημιουργία εφαρμογών. Xamarin Βασίζεται στη C# και χρησιμοποιείται για την ανάπτυξη εφαρμογών κατάλληλων για διαφορετικά λειτουργικά συστήματα.

38 14 Ε ι σ α γ ω γ ή σ τ ο A n d r o i d

39 Σ χ ε δ ί α σ η Σ υ σ τ ή μ α τ ο ς γ ι α τ ο ν Α π ο μ α κ ρ υ σ μ έ ν ο Έ λ ε γ χ ο D S P Ε φ α ρ μ ο γ ώ ν Μ έ σ ω A n d r o i d 15 Κεφάλαιο 2 2 Παρουσίαση του Android Μέσω Βασικών Εφαρμογών 2.1 Εισαγωγή Στο κεφάλαιο αυτό αναλύεται το περιβάλλον δημιουργίας εφαρμογών android studio, καθώς και τα βασικά στοιχεία του λειτουργικού συστήματος android. Παρουσιάζεται η εγκατάσταση του περιβάλλοντος. Μέσω μιας βασικής εφαρμογής γίνεται εισαγωγή στον κόσμο του android και στα βασικά στοιχεία κάθε εφαρμογής, όπως η δραστηριότητα (activity), το μανιφέστο (manifest), το σύστημα θέασης, η εμφάνιση (layout), τα στοιχεία ελέγχου εισόδου (input controls), τα μενού, οι αναδυόμενες ειδοποιήσεις (toasts), ώστε ο αναγνώστης να μπορεί να κατανοήσει την εφαρμογή που θα αναλυθεί στο τέταρτο κεφάλαιο.

40 16 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν 2.2 Εγκατάσταση του Android Studio Η συνολική εγκατάσταση του android studio είναι αρκετά απλή διαδικασία, αλλά απαιτεί την παρουσία του χρήστη μέχρι να ολοκληρωθεί. Η διάρκεια της μπορεί να ξεπεράσει τη μία ώρα, καθώς λαμβάνονται αρχεία άνω των δύο GB Το Σύστημα Εγκατάστασης του Android Studio Το android studio, για να λειτουργήσει ομαλά, απαιτεί ένα ισχυρό υπολογιστικό σύστημα [6], του οποίου οι ελάχιστες απαιτήσεις είναι οι εξής: Το σύστημα πρέπει να έχει τουλάχιστον 2 GB RAM, για την ομαλή λειτουργία του android studio συστήνεται η χρήση 8 GB RAM. Ο ελάχιστος χώρος που καταλαμβάνει το android studio στο σκληρό δίσκο είναι 2 GB. Συστήνεται να διατεθούν τουλάχιστον 4 GB. Η ελάχιστη ανάλυση οθόνης για να τρέξει η εφαρμογή είναι 1280 x 800. Για την καλύτερη εμφάνιση του περιβάλλοντος, συστήνεται ανάλυση τουλάχιστον 1920 x Για το γρήγορο χτίσιμο του έργου συστήνεται επεξεργαστής που να υποστηρίζει τις εντολές Intel VT-x, Intel EM64T (Intel 64) και να έχει δυνατότητα εκτέλεσης Execute Disable (XD) Bit λειτουργιών. Το android studio υποστηρίζεται από τα τρία βασικά λειτουργικά συστήματα [6]: Windows (7/8/8.1/10) 32 & 64 bit. Mac OS X ή νεότερο. Linux GNOME ή KDE: Ubuntu 12.04, με εγκατεστημένο το precise pangolin (64-bit έκδοση κατάλληλη να εκτελεί 32-bit εφαρμογές) με GNU C Library (glibc) 2.11 ή νεότερη Εγκατάσταση της Java SDK 8 To android studio βασίζεται στην java SDK 8. Η λήψη της τελευταίας έκδοσης γίνεται από τον ιστότοπο της oracle [7]. Όταν ληφθεί το ανάλογο αρχείο, ακολουθεί η εγκατάστασή της. Αφού εγκατασταθεί η java, συστήνεται να γίνει έλεγχος σωστής εγκατάστασης στο παρακάτω site:

41 Ε γ κ α τ ά σ τ α σ η τ ο υ A n d r o i d S t u d i o 17 Εικόνα 2-1 Παράθυρο Επιβεβαίωσης Ορθής Εγκατάστασης της Java Εγκατάσταση του Android Studio σε Windows 10 Αρχικά, γίνεται λήψη της πιο πρόσφατης έκδοσης του android studio από τον επίσημο ιστότοπο [8]. Όταν ολοκληρωθεί η λήψη, ακολουθεί η εκτέλεση του ληφθέντος αρχείου ώστε να ξεκινήσει η εγκατάσταση. Συστήνεται πριν την εγκατάσταση, να μειωθεί το επίπεδο προστασίας του προγράμματος προστασίας από ιούς, καθώς, αν είναι αρκετά υψηλό, μπορεί να αποτρέψει την σωστή εγκατάσταση του android studio. Στη συνέχεια, επιλέγονται τα στοιχεία προς εγκατάσταση [Εικόνα 2-4]. Συνίσταται η επιλογή των προτεινόμενων ρυθμίσεων. Στο επόμενο παράθυρο, γίνεται η αποδοχή των όρων εγκατάστασης [Εικόνα 2-5]. Ακολουθεί η επιλογή της τοποθεσίας εγκατάστασης [Εικόνα 2-6].

42 18 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-2 Αρχική Οθόνη Εγκατάστασης Εικόνα 2-3 Επιλογή Πακέτων προς Εγκατάσταση

43 Ε γ κ α τ ά σ τ α σ η τ ο υ A n d r o i d S t u d i o 19 Εικόνα 2-4 Όροι Εγκατάστασης Εικόνα 2-5 Επιλογή Τοποθεσίας Εγκατάστασης Στη συνέχεια, δημιουργούνται οι ανάλογες συντομεύσεις για την εκκίνηση της εφαρμογής [Εικόνα 2-6]. Αν η εγκατάσταση είναι επιτυχής, εμφανίζεται η τελική εικόνα [Εικόνα 2-7].

44 20 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-6 Δημιουργία Συντομεύσεων Εικόνα 2-7 Ολοκλήρωση της Εγκατάστασης Αφού ολοκληρωθεί η εγκατάσταση [Εικόνα 2-7], η εκκίνηση της εφαρμογής γίνεται από το μενού έναρξης. Στην παρακάτω εικόνα [Εικόνα 2-8], φαίνεται η αρχική οθόνη του android studio.

45 Ε γ κ α τ ά σ τ α σ η τ ο υ A n d r o i d S t u d i o 21 Εικόνα 2-8 Αρχική Εικόνα του Android Studio Εικόνα 2-9 Εισαγωγή Παλιότερων Ρυθμίσεων Κατά την πρώτη εκτέλεση της εφαρμογής, δίνεται η δυνατότητα εισαγωγής ρυθμίσεων από παλιότερη εγκατάσταση του android studio [Εικόνα 2-9]. Στη συνέχεια, γίνεται εκκίνηση του βοηθού εγκατάστασης [Εικόνα 2-10] (σε κάθε δημιουργία νέου έργου (project), μπορεί να γίνει εκκίνηση του συγκεκριμένου εργαλείου), για την επιλογή πακέτων που αφορούν τον τύπο των συσκευών που θα εγκατασταθούν οι εφαρμογές. Για παράδειγμα, εφαρμογές για ένα έξυπνο ρολόι χειρός με android χρησιμοποιούν διαφορετική προγραμματιστική βιβλιοθήκη από εφαρμογές που θα εγκατασταθούν σε ένα κινητό τηλέφωνο. Στην επόμενη οθόνη [Εικόνα 2-11], ο χρήστης επιλέγει τον τύπο ρυθμίσεων που επιθυμεί. Προτείνεται, αρχικά, να επιλεχθούν οι προκαθορισμένες ρυθμίσεις. Ο βοηθός εγκατάστασης, στη συνέχεια, θα κατεβάσει τα κατάλληλα στοιχεία [Εικόνα 2-12], θα τα αποσυμπιέσει και θα τα προετοιμάσει για χρήση [Εικόνα 2-13].

46 22 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-10 Βοηθός Εγκατάστασης Πακέτων Εικόνα 2-11 Επιλογή Ρυθμίσεων

47 Ε γ κ α τ ά σ τ α σ η τ ο υ A n d r o i d S t u d i o 23 Εικόνα 2-12 Έλεγχος Ρυθμίσεων Εικόνα 2-13 Λήψη Στοιχείων του Android Studio

48 24 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Αν ο υπολογιστής δεν έχει intel επεξεργαστή, τότε θα εμφανιστεί το παρακάτω μήνυμα [Εικόνα 2-14]. Οι επιλογές που έχει ο χρήστης είναι να χρησιμοποιήσει τον πιο αργό εξομοιωτή android υλικού ή μια κανονική συσκευή για την εύρεση λαθών κατά τον έλεγχο της εφαρμογής. Αν η εγκατάσταση είναι επιτυχής, θα εμφανιστεί η παρακάτω τελική εικόνα [Εικόνα 2-15]. Εικόνα 2-14 Μήνυμα μη Συμβατότητας Επεξεργαστή Εικόνα 2-15 Τελική Οθόνη Εγκατάστασης

49 H Β α σ ι κ ή Ε φ α ρ μ ο γ ή - H e l l o W o r l d 25 Κάθε φορά που ξεκινά το android studio, ο χρήστης ενημερώνεται αν υπάρχουν νέες εκδόσεις στοιχείων του συστήματος [Εικόνα 2-16]. Προτείνεται να γίνεται άμεση εγκατάσταση των νέων εκδόσεων, καθώς στη συνέχεια, είναι αρκετά πιθανό να αποτύχει το χτίσιμο του προγράμματος, λόγω μη επικαιροποιημένης έκδοσης του λογισμικού. Εικόνα 2-16 Παράθυρο Προτροπής για Νέες Ενημερώσεις 2.3 H Βασική Εφαρμογή - Hello World Στο υποκεφάλαιο αυτό παρουσιάζεται ένα απλό έργο Hello World, ώστε μέσω αυτής να γίνει η πρώτη επαφή με το android studio και τα στοιχεία του Δημιουργία Νέου Έργου Ξεκινώντας το android studio θα εμφανιστεί το παρακάτω παράθυρο [Εικόνα 2-17], όπου δίνονται οι επιλογές για συνέχιση κάποιου παλιού έργου ή δημιουργίας ενός καινούργιου. Επιλέγεται η δημιουργία ενός νέου έργου. Στη συνέχεια, δίνεται το όνομα της εφαρμογής [Εικόνα 2-18]. Η επιλογή θα πρέπει να γίνει προσεκτικά, καθώς η μελλοντική αλλαγή του δεν είναι εύκολη διαδικασία [9]. Επίσης, δίνεται η δυνατότητα επιλογής της θέσης αποθήκευσης του έργου. Στο επόμενο παράθυρο [Εικόνα 2-19], επιλέγονται οι συσκευές στις οποίες θα εγκατασταθεί η εφαρμογή, καθώς επίσης και η παλιότερη έκδοση του android API που θα υποστηρίζεται. Η επιλογή αυτή έχει μεγάλη σημασία, καθώς μια τελευταία έκδοση πχ. android nougat 7.0, δίνει τη δυνατότητα χρήσης νεότερων βιβλιοθηκών με περισσότερες δυνατότητες, διευκολύνοντας την ανάπτυξη της εφαρμογής. Η επιλογή, όμως, της τελευταίας έκδοσης περιορίζει σημαντικά των αριθμό των συσκευών που μπορούν να τρέξουν την εφαρμογή (μόλις το 2.8% των συσκευών την υποστηρίζουν ). Ο πίνακας αυτός [Πίνακας 2-1] ανανεώνεται αρκετά συχνά [10].

50 26 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-17 Αρχική Εικόνα του Android Studio Εικόνα 2-18 Δημιουργία Νέου Έργου 'Hello World'

51 H Β α σ ι κ ή Ε φ α ρ μ ο γ ή - H e l l o W o r l d 27 Εικόνα 2-19 Επιλογή Έκδοσης και Συσκευών Πίνακας 2-1 Ποσοστό των Ενεργών Συσκευών που Χρησιμοποιούν την Κάθε Έκδοση του Android

52 28 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-20 Λίστα με Διάφορες Μορφές Βασικών Δραστηριοτήτων Εικόνα 2-21 Ρυθμίσεις Βασικής Δραστηριότητας

53 H Β α σ ι κ ή Ε φ α ρ μ ο γ ή - H e l l o W o r l d 29 Στη συνέχεια, γίνεται η επιλογή της βασικής δραστηριότητας της εφαρμογής. Επιλέγεται η κενή δραστηριότητα, ώστε να αναπτυχθεί σύμφωνα με τις επιθυμίες του χρήστη [Εικόνα 2-20]. Τέλος, ο χρήστης έχει τη δυνατότητα να ορίσει το όνομα της βασικής δραστηριότητας και της βασικής εμφάνισης, δίνοντάς τους νέο όνομα. Συστήνεται οι υπόλοιπες ρυθμίσεις να μην μεταβληθούν [Εικόνα 2-21] Η Δομή του Έργου Εικόνα 2-22 Βασική Δομή του Έργου Το νέο έργο που μόλις δημιουργήθηκε, περιέχει τα βασικά στοιχεία κάθε εφαρμογής [Εικόνα 2-22]. Τα κυριότερα στοιχεία είναι, η βασική διεργασία (MainActivity.java) σε java, καθώς και η βασική εμφάνιση (activity_main.xml) σε γλώσσα XML. Επίσης, υπάρχουν κάποια επιπλέον

54 30 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν αρχεία σε java που δημιουργούνται αυτόματα (ExampleInstrumentedTest.java, ExampleUnitTest.java), φάκελοι με βοηθητικό υλικό που χρησιμοποιεί η εφαρμογή, όπως εικονίδια (ic-launcher.png), βιβλιοθήκες που προσφέρουν την υποστήριξη για το υλικό που έχει επιλεγεί, καθώς και αρχεία με τις ρυθμίσεις του περιβάλλοντος. Το android studio χρησιμοποιεί το σύστημα gradle για το χτίσιμο των έργων και τη δημιουργία του τελικού πακέτου. Στη δομή gradle scripts βρίσκονται τα προγράμματα που αυτοματοποιούν τη διαδικασία [11], [12] Η Βασική Δραστηριότητα Διάταξη Βασικής Εμφάνισης Στη πολλή απλή εφαρμογή HelloWorld, όταν εκτελείται η εφαρμογή, η βασική δραστηριότητα δημιουργείται με τη μέθοδο oncreate. Η βασική δραστηριότητα του έργου (MainActivity) επικοινωνεί με την ανάλογη εμφάνιση (activity_main). 1. package com.apps.gv.helloworld; import android.support.v7.app.appcompatactivity; import android.os.bundle; public class MainActivity extends AppCompatActivity { 9. protected void oncreate(bundle savedinstancestate) { 10. super.oncreate(savedinstancestate); 11. setcontentview(r.layout.activity_main); 12. } 13. } Κώδικας 2-1 Βασική Δραστηριότητα της Hello World Εφαρμογής Στη γραμμή 1 [Κώδικας 2-1], ορίζεται το πακέτο στο οποίο ανήκει η εφαρμογή. Στη συνέχεια, στις γραμμές 3-5, γίνεται εισαγωγή των κλάσεων που χρησιμοποιούνται στη MainActivity. Η κλίση της βασικής εμφάνισης επιτυγχάνεται μέσω της γραμμής 11 στον ανωτέρω κώδικα. Η R είναι κλάση της java (R.java) με εσωτερικές κλάσεις layout ή string, η οποία δημιουργείται κατά το χτίσιμο του έργου με αναφορές στους πόρους της εφαρμογής. Κάθε πόρος που δημιουργείται (από το χρήστη ή αυτόματα από το android) αναφέρεται μέσω μιας μεταβλητής, η οποία ονομάζεται ταυτότητα πόρου. Η δήλωση R.layout.* αναφέρεται σε κάθε πόρο διάταξης που έχει δημιουργηθεί (βρίσκεται στο /res/layout). Άρα το γραφικό περιβάλλον της οθόνης activity_main.xml, μπορεί να κληθεί μέσω της αναφοράς: R.layout.activity_main.

55 H Β α σ ι κ ή Ε φ α ρ μ ο γ ή - H e l l o W o r l d <?xml version="1.0" encoding="utf-8"?> 2. <android.support.constraint.constraintlayout 3. mlns:android= 4. xmlns:app= 5. xmlns:tools= 6. android:layout_width="match_parent" 7. android:layout_height="match_parent" 8. tools:context="com.apps.gv.helloworld.mainactivity"> <TextView 11. android:layout_width="wrap_content" 12. android:layout_height="wrap_content" 13. android:text="hello World!" 14. app:layout_constraintbottom_tobottomof="parent" 15. app:layout_constraintleft_toleftof="parent" 16. app:layout_constraintright_torightof="parent" 17. app:layout_constrainttop_totopof="parent" /> </android.support.constraint.constraintlayout> Κώδικας 2-2 Εμφάνιση της Hello World Εφαρμογής Στις γραμμές 6-7 [Κώδικας 2-2], ορίζεται το μέγεθος της οθόνης της εφαρμογής, να είναι ίδιο με αυτό της οθόνης του κινητού. Στη γραμμή 10, καλείται το στοιχείο θέασης TextView για την εμφάνιση κειμένου. Στις γραμμές 11-12, δίνεται στο κείμενο η δυνατότητα αναδίπλωσης στον οριζόντιο και στον κάθετο άξονα. Στη γραμμή 13, τίθεται το κείμενο που θα παρουσιαστεί. Εικόνα 2-23 Προβολή της Βασικής Οθόνης Τέλος, οι γραμμές ορίζουν γενικότερα στοιχεία της τοποθέτησης του TextView με χρήση της περιορισμένης διάταξης (constraint layout) [13], [14].

56 32 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Η επεξεργασία της οθόνης μπορεί να γίνει και με τη χρήση του γραφικού περιβάλλοντος (αλλαγή της καρτέλας από Text σε Design ). To γραφικό αυτό περιβάλλον περιλαμβάνει έτοιμα γραφικά στοιχεία, τα οποία μπορούν να τοποθετηθούν άμεσα στην εικονική οθόνη του κινητού που παρουσιάζεται στο περιβάλλον του android studio (χωρίς να χρειαστεί να γραφεί κώδικας). Παρόλη την ευκολία, η παραμετροποίηση με αυτό το τρόπο γίνεται αρκετά δύσκολη όταν εισάγεται πλήθος γραφικών στοιχείων, οπότε συνιστάται η χρήση της XML To Μανιφέστο Κάθε εφαρμογή android περιλαμβάνει το αρχείο AndroidManifest.xml. Το αρχείο αυτό βρίσκεται στο φάκελο app/src/main του έργου. Περιέχει αρκετές σημαντικές πληροφορίες για το έργο, όπως τις δραστηριότητες που χρησιμοποιεί, βιβλιοθήκες, γενικότερους κανόνες προβολής, τα δικαιώματα που χρειάζεται η εφαρμογή, ώστε να λειτουργήσει κλπ. Το αρχείο αυτό δημιουργείται αυτόματα για κάθε εφαρμογή. Στη συνέχεια μπορεί να τροποποιηθεί. 1. <?xml version="1.0" encoding="utf-8"?> 2. <manifest xmlns:android= 3. package="com.apps.gv.helloworld"> <application 6. android:allowbackup="true" 7. android:icon="@mipmap/ic_launcher" 8. android:label="@string/app_name" 9. android:supportsrtl="true" 10. android:theme="@style/apptheme"> 11. <activity android:name=".mainactivity"> 12. <intent-filter> 13. <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> 16. </intent-filter> 17. </activity> 18. </application> </manifest> Κώδικας 2-3 Το Μανιφέστο της Εφαρμογής Κάθε δραστηριότητα, που περιλαμβάνεται στο έργο, πρέπει να δηλωθεί στο μανιφέστο. Η βασική δραστηριότητα MainActivity δηλώνεται στις γραμμές [Κώδικας 2-3]. Αν δεν δηλωθεί, το σύστημα δε θα γνωρίζει την ύπαρξή της, οπότε δεν θα εκτελεστεί ποτέ. Η δήλωση της δραστηριότητας γίνεται με την προσθήκη του στοιχείου <activity> εντός του <application> στοιχείου. Στη γραμμή 11, δηλώνεται το όνομα της δραστηριότητας. Στη γραμμή 13, ορίζεται η δραστηριότητα, ως η βασική δραστηριότητα του έργου. Τέλος, μπορεί να περιέχονται και άλλα στοιχεία, όπως δικαιώματα ασφαλείας (security permissions) ή αν η δραστηριότητα μπορεί να χρησιμοποιηθεί και από άλλες εφαρμογές.

57 H Β α σ ι κ ή Ε φ α ρ μ ο γ ή - H e l l o W o r l d 33 Άλλες βασικές δηλώσεις, που περιλαμβάνονται στο μανιφέστο είναι ο ορισμός του πακέτου του έργου στις γραμμές 2-3, ενώ στη γραμμή 8, ορίζεται το όνομα της εφαρμογής Χτίσιμο Έργου Το έργο Helloworld, μπορεί να χτιστεί (build/make project), μέσω του μενού Build > Make Project. Επίσης, δίνεται η δυνατότητα δημιουργίας του εκτελέσιμου πακέτου της εφαρμογής Android Package Kit (APK), ώστε να φορτωθεί στη συσκευή. Τυχών λάθη ή προειδοποιήσεις (warnings) θα εμφανιστούν στη κονσόλα του gradle συστήματος. Εικόνα 2-24 Επιτυχές Χτίσιμο του Έργου HelloWorld

58 34 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εκτέλεση Εφαρμογής Η εφαρμογή που δημιουργήθηκε μπορεί να εκτελεστεί με διάφορους τρόπους: Να εκτελεστεί σε μια εικονική συσκευή. Να φορτωθεί άμεσα στη συσκευή. Να φορτωθεί στην συσκευή μέσω του android studio. Η πρώτη μέθοδος έχει το εξής πλεονέκτημα η εφαρμογή μπορεί να εκτελεστεί σε διαφορετικές εικονικές συσκευές με διαφορετικά APIs, αλλά απαιτεί αρκετή μνήμη και υπολογιστική ισχύ. Επίσης, για σύνθετες εφαρμογές, η αναπαραγωγή μπορεί να μη γίνει σωστά. Η δεύτερη μέθοδος απαιτεί από το χρήστη να έχει δικαιώματα διαχειριστή της συσκευής (root access), ώστε να έχει άμεση πρόσβαση στο αρχείο καταγραφής. (Αυτό επιτυγχάνεται μέσω του εργαλείου logcat [17], [18], [19]). Η τρίτη μέθοδος (η οποία συστήνεται) είναι η χρήση πραγματικής συσκευής μέσω του android studio, καθώς η εφαρμογή ελέγχεται σε πραγματικές συνθήκες ενώ ταυτόχρονα εμφανίζονται τα όποια σφάλματα στον υπολογιστή. Επίσης, γίνεται άμεσος συσχετισμός των σφαλμάτων με την τρέχουσα κατάσταση του κώδικα. Εκτέλεση σε μια εικονική συσκευή Αρχικά επιλέγεται στο μενού Run > Run > App. Αν το android studio δεν έχει εγκαταστημένη κάποια εικονική συσκευή, θα πρέπει να γίνει η κατάλληλη εγκατάσταση. Στη συνέχεια, επιλέγεται ο τύπος της εικονικής συσκευής (τηλεόραση με λογισμικό android, τηλεφωνική συσκευή, ταμπλέτα ή κάποια άλλη έξυπνη συσκευή όπως ρολόι κλπ.), καθώς και το ανάλογο μοντέλο. Για παράδειγμα, επιλέγεται η συσκευή nexus 5x [Εικόνα 2-26]. Στο επόμενο παράθυρο [Εικόνα 2-27] επιλέγεται, επίσης, το API του android που θα εγκατασταθεί στη συσκευή συνίσταται η χρήση x86 αρχιτεκτονικής, λόγω πιο γρήγορης εξομοίωσης. To ΑPI που θα επιλεχθεί, πρέπει να είναι συμβατό με το API που χρησιμοποιήθηκε στο έργο. Το συνολικό μέγεθος του εξομοιωτή και του ανάλογου API συχνά υπερβαίνουν τα 2.5GB.

59 H Β α σ ι κ ή Ε φ α ρ μ ο γ ή - H e l l o W o r l d 35 Εικόνα 2-25 Δημιουργία Νέας Εικονικής Συσκευής Εικόνα 2-26 Επιλογή Τύπου Εικονικής Συσκευής

60 36 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-27 Επιλογή API Εικονικής Συσκευής Εικόνα 2-28 Αποτέλεσμα Εγκατάστασης

61 H Β α σ ι κ ή Ε φ α ρ μ ο γ ή - H e l l o W o r l d 37 Εικόνα 2-29 Επιλογή Επιπλέον Ρυθμίσεων της Συσκευή Όταν ολοκληρωθεί η εγκατάσταση, εμφανίζεται το παράθυρο με τις επιλογές που έχουν γίνει, καθώς και κάποιες επιπλέον ρυθμίσεις [Εικόνα 2-29]. Στη συνέχεια, η εικονική συσκευή εμφανίζεται στο μενού Run [Εικόνα 2-25]. Επιλέγοντας την εκτέλεση του Run, δεν εκτελείται απλώς η εφαρμογή, αλλά: Χτίζεται πάλι το APK πακέτο. Ο εξομοιωτής συσκευής ξεκινά. Η συσκευή ανοίγει και το πακέτο φορτώνεται. Η εικονική συσκευή εκτελεί τη βασική δραστηριότητα. Ένα νέο αντικείμενο δημιουργείται από την MainActivity.java. H δραστηριότητα το συσχετίζει με το σύστημα προβολής που περιγράφεται στο activity_main.xml. H δραστηριότητα καλεί τη συγκεκριμένη εμφάνιση να εμφανιστεί στη οθόνη [Εικόνα 2-30]. Γενικά, η εκκίνηση της εικονικής συσκευής μπορεί να διαρκέσει αρκετά λεπτά.

62 38 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-30 Εκτέλεση της Εφαρμογής HelloWorld στην Εικονική Συσκευή Εκτέλεση Άμεσα στη Συσκευή Κατά το χτίσιμο του έργου, υπάρχει η δυνατότητα δημιουργίας του APK πακέτου (appdebug.apk). Αυτό το πακέτο περιέχει ό,τι χρειάζεται, για να τρέξει η εφαρμογή αυτόνομα σε μια συσκευή. Αρχικά, μεταφέρουμε το πακέτο στη συσκευή και το εκτελούμε. Αυτό εγκαθιστά την εφαρμογή HelloWorld στο κινητό. Στη συνέχεια εκτελείτε το αρχείο και το πρόγραμμα εγκαθίσταται.

63 H Β α σ ι κ ή Ε φ α ρ μ ο γ ή - H e l l o W o r l d 39 Εικόνα 2-31 Εγκατάσταση της Εφαρμογής HelloWorld στο Τηλέφωνο Η εγκατάσταση της εφαρμογής στο κινητό επιτρέπει στο χρήστη να δει πως συμπεριφέρεται η εφαρμογή του. Όμως, δεν παρέχει καμία πληροφορία αν κάτι δεν λειτουργήσει όπως θα έπρεπε. Η πληροφορία αυτή προσφέρεται μέσω αρχείων καταγραφής (logcat). Δυστυχώς η πρόσβαση στα αρχεία αυτά, μετά το API 19, δεν είναι δυνατή αν o χρήστης δεν έχει δικαιώματα διαχειριστή της συσκευής [20]. Σημείωση: Η διαδικασία για να αποκτήσει ο χρήστης δικαιώματα διαχείρισης της συσκευής, δεν είναι πάντα απλή και μπορεί να διαφέρει από συσκευή σε συσκευή. Μπορεί να θέσει σε κίνδυνο την ασφάλεια της συσκευής ή να την καταστήσει ανενεργή. Τέλος η εγγύηση της συσκευής μπορεί να επηρεαστεί από τη διαδικασία αυτή. Δεν συνίσταται η εκτέλεση αυτής της διαδικασίας. Για την ανάγνωση του αρχείου καταγραφής συστήνεται η χρήση της εφαρμογής CatLog. [21]. Η διαδικασία για την καταγραφή είναι η εξής: Εκτέλεση του προγράμματος καταγραφής (CatLog ή οποιοδήποτε άλλο). Εκκίνηση της καταγραφής.

64 40 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εκκίνηση της εφαρμογής προς έλεγχο. Εκτέλεση των διαδικασιών που πρέπει να ελεγχθούν. Όταν ολοκληρωθούν γίνεται παύση της καταγραφής. Φιλτράρισμα των δεδομένων καταγραφής πχ. με το όνομα της εφαρμογής. Παρακάτω, φαίνεται η εικόνα του αρχείου καταγραφής της εφαρμογής HelloWorld. Με διαφορετικά χρώματα, παρουσιάζονται μηνύματα, διαφορετικής σπουδαιότητας. Για παράδειγμα, με μπλε χρώμα, παρουσιάζονται πληροφορίες για δεδομένα της εφαρμογής, ενώ με κίτρινο, οι ειδοποιήσεις (warnings) κλπ. Εικόνα 2-32 Παρουσίαση Εφαρμογής Καταγραφής Η απόκτηση δικαιωμάτων διαχείρισης επιτρέπει στο χρήστη την εγκατάσταση και άλλων προγραμμάτων που μπορούν να βοηθήσουν στην εύρεση σφαλμάτων κατά την εκτέλεση της εφαρμογής, όπως τα προγράμματα ανάκτησης τηλεπικοινωνιακών πακέτων wireshark [22] ή pcap [23], [24], [25].

65 H Β α σ ι κ ή Ε φ α ρ μ ο γ ή - H e l l o W o r l d 41 Εκτέλεση της Εφαρμογής στη Συσκευή Μέσω του Android Studio Για να επιτευχθεί η σύνδεση του κινητού τηλεφώνου μέσω USB με το PC και το android studio, ώστε η εύρεση σφαλμάτων να γίνει μέσω του android studio, πρέπει ο χρήστης να αποκτήσει τις επιλογές του προγραμματιστή στη συσκευή. Αυτό επιτυγχάνεται μέσω των Settings > About Phone > Software Info. O χρήστης πρέπει να αγγίξει την επιλογή Build Number 5-6 φορές συνεχόμενα, μέχρι να λάβει το μήνυμα Είσαι πια προγραμματιστής ( You are now a developer ) [Εικόνα 2-33]. Εικόνα 2-33 Ανάκτηση Επιλογών Προγραμματιστή

66 42 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-34 Ενεργοποίηση Εντοπισμού Σφαλμάτων μέσω USB Εικόνα 2-35 Επιλογή Συσκευής

67 Η Δ ρ α σ τ η ρ ι ό τ η τ α 43 Στη συνέχεια, στο μενού Settings εμφανίζεται η επιλογή Επιλογές προγραμματιστή ( Developer options ). Στο νέο μενού πρέπει να επιλεχθεί η δυνατότητα Εντοπισμού Σφαλμάτων Μέσω USB [Εικόνα 2-34]. Η συσκευή είναι έτοιμη για να συνδεθεί με το android studio. Αν κατά τη σύνδεση της συσκευής με το PC, η συσκευή δεν αναγνωριστεί (από το PC), πρέπει να επιλεχθεί το πρωτόκολλο μετάδοσης πολυμέσων (Media Transfer Protocol MTP). Αν και πάλι η σύνδεση δεν είναι εφικτή, πρέπει να εγκατασταθούν οι κατάλληλοι οδηγοί (drivers) για την αναγνώριση της συσκευής από το PC. Επιλέγοντας την τηλεφωνική συσκευή [Εικόνα 2-35], η εφαρμογή φορτώνεται στο κινητό. Στην καρτέλα του android monitor εμφανίζονται οι πληροφορίες καταγραφής για την εφαρμογή [Εικόνα 2-36]. Εικόνα 2-36 Εμφάνιση Πληροφοριών Καταγραφής 2.4 Η Δραστηριότητα Κάθε εφαρμογή έχει τουλάχιστον μια δραστηριότητα. Όταν το android δημιουργεί μια δραστηριότητα, τότε καλείται η μέθοδος oncreate. H κλίση μιας δραστηριότητας γίνεται, επίσης, είτε με την έναρξη του προγράμματος onstart, είτε με τη μετάβαση ανάμεσα σε διαφορετικές λειτουργίες ή οθόνες onrestore / onresume.

68 44 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-37 Κύκλος Ζωής μιας Δραστηριότητας Κάθε δραστηριότητα, από τη στιγμή της δημιουργίας της, ακολουθεί έναν κύκλο ζωής. Ο τρόπος μετάβασης γίνεται με τις μεθόδους που φαίνονται στα γκρι πλαίσια [Εικόνα 2-37]. Καθώς ο χρήστης εγκαταλείπει μια δραστηριότητα, το σύστημα καλεί τις ανάλογες μεθόδους για την απελευθέρωση των πόρων που χρησιμοποιούσε. Σε αρκετές περιπτώσεις, η δραστηριότητα παραμένει φορτωμένη στη μνήμη RAM της συσκευής (πχ. κατά τη μετάβαση σε μια άλλη εφαρμογή) όπου είναι διαθέσιμη για μελλοντική χρήση. Όταν ο χρήστης επιστρέψει

69 Τ α Σ τ ο ι χ ε ί α Δ ι ε π α φ ή ς τ ο υ Χ ρ ή σ τ η 45 στην εφαρμογή αυτή, ανακτώνται τα αποθηκευμένα δεδομένα που έχουν οριστεί στη μέθοδο onpause. Μια εφαρμογή δεν χρειάζεται να υλοποιεί όλες τις μεθόδους μιας δραστηριότητας. Η επιλογή πραγματοποιείται σύμφωνα με τις εκάστοτε ανάγκες. 2.5 Τα Στοιχεία Διεπαφής του Χρήστη Όλα τα στοιχεία μιας διεπαφής χρήστη σε μία εφαρμογή, καθώς και οι εμφανίσεις οθόνης για android δημιουργούνται χρησιμοποιώντας την κλάση θέασης ή τις ομάδες θέασης. Το αντικείμενο θέασης μπορεί να είναι κάποιο στοιχείο διεπαφής στην οθόνη και με το οποίο μπορεί να αλληλεπιδράσει ο χρήστης. Μια ομάδα θέασης μπορεί να περιέχει άλλα αντικείμενα θέασης (ή ομάδες θέασης) προκειμένου να οριστεί η διάταξη μιας διεπαφής χρήστη. Το android παρέχει μία συλλογή από υποκλάσεις των κλάσεων θέασης και ομάδων θέασης, οι οποίες προσφέρουν στοιχεία ελέγχου εισόδου, όπως κουμπιά και πεδία κειμένου για διάφορους τύπους διατάξεων, όπως γραμμικές (linear), σχετικές (relative) ή περιορισμένες διατάξεις (constraint). Η διεπαφή χρήστη μιας εφαρμογής ορίζεται χρησιμοποιώντας μια ιεραρχία από αντικείμενα θέασης και ομάδων θέασης, όπως φαίνεται στην παρακάτω εικόνα [Εικόνα 2-38]. Κάθε ομάδα θέασης είναι ένα αόρατο κοντέινερ το οποίο οργανώνει τις θυγατρικές θεάσεις, ενώ αυτές μπορεί να είναι στοιχεία ελέγχου εισόδου ή άλλες θεάσεις, οι οποίες σχεδιάζουν κάποιο μέρος της διεπαφής χρήστη. Εικόνα 2-38 Ιεραρχία Αντικειμένων Θέασης

70 46 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Για να οριστεί μία διάταξη, μπορεί να δημιουργηθούν αντικείμενα θέασης προγραμματιστικά, ώστε να δημιουργηθεί σταδιακά ένα δέντρο, αλλά ο ευκολότερος και πιο αποτελεσματικός τρόπος είναι με ένα αρχείο XML [Κώδικας 2-4]. Το όνομα ενός στοιχείου XML είναι αντίστοιχο της κλάσης που εκπροσωπεί. Έτσι, ένα στοιχείο <TextView> δημιουργεί θέαση τύπου TextView στη διεπαφή χρήστη, ενώ ένα στοιχείο <LinearLayout> δημιουργεί μια διάταξη τύπου LinearLayout. Για παράδειγμα, μία απλή κάθετη διάταξη με ένα TextView και ένα πλήκτρο δίνεται στο ακόλουθο κώδικα [Κώδικας 2-4], ενώ η εμφάνιση της φαίνεται στην εικόνα [Εικόνα 2-39]. 1. <?xml version="1.0" encoding="utf-8"?> 2. <LinearLayout xmlns:android= 3. android:layout_width="fill_parent" 4. android:layout_height="fill_parent" 5. android:orientation="vertical" > 6. <TextView android:id="@+id/text" 7. android:layout_width="wrap_content" 8. android:layout_height="wrap_content" 9. android:text="i am a TextView" /> 10. <Button android:id="@+id/button" 11. android:layout_width="wrap_content" 12. android:layout_height="wrap_content" 13. android:text="i am a Button" /> 14. </LinearLayout> Κώδικας 2-4 Απλή Κάθετη Διάταξη σε Ένα Αρχείο XML Εικόνα 2-39 Οθόνη της Απλής Κάθετης Διάταξης

71 Τ α Σ τ ο ι χ ε ί α Δ ι ε π α φ ή ς τ ο υ Χ ρ ή σ τ η 47 Όταν φορτώνεται μια διάταξη από ένα αρχείο XML της εφαρμογής, το android δημιουργεί για κάθε κόμβο ένα αντικείμενο χρόνου εκτέλεσης (runtime object) το οποίο μπορεί να χρησιμοποιηθεί για τον ορισμό πρόσθετων στοιχείων θέασης ή να δώσει πληροφορίες για την τρέχουσα κατάστασή του ή να τροποποιήσει τη διάταξη Η Διάταξη Οι διατάξεις ορίζουν την οπτική δομή μιας διεπαφής χρήστη, όπως είναι η διεπαφή χρήστη μιας δραστηριότητας ή κάποιο γραφικό στοιχείο. Υπάρχουν δύο μέθοδοι δήλωσης μίας διάταξης: Μέσω της XML: Το android παρέχει ένα λεξιλόγιο σε XML που αντιστοιχεί στις κλάσεις διάταξης και θέασης για τις οθόνες και τα στοιχεία διεπαφής χρήστη. Δημιουργία των στοιχείων της διάταξης κατά το χρόνο εκτέλεσης (runtime). Μία εφαρμογή μπορεί να δημιουργήσει αντικείμενα θέασης ή ομάδες αντικειμένων θέασης (και να χειριστεί τις ιδιότητές τους) δυναμικά. Το πλαίσιο λειτουργίας του android επιτρέπει τη χρήση μιας ή και των δύο μεθόδων (στην ίδια εφαρμογή). Για παράδειγμα, οι προεπιλεγμένες διατάξεις (default layouts) της εφαρμογής, καθώς και τα στοιχεία που εμφανίζονται στην οθόνη μπορεί να δηλωθούν σε XML. Η χρήση όμως κώδικα στην εφαρμογή, μπορεί να τροποποιεί, κατά το χρόνο εκτέλεσης, την κατάσταση των αντικειμένων που εμφανίζονται στην οθόνη, συμπεριλαμβανομένων αυτών που έχουν δηλωθεί σε XML. Το βασικό πλεονέκτημα, της δήλωσης της διεπαφή χρήστη σε XML, είναι ότι διαχωρίζει καλύτερα την εμφάνιση της εφαρμογής, από τον κώδικα που ελέγχει τη συμπεριφορά της. Οι περιγραφές σε XML της διεπαφής χρήστη δεν αποτελούν μέρος του κώδικα της εφαρμογής ως αποτέλεσμα η τροποποίησή ή η προσαρμογή τους γίνεται χωρίς να απαιτείται τροποποίηση στον πηγαίο κώδικα. Για παράδειγμα, μπορεί να δημιουργηθούν διατάξεις σε XML για διαφορετικούς προσανατολισμούς της οθόνης, για οθόνες διαφορετικών μεγεθών ή για διαφορετικές γλώσσες. Επιπλέον, η δήλωση της διάταξης σε XML, προσφέρει πιο καθαρή δομή της διεπαφής χρήστη, με αποτέλεσμα την ευκολότερη εύρεση σφαλμάτων. Γενικά, το λεξιλόγιο της XML για τη δήλωση στοιχείων της διεπαφής χρήστη ακολουθεί τη δομή και την ονοματολογία των κλάσεων και των μεθόδων. Τα ονόματα των στοιχείων της XML αντιστοιχούν σε ονόματα κλάσεων και τα ονόματα των ιδιοτήτων αντιστοιχούν σε μεθόδους. Ο σχεδιασμός διατάξεων για τη διεπαφή χρήστη, γίνεται με τον ίδιο τρόπο όπως στις ιστοσελίδες σε HTML με μια σειρά από ένθετα στοιχεία (nested elements).

72 48 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Το Σύστημα θέασης Κάθε διάταξη πρέπει να περιλαμβάνει ακριβώς ένα ριζικό στοιχείο (root element) (ριζικό στοιχείο του συστήματος θέασης του έργου HelloWorld (γραμμή 2 [Κώδικας 2-2]), το οποίο είναι είτε ένα αντικείμενο θέασης είτε μια ομάδα αντικειμένων θέασης. Αφού οριστεί το ριζικό στοιχείο, μπορούν να προστεθούν επιπλέον αντικείμενα τύπου θέασης σαν θυγατρικά στοιχεία, ώστε να δημιουργηθεί σταδιακά μια ιεραρχία αντικειμένων θέασης. Αυτή η ιεραρχική δομή ορίζει τη διάταξη. Κάθε αντικείμενο θέασης ή ομάδα θέασης υποστηρίζει τις δικές του ιδιότητες XML. Ορισμένες ιδιότητες υποστηρίζονται από ένα τύπο αντικείμενου θέασης (για παράδειγμα, το TextView υποστηρίζει την ιδιότητα κειμένου γραμμή 13 [Κώδικας 2-2], [16]), ενώ άλλες ιδιότητες κληρονομούνται από κάθε αντικείμενο που επεκτείνει αυτή την κλάση. Ορισμένες είναι κοινές σε όλα τα αντικείμενα θέασης, γιατί κληρονομούνται από την ριζική κλάση θέασης (για παράδειγμα, οι ιδιότητες στις γραμμές [Κώδικας 2-2] κληρονομούνται από το ριζικό στοιχείο). Τέλος, άλλες ιδιότητες θεωρούνται παράμετροι διατάξεων και καθορίζονται από τη μητρική ομάδα θέασης (γραμμές 3-5 [Κώδικας 2-2]). Εικόνα 2-40 Κληρονόμηση Ιδιοτήτων στο Σύστημα Θέασης Κάθε θυγατρικό στοιχείο ορίζει ποιες παράμετροι διάταξης είναι κατάλληλες για το μητρικό στοιχείο (γραμμές 6-7 [Κώδικας 2-5]), ενώ μπορεί να ορίζει διαφορετικές παραμέτρους διάταξης για τα δικά του θυγατρικά στοιχεία (γραμμές 10-11[Κώδικας 2-5]). Κάθε υποκλάση της ομάδας θέασης παρέχει ένα μοναδικό τρόπο για την απεικόνιση των αντικειμένων θέασης που είναι ενσωματωμένα σε αυτήν. Παρακάτω, αναφέρονται ορισμένοι από τους πιο συνηθισμένους τύπους διατάξεων οι οποίοι παρέχονται από την πλατφόρμα android.

73 Τ α Σ τ ο ι χ ε ί α Δ ι ε π α φ ή ς τ ο υ Χ ρ ή σ τ η 49 Σημείωση: Παρόλο που μια διάταξη μπορεί να ενσωματώσει μία ή περισσότερες διατάξεις, για να επιτευχθεί ο επιθυμητός σχεδιασμός της διεπαφής χρήστη, θα πρέπει η ιεραρχία της διάταξης να είναι όσο το δυνατόν πιο ρηχή. Η διάταξη θα σχεδιαστεί γρηγορότερα αν έχει λιγότερες ενσωματωμένες διατάξεις. Συνηθισμένοι Τύποι Διατάξεων Γραμμική Διάταξη Η γραμμική διάταξη είναι ένα σύστημα θέασης, που οργανώνει τα αντικείμενα θέασής του σε μια οριζόντια ή κάθετη γραμμή. Αν ο αριθμός των στοιχείων του παραθύρου είναι μεγαλύτερος από τον αριθμό των στοιχείων, που μπορούν να προβληθούν ταυτόχρονα στην οθόνη και δημιουργείται ταυτόχρονα μια μπάρα κύλισης. [26] Εικόνα 2-41 Γραμμική Διάταξη

74 50 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν 1. <?xml version="1.0" encoding="utf-8"?> 2. <LinearLayout xmlns:android= 3. android:layout_width="match_parent" 4. android:layout_height="match_parent" 5. android:orientation="vertical" 6. android:paddingleft="16dp" 7. android:paddingright="16dp"> <EditText 10. android:layout_width="match_parent" 11. android:layout_height="wrap_content" 12. android:hint="@string/to" /> 13. <EditText 14. android:layout_width="match_parent" 15. android:layout_height="wrap_content" 16. android:hint="@string/subject" /> 17. <EditText 18. android:layout_width="match_parent" 19. android:layout_height="0dp" 20. android:layout_weight="1" 21. android:gravity="top" 22. android:hint="@string/message" /> 23. <Button 24. android:layout_width="100dp" 25. android:layout_height="wrap_content" 26. android:layout_gravity="right" 27. android:text="@string/send" /> 28. </LinearLayout> Κώδικας 2-5 Ενδεικτικός Κώδικας Γραμμικής Διάταξης Εικόνα 2-42 Αποτέλεσμα Ενδεικτικού Κώδικα Γραμμικής Διάταξης

75 Τ α Σ τ ο ι χ ε ί α Δ ι ε π α φ ή ς τ ο υ Χ ρ ή σ τ η 51 Συνηθισμένοι Τύποι Διατάξεων Σχετική Διάταξη Η σχετική διάταξη είναι ένα σύστημα θέασης, που προβάλει τα αντικείμενα θέασης, σε σχετικές θέσεις. Δίνει στον προγραμματιστή μεγάλη ευχέρεια και ελευθερία, καθώς μπορεί να διαμορφώσει την εμφάνιση της εφαρμογής του όπως επιθυμεί, τοποθετώντας οποιοδήποτε αντικείμενο σε όποια θέση επιθυμεί (αρχή, μέση και τέλος της οθόνης) ή να ορίσει τη θέση σε σχέση με κάποιο άλλο αντικείμενο. Η σχετική διάταξη είναι αρκετά αποδοτική, καθώς μπορεί να χρησιμοποιηθεί αντί μιας λίστας αντικειμένων θέασης γραμμικής διάταξης που εκτείνονται σε αρκετά επίπεδα, βοηθώντας στη διατήρηση της απλότητας της εφαρμογής. [27] 1. <?xml version="1.0" encoding="utf-8"?> 2. <RelativeLayout xmlns:android= 3. android:layout_width="match_parent" 4. android:layout_height="match_parent" 5. android:paddingleft="16dp" 6. android:paddingright="16dp"> <EditText android:layout_width="match_parent" 11. android:layout_height="wrap_content" 12. /> <Spinner android:layout_width="0dp" 17. android:layout_height="wrap_content" 18. android:layout_alignparentleft="true" /> <Spinner android:layout_width="96dp" 25. android:layout_height="wrap_content" 26. android:layout_alignparentright="true" 27. /> <Button 30. android:layout_width="96dp" 31. android:layout_height="wrap_content" 32. android:layout_alignparentright="true" /> 35. </RelativeLayout> Κώδικας 2-6 Ενδεικτικός Κώδικας Σχετικής Διάταξης

76 52 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-43 Σχετική Διάταξη Εικόνα 2-44 Αποτέλεσμα Ενδεικτικού Κώδικα Σχετικής Διάταξης

77 Τ α Σ τ ο ι χ ε ί α Ε λ έ γ χ ο υ Ε ι σ ό δ ο υ 53 Συνηθισμένοι Τύποι Διατάξεων Περιορισμένη Διάταξη Η περιορισμένη διάταξη, αποτελεί το νεότερο τύπο διάταξης. Μοιάζει αρκετά με την σχετική διάταξη, καθώς αποτρέπει τη χρήση πολλών επίπεδων, κρατώντας την σύνταξη αρκετά απλή. Το μεγάλο της πλεονέκτημα είναι ότι προσφέρει καλή διαχείριση στην τοποθέτηση αντικειμένων στην οθόνη με χρήση του γραφικού περιβάλλοντος του android studio [29]. 2.6 Τα Στοιχεία Ελέγχου Εισόδου Μέσω των στοιχείων ελέγχου εισόδου (input controls), ο χρήστης αλληλοεπιδρά με την εφαρμογή. Το android παρέχει μεγάλη ποικιλία γραφικών στοιχείων για τη διεπαφή χρήστη, όπως κουμπιά, πεδία κειμένου, γραμμές αναζήτησης (seek bars), πλαίσια ελέγχου (checkboxes), κουμπιά για μεγέθυνση / σμίκρυνση, κουμπιά εναλλαγής (toggle buttons), κουμπιά επιλογής (radio buttons) και πολλά άλλα. Κάθε στοιχείο ελέγχου εισόδου υποστηρίζει μια σειρά από γεγονότα εισόδου (input events), επιτρέποντας το χειρισμό γεγονότων όπως η εισαγωγή κείμενου ή η χρήση κάποιου κουμπιού κ.α. Εικόνα 2-45 Στοιχεία Ελέγχου

78 54 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Τα Γεγονότα Εισόδου (Input Events) Στο android, υπάρχουν παραπάνω του ενός τρόποι για να προσδιοριστούν τα γεγονότα από την αλληλεπίδραση ενός χρήστη με την εφαρμογή. Όταν τα γεγονότα συμβαίνουν εντός της διεπαφής χρήστη, η προσέγγιση είναι να γίνει καταγραφή (capture) του γεγονότος από το αντικείμενο θέασης με το οποίο αλληλοεπιδρά ο χρήστης. Η κλάση θέασης παρέχει τα μέσα για να συμβεί αυτό. Εντός των διαφόρων κλάσεων θέασης που χρησιμοποιούνται για τη σύνθεση της διάταξης, μπορεί να χρησιμοποιηθούν διάφορες δημόσιες μέθοδοι ανάκλησης (callback), οι οποίες είναι χρήσιμες για σύλληψη γεγονότων εισόδου. Αυτές οι μέθοδοι καλούνται από το πλαίσιο λειτουργίας του android, όταν η αντίστοιχη ενέργεια συμβεί σε αυτό το αντικείμενο. Για παράδειγμα, όταν επιλεχθεί ένα αντικείμενο θέασης (όπως ένα κουμπί), η μέθοδος ontouchevent() καλείται σε αυτό το αντικείμενο. Για τη σύλληψη του γεγονότος αυτού, η κλάση θέασης περιέχει μία συλλογή από ενσωματωμένες διασυνδέσεις (nested interfaces) με μεθόδους ανάκλησης, οι οποίες μπορούν πολύ εύκολα να οριστούν. Αυτές οι διασυνδέσεις, οι οποίες ονομάζονται ανιχνευτές γεγονότων (event listeners), είναι το μέσο για τη σύλληψη της αλληλεπίδρασης του χρήστη με τη διεπαφή χρήστη. Παρόλο που χρησιμοποιούνται πιο συχνά οι ανιχνευτές γεγονότων για τη σύλληψη γεγονότων, υπάρχουν περιπτώσεις όπου πρέπει να γίνει επέκταση μίας κλάσης θέασης, προκειμένου να δημιουργηθεί ένα προσαρμοσμένο στοιχείο (custom component). Σε αυτήν την περίπτωση, ορίζεται η προεπιλεγμένη συμπεριφορά των στοιχείων για τα γεγονότα εισόδου μέσω των χειριστών γεγονότων (event handlers) (π.χ. ontouchevent()) Οι Ανιχνευτές Γεγονότων Ο ανιχνευτής γεγονότων είναι μία διασύνδεση στην κλάση θέασης, που περιέχει μία και μοναδική μέθοδο ανάκλησης. Αυτές οι μέθοδοι θα κληθούν από το πλαίσιο λειτουργίας του android, όταν ο χρήστης αλληλεπιδράσει με τη θέαση με την οποία έχει συνδεθεί ο ανιχνευτής γεγονότων. Στις διασυνδέσεις των ανιχνευτών γεγονότων περιλαμβάνονται οι ακόλουθες μέθοδοι (της κλάσης View) ανάκλησης:

79 Τ α Σ τ ο ι χ ε ί α Ε λ έ γ χ ο υ Ε ι σ ό δ ο υ 55 onclick() Από το View.OnClickListener. Καλείται είτε όταν ο χρήστης ακουμπήσει το αντικείμενο, είτε όταν εστιάσει (focus) στο αντικείμενο με τα κουμπιά πλοήγησης και πατήσει το κατάλληλο κουμπί. onlongclick() Από το View.OnLongClickListener. Καλείται είτε όταν ο χρήστης ακουμπήσει παρατεταμένα το αντικείμενο, είτε όταν εστιάσει για αρκετό χρονικό διάστημα στο αντικείμενο με τα κουμπιά πλοήγησης ή πατήσει παρατεταμένα το κατάλληλο κουμπί. onfocuschange() Από το View.OnFocusChangeListener. Καλείται όταν ο χρήστης χρησιμοποιήσει τα πλήκτρα πλοήγησης για να εστιάσει σε κάποιο αντικείμενο ή όταν αυτό χάσει την εστίαση. onkey() Από το View.OnKeyListener. Καλείται όταν ο χρήστης πατήσει ή αφήσει κάποιο κουμπί, ενώ έχει εστιάσει σε ένα αντικείμενο. ontouch() Από το View.OnTouchListener. Καλείται όταν προκληθεί από το χρήστη κάποιο συμβάν αφής (touch event). Συμβάν αφής δημιουργείται όταν ο χρήστης πατήσει, αφήσει ή κάνει κάποια άλλη κίνηση πάνω στην οθόνη (στα όρια του αντικειμένου). oncreatecontextmenu() Από το View.OnCreateContextMenuListener. Καλείται όταν εμφανιστεί κάποιο μενού επιλογών στοιχείων (Context Menu). Μενού επιλογών στοιχείων μπορεί να εμφανιστεί μετά από ένα παρατεταμένο κλικ. Αυτές είναι οι μοναδικές μέθοδοι που περιλαμβάνουν οι αντίστοιχες διασυνδέσεις. Προκειμένου να οριστεί κάποια από αυτές τις μεθόδους και να γίνει ο χειρισμός των γεγονότων, πρέπει να υλοποιηθεί η διασύνδεση μέσα στη δραστηριότητα ή να οριστεί σαν ανώνυμη κλάση. Στη συνέχεια, ένα στιγμιότυπο της υλοποίησής περνά στην αντίστοιχη View.set.Listener() μέθοδο. (Για παράδειγμα, γίνεται κλήση της setonclicklistener() και περνά στην υλοποίηση του OnClickListener).

80 56 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν 2.7 Το Μενού Το μενού είναι ένα συνηθισμένο στοιχείο της διεπαφής χρήστη σε πολλές εφαρμογές. Υπάρχουν τρεις βασικοί τύποι μενού στο android: το μενού επιλογών, το μενού επιλογών στοιχείου και το αναδυόμενο μενού στοιχείου (popup menu). Το android studio προσφέρει κατά τη δημιουργία του έργου, επιλογές βασικών έργων με μενού επιλογών σε διάφορες μορφές Το Μενού Επιλογών Το μενού επιλογών αποτελεί τη βασική συλλογή στοιχείων μενού μιας δραστηριότητας. Εδώ μπορούν να τοποθετηθούν ενέργειες όπως αναζήτηση, δημιουργία , και ρυθμίσεις. Τα στοιχεία του μενού επιλογών περιέχονται στη μπάρα ενεργειών. Ορισμένα από αυτά μπορεί να είναι τοποθετημένα στην περιοχή υπερχείλισης (overflow) [30]. Εικόνα 2-46 Μενού Επιλογών

81 Τ ο Μ ε ν ο ύ Το Μενού Επιλογών Στοιχείου Το μενού επιλογών στοιχείου είναι ένα αιωρούμενο μενού το οποίο εμφανίζεται όταν ο χρήστης πραγματοποιήσει παρατεταμένο κλικ πάνω σε κάποιο στοιχείο. Παρέχει ενέργειες που αφορούν το περιεχόμενο του στοιχείου [Εικόνα 2-47]. Εικόνα 2-47 Μενού Επιλογών Στοιχείου Το Αναδυόμενο Μενού Στοιχείου Ένα αναδυόμενο μενού στοιχείου εμφανίζει μία λίστα στοιχείων σε μία κάθετη λίστα, η οποία είναι προσαρτημένη στη θέαση από την οποία εμφανίστηκε το μενού. Είναι κατάλληλο για την εμφάνιση μιας σειράς από ενέργειες που σχετίζονται με συγκεκριμένο περιεχόμενο (π.χ. επιλογές προώθησης ή απάντησης για κάποιο ) ή για την εμφάνιση επιλογών για το δεύτερο μέρος μιας εντολής. Οι ενέργειες ενός αναδυόμενου μενού δεν πρέπει να επηρεάζουν άμεσα το περιεχόμενο της θέασης για το σκοπό αυτό υπάρχει το μενού επιλογών στοιχείου.

82 58 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Εικόνα 2-48 Αναδυόμενο Μενού 2.8 Οι Αναδυόμενες Ειδοποιήσεις Οι αναδυόμενες ειδοποιήσεις δίνουν πληροφορίες για κάποια λειτουργία σε ένα μικρό αναδυόμενο παράθυρο. Καταλαμβάνουν μόνο το χώρο που απαιτείται για το μήνυμα. Η τρέχουσα δραστηριότητα παραμένει ενεργή και ο χρήστης μπορεί να αλληλεπιδράσει με αυτήν. Εικόνα 2-49 Παράδειγμα Αναδυόμενης Ειδοποίησης Ο βασικός λόγος που χρησιμοποιούνται είναι για να πληροφορήσουν το χρήστη για το αποτέλεσμα της εντολής που έδωσε, όταν αυτό δεν είναι άμεσα ορατό. Για παράδειγμα, αν κλείσει η εφαρμογή πριν σταλεί το , θα εμφανιστεί μία αναδυόμενη ειδοποίηση με το μήνυμα

83 Η Κ α τ α γ ρ α φ ή Μ η ν υ μ ά τ ω ν 59 Draft saved η οποία ειδοποιεί το χρήστη ότι μπορεί να συνεχίσει την επεξεργασία αργότερα. Οι αναδυόμενες ειδοποιήσεις εξαφανίζονται αυτόματα μετά από ένα μικρό χρονικό διάστημα. 2.9 Η Καταγραφή Μηνυμάτων Ένα βασικό εργαλείο για την εύρεση σφαλμάτων κατά την εκτέλεση μιας εφαρμογής αποτελεί η χρήση των μηνυμάτων καταγραφής της κατάστασης της εφαρμογής. Τα μηνύματα αυτά εμφανίζονται στη κονσόλα του android studio, μέσω του εργαλείου logcat, κατά την εκτέλεση της εφαρμογής [Κεφάλαιο 2.3.6]. private static final String TAG = "MyActivity";... Log.i(TAG, "MyClass.getView() get item number " + position); Κώδικας 2-7 Σύνταξη του Καταγραφέα Μηνυμάτων Προτείνεται ως TAG να χρησιμοποιείται το όνομα της δραστηριότητας που δημιούργησε την καταγραφή. Υπάρχουν οι εξής κατηγορίες μηνυμάτων: Φλύαρα (Verbose) Log.v Χρησιμοποιούνται για την εμφάνιση κάθε πληροφορίας που μπορεί ο χρήστης να θέλει να εμφανιστεί στο αρχείο καταγραφής. Εύρεσης σφαλμάτων (Debug) Log.d Βοηθούν στην εύρεση σφαλμάτων της εφαρμογής. Μπορεί να δείχνουν την ροή του προγράμματος, είτε τη στιγμιαία τιμή κάποιας μεταβλητής. Πληροφοριακά (Info) Log.i Χρησιμοποιούνται για την καταγραφή διαφόρων λειτουργιών της εφαρμογής. Συνήθως δείχνουν επιτυχείς εκτελέσεις της εφαρμογής. Πχ. Όταν γίνεται επιτυχώς η σύνδεση με τον εξυπηρετητή ή προβάλλεται κάποια φωτογραφία στην οθόνη του κινητού. Προειδοποίησης (Warning) Log.w Εμφανίζονται για να ενημερώσουν για πιθανά αποτελέσματα τα οποία δεν είναι σφάλματα. Για παράδειγμα, όταν ζητείται το σβήσιμο αρχείων, αλλά δεν υπάρχουν τα αρχεία αυτά. Σφάλματος (Error) Log.e Καταγράφουν τα πιθανά σφάλματα της εφαρμογής. Μπορούν να χρησιμοποιηθούν εντός των catch δηλώσεων. Πχ. Ζητείται το σβήσιμο αρχείου το οποίο υπάρχει αλλά το αρχείο αυτό δεν σβήνεται.

84 60 Π α ρ ο υ σ ί α σ η τ ο υ A n d r o i d Μ έ σ ω Β α σ ι κ ώ ν Ε φ α ρ μ ο γ ώ ν Αβεβαιότητας (Assert) Log.a Χρησιμοποιούνται για την εμφάνιση κάποιου συμβάντος για το οποίο ο προγραμματιστής δεν είναι ακόμα σίγουρος για το χειρισμό του, δηλαδή η εφαρμογή πρέπει να βελτιωθεί.... (wtf) Log.wtf Χρησιμοποιούνται για την εμφάνιση κάποιου συμβάντος που δεν θα έπρεπε ποτέ να συμβεί, δηλαδή υπάρχει κάποιο δομικό σφάλμα στην εφαρμογή. (Η χρήση τους είναι ανεπίσημη).

85 Σ χ ε δ ί α σ η Σ υ σ τ ή μ α τ ο ς γ ι α τ ο ν Α π ο μ α κ ρ υ σ μ έ ν ο Έ λ ε γ χ ο D S P Ε φ α ρ μ ο γ ώ ν Μ έ σ ω A n d r o i d 61 Κεφάλαιο 3 3 Σχεδίαση, Διασύνδεση και Προγραμματισμός του DSP 3.1 Εισαγωγή Στο κεφάλαιο αυτό, περιγράφεται το υλικό αλλά και του λογισμικό που χρησιμοποιήθηκε για τη ανάπτυξη του συστήματος, από την πλευρά του επεξεργαστή ψηφιακού σήματος DSP. Συγκεκριμένα, αναλύονται τα χαρακτηριστικά της αναπτυξιακής πλατφόρμας TMS320C713 DSK και της θυγατρικής κάρτας DSK-EYE καθώς και του οπτικού αισθητήρα OV5610, ώστε στο πέμπτο κεφάλαιο να ακολουθήσει η ανάλυση της εφαρμογής που εκτελεί ο DSP.

86 62 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P 3.2 O Επεξεργαστής Ψηφιακού Σήματος (DSP) O επεξεργαστής ψηφιακού σήματος είναι ένας εξειδικευμένος μικροεπεξεργαστής με βελτιστοποιημένη αρχιτεκτονική για την πραγματοποίηση γρήγορων πράξεων που απαιτούνται στην ψηφιακή επεξεργασία σήματος. Η ψηφιακή επεξεργασία σήματος άρχισε να αναπτύσσεται μετά το 1960, με την εισαγωγή της ψηφιακής τεχνολογίας και έχει γνωρίσει ραγδαία ανάπτυξη τα τελευταία 20 χρόνια. Επικράτησε ως κύρια μέθοδος επεξεργασίας σήματος, καθώς τα ψηφιακά συστήματα γίνονται συνεχώς πιο εύκολα στη χρήση, λιγότερο ακριβά και περισσότερο διαθέσιμα. Τέτοιου είδους συστήματα, όπως τα modems υψηλής ταχύτητας, τα κινητά τηλέφωνα, τα στερεοφωνικά ή τα βίντεο καθώς και οι ψηφιακές μηχανές και βιντεοκάμερες, έχουν πλέον γίνει αναπόσπαστο μέρος της καθημερινής ζωής. Η μελέτη και η ανάπτυξη επεξεργαστών ψηφιακού σήματος, αλλά και η ενσωμάτωσή τους σε γενικότερα συστήματα για επεξεργασία ψηφιακού σήματος σε πραγματικό χρόνο, αποτελούν μια πρόκληση για τους επιστήμονες και τους μηχανικούς. Πίνακας 3-1 Εφαρμογές των DSPs Οι DSP επεξεργαστές είναι παρόμοιοι με τους γενικού σκοπού μικροεπεξεργαστές, με τη διαφορά ότι είναι βελτιστοποιημένοι όσον αφορά την εκτέλεση πράξεων όπως ο πολλαπλασιασμός και η πρόσθεση. Με την διείσδυση των DSPs σε διάφορες εφαρμογές, όπου οι απαιτήσεις για υψηλή ταχύτητα και απόδοση συνεχώς αυξάνονται, καθίσταται αναγκαία, η εξειδίκευση όχι μόνο στη θεωρία της ψηφιακής επεξεργασίας σήματος, αλλά και στις τεχνικές υλοποίησης των DSP συστημάτων πραγματικού χρόνου. Ο ανωτέρω πίνακας [Πίνακας 3-1] συνοψίζει μερικά μόνο παραδείγματα εφαρμογών των DSPs. Η μια από τις μεγαλύτερες εταιρείες κατασκευής επεξεργαστών, πλέον καλύπτει το μεγαλύτερο μέρος της παγκόσμιας αγοράς των DSPs. Μια από τις πιο σημαντικές οικογένειες DSP επεξεργαστών που παράγει η TI είναι η οικογένεια TMS320. Η οικογένεια TMS320 μπορεί να διαιρεθεί σε τρεις μεγάλες κατηγόριες επεξεργαστών. Αποτελείται από σταθερής υποδιαστολής (fixed-point) επεξεργαστές (C1x, C2x,

87 O Ε π ε ξ ε ρ γ α σ τ ή ς Ψ η φ ι α κ ο ύ Σ ή μ α τ ο ς ( D S P ) 63 C3x, C5x, C54x και C62x), από κινητής υποδιαστολής (floating-point) επεξεργαστές (C3x, C4x και C67xx), και πολυεπεξεργαστές (multiprocessors C8x). Οι επεξεργαστές της οικογένειας TMS320 είναι ειδικά σχεδιασμένοι για επεξεργασία σήματος σε πραγματικό χρόνο. Η Εικόνα 3-1 δείχνει την εξέλιξη της οικογένειας TMS320. Εικόνα 3-1 Η Εξέλιξη των TMS320 Με μία επίδοση άνω των 4800 εκατομμυρίων εντολών το δευτερόλεπτο (Million Instructions Per Second-MIPS) σε συνδυασμό και με έναν αποδοτικό C compiler, οι επεξεργαστές της οικογένειας TMS320C6000 δίνουν στην αρχιτεκτονική του συστήματος απεριόριστες δυνατότητες. Οι υψηλές επιδόσεις, η ευκολία στη χρίση και το προσιτό κόστος κάνουν την πλατφόρμα των TMS320C6000 επεξεργαστών την ιδανική λύση για εφαρμογές πολλών καναλιών αλλά και πολλών λειτουργιών όπως αυτές που αναφέρονται στον ανωτέρω πίνακα [Πίνακας 3-1]. Η οικογένεια TMS320C67x (C67x) αποτελείται από 32-bit επεξεργαστές κινητής υποδιαστολής. Η αρχιτεκτονικοί τους είναι βασισμένη στην VLIW (Very Long Instruction Word) αρχιτεκτονική, η οποία είναι παρόμοια με αυτή των επεξεργαστών σταθερής υποδιαστολής των οικογενειών TMS320C62x (C62x) και TMS320C64x (C64x). Οι επεξεργαστές C67x επεκτείνουν το σύνολο εντολών των επεξεργαστών C62x για την υποστήριξη της αριθμητικής κινητής υποδιαστολή. Έτσι το σύνολο εντολών του επεξεργαστή C67x είναι ένα υπερσύνολο εντολών σταθερής και κινητής υποδιαστολής. Ο C67x είναι πολύ χρήσιμος σε εφαρμογές με υψηλή ακρίβεια, μεγάλη δυναμική περιοχή και έντονους υπολογισμούς, όπως ραντάρ, 3-D γραφικά, κεραίες κινητής τηλεφωνίας στην επεξεργασία εικόνας κ.α. Ο C67x μπορεί να εκτελέσει μέχρι και οκτώ εντολές ανά κύκλο ρολογιού. Ο C67x χρησιμοποιεί την αρχιτεκτονική VelociTI, μια υψηλής απόδοσης προηγμένη αρχιτεκτονική που βασίζεται στην αρχιτεκτονική VLIW επιτρέποντας στον επεξεργαστή να χρησιμοποιείται σε περιβάλλον πολυκάναλων και πολυπαραμετρικών εφαρμογών.

88 64 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P Η VelociTI αρχιτεκτονική της οικογένειας C6000 ενσωματώνει ένα επίπεδο παράλληλης λειτουργίας των εντολών. Επίσης έχει πολύ λίγους περιορισμούς για την ανάκληση και εκτέλεση των εντολών και την αποθήκευση των δεδομένων. Τα εξελιγμένα χαρακτηριστικά της αρχιτεκτονικής velociti είναι: Διαχείριση των εντολών σε όλες τις φάσεις επεξεργασίας σε σύνολα των οχτώ εντολών. Λειτουργία όλων των εντολών υπό συνθήκες. Μεταβλητό εύρος εντολών. Πλήρως διακλαδωμένη διαδικασία (pipeline). 3.3 Η Κάρτα DSK TMS320C Γενική Περιγραφή Η κάρτα TMS320C6713 DSK της spectrum digital [Εικόνα 3-3] είναι μία πλατφόρμα ανάπτυξης βασισμένη στον ψηφιακό επεξεργαστή σήματος TMS320C6713 της texas instruments, η οποία δίνει τη δυνατότητα στο χρήστη να αναπτύξει εφαρμογές εικόνας και ήχου επωφελούμενος από τις δυνατότητες ενός σύγχρονου και δυνατού επεξεργαστή και των ενσωματωμένων στην κάρτα περιφερειακών. Πιο αναλυτικά, το TMS320C6713 DSK αποτελείται κυρίως από: Τον DSP TMS320C6713 που λειτουργεί στα 225 MHz μπορεί να εκτελέσει μέχρι και 1350 MFLOPS (Million Floating-point Operations Per Second). Tη συσκευή προγραμματιζόμενης λογικής CPLD EPM3128TC της altera, που χρησιμοποιείται για τη διασύνδεση των στοιχείων που αποτελούν τη κάρτα. Περιέχει επίσης, πλήθος καταχωρητών που επιτρέπουν την παραμετροποίηση των στοιχείων αυτών. Για την υλοποίηση τεσσάρων χαρτογραφημένων (memory-mapped) καταχωρητών που δίνουν που επιτρέπουν τον προγραμματιστικό έλεγχο ορισμένων χαρακτηριστικών χρησιμοποιούνται οι εξής καταχωρητές: a) USER_REG Register: Περιέχει την κατάσταση των τεσσάρων DIP Switches και την κατάσταση των τεσσάρων LEDs. Μέσω αυτού του καταχωρητή είναι δυνατή η ανάγνωση της κατάστασης των διακοπτών και των LEDs. Επίσης είναι δυνατή και η αλλαγή της κατάστασης των LEDS. b) DC_REG Register: Παρακολουθεί και ελέγχει το Daughter Card Interface.

89 Η Κ ά ρ τ α D S K T M S C c) Version Register: Περιέχει τις εκδόσεις του CPLD και BOARD d) MISC Register: Ο καταχωρητής αυτός ελέγχει το πως διάφορα δευτερεύοντα σήματα μεταφέρονται στους daughter card connectors. Τέσσερα προγραμματιζόμενα LEDs και DIP διακόπτες, που δίνουν στο χρήστη μια πολλή απλή μορφή εισόδου / εξόδου. Τέσσερις διακόπτες ελέγχου (Configuration Switches SW3) μέσω των οποίων καθορίζεται η λειτουργία του DSK κατά την επαναφορά του από την κατάσταση reset. Στον παρακάτω πίνακα [Πίνακας 3-2] παρουσιάζεται η λειτουργία του DSK σύμφωνα με την κατάσταση των διακοπτών ελέγχου. Η διεπαφή της θυγατρικής κάρτας διαθέτει τρεις expansion connectors (για τη μνήμη, τα περιφερειακά και το Host Port Interface (HPI)) που μπορούν να δεχτούν διάφορες θυγατρικές κάρτες ανάλογα με την εφαρμογή. O memory connector προσφέρει πρόσβαση στα ασύγχρονα External Memory InterFace (EMIF) σήματα του DSP για διασύνδεσή τους με μνήμες και memory mapped συσκευές. Ο Peripheral connector παρέχει πρόσβαση στα διάφορα σήματα των περιφερειακών του DSP όπως McBSPs, timers και clocks. Ο HPI connector χρησιμοποιείται για την επικοινωνία του DSP με άλλους DSPs ή επεξεργαστές γενικού σκοπού. O επεξεργαστής του DSK συνδέεται με τα περιφερειακά μέσω του EMIF διαύλου, των 32bit. Η μνήμη flash καθώς και το CPLD χρησιμοποιούν τα 8bit ενώ η SDRAM τα 32 bit του διαύλου. 1 ος Διακόπτης Ελέγχου 2 ος Διακόπτης Ελέγχου 3 ος Διακόπτης Ελέγχου 4 ος Διακόπτης Ελέγχου Configuration description Off On Off Off Little endian (default) Big endian EMIF boot from 8-bit Flash (default) Off On HPI/Emulation boot On Off 32-bit EMIF boot On On 16-bit EMIF boot Off On HPI enabled on HPI pins (default) McASP1 enabled on HPI pins Πίνακας 3-2 Η Λειτουργία του DSK Σύμφωνα με τις Τιμές των Διακοπτών Ελέγχου

90 66 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P Ένας 16-bit AIC23 κωδικοποιητής / αποκωδικοποιητής, επιτρέπει στον επεξεργαστή να λαμβάνει αλλά και να μεταδίδει αναλογικά σήματα. Μετατρέπει το αναλογικό εισερχόμενο σήμα, που μπορεί να προέρχεται από ένα μικρόφωνο (MIC IN) ή κάποια άλλη πηγή (LINE IN), σε ψηφιακό ώστε να μπορεί να γίνει επεξεργασία του από τον DSP και μετά το πέρας της όποιας επεξεργασίας ξαναμετατρέπει το σήμα σε αναλογικό για να ακουστεί είτε από ακουστικά (HP OUT) είτε από κάποιο άλλο μέσο (LINE OUT). Η είσοδος και η έξοδος των σημάτων γίνεται μέσω υποδοχών τον 3.5mm Μια 16MB Synchronous Dynamic RAM. Mία 512KB flash μνήμη (στο DSK 6713 χρησιμοποιούνται μόνο τα 256Kbyte σύμφωνα με τις προκαθορισμένες ρυθμίσεις) η οποία, επειδή συμπεριφέρεται, ως μια ασύγχρονη ROM, χρησιμοποιείται για την εκκίνηση του συστήματος. Τέλος, περιλαμβάνει εξωτερική τροφοδοσία των 5V που τροφοδοτεί την πλακέτα. Ο ρυθμιστής τάσης (Voltage Regulator) τροφοδοτεί με 1.2 V τον επεξεργαστή και 3.3V τις συσκευές εισόδου και εξόδου. Ένας επιπλέον ρυθμιστής 3.3V τροφοδοτεί επιπλέον περιφερειακές συσκευές (Peripheral exp). Εικόνα 3-2 Μπλοκ Διάγραμμα της TMS320C6713 DSP Στην ανωτέρω εικόνα [Εικόνα 3-2] φαίνεται το διάγραμμα του TMS320C6713 DSP και τα περιφερειακά του: Ο Multichannel Buffered Serial Port (McBSP) (McBSP0 & McBSP1), δηλαδή η πολυκαναλική προσωρινής αποθήκευσης σειριακή θύρα. Ο EMIF για τη διασύνδεση εξωτερικής μνήμης SRAM, SDRAM, κτλ. Διάφορους χρονιστές για συμβάντα, όπως δημιουργία παλμών, κτλ. Το HPI, δηλαδή θύρα υποδοχής εξωτερικού επεξεργαστή, για παράλληλη σύνδεση. Το PLL (Phase Locked Loop).

91 Η Κ ά ρ τ α D S K T M S C O ελεγκτής βελτιωμένης άμεσης πρόσβασης Enhanced Direct Memory Access (EDMA). Η λογική εκκίνησης (Boot Configuration). Το συνολικό μπλοκ ολοκληρώνεται από τη μνήμη, η οποία χωρίζεται σε μνήμη δύο επιπέδων L1 & L2. Εικόνα 3-3 DSK TMS320C6713 της Spectrum Digital Εικόνα 3-4 Διάγραμμα του DSK TMS320C6713 της Spectrum Digital

92 68 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P Ο Χάρτης Μνήμης O TMS320C6713 DSP ως μέλος της οικογένειας C67x, έχει ένα μεγάλο χώρο για διευθύνσιοδότηση. Ο κώδικας και τα δεδομένα μπορούν να τοποθετηθούν οπουδήποτε εντός του ενοποιημένου χώρου διευθύνσεων. Οι διευθύνσεις έχουν μέγεθος 32bit. Στην παρακάτω εικόνα [Εικόνα 3-5] παρουσιάζεται ο χάρτης μνήμης του TMS 320C6713 DSP σε αντιδιαστολή με το χάρτη μνήμης του DSK C6713, με λεπτομέρειες για το τρόπο χρήσης των διευθύνσεων. H εσωτερική μνήμη χρησιμοποιεί τις αρχικές διευθύνσεις. 0000_0000 TMS320C DSK Internal Memory Internal Mermory 0003_0000 Reserved Space or Peripherals Regs Reserved Space or Peripherals Regs 8000_0000 EMIF CE0 SDRAM 9000_0000 A000_0000 EMIF CE1 FLASH CPLD 9008_0000 EMIF CE2 CPLD: B000_0000 EMIF CE3 Available via Daughter Card Connector LEDs DIP Switches DSK Status DSK Rev. Εικόνα 3-5 Χάρτης Μνήμης του TMS320C6713 και του DSK C6713 Όπως φαίνεται στην Εικόνα 3-5, το EMIF έχει τέσσερις περιοχές συγκεκριμένης διεύθυνσης, που ονομάζονται χώροι ενεργοποίησης ολοκληρωμένου κυκλώματος (Chip Enable spaces) (CE0-CE3). Η SDRAM καταλαμβάνει την CE0 περιοχή, ενώ η Flash και το CPLD μοιράζονται την CE1 περιοχή. Οι CE2 και CE3 περιοχές χρησιμοποιούνται για διάφορες θυγατρικές κάρτες [32].

93 Η Κ ά ρ τ α D S K - E Y E G i g a b i t Η Κάρτα DSK-EYE Gigabit Η DSK-EYE, είναι μία θυγατρική κάρτα συμβατή με τις αναπτυξιακές πλατφόρμες DSK των σειρών C6x και C5x της texas instruments και αποτελεί μία λύση για λήψη και επεξεργασία εικόνας και βίντεο σε πλήθος εφαρμογών [33]. Τον πυρήνα της κάρτας αποτελεί ένα cyclone II FPGA της altera, το οποίο λειτουργεί ως γέφυρα επικοινωνίας της κάρτας DSK-EYE με τον DSP της μητρικής κάρτας. Η λήψη της εικόνας γίνεται με κάμερα ανάλυσης 5.2 megapixel, η οποία βασίζεται στον CMOS αισθητήρα εικόνας OV5610 της omnivision [34]. Τα βασικά χαρακτηριστικά της DSK-EYE είναι: CMOS αισθητήρας εικόνας 5.2 megapixel EP2C8 Altera cyclone II FPGA Gigabit ethernet διασύνδεση Υποδοχή santa cruz για επέκταση με διασύνδεση επιπλέον υλικού Εικόνα 3-6 Κάρτα DSK Eye της Gigabit H επεξεργασία εικόνας σε πραγματικό χρόνο, γίνεται ολοένα πιο διαδεδομένη και ευρέως χρησιμοποιούμενη. Ένα σύστημα βασισμένο στην DSΚ-EYE, με δεδομένη και την ενσωματωμένη δυνατότητα διασύνδεσης ethernet, μπορεί να ανταπεξέλθει σε πολλές εφαρμογές όπως βιντεοκλήσεις, τηλεδιασκέψεις, συστήματα ελέγχου και παρακολούθησης, αναγνώριση, ταυτοποίηση, φιλτράρισμα και συμπίεση εικόνας, προβολή βίντεο σε πραγματικό χρόνο (video streaming), εφαρμογές VOIP, κάμερες δικτύου κ.α., ως σύστημα χωρίς την ανάγκη σύνδεσης με υπολογιστή ή εξάρτηση από άλλες συσκευές, παρά μόνο για τον αρχικό προγραμματισμό. Το

94 70 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P FPGA της DSK-EYE προγραμματίζεται μέσω του quartus II περιβάλλον ανάπτυξης της altera [35]. Εσωτερικά της DSK-EYE, η δομή της κάρτας είναι βασισμένη στο FPGA, στο οποίο υλοποιούνται όλες οι απαραίτητες συνδέσεις και επαφές των τμημάτων μεταξύ τους. Ο αισθητήρας συνδέεται στη μία πλευρά του FPGA, ενώ η santa cruz υποδοχή, η διασύνδεση ethernet, η jtag σύνδεση και η μικρή EEPROM μνήμη της κάρτας, αντιστοιχούν σε ακροδέκτες του cyclone II, το οποίο με τη σειρά του συνδέεται στη μητρική κάρτα DSK μέσω EMIF με τους memory και peripheral expansion connectors [Εικόνα 3-7]. Εικόνα 3-7 Εσωτερική Διασύνδεση στην DSK-EYE ALTERA Cyclone II FPGA Το FPGA της DSK-EYE ανήκει στην οικογένεια cyclone II της altera. Περιέχει 8256 προγραμματιζόμενα λογικά στοιχεία και ram bits, χαρακτηριστικά που το καθιστούν άκρως επαρκές και ισχυρό για εφαρμογές ψηφιακής επεξεργασίας σήματος και εικόνας [15],[17],[18]. Το σύστημα που είναι αρχικά υλοποιημένο από τον κατασκευαστή στο FPGA ως DSKeye base, παρουσιάζεται στην Εικόνα 3-8, περικλείεται από τη διακεκομμένη γραμμή. Περιέχει την υλοποίηση της διασύνδεσης της EMIF με τη μητρική κάρτα και όλα τα απαραίτητα περιφερειακά για τη λήψη εικόνας από τον αισθητήρα. Η διασύνδεση των περιφερειακών επιτυγχάνεται με μία γέφυρα avalon.

95 Η Κ ά ρ τ α D S K - E Y E G i g a b i t 71 Εικόνα 3-8 Δομή της Βάσης του Συστήματος στο FPGA Ο πυρήνας της DSKeye κάμερας είναι χτισμένος γύρω από μια FIFO 256 λέξεων όπως φαίνεται στην Εικόνα 3-9. Τα ακατέργαστα δεδομένα του αισθητήρα αρχικά οργανώνονται σε λέξεις των 8bit και μετά πακετάρονται σε 32bit λέξεις μέσω της FIFO. H FIFO εκτελεί το συγχρονισμό του ρολογιού, ενώ ένα σήμα διακοπής ενεργοποιείται όταν το μέγεθος της FIFO ξεπεράσει τις 160 λέξεις ή το πλήθος των δεδομένων που αντιστοιχούν σε μια γραμμή VGA εικόνας. Αυτό ενεργοποιεί την EDMA του DSP για τη μεταφορά των δεδομένων της γραμμής στη βασική του μνήμη. Το σήμα διακοπής απενεργοποιείται όταν το μέγεθος της FIFO πέσει κάτω από 155 λέξεις. Αφού η FIFO είναι 256 λέξεων δίνεται ένα περιθώριο των 96 λέξεων πριν την υπερχείλιση της FIFO. Το περιθώριο αυτό κρίνεται ικανοποιητικό για τις περισσότερες εφαρμογές. Μέσα στον πυρήνα υπάρχουν ένας καταχωρητής ελέγχου (control) και ένας καταχωρητής κατάστασης (status). Τα πεδία αυτών των καταχωρητών επιτρέπουν στον DSP τον έλεγχο και την επίβλεψη της FIFO και του αποπολυπλέκτη.

96 72 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P Εικόνα 3-9 Πυρήνας της DSKeye Ο Προσαρμογέας Δικτύου Gigabit Ethernet Η διασύνδεση gigabit ethernet στην DSK-EYE βασίζεται στη διάταξη ASIX highperformance 32-bit MAC και υποστηρίζει ταχύτητες ροής δεδομένων 10/100 Mbps σε half και full duplex λειτουργία και 1000 Mbps σε full duplex λειτουργία ενώ είναι συμβατή με τα IEEE 802.3, 802.3u και 802.3ab πρότυπα. Ανιχνεύει και προσαρμόζει αυτόματα τη σύνδεση με την είσοδο cross over καλωδίου στη υποδοχή. Μια σειρά από LEDs στη DSKeye δείχνουν την κατάσταση της διάταξης ethernet PHY ενώ ο χάρτης μνήμης της μπορεί να αλλάξει επαναπρογραμματίζοντας το FPGA. Για την αρχική και βασική μορφή λειτουργίας του συστήματος η διάταξη εμφανίζεται στο χώρο διευθύνσεων CE3. Η DSKeye χρησιμοποιεί τη θύρα που ορίζεται στην LWIP. Μ αυτό τον τρόπο, επιτρέπει στους χρήστες να γράφουν TCP συμβατές εφαρμογές χρησιμοποιώντας ένα σύνολο από APIs (Application Programming Interfaces). Σε υψηλό επίπεδο, ο χρήστης μπορεί να προσπελάσει τη TCP στοίβα χρησιμοποιώντας την κοινή berkeley υποδοχή διασύνδεσης, η οποία παρέχει απλές ρουτίνες υποδοχής όπως socket(), listen(), connect() κλπ. για την οδήγηση της TCP στοίβας. Σε πιο χαμηλού επιπέδου προγραμματισμό ο χρήστης μπορεί να προσπελάσει τη στοίβα με πιο στοιχειώδη APIs. Για να συμπεριληφθεί η LWIP σε κάποια εφαρμογή πρέπει να οριστεί σαν DSP/BIOS διεργασία, της οποίας η προτεραιότητα είναι μεγαλύτερη από της εφαρμογής. Επίσης, επειδή είναι πιθανό πολλές λειτουργίες να χρησιμοποιούν τη στοίβα, η εκτέλεση αυτών πρέπει να αναστέλλεται μέχρι η στοίβα να είναι έτοιμη. Για να επιτευχθεί αυτή η απαίτηση, κρίνεται

97 Η Κ ά ρ τ α D S K - E Y E G i g a b i t 73 αναγκαίο κάθε λειτουργία που αιτείται πρόσβαση στην στοίβα να εκτελεί τη συνάρτηση Netstart() πριν αρχίσει να καλεί οποιαδήποτε συνάρτηση της στοίβας. Για την αλλαγή των TCP/IP παραμέτρων όπως οι MAC, IP διευθύνσεις, οι χρήστες θα πρέπει να αλλάξουν τη συνάρτηση NetStart() η οποία περιγράφεται στο lwip_netstart.c αρχείο κώδικα, στο εξής σημείο: IP4_ADDR(&gw, 192,168,11,1); IP4_ADDR(&ipaddr, 192,168,11,33); IP4_ADDR(&netmask, 255,255,255,0); Όπου με gw δηλώνεται η διεύθυνση gateway, με ipaddr η IP διεύθυνση, και με netmask η μάσκα δικτύου O CMOS Αισθητήρας Εικόνας OV5610 της Omnivision Ο OV5610 είναι ένας αισθητήρας υψηλής απόδοσης, ανάλυσης 5.17 Megapixel για εφαρμογές λήψης εικόνας και βίντεο. Η διάταξη του αισθητήρα ενσωματώνει μια συστοιχία φωτοαισθητήρων μεγέθους 2592 x 1944, ένα A/D μετατροπέα ικανό να παρέχει μέχρι 4 fps (frames per second) στη μέγιστη ανάλυση και 30 fps σε VGA (640 x 480) ανάλυση. Διαθέτει 81 καταχωρητές οι οποίοι χρησιμοποιούνται για το χρονισμό, ρυθμίσεις και επιλογές της κάμερας. Εικόνα 3-10 Μπλοκ Διάγραμμα του αισθητήρα OV5610 Στην Εικόνα 3-10 φαίνεται το λειτουργικό μπλοκ διάγραμμα του OV5610 με τα στάδια ενίσχυσης, επιλογής κέρδους (Gain), τον A/D μετατροπέα, τη συστοιχία φωτοαισθητήρων, ελεγκτές για Channel Balance, Balance Control, Black Level Compensation, και τους

98 74 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P καταχωρητές, καθώς και το τμήμα χρονισμού μέσω του οποίου ελέγχονται η ταχύτητα και ο συγχρονισμός λήψης καθώς και ο χρόνος έκθεσης. Ο αισθητήρας OV5610 είναι μια CMOS συσκευή απεικόνισης των 1/1.8 ιντσών και αποτελείται από 5,174,400 εικονοστοιχεία (pixels). Βασίζεται στην ανάγνωση συστήματος μέσω της ολοκλήρωσης πεδίου με μεταφορά γραμμής προς γραμμή και ενός ηλεκτρονικού διαφράγματος με σύγχρονη ανάγνωση των εικονοστοιχείων. Το έγχρωμο φίλτρο του αισθητήρα περιέχει τα πρωτεύοντα χρώματα RG/GB (RedGreen/GreenBlue) σε συστοιχία, διατεταγμένα σε γραμμές που εναλλάσσονται μεταξύ τους (πρότυπο bayer). Το πρώτο μέρος της επεξεργασίας σήματος αναλαμβάνει ο αναλογικός ενισχυτής, ο οποίος λαμβάνει ένα προς ένα τα εικονοστοιχεία μόλις το κύκλωμα column sample/hold έχει κρατήσει μια ολόκληρη γραμμή. Ο έλεγχος του κέρδους μπορεί να γίνει, είτε από το χρήστη προγραμματιστικά, είτε αυτόματα από το εσωτερικό κύκλωμα ελέγχου της έντασης (AGC automatic gain control). Η ένταση κυμαίνεται από 0 έως 42 db. Στη συνέχεια, τα ενισχυμένα σήματα περνάνε από το τμήμα εξισορρόπησης καναλιού (channel balance). Σε αυτό το τμήμα, η ενίσχυση των καναλιών R και B αυξάνεται ή μειώνεται, ώστε να φτάσουν το επίπεδο φωτεινότητας του καναλιού G. Η αλλαγή κυμαίνεται από -9.5 έως 9.5 db και μπορεί να γίνει είτε από το χρήστη είτε μέσω του αυτόματου ελεγκτή εξισορρόπησης λευκού (AWB). Ο 10-bit Α/D μετατροπέας του ολοκληρωμένου λειτουργεί με μέγιστη συχνότητα 12 MHz και είναι απόλυτα σύγχρονος με το ρυθμό ενεργοποίησης των εικονοστοιχείων. Ο πραγματικός ρυθμός μετατροπής καθορίζεται από τον ρυθμό εναλλαγής των εικόνων (frames). Ένα A/D ρυθμιστικό κύκλωμα του επιπέδου του μαύρου εξασφαλίζει ότι το επίπεδο του μαύρου χρώματος των Y/RGB είναι η τιμή 16, ενώ η μέγιστη τιμή του επιπέδου του λευκού χρώματος περιορίζεται στο 240, το επίπεδο του μαύρου χρώματος των CrCb είναι 128. Ο λόγος Μέγιστης/Ελάχιστης τιμής είναι 240/16. Οι τιμές των RGB δεδομένων εξόδου κυμαίνονται από την τιμή 16 έως την τιμή 240, ενώ οι υπόλοιποι συνδυασμοί από το 0 έως και το 255 κρατούνται για τα σήματα συγχρονισμού (sync). Επίσης ο αισθητήρας εικόνας OV5610 υποστηρίζει το πρότυπο εξόδου non-ccir, στο οποίο οι τιμές των δεδομένων κυμαίνονται από 1 έως 254, ενώ το 0 και 255 δεσμεύονται για τα σήματα συγχρονισμού. Ο έλεγχος της ηλεκτρονικής έκθεσης βασίζεται στη πυκνότητα της φωτεινότητας ολόκληρης της εικόνας. Ο αλγόριθμος της έκθεσης έχει βελτιστοποιηθεί για τις συνηθισμένες συνθήκες και θεωρεί ότι το αντικείμενο είναι καλά φωτισμένο σε σχέση με το φόντο της εικόνας. Σε περίπτωση διαφορετικής κατάστασης φωτισμού, υπάρχει ο καταχωρητής AEC (Auto Exposure Control) που ρυθμίζει το λόγο λευκού/μαύρου και ο οποίος μπορεί να χρησιμοποιηθεί για την ρύθμιση του αλγόριθμου της έκθεσης, όταν πρόκειται για μία εξειδικευμένη εικόνα. Η δυνατότητα επιλογής της ανάλυσης της εικόνας επιτρέπει στο χρήστη να ρυθμίσει το μέγεθός της ανάλογα με τις ανάγκες της εφαρμογής. Η ανάλυσης της εικόνας μπορεί να ρυθμιστεί από 2 x 4 έως 2592 x 1944 (QSXGA) ή από 2 x 2 έως 1280 x 960 (SXGA) και 640 x 480 (VGA), και υπάρχει η δυνατότητα να τοποθετηθεί οπουδήποτε μέσα στα όρια 2592 x 1944 της συστοιχίας των φωτοαισθητήρων, που αποτελούν τη βάση του αισθητήρα. Πρέπει να σημειωθεί ότι αυτή η

99 Η Κ ά ρ τ α D S K - E Y E G i g a b i t 75 λειτουργία δεν επηρεάζει τον ρυθμό εναλλαγής των εικόνων ή τον ρυθμό ροής δεδομένων, απλά αλλάζει την περιοχή που το σήμα HREF έχει τιμή λογικό 1, ώστε να ταιριάζει με την οριζόντια και την κάθετη περιοχή που έχει προγραμματιστεί από το χρήστη. Μία τυπική εφαρμογή είναι η μεγέθυνση της εικόνας. Η προεπιλεγμένη ανάλυση της εικόνας είναι η 2592 x Ο αισθητήρας OV5610 υποστηρίζει 3 τρόπους υποδειγματοληψίας. Κάθε ένας έχει διαφορετική ανάλυση και μέγιστο ρυθμό εικόνων (frames). Ο πρώτος τρόπος υποδειγματοληψίας είναι για ανάλυση SXGA (1280 x 960) με ρυθμό 15 fps και σε αυτόν τα κάθετα και οριζόντια εικονοστοιχεία υποδειγματοληπτούνται με αναλογία 4:2 όπως φαίνεται στην Εικόνα Ο δεύτερος τρόπος έχει υψηλότερο ρυθμό frame (30 fps) και ανάλυση VGA, Εικόνα Η υποδειγματοληψία σ αυτή τη περίπτωση είναι 4:1 για κάθετα και οριζόντια εικονοστοιχεία. Τέλος για υψηλότερο ρυθμό μετάδοσης (70 fps) υποστηρίζεται και ο τρίτος τρόπος υποδειγματοληψίας το λεγόμενο High Frame rate mode (HF), Εικόνα Εδώ ο OV5610 κάνει μια 8:1 υποδειγματοληψία ως προς την κάθετη και την οριζόντια κατεύθυνση. Εικόνα 3-11 Υποδειγματοληψία Ανάλυσης SXGA Ο αισθητήρας OV5610 μπορεί να προγραμματισθεί ώστε να αντιμεταθέτει τα bit εξόδου MSB (Most Significant Bit) και LSB (Least Significant Bit) των Y/UV ή RGB τύπων εξόδου. Η προεπιλεγμένη σειρά εξόδου των δεδομένων είναι Y7 έως Y0 όπου το Y7 είναι το πιο σημαντικό bit (MSB) ενώ το Y0 είναι το λιγότερο σημαντικό bit (LSB). Όταν γίνεται αντιμετάθεση το Y7 είναι το LSB ενώ το Y0 είναι το MSB και με ανάλογο τρόπο αντιμεταθέτονται και τα υπόλοιπα bit. Ένας σημαντικός παράγοντας σε μία ψηφιακή κάμερα είναι η ευκολία της διασύνδεσής της. Ο ρυθμός εναλλαγής των εικόνων στον αισθητήρα OV5610 ελέγχεται προγραμματιστικά και ο ρυθμός του A/D μετατροπέα ρυθμίζεται ώστε να είναι σύγχρονος με το ρυθμό ενεργοποίησης των εικονοστοιχείων. Ουσιαστικά, είναι ένα αυτόνομο σύστημα ληψης εικόνας σε ένα και μόνο ολοκληρωμένο κύκλωμα. Έχοντας τους εσωτερικούς καταχωρητές AEC και AGC ο αισθητήρας

100 76 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P μπορεί να αυτορυθμιστεί σύμφωνα με τις συνθήκες φωτεινότητας του περιβάλλοντος χωρίς παρέμβαση του χρήστη. Εικόνα 3-12 Υποδειγματοληψία Ανάλυσης VGA Εικόνα 3-13 Υποδειγματοληψία Ανάλυσης HF

101 Η Κ ά ρ τ α D S K - E Y E G i g a b i t 77 Ο αισθητήρας OV5610 υποστηρίζει την επανεκκίνηση του υλικού και του λογισμικού με τη λειτουργία RESET. Όταν ο ακροδέκτης RESET είναι ενεργός (λογικό 1 ), τότε όλο το ολοκληρωμένο θα επαναφερθεί στην αρχική του κατάσταση, συμπεριλαμβάνοντας όλους τους καταχωρητές του (ο ελάχιστος χρόνος επανεκκίνησης του υλικού είναι 1 ms). Το υλικό τίθεται σε κατάσταση αναμονής (hardware sleeping mode), όταν ο ακροδέκτης PWDN είναι στο λογικό 1, σε αυτή την περίπτωση το ρολόι του ολοκληρωμένου θα σταματήσει και το εσωτερικό κύκλωμα εκτός των καταχωρητών SCCB θα επανεκκινηθεί. Επίσης μέσω του 7ου bit του καταχωρητή ελέγχου 12 του SCCB μπορεί προγραμματιστικά να δοθεί εντολή για επανεκκίνηση του ολοκληρωμένου, όμοια με τη λειτουργία του ακροδέκτη RESET. Ο αισθητήρας OV5610 υποστηρίζει τη διακοπή τροφοδοσίας με σκοπό την προστασία του αισθητήρα και την αποφυγή βλάβης των περιφερειακών, του υλικού και του λογισμικού. Όταν ο ακροδέκτης PWDN είναι ενεργός (λογικό 1 ), όλο το ολοκληρωμένο διακόπτει την τροφοδοσία χωρίς οποιαδήποτε κατανάλωση ρεύματος. Κατά τη διακοπή τροφοδοσίας μέσω του λογισμικού, όλα τα ρεύματα μηδενίζονται εκτός από το ρεύμα του κυκλώματος του κρυστάλλου. Κατά τη διαδικασία της διακοπής της τροφοδοσίας του αισθητήρα OV5610, τα περιεχόμενα των καταχωρητών του SCCB θα διατηρηθούν [13] Το Πρωτόκολλο I2C Το πρωτόκολλο I2C (Inter Integrated Circuit) είναι ένας τύπος διαύλου επικοινωνίας που χρησιμοποιείται για τη σύνδεση περιφερειακών συσκευών ή διατάξεων σε μία μητρική πλακέτα ή ένα ενσωματωμένο σύστημα ή ένα κεντρικό πυρήνα οποιουδήποτε τύπου. Με το I2C διευκολύνεται η διασύνδεση πολλαπλών συσκευών ή ολοκληρωμένων κυκλωμάτων διαφορετικών κατασκευαστών, χαρακτηριστικών και ταχυτήτων με ένα κοινό πυρήνα χρησιμοποιώντας διευθυνσιοδότηση, ενώ ελαχιστοποιείται ο αριθμός των ακροδεκτών που απαιτούνται για τη διασύνδεση. Το πρωτόκολλο I2C αρχικά αναπτύχθηκε από την philips για την ανάγκη διασύνδεσης των επιμέρους κυκλωματικών στοιχείων σε συσκευές τηλεόρασης και στη συνέχεια, χρησιμοποιήθηκε από τους περισσότερους κατασκευαστές ηλεκτρονικών (sony, siemens, national semiconductors κλπ.) σε ενσωματωμένα συστήματα για τη διασύνδεση μνημών EEPROM, αισθητήρων, γεννητριών συχνοτήτων χρονισμού και γενικότερα σε εφαρμογές multimedia όπως video και audio processing.

102 78 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P Οι Καταχωρητές του OV5610 Οι 81 καταχωρητές του αισθητήρα OV5610 προσπελαύνονται από το χρήστη μέσω της διασύνδεσης I2C που υλοποιείται στο FPGA. Έτσι, δίνεται η δυνατότητα ρύθμισης και ελέγχου των παραμέτρων. Ενδεικτικά, με εγγραφή ή ανάγνωση μέσω I2C στη διεύθυνση 00H του αισθητήρα, ρυθμίζεται ή ελέγχεται αντίστοιχα ο καταχωρητής GAIN, ο οποίος αντιστοιχεί στο κέρδος του αναλογικού ενισχυτή στο πρώτο στάδιο της αποστολής των στοιχείων της ληφθείσας εικόνας από τον αισθητήρα προς το FPGA και περιεγράφηκε παραπάνω. Στις διευθύνσεις 01Η και 02Η, βρίσκονται οι καταχωρητές BLUE και RED αντίστοιχα με τους οποίους ρυθμίζεται το σχετικό κέρδος των δύο αυτών χρωματικών συνιστωσών σε σχέση με το σύνολο της εικόνας. Ο πλήρης χάρτης μνήμης για τους καταχωρητές του OV5610 και λεπτομέρειες για τη λειτουργία τους μπορούν να αναζητηθούν στο εγχειρίδιο του αισθητήρα [13]. 3.5 H Διασύνδεση Το πακέτο λογισμικού DSK-EYE περιέχει τρία APIs. Αυτά τα τρία APIs διευκολύνουν τον προγραμματιστή, καθώς του επιτρέπουν τη χρήση του DSK-EYE χωρίς απαίτηση για λεπτομερή γνώση του hardware. Στη συνέχεια, παρατίθενται τα APIs του TCP/IP και του OV5610 και της DSKeye Το API του TCP/IP char socket (SOCKET s, u_char protocol, u_int port, u_char flag) Ορίσματα: s: αριθμός καναλιού protocol: το πρωτόκολλο για το κανάλι SOCK_STREAM(0x01) -> TCP SOCK_DGRAM(0x02) -> UDP SOCK_IPL_RAW(0x03) -> IP Layer RAW

103 H Δ ι α σ ύ ν δ ε σ η 79 SOCK_MACL_RAW(0x04) -> MAC Layer RAW port: η πόρτα της πηγής του καναλιού flag: επιλογές για το κανάλι (0 στη περίπτωσή μας) Επιστρεφόμενη τιμή: Ο αριθμός του καναλιού αν ήταν επιτυχής, αλλιώς -1 Περιγραφή: Αρχικοποιεί το κανάλι και περιμένει την ολοκλήρωση των ρυθμίσεων του W5100 char connect (SOCKET s, u_char * addr, u_int port) Ορίσματα: s: αριθμός καναλιού addr: Διεύθυνση IP εξυπηρετητή port: Αριθμός θύρας εξυπηρετητή Επιστρεφόμενη τιμή: 1 αν η σύνδεση αποκαταστάθηκε επιτυχώς, αλλιώς -1 Περιγραφή: Ξεκινάει μια σύνδεση στο επιθυμητό socket σαν TCP Client, κάνοντας αίτηση σύνδεσης στον Server που ορίζουν τα Ορίσματα. char listen (SOCKET s, u_char * addr, u_int * port) Ορίσματα: s: αριθμός καναλιού addr: Διεύθυνση IP πηγής (Server) port: Αριθμός Port πηγής (Server) Επιστρεφόμενη τιμή: 1 Αν η σύνδεση αποκαταστάθηκε επιτυχώς, αλλιώς -1 Περιγραφή: Περιμένει για αίτηση σύνδεσης από κάποιο πελάτη (σύνδεση σε κατάσταση εξυπηρετητή) unsigned int send (SOCKET s, u_char * buf, u_int len) Ορίσματα: Επιστρεφόμενη τιμή: Περιγραφή: s: αριθμός καναλιού buf: Δείκτης στα δεδομένα που θα σταλούν len: μέγεθος των δεδομένων που θα σταλούν Μέγεθος των δεδομένων που εστάλησαν Συνάρτηση για την αποστολή δεδομένων με TCP

104 80 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P unsigned int recv (SOCKET s, u_char * buf, u_int len) Ορίσματα: Επιστρεφόμενη τιμή: Περιγραφή: s: αριθμός καναλιού buf: Δείκτης στη θέση αποθήκευσης των ληφθέντων δεδομένων len: μέγεθος των ληφθέντων δεδομένων Μέγεθος των ληφθέντων δεδομένων Συνάρτηση για τη λήψη δεδομένων με TCP. Συνεχίζει να περιμένει μέχρι να ληφθούν len bytes. char close (SOCKET s) Ορίσματα: s: αριθμός καναλιού Επιστρεφόμενη τιμή: 1 Περιγραφή: Συνάρτηση κλεισίματος του καναλιού Το API του OV5610 Το API για το ολοκληρωμένο OV5610 αξιοποιείται στο API της DSKeye, αλλά μπορεί να χρησιμοποιηθεί και κατευθείαν σε εφαρμογές χρηστών. int OV5610_open (u_char sbufsize, u_char rbufsize) Ορίσματα: Επιστρεφόμενη τιμή: Περιγραφή: sbufsize: μέγεθος μνήμης tx rbufsize: μέγεθος μνήμης rx Αρχικοποιεί ή/και αλλάζει τις ρυθμίσεις του W3100Α int OV5610_close(u_char sbufsize, u_char rbufsize) Ορίσματα: Επιστρεφόμενη τιμή: Περιγραφή: sbufsize: μέγεθος μνήμης tx rbufsize: μέγεθος μνήμης rx Κλείνει την κάμερα

105 H Δ ι α σ ύ ν δ ε σ η 81 void OV5610_RegWrite(int add, char reg) Ορίσματα: Επιστρεφόμενη τιμή: - Περιγραφή: add: διεύθυνση εσωτερικής ic2 θέσης reg: τιμή του καταχωρητή Γράφει σε ένα εσωτερικό καταχωρητή του OV5610 αξιοποιώντας το i2c πρωτόκολλο int OV5610_RegWrite(char reg) Ορίσματα: Επιστρεφόμενη τιμή: Περιγραφή: add: διεύθυνση εσωτερικής θέσης Τιμή του καταχωρητή Διαβάζει έναν καταχωρητή του OV5610 αξιοποιώντας το i2c πρωτόκολλο void OV5610_ResolutionSXGA() Ορίσματα: - Επιστρεφόμενη τιμή: - Περιγραφή: Θέτει την ανάλυση του OV5610 σε SXGA void OV5610_ResolutionVGA() Ορίσματα: - Επιστρεφόμενη τιμή: - Περιγραφή: Θέτει την ανάλυση του OV5610 σε VGA void OV5610_ResolutionQSXGA() Ορίσματα: - Επιστρεφόμενη τιμή: - Περιγραφή: Θέτει την ανάλυση του OV5610 σε QSXGA void OV5610_ResolutionHF() Ορίσματα: -

106 82 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P Επιστρεφόμενη τιμή: - Περιγραφή: Θέτει την ανάλυση του OV5610 σε HF Το API της DSKeye int DSK-EYE_open(DSK-EYE_params *params) Ορίσματα: Επιστρεφόμενη τιμή: - Περιγραφή: Δομή DSK-EYE_params με τη μορφή: Segid: Περιοχή μνήμης που χρησιμοποιείται από τη MEM_alloc για το triple buffering. Αυτή η περιοχή πρέπει να είναι αρκετά μεγάλη, ώστε να χωρά τον buffer. frame_size: Καθορίζει το μέγεθος της εικόνας που θα ληφθεί από τον αισθητήρα. NULL: επιλέγεται το default σετ παραμέτρων Αυτή η συνάρτηση αρχικοποιεί την κάμερα, εγκαθιστά τις ρουτίνες εξυπηρέτησης διακοπών και ξεκινά τη διαδικασία triple buffering. int DSK-EYE_close(DSK-EYE_params *params) Ορίσματα: Επιστρεφόμενη τιμή: - Περιγραφή: Τα ορίσματα είναι παρόμοια με αυτά της DSK-EYE_open. Αυτή η συνάρτηση απενεργοποιεί τις ρουτίνες εξυπηρέτησης διακοπών και επιστρέφει τη μνήμη που χρησιμοποιήθηκε για τη διαδικασία triple buffering. int DSK-EYE_getframe() Περιγραφή: Είναι η βασική συνάρτηση για τη λήψη της εικόνας από την DSKeye κάρτα. Όταν κληθεί η ρουτίνα επιστρέφει έναν δείκτη στη θέση μνήμης που είναι η Bayer εικόνα. Η ρουτίνα αυτή τίθεται σε αναμονή μέχρι να είναι διαθέσιμη μια καινούρια εικόνα.

107 H Δ ι α σ ύ ν δ ε σ η 83 int DSK-EYE_startCap() Περιγραφή: Ξεκινά τον EDMA ελεγκτή του DSP, για τη λήψη/μεταφορά δεδομένων από/προς τη μνήμη. int DSK-EYE_stopCap() Περιγραφή: Σταματά τον EDMA ελεγκτή του DSP, για τη λήψη/μεταφορά δεδομένων από/προς τη μνήμη.

108 84 Σ χ ε δ ί α σ η, Δ ι α σ ύ ν δ ε σ η κ α ι Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς τ ο υ D S P

109 Σ χ ε δ ί α σ η Σ υ σ τ ή μ α τ ο ς γ ι α τ ο ν Α π ο μ α κ ρ υ σ μ έ ν ο Έ λ ε γ χ ο D S P Ε φ α ρ μ ο γ ώ ν Μ έ σ ω A n d r o i d 85 Κεφάλαιο 4 4 Ανάπτυξη της Εφαρμογής στο Android 4.1 Εισαγωγή Στο κεφάλαιο αυτό παρουσιάζεται η ανάπτυξη της εφαρμογής που εκτελείται στο κινητό τηλέφωνο. Για τον σκοπό αυτό αναλύεται, το έργο και τα βασικά δομικά στοιχεία του (δραστηριότητες, σύστημα θέασης, βιβλιοθήκες, μανιφέστο) καθώς και ο κώδικας που αναπτύχθηκε για την υλοποίηση της εφαρμογής. Επίσης, παρουσιάζονται χρήσιμες πληροφορίες ως προς το χτίσιμο ανάλογων εφαρμογών καθώς και πρακτικές για την εύρεση σφαλμάτων.

110 86 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d 4.2 Οι Προδιαγραφές τις Εφαρμογής Η εφαρμογή στο κινητό υλοποιεί έναν πελάτη που συνδέεται μέσω wifi με χρήση του TCP/IP πρωτοκόλλου με τον εξυπηρετητή στο DSP. Ο χρήστης έχει τη δυνατότητα να ζητήσει μια νέα εικόνα από τον εξυπηρετητή. Η εικόνα αποστέλλεται από τον DSP σε bitmap μορφή. Μόλις ληφθεί, αποθηκεύεται στην εσωτερική μνήμη του κινητού. Ο χρήστης μπορεί να τη δει στην οθόνη του και να τη μεγεθύνει ή να ζητήσει την εφαρμογή κάποιου αλγόριθμου επεξεργασίας εικόνας από τον DSP στην αρχική εικόνα. Οι αλγόριθμοι επεξεργασίας εικόνας που μπορεί να επιλέξει ο χρήστης είναι οι εξής: Αρνητικό Extra solarize Sobel Εξισορρόπηση ιστογράμματος Ασπρόμαυρο Αφού επιλέξει τον αλγόριθμο που επιθυμεί, η ανάλογη εντολή αποστέλλεται μέσω του TCP/IP πρωτοκόλλου στον DSP. Όταν ολοκληρωθεί η επεξεργασία της εικόνας απο τον DSP, η επεξεργασμένη πλέον εικόνα αποστέλλεται στο κινητό, όπου και αποθηκεύεται. Στη συνέχεια, ο χρήστης μπορεί να τη δει μαζί με όσες εικόνες έχουν ληφθεί ή να την επιλέξει και να τη μεγεθύνει. Ο χρήστης, τέλος, έχει τη δυνατότητα να αποθηκεύσει τις εικόνες που έλαβε ή να τις σβήσει. 4.3 Η Λειτουργικότητα της Εφαρμογής Σύμφωνα με τις προδιαγραφές που τέθηκαν, η εφαρμογή στο κινητό λειτουργεί ως εξής: Κατά την εκκίνηση της εφαρμογής, παρουσιάζεται μια εναρκτήρια εικόνα (splash screen) με τον τίτλο της εφαρμογής. Στη συνέχεια, δημιουργείται ο TCP πελάτης και προσπαθεί να εντοπίσει τον TCP εξυπηρετητή (o οποίος υλοποιείται στον DSP) μέσω του wifi / ethernet δικτύου. Αφού τον εντοπίσει και αποκατασταθεί η σύνδεση, ένα μήνυμα θα εμφανιστεί στην οθόνη της εφαρμογής, ενημερώνοντας το χρήστη ότι η σύνδεση έχει επιτευχθεί. Στη συνέχεια, ο χρήστης έχει τη δυνατότητα, μέσω του μενού, να ζητήσει μια νέα εικόνα από τον εξυπηρετητή, να δει παλιότερες αποθηκευμένες εικόνες, να τις αποθηκεύσει ή να τις σβήσει.

111 Η Λ ε ι τ ο υ ρ γ ι κ ό τ η τ α τ η ς Ε φ α ρ μ ο γ ή ς 87 Αν ο χρήστης ζητήσει μια καινούργια εικόνα, τότε στέλνεται το κατάλληλο μήνυμα στον εξυπηρετητή μέσω TCP / IP. Όταν η εικόνα καταγραφεί από τον DSP, αρχίζει να αποστέλλεται στον πελάτη σε μορφή bmp. O πελάτης έχει προετοιμαστεί για την αποδοχή της εικόνας και αποθηκεύει τα TCP πακέτα της εικόνας σε κατάλληλο αρχείο. Όταν ληφθεί όλη η εικόνα, εμφανίζεται το ανάλογο μήνυμα στην οθόνη του κινητού. Αν υπάρχει ήδη κάποια εικόνα (ή πολλές εικόνες) αποθηκευμένη και ο χρήστης ζητήσει να τη δει, τότε δημιουργείται μια νέα εμφάνιση, στην οθόνη της εφαρμογής, που περιλαμβάνει όλες τις αποθηκευμένες εικόνες (την αρχική εικόνα και τις ανάλογες επεξεργασμένες αν υπάρχουν). Αν υπάρχει ήδη κάποια εικόνα (ή πολλές εικόνες) και ο χρήστης ζητήσει να σβηστεί, μόλις γίνει η διαγραφή (όλων των εικόνων), θα εμφανιστεί ειδοποίηση στην οθόνη ενημερώνοντας τον χρήστη για την εξέλιξη της ενέργειάς του (επιτυχής ή ανεπιτυχής διαγραφή). Αν υπάρχει ήδη κάποια εικόνα και ο χρήστης ζητήσει να αποθηκευτεί, μόλις γίνει η μετακίνηση (όλων των εικόνων), θα εμφανιστεί ειδοποίηση στην οθόνη, ενημερώνοντας τον χρήστη για την εξέλιξη της ενέργειάς του (επιτυχής ή ανεπιτυχής μετακίνηση) καθώς και για τον νέο κατάλογο όπου αποθηκεύτηκε η εικόνα. Αν έχει ήδη ληφθεί μια εικόνα, ο χρήστης μπορεί να ζητήσει από τον DSP να εφαρμόσει κάποιο αλγόριθμο επεξεργασίας. Τότε θα εμφανιστεί ανάλογο μήνυμα στην οθόνη του κινητού, ο εξυπηρετητής στον DSP θα λάβει την ανάλογη εντολή και θα εφαρμόσει τον αλγόριθμο. Στη συνέχεια, θα στείλει στο κινητό μέσω TCP την εικόνα. O πελάτης έχει προετοιμαστεί για την αποδοχή της εικόνας και αποθηκεύει τα TCP πακέτα της εικόνας σε κατάλληλο αρχείο με την ονομασία του ανάλογου αλγορίθμου επεξεργασίας εικόνας. Όταν ληφθεί η εικόνα, εμφανίζεται το ανάλογο μήνυμα στην οθόνη του κινητού. Στη συνέχεια, ο χρήστης μπορεί να δει την εικόνα στο κινητό του. Η λειτουργία της εφαρμογής αποτυπώνεται στο παρακάτω σχεδιάγραμμα, όπου παρουσιάζεται το διάγραμμα ροής κατά την εκτέλεση της εφαρμογής. Με χρώματα παρουσιάζονται οι δραστηριότητες της εφαρμογής.

112 88 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d DSP2Android App Flow Diagram Splash Screen DSP 2 Android File Manager Create a TCP/IP Client Connect with the DSP Display Images Backup the Images Delete the Images Select Οne Ιmage to Zoom Ιn Request a New Image or Request a Filter Store the Received Image Return to the DSP2Android Εικόνα 4-1 Διάγραμμα Ροής της DSP2Android Εφαρμογής

113 Η Δ ο μ ή τ ο υ Έ ρ γ ο υ Η Δομή του Έργου Για την υλοποίηση της εφαρμογής χρησιμοποιήθηκε το περιβάλλον ανάπτυξης εφαρμογών σε android το android studio. Το έργο αποτελείται από το βασικό έργο που ονομάζεται DSP2Android (ίδιο με το όνομα της εφαρμογής) όπου υλοποιούνται οι εξής κλάσεις σε java: Αποστολή των εντολών προς τον DSP (DSP2Android). Η κλάση DSP2Android αποτελεί τη βασική δραστηριότητα της εφαρμογής. Υλοποίηση του ΤCP πελάτη και σύνδεση με τον DSP (TCPClient). Διαχείριση των TCP/IP μηνυμάτων που ανταλλάσσονται μεταξύ του DSP και του κινητού (MyCustomAdapter). Εγγραφή των εικόνων που λαμβάνονται στην SD κάρτα (WriteSDCard). Διαχείριση των εικόνων που λαμβάνονται (μετακίνηση σε άλλο φάκελο, διαγραφή) (FileManager). Προβολή των εικόνων που λαμβάνονται (DisplayImage, DisplayOneImage, DoubleTapView). Η κλάση DisplayImage αποτελεί τη δραστηριότητα που χειρίζεται την προβολή των εικόνων στο κινητό. Εμφάνιση εισαγωγικής οθόνης (SplashScreen). Για τη δημιουργία του περιβάλλοντος της εφαρμογής, χρησιμοποιηθήκαν τα εξής στοιχεία εμφάνισης σε XML: H εμφάνιση της βασικής δραστηριότητας της εφαρμογής (activity_my). H εμφάνιση όλων των αποθηκευμένων εικόνων (display_image). Η εμφάνιση μιας επιλεγμένης εικόνας (display_one_image). Η εμφάνιση της λίστας με τα μηνύματα που λαμβάνει η εφαρμογή από τον εξυπηρετητή (list_item). Η εμφάνιση της εισαγωγικής εικόνας (splash_screen). Το μενού με τις επιλογές (menu_main). Τα εικονίδια της εφαρμογής, σε διάφορες αναλύσεις (ic_launcher.png). Διάφορες λεζάντες που χρησιμοποιούνται στην εφαρμογή (strings).

114 90 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d Εικόνα 4-2 Δομή του Βασικού Έργου DSP2Android Εικόνα 4-3 Δομή του Θυγατρικού Έργου ImageViewTouch Στα Gradle Scripts ορίζεται ο τρόπος χτισίματος του έργου, καθώς και η δομή του πακέτου που θα περιλαμβάνει την εφαρμογή.

115 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς 91 Επίσης, χρησιμοποιήθηκε το θυγατρικό έργο ImageViewTouch [Εικόνα 4-3], που δίνει τη δυνατότητα μεγέθυνσης της εικόνας με τη χρήση νευμάτων (gestures). 4.5 Οι Δραστηριότητες της Εφαρμογής Στο κεφάλαιο αυτό θα αναλυθούν οι δραστηριότητες που αποτελούν την εφαρμογή καθώς και οι ανάλογες εμφανίσεις Η Εισαγωγική Οθόνη (SplashScreen) Όταν επιλεγεί η εφαρμογή από το μενού εφαρμογών του κινητού, εμφανίζεται η αρχική οθόνη [Εικόνα 4-4]. Στο μανιφέστο της εφαρμογής ορίζεται η δραστηριότητα SplashScreen [Κώδικας 4-1]. Εικόνα 4-4 Εισαγωγική Οθόνη της Εφαρμογής

116 92 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d 1. <activity 2. android:name="com.apps.gv.dsp2android.splashscreen" 3. android:theme="@android:style/theme.devicedefault.light.noactionbar" 4. android:screenorientation="landscape" 5. android:nohistory="true"> 6. <intent-filter> 7. <action android:name="android.intent.action.main" /> 8. <category android:name="android.intent.category.launcher" /> 9. </intent-filter> 10. </activity> Κώδικας 4-1 Μανιφέστο SplashScreen Δραστηριότητας Στον ανωτέρω κώδικα [Κώδικας 4-1] στη γραμμή 2 ορίζεται το όνομα της δραστηριότητας. Επίσης, θέτονται κάποιες ρυθμίσεις για την εμφάνιση της δραστηριότητας στην οθόνη. Στη γραμμή 3 ορίζεται πως δεν θα φαίνεται η μπάρα με το μενού, ενώ στη γραμμή 4 ορίζεται ο προσανατολισμός της οθόνη ο οποίος θα είναι οριζόντιος. Στις γραμμές 7-8 ορίζεται πως η δραστηριότητα είναι η πρώτη που εκτελείται κατά την εκκίνηση της εφαρμογής. 1. public class SplashScreen extends Activity { 2. private static boolean splashloaded = false; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); if (!splashloaded) { 11. // Splash screen is shown only on the 1st run 12. setcontentview(splash_screen); // Start the DSP2Android activity after (10*500msec) - 5sec 15. int delay = 10; 16. new Handler().postDelayed(new Runnable() { 17. public void run() { 18. startactivity(new Intent(SplashScreen.this, DSP2Android.class)); 19. finish(); 20. } 21. }, delay * 500); splashloaded = true; } else { 26. // Prevent to return on the Splash Screen if back button is pressed. 27. // Send the app to DSP2Android activity. 28. Intent gotomainactivity = new Intent(SplashScreen.this, DSP2Android.class); 29. gotomainactivity.setflags(intent.flag_activity_reorder_to_front); 30. startactivity(gotomainactivity); 31. finish(); 32. } 33. } 34. } Κώδικας 4-2 H Kλάση της Δραστηριότητας SplashScreen Η κλάση της δραστηριότητας SplashScreen θα εκτελεστεί μόνο μια φορά κατά την έναρξη της εφαρμογής. Η μεταβλητή splashloaded σετάρεται κατά την πρώτη εκτέλεση. Αν για κάποια λόγο ο χρήστης πατήσει το κουμπί πίσω ενώ βρίσκεται στη δραστηριότητα DSP2Android δεν θα επιστρέψει ξανά στην SplashScreen, καθώς καλείται πάλι η δραστηριότητα DSP2Android (γραμμές [Κώδικας 4-2]).

117 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς 93 Η δραστηριότητα αυτή θα παραμείνει ενεργή για 5 δευτερόλεπτα. Στη συνέχεια, ο χρήστης θα μεταφερθεί στην επόμενη δραστηριότητα (όπως ορίζεται στην γραμμή 18). Ο χειρισμός αυτός γίνεται από την κλάση του χειριστή (Handler) [36]. Στη γραμμή 12, καλείται η εμφάνιση της δραστηριότητας SplashScreen, η οποία ορίζεται στο splash_screen.xml αρχείο [Κώδικας 4-3]. Στο κώδικα αυτό ορίζεται το μέγεθος της εμφάνισης (γραμμή 4) ώστε να καλύπτει όλη την οθόνη, καθώς και οι ιδιότητες της εικόνας που θα προβληθεί. Το αρχείο της εικόνας που θα προβληθεί ορίζεται στην (γραμμή 6), ενώ στις γραμμές 7-8 τίθεται το μέγεθος της εικόνας ίδιο με αυτό της εμφάνισης. 1. <?xml version="1.0" encoding="utf-8"?> 2. <LinearLayout xmlns:android= 3. android:orientation="vertical" android:layout_width="match_parent" 4. android:layout_height="match_parent"> 5. <ImageView 6. android:src="@drawable/initial_image" 7. android:layout_width="match_parent" 8. android:layout_height="match_parent" 9. android:layout_gravity="center_horizontal" 10. android:layout_weight="1" /> </LinearLayout> Κώδικας 4-3 Εμφάνσιη Δραστριότητας SplashScreen Η Βασική Δραστηριότητα DSP2Android Μετά την εισαγωγική εικόνα, ο χρήστης μεταφέρεται στη βασική οθόνη της εφαρμογής [Εικόνα 4-5]. Ο κώδικας στο μανιφέστο για τον ορισμό της δραστηριότητας DSP2Android είναι αρκετά απλός καθώς ορίζει μόνο την προβολή της εμφάνισης, γραμμή 3 [Κώδικας 4-4]. Στη γραμμή 4, ορίζεται, το πληκτρολόγιο να μην εμφανίζεται αυτόματα, για την εισαγωγή εντολών προς τον εξυπηρετητή. 1. <activity 2. android:name="com.apps.gv.dsp2android.dsp2android" 3. android:screenorientation="landscape" 4. android:windowsoftinputmode="statehidden"> Κώδικας 4-4 Μανιφέστο DSP2Android Δραστηριότητας

118 94 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d Εικόνα 4-5 Η Βασική Οθόνη της Εφαρμογής H δραστηριότητα DSP2Android αποτελεί τη βασική δραστηριότητα της εφαρμογής. Όπως φαίνεται στην Εικόνα 4-1, είναι υπεύθυνη για: Την υλοποίηση του πελάτη στο κινητό (γραμμή 33), με τη βοήθεια της κλάσης MyCustomAdapter. Τη δημιουργία μηνυμάτων που θα σταλθούν στο εξυπηρετητή, καθώς και για την εμφάνιση όσων στέλνονται αλλά και λαμβάνονται στην οθόνη. Αυτό επιτυγχάνεται με τη βοήθεια της arraylist κλάσης. Η κλάση DSP2Android έχει τις εξής μεθόδους (methods): οncreate, καλείται κατά την εκκίνηση της δραστηριότητας, oncreateoptionsmenu, δημιουργεί το μενού, onprepareoptionsmenu, ενεργοποιεί τα στοιχεία του μενού, onoptionsitemselected, καθορίζει τις ενέργειες που θα εκτελεστούν κατά την επιλογή του στοιχείου του μενού. Τέλος, περιλαμβάνει την κλάση connecttask, μέσω της οποίας καλεί τη δραστηριότητα για τη δημιουργία του πελάτη. 1. public class DSP2Android extends AppCompatActivity 2. { 3. private ListView mlist; 4. public ArrayList<String> arraylist; 5. private MyCustomAdapter madapter; 6. private TCPClient mtcpclient; 7. public EditText edittext; 8.

119 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς public class DSP2Android extends AppCompatActivity 10. { 11. private ListView mlist; 12. public ArrayList<String> arraylist; 13. private MyCustomAdapter madapter; 14. private TCPClient mtcpclient; 15. public EditText edittext; public void oncreate(bundle savedinstancestate) 18. { 19. super.oncreate(savedinstancestate); setcontentview(r.layout.activity_my); arraylist = new ArrayList<String>(); edittext = (EditText) findviewbyid(r.id.edittext); // Functional Buttons Button buttonsend = (Button)findViewById(R.id.send_button); 30. //relate the listview from java to the one created in xml mlist = (ListView)findViewById(R.id.list); 33. madapter = new MyCustomAdapter(this, arraylist); 34. mlist.setadapter(madapter); // connect to the server 37. new connecttask().execute(""); buttonsend.setonclicklistener(new View.OnClickListener() { 41. public void onclick(view view) { String message = edittext.gettext().tostring(); //add the text in the arraylist 47. arraylist.add("client: " + message); //arraylist.add(message); 50. //sends the message to the server 51. if (mtcpclient!= null) { 52. // arraylist.add("xxx"+message); 53. mtcpclient.sendmessage(message); 54. } //refresh the list 57. madapter.notifydatasetchanged(); 58. edittext.settext(""); 59. } 60. }); 61. } Κώδικας 4-5 Δραστηριότητα DSP2Android και η Μέθοδος oncreate

120 96 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d Η Μέθοδος oncreate H μέθοδος oncreate καλείται πάντα κατά τη δημιουργία της δραστηριότητας. Συνήθως σε αυτή ορίζεται η αρχική κατάσταση της μεθόδου. Κατά την εκτέλεσή της, ορίζεται μια λίστα όπου αποθηκεύονται τα μηνύματα που λαμβάνονται ή στέλνονται στον εξυπηρετητή. Επίσης δίνεται η δυνατότητα δημιουργίας μηνύματος από το χρήστη και αποστολής του με τη χρήση του κουμπιού send (Αυτή η δυνατότητα είναι αρκετά βοηθητική καθώς επιτρέπει τον άμεσο έλεγχο του DSP). Επίσης, καλείται η κλάση για την εμφάνιση της δραστηριότητας activity_my (γραμμή 21, [Κώδικας 4-5]). Ως αποτέλεσμα, εμφανίζεται η βασική οθόνη της εφαρμογής [Εικόνα 4-5]. Στη συνέχεια, καλείται η κλάση connecttask, ώστε να ξεκινήσει η σύνδεση του πελάτη με τον εξυπηρετητή (γραμμή 39). Τέλος ορίζεται το κουμπί send, δίνοντας τη δυνατότητα στο χρήστη να στείλει απευθείας μηνύματα στον εξυπηρετητή. Για το κουμπί υλοποιείται η μέθοδος setonclicklistener, η οποία ανιχνεύει πότε ο χρήστης θα το πατήσει. Όταν το κουμπί χρησιμοποιηθεί, εμφανίζεται στην οθόνη της δραστηριότητας το μήνυμα που θα σταλθεί (γραμμή 45, [Κώδικας 4-5]). Το μήνυμα μεταφέρεται στον TCP πελάτη ώστε να αποσταλθεί (γραμμή 55). Η Κλάση connecttask 70. public class connecttask extends AsyncTask<String,String,TCPClient> protected TCPClient doinbackground(string... message) { //we create a TCPClient object 76. Log.d("DSP2Android:connectTask","TCPclient is called, message:" + message); 77. mtcpclient = new TCPClient(new TCPClient.OnMessageReceived() { 79. //here the messagereceived method is implemented 80. public void messagereceived(string message) { 81. //this method calls the onprogressupdate 82. publishprogress(message); 83. } 84. }); 85. mtcpclient.run(); return null; 88. } 89. Κώδικας 4-6 Η Κλάση ConnectTask H κλάση ConnectTask ορίζεται ως ασύγχρονη διεργασία (AsyncTask). Οι ασύγχρονες διεργασίες είναι αρκετά σημαντικές στο android, καθώς επιτρέπουν την εμφάνιση

121 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς 97 αποτελεσμάτων στη διεπαφή χρήστη, ενώ παράλληλα μπορούν να εκτελούνται στο παρασκήνιο άλλες διεργασίες [37]. Στην κλάση αυτή ορίζεται ο mtcpclient ως TCP πελάτης. Ο mtcpclient έχει τη δυνατότητα, να εμφανίζει τα μηνύματα που λαμβάνει (ή στέλνει) στην οθόνη της δραστηριότητας. Τέλος, καλείται η μέθοδος run του mtcpclient. H Μέθοδος oncreateoptionsmenu 1. <?xml version="1.0" encoding="utf-8"?> 2. <menu xmlns:android= 3. xmlns:app=" 4. <item 5. android:id="@+id/requestimage" 6. android:orderincategory="100" 7. android:title="@string/requestimage" 8. app:showasaction="never" /> 9. <item 10. android:id="@+id/displayimage" 11. android:orderincategory="100" 12. android:title="@string/displayimage" 13. app:showasaction="never" /> 14. <item 15. android:id="@+id/filter" 16. android:orderincategory="100" 17. android:title="@string/filter"> 18. <menu> 19. <item 20. android:id="@+id/negativefilter" 21. android:orderincategory="100" 22. android:title="@string/negativefilter" 23. app:showasaction="never" /> 24. <item 25. android:id="@+id/extrasolarizefilter" 26. android:orderincategory="100" 27. android:title="@string/solarizefilter" 28. app:showasaction="never" /> 29. <item 30. android:id="@+id/grayfilter" 31. android:orderincategory="100" 32. android:title="@string/grayfilter" 33. app:showasaction="never" /> 34. <item 35. android:id="@+id/sobelfilter" 36. android:orderincategory="100" 37. android:title="@string/sobelfilter" 38. app:showasaction="never" /> 39. </menu> 40. </item>

122 98 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d 41. <item 42. android:id="@+id/file_managment" 43. android:orderincategory="100" 44. android:title="@string/file_mng" 45. app:showasaction="never" > 46. <menu> 47. <item 48. android:id="@+id/delete_files" 49. android:orderincategory="100" 50. android:title="@string/delete" 51. app:showasaction="never" /> 52. <item 53. android:id="@+id/backup_files" 54. android:orderincategory="100" 55. android:title="@string/backup" 56. app:showasaction="never" /> 57. </menu> 58. </item> 59. <item 60. android:id="@+id/send" 61. android:orderincategory="100" 62. android:title="@string/send" 63. app:showasaction="never" /> 64. <item 65. android:id="@+id/exitapp" 66. android:orderincategory="100" 67. android:title="@string/exitapp" 68. app:showasaction="never" /> 69. </menu> Κώδικας 4-7 Εμφάνιση του Μενού Η μέθοδος oncreateoptionsmenu ανήκει στην κλάση του μενού. Δημιουργεί το μενού, σύμφωνα με την εμφάνιση που ορίζεται στο menu_main.xml [Κώδικας 4-7] public boolean oncreateoptionsmenu(menu menu) { 101. MenuInflater inflater = getmenuinflater(); 102. inflater.inflate(r.menu.menu_main, menu); 103. return true;} Κώδικας 4-8 H Mέθοδος oncreateoptionsmenu Το κάθε στοιχείο του μενού ορίζεται ως <item> </item>. To κάθε αντικείμενο (item) περιλαμβάνει: Την ταυτότητά του (id), μέσω της οποίας η εφαρμογή μπορεί να ελέγξει πότε το επιλέγει ο χρήστης, την προτεραιότητα εμφάνισης που έχει σε σχέση με τα υπόλοιπα αντικείμενα, τον τίτλο του αντικειμένου, ο οποίος εμφανίζεται στο μενού, τη δυνατότητα να εμφανιστεί το συγκεκριμένο αντικείμενο στη μπάρα του μενού. Μέσα σε ένα αντικείμενο μπορεί να οριστεί ένα νέο (υπο-)μενού, με τα δικά του αντικείμενα. Αυτό επιτυγχάνεται με τη χρήση τον ορισμάτων <menu> </menu> εντός του αντικειμένου. Στις γραμμές [Κώδικας 4-7] ορίζεται το υπο-μενού με τους αλγορίθμους επεξεργασίας εικόνας. Στις γραμμές ορίζεται το υπο-μενού με τις δυνατότητες διαχείρισης αρχείων.

123 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς 99 Εικόνα 4-6 Εμφάνιση του Μενού H Μέθοδος onprepareoptionsmenu Η μέθοδος onprepareoptionsmenu προετοιμάζει το μενού τροποποιώντας τη διαθεσιμότητα των αντικειμένων. Μπορεί, δηλαδή, να αφαιρεί αντικείμενα ή να τροποποιεί τη διαθεσιμότητά τους. Στην εφαρμογή αν δεν υπάρχουν αποθηκευμένες φωτογραφίες στον κατάλογο της εφαρμογής /DSP2Android/, τότε δεν επιτρέπεται η εκτέλεση της επιλογής Display Image ούτε της επιλογής File Management. Αυτό επιτυγχάνεται με τον έλεγχο της ύπαρξης του φακέλου /DSP2Android/ (γραμμές Κώδικας 4-9) public boolean onprepareoptionsmenu(menu menu) { 105. File root = Environment.getExternalStorageDirectory(); 106. Log.i("DisplayImage", root.getabsolutepath() + /DSP2Android/" + "mydata.bmp"); File file = new File(root.getAbsolutePath() + /DSP2Android/"); 109. if (file.exists()) { MenuItem item = menu.finditem(r.id.displayimage); 112. item.setenabled(true); 113. item = menu.finditem(r.id.file_managment); 114. item.setenabled(true); 115. } else { 116. MenuItem item = menu.finditem(r.id.displayimage); 117. item.setenabled(false); 118. item = menu.finditem(r.id.file_managment); 119. item.setenabled(false); } 120. return true;} Κώδικας 4-9 Η Μέθοδος OnPrepareOptionsMenu

124 100 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d H Μέθοδος onoptionsitemselected Όταν ο χρήστης επιλέξει κάποιο αντικείμενο από το μενού, τότε καλείται η μέθοδος onoptionsitemselected. Η μέθοδος δέχεται ως όρισμα το αντικείμενο που θα κλειθεί. Η αναγνώριση του αντικειμένου γίνεται μέσω της ταυτότητας του. Ως αποτέλεσμα ανάλογα με το αντικείμενο που επιλέγεται, εκτελείται και ο ανάλογος κώδικας. // Actions per Menu public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case R.id.Send:{ } case R.id.RequestImage:{ } case R.id.NegativeFilter:{ } case R.id.ExtraSolarizeFilter:{ } case R.id.SepiaFilter:{ } case R.id.GrayFilter:{ } case R.id.SobelFilter{ } case R.id.DisplayImage: { } case R.id.Delete_Files: { } case R.id.Backup_Files: { } case R.id.ExitApp: { } } Κώδικας 4-10 Οι Επιλογές της Μεθόδου onoptionsitemselected Η μέθοδος onoptionsitemselected έχει τις παρακάτω επιλογές: Η επιλογή Send λειτουργεί όπως και το ανάλογο κουμπί. Η επιλογή RequestImage, στέλνει στον TCP εξυπηρετητή το ανάλογο μήνυμα ώστε να ζητήσει μια νέα εικόνα. Αρχικά προσθέτει στην οθόνη το μήνυμα ότι εκτελείται η συγκεκριμένη ενέργεια. Στη συνέχεια, καλεί τη μέθοδο sendmessage με το ανάλογο όρισμα, ώστε η κλάση του mtcplclient να καταλάβει ποιο μήνυμα πρέπει να σταλεί προς τον εξυπηρετητή. Αν ληφθεί κάποιο μήνυμα από τον εξυπηρετητή, θα εμφανιστεί στην οθόνη [Κώδικας 4-11]. Οι επιλογές NegativeFilter, ExtraSolarizeFilter, GreyFilter, Sobel κλπ. λειτουργούν με τον ίδιο τρόπο όπως η επιλογή RequestImage, θέτοντας όμως διαφορετικά ορίσματα κατά την κλήση της μεθόδου sendmessage [Κώδικας 4-12]. Η επιλογή DisplayImage καλεί τη δραστηριότητα DisplayImage, ώστε να γίνει εμφάνιση των εικόνων που έχουν ληφθεί [Κώδικας 4-13]. Οι επιλογές Delete_Files και Backup_Files δημιουργούν ένα νέο αντικείμενο της κλάσης FileManager και με τη χρήση των μεθόδων DeleteAllFiles και BackupAllFiles είτε διαγράφονται τα αρχεία που βρίσκονται στο φάκελο /DSP2Android/ είτε αποθηκεύονται σε κάποιο άλλο φάκελο [Κώδικας 4-14]. Η επιλογή ExitApp τερματίζει την εφαρμογή. Γενικά μια εφαρμογή στο android δεν τερματίζεται αλλά παραμένει ανενεργή χωρίς να καταναλώνει πόρους. Άρα κατά τον τερματισμό της εφαρμογής γίνεται, επανεκκίνηση θέτοντας όλους τους πόρους της στην αρχική κατάσταση [Κώδικας 4-15].

125 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς case R.id.RequestImage:{ //add the text in the arraylist 143 arraylist.add("client: 320x240 image requested"); 144 // The message REQ_ORIG_BMP is translated in DSP as a request for 20x240 img if (mtcpclient!= null) { 147 Log.i("DSP2Android-RequestImage", "1"); 148 mtcpclient.sendmessage(req_orig_bmp); } 151 Log.i("DSP2Android-RequestImage", "2"); 152 //refresh the list 153 madapter.notifydatasetchanged(); 154 edittext.settext(""); return true; 157 } Κώδικας 4-11 Επιλογή Request Image του Μενού 230 case R.id.DisplayImage:{ Intent intent = new intent(getapplicationcontext(),displayimage.class); 233 startactivity(intent); 234 finish(); return true; 237 } Κώδικας 4-12 Επιλογή Display Image του Μενού 238 case R.id.Delete_Files:{ Log.i("DSP2Android", "Delete Pushed"); FileManager delatefile = new FileManager(getApplicationContext()); 243 delatefile.deleteallfiles(); mtcpclient.logstate(); return true; 248 } case R.id.Backup_Files:{ Log.i("DSP2Android", "Backup Is Requested"); FileManager delfile = new FileManager(getApplicationContext()); 255 delfile.backupafiles(); mtcpclient.logstate(); return true; 260 } 261 Κώδικας 4-13 Επιλογή Delete Files & Backup Files του Μενού

126 102 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d 265 case R.id.DisplayImage:{ Intent intent = new intent(getapplicationcontext(),displayimage.class); 268 startactivity(intent); 269 finish(); return true; 272 } Κώδικας 4-14 Επιλογές Display Image του Μενού 275 case R.id.ExitApp:{ finish(); 278 Log.d("Menu", "0"); 279 Intent intent = new Intent(Intent.ACTION_MAIN); 280 Log.d("Menu", "1"); 281 intent.addflags(intent.flag_activity_clear_top); 282 Log.d("Menu", "2"); 283 intent.addcategory(intent.category_home); 284 Log.d("Menu", "3"); startactivity(intent); 287 return true; 288 } default: 291 // If we got here, the user's action was not recognized. 292 // Invoke the superclass to handle it. 293 return super.onoptionsitemselected(item); } 296 Κώδικας 4-15 Επιλογές Exit & Default του Μενού Τέλος, η επιλογή default κανονικά δεν πρέπει να συμβεί. Αν για κάποιο λόγο κάποια επιλογή δεν αναγνωριστεί δεν θα συμβεί τίποτα, καθώς ξανακαλείται το μενού [Κώδικας 4-15] Η Κλάση του TCP Πελάτη H δραστηριότητα DSP2Android δημιουργεί τον TCP πελάτη μέσω κλήσης της κλάσης TCPClient. H κλάση αυτή μέσω του TCP πρωτοκόλλου συνδέεται με τον εξυπηρετητή, ανταλλάσσει μηνύματα, λαμβάνει τις εικόνες και τις αποθηκεύει. H κλάση έχει δυο βασικές καταστάσεις (states), ώστε να γνωρίζει το τύπο του μηνύματος που περιμένει. Ο εξυπηρετητής, που έχει υλοποιηθεί στο DSP, μπορεί να στείλει είτε μηνύματα που αποτελούνται από αλφαριθμητικά στοιχεία, τα οποία χρησιμοποιούνται για το συγχρονισμό και την επικοινωνία των 2 πλευρών, είτε πακέτα με κομμάτια της εικόνας (προς αποστολή). Ο πελάτης διαβάζοντας τα μηνύματα γνωρίζει αν το επόμενο θα είναι αλφαριθμητικό μήνυμα ή

127 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς 103 κάποιο πακέτο τις εικόνας, οπότε προετοιμάζεται ανάλογα (τίθεται στην ανάλογη κατάσταση) [Εικόνα 4-7]. Ο πελάτης αρχικά, βρίσκεται στην κατάσταση που περιμένει κάποιο μήνυμα: stateclient = ST_RECEIVEMSG; Επίσης, τίθεται η IP διεύθυνση στην οποία βρίσκεται ο εξυπηρετητής. Η IP δίνεται ως όρισμα στην κλάση InetAddress [39]. Για να επιτευχθεί η σύνδεση με τον εξυπηρετητή, απαιτείται ο πελάτης να γνωρίζει την IP διεύθυνση καθώς και τη πόρτα μέσω της οποίας θα γίνει η επικοινωνία. InetAddress serveraddr = InetAddress.getByName(SERVERIP); Socket socket = new Socket(serverAddr, SERVERPORT); Μετά την προετοιμασία της υποδοχής, ο πελάτης στέλνει μήνυμα προς τον εξυπηρετητή για να πραγματοποιηθεί η σύνδεση. Ταυτόχρονα αποστέλλεται και η ανάλογη πληροφορία προς το DSP, ώστε να λάβει μια νέα εικόνα ή να εφαρμόσει κάποιο αλγόριθμο επεξεργασίας εικόνας. Ο εξυπηρετητής όταν δεχθεί την ανάλογη εντολή, απαντά στον πελάτη με ανάλογο μήνυμα, ώστε να τον προετοιμάσει για τη λήψη της εικόνας. Στη συνέχεια, ο εξυπηρετητής αρχίζει και στέλνει τα πακέτα με την εικόνα. Ο πελάτης γνωρίζει πια πως τα πακέτα αυτά αποτελούν την bmp εικόνα και τα αποθηκεύει στο ανάλογο αρχείο (γραμμή 164, [Κώδικας 4-16]) με τη βοήθεια της κλάσης DataInputStream [40],[41]. Όταν ληφθεί και το τελευταίο πακέτο της εικόνας το DataInputStream κλείνει και η σύνδεση με τον εξυπηρετητή τερματίζεται. Οι εικόνες αποθηκεύονται στο φάκελο /DSP2Android/. H αρχική εικόνα αποθηκεύεται στο αρχείο mydata.bmp ενώ οι επεξεργασμένες στο αρχείο mydataxxx.bmp, όπου ΧΧΧ τα τρία πρώτα γράμματα από τον αλγόριθμο που εφαρμόζεται κάθε φορά.

128 104 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d Client Server Open New Socket Wait for a Connection Request State = Receive Message Connection Request Connection Request Acknowledge "Server connected" New image request/ apply img process Establish Connection State = Receive Image Substate = New image or Filter-X Confirmation Ack of the new image request / img process request Start Image Capture/ image Processing Open Data Input Stream to Read from the Socket 1st Image Packet 1st Image Packet Ack Last Image Packet Last Image Packet Ack Close Data Input Stream Close the Socket Εικόνα 4-7 Επικοινωνία Εξυπηρετητή - Πελάτη

129 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς public void run() { 2 3 boolean filecreated = false; 4 mrun = true; 5 stateclient = ST_RECEIVEMSG; try { 9 //here you must put your computer's IP address. 10 InetAddress serveraddr = InetAddress.getByName(SERVERIP); //create a socket to make the connection with the server 13 Socket = new Socket(serverAddr, SERVERPORT); try { //send the message to the server 18 out = new PrintWriter(new BufferedWriter(new outputstreamwriter(socket.getoutputstream())), true); 19 WriteSDCard writesdcard = new WriteSDCard(); //receive the message which the server sends back 23 dis = new DataInputStream(socket.getInputStream()); //in this while the client listens for the messages sent by the server 26 while (mrun) { if (stateclient == ST_RECEIVEMSG) { // The packet contains a message servermessage = dis.readline(); if (servermessage!= null && mmessagelistener!= null) { 35 //call the method messagereceived from DSP2Android class 36 mmessagelistener.messagereceived(servermessage); } if ("Sending Image".equals(serverMessage)) { 41 // The next message will be the BMP image 42 stateclient = ST_RECEIVEBMP; 43 } if ("Sending Negative Image".equals(serverMessage)){ 46 // The next message will be the BMP image stateclient = ST_RECEIVEBMP_NEGATIVE; } } else { 151 // The packet is part of BMP file byte[] Rbuffer = new byte[8000]; int rbuffoffset; 157 int rbufflength; 158 // read the length of the stream and save the string in the 159 buffer array 160 rbufflength = dis.read(rbuffer); 161

130 106 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d 162 if (rbufflength!= -1) { try { 165 writesdcard.writetosdfile(rbuffer, rbufflength, TCPClient); } catch (Exception e) { Log.e("TCP Client", "S: Error at file write", e); 171 } finally { Log.i("TCP Client Writer", "S: Is it written?"); 174 } } else { 177 Log.i("TCP Client", "S: Image is received "); mmessagelistener.messagereceived("image is received"); dis.close(); 182 socket.close(); 183 mrun = false; 184 } 185 } } finally { 188 //the socket must be closed. It is not possible to reconnect to this socket 189 // after it is closed, which means a new socket instance has to be created. 190 dis.close(); 191 socket.close(); 192 } 193 } 194 } Κώδικας 4-16 Η Μέθοδος Run της Κλάσης TCPClient 195 //Declare the interface. The method messagereceived(string message) must be 196 implemented in 197 // the DSP2Android class on asyncktask doinbackground 198 public interface OnMessageReceived { 199 public void messagereceived(string message); 200 } public void changestate(int newstate){ 203 stateclient = newstate; 204 Log.d("TCP Client Remote", "State: " + Float.toString(stateClient)); 205 } public void logstate() { 208 Log.d("TCP Client", "State: " + Float.toString(stateClient)); 209 } 210 Κώδικας 4-17 Οι Υπόλοιπες Μέθοδοι της Κλάσης TCPClient Η Κλάση MyCustomAdapter H κλάση αυτή είναι υπεύθυνη για την εμφάνιση στην οθόνη διαφόρων μηνυμάτων από τον TCP πελάτη και από τον εξυπηρετητή, ώστε ο χρήστης να γνωρίζει τι συμβαίνει.

131 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς 107 Η κλάση MycustomAdapter βασίζεται στην κλάση BaseAdapter[43],[44], η οποία με τη σειρά της βασίζεται στην κλάση Adapter του android [42]. Στον κόσμο του android ο προσαρμογέας (Adapter) χρησιμοποιείται για να γεφυρώσει τα στοιχεία διαδραστικότητας του χρήστη με δομές δεδομένων ώστε αυτές να παρουσιαστούν στο χρήστη. Στην εφαρμογή DSP2Android ο προσαρμογέας MyCustomAdapter δέχεται τα δεδομένα μια λίστας πινάκων και τα παρουσιάζει στο σύστημα θέαση της εφαρμογής. Με τη χρήση μιας λίστας πινάκων (arraylist) κάθε μήνυμα αποθηκεύεται σε αυτή τη λίστα. Στη γραμμή 10 [Κώδικας 4-18], καλείται ο layout inflater, ο οποίος λαμβάνει το xml αρχείο θέασης, και τροποποιεί την ανάλογη εμφάνιση. Για την κλάση υλοποιούνται οι εξής μέθοδοι: getcount: Υπολογίζει το μέγεθος της λίστας getitem: Λαμβάνει τα δεδομένα του αντικειμένου. Δέχεται ως όρισμα τη θέση του αντικειμένου στη λίστα. getitemid: Λαμβάνει την ταυτότητα του αντικειμένου. Δέχεται ως όρισμα τη θέση του αντικειμένου στη λίστα. getview: Λαμβάνει το σύστημα θέασης, αν ήδη έχει οριστεί το χρησιμοποιεί, διαφορετικά δημιουργεί ένα νέο. Δέχεται ως όρισμα το όνομα του συστήματος θέασης. 1 public class MyCustomAdapter extends BaseAdapter { 2 private ArrayList<String> mlistitems; 3 private LayoutInflater mlayoutinflater; 4 5 public MyCustomAdapter(Context context, ArrayList<String> arraylist){ 6 7 mlistitems = arraylist; 8 9 //get the layout inflater 10 mlayoutinflater = (LayoutInflater) Context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 11 } public int getcount() { 15 //getcount() represents how many items are in the list 16 return mlistitems.size(); 17 } //get the data of an item from a specific position 21 //it represents the position of the item in the list 22 public Object getitem(int i) { return null; 25 }

132 108 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d 27 //get the position id of the item from the list 28 public long getitemid(int i) { 29 return 0; 30 } 32 public View getview(int position, View view, ViewGroup viewgroup) { //check to see if the reused view is null or not, if is not null then reuse it 35 if (view == null) { 36 view = mlayoutinflater.inflate(r.layout.list_item, null); 37 } 38 //get the string item from the position "position" from array list to put it on the TextView 39 String stringitem = mlistitems.get(position); 40 if (stringitem!= null) { TextView itemname = (TextView) View.findViewById(R.id.list_item_text_view); if (itemname!= null) { 45 //set the item name on the TextView 46 itemname.settext(stringitem); 47 } 48 } //this method must return the view corresponding to the data at the specified position return view; } 55 } Κώδικας 4-18 H Kλάση MyCustomAdapter Προβολή Εικόνων Για τη προβολή των εικόνων χρησιμοποιούνται δυο δραστηριότητες η DisplayImage και η DisplayOneImage Η Δραστηριότητα DisplayImage Η δραστηριότητα DisplayImage είναι υπεύθυνη για την προβολή των εικόνων στην οθόνη του κινητού. Αρχικά παρουσιάζονται σε σμίκρυνση όσες εικόνες έχουν αποθηκευτεί από την εφαρμογή, στη συνεχεία ο χρήστης μπορεί να επιλέξει μια εικόνα και να τη μεγεθύνει.

133 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς public class DisplayImage extends AppCompatActivity { 2 3 ImageView originalimage; 4 ImageView filteredimage1; 5 ImageView filteredimage2; 6 ImageView filteredimage3; 7 ImageView filteredimage4; 8 ImageView filteredimage5; 9 10 private GoogleApiClient client; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); 15 InputStream si1 = null; 16 setcontentview(r.layout.display_image); originalimage = (ImageView) findviewbyid(r.id.initial_photo); 19 filteredimage1 = (ImageView) findviewbyid(r.id.filtered_photo1); 20 filteredimage2 = (ImageView) findviewbyid(r.id.filtered_photo2); 21 filteredimage3 = (ImageView) findviewbyid(r.id.filtered_photo3); 22 filteredimage4 = (ImageView) findviewbyid(r.id.filtered_photo4); 23 filteredimage5 = (ImageView) findviewbyid(r.id.filtered_photo5); 24 File file; 25 Bitmap bitmap1; 26 LinearLayout disp_img; try { 29 File root = Environment.getExternalStorageDirectory(); 30 Log.i("DisplayImage", root.getabsolutepath() + "/DSP2Android/" + mydata.bmp"); // Display the Original Image 33 file = new File(root.getAbsolutePath() + "/DSP2Android/" + "mydata.bmp"); 34 if (file.exists()) { 35 si1 = new FileInputStream(root.getAbsolutePath() + "/DSP2Android/" + mydata.bmp"); Log.i("DisplayImage", "File is found"); 39 bitmap1 = BitmapFactory.decodeStream(si1); 40 Log.i("DisplayImage", "Streamer created"); 41 originalimage.setimagebitmap(bitmap1); } else { 44 disp_img = (LinearLayout) findviewbyid(r.id.img_original); 45 disp_img.setvisibility(disp_img.gone); 46 } Κώδικας 4-19 Η Μέθοδος oncreate της DisplayImage Για την προβολή των εικόνων χρησιμοποιείται το σύστημα θέασης ImageView. Αρχικά γίνεται αναγνώριση του αρχείου και εφόσον το αρχείο αυτό υπάρχει, προβάλλεται στην εμφάνιση της δραστηριότητας, σύμφωνα με τους ορισμούς στο ανάλογο xml. H ίδια μέθοδος χρησιμοποιείται για κάθε εικόνα που μπορεί να προβληθεί. 200 originalimage.setonclicklistener(new View.OnClickListener() { public void onclick(view v) { 203 Log.d("DisplayImage", "on click"); 204 DisplayOneImage doi=new DisplayOneImage(DisplayImage.this,"Original image"); 205 doi.show(); 206 } 207 }); Κώδικας 4-20 Η Μέθοδος onclicklistener της DisplayImage

134 110 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d Για κάθε εικόνα χρησιμοποιείται η μέθοδος OnClickListener. Με το άγγιγμα, η εικόνα ανοίγει σε νέο παράθυρο όπου μπορεί να μεγιστοποιηθεί καθώς καλείται η δραστηριότητα DisplayOneImage. Η εμφάνιση της δραστηριότητας DisplayImage ορίζεται στο αρχείο DisplayImage.xml. Για τη προβολή όλων των εικόνων χρησιμοποιείται το σύστημα θέασης ScrollView. Αυτό το σύστημα θέασης δίνει τη δυνατότητα προβολής μεγάλου αριθμού στοιχείων. Αν η οθόνη δε μπορεί να εμφανίσει όλα τα στοιχεία, εμφανίζεται μπάρα κύλισης (scrolling bar) η οποία επιτρέπει την περιήγηση. Εικόνα 4-8 Προβολή Εικόνων 1 <?xml version="1.0" encoding="utf-8"?> 2 <ScrollView xmlns:android= 3 xmlns:tools= 4 android:id="@+id/scrollview1" 5 android:layout_width="match_parent" 6 android:layout_height="fill_parent"> 7 8 <LinearLayout 9 android:orientation="vertical" 10 android:layout_height="fill_parent" 11 android:layout_width="fill_parent"> <LinearLayout 14 android:id="@+id/img_original" 15 android:layout_width="fill_parent" 16 android:layout_height="fill_parent" 17 android:orientation="vertical" 18 android:padding="10dp" 19 android:layout_weight="1">

135 20 21 <TextView 22 android:layout_width="match_parent" 23 android:layout_height="wrap_content" 24 /> <ImageView android:layout_width="match_parent" 30 android:layout_height="match_parent" 31 android:layout_weight="1"/> 32 </LinearLayout> <LinearLayout android:layout_width="match_parent" 37 android:layout_height="match_parent" 38 android:orientation="vertical" 39 android:padding="10dp" 40 android:layout_weight="1"> <TextView 43 android:layout_width="match_parent" 44 android:layout_height="wrap_content" 45 /> <ImageView android:layout_weight="1" 50 android:layout_width="match_parent" 51 android:layout_height="match_parent"/> </LinearLayout> 54 <LinearLayout android:layout_width="match_parent" 57 android:layout_height="match_parent" 58 android:orientation="vertical" 59 android:padding="10dp" 60 android:layout_weight="1"> <TextView 63 android:layout_width="match_parent" 64 android:layout_height="wrap_content" 65 /> 66 android:layout_height="match_parent"/> 67 <ImageView android:layout_weight="1" 70 android:layout_width="match_parent" 71 android:layout_height="match_parent"/> 72 </LinearLayout> 73 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς 111

136 112 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d 74 <LinearLayout 75 android:id="@+id/img_grayfilter" 76 android:layout_width="match_parent" 77 android:layout_height="match_parent" 78 android:orientation="vertical" 79 android:padding="10dp" 80 android:layout_weight="1"> <TextView 83 android:layout_width="match_parent" 84 android:layout_height="wrap_content" 85 android:text="@string/grayimg" /> <ImageView 88 android:id="@+id/filtered_photo4" 89 android:layout_weight="1" 90 android:layout_width="match_parent" 91 android:layout_height="match_parent"/> 92 </LinearLayout> 93 <LinearLayout 94 android:id="@+id/img_sobfilter" 95 android:layout_width="match_parent" 96 android:layout_height="match_parent" 97 android:orientation="vertical" 98 android:padding="10dp" 99 android:layout_weight="1"> <TextView 102 android:layout_width="match_parent" 103 android:layout_height="wrap_content" 104 android:text="@string/sobimg" /> <ImageView 107 android:id="@+id/filtered_photo5" 108 android:layout_weight="1" 109 android:layout_width="match_parent" 110 android:layout_height="match_parent"/> 111 </LinearLayout> 112 <LinearLayout 113 android:id="@+id/img_histeqfilter" 114 android:layout_width="match_parent" 115 android:layout_height="match_parent" 116 android:orientation="vertical" 117 android:padding="10dp" 118 android:layout_weight="1"> <TextView 121 android:layout_width="match_parent" 122 android:layout_height="wrap_content" 123 android:text="@string/histeq" /> <ImageView 126 android:id="@+id/filtered_photo6" 127 android:layout_weight="1" 128 android:layout_width="match_parent" 129 android:layout_height="match_parent"/> </LinearLayout> 132 </LinearLayout> 133 </ScrollView> Κώδικας 4-21 Η Εμφάνιση της Δραστηριότητας DisplayImage

137 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς 113 Η Δραστηριότητα DisplayOneImage Όταν μια εικόνα επιλεχθεί, ενεργοποιείται η DisplayOneImage δραστηριότητα. Η δραστηριότητα αυτή εμφανίζει μόνο την επιλεγμένη εικόνα στην οθόνη του κινητού και επιτρέπει στο χρήστη να τη μεγεθύνει. Η δραστηριότητα αυτή χρησιμοποιεί τη βιβλιοθήκη ImageViewTouch. Η εμφάνιση της δραστηριότητας DisplayOneImage είναι αρκετά απλή, καθώς πρέπει να προβάλλει μόνο μια εικόνα, χρησιμοποιώντας το σύστημα θέασης ImageViewTouch. Αρχικά αναγνωρίζει πια εικόνα επιλέχθηκε (γραμμές 41-47, Κώδικας 4-23), ώστε να προβάλει το ανάλογο αρχείο στην οθόνη του κινητού. Στη συνέχεια, με την χρήση των μεθόδων setsingletaplistener, setdoubletaplistener, setondrawablechangedlistener, αναγνωρίζει τα νεύματα του χρήστη στην οθόνη και προβαίνει στην ανάλογη αλλαγή της εικόνας. Για παράδειγμα, ο χρήστης με νεύματα μπορεί να μεγεθύνει ή σμικρύνει την εικόνα ή να την επαναφέρει στο αρχικό της μέγεθος με διπλό χτύπημα πάνω στην εικόνα ή επιστρέψει στην προβολή όλων των εικόνων με απλό χτύπημα σε κάποιο σημείο της οθόνης εκτός της εικόνας. 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android= 3 android:layout_width="fill_parent" 4 android:layout_height="200dp" 5 android:orientation="vertical" 6 android:background="#00ffffff"> 7 8 <com.apps.gv.library.imagezoom.utils.imageviewtouch 9 android:id="@+id/photo" 10 android:layout_width="match_parent" 11 android:layout_height="0dp" 12 android:layout_weight="1" 13 android:gravity="center"/> 14 </LinearLayout> Κώδικας 4-22 Εμφάνιση DisplayOneImage

138 114 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d Εικόνα 4-9 Προβολή μιας Εικόνας Μεγένθυνση 1 public class DisplayOneImage extends Dialog implements 2 android.view.view.onclicklistener { 3 4 public Activity c; 5 public Dialog d; 6 String itd; 7 ImageViewTouch OneImage; 8 String mypath = null; 9 InputStream xsi1 = null; 10 Bitmap xbitmap1; 11 LinearLayout disp_img; public DisplayOneImage(Activity a, String imagetobedisplayed) { 14 super(a); 15 // TODO Auto-generated constructor stub 16 this.c = a; 17 itd = imagetobedisplayed; 18 Log.i("DisplayOneImage", "2"); 19 } protected void oncreate(bundle savedinstancestate) { Log.i("DisplayOneImage", "1"); 25 super.oncreate(savedinstancestate); 26 requestwindowfeature(window.feature_no_title); setcontentview(r.layout.display_one_image); 29 ViewGroup.LayoutParams params = getwindow().getattributes(); params.width = LinearLayout.LayoutParams.MATCH_PARENT; 32 getwindow().setattributes((android.view.windowmanager.layoutparams) params); 33 34

139 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς OneImage = (ImageViewTouch) findviewbyid(r.id.photo); OneImage.setDisplayType(DisplayType.FIT_IF_BIGGER); 38 File root = Environment.getExternalStorageDirectory(); 39 Log.i("DisplayOneImage", "3"); if (itd.equals("original Image")) mypath = "mydata.bmp"; 42 if (itd.equals("negative Image")) mypath = "mydataneg.bmp"; 43 if (itd.equals("solarized Image")) mypath = "mydatasol.bmp"; 44 if (itd.equals("gray Image")) mypath = "mydatagray.bmp"; 45 if (itd.equals("sepia Image")) mypath = "mydatasep.bmp"; 46 if (itd.equals("sobel Image")) mypath = "mydatasob.bmp"; 47 if (itd.equals("histogram Equalized Image")) mypath = "mydatahisteq.bmp"; Log.i("DisplayOneImage", "4"); 50 File xfile = new File(root.getAbsolutePath() + "/DSP2Android/" + mypath); 51 Log.i("DisplayOneImage", "5"); if (xfile.exists()) { 54 try { 55 xsi1 = new FileInputStream(root.getAbsolutePath() + /DSP2Android/" + mypath); 56 Log.i("DisplayOneImage", "File is found"); 57 Log.i("DisplayOneImage", "6"); 58 xbitmap1 = BitmapFactory.decodeStream(xsi1); 59 Log.i("DisplayOneImage", "Streamer created"); 60 OneImage.setImageBitmap(xbitmap1, null, -1, -1); } catch (FileNotFoundException e) { 63 e.printstacktrace(); 64 Log.e("DisplayOneImage", "Fault"); 65 } 66 } else { 67 disp_img = (LinearLayout) indviewbyid(r.id.img_original); 68 disp_img.setvisibility(disp_img.gone); 69 } OneImage.setSingleTapListener( 72 new OnImageViewTouchSingleTapListener() { public void onsingletapconfirmed() { 76 Log.d("DisplayOneImage", "onsingletapconfirmed"); 77 } 78 }); OneImage.setDoubleTapListener( 81 new OnImageViewTouchDoubleTapListener() { public void ondoubletap() { 85 Log.d("DisplayOneImage", "ondoubletap"); 86 } 87 }); OneImage.setOnDrawableChangedListener( 90 new OnDrawableChangeListener() { public void ondrawablechanged(drawable drawable) { 94 Log.i("DisplayOneImage", "onbitmapchanged: " + drawable); 95 } 96 }); } 100 public void onclick(view v) { 101 dismiss(); 102 } 103 } Κώδικας 4-23 Η Δραστηριότητα DisplayOneImage

140 116 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d Η Δραστηριότητα Επεξεργασίας Αρχείων H δραστηριότητα FileManager, υλοποιεί τις εξής διεργασίες: Διαγραφή αρχείων Αποθήκευση αρχείων Η δραστηριότητα αυτή καθώς δεν έχει σύστημα θέασης δεν χρειάζεται να δηλωθεί στο μανιφέστο. Διαγραφή Αρχείων H μέθοδος DeleteAllFiles αρχικά ελέγχει αν υπάρχει ο φάκελος /DSP2Android/ (στο φάκελο αυτό αποθηκεύονται οι εικόνες που λαμβάνονται από τον DSP). Αν δεν υπάρχει ο φάκελος, εμφανίζεται η ανάλογη ειδοποίηση στο χρήστη. Αν υπάρχει, τα αρχεία σβήνονται και ο χρήστης ενημερώνεται. Εικόνα 4-10 Επιτυχές Σβήσιμο Αρχείων Το σβήσιμο των αρχείων γίνεται ως εξής: Ο κύριος φάκελος παίρνει ένα νέο μοναδικό όνομα. Το όνομα είναι της μορφής (DSP2Android_xxxxxx) όπου xxx είναι η τρέχουσα ώρα εκφρασμένη σε χιλιοστά του δευτερολέπτου περιέχουν (γραμμή 32 [Κώδικας 4-24]). Στην συνέχεια ελέγχεται αν περιέχει άλλους υποφακέλους. Κάθε υποφάκελος ελέγχεται αν περιέχει αρχεία, τα αρχεία αυτά, σβήνονται. Η διαδικασία συνεχίζεται μέχρι να σβηστούν όλοι οι φάκελοι και τα αρχεία που περιέχουν (γραμμές 55 67).

141 Ο ι Δ ρ α σ τ η ρ ι ό τ η τ ε ς τ η ς Ε φ α ρ μ ο γ ή ς 117 Η μετονομασία του φακέλου πρέπει να γίνει πριν το σβήσιμο του φακέλου, ώστε κατά τη διαγραφή των αρχείων ο χρήστης να έχει τη δυνατότητα να ζητήσει την αποθήκευση νέων εικόνων από το DSP, καθώς η πρόσβαση στο φάκελο κατά τη διαγραφή των αρχείων δεν επιτρέπεται. 1 public void DeleteAllFiles() { 2 3 Log.i("FileManager", "Delete All Files method is called"); 4 5 Toast toast; 6 CharSequence text = "0"; 7 int duration = 0; 8 9 File root = Environment.getExternalStorageDirectory(); 10 File dir = new File(root.getAbsolutePath() + "/DSP2Android"); if (!(dir.exists())) { text = "There are no files"; 16 duration = Toast.LENGTH_SHORT; Log.i("FileManager", text.tostring()); 19 toast = Toast.makeText(ctx, text, duration); 20 toast.show(); } else { duration = Toast.LENGTH_SHORT; 25 // Deleting the directory prevents a later writing on the same directory, 26 // the Problem comes from the Android System or / and the FAT32 system. 27 // Renaming the directory to a unique name and deleting the new one will 28 not prevent 29 // a future access on the same directory final File tobedeleteddir = new File(dir.getAbsolutePath() + system.currenttimemillis()); 32 dir.renameto(tobedeleteddir); deleterecursive(tobedeleteddir); if (!(dir.exists())) { 39 text = "Files are deleted!"; 40 Log.i("FileManager", text.tostring()); } else { 43 text = "Error during deletion"; 44 Log.e("FileManager", text.tostring()); 45 } toast = Toast.makeText(ctx, text, duration); 48 toast.show(); } } 53

142 118 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d 54 private void deleterecursive(file fileordirectory) { // The following procedure deletes files in a directory recursively 57 // Input: Directory Name if (fileordirectory.isdirectory()) { 60 for (File child : fileordirectory.listfiles()) { 61 deleterecursive(child); 62 } 63 } 64 fileordirectory.delete(); 65 } Κώδικας 4-24 Η Μέθοδος DeleteAllFiles Αποθήκευση Αρχείων Ο χρήστης έχει τη δυνατότητα να αποθηκεύσει τις εικόνες που έλαβε, ώστε να μη χαθούν αν ληφθούν νέες. Αν ζητηθεί η αποθήκευση των εικόνων, αλλά δεν υπάρχουν αποθηκευμένες, τότε ο χρήστης ενημερώνεται με ανάλογο αναδυόμενο μήνυμα (γραμμές [Κώδικας 4-25]). Διαφορετικά, οι εικόνες αποθηκεύονται σε ένα νέο φάκελο της μορφής DSP2Android_yyyy- MM-dd_hh-mm-ss (όπου yyyy αντιστοιχεί στη χρονολογία, ΜΜ στο μήνα, dd στη μέρα, hh στην ώρα, mm στα λεπτά, ss στα δευτερόλεπτα) (γραμμές ). Επίσης, εμφανίζεται ένα αναδυόμενο μήνυμα που ενημερώνει το χρήστη για την ακριβή τοποθεσία και ονομασία του νέου φακέλου. Εικόνα 4-11 Επιτυχής Αποθήκευση Εικόνων

143 Λ ο ι π ά Σ τ ο ι χ ε ί α τ ι ς Ε φ α ρ μ ο γ ή ς public void BackupAllFiles() { 2 Log.i("FileManager", "BackupAllFiles method is called"); 3 4 Toast toast; 5 CharSequence text = "0"; 6 int duration = 0; 7 8 File root = Environment.getExternalStorageDirectory(); 9 File dir = new File(root.getAbsolutePath() + "/DSP2Android"); if (!(dir.exists())) { text = "There are no files"; 15 duration = Toast.LENGTH_SHORT; Log.i("FileManager", text.tostring()); 18 toast = Toast.makeText(ctx, text, duration); 19 toast.show(); } else { duration = Toast.LENGTH_LONG; SimpleDateFormat sdf = new SimpleDateFormat("_yyyy-MM-dd_hh-mm-ss"); 26 String newdirname = sdf.format(new Date()); final File tobebackedupdir = new File(dir.getAbsolutePath() + newdirname); 30 dir.renameto(tobebackedupdir); text = "Files are saved in directory:/dsp2android" + newdirname; 33 Log.i("FileManager", text.tostring()); 34 toast = Toast.makeText(ctx, text, duration); 35 toast.show(); 36 } } 39 } Κώδικας 4-25 Η Μέθοδος BackupAllFiles 4.6 Λοιπά Στοιχεία τις Εφαρμογής Εικόνες και Εικονίδια Η εφαρμογή εκτός από τα xml αρχεία που σχετίζονται με την εμφάνιση και το σύστημα θέασης, καθώς και τα αρχεία της java που αφορούν τη λειτουργικότητά της περιέχει και άλλα αρχεία τα οποία σχετίζονται με γραφικά στοιχεία.

144 120 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d Εικόνα 4-12 Οι Φάκελοι Minmap και Drawable Φάκελος Μinmap Στο φάκελο mipmap περιέχονται εικόνες σε διαφορετικές αναλύσεις για κάθε τύπο οθόνης. Για παράδειγμα στον υποφάκελο ic_launcher περιέχεται το εικονίδιο της εφαρμογής [Εικόνα 4-13] σε διαφορετικές αναλύσεις. Εικόνα 4-13 Εικονίδιο της Εφαρμογής

145 Λ ο ι π ά Σ τ ο ι χ ε ί α τ ι ς Ε φ α ρ μ ο γ ή ς 121 Ο Φάκελος drawable Στο φάκελο drawable βρίσκονται διάφορες εικόνες που χρησιμοποιούνται στην εφαρμογή για παράδειγμα η εικόνα που εμφανίζεται στην εναρκτήρια εμφάνιση της εφαρμογής [Εικόνα 4-4] Στοιχεία Εμφάνισης Στο κατάλογο values αποθηκεύονται διάφοροι παράμετροι που σχετίζονται με το περιβάλλον της εφαρμογής. Για παράδειγμα, τα χρώματα που θα χρησιμοποιηθούν στις διάφορες μπάρες ή στην οθόνη κατά την εκτέλεση της εφαρμογής, οι διαστάσεις των εμφανίσεων, το είδος καθώς και το μέγεθος των γραμματοσειρών που θα εμφανιστούν στην οθόνη, λεζάντες που χρησιμοποιούνται κλπ. Από όλα τα παραπάνω στοιχεία, στην παρούσα εφαρμογή, χρησιμοποιήθηκε μόνο το XML αρχείο για τον ορισμό των λεζαντών strings.xml. Οι λεζάντες που χρησιμοποιήθηκαν φαίνονται στο παρακάτω κώδικα [Κώδικας 4-26]. Το αρχείο λεζαντών χρησιμοποιείται για την εμφάνιση των διαφόρων αλφαριθμητικών σε διαφορετικές γλώσσες, χωρίς όμως να απαιτείται η κλήση διαφορετικού κώδικα ή η δημιουργία διαφορετικού XML αρχείου εμφανίσεων. Για παράδειγμα η λεζάντα με την ταυτότητα GrayImg εμφανίζει την ετικέτα Gray Image πάνω από την ασπρόμαυρη εικόνα [Εικόνα 4-8]. Αυτό επιτυγχάνεται με το παρακάτω κώδικα που αντιστοιχεί στη γραμμή 85 του [Κώδικας 4-21]. Η ίδια ταυτότητα, θα μπορούσε να χρησιμοποιηθεί σε κάποιο άλλο XML αρχείο αλφαριθμητικών, που θα αντιστοιχεί σε άλλη γλώσσα πχ Ελληνικά, το οποίο θα περιέχει τις λεζάντες στην ανάλογη γλώσσα [48]. 85 /> 40 <resources> 41 <string name="app_name">dsp2android</string> 42 <string name="action_settings">settings</string> 43 <string name="requestimage">request Image</string> 44 <string name="displayimage">display Image</string> 45 <string name="filter">image Processing Algorithms</string> 46 <string name="send">send</string> 47 <string name="exitapp">exit/back</string> 48 <string name="origimg">original Image</string> 49 <string name="negimg">negative Image</string> 50 <string name="grayimg">gray Image</string> 51 <string name="sepimg">sepia Image</string> 52 <string name="sobimg">sobel Image</string> 53 <string name="histeq">histogram Equalized Image</string>

146 122 Α ν ά π τ υ ξ η τ η ς Ε φ α ρ μ ο γ ή ς σ τ ο A n d r o i d 54 <string name="solimg">extra Solarized Image</string> 55 <string name="negativefilter">negative</string> 56 <string name="solarizefilter">extra Solarize</string> 57 <string name="sobelfilter">sobel</string> 58 <string name="grayfilter">gray</string> 59 <string name="sepiafilter">sepia</string> 60 <string name="histeqfilter">histogram Equalized</string> 61 <string name="filter2">filter2</string> 62 <string name="delete">delete Files</string> 63 <string name="file_mng">file Management</string> 64 <string name="backup">backup Files</string> 65 </resources> Κώδικας 4-26 XML Αρχείο Λεζαντών Εικόνα 4-14 Στοιχεία Εμφάνισης

147 Σ χ ε δ ί α σ η Σ υ σ τ ή μ α τ ο ς γ ι α τ ο ν Α π ο μ α κ ρ υ σ μ έ ν ο Έ λ ε γ χ ο D S P Ε φ α ρ μ ο γ ώ ν Μ έ σ ω A n d r o i d 123 Κεφάλαιο 5 5 Η Εφαρμογή στον DSP 5.1 Εισαγωγή Στο κεφάλαιο αυτό παρουσιάζεται η αναπτυξη της εφαρμογής που εκτελει ο DSP. Για τον σκοπό αυτό αναλύεται αφενός το έργο καθώς και ο κώδικας που αναπτύχθηκε για την υλοποίηση της εφαρμογής (ο TCP/IP εξυπηρετητής στον DSP, οι αλγόριθμοι επεξεργασίας εικόνας που χρησιμοποιούνται, η επικοινωνία με το κινητό).

148 124 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P 5.2 Οι Προδιαγραφές τις Εφαρμογής Η εφαρμογή στον DSP χειρίζεται την κάμερα του αισθητήρα OV5610 για τη λήψη εικόνων. Επίσης αξιοποιώντας την Ethernet διασύνδεση που υποστηρίζει η κάρτα DSK-EYE, υλοποιείται ο TCP/IP εξυπηρετητής και συνδέεται μέσω Ethernet (Wifi) με τον πελάτη στο κινητό. Ανάλογα με την εντολή που θα δεχτεί μπορεί να εκτελέσει μια από τις παρακάτω διεργασίες: Να λάβει μια νέα εικόνα ή να εφαρμόσει κάποιο αλγόριθμο στην εικόνα που έχει ληφθεί και να την αποστείλει. Οι αλγόριθμοι επεξεργασίας εικόνας που υλοποιήθηκαν είναι οι εξής: Αρνητικό Extra-Solarize Ανίχνευσης Ακμών (Sobel) Ασπρόμαυρο Εξισορρόπηση ιστογράμματος 5.3 Το Έργο στον DSP Για το χτίσιμο του έργου στο DSP χρησιμοποιήθηκε το CCS Studio 3.1 καθώς και τα ανάλογα APIs της DSK (Camera API, LWIP και webview). Ο κώδικας της εφαρμογής βρίσκεται στο αρχείο DSP2Android_DSPside.c Αρχική Κατάσταση της Εφαρμογής - O TCP Server στον DSP Κατά την εκτέλεση του προγράμματος αρχικά δημιουργείται η διεργασία (task) TSK_webview, με συγκεκριμένη προτεραιότητα. H χρήση της διεργασίας θα αναδειχθεί κατά την κλήση της συνάρτησης DSKeyeGetframe, όπου με τη βοήθεια ενός semaphore, επιτυγχάνεται η συγχρονισμένη μεταφορά δεδομένων μέσω των EDMA καναλιών, με δεδομένα από τη FIFO του FPGA που κατευθύνονται στην εξωτερική μνήμη του DSK.

149 Τ ο Έ ρ γ ο σ τ ο ν D S P 125 Main () Create Task WebView Lwip Net Start No Create Socket Bind to Port No Terminate Yes Open DSKEye Infinite Loop Handle Connections Εικόνα 5-1 Διάγραμμα Ροής του Προγράμματος στον DSP

150 126 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P 1 main() 2 { 3 TSK_Handle tsk_cam; 4 tsk_cam=tsk_create( (Fxn)TSK_webview, NULL); 5 TSK_setpri(tsk_cam, 8); 6 } Void TSK_webview() 10 { int s,cs; 13 struct sockaddr_in addr; /* generic socket name */ 14 struct sockaddr client_addr; 15 int sock_len = sizeof(struct sockaddr); 16 int frame = 0; 17 // LgUns i=0; 18 // int len; 19 int x = DSKeye_SXGA_WIDTH, y = DSKeye_SXGA_HEIGHT; DSKeye_params CAM_params = { 22 #if CHIP_6711 CHIP_ , /*segid for DSK6711 */ 24 #else 25 1, /*segid DSK6416 & DSK6713*/ 26 #endif 27 SXGA /* Frame size */ 28 }; lwip_netstart(); Κώδικας 5-1 Η Βασική Συνάρτηση της Εφαρμογής Εικόνα 5-2 Προτεραιότητες Διακοπών

151 Τ ο Έ ρ γ ο σ τ ο ν D S P 127 Στη συνέχεια, καλείται η συνάρτηση lwip_netstart, όπου αρχικοποιούνται οι παράμετροι για τη δημιουργία του TCP/IP εξυπηρετητή. Ορίζονται οι παράμετροι που καθορίζουν το είδος της επικοινωνίας, του πρωτοκόλλου επικοινωνίας καθώς και την MAC διεύθυνση που απαιτείται στο IP πρωτόκολλο. Ακολουθεί η δημιουργία της υποδοχής (socket), που καθορίζει την επικοινωνίας σύμφωνα με το BSD API. Αν η υποδοχή δεσμευθεί (bind) επιτυχώς, καλείται η συνάρτηση DSKEyeOpen, με την οποία αρχικοποιείται η ανάλυση της κάμερας, καθώς και το τμήμα της μνήμης όπου θα αποθηκευτεί η εικόνα. Σε περίπτωση που δε δεσμευθεί επιτυχώς η υποδοχή ή η συνάρτηση DSKEyeOpen δεν ολοκληρωθεί επιτυχώς, τερματίζεται η λειτουργία του προγράμματος με την εμφάνιση του ανάλογου μηνύματος λάθους στην κονσόλα του CCS Studio. Διαφορετικά ακολουθεί ένα ατέρμονος βρόγχος (loop), όπου εκτελείται ο βασικός κώδικας. 34 /************************************************************** 35 * Main loop. 36 ***************************************************************/ s = socket( AF_INET, SOCK_STREAM, 0 ); 39 addr.sin_port = htons(80); 40 addr.sin_addr.s_addr = 0; 41 memset(&(addr.sin_zero), 0, sizeof(addr.sin_zero)); 42 printf("start\n"); 43 if( bind(s, (struct sockaddr*)&addr, sizeof(struct sockaddr))) 44 { 45 printf("error binding to port\n"); 46 return ; 47 } 48 printf("xx1\n"); 49 if(dskeye_open(&cam_params)) { 50 SYS_abort("DSKcam_CAMopen"); 51 fflush(stdout); 52 } while(true) { 55 printf("waiting for client to be connected... \n"); listen(s, 10); 58 cs = accept(s, &client_addr, &sock_len); 59 printf("client connected.\n"); 60 send(cs,(unsigned char *)"Server connected\n",17,0); 61 Κώδικας 5-2 Προετοιμασία του TCP Εξυπηρετητή Ο εξυπηρετητής που υλοποιείται στο DSK, αρχικά τίθεται σε κατάσταση αναμονής μέχρι να δεχτεί κάποιο αίτημα σύνδεσης που απευθύνεται σε αυτόν γραμμή 57 [Κώδικας 5-2]. Όταν λάβει το αίτημα, από την κατάσταση listen θα βρεθεί στην κατάσταση accept connection, όπου η σύνδεση με τον απομακρυσμένο πελάτη έχει αποκατασταθεί. Ταυτόχρονα στέλνει προς τον πελάτη ένα μήνυμα που επιβεβαιώνει της επιτυχή σύνδεση, όπως φαίνεται στη γραμμή 60 [Κώδικας 5-2] ( Server connected ). Στη συνέχεια, εισέρχεται σε κατάσταση λήψης (receive) όπου δέχεται δεδομένα από τον πελάτη. Τα δεδομένα αυτά φορτώνονται (αποθηκεύονται σε buffer) στην εσωτερική μνήμη. Ακολουθεί ο έλεγχος και η ανάλυση δεδομένων που έλαβε. Όταν ο εξυπηρετητής αποστείλει τα δεδομένα που του ζητήθηκαν επανέρχεται στην αρχική κατάσταση περιμένοντας αίτημα για νέα σύνδεση.

152 128 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P Λήψη Εικόνας από την Κάμερα Αν τα δεδομένα που έχουν ληφθεί περιέχουν κάποιο γράμμα πχ v, h κλπ. γίνεται αντιστοίχιση αυτού σε κάποια ανάλυση για τη φωτογραφία που θα ληφθεί. Στην εφαρμογή για λόγους χωρητικότητας στη μνήμη, ο εξυπηρετητής λαμβάνει αιτήματα για εικόνες μεγέθους (320x200) που αντιστοιχούν στην επιλογή h. Μπορεί όμως να λάβει και εντολές για άλλες αναλύσεις όπως φαίνεται παρακάτω: h HF - 320x200 v VGA - 640x480 s SXGA 1280x960 Πριν τη λήψη της εικόνας ρυθμίζεται αυτόματα το κέρδος και ο χρόνος έκθεσης του αισθητήρα εικόνας, γραμμή 67 [Κώδικας 5-3]. Το DSK επιτρέπει τον έλεγχο της αυτόματης ή της χειροκίνητης ανάθεσης τιμών στο ολικό κέρδος (Global Gain) και το χρόνο έκθεσης (Exposure Time). Ο έλεγχος της λειτουργίας γίνεται μέσω του καταχωρητή COMI[7:0] (Common Control I) με διεύθυνση 0x13. Για το χρόνο έκθεσης όταν COMI[0]=0 έχουμε χειροκίνητη λειτουργία ενώ για COMI[0]=1 έχουμε αυτόματη λειτουργία. Για το κέρδος όταν COMI[2]=0 έχουμε χειροκίνητη λειτουργία ενώ για COMI[2]=1 έχουμε αυτόματη λειτουργία. Στην αυτόματη λειτουργία ελέγχεται η μέση τιμή της φωτεινότητας, η τιμή της οποίας βρίσκεται στον καταχωρητή YAVG με διεύθυνση 0x2F. Η μέση τιμή του YAVG υπολογίζεται από τη μέση τιμή των χρωματικών συνιστωσών στους αντίστοιχους καταχωρητές με τη βοήθεια της σχέσης (BAVG[7:0] + GbAVG[7:0] + GrAVG[7:0] +RAVG[7:0]) x Αν η τιμή του YAVG κυμαίνεται μεταξύ μιας μέγιστης και ελάχιστης τιμής, η τιμή αυτή παραμένει ως έχει. Η μέγιστη και ελάχιστη τιμή ορίζεται στους καταχωρητές AEW με διεύθυνση 0x24 και AEB αντίστοιχα με διεύθυνση 0x25. Σε περίπτωση που δεν βρίσκεται μεταξύ της μέγιστης και ελάχιστης τιμής, θα μειώσει ή θα αυξήσει αντίστοιχα με συγκεκριμένο βήμα και ρυθμό, την τιμή του καταχωρητή κέρδους GAIN (διεύθυνση 0x00) και την τιμή του χρόνου έκθεσης, ώστε να βρεθεί ξανά η φωτεινότητα εντός ορίων. Η τιμή του χρόνου έκθεσης αποθηκεύεται σε τρεις καταχωρητές. Τα έξι πιο σημαντικά bits (AEC[16:11]) βρίσκονται στον καταχωρητή AECH[5:0], τα οχτώ ενδιάμεσα bits στον καταχωρητή AEC και τα τρία λιγότερο σημαντικά bits (AEC[2:0]) στον καταχωρητή COMB[2:0]. Το βήμα και ο ρυθμός μπορούν, επίσης, να μεταβληθούν από τον καταχωρητή COMB (Common Control B).

153 Τ ο Έ ρ γ ο σ τ ο ν D S P 129 Message = h OV5610_Resolution 320X200 Message = v OV5610_Resolution 640X480 Message = h OV5610_Resolution 1024X960 Automatic Setting of Gain and Exposure Capture image & Demosaic Send Image to Mobile Return to the intial State Εικόνα 5-3 Επιλογή Ανάλυσης

154 130 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P 54 while(true) { 55 printf("waiting for client to be connected... \n"); listen(s, 10); 58 cs = accept(s, &client_addr, &sock_len); 59 printf("client connected.\n"); 60 send(cs,(unsigned char *)"Server connected\n",17,0); 61 recv(cs, (unsigned char*)buffer, 17, 0); 62 printf("1 \n"); 63 switch (*(buffer)){ 64 case 'h' : 65 printf("auto Gain Detected\n"); 66 //set OV5610_COMI[2]; 67 OV5610_RegWrite(OV5610_COMI, 0xc7); 68 printf("hf Resolution Detected (320x200)\n"); 69 flush(stdout); if(dskeye_close(&cam_params) SYS_abort("DSKcam_CAMclose HF"); 72 CAM_params.frame_size = HF; 73 x = DSKeye_HF_WIDTH; 74 y = DSKeye_HF_HEIGHT; 75 if(dskeye_open(&cam_params)) 76 SYS_abort("DSKcam_CAMopen HF"); *SrcFrame = NULL; 79 REG32(0xA )=REG32(0xA ) - 0x800000; //Disable stepper controller vhdl Quartus Block for(frame = 0; frame < 4; frame++){ 84 // Allow AEC etc to settle SrcFrame = DSKeye_getFrame(); 87 } Κώδικας 5-3 Λήψη Εικόνας από την Κάμερα Αφού επιλεχθεί η ανάλυση της εικόνας που θα ληφθέι, θέτονται οι μεταβλητές width και height με τις σωστές τιμές. Στη συνέχεια, καλείται η συνάρτηση DSKeye getframe. Κατά την εκτέλεσή της καλείται ένα semaphore με σκοπό να συγχρονιστεί η διαδικασία λήψης δεδομένων από την FIFO του FPGA. Στη συνέχεια, ακολουθεί η διαδικασία του demosaicing. Οι τιμές των εικονοστοιχείων βρίσκονται στη μνήμη του DSP σε μορφή bayern. Θα πρέπει στο σημείο αυτό να κατασκευαστούν οι χρωματικές συνιστώσες που λείπουν από κάθε εικονοστοιχείο. Στη bayern αναπαράσταση σε κάθε εικονοστοιχείο τίθεται μόνο το ένα από τα τρία εικονοστοιχεία που ανήκουν στον RGB χρωματικό χώρο. Οι περιπτώσεις παρεμβολής εξηγούνται με τη βοήθεια της παρακάτω εικόνας [Εικόνα 5-4]. Στις περιπτώσεις (a) και (b), υπολογίζονται οι συνιστώσες που αντιστοιχούν στο κεντρικό πράσινο εικονοστοιχείο. Έχοντας την πράσινη συνιστώσα, απομένει να υπολογιστεί η κόκκινη και η μπλε. Η τιμή της κόκκινης συνιστώσας υπολογίζεται από τη μέση τιμή των δύο γειτονικών κόκκινων εικονοστοιχείων και η τιμή της μπλε από τη μέση τιμή των δύο γειτονικών μπλε εικονοστοιχείων. Ανάλογη λογική ακολουθείται και στη περίπτωση (d). Αφού ολοκληρωθεί η παρεμβολή των εικονοστοιχείων, ακολουθεί η διαδικασία αποστολής της εικόνας στο κινητό.

155 Τ ο Έ ρ γ ο σ τ ο ν D S P 131 Εικόνα 5-4 Παρεμβολή RGB Συνιστωσών 360 void demosaic( int cs, unsigned char *img,int xs, int ys) 361 { int iii, yyy; 364 unsigned int RBuff_ptr = 0; 365 unsigned int GBuff_ptr = 0; 366 unsigned int BBuff_ptr = 0; 367 unsigned int lengthframe = 0; 368 // printf("position of the sting in memory: %h \n", &SrcFrame); 369 // printf("r Position: %d \n", sizeof(srcframe)); 370 for (yyy = ys; yyy!= 0; yyy--) { 371 for (iii = xs; iii!= 0; iii--) { 372 if( yyy & 1 ) { // Odd line BGBGBG... BG 373 if( iii & 1 ) { 374 Bbuffer[BBuff_ptr++] = (*(img + iii-1 + xs*(yyy-1))+(*(img + iii+1 + xs*(yyy- 1)))+(*(img + iii-1 + xs*(yyy+1)))+(*(img + iii+1 + xs*(yyy+1))))>>2; 375 Gbuffer[GBuff_ptr++] = (*(img + iii + xs*(yyy-1) )+(*(img + iii-1 + xs*yyy ))+(*(img + iii+1 + xs*yyy ))+(*(img + iii + xs*(yyy+1))))>>2; 376 Rbuffer[RBuff_ptr++] = (*(img + iii + xs*yyy )); }else{ 379 Bbuffer[BBuff_ptr++] = (*(img + iii + (yyy-1)*xs)+(*(img + iii + (yyy+1)*xs)))>>1; 380 Gbuffer[GBuff_ptr++] = (*(img + iii + yyy*xs)); 381 Rbuffer[RBuff_ptr++] = (*(img + iii-1 + yyy*xs)+(*(img + iii+1 + yyy*xs)))>>1; 382 } 383 }else{ 384 //Even line GRGRGRGR...GR 385 if( iii & 1 ) { 386 Bbuffer[BBuff_ptr++] = (*(img + iii-1 + yyy*xs)+(*(img + iii+1 + yyy*xs)))>>1; // B=0 387 Gbuffer[GBuff_ptr++] = (*(img + iii + yyy*xs)); // G 388 Rbuffer[RBuff_ptr++] = (*(img + iii + (yyy-1)*xs)+(*(img + iii + (yyy+1)*xs)))>>1; }else{ 391 Bbuffer[BBuff_ptr++] = (*(img + iii + xs*yyy)); // B 392 Gbuffer[GBuff_ptr++] = (*(img + iii + xs*(yyy-1))+(*(img + iii-1 + xs*yyy))+(*(img + iii+1 + xs*yyy))+(*(img + iii + xs*(yyy+1))))>>2; // G=0 393 Rbuffer[RBuff_ptr++] = (*(img + iii-1 + xs*(yyy-1))+(*(img + iii+1 + xs*(yyy- 1)))+(*(img + iii-1 + xs*(yyy+1)))+(*(img + iii+1 + xs*(yyy+1))))>>2; // R=0 394 } } } }} Κώδικας 5-4 Demosaicing - Διαδικασία Παρεμβολής των Εικονοστοιχείων

156 132 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P Αποστολή Εικόνας στο Κινητό Αρχικά δημιουργείται η κεφαλίδα της bmp εικόνας, που περιέχει διάφορες πληροφορίες σχετικά με το μέγεθός, την ανάλυση και τα χαρακτηριστικά της BMP μορφοποίησης και καταλαμβάνει τα πρώτα 54 bytes του αρχείου. H κεφαλίδα στέλνεται σε διαφορετικό μήνυμα από τα δεδομένα της εικόνας. Εικόνα 5-5 Η BMP Κεφαλίδα 392 void sendbmp2(int cs, unsigned char *bintbuffer, unsigned char *gintbuffer, unsigned char *rintbuffer, int xs, int ys) { 393 int imgdataoffset = ; // file header size + bitmap header size 394 int rowsz = ((xs) + 3) & -4; // size of one padded row of pixels 395 int imgdatasize = (((xs * 3) + 3) & -4) * ys; // size of image data 396 int filesize = imgdataoffset + imgdatasize; 397 int iii, jjj, RGB_SIZE; 398 HTLM_bmp_H HTLM_bmp_h; 399 HTLM_bmp_h.bmfh.bfSize = filesize; 400 HTLM_bmp_h.bmfh.bfReserved1 = 0; 401 HTLM_bmp_h.bmfh.bfReserved2 = 0; 402 HTLM_bmp_h.bmfh.bfOffBits = imgdataoffset; 403 HTLM_bmp_h.bmih.biSize = 40; 404 HTLM_bmp_h.bmih.biWidth = xs; 405 HTLM_bmp_h.bmih.biHeight = ys; 406 HTLM_bmp_h.bmih.biPlanes = 1; 407 HTLM_bmp_h.bmih.biBitCount = 24; 408 HTLM_bmp_h.bmih.biCompression = 0; 409 HTLM_bmp_h.bmih.biSizeImage = imgdatasize; 410 HTLM_bmp_h.bmih.biXPelsPerMeter = 1000; 411 HTLM_bmp_h.bmih.biYPelsPerMeter = 1000; 412 // HTLM_bmp_h.bmih.biClrUsed = 1 << 24; 413 HTLM_bmp_h.bmih.biClrUsed = 0; 414 HTLM_bmp_h.bmih.biClrImportant = 0; 415 send(cs,(unsigned char *)"BM",2,0); 416 send(cs,(unsigned char *)&HTLM_bmp_h,sizeof(HTLM_bmp_h),0); 417 Κώδικας 5-5 Δημιουργία της Κεφαλίδας του BMP

157 Τ ο Έ ρ γ ο σ τ ο ν D S P 133 Μετά τη δημιουργία και αποστολή της κεφαλίδας, αποστέλλονται τα RGB δεδομένα εικόνας και ολοκληρώνεται η διαδικασία αποστολής και δημιουργίας του bitmap αρχείου. Για την αποστολή των χρωματικών δεδομένων χρησιμοποιείται ένας buffer αποστολής με μέγεθος BUFF_SIZE. Στο τμήμα του κώδικα που περιέχεται στο σώμα της συνάρτησης Send_RGB_Image, σαρώνεται η περιοχή που περιέχει τις χρωματικές συνιστώσες της εικόνας και με τη βοήθεια του δείκτη Buff_ptr οι τρεις συνιστώσες που αντιστοιχούν σε κάθε pixel και βρίσκονται αρχικά σε θέσεις μνήμης με απόσταση ίση με το μέγεθος μίας χρωματικής συνιστώσας, ανατίθενται σε διαδοχικές θέσεις του buffer όπως απαιτείται για τη σωστή απεικόνιση. Όταν η πληρότητα του buffer φθάσει το μέγιστο, δηλ. BUFF_SIZE, σταματά η σάρωση του βρόχου for και αποστέλονται τα δεδομένα στον πελάτη μέσω της συνάρτησης send. Στη συνέχεια, επαναλαμβάνεται η παραπάνω διαδικασία για τα υπόλοιπα pixels από τη σταθερά RGB_SIZE και τελικά η ροή εκτέλεσης εξέρχεται του βρόχου for και η αποστολή και δημιουργία του BMP αρχείου έχει ολοκληρωθεί. Εικόνα 5-6 Η Εικόνα από τον DSP σε RGB 422 RGB_SIZE = xs * ys; 423 jjj = 0; 424 for (iii = 0; iii <= RGB_SIZE; iii++) { 425 if( jjj == BUFF_SIZE ) { 426 if(send(cs, (unsigned char*) Buffer, BUFF_SIZE,0 )!= BUFF_SIZE){ 427 return; 428 } 429 jjj = 0; 430 } 431 if ( iii > xs ) {// padding 432 Buffer[Buff_ptr++] = 0; // B=0 433 Buffer[Buff_ptr++] = 0; // G=0 434 Buffer[Buff_ptr++] = 0; // R=0 435 } 436 Buffer[jjj++] = *(bintbuffer + (RGB_SIZE - iii)); 437 Buffer[jjj++] = *(gintbuffer + (RGB_SIZE - iii)); 438 Buffer[jjj++] = *(rintbuffer + (RGB_SIZE - iii)); 439 } Κώδικας 5-6 Αποστολή Πακέτων Εικόνας

158 134 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P Επεξεργασία Εικόνας Η επεξεργασία εικόνας στον DSP προσφέρει τη δυνατότητα στο χρήστη να επιλέξει την εφαρμογή ενός αλγορίθμου στην εικόνα που έχει λάβει. H εικόνα υπάρχει αποθηκευμένη στη μνήμη του DSP στις εξής μεταβλητές Rbuffer, GBuffer και Bbuffer. Οι αλγόριθμοι που μπορεί να ζητήσει ο χρήστης είναι οι εξής: Για την επιλογή του κατάλληλου αλγορίθμου ο εξυπηρετητής στον DSP λαμβάνει το ανάλογο μήνυμα από τον πελάτη. Κάποιοι αλγόριθμοι μπορούν να εφαρμοστούν αμέσως στην RGB εικόνα, ενώ κάποιοι άλλοι εφαρμόζονται στον YCbCr χρωματικό χώρο της εικόνας, ώστε η επεξεργασία να γίνει πιο γρήγορα, καθώς αρκεί η εφαρμογή του αλγορίθμου μόνο στην Y συνιστώσα. Για το λόγο υλοποιήθηκε η συνάρτηση μετατροπής της εικόνας στον YCbCr χρωματικό χώρο και η ανάστροφή της στον RGB χρωματικό χώρο.

159 Τ ο Έ ρ γ ο σ τ ο ν D S P 135 Message = 1 Apply Negative Filter Message = 2 Apply Extra Solarize Filter Message = 3 Apply Sepia Filter Message = 4 Apply Gray Filter Message = 5 Apply Sobel Filter Message = 6 Apply Histogram Equalization Filter Return to the intial State Send Image to Mobile Return to the intial State Εικόνα 5-7 Επιλογή Αλγορίθμου

160 136 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P 250 case '1' : 251 printf("negative filter is selected\n"); fflush(stdout); 252 demosaic(cs, SrcFrame, x, y); 253 inverse(bbuffer, Gbuffer, Rbuffer, x, y); 254 send(cs, (unsigned char *)"Sending Negative Image\n",23,0); 255 printf("sending Negative Filtered Image Completed...\n"); 256 flush(stdout); 257 break; case '2' : 260 printf("solarize filter is selected\n"); fflush(stdout); 261 demosaic(cs, SrcFrame, x, y); 262 extra_solarize(bbuffer, Gbuffer, Rbuffer, x, y); 263 send(cs,(unsigned char *)"Sending Solarized Image\n", 24, 0); 264 printf("sending Solarized Filtered Image Completed...\n"); 265 flush(stdout); 266 break; case '3' : 269 printf("histogram equaliztion filter is selected\n"); fflush(stdout); 270 demosaic(cs, SrcFrame, x, y); 271 sepia(bbuffer, Gbuffer, Rbuffer, x, y); 272 send(cs,(unsigned char *)"Sending Sepia Image\n", 20, 0); 273 printf("sending Sepia Filtered Image Completed...\n"); fflush(stdout); 274 break; case '4' : 277 printf("gray filter is selected\n"); fflush(stdout); 278 demosaic(cs, SrcFrame, x, y); 279 rgb2gray(bbuffer, Gbuffer, Rbuffer, x, y); 280 send(cs,(unsigned char *)"Sending Gray Image\n", 19, 0); 281 printf("sending Gray Filtered Image Completed...\n"); fflush(stdout); 282 break; case '5' : 285 printf("sobel filter is selected\n"); fflush(stdout); 286 demosaic(cs, SrcFrame, x, y); 287 RGB_to_YCbCr(Bbuffer, Gbuffer, Rbuffer, x, y); 288 sobel(bbuffer, Gbuffer, Rbuffer, x, y); 289 send(cs,(unsigned char *)"Sending Sobel Image\n", 20, 0); 290 printf("sending Sobel Filtered Image Completed...\n"); fflush(stdout); 291 break; case '6' : 294 printf("histogram equalization filter is selected\n"); fflush(stdout); 295 demosaic(cs, SrcFrame, x, y); 296 RGB_to_YCbCr(Bbuffer, Gbuffer, Rbuffer, x, y); 297 histogram_equalization(bbuffer, x, y); 298 YCbCr_to_RGB(Bbuffer, Gbuffer, Rbuffer, x, y); 299 send(cs,(unsigned char *)"Sending Hist Eq Image\n", 22, 0); 300 printf("sending Gray Filtered Image Completed...\n"); fflush(stdout); 301 break; Κώδικας 5-7 Επιλογή Αλγορίθμου Επεξεργασίας της Εικόνας

161 Τ ο Έ ρ γ ο σ τ ο ν D S P 137 Όταν εφαρμοστεί ο ανάλογος αλγόριθμος στην αρχική εικόνα, αποστέλλεται αρχικά ένα μήνυμα ενημερώνοντας τον πελάτη ότι ακολουθεί η αποστολή της εικόνας. Στη συνέχεια, στέλνεται η κεφαλίδα της νέας bmp εικόνας και ακολουθούν τα υπόλοιπα δεδομένα. Όταν τελειώσει η αποστολή, ο εξυπηρετητής επανέρχεται στην αρχική του κατάσταση περιμένοντας μια νέα σύνδεση. Στις παρακάτω υποπαραγράφους, παρουσιάζονται οι αλγόριθμοι επεξεργασίας της εικόνας. Μετασχηματισμός RGB σε ΥCbCr Ο μετασχηματισμός του RGB χρωματικού χώρου στον YCbCr χρωματικό χώρο είναι αρκετά αποδοτικός καθώς επιτρέπει την εφαρμογή του αλγορίθμου σε μια μόνο συνιστώσα της εικόνας (στην Υ), καθώς η Y συνιστώσα περιέχει την φωτεινότητα. Η Υ συνιστώσα φέρει πληροφορία και από τις τρεις συνιστώσες του RGB χρωματικού χώρου, ενώ οι άλλες δυο συνιστώσες περιέχουν χρωματική πληροφορία. Υ = R G B Cb = R G B Cr = 0.5 R G B void RGB_to_YCbCr(unsigned char *bintbuffer, unsigned char *gintbuffer, unsigned char *rintbuffer, int rows, int cols) 303 { 304 int iii; 305 int b, g, r; 306 int rgb_size = rows * cols; 307 for (iii = 0; iii < rgb_size; iii++) { 308 b = *(bintbuffer + iii); 309 g = *(gintbuffer + iii); 310 r = *(rintbuffer + iii); // The b-buffer is used as Y in YCbCr, Y = R G B 313 *(bintbuffer + iii) = (b* g* r*9798)>>15; // The g-buffer is used as Cb in YCbCr, Cb = R G B *(gintbuffer + iii) = ((b* g* r*5528)>>15) + 128; // The r-buffer is used as Cr in YCbCr, Cr = 0.5 R G B *(rintbuffer + iii) = ((- b* g* r*16384)>>15) + 128; 320 } 321 } Κώδικας 5-8 Μετροπή από RGB σε YCbCr

162 138 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P Μετατροπή ΥCbCr σε RGB Αφού εφαρμοστεί ο αλγόριθμος, γίνεται ο αντίστροφος μετασχηματισμός των Y Cb και Cr συνιστωσών σε RGB και η εικόνα είναι έτοιμη να αποσταλθεί στο κινητό. Οι παρακάτω σχέσεις δίνουν το συσχετισμό κατά την μετατροπή των Y Cb Cr συνιστωσών στις RGB. B = Y (Cb-128) G = Y (Cb-128) (Cr-128) R = Y (Cr-128) 322 void YCbCr_to_RGB(unsigned char *bintbuffer, unsigned char *gintbuffer, unsigned char *rintbuffer, int rows, int cols) 323 { 324 int iii; 325 int Y,Cb,Cr,temp_b,temp_g,temp_r; 326 int rgb_size = rows * cols; for(iii = 0; iii < rgb_size; iii++) { 329 Y = *(bintbuffer + iii); 330 Cb = *(gintbuffer + iii); 331 Cr = *(rintbuffer + iii); //B = Y (Cb-128) 334 temp_b = ((Cb * 58065) >> 15) + Y - 227; 335 temp_g = ((- Cr * Cb * 11277) >> 15) + Y + 136; 336 //G = Y (Cb-128) (Cr-128) 337 temp_r = ((Cr * 45941) >> 15) + Y - 179; 338 //R = Y (Cr-128) temp_b = (temp_b > 255)? 255 : temp_b; 341 temp_b = (temp_b < 0)? 0 : temp_b; 342 temp_g = (temp_g > 255)? 255 : temp_g; 343 temp_g = (temp_g < 0)? 0 : temp_g; 344 temp_r = (temp_r > 255)? 255 : temp_r; 345 temp_r = (temp_r < 0)? 0 : temp_r; 346 *(bintbuffer + iii) = temp_b; 347 *(gintbuffer + iii) = temp_g; 348 *(rintbuffer + iii) = temp_r; 349 } 350 } Κώδικας 5-9 Μετατροπή από YCbCr σε RGB Ασπρόμαυρο Ο αλγόριθμος αυτό μετατρέπει την αρχική εικόνα σε ασπρόμαυρη. Χρησιμοποιεί την Υ συνιστώσα του YCbCr χώρου και θέτει σε κάθε συνιστώσα του RGB την Υ συνιστώσα. Ως αποτέλεσμα, κάθε συνιστώσα έχει την ίδια τιμή, δίνοντας μια απόχρωση του γκρι.

163 Τ ο Έ ρ γ ο σ τ ο ν D S P 139 Εικόνα 5-8 Εφαρμγή του Ασπρόμαυρου Αλγορίθμου 351 void rgb2gray(unsigned char *bintbuffer, unsigned char *gintbuffer, unsigned char *rintbuffer, int rows, int cols) 352 { 353 int iii; 354 int rgb_size = rows * cols; unsigned char r, g, b; 357 unsigned char gray; for (iii = 0; iii < rgb_size; iii++) { r = *(rintbuffer + iii); 363 g = *(gintbuffer + iii); 364 b = *(bintbuffer + iii); gray = (r* g* b*.114); *(rintbuffer + iii) = gray; 369 *(gintbuffer + iii) = gray; 370 *(bintbuffer + iii) = gray; 371 } 372 } Κώδικας 5-10 Μετατροπή από RGB σε YCbCr Αρνητικό Η μετατροπή της εικόνας στο αρνητικό της εφαρμόζεται στον RGB χρωματικό χώρο. Κατά την επεξεργασία αναστρέφεται η κάθε συνιστώσα της εικόνας. Αυτό επιτυγχάνεται με την

164 140 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P αφαίρεση από το 255 της τιμής της κάθε συνιστώσας του RGB χρωματικό χώρου, του κάθε εικονοστοιχείου. Εικόνα 5-9 Το Αρνητικό της Εικόνας 373 void inverse(unsigned char *bintbuffer, unsigned char *gintbuffer, unsigned char *rintbuffer, int rows, int cols) { 374 //This function inverses image colors --> Color Inversion(works) 375 int rgb_size; 376 int iii; 377 rgb_size = rows * cols; for(iii = 0; iii<rgb_size; iii++) { 380 *(bintbuffer + iii) = *(bintbuffer + iii); 381 *(bintbuffer + iii) = (*(bintbuffer + iii) > 255)? 255 : *(bintbuffer + iii); *(gintbuffer + iii) = *(gintbuffer + iii); 384 *(gintbuffer + iii) = (*(gintbuffer + iii) > 255)? 255 : *(gintbuffer + iii); *(rintbuffer + iii) = *(rintbuffer + iii); 387 *(rintbuffer + iii) = (*(rintbuffer + iii) > 255)? 255 : *(rintbuffer + iii); 388 } 389 } Κώδικας 5-11 Μετατροπή της Εικόνας στο Αρνητικό

165 Τ ο Έ ρ γ ο σ τ ο ν D S P 141 Extra Solarizing Ο extra solarize αλγόριθμος εφαρμόζεται στον RGB χρωματικό χώρο. Κατά την επεξεργασία αναστρέφεται η κάθε συνιστώσα της RGB εικόνας, αν η τιμή της είναι μεγαλύτερη από τη μέση τιμή όλης της εικόνας. Ο αλγόριθμος αυτός εφαρμόζεται και στις τρεις συνιστώσες του RGB χρωματικού χώρου. Εικόνα 5-10 Εφαρμογή του Extra Solarize Αλγορίθμου 390 void extra_solarize(unsigned char *bintbuffer, unsigned char *gintbuffer, unsigned char *rintbuffer, int rows, int cols) 391 { 392 int rgb_size; 393 int iii; 394 int threshold; 395 threshold = 0; 396 rgb_size = rows * cols; // Calculate the threshold for the solarization, in this case is the mean value of the whole picture 399 for(iii = 0; iii < rgb_size; iii++) 400 threshold += *(bintbuffer + iii) + *(gintbuffer + iii) + *(rintbuffer + iii); threshold /= 3 * rgb_size; // Colour values above the threshold are inverted 405 for(iii = 0; iii < rgb_size; iii++) { *(bintbuffer + iii) = (*(bintbuffer + iii)< threshold)? (255 - *(bintbuffer + iii)) : (*(bintbuffer + iii)); 408 *(gintbuffer + iii) = (*(gintbuffer + iii)< threshold)? (255 - *(gintbuffer + iii)) : (*(gintbuffer + iii)); 409 *(rintbuffer + iii) = (*(rintbuffer + iii)< threshold)? (255 - *(rintbuffer + iii)) : (*(rintbuffer + iii)); //*(rgb+i) = (*(rgb+i)<0)? 0 : *(rgb+i); 412 *(bintbuffer + iii) = (*(bintbuffer + iii) > 255)? 255 : (*(bintbuffer + iii)); 413 *(gintbuffer + iii) = (*(gintbuffer + iii) > 255)? 255 : (*(gintbuffer + iii)); 414 *(rintbuffer + iii) = (*(rintbuffer + iii) > 255)? 255 : (*(rintbuffer + iii)); 415 } 416 } Κώδικας 5-12 Ο Extra Solarize Αλγόριθμος

166 142 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P Ανίχνευση Ακμών Sobel Ο αλγόριθμος Sobel επιτρέπει την ανίχνευση των ακμών σε μια εικόνα. Επειδή ο αριθμός των πράξεων για την επεξεργασία είναι αρκετά μεγάλος, είναι αρκετά αποδοτικό να μετατραπεί αρχικά η εικόνα από τον RGB στον YCbCr χρωματικό χώρο. Στην συνέχεια, εφαρμόζεται ο αλγόριθμος στην Υ συνιστώσα του YCbCr χώρου. Ως αποτέλεσμα, στέλνεται μόνο η Y συνιστώσα, δίνοντας μια ασπρόμαυρη εικόνα. Οι πίνακες που εφαρμόστηκαν για την ανίχνευση των ακμών φαίνονται παρακάτω: Εικόνα 5-11 Οι Πίνακες του Sobel 417 void sobel(unsigned char *bintbuffer, unsigned char *gintbuffer, unsigned char *rintbuffer, int rows, int cols) 418 { 419 int iii = 0; 420 int jjj = 0; 421 int kkk = 0; int Gx, Gy, G; 424 int rgb_size = rows * cols; 425 unsigned char nw, n, ne, e, se, s, sw, w, c; // nw n ne 428 // Gx = 2 0-2, Gy = 0 0 0, w c e 429 // sw s se for (iii = 0; iii < rgb_size; iii++) { 432 *(rintbuffer + iii) = *(gintbuffer + iii); 433 } 434 for (iii = 0; iii < cols; iii++) { 435 for (jjj = 0; jjj < rows; jjj++) { 436 nw = *(bintbuffer + jjj + iii*rows); 437 n = *(bintbuffer + (jjj + 1) + iii*rows); 438 ne = *(bintbuffer + (jjj + 2) + iii*rows); 439 e = *(bintbuffer + (jjj + 2) + (iii + 1)*rows); 440 se = *(bintbuffer + (jjj + 2) + (iii + 2)*rows); 441 s = *(bintbuffer + (jjj + 1) + (iii + 2)*rows); 442 sw = *(bintbuffer + jjj + (iii + 2)*rows); 443 w = *(bintbuffer + jjj + (iii + 1)*rows); 444 c = *(bintbuffer + (jjj + 1) + (iii + 1)*rows); 445

167 Τ ο Έ ρ γ ο σ τ ο ν D S P if (iii == 0) {nw = w; n = c; ne = e;} 449 if (jjj == 0) {nw = n; w = c; sw = s;} 450 if (iii == rows - 1) {se = e; s = c; sw = w;} 451 if (jjj == cols - 1) {ne = n; e = c; se = s;} Gy = nw + 2*n + ne - se - 2*s - sw; 454 Gx = nw + 2*w + sw - ne - 2*e - se; 455 G = (abs(gx) + abs(gy))/2; 456 if (G > 255) G = 255; 457 if (G < 0) G = 0; *(gintbuffer + kkk) = G; 461 kkk++; 462 } 463 } // Perform Graying of the picture for(iii=0; iii < rgb_size; iii++) { 468 *(rintbuffer + iii) = *(gintbuffer + iii); 469 *(bintbuffer + iii) = *(gintbuffer + iii); 470 } 471 } Κώδικας 5-13 Ο Αλγόριθμος Sobel Εικόνα 5-12 Εφαρμογή του Sobel Εξισορρόπηση Ιστογράμματος O αλγόριθμος εξισορρόπησης ιστογράμματος αυξάνει τη χρωματική αντίθεση της εικόνας, καθώς κατανέμει ομοιόμορφα τη φωτεινότητα της εικόνας σε όλη τη κλίμακα. Αρχικά η εικόνα μετασχηματίζεται από τον RGB στον YCbCr χρωματικό χώρο. Στην συνέχεια εφαρμόζεται ο

168 144 Η Ε φ α ρ μ ο γ ή σ τ ο ν D S P αλγόριθμος στην Υ συνιστώσα του YCbCr χώρου και ο YCbCr χώρος μετασχηματίζεται στον RGB. 472 void histogram_equalization(unsigned char *rgb, int rows, int cols) { 473 int iii, hist[256], sum_hist[256], sum; 474 int rgb_size = rows * cols; 475 float sf; for (iii = 0; iii<256; iii++) { 478 hist[iii] = 0; 479 sum_hist[iii] = 0; 480 } for(iii=0; iii < rgb_size; iii++) { 483 hist[(int) *(rgb + iii)]++; 484 } sum = 0; 487 sf=(double)(255.0/(rgb_size)); for(iii = 0; iii<256; iii++) { 490 sum = sum + hist[iii]; 491 sum_hist[iii] = (int)(sum*sf); 492 } for(iii=0; iii<rgb_size; iii++) { 495 if (sum_hist[(int) *(rgb + iii)]>255) 496 sum_hist[(int) *(rgb + iii)] = 255; 497 if (sum_hist[(int) *(rgb + iii)]<0) 498 sum_hist[(int) *(rgb + iii)]= 0; *(rgb + iii) = sum_hist[(int) *(rgb + iii)]; 501 } 502 } Κώδικας 5-14 Αλγόριθμος Εξισσορόπησης Ιστογράμματος Εικόνα 5-13 Εφαρμογή Εξισορρόπησης Ιστογράμματος

169 Σ χ ε δ ί α σ η Σ υ σ τ ή μ α τ ο ς γ ι α τ ο ν Α π ο μ α κ ρ υ σ μ έ ν ο Έ λ ε γ χ ο D S P Ε φ α ρ μ ο γ ώ ν Μ έ σ ω A n d r o i d 145 Κεφάλαιο 6 6 Συνολική Παρουσίαση Εφαρμογής - Αποτελέσματα - Συμπεράσματα 6.1 Εισαγωγή Στο κεφάλαιο αυτό γίνεται επίδειξη της λειτουργίας του συστήματος, αναπτύσσονται τα αποτελέσματα, τέλος παρουσιάζονται τα συμπεράσματα από αυτή την εργασία. Για την ανάπτυξη του συστήματος χρησιμοποιήθηκαν 2 PCs, (με windows XP για την εφαρμογή στο DSP και windows 10 για την εφαρμογή στο android), ένα κινητό τηλέφωνο με λειτουργικό σύστημα android (lg g3 έκδοση android 5.0) για την εκτέλεση της εφαρμογής και ένας δρομολογητής (router) για την επικοινωνία μεταξύ DSP - δρομολογητή (επικοινωνία μέσω ethernet) δρομολογητή - κινητού τηλεφώνου (επικοινωνία μέσω wifi) [Εικόνα 6-1].

170 146 Σ υ ν ο λ ι κ ή Π α ρ ο υ σ ί α σ η Ε φ α ρ μ ο γ ή ς - Α π ο τ ε λ έ σ μ α τ α - Σ υ μ π ε ρ ά σ μ α τ α Εικόνα 6-1 Το Σύστημα 6.2 Εκτέλεση της Εφαρμογής Αρχικά φορτώνεται το έργο στο CCS Studio 3.1 [Εικόνα 6-2], συνδέεται το PC με τον DSP [Εικόνα 6-3], και φορτώνεται στον DSP το πρόγραμμα (.out) [Εικόνα 6-4]. Με την εκκίνηση του προγράμματος εμφανίζεται μήνυμα στο stdout του DSP που ενημερώνει τον χρήστη ότι ο εξυπηρετητής στο DSP περιμένει το πελάτη να συνδεθεί [Εικόνα 6-5].

171 Ε κ τ έ λ ε σ η τ η ς Ε φ α ρ μ ο γ ή ς 147 Εικόνα 6-2 Φόρτωση του έργου στο CCS Studio Εικόνα 6-3 Σύνδεση του DSP με το PC

172 148 Σ υ ν ο λ ι κ ή Π α ρ ο υ σ ί α σ η Ε φ α ρ μ ο γ ή ς - Α π ο τ ε λ έ σ μ α τ α - Σ υ μ π ε ρ ά σ μ α τ α Εικόνα 6-4 Φόρτωση του Προγράμματος στο DSP Εικόνα 6-5 Εκκίνηση του Προγράμματος στο DSP Στη συνέχεια, ο χρήστης επιλέγει την εφαρμογή στο κινητό [Εικόνα 6-6]. Κατά την εκκίνησή της, εμφανίζεται η αρχική εικόνα [Εικόνα 6-7]. Στη συνέχεια, καλείται η βασική οθόνη της εφαρμογής. Κατά την κλήση της, συνδέεται ο πελάτης με τον εξυπηρετητή και εμφανίζονται τα ανάλογα μηνύματα στο κινητό [Εικόνα 6-8] και στην stdout του DSP [Εικόνα 6-9].

173 Ε κ τ έ λ ε σ η τ η ς Ε φ α ρ μ ο γ ή ς 149 Εικόνα 6-6 Εκκίνηση της Εφαρμογής στο Κινητό Εικόνα 6-7 Εναρκτήρια Εικόνα

174 150 Σ υ ν ο λ ι κ ή Π α ρ ο υ σ ί α σ η Ε φ α ρ μ ο γ ή ς - Α π ο τ ε λ έ σ μ α τ α - Σ υ μ π ε ρ ά σ μ α τ α Εικόνα 6-8 Σύνδεση Πελάτη με Εξυπηρετητή στο Κινητό Εικόνα 6-9 Σύνδεση Πελάτη με Εξυπηρετητή στο DSP Αφού ολοκληρωθεί η σύνδεση του κινητού με τον DSP, το κινητό μπορεί να στείλει πια εντολές προς τον DSP, ώστε να γίνει ανάκτηση νέας εικόνας ή να εφαρμοστεί κάποιος αλγόριθμος επεξεργασίας εικόνας. Ο χρήστης ζητά από το DSP μια νέα εικόνα, επιλέγοντας στο μενού του κινητού Request Image [Εικόνα 6-10]. Ο DSP λαμβάνει την εντολή μέσω του TCP/IP πρωτοκόλλου και αποθηκεύει μια νέα εικόνα. Μετά την αποθήκευση της εικόνας στη μνήμη του DSP, η εικόνα μετατρέπεται σε BMP και αποστέλλεται στο κινητό [Εικόνα 6-12]. Το κινητό λαμβάνει τα ανάλογα μηνύματα και συγχρονίζεται με τον DSP, ώστε να είναι έτοιμο να δεχτεί τα δεδομένα της εικόνας και να τα αποθηκεύσει στο αντίστοιχο αρχείο στην εσωτερική SD κάρτα μνήμης [Εικόνα 6-11]. Ο χρήστης μέσω του μενού, μπορεί να δει την εικόνα που έλαβε [Εικόνα 6-13].

175 Ε κ τ έ λ ε σ η τ η ς Ε φ α ρ μ ο γ ή ς 151 Εικόνα 6-10 Εντολή για Ανάκτηση Εικόνας Εικόνα 6-11 Λήψη της Εικόνας στο Κινητό

176 152 Σ υ ν ο λ ι κ ή Π α ρ ο υ σ ί α σ η Ε φ α ρ μ ο γ ή ς - Α π ο τ ε λ έ σ μ α τ α - Σ υ μ π ε ρ ά σ μ α τ α Εικόνα 6-12 Λήψη Eικόνας από τον DSP και Αποστολή στο Κινητό Εικόνα 6-13 Προβολή της Εικόνας στο Κινητό Αφού ο χρήστης δει την εικόνα, πατώντας το τρίγωνο ή από το μενού με την επιλογή back, επιστρέφει στη βασική οθόνη της εφαρμογής, όπου μπορεί να ζητήσει την εφαρμογή κάποιου αλγορίθμου επεξεργασίας της εικόνας μέσω του μενού. Αφού επιλέξει κάποιον αλγόριθμο, η ανάλογη εντολή στέλνεται στον DSP (επιλέγεται η μετατροπή της εικόνας στο αρνητικό της ( Negative ) [Εικόνα 6-14]. Ο DSP λαμβάνει την εντολή, επεξεργάζεται την εικόνα που έχει είδη αποθηκεύσει και την αποστέλλει ως BMP στο κινητό [Εικόνα 6-15]. Το κινητό λαμβάνει τα ανάλογα μηνύματα και συγχρονίζεται με τον DSP, ώστε να είναι έτοιμο να δεχτεί τα δεδομένα της εικόνας και να τα αποθηκεύσει στο αντίστοιχο αρχείο στην εσωτερική SD κάρτα μνήμης [Εικόνα 6-16]. Όταν η εικόνα ληφθεί από το κινητό εμφανίζεται το ανάλογο μήνυμα στο κινητό και ο χρήστης μπορεί να την εξετάσει [Εικόνα 6-17].

177 Ε κ τ έ λ ε σ η τ η ς Ε φ α ρ μ ο γ ή ς 153 Εικόνα 6-14 Εντολή για Επεξεργασία της Εικόνας Εικόνα 6-15 Μετατροπή της Εικόνας στο Αρνητικό και Αποστολή της

178 154 Σ υ ν ο λ ι κ ή Π α ρ ο υ σ ί α σ η Ε φ α ρ μ ο γ ή ς - Α π ο τ ε λ έ σ μ α τ α - Σ υ μ π ε ρ ά σ μ α τ α Εικόνα 6-16 Λήψη της Αρνητικής Εικόνας Εικόνα 6-17 Προβολή Ληφθέντων Εικόνων

179 Ε κ τ έ λ ε σ η τ η ς Ε φ α ρ μ ο γ ή ς 155 Εικόνα 6-18 Προβολή Όλων των Ληθφέντων Εικόνων Εικόνα 6-19 Προβολή και Μεγένθυνση μιας Εικόνας Στη συνέχεια, ο χρήστης μπορεί να ζητήσει την εφαρμογή και άλλων αλγορίθμων επεξεργασίας εικόνας στην αρχική εικόνα. Η διαδικασία που περιγράφηκε ανωτέρω επαναλαμβάνεται για κάθε νέα εικόνα. Κατά την προβολή των εικόνων εμφανίζονται όσες έχουν ληφθεί [Εικόνα 6-18]. Κατά τη προβολή της εικόνας, ο χρήστης μπορεί να επιλέξει μόνο μια εικόνα και να την μεγεθύνει [Εικόνα 6-19]. Αν το αποτέλεσμα είναι ικανοποιητικό, μπορεί να μεταφέρει το φάκελο με τις εικόνες σε μια νέα θέση ώστε να μην σβηστούν, επιλέγοντας στο μενού File Management > Backup Files, διαφορετικά μπορεί να τις σβήσει επιλέγοντας File Management > Delete Files. Σε κάθε περίπτωση ενημερώνεται για το αποτέλεσμα της επιλογής του με το ανάλογο αναδυόμενο μήνυμα.

180 156 Σ υ ν ο λ ι κ ή Π α ρ ο υ σ ί α σ η Ε φ α ρ μ ο γ ή ς - Α π ο τ ε λ έ σ μ α τ α - Σ υ μ π ε ρ ά σ μ α τ α Εικόνα 6-20 Διαχείριση Αρχείων 6.3 Συμπεράσματα - Προτάσεις Η παρούσα διπλωματική εργασία είχε ως αντικείμενο την ανάπτυξη ενός συστήματος για την αποστολή δεδομένων από τον DSP σε κινητό με το λειτουργικό σύστημα android. Η επιλογή της ανάπτυξης του συστήματος κρίνεται επιτυχής, όπως φαίνεται παρακάτω. Μέσω της εργασίας αυτής έγινε εξοικείωση με το ραγδαία εξελισσόμενο κόσμο του android, που αριθμεί άνω των δύο δισεκατομμυρίων ενεργών συσκευών [46]. Με την έλευση του ΙοΤ (Internet of Things) οι android συσκευές, και γενικότερα οι έξυπνες τηλεφωνικές συσκευές, αναμένεται να παίξουν σημαντικό ρόλο αποτελώντας τον συνδετικό κρίκο μεταξύ υπολογιστικά ασθενών αισθητήρων που θα βρίσκονται σχεδόν παντού (από τα ρούχα, ως εμφυτεύματα στο σώμα) και του χρήστη ή του διαδικτύου [47]. Η εξοικείωση με τον προγραμματισμό εφαρμογών για συσκευές android, αποτελεί ένα πολύ ισχυρό εργαλείο για κάθε μηχανικό ή προγραμματιστή, καθώς η ζήτηση στην αγορά εργασίας είναι πολύ μεγάλη. Επίσης, μέσω του καταστήματος εφαρμογών της google (play store) δίνεται η δυνατότητα προώθησης της κάθε εφαρμογής. Το σύστημα που υλοποιήθηκε, χρησιμοποιεί δυο συσκευές διαφορετικής λογικής τόσο ως προς τη χρήση τους όσο και ως προς το τρόπο ανάπτυξής τους. Ο προγραμματισμός του συστήματος απαιτούσε την ταυτόχρονη ανάπτυξη κώδικα σε δύο αρκετά διαφορετικές προγραμματιστικές γλώσσες (εκ διαμέτρου αντίθετες ως προς τη λογική τους), στην γλώσσα

Ανάπτυξη Διεπαφών Χρήστη σε Λειτουργικά Συστήματα Κινητών Συσκευών

Ανάπτυξη Διεπαφών Χρήστη σε Λειτουργικά Συστήματα Κινητών Συσκευών Βιβλιογραφία: Ανάπτυξη Διεπαφών Χρήστη σε Λειτουργικά Συστήματα Κινητών Συσκευών Προγραμματισμός Android Ian Clifton. AndroidTM User Interface Design, Addison-Wesley, 2013 P. Deitel. H. Deitel, A. Deitel.

Διαβάστε περισσότερα

ANDROID Προγραμματισμός Εφαρμογών

ANDROID Προγραμματισμός Εφαρμογών ANDROID Προγραμματισμός Εφαρμογών Παναγιώτης Κρητιώτης ΑΜ 1607 Περιεχόμενα Εισαγωγή Βασικά Στοιχεία Χαρακτηριστικά Αρχιτεκτονική Εργαλεία Προγραμματισμού Eclipse IDE Android SDK - ADT Plugin Προσομοιωτής

Διαβάστε περισσότερα

ΠΡΟΛΟΓΟΣ. Σε ποιους απευθύνεται αυτό το βιβλίο... vi Διάρθρωση του βιβλίου... vi

ΠΡΟΛΟΓΟΣ. Σε ποιους απευθύνεται αυτό το βιβλίο... vi Διάρθρωση του βιβλίου... vi Πίνακας Περιεχομένων ΠΡΟΛΟΓΟΣ V Σε ποιους απευθύνεται αυτό το βιβλίο... vi Διάρθρωση του βιβλίου... vi 1η Ενότητα: Κινητός ιστός... vii 2η Ενότητα: Κινητές εφαρμογές στην πλατφόρμα Android... vii 3η Ενότητα:

Διαβάστε περισσότερα

Python και Android. Νίκος Νοδαράκης. 17 Μαΐου 2010

Python και Android. Νίκος Νοδαράκης. 17 Μαΐου 2010 Python και Python και Νίκος Νοδαράκης 17 Μαΐου 2010 Python και Τι είναι το ; Περιγραφή του Ορισµός Το είναι µια στοίβα λογισµικού για ϕορητές συσκευές που περιλαµβάνει ένα λειτουργικό σύστηµα, middleware

Διαβάστε περισσότερα

Digital Academy. Εισαγωγή στην ανάπτυξη Android Εφαρμογών

Digital Academy. Εισαγωγή στην ανάπτυξη Android Εφαρμογών Digital Academy Εισαγωγή στην ανάπτυξη Android Εφαρμογών Περιεχόμενα ΠΕΡΙΕΧΟΜΕΝΑ... 2 ΕΝΟΤΗΤΑ 1 ΠΡΩΤΗ ΓΝΩΡΙΜΙΑ ΜΕ ΤΟ ANDROID... 4 1.1 ΕΙΣΑΓΩΓΗ... 4 1.2 ΠΗΓΕΣ ΓΝΩΣΗΣ... 4 1.3 ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ... 5 1.4

Διαβάστε περισσότερα

Ανάπτυξη διαδικτυακής εφαρμογής σε περιβάλλον κινητών συσκευών με λειτουργικό σύστημα Android

Ανάπτυξη διαδικτυακής εφαρμογής σε περιβάλλον κινητών συσκευών με λειτουργικό σύστημα Android Ανάπτυξη διαδικτυακής εφαρμογής σε περιβάλλον κινητών συσκευών με λειτουργικό σύστημα Android Ιωάννης Γιαννόπουλος, ΑΜ: 0430 Γεώργιος Δούρος, ΑΜ: 0686 Επιβλέπων: Γεώργιος Ασημακόπουλος Σεπτέμβριος 2014

Διαβάστε περισσότερα

Διπλωματική Εργασία. Μουσικές Εφαρμογές σε Περιβάλλον Κινητών Συσκευών Android με Χαρακτηριστικά Εξατομίκευσης

Διπλωματική Εργασία. Μουσικές Εφαρμογές σε Περιβάλλον Κινητών Συσκευών Android με Χαρακτηριστικά Εξατομίκευσης ΠΜΣ Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Διπλωματική Εργασία Μουσικές Εφαρμογές σε Περιβάλλον Κινητών Συσκευών Android με Χαρακτηριστικά Εξατομίκευσης Ονοματεπώνυμο: Βλάχος Αθανάσιος Επιβλέπων

Διαβάστε περισσότερα

Καλαντζόπουλος Αθανάσιος

Καλαντζόπουλος Αθανάσιος Σχεδίαση και Υλοποίηση Ολοκληρωµένου Συστήµατος µε DSPs για Λήψη, Επεξεργασία και ιαχείριση Εικόνας Ειδική Επιστηµονική Εργασία Καλαντζόπουλος Αθανάσιος Αντικείµενο µελέτης Οσχεδιασµός και η υλοποίηση

Διαβάστε περισσότερα

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές Λαμπαδαρίδης Αντώνιος el04148@mail.ntua.gr Διπλωματική εργασία στο Εργαστήριο Συστημάτων Βάσεων Γνώσεων και Δεδομένων Επιβλέπων: Καθηγητής Τ. Σελλής Περίληψη

Διαβάστε περισσότερα

Λιόλιου Γεωργία. ιατµηµατικό Πρόγραµµα Μεταπτυχιακών Σπουδών στα Πληροφοριακά Συστήµατα

Λιόλιου Γεωργία. ιατµηµατικό Πρόγραµµα Μεταπτυχιακών Σπουδών στα Πληροφοριακά Συστήµατα ιατµηµατικό Πρόγραµµα Μεταπτυχιακών Σπουδών στα Πληροφοριακά Συστήµατα Λιόλιου Γεωργία ΕπιβλέπουσαΚαθηγήτρια: ΣατρατζέµηΜάγια, καθηγήτρια, τµ. ΕφαρµοσµένηςΠληροφορικής, ΠΑΜΑΚ Εισαγωγή Γενικά στοιχεία εφαρµογή

Διαβάστε περισσότερα

ΠΑΡΑΡΤΗΜΑ ΓΡΕΒΕΝΩΝ ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΣΙΑΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΡΑΡΤΗΜΑ ΓΡΕΒΕΝΩΝ ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΣΙΑΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΡΑΡΤΗΜΑ ΓΡΕΒΕΝΩΝ ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΣΙΑΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Θέμα : ΥΛΟΠΟΙΗΣΗ ΞΕΝΟΓΛΩΣΣΗΣ ΕΚΠΑΙΔΕΥΤΙΚΗΣ ΕΦΑΡΜΟΓΗΣ ΣΕ ΠΛΑΤΦΟΡΜΑ ANDROID Όνοματεπώνυμο : Στέκας Ιγνάτιος Επιβλέπων : Σωτήριος Κοντογιάννης Ημερομηνία

Διαβάστε περισσότερα

ΚΟΙΝΩΝΙΚΗ ΔΙΚΤΥΩΣΗ ΜΕΣΩ ΚΙΝΗΤΩΝ ΣΥΣΚΕΥΩΝ: ΧΡΗΣΗ ΔΕΚΤΗ GPS ΓΙΑ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΗΣ ΚΟΙΝΩΝΙΚΗΣ ΔΙΚΤΥΩΣΗΣ ΣΕ ΚΙΝΗΤΗ ΣΥΣΚΕΥΗ

ΚΟΙΝΩΝΙΚΗ ΔΙΚΤΥΩΣΗ ΜΕΣΩ ΚΙΝΗΤΩΝ ΣΥΣΚΕΥΩΝ: ΧΡΗΣΗ ΔΕΚΤΗ GPS ΓΙΑ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΗΣ ΚΟΙΝΩΝΙΚΗΣ ΔΙΚΤΥΩΣΗΣ ΣΕ ΚΙΝΗΤΗ ΣΥΣΚΕΥΗ ΚΟΙΝΩΝΙΚΗ ΔΙΚΤΥΩΣΗ ΜΕΣΩ ΚΙΝΗΤΩΝ ΣΥΣΚΕΥΩΝ: ΧΡΗΣΗ ΔΕΚΤΗ GPS ΓΙΑ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΗΣ ΚΟΙΝΩΝΙΚΗΣ ΔΙΚΤΥΩΣΗΣ ΣΕ ΚΙΝΗΤΗ ΣΥΣΚΕΥΗ Χαρίτων Ευσταθιάδης Σοφία Γεωργιάδου Πανεπιστήμιο Κύπρου Τμήμα Πληροφορικής ΕΠΛ 425

Διαβάστε περισσότερα

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Τμήμα Πληροφορικής & Επικοινωνιών Τομέας Υπολογιστικών Τεχνικών & Συστημάτων Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Ιωάννης Γεωργουδάκης - Πάρις Μαστοροκώστας Σεπτέμβριος 2011 ΠΕΡΙΕΧΟΜΕΝΑ

Διαβάστε περισσότερα

Ιστορική Αναδρομή Λειτουργικών Συστημάτων (ΛΣ) Εισαγωγή : ο πυρήνας (kernel) / ο φλοιός (shell) Β ΕΠΑΛ

Ιστορική Αναδρομή Λειτουργικών Συστημάτων (ΛΣ) Εισαγωγή : ο πυρήνας (kernel) / ο φλοιός (shell) Β ΕΠΑΛ Ιστορική Αναδρομή Λειτουργικών Συστημάτων (ΛΣ) Εισαγωγή : ο πυρήνας (kernel) / ο φλοιός (shell) Β ΕΠΑΛ http://leitourgika-systhmata-epal-b.ggia.info/ Σύγχρονο Λειτουργικό Σύστημα - ΛΣ Λειτουργικό Σύστημα:

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 1: Εισαγωγή Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr 1 Δομημένος προγραμματισμός έναντι αντικειμενοστρεφούς

Διαβάστε περισσότερα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα για τη γλώσσα C: τον gcc μεταγλωττιστή της C σε περιβάλλον

Διαβάστε περισσότερα

Εισαγωγικές έννοιες. Ιωάννης Γ. Τσούλος 2014

Εισαγωγικές έννοιες. Ιωάννης Γ. Τσούλος 2014 Εισαγωγικές έννοιες Ιωάννης Γ. Τσούλος 2014 Διάγραμμα παρουσιάσεως 1. Κατηγορίες κινητών τηλεφώνων 2. Κατηγορίες έξυπνων κινητών τηλεφώνων 3. Προγραμματισμός κινητών συσκευών 4. Ξεκίνημα με το Eclipse

Διαβάστε περισσότερα

Epsilon Net PYLON Platform

Epsilon Net PYLON Platform Epsilon Net PYLON Platform Οδηγίες Εγκατάστασης Top 1 / 31 Περιεχόμενα 1 ΠΡΟΑΠΑΙΤΟΥΜΕΝΑ... 3 2 ΕΓΚΑΤΑΣΤΑΣΗ ΕΦΑΡΜΟΓΗΣ... 5 3 ΕΓΚΑΤΑΣΤΑΣΗ DEMO... 7 4 ΕΓΚΑΤΑΣΤΑΣΗ ΠΡΟΤΥΠΗΣ ΒΑΣΗΣ... 8 4.1 Φόρτωση πρότυπης

Διαβάστε περισσότερα

Ενότητα 1η. Εισαγωγή στην Πληροφορική

Ενότητα 1η. Εισαγωγή στην Πληροφορική Ενότητα 1η Εισαγωγή στην Πληροφορική 1.1 Τι είναι Πληροφορική Ένας σύντομος ορισμός για το τι είναι πληροφορική είναι ο παρακάτω: όλα εκείνα που χρειάζεται κανείς για να παράγει, να οργανώνει και να διαχειρίζεται

Διαβάστε περισσότερα

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος Κεφάλαιο 3.1: Λειτουργικά Συστήματα 1 3.1.1 Λογισμικό και Υπολογιστικό Σύστημα Ένα σύγχρονο υπολογιστικό σύστημα αποτελείται από: το υλικό: τα ηλεκτρονικά μέρη του υπολογιστή και το λογισμικό: το σύνολο

Διαβάστε περισσότερα

Π Τ Υ Χ Ι Α Κ Η Ε Ρ Γ Α Σ Ι Α

Π Τ Υ Χ Ι Α Κ Η Ε Ρ Γ Α Σ Ι Α ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ ΠΕΙΡΑΙΑ ΤΜΗΜΑ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΤΟΜΕΑΣ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ, ΠΛΗΡΟΦΟΡΙΚΗΣ & ΙΚΤΥΩΝ Εργ. Τεχνολογίας Λογισμικού & Υπηρεσιών S 2 ELab Π Τ Υ Χ Ι Α

Διαβάστε περισσότερα

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10 Περιεχόμενα Εισαγωγή στην εφαρμογή... 2 Βασική Σελίδα (Activity)... 3 Ρυθμίσεις... 3 Πελάτες... 6 Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10 Αποθήκη... 11 Αναζήτηση προϊόντος...

Διαβάστε περισσότερα

ΛΟΓΙΣΜΙΚΟ (software)

ΛΟΓΙΣΜΙΚΟ (software) ΛΟΓΙΣΜΙΚΟ (software) Το Λογισµικό του Ηλεκτρονικού Υπολογιστή Περιεχόµενα Ορισµός Λογισµικού Κατηγορίες Λογισµικό Συστήµατος Λογισµικό Εφαρµογών Το λογισµικό είναι: Το λογισµικό Το σύνολο των προγραµµάτων

Διαβάστε περισσότερα

Κατασκευή δικτυακής εφαρμογής στην αρχιτεκτονική ios iphone που υλοποιεί ένα παιχνίδι ερωτοαπαντήσεων

Κατασκευή δικτυακής εφαρμογής στην αρχιτεκτονική ios iphone που υλοποιεί ένα παιχνίδι ερωτοαπαντήσεων Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Κατασκευή δικτυακής εφαρμογής στην αρχιτεκτονική ios iphone που υλοποιεί ένα παιχνίδι Παρτώνας Αλέξανδρος Επιβλέπων: Δρ.

Διαβάστε περισσότερα

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol HTTP Protocol Web and HTTP Βασικά Συστατικά: Web Server Web Browser HTTP Protocol Web Servers (1/2) Ένα πρόγραμμα (λογισμικό) που έχει εγκατασταθεί σε ένα υπολογιστικό σύστημα (έναν ή περισσότερους υπολογιστές)

Διαβάστε περισσότερα

Λιβανός Γιώργος Εξάμηνο 2017Β

Λιβανός Γιώργος Εξάμηνο 2017Β Λιβανός Γιώργος Εξάμηνο 2017Β Υπολογιστικό σύστημα Υλικό (hardware) Λογισμικό (Software) Ολοκληρωμένα κυκλώματα, δίσκοι, οθόνη, κλπ. Λογισμικό συστήματος Προγράμματα εφαρμογών Χρειάζονται ένα συντονιστή!!!

Διαβάστε περισσότερα

Εγχειρίδιο Ζωντανών Μεταδόσεων Υπηρεσιών Βίντεο. Πανεπιστημίου Κρήτης. Εγχειρίδιο τεχνικού μετάδοσης

Εγχειρίδιο Ζωντανών Μεταδόσεων Υπηρεσιών Βίντεο. Πανεπιστημίου Κρήτης. Εγχειρίδιο τεχνικού μετάδοσης Εγχειρίδιο Ζωντανών Μεταδόσεων Υπηρεσιών Βίντεο Πανεπιστημίου Κρήτης Εγχειρίδιο τεχνικού μετάδοσης Περιεχόμενα 1. ΖΩΝΤΑΝΕΣ ΜΕΤΑΔΟΣΕΙΣ... 3 1.1. ΕΙΣΑΓΩΓΗ... 3 1.2. ΠΡΟΕΤΟΙΜΑΣΙΑ ΓΙΑ ΤΗΝ ΜΕΤΑΔΟΣΗ, ΑΙΤΗΜΑ...

Διαβάστε περισσότερα

Εφαρμογές Υπολογιστών. Κεφάλαιο 4 Λογισμικό Συστήματος

Εφαρμογές Υπολογιστών. Κεφάλαιο 4 Λογισμικό Συστήματος Λογισμικό Συστήματος Λογισμικό 2 Λογισμικό Συστήματος Τα ειδικά εργαλεία χρησιμοποιούνται για την ανάπτυξη λογισμικού εφαρμογών και την εκτέλεση βοηθητικών εργασιών. Το λειτουργικό σύστημα (operating system)

Διαβάστε περισσότερα

Android Studio για Windows

Android Studio για Windows Android Studio για Windows 1. Οδηγίες Εγκατάστασης: 1. Κατεβάστε το Android Studio από εδώ (τελευταία έκδοση 0.4.6, 496 MB): http://developer.android.com/sdk/installing/studio.html 2. Εγκαταστήστε το αρχείο

Διαβάστε περισσότερα

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19 Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών 3.1.1 Λογισμικό και Υπολογιστικό Σύστημα Τι είναι το υλικό ενός υπολογιστικού συστήματος; Το σύνολο των ηλεκτρονικών και μηχανικών μερών του που έχουν

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

Διαβάστε περισσότερα

Δημιουργία μιας εφαρμογής Java με το NetBeans

Δημιουργία μιας εφαρμογής Java με το NetBeans Δημιουργία μιας εφαρμογής Java με το NetBeans Για να δημιουργήσετε μια εφαρμογή Java πρέπει να ακολουθήσετε τα εξής βήματα : Αρχικά πρέπει να δημιουργηθεί ένα project το οποίο θα περιέχει όλα τα αρχεία

Διαβάστε περισσότερα

Οδηγός Σύνδεσης (για Φωτογραφικές Μηχανές D-SLR)

Οδηγός Σύνδεσης (για Φωτογραφικές Μηχανές D-SLR) SB7J01(1J)/ 6MB4121J-01 Οδηγός Σύνδεσης (για Φωτογραφικές Μηχανές D-SLR) Gr Πίνακας περιεχομένων Εισαγωγή...2 Το Περιβάλλον Εργασίας...2 Προβλήματα με τη Σύνδεση;...2 Περισσότερα για το SnapBridge...2

Διαβάστε περισσότερα

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης Σελίδα 1από ΤΕΙ ΚΑΒΑΛΑΣ Πτυχιακή εργασία Δικτυακή Εφαρμογή διαχείρισης ηλεκτρονικών εγγράφων υπηρεσίας. ΕΙΣΑΓΩΓΗ Μιλτιάδης Κακλαμάνης Σελίδα 2από Κατάλογος περιεχομένων ΕΙΣΑΓΩΓΗ...1 Σχετιζόμενα πρόσωπα...3

Διαβάστε περισσότερα

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία Λειτουργικά Συστήματα Ι Καθηγήτρια Παπαδάκη Αναστασία 2013 1 Ηλεκτρονικός Υπολογιστής αποτελείται: 1. Από Υλικό Hardware (CPUs, RAM, Δίσκοι), & 2. Λογισμικό - Software Και μπορεί να εκτελέσει διάφορες

Διαβάστε περισσότερα

Εφαρμογή επίλυσης πολυωνυμικών εξισώσεων σε πλατφόρμα android

Εφαρμογή επίλυσης πολυωνυμικών εξισώσεων σε πλατφόρμα android Πανεπιστήμιο Θεσσαλίας ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Πτυχιακή Εργασία του Τσότσου Παναγιώτη Εφαρμογή επίλυσης πολυωνυμικών εξισώσεων σε πλατφόρμα android Επιβλέπουσα Καθηγήτρια:

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα της γλώσσας C, το Dev-C++, το οποίο είναι εφαρμογή που τρέχει

Διαβάστε περισσότερα

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ ΕΦΑΡΜΟΓΩΝ JAIN-SIP-PROXY και SIP-COMMUNICATOR Εισαγωγή Αυτές οι οδηγίες περιγράφουν τα βήματα για να εγκαταστήσουμε τις εφαρμογές JAIN- SIP-Proxy και SIP-Communicator.

Διαβάστε περισσότερα

Εισαγωγή στο περιβάλλον Code::Blocks

Εισαγωγή στο περιβάλλον Code::Blocks Εισαγωγή στο περιβάλλον Code::Blocks Στο παρόν εγχειρίδιο παρουσιάζεται η διαδικασία ανάπτυξης, μεταγλώττισης και εκτέλεσης ενός προγράμματος C στο περιβάλλον του Code::Blocks. Η διαδικασία αυτή παρουσιάζεται

Διαβάστε περισσότερα

Smartphones και πολυμέσα

Smartphones και πολυμέσα Smartphones και πολυμέσα Λογοθέτης Σωτήρης ΚΑΘΗΓΗΤΗΣ/ΣΥΜΒΟΥΛΟΣ: ΓΕΩΡΓΙΟΣ ΣΤΥΛΙΑΡΑΣ Θεσσαλονίκη, 1 Νοεμβρίου 2009 Περιεχόμενα Ορισμοί Smartphones - Πολυμέσα Ιστορική Αναδρομή Τελευταίας τεχνολογίας Smartphones

Διαβάστε περισσότερα

Νεογεωγραφία και Χαρτογραφική Διαδικτυακή Απεικόνιση. Η χρήση Ελεύθερων Γεωγραφικών Δεδομένων και Λογισμικού Ανοιχτού Κώδικα σε Φορητές Συσκευές.

Νεογεωγραφία και Χαρτογραφική Διαδικτυακή Απεικόνιση. Η χρήση Ελεύθερων Γεωγραφικών Δεδομένων και Λογισμικού Ανοιχτού Κώδικα σε Φορητές Συσκευές. Νεογεωγραφία και Χαρτογραφική Διαδικτυακή Απεικόνιση. Η χρήση Ελεύθερων Γεωγραφικών Δεδομένων και Λογισμικού Ανοιχτού Κώδικα σε Φορητές Συσκευές. 13ο ΕΘΝΙΚΟ ΣΥΝΕΔΡΙΟ ΧΑΡΤΟΓΡΑΦΙΑΣ Η ΧΑΡΤΟΓΡΑΦΙΑ ΣΤΟ ΔΙΑΔΙΚΤΥΟ

Διαβάστε περισσότερα

Λύσεις διαχείρισης υπολογιστών-πελατών και λύσεις εκτύπωσης Universal Printing Solutions

Λύσεις διαχείρισης υπολογιστών-πελατών και λύσεις εκτύπωσης Universal Printing Solutions Λύσεις διαχείρισης υπολογιστών-πελατών και λύσεις εκτύπωσης Universal Printing Solutions Οδηγός χρήσης Copyright 2007 Hewlett-Packard Development Company, L.P. Η ονοµασία Windows είναι εµπορικό σήµα κατατεθέν

Διαβάστε περισσότερα

Οδηγός Χρήσης για Mac

Οδηγός Χρήσης για Mac Οδηγός Χρήσης για Mac Περιεχόμενα Γρήγορο Ξεκίνημα... 1 Χρήση του Εργαλείου εκ νέου Διαμόρφωσης Mac... 1 Εγκατάσταση του λογισμικού FreeAgent... 4 Aσφαλής αφαίρεση μονάδων δίσκου... 9 Διαχείριση των μονάδων

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα της γλώσσας C, το Dev-C++, το οποίο είναι εφαρμογή που τρέχει

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6. Περιβάλλοντα Ανάπτυξης Εφαρμογών. ΚΕΦΑΛΑΙΟ 6 Περιβάλλοντα Ανάπτυξης Εφαρμογών. Α Γενικού Λυκείου

ΚΕΦΑΛΑΙΟ 6. Περιβάλλοντα Ανάπτυξης Εφαρμογών. ΚΕΦΑΛΑΙΟ 6 Περιβάλλοντα Ανάπτυξης Εφαρμογών. Α Γενικού Λυκείου 49 Διδακτικές ενότητες 6.1 Γλώσσες και εργαλεία προγραμματισμού 6.2 Σύγχρονα προγραμματιστικά περιβάλλοντα Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν την ανάγκη ύπαρξης τόσο

Διαβάστε περισσότερα

Προγραμματισμός Διαχείρισης Συστημάτων Ι

Προγραμματισμός Διαχείρισης Συστημάτων Ι Προγραμματισμός Διαχείρισης Συστημάτων Ι Μάθημα 7ο X Window System Μιχαηλίδης Παναγιώτης Tι είναι παραθυρικό σύστημα; Ένα παραθυρικό σύστημα (window system) είναι μια γραφική διεπαφή χρήστη (Graphical

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 Αλγόριθμος: Βήμα προς βήμα διαδικασία για την επίλυση κάποιου προβλήματος. Το πλήθος των βημάτων πρέπει να είναι πεπερασμένο. Αλλιώς: Πεπερασμένη

Διαβάστε περισσότερα

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Το λειτουργικό σύστημα. Προγραμματισμός II 1 Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή η εφαρμογή είναι γνωστή εκ των προτέρων περιορισμένοι υπολογιστικοί

Διαβάστε περισσότερα

Unity Editor #04 Κεντρικό Μενού: Edit, Unity Preferences

Unity Editor #04 Κεντρικό Μενού: Edit, Unity Preferences Unity Editor #04 Κεντρικό Μενού: Edit, Unity Preferences Γεια σου. Σε αυτό το μάθημα θα μιλήσουμε για τις δυνατότητες που μας δίνει η Unity να την κάνουμε να λειτουργεί όπως θέλουμε. Η αλήθεια είναι ότι

Διαβάστε περισσότερα

Σχεδιασμός και υλοποίηση μια έξυπνης ενσωματωμένης κεντρικής μονάδας συναγερμού IP

Σχεδιασμός και υλοποίηση μια έξυπνης ενσωματωμένης κεντρικής μονάδας συναγερμού IP Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών http://arch.icte.uowm.gr Σχεδιασμός και υλοποίηση μια έξυπνης

Διαβάστε περισσότερα

Linux Terminal Server Project

Linux Terminal Server Project Linux Terminal Server Project Ένα κεντρικό σύστημα διαχείρισης των τερματικών κοινού της Βιβλιοθήκης & Κέντρου Πληροφόρησης του Πανεπιστημίου Μακεδονίας Κολοβός Φίλιππος filippos@uom.gr Ευάγγελος Μπάνος

Διαβάστε περισσότερα

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

Κεφάλαιο 1.6: Συσκευές αποθήκευσης Κεφάλαιο 1.6: Συσκευές αποθήκευσης 1.6.1 Συσκευές αποθήκευσης Μνήμη τυχαίας προσπέλασης - RAM Η μνήμη RAM (Random Access Memory Μνήμη Τυχαίας Προσπέλασης), κρατεί όλη την πληροφορία (δεδομένα και εντολές)

Διαβάστε περισσότερα

Εγχειρίδιο εγκατάστασης και βασικής παραμετροποίησης σεναρίου εστίασης

Εγχειρίδιο εγκατάστασης και βασικής παραμετροποίησης σεναρίου εστίασης Εγχειρίδιο εγκατάστασης και βασικής παραμετροποίησης σεναρίου εστίασης Σε αυτό το εγχειρίδιο θα καλύψουμε τη μεθοδολογία εγκατάστασης ενός σεναρίου εστίασης από την αρχή έως το σημείο των βασικών ρυθμίσεων

Διαβάστε περισσότερα

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Πως θα κατασκευάσω το πρώτο πρόγραμμα; Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να γίνει εξοικείωση το μαθητών με τον ΗΥ και το λειτουργικό σύστημα. - Επίδειξη του My Computer

Διαβάστε περισσότερα

Χρήση του Simulation Interface Toolkit για την Εξομοίωση και Πειραματισμό Συστημάτων Αυτομάτου Ελέγχου

Χρήση του Simulation Interface Toolkit για την Εξομοίωση και Πειραματισμό Συστημάτων Αυτομάτου Ελέγχου Χρήση του Simulation Interface Toolkit για την Εξομοίωση και Πειραματισμό Συστημάτων Αυτομάτου Ελέγχου Γ. Νικολακόπουλος, Μ. Κουνδουράκης, Α. Τζες και Γ. Γεωργούλας Πανεπιστήμιο Πατρών Τμήμα Ηλεκτρολόγων

Διαβάστε περισσότερα

Πανεπιστήμιο Αθηνών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού για Δίκτυα και Τηλεπικοινωνίες. Χειμερινό εξάμηνο

Πανεπιστήμιο Αθηνών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού για Δίκτυα και Τηλεπικοινωνίες. Χειμερινό εξάμηνο Πανεπιστήμιο Αθηνών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού για Δίκτυα και Τηλεπικοινωνίες Χειμερινό εξάμηνο 2018 2019 Σκοπός αυτής της εργασίας είναι η ανάπτυξη ενός συστήματος αποφυγής

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. 4o Εργαστήριο Σ.Α.Ε

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. 4o Εργαστήριο Σ.Α.Ε ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα 4o Εργαστήριο Σ.Α.Ε Ενότητα : Μελέτη και Σχεδίαση Σ.Α.Ε Με χρήση του MATLAB Aναστασία Βελώνη Τμήμα Η.Υ.Σ Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

Εγκατάσταση αρχείων βιβλιοθήκης VHOPE και VHOPE

Εγκατάσταση αρχείων βιβλιοθήκης VHOPE και VHOPE Εγκατάσταση αρχείων βιβλιοθήκης VHOPE και VHOPE Βήμα 1, εγκατάσταση VHOPE Η εφαρμογή VHOPE θα πρέπει να εγκατασταθεί στο PC σας προτού μπορείτε να αρχίσετε να χρησιμοποιείτε το υλικό παρουσίασης σε αυτό

Διαβάστε περισσότερα

Bread Online. Παναγιώτης Ιωαννίδης Επιβλέπων καθηγητής: Μηνάς Δασυγένης

Bread Online. Παναγιώτης Ιωαννίδης Επιβλέπων καθηγητής: Μηνάς Δασυγένης Bread Online Σχεδιασμός και μετατροπή μιας απλής οικιακής συσκευής σε επαναπρογραμματιζόμενη συσκευή IP Παναγιώτης Ιωαννίδης Επιβλέπων καθηγητής: Μηνάς Δασυγένης Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών

Διαβάστε περισσότερα

Οδηγός ρυθμίσεων Wi-Fi

Οδηγός ρυθμίσεων Wi-Fi Οδηγός ρυθμίσεων Wi-Fi Συνδέσεις Wi-Fi με τον Εκτυπωτή Σύνδεση με έναν υπολογιστή μέσω δρομολογητή Wi-Fi Σύνδεση με ένα υπολογιστή απευθείας Σύνδεση με μια έξυπνη συσκευή μέσω δρομολογητή Wi-Fi Σύνδεση

Διαβάστε περισσότερα

Εγχειρίδιο Ζωντανών Μεταδόσεων Εξελιγμένων Υπηρεσιών Βίντεο Πανελληνίου Σχολικού Δικτύου Εγχειρίδιο τεχνικού μετάδοσης

Εγχειρίδιο Ζωντανών Μεταδόσεων Εξελιγμένων Υπηρεσιών Βίντεο Πανελληνίου Σχολικού Δικτύου Εγχειρίδιο τεχνικού μετάδοσης Πανεπιστήμιο Κρήτης Εγχειρίδιο Ζωντανών Μεταδόσεων Εξελιγμένων Υπηρεσιών Βίντεο Πανελληνίου Σχολικού Δικτύου Εγχειρίδιο τεχνικού μετάδοσης Πανεπιστήμιο Κρήτης Περιεχόμενα 1. ΖΩΝΤΑΝΕΣ ΜΕΤΑΔΟΣΕΙΣ... 3 1.1.

Διαβάστε περισσότερα

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στην Πληροφορική & τον Προγραμματισμό Ενότητα 2 η : Λειτουργία Η/Υ Ι. Ψαρομήλιγκος Χ. Κυτάγιας Τμήμα Διοίκησης Επιχειρήσεων

Διαβάστε περισσότερα

Επιμέλεια: Μαργαρίτα Ρουγγέρη Επιβλέπων: Γεώργιος Στυλιαράς Πληροφορική Πολυμέσα ΓΤΠ61 4 η Εργασία 2011

Επιμέλεια: Μαργαρίτα Ρουγγέρη Επιβλέπων: Γεώργιος Στυλιαράς Πληροφορική Πολυμέσα ΓΤΠ61 4 η Εργασία 2011 Επιμέλεια: Μαργαρίτα Ρουγγέρη 71953 Επιβλέπων: Γεώργιος Στυλιαράς Πληροφορική Πολυμέσα ΓΤΠ61 4 η Εργασία 2011 Λειτουργικό σύστημα κινητή τηλεφωνία Google Open source Smart phones, tablets, mp3, τηλεοράσεις

Διαβάστε περισσότερα

1. Κατάλογος συσκευασίας

1. Κατάλογος συσκευασίας 1. Κατάλογος συσκευασίας 1. 2. Αντάπτορας AC 3. Ακουστικά 4. Καλώδιο USB 5. 6. Κάρτα εγγύησης 2. Γενική επισκόπηση της συσκευής 10 11 3 4 7 1 2 5 6 8 9 1 2 3 4 5 6 7 Ένταση +\ Ένταση - Ρύθμιση της στάθμης

Διαβάστε περισσότερα

Ειδικό Τεύχος : Linux και Ηχος. Η Υποδοµή

Ειδικό Τεύχος : Linux και Ηχος. Η Υποδοµή Ειδικό Τεύχος : Linux και Ηχος Η Υποδοµή ηµήτρης Γλυνός glynos@storm.cs.unipi.gr Μάιος 2004 Linux και Ηχος, µια πονεµένη ιστορία Οδηγοί (drivers) για τις κάρτες ήχου παρέχονται παραδοσιακά από τους κατασκευαστές

Διαβάστε περισσότερα

Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη

Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη 01 Εισαγωγή Μια απλή και γρήγορη εισαγωγή Το Splunk > είναι ένα πρόγραμμα το οποίο πρωτοεμφανίστηκε στην αγορά το 2003 και αποτελεί ένα πρόγραμμα εξόρυξης

Διαβάστε περισσότερα

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Το λειτουργικό σύστημα. Προγραμματισμός II 1 Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή η εφαρμογή είναι γνωστή εκ των προτέρων περιορισμένοι υπολογιστικοί

Διαβάστε περισσότερα

ΜΑΘΗΜΑ 3 ΛΟΓΙΣΜΙΚΟ (SOFTWARE)

ΜΑΘΗΜΑ 3 ΛΟΓΙΣΜΙΚΟ (SOFTWARE) ΜΑΘΗΜΑ 3 ΛΟΓΙΣΜΙΚΟ (SOFTWARE) ΣΤΟΧΟΙ: 1. Λογισμικό 2. Λογισμικό Λειτουργικού Συστήματος 3. Προσαρμοστικό Γραφικών Χρήστη 4. Λογισμικών Εφαρμογών 5. Διαφορά Μεταξύ Λογισμικού Λειτουργικού Συστήματος Και

Διαβάστε περισσότερα

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΜΟΝΑΔΑ ΑΡΙΣΤΕΙΑΣ ΕΛ/ΛΑΚ

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΜΟΝΑΔΑ ΑΡΙΣΤΕΙΑΣ ΕΛ/ΛΑΚ ΕΓΚΑΤΑΣΤΑΣΗ ΕΙΚΟΝΙΚΗΣ ΜΗΧΑΝΗΣ Το VirtualBox είναι μια εφαρμογή εικονικοποίησης (virtualization) που επιτρέπει την εγκατάσταση και την ταυτόχρονη λειτουργία ενός ή περισσότερων λειτουργικών συστημάτων στο

Διαβάστε περισσότερα

Vodafone Business Connect

Vodafone Business Connect Vodafone Business Connect Vodafone Business WebHosting Αναλυτικός Οδηγός Χρήσης MSSQL Manager Αναλυτικός οδηγός χρήσης: MS SQL Manager Vodafone Business Connect - Υπηρεσίες φιλοξενίας εταιρικού e-mail

Διαβάστε περισσότερα

1. Κατάλογος συσκευασίας

1. Κατάλογος συσκευασίας 1. Κατάλογος συσκευασίας 1. 2. Αντάπτορας AC 3. 4. Καλώδιο USB 5. Κάρτα εγγύησης 2. Γενική επισκόπηση της συσκευής 3 4 5 1 6 2 7 1 2 3 4 5 6 Πλήκτρο Λειτουργίας\Επανα φοράς Ένταση +\ Ένταση - Κάρτα Micro

Διαβάστε περισσότερα

Σχεδιασμός και Υλοποίηση ενός πληροφοριακού συστήματος για τους τεχνικούς του φυσικού αερίου

Σχεδιασμός και Υλοποίηση ενός πληροφοριακού συστήματος για τους τεχνικούς του φυσικού αερίου Διπλωματική Εργασία Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Σχεδιασμός και Υλοποίηση ενός πληροφοριακού συστήματος για τους τεχνικούς του φυσικού αερίου Ποτσίκα Ηλιάνα

Διαβάστε περισσότερα

Connecto. Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Άγγελος Σφακιανάκης. Επιφάνεια Άμεσης Σύνδεσης

Connecto. Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Άγγελος Σφακιανάκης. Επιφάνεια Άμεσης Σύνδεσης Connecto Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Άγγελος Σφακιανάκης Επιφάνεια Άμεσης Σύνδεσης Περιγραφή Συστήματος Προβλήματα μικρή αυτονομία μπαταρίας χρεώσεις δεδομένων πολλαπλοί λογαριασμοί

Διαβάστε περισσότερα

SharePoint Online. Δημιουργήστε μια τοποθεσία ή μια δημοσίευση ειδήσεων. Αναζήτηση Βρείτε Τοποθεσίες, Άτομα ή Αρχεία.

SharePoint Online. Δημιουργήστε μια τοποθεσία ή μια δημοσίευση ειδήσεων. Αναζήτηση Βρείτε Τοποθεσίες, Άτομα ή Αρχεία. Οδηγός γρήγορης εκκίνησης Κάντε περισσότερα όπου και αν βρίσκεστε με ασφαλή πρόσβαση, κοινή χρήση και αποθήκευση αρχείων. Πραγματοποιήστε είσοδο στη συνδρομή σας στο Office 365 και επιλέξτε το SharePoint

Διαβάστε περισσότερα

Οδηγός χρήσης Connection Manager

Οδηγός χρήσης Connection Manager Οδηγός χρήσης Connection Manager Τεύχος 1.0 2 Περιεχόμενα Σχετικά με την εφαρμογή διαχείρισης συνδέσεων 3 Ξεκινώντας 3 Άνοιγμα της εφαρμογής διαχείρισης συνδέσεων 3 Προβολή της τρέχουσας κατάστασης σύνδεσης

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ Κεφάλαιο 2. Το περιβάλλον του παγκόσμιου Ιστού Επιμέλεια: Καραγιάννης Σπύρος Καθηγητής ΠΕ19 Πλεονεκτήματα παγκόσμιου Ιστού Εξυπηρετητής Ιστού & Ιστοσελίδες Κύριες

Διαβάστε περισσότερα

Διαφορές single-processor αρχιτεκτονικών και SoCs

Διαφορές single-processor αρχιτεκτονικών και SoCs 13.1 Τα συστήματα και η επικοινωνία μεταξύ τους γίνονται όλο και περισσότερο πολύπλοκα. Δεν μπορούν να περιγραφούνε επαρκώς στο επίπεδο RTL καθώς αυτή η διαδικασία γίνεται πλέον αρκετά χρονοβόρα. Για αυτό

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1 Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave Περιεχόμενο εργαστηρίου: - Το περιβάλλον ανάπτυξης προγραμμάτων Octave - Διαδικασία ανάπτυξης προγραμμάτων MATLAB - Απλά

Διαβάστε περισσότερα

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο FrontPage 2003 Πρακτικός Οδηγός Χρήσης Το FrontPage είναι ένα πρόγραμμα δημιουργίας ιστοσελίδων και δικτυακών τόπων που επιτρέπει το σχεδιασμό ιστοσελίδων μέσα από γραφικό περιβάλλον αλλά και την ταυτόχρονη

Διαβάστε περισσότερα

Σύστημα Άυλων Τίτλων - Οδηγίες παραμετροποίησης client συστήματος

Σύστημα Άυλων Τίτλων - Οδηγίες παραμετροποίησης client συστήματος Σύστημα Άυλων Τίτλων - Οδηγίες παραμετροποίησης client συστήματος Έκδοση 1.0 10/03/2016 Page 1 of 42 Περιεχόμενα 1. Προαπαιτούμενα... 3 1.1 Java Runtime Environment (JRE)... 4 1.2 Browsers... 5 1.3 Certificates...

Διαβάστε περισσότερα

ΘΕΜΑΤΑ ΠΤΥΧΙΑΚΩΝ ΕΡΓΑΣΙΩΝ ΕΑΡΙΝΟΥ ΕΞΑΜΗΝΟΥ

ΘΕΜΑΤΑ ΠΤΥΧΙΑΚΩΝ ΕΡΓΑΣΙΩΝ ΕΑΡΙΝΟΥ ΕΞΑΜΗΝΟΥ ΘΕΜΑΤΑ ΠΤΥΧΙΑΚΩΝ ΕΡΓΑΣΙΩΝ ΕΑΡΙΝΟΥ ΕΞΑΜΗΝΟΥ 2016-17 A/A Τίτλος στην ελληνική και στην αγγλική γλώσσα 1 Οπτικές ίνες Εφαρμογές στην Τηλεπικοινωνίες (Optical fibers - Applications in Telecommunications) 2

Διαβάστε περισσότερα

Οδηγός γρήγορης εκκίνησης

Οδηγός γρήγορης εκκίνησης Χρήση του Office 365 σε τηλέφωνο Windows Phone Οδηγός γρήγορης εκκίνησης Έλεγχος ηλεκτρονικού ταχυδρομείου Ρυθμίστε το Windows Phone για αποστολή και λήψη ηλεκτρονικού ταχυδρομείου από το λογαριασμό του

Διαβάστε περισσότερα

Συστήματα πανταχού παρόντος υπολογιστή σε περιβάλλοντα υβριδικών βιβλιοθηκών

Συστήματα πανταχού παρόντος υπολογιστή σε περιβάλλοντα υβριδικών βιβλιοθηκών Συστήματα πανταχού παρόντος υπολογιστή σε περιβάλλοντα υβριδικών βιβλιοθηκών Βερονίκης Σπύρος Τμήμα Αρχειονομίας- Βιβλιοθηκονομίας, Ιόνιο Πανεπιστήμιο spver@ionio.gr Stoica Adrian Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

Έγγραφο Προδιαγραφών Απαιτήσεων Λογισμικού για το παιχνίδι: Asylum : The Escape

Έγγραφο Προδιαγραφών Απαιτήσεων Λογισμικού για το παιχνίδι: Asylum : The Escape Έγγραφο Προδιαγραφών Απαιτήσεων Λογισμικού για το παιχνίδι: Asylum : The Escape Επιμέλεια: Γκέκα Ασπασία Ιωάννου Ελένη Κούνουπα Άννα Τμήμα Εφαρμογών Πληροφορικής Α 1 Εξάμηνο Δ.ΙΕΚ Αιγάλεω 1 ΠΕΡΙΕΧΟΜΕΝΑ

Διαβάστε περισσότερα

Κεφάλαιο 2.3: Ρυθμίσεις των Windows

Κεφάλαιο 2.3: Ρυθμίσεις των Windows Κεφάλαιο 2.3: Ρυθμίσεις των Windows 2.3.1 Βασικές πληροφορίες συστήματος Για να δούμε βασικές πληροφορίες για τον υπολογιστή μας, πατάμε το κουμπί «Έναρξη» και επιλέγουμε διαδοχικά «Πίνακας Ελέγχου», «Σύστημα

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ Εαρινό Εξάμηνο

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ Εαρινό Εξάμηνο ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ Εαρινό Εξάμηνο 2016-2017 Υποχρεωτική εργασία Τα τελευταία χρόνια, λόγω της τεράστιας αύξησης της ποσότητας της πληροφορίας που έχουμε

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην

Διαβάστε περισσότερα

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795 Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795 Περιεχόμενα Εισαγωγή Εγκατάσταση Δημιουργία νέου project Java Editor Perspectives Δημιουργία source folders Προσθήκη νέου αρχείου στο project Εισάγωντας

Διαβάστε περισσότερα

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που 1 Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που μπορούμε να χρησιμοποιήσουμε σε μία JDBC εφαρμογή. Υπάρχει

Διαβάστε περισσότερα

Εισαγωγή στην Πληροφορική

Εισαγωγή στην Πληροφορική Εισαγωγή στην Πληροφορική Λογισμικό Συστήματος & Εφαρμογών ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Συντήρησης Πολιτισμικής Κληρονομιάς Γενική Δομή Υπολογιστών Λειτουργικό σύστημα Υπολογιστής

Διαβάστε περισσότερα

Κεφάλαιο 4: Λογισμικό Συστήματος

Κεφάλαιο 4: Λογισμικό Συστήματος Κεφάλαιο 4: Λογισμικό Συστήματος Ερωτήσεις 1. Να αναφέρετε συνοπτικά τις κατηγορίες στις οποίες διακρίνεται το λογισμικό συστήματος. Σε ποια ευρύτερη κατηγορία εντάσσεται αυτό; Το λογισμικό συστήματος

Διαβάστε περισσότερα

ΟΔΗΓΟΣ ΓΡΗΓΟΡΗΣ ΕΝΑΡΞΗΣ

ΟΔΗΓΟΣ ΓΡΗΓΟΡΗΣ ΕΝΑΡΞΗΣ ΟΔΗΓΟΣ ΓΡΗΓΟΡΗΣ ΕΝΑΡΞΗΣ ΟΔΗΓΟΣ ΓΡΗΓΟΡΗΣ ΕΝΑΡΞΗΣ Σημειώσεις και ειδοποιήσεις ΣΗΜΕΙΩΣΗ: Η ΣΗΜΕΙΩΣΗ υποδεικνύει σημαντικές πληροφορίες που σας βοηθούν να χρησιμοποιείτε καλύτερα τον υπολογιστή σας. ΠΡΟΣΟΧΗ:

Διαβάστε περισσότερα

Αναζήτηση στον Ιστό. Πληκτρολόγηση του URL: στο πλαίσιο αναζήτησης του Mozilla Firefox. Enter ή κλικ στο Αναζήτηση

Αναζήτηση στον Ιστό. Πληκτρολόγηση του URL:  στο πλαίσιο αναζήτησης του Mozilla Firefox. Enter ή κλικ στο Αναζήτηση Αναζήτηση στον Ιστό Χρήση μιας μηχανής αναζήτησης Επιλογή συγκεκριμένης μηχανής αναζήτησης Είναι συχνό το φαινόμενο να θέλει ο χρήστης να εντοπίσει πληροφορίες στο διαδίκτυο και να μην ξέρει που να κοιτάξει.

Διαβάστε περισσότερα

12/5/18. συστημάτων. Το λογισµικό συστηµάτων. Κεφάλαιο 5

12/5/18. συστημάτων. Το λογισµικό συστηµάτων. Κεφάλαιο 5 A. EVANS, K. MARTIN, M. A. POATSY Εισαγωγή στην πληροφορική Θεωρία και πράξη 2 η έκδοση Κεφάλαιο 5 Λογισμικό συστημάτων: Το λειτουργικό σύστημα, τα βοηθητικά προγράμματα και η διαχείριση αρχείων Τα βασικά

Διαβάστε περισσότερα

Στοιχεία παρουσίασης. Εισαγωγή Θεωρητικό υπόβαθρο Υλοποίηση λογισμικού μέρους συστήματος Συμπεράσματα Μελλοντικές Επεκτάσεις

Στοιχεία παρουσίασης. Εισαγωγή Θεωρητικό υπόβαθρο Υλοποίηση λογισμικού μέρους συστήματος Συμπεράσματα Μελλοντικές Επεκτάσεις ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ Σχεδιασμός Πληροφοριακού Συστήματος Καταγραφής μετρήσεων κοινής ωφελείας Υποβοηθούμενο από οπτική αναγνώριση μέσω Κινητού τηλεφώνου Μπούντας Δημήτρης Επιβλέπων Καθηγητής : Δασυγένης

Διαβάστε περισσότερα

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο Το περιβάλλον εργασίας Ανοίγοντας την Ελληνική Έκδοση του FrontPage, για πρώτη φορά, η εικόνα που θα συναντήσουμε είναι αυτή της Εικόνας 1 με τα Μενού Εντολών και τη Γραμμή Εργαλείων, στο πάνω μέρος της

Διαβάστε περισσότερα

Οδηγίες Εγκατάστασης της εφαρμογής Readium και Readium για μαθητές με αμβλυωπία για την ανάγνωση βιβλίων epub σε Υπολογιστή.

Οδηγίες Εγκατάστασης της εφαρμογής Readium και Readium για μαθητές με αμβλυωπία για την ανάγνωση βιβλίων epub σε Υπολογιστή. Οδηγίες Εγκατάστασης της εφαρμογής Readium και Readium για μαθητές με αμβλυωπία για την ανάγνωση βιβλίων epub σε Υπολογιστή. Βήμα 1 ο : Εγκατάσταση εφαρμογής ανάγνωσης Readium και Readium για μαθητές με

Διαβάστε περισσότερα

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview Εργαστήριο Λειτουργικών Συστημάτων Minix Overview Σύνοψη 5ης ιάλεξης Λειτουργικό Σύστημα Minix Οργάνωση του Λειτουργικού Συστήματος Οργάνωση πηγαίου κώδικα Minix recompilation Σύνοψη Μαθήματος Σύνοψη Μαθήματος

Διαβάστε περισσότερα