Home
Documento PDF - AMS Tesi di Laurea
Contents
1. contiene la maggior parte delle classi per l interfaccia grafica 3 Capitolo 4 Ipotesi di lavoro I principali problemi di python whiteboard riguardano il consumo di ri sorse e di conseguenza le prestazioni generali del programma Python un ottimo linguaggio di programmazione ad alto livello intuitivo ed elegante che permette di scrivere programmi compatti e meno dispersivi rispetto al C per meno indicato per eseguire operazioni di basso livello in questi casi risulta pi lento del C che invece proprio in questi casi mostra la sua forza e flessibilit Questo dovuto al fatto che Python un linguaggio semi interpretato men tre C compilato il compilatore gcc inoltre offre ottimi strumenti di ottimiz zazione del codice Proprio per questo python whiteboard offre prestazioni scadenti rispetto alle lavagne multimediali in commercio Da questi presup posti si pensato di lasciare la comunicazione con il Wiimote e l elaborazione del segnale IR operazioni di pi basso livello ad un programma scritto in C e mantenere l interfaccia grafica scritta in Python 4 1 Risorse richieste da python whiteboard Abbiamo analizzato il tempo di elaborazione di un singolo segnale al fine di confrontarlo con lo stesso elaborato in linguaggio C Quello che python whiteboard fa 19 20 4 Ipotesi di lavoro 1 ricevere il segnale IR 2 trasformarlo in coordinate dello schermo 3 spostare il cursore
2. manda sempre report IR anche quando non rileva dati 5 4 Ottimizzazione Come vedremo nel capitolo 6 realizzare il motore di elaborazione in C ha migliorato di molto le prestazioni stato difficile quindi migliorare ulterior mente il programma Una delle ottimizzazioni che sono state fatte riguarda la modalit di solo puntamento Come detto nel capitolo precedente il Wii mote manda report di dati anche quando non rileva segnali IR abbiamo visto che questo molto utile per gestire correttamente il click del cursore ma nel caso del solo puntamento questo inutile In questa modalit quindi i messaggi senza dati IR validi vengono scartati dal thread router senza esse re smistati al thread mesg_callback questo diminuisce il consumo di risorse nelle fasi IDLE del programma 5 4 1 Ottimizzazioni in fase di compilazione Un buon miglioramento delle prestazioni generali del programma si ot tenuto attraverso le modalit di ottimizzazione del compilatore gcc Normalmente gcc cerca di ridurre il tempo di compilazione e di far produrre al debug i risultati attesi Le linee di codice C sono quindi indipendenti tra 40 5 Analisi e realizzazione loro se si ferma l esecuzione con un breakpoint si pu assegnare un nuovo valore ad una variabile o cambiare il program counter a qualsiasi altra linea della funzione ottenendo esattamente il risultato che ci si aspetta dal codice sorgente Accendendo i flag dell ottimizzaz
3. riori del software Bluetooth e at Biene 2027 Sa MID traverso un bus di trasporto come USB collegato ad un modulo ra dio Bluetooth L HID ha il firmware integrato con quello della radio eseguiti sulla stessa CPU per il minor costo di implementazione possibile Altre implementazioni sono possibili ed ugualmente valide 11 2 2 Human Interface Device Profile HID 11 In figura 2 4 vediamo un esempio di interfaccia BT HID ASCII Key Entered Convert to HID Scan Code y et Display ASCII in Application Convert to STD 1 0 Create Bluetooth L2CAP Packet aa Recover HID Scan Code Get via Bluetooth Interface Figura 2 4 Interfaccia BT HID 2 2 1 Iniziare una connessione Ogni dispositivo Bluetooth in discoverable mode trasmette le seguenti informazioni su richiesta e nome del dispositivo e classe del dispositivo e lista di servizi e informazioni tecniche funzionalit fabbricante specifiche Bluetooth usate Ogni dispositivo pu effettuare un indagine inquiry per trovare altri dispo sitivi a cui connettersi ogni dispositivo pu essere configurato per rispondere a queste richieste Se il dispositivo che cerca di connettersi conosce l indirizzo dell altro que st ultimo risponde ad una richiesta di connessione diretta ed eventualmente trasmette le informazioni mostrate nella lista sopra L uso dei servizi di un 12 2 Bluetooth dispositivo potrebbe richiedere
4. 0 0 2 Bluetooth 2 1 Stack del protocollo Bluetooth 2 a 2so8 cias Era 2 2 Human Interface Device Profile HID 2 2 1 Iniziare una connessione 22 ne Han een 2 2 2 Appaiamento Su e AA BO A 29 WHImMOte pt ae ire erbe iu 2 3 1 Connettere il Wiimote 2 3 2 Latenza e prestazioni se y 6 7586 isa a Ps 3 X Window System 3 1 XTest Extension Library des ad dee a 3 2 bramework ES e dd A a er ee 3 2 1 Concetti base di Qt 16 aoaaa aaa E ad ele ilari alal neue a a ER 4 Ipotesi di lavoro 4 1 Risorse richieste da python whiteboard 4 1 1 Test effettuati su Asus X58S vi 10 11 12 13 13 14 15 16 17 17 17 viii INTRODUZIONE 4 1 2 Test effettuati su Raspberry Pi Model B 21 5 Analisi e realizzazione 23 pIo Studio disG wid tak ee a we ee 23 SLE Analisi statica si dde a sa Ade d anne ae nic 24 51 2 An lsi dinamica short padre rara 27 5 2 Studio di python whiteboard 2 esse pare gie Bra a ed 29 Ga Analist ae ins a a e ER Bik Bi ee 29 5 2 2 Analisi dinamica ici 2A a wacht 31 Gia eo A A ba elia debile 32 Sock MAMAS IS e ee a a eS 32 5 3 2 Fasi preliminari res een Bat 33 5 3 3 Xtest ed elaborazione del segnale IR 36 54 OttiIMIZZaZION gegio ana analista 39 5 4 1 Ottimizzazioni in fase di compilazione 39 6 Risultati 43 6 1 Benchmark su Asus X53S 2 2 2 nn 44 OL Benchmark Dita Se San an 45 6
5. In questa fase si effettua la connessione al Wiimote e si richiede lo stato per la prima volta cos da inizializzare la struttura wiimote_t 28 5 Analisi e realizzazione Qui entrano in gioco il thread router che legger lo stato dal socket di inter rupt lo processer tramite il modulo process c e lo invier al thread status tramite la pipe di stato Infine si imposta la funzione di callback definita dal programmatore Finita questa fase saranno attivi tutti i moduli e l applicazione potr ini ziare la sua routine utilizzando la struttura wiimote_t inizializzata come riferimento al Wiimote Abilitazione dei segnali IR In questa fase si abilita il Wiimote a mandare i report con i dati della telecamera IR La libreria libewiid permette di abilitare anche altri tipi di report come i dati dell accelerometro o del microfono che tuttavia non ci interessano per l applicazione La sequenza per abilitare i segnali IR consiste di sei punti in ognuno dei qua li bisogna inviare un messaggio al Wiimote ed aspettare la risposta anche qui il thread router si occupa di ricevere processare e smistare i messaggi stavolta su una pipe dedicata a questo la pipe rw read write Qui il modulo state c fornisce l interfaccia per abilitare i segnali IR sul Wii mote il modulo process c chiamato dal thread router si occupa di iniziare la sequenza che sar effettuata da una funzione del modulo util c Finita questa fase iniziera
6. estensione collegata 0x04 Microfono abilitato 0x08 Telecamera IR abilitata 0x10 LED 1 0x20 LED 2 0x40 LED 3 0x80 LED 4 uolalsiwWnlr o Tabella 2 3 Maschera di bit report input 0x21 Dati di lettura della memoria Questo report viene mandato quando viene fatta una lettura di memoria Restituisce da 1 a 16 byte di dati per volta a1 21 BB BB SE AA AA DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD S la dimensione in byte meno uno del pacchetto dati corrente E il flag di errore quelli conosciuti sono 0 per nessun errore 7 quando si cerca di fare una lettura da un registro in sola lettura e 8 quando si cerca di leggere da un indirizzo di memoria non esistente 66 2 Come funziona il Wiimote AA AA indicano i due byte meno significativi dell indirizzo assoluto di cui si richiesta la lettura il resto dell indirizzo non restituito possiamo per trovarlo nella richiesta I byte DD indicano i dati riempiti con degli zeri fino ad avere 16 byte se pi di 16 byte sono richiesti si riceveranno pi pacchetti con l indirizzo AA AA incrementato di 16 ogni volta 0x22 Report di notifica risultato di funzione Questo report di input inviato all host in seguito ad un errore relativo ad un report output oppure per notificare il risultato di una funzione inviato quando il bit 1 di ogni byte di un report di output vale 1 a1 22 BB BB RR EE RR
7. Extension Library URL http bit 1y 16vBAVZ HID_WG HUMAN INTERFACE DEVICE PROFILE 2012 Albert Huang An Introduction to Bluetooth Programming URL http people csail mit edu albert bluez intro x148 html 95 96 Bibliografia 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Giovanni Incammicia Lightboard un programma efficiente per co struire una LIM con Raspberry Pi e Wiimote Universit degli Studi di Bologna 2015 Johnny Chung Lee URL http johnnylee net projects wii David Lippman Wiimotes and Robots URL www imathas com wiimotes wiimotesrobots ppt List of Bluetooth profiles URL http en wikipedia org wiki List_of_Bluetooth_profiles List of Bluetooth protocols URL http en wikipedia org wiki List_of_Bluetooth_protocols Microsoft Introduction to HID Concepts URL http bit ly 16vtnRN Qt Software URL http en wikipedia org wiki Qt_X28software 29 Deon Spengler Understanding and using htop to monitor system re sources URL http bit ly 1DKuxG6 The X Window System URL https www freebsd org doc handbook x understanding html USB URL http en wikipedia org wiki USB Latency USB human interface device class URL http en wikipedia org wiki USB_human_interface_device_class Wii Remote URL http en wikipedia org wiki Wii_Remote Wiibrew Weibrew Wiimote URL htt
8. I I I I I I I I I I I I I I I I I 4 STATUS THREAD 1 I I I I I I I I I I I I I I I I I I I I I I I I I I I error I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I A 0 u I a Figura 3 6 Diagramma delle attivit del thread status Nel diagramma in figura 3 6 vediamo invece il funzionamento del thread status Il flusso simile viene letto un pacchetto analizzato elaborato viene aggiornato lo stato e se specificato viene mandato un messaggio al thread mesg_callback In questo caso il messaggio viene letto dalla pipe status come abbiamo visto nella sezione 2 2 1 il report 0x20 avr nel bit 1 della maschera di bit LF il 3 3 Strutture dati 81 valore 1 se un estensione collegata 0 altrimenti Nel caso non ci sia nessuna estensione collegata il messaggio ricevuto dal thread status avr come tipo di estensione ext_type nella struttura dati la costante CWIID_EXT_NONE Nel caso ci sia un estensione collegata il report 0x20 non dice nulla sulla natura di questa estensione in tal caso il messaggio ricevuto dal thread sta tus avr come tipo di estensione la costante CWIID_EXT_UNKNOWN Il flusso continua controllando il tipo di estensione se sconosciuto collegata un e stensione ma non si sa quale si effettua una sotto procedura per de
9. Note 00 00 00 00 00 00 90 00 Co 40 00 00 00 00 00 00 00 FF 00 0C 00 00 Massima sensibilit 00 00 00 00 00 00 90 00 41 40 00 Alta sensibilit 02 00 00 71 01 00 64 00 FE FD 05 Livello wii 1 02 00 00 71 01 00 96 00 B4 B3 04 Livello wii 2 02 00 00 71 01 00 AA 00 64 63 03 Livello wii 3 02 00 00 71 01 00 C8 00 36 35 03 Livello wii 4 07 00 00 71 01 00 72 00 20 1F 03 Livello wii 5 Tabella 2 5 Blocchi di sensibilit L ultimo byte del blocco 1 inversamente proporzionale alla sensibilit Entrambi i byte del blocco 2 devono essere O per il massimo range di sensi bilit Impostare la sensibilit al valore pi alto possibile senza che vengano rilevate fonti luminose non volute 2 3 Telecamera IR 71 2 3 2 Formato dei dati La telecamera IR pu restituire differenti insiemi di dati che descrivono gli oggetti che sta tracciando La telecamera IR assegna l oggetto identificato al primo slot possibile se un oggetto sparisce dalla visuale lo slot viene marcato come vuoto Con pi di quattro oggetti la telecamera cambia velocemente da uno all altro questo permette di percepire pi di quattro oggetti ad una ridotta velocit di risposta e affidabilit Modalit Numero di modalit Basic 1 Extended 3 Full 5 Tabella 2 6 Modalita di formato dei dati Vedremo qui in dettagli soltanto la modalit extended perch quella utilizzata nel progetto La modalit
10. basic non d informazioni sulla dimensione dell oggetto men tre quella full prevede l invio di due pacchetti per ogni rilevamento il che rallenterebbe l applicazione Modalit extended Bit Byte 7 6 5 4 3 2 1 0 0 X lt 7 0 gt 1 Yor 70s 2 Y lt 9 8 gt X lt 9 8 gt S lt 3 0 gt Tabella 2 7 Formato dei dati 72 2 Come funziona il Wiimote Nella modalit basic la telecamera IR restituisce 10 byte di dati corri spondenti alle cordinate X e Y di ognuno dei quattro punti Ogni coordinata occupa 10 bit ed ha un range di 0 1023 per PX e 0 767 per Y Nella modalit extended la telecamera IR restituisce gli stessi dati della modalit basic pi la dimensione di ogni oggetto I dati occupano 12 byte tre per ogni oggetto La dimensione ha un range di 0 15 Il formato dei dati illustrato in tabella 2 7 Capitolo 3 La libreria libcwiid Libewiid una libreria multi thread che fornisce un API per interfacciarsi con il Wiimote Analizzeremo quindi la sua struttura le funzioni di ogni thread le pipe e le interazioni con il Wiimote Dopodich analizzeremo la sequenza di azioni che ogni thread compie 3 1 Struttura di libcwiid Libewiid composto da quattro thread in verde nel diagramma in fi gura 3 1 che comunicano tra di loro tramite pipe in arancione i thread comunicano con il Wiimote tramite canali Bluetooth in blu 3 1 1 Thread Main
11. calcoli per convertire le coordinate della telecamera del Wiimote in coordinate dello schermo screen_x matr 0 x matr 1 y matr 6 x matr 7 y matr 3 x matr 4 y matr 6 x matr 7 y screen_y matr 2 1 matr 5 1 Dove screen_x e screen_y sono le coordinate che verranno passate alle funzioni XTestFakeMotionEvent e XTestFakeButtonEvent rispettivamente per muovere il mouse ed effettuare il click x ed y sono invece le coordinate lette dal report IR del Wiimote e matr i contiene i valori della matrice h 5 3 Movimento e click Una volta che lengine ha calcolato le nuove coordinate la funzione XTestFakeMotionEvent di Xtest si occuper di spostare il mouse Per quanto riguarda il click invece XTestFakeButtonEvent funziona cos Y calcoli risolti con il metodo di Gauss si trovano a questo url http bit ly 1EdUCPz 5 4 Ottimizzazione 39 e se il parametro booleano is_press vero avremo una pressione del bottone e se is_press falso avremo un rilascio del bottone Detto questo l algoritmo utilizzato per il click consiste in e quando si rileva un segnale IR si fa un click is_press true e quando si riceve un report senza dati IR si rilascia il click is_press false Ci permette di emulare il funzionamento del mouse senza utilizzare euristi che basate sulla durata del click questo permesso dal fatto che il Wiimote
12. creata la schermata di configurazione istanziando la classe ConfigDialog 4 2 Analisi dinamica 89 Calibrazione A questo punto viene creato l oggetto di classe CalibrateDialog esso oltre a creare la schermata di calibrazione crea una funzione di callback apposita Appena i punti rilevati sono quattro restituisce al chiamante e l oggetto viene distrutto MainWindow allora chiama il metodo calibrate del Wiimote che si occupa di effettuare i calcoli matriciali e memorizzare le informazioni di calibrazione nell oggetto stesso Lettura dei dati IR In questa fase viene creato un oggetto di tipo FakeCursor questo ogget to si occuper di creare un thread e la funzione di callback che esso dovr eseguire a questo punto il programma si mette in attesa di un dato IR e quando lo ricever la funzione di callback si occuper di calcolare le coordi nate passarle all oggetto FakeCursor per spostare il mouse e se specificato effettuare il click istanziando la classe Click Nel caso di lightboard python whiteboard stato modificato il meno possibile la fase di lettura dei dati IR stata eliminata viene gestita dall engine in C ed il bottone di attivazione che nell applicazione originale avvia proprio questa fase scrive tutti i dati di configurazione nel file 1bconfig ini contenuto nella cartella ui stuff poi chiude l applicazione 90 4 Python whiteboard detectWiimotes create i create E P
13. creato avr questo formato indirizzo Bluetooth del Wiimote hxy 91 92 5 Lightboard Esecuzione di python whiteboard Scrittura del file di configurazione Lettura del file di configurazione Connessione wiimote Abilitazione telecamera IR Figura 5 1 Diagramma delle attivit di Lightboard click_enabled Dove hxy l elenco dei valori alla riga x e colonna y del risultato del sistema di equazioni calcolato durante la fase di calibrazione click_enabled un valore binario vale 0 se si selezionata la modalit di puntamento 1 per quella di click Un esempio di file di configurazione potrebbe essere 00 22 4C 9B E7 88 1 08250275 5 1 Funzionamento 93 0 09788087 4 08139181 0 25604773 1 25427506 758 56401825 0 00033507 0 00018954 0 Lightboard si occuper di leggere questo file e salvare i dati in apposite variabili dopodich si connetter automaticamente all indirizzo Bluetooth specificato ed abiliter la telecamera IR A questo punto il programma funziona come definito nella sezione 3 2 Se le coordinate specificate nel report sono corrette vengono calcolate le coordi nate corrispondenti sullo schermo con queste espressioni new_x matr 0 x matr 1 y matr 2 matr 6 x matr 7 x y 1 new_y matr 3 x matr 4 y matr 5 matr 6 x matr 7 y 1 Dove matr i corrisponde ad
14. funzionamento Il quarto capitolo parla di python whiteboard l interfaccia grafica del proget to Come strutturata e come funziona saranno le domande a cui cercheremo di rispondere in questa breve trattazione Il quinto capitolo spiega quali sono le modifiche principali che sono state fatte in lightboard ed i dettagli tecnici dell implementazione xvi Indice Introduzione xvii 1 Guida per l utente 55 1 1 Librerie necessarie lt a led Wile d fe en ahead eier 55 1 2 Guida all esecuzione 6 2 a6 a deal a E x 55 123 Configurazioni os ea a aA amp A aoe Gk eee a 56 2 Come funziona il Wiimote 59 2 1 Comunicazione Bluetooth 2 4 4 4 64 eee ea 59 ZUR REPO res dia ze ede eh ele te Le 60 2 1 2 Report del Wiimote asse de ale anne 62 22 Reportan ga saepe ded e 64 Adel OLaLUSTEDOENNE 5 hi fected ae Eck dg oe che ad he eens nt 64 222 Date Porno ua Sat Mee une Sek bo Breit 66 2 2 3 Memoria e registri papa iaa e a 67 Zion Lelecamera IRon ao pii priest ob dietro 68 Zack Tnazializzazione coa sa ok se ow a ek ed SE E a 69 22 Pormato del dal u 2m SE A eS La 71 3 La libreria libcwiid 73 3 1 Struttura di libewiid it a8 rr Sethe Sh 73 Sdi Phreed zira E ce Dit be at ade Stake Se oe 73 32 Analisi dinaria wa O de E A e n 76 32 ta El a in ae ee he ne 76 xix INDICE 3 2 2 Abilitazione dei segnali IR 77 3 2 3 Lettura dei dati IR 78 3 3 Strutture dati
15. hxy in ordine per come sono stati presentati nel file di configurazione A questo punto facendo uso della libreria XTest 10 si sposta il cursore nella posizione specificata Nel caso in cui il click non sia abilitato la funzione di callback finisce qui e si aspetta il prossimo pacchetto Nel caso contrario invece l idea quella di iniziare il click e mantenerlo fintanto che arrivano pacchetti IR contenenti coordinate valide appena arriva un pacchetto IR con coordinate non valide si rilascia il click del cursore Questo permette di emulare il funzionamento di un mouse nelle operazioni di click doppio click e trascinamento In lightboard questo viene fatto con l ausilio di una varibile chiamata go Bibliografia URL http wiildos wikispaces com URL https learn sparkfun com tutorials bluetooth basics URL http pyqt sourceforge net Docs PyQt4 introduction html URL https gcc gnu org onlinedocs gcc 4 7 1 gcc Optimize Options html Bluetooth URL http en wikipedia org wiki Bluetooth Inc Bluetooth SIG Baseband Architecture Inc Bluetooth SIG Human Interface Device Profile URL https developer bluetooth org TechnologyOverview Pages HID aspx Inc Bluetooth SIG Logical Link Control URL https www bluetooth org en us specification assigned numbers logical link control Renzo Davoli S2argv execs something was missing in libc URL http bit ly 1uojZur Kieron Drake XTEST
16. il proprio motore grafico ed i propri controlli rendendo lo cos indipendente dalla piattaforma questo portava occasionalmente a discrepanze laddove l emulazione era imperfetta Le versioni recenti di Qt usano le API native delle differenti piattaforme e Segnali e slot un costrutto introdotto in Qt per la comunicazione tra oggetti che permette di implementare facilmente il pattern Observer e Compilatore di meta oggetti il compilatore di meta oggetti uno strumento che funziona sul sorgente di un programma Qt Esso in terpreta alcune macro dal codice C e le usa per aggiungere codice con meta informazioni sulle classi usate nel programma Queste meta informazioni sono usate da Qt per fornire funzionalit non disponibili nativamente nel C cio segnali e slot introspezione e chiamate di funzione asincrone 19 3 2 2 PyQt4 Qt non disponibile soltanto per i programmi in C sono stati svi luppati infatti molti moduli che implementano le funzionalit di Qt in altri linguaggi di programmazione 18 3 X Window System Prenderemo in esame un particolare esempio PyQt utilizzato in python whiteboard PyQt comprende numerosi componenti Primi fra tutti ci so no alcuni moduli di estensione di Python tra quelli utilizzati in python whiteboard troviamo e QtCore contiene il nucleo delle classi senza interfaccia grafica inclusi il ciclo di eventi ed il meccanismo di segnali e slot di Qt e QtGui
17. il thread principale si occupa di leggere dal socket dei dati interrupt i messaggi ricevuti dal Wiimote processarli e smi starli alle funzioni di callback I messaggi di stato vengono smistati al thread status mentre i messaggi che contengono dati vengono smistati al thread mesg callback e thread status si occupa di leggere dalla pipe dedicata allo stato del Wiimote che viene riempita quando esso viene modificato e di gestire il 5 1 Studio di Cwiid 27 cambiamento aggiornando la struttura wiimote_t attraverso il modulo state c e thread mesg_callback si occupa di leggere dalla pipe dedicata ai messaggi del Wiimote Questo thread chiama la funzione di callback definita dal programmatore dando cos massima flessibilit di perso nalizzazione del comportamento process c Questo modulo processa i messaggi ricevuti dal thread router in una for ma pi facilmente leggibile dalle funzioni di callback che si occuperanno di elaborarli util c Questo modulo contiene alcune funzioni di utilizzo generale tra cui anche la gestione degli errori 5 1 2 Analisi dinamica Una volta fatta un analisi statica della libreria e delle sue funzioni un a nalisi dinamica della stessa ha permesso di capire la sequenza di attivazione delle funzioni ed il loro funzionamento Il processo si divide in tre fasi distinte 1 inizializzazione 2 abilitazione dei segnali IR 3 lettura dei segnali IR Inizializzazione
18. riconosci W mento dei gesti e puntare attraverso l uso dell accelerometro e del sensore ottico 24 Figura 1 1 Wiimote A questo scopo dotato di una fotocamera ad infrarossi monocromatica con una risoluzione di 128x96 Il circuito interno di elaborazione delle immagini della telecamera pu trac ciare fino a quattro punti Il processore integrato usa un analisi sub pixel 8x che fornisce una risoluzione di 1024x768 ai punti monitorati Il campo visivo del Wiimote di 33 gradi orizzontali e 23 gradi verticali e pu individua 1 Infrastruttura re sorgenti fino a 850nm anche se con un intensit dimezzata rispetto alle sorgenti a 940nm 25 Figura 1 2 Infrastruttura hardware originale In figura 1 2 descritto il funzionamento originale del Wiimote Vediamo come il Wiimote rilevi i segnali IR trasmessi dalla sensor bar della Wii una barra che si pu posizionare sopra o sotto il televisore munita di 10 led ad infrarossi Il Wiimote collegato via Bluetooth alla Wii alla quale invia i dati rilevati la Wii li elabora e per triangolazione riesce a capire dove si trova il Wiimote 1 1 Funzionamento di Lightboard projector den infrared wiimote computer Figura 1 3 Infrastruttura hardware LIM 1 1 Funzionamento di Lightboard In figura 1 3 invece descritto il funzionamento del Wiimote per creare una lavagna multimediale interattiva LIM In questo caso il Wiimote fermo e pu
19. sisi i elia Seles gd ed Res 81 3 3 1 CWE se aio ene dani ea dele ih wk 82 3 3 2 cwiid_internalsh 83 Python whiteboard 85 4 1 Analisi statica e 86 42 Analisi dinamica 00 88 Lightboard 91 5 1 Funzionamento 0 0 00000 eee 91 Elenco delle figure 1 1 2 1 2 2 3 1 3 2 3 3 3 4 3 9 3 6 4 1 4 2 5 1 Screenshot interfaccia di lightboard 57 Tipi di report e mappatura dei canali L2CAP 61 Header di un messaggio 61 Struttura di libewiid 2 42 Posto ba eh dP ee 74 Diagramma di sequenza inizializzazione libew d 76 Diagramma di sequenza abilitazione libewid TT Diagramma di sequenza lettura libewiid 78 Diagramma delle attivit del thread router 2 2 2 79 Diagramma delle attivit del thread status 80 Struttura di python whiteboard 85 Diagramma di sequenza di python whiteboard 90 Diagramma delle attivit di Lightboard 92 xxl Elenco delle tabelle 2 1 2 2 2 3 2 4 2 5 2 6 2 7 Tipi di transazione supportati naa re 62 Report del Wiimote Lescano a is 4k 63 Maschera di bit report input 65 Registri delle periferiche conosciute 68 Blocchi di sensibilit 5 2 20 tra eier 70 Modalit di formato dei dati gt ess osa zen a 71 Formato d i dati a so ta ute 4S RI 71 xxiii Capitolo 1 Guida p
20. un appaiamento pairing o l accettazione da parte del proprietario ma la connessione semplice pu essere inizializzata da ogni dispositivo e rimane finch non si esce dal raggio Alcuni dispositivi possono effettuare una sola connessione in tal caso non compariranno nelle indagini finch non si disconnettono Ogni dispositivo ha un indirizzo univono a 48 bit questi indirizzi general mente non vengono mostrati nelle indagini al loro posto si usano dei nomi impostati dagli utenti 2 2 2 Appaiamento Motivazioni Molti dei servizi offerti su Bluetooth possono esporre dati privati o per mettere alla parte connessa di controllare il dispositivo Bluetooth Per motivi di sicurezza necessario essere in grado di riconoscere specifici dispositivi e controllare per quali di essi permessa una connessione Allo stesso modo utile per i dispositivi Bluetooth poter stabilire una con nessione senza l intervento dell utente ad esempio quando entrano nel raggio Bluetooth Processo Per risolvere questi conflitti Bluetooth usa un processo chiamato bon ding un legame bond generato tramite un processo di appaiamento Il processo di appaiamento attivato da una specifica richiesta dall utente di generare un legame ad esempio se l utente esplicitamente richiede di aggiun gere un dispositivo Bluetooth oppure attivata automaticamente quando ci si connette ad un servizio dove l identit del dispositivo richiesta per
21. 1 2 Benchmark 1 a duc eletti 45 Gala Benchmark 2 cal Gallella dein Pasto kat 46 6 2 Benchmark su Raspberry Pi 2 2 sa ep ae are 47 6 2 1 Benchmark a ngi ne or oe 47 03232 gt Benchmark T presse ida re ei 48 02 Benchmark 2 s Siete lt 2 Bde aa da Fin 48 6 3 Confronto con python whiteboard 49 6 3 1 Risultati su Asus X53S LL 49 6 3 2 Risultati su Raspberry Pi ae li Bew Bewer 50 6 3 3 Analisi dei dati a e e ee 50 Conclusioni 54 A Manuale e Documentazione Tecnica 55 INDICE ix Bibliografia 96 Elenco delle figure 1 1 1 2 1 3 1 4 1 5 1 6 2 1 2 2 2 3 2 4 3 1 5 1 5 2 ANTONIA AAA A lola renale 1 Infrastruttura hardware originale 2 Infrastruttura hardware LIM oia ga 3 Diagramma di deployment lightboard 4 Problema calibrazione 3 leia a 22 a aa 5 Soluzione calibrazione ar Er des it et 5 Pic n t Bluetooth o lt do a Wo i Bier heats ene a T Stack Bluetooth va lo oc sa dda cca a 8 Stach HID 6 gt is ta So Se oh eo ae a a 10 Interfaccia BIGHID gt ag lle delete Ae 11 X11 Un semplice esempio o 15 Diagramma dei componenti di libewiid 25 Diagramma dei componenti di python whiteboard 30 xl Elenco delle tabelle 4 1 Test effettuati su Asus X53S 21 4 2 Test effettuati su Raspberry Pi 21 6 1 Asus X53S Benchmark 0 lightboard IR 45 6 2 Asus X53S Be
22. 3 lightboard 176 2324 2084 1 9 lightboard 176 2324 2084 0 9 lightboard Tabella 6 5 Asus X53S Benchmark 2 lightboard IR 6 2 Benchmark su Raspberry Pi VIRT MB RES KB SHR KB CPU Command 112 2324 2084 0 9 lightboard 112 2324 2084 0 9 lightboard 492 42952 33348 0 0 Jusr bin X 112 2324 2084 0 0 lightboard Tabella 6 6 Asus X53S Benchmark 2 lightboard IDLE 6 2 Benchmark su Raspberry Pi Per questo benchmark valgono le stesse premesse del precedente l unica differenza che il Raspberry Pi non multi thread 6 2 1 Benchmark 0 VIRT KB RES KB SHR KB CPU Command 25104 14000 5424 16 9 usr bin X 28168 1084 860 4 8 lightboard Tabella 6 7 Raspberry Pi Benchmark 0 lightboard IR VIRT KB RES KB SHR KB CPU Command 159000 38000 22000 77 1 py whiteboard 24044 13000 5556 5 1 usr bin X Tabella 6 8 Raspberry Pi Benchmark 0 python whiteboard IR 6 Risultati 6 2 2 Benchmark 1 VIRT KB RES KB SHR KB CPU Command 25104 14000 5424 1 3 usr bin X 28168 1084 860 0 3 lightboard Tabella 6 9 Raspberry Pi Benchmark 1 lightboard IDLE VIRT KB RES KB SHR KB CPU Command 159000 38000 22000 58 3 py whiteboard 24044 13000 5556 2 6 usr bin X Tabell
23. 796 94600 62644 30 1 py whiteboard 796 94600 62644 15 9 py whiteboard 505 57936 48400 5 2 usr bin X Tabella 6 2 Asus X53S Benchmark 0 python whiteboard IR 6 1 2 Benchmark 1 Questo benchmark serve a valutare le prestazioni del programma quando non rileva nessun segnale IR 46 6 Risultati VIRT MB RES KB SHR KB CPU Command 176 2496 2256 2 4 Jlightboard 176 2496 2256 14 Jlightboard 176 2496 2256 1 4 Jlightboard 506 55716 45852 0 0 usr bin X Tabella 6 3 Asus X535 Benchmark 1 lightboard IDLE VIRT MB RES KB SHR KB CPU Command 796 94752 62728 21 0 py whiteboard 796 94752 62728 16 2 py whiteboard 796 94752 62728 4 8 py whiteboard 506 54324 44348 0 0 usr bin X Tabella 6 4 Asus X53S Benchmark 1 python whiteboard IDLE 6 1 3 Benchmark 2 Questo benchmark l ultimo che stato fatto per la versione 0 1 di light board raccoglie le informazioni sulle prestazioni del software dopo le otti mizzazioni di cui abbiamo parlato nella sezione 5 4 Qui sono state rifatte le analisi di python whiteboard per tenere conto delle variazioni dovute alla macchina ma non verranno mostrate tuttavia esse sono state aggiunte ai dati delle precedenti analisi per il calcolo della media VIRT MB RES KB SHR KB CPU Command 498 50696 41164 7 6 usr bin X 176 2324 2084 3
24. ALMA MATER STUDIORUM UNIVERSIT DI BOLOGNA SCUOLA DI SCIENZE Corso di Laurea in Informatica Lightboard un programma efficiente per costruire una LIM con Raspberry Pi e Wiimote Relatore Presentata da Chiar mo Prof Giovanni Incammicia Renzo Davoli Sessione III Anno Accademico 2013 2014 2015 Giovanni Incammicia giovanni incammicia gmail com This work is licensed under the Creative Commons Attribution ShareAlike 4 0 International License To view a copy of this license visit http creativecommons org licenses by sa 4 0 Introduzione Lightboard un programma che permette di creare una lavagna interat tiva multimediale con il solo ausilio di una penna ad infrarossi un Wiimote ed un computer con un sistema GNU Linux Gi esistono programmi open source e completi che mirano a tale scopo tuttavia questi programmi spesso non competono con le LIM commerciali Lightboard deriva dall unione delle parole lightweight e whiteboard Infatti quello che rende diverso lightboard rispetto ad altri programmi come python whiteboard che punta ad avere buone prestazioni su computer con poche risorse Con la diffusione di mini computer come il Raspberry Pi sono aumentati i progetti hardware perch allora non creare una lavagna multimediale interattiva utilizzando Raspberry Pi come calcolatore Chi ha provato software come python whiteboard o analoghi basati su lin guaggi di programmazione interpretati semi
25. BarDialog createConnectThread ri bi create CreateThreadClass vera create crea ConfigDialog Connect isConnected EE ES EE Neon close run ActivatelR create j CalibrateDialog putCallbackIR crea la wiiPoints 4 schermata di a ES Sl Si calibrazione calibrate create FakeCursor create putCallbackIR i CreateThreadClass Figura 4 2 Diagramma di sequenza di python whiteboard Capitolo 5 Lightboard Lightboard il frutto di approfondite analisi delle prestazioni e studio delle applicazioni su cui si basa L applicazione finale unisce l interfaccia intuitiva di python whiteboard con la velocit di libewiid con alcune modifiche a quest ultimo per ottimizzarlo ulteriormente 5 1 Funzionamento Come vediamo dal diagramma in figura 5 1 la prima cosa che fa light board eseguire python whiteboard Per fare questo si avvale di una libreria sviluppata dal professor Renzo Davoli libs2argv 9 In questa libreria pre sente un API execs che ha lo stesso effetto di system ma senza aprire una sotto shell che porterebbe ad alcuni problemi legati alla sicurezza A que sto punto si aprir l interfaccia grafica di python whiteboard che permetter all utente di connettere il Wiimote ed effettuare la calibrazione Effettuata la calibrazione si dovr premere Activate per scrivere le configurazioni ed i dati di calibrazione su un file e ritornare a lightboard Il file
26. I II II II II II II Dove BB BB indicano i dati dei bottoni AA AA AA quelli dell accelerometro e i 12 byte II sono quelli della telecamera IR 2 2 3 Memoria e registri Il Wiimote include una memoria EEPROM integrata parte di essa accessibile agli utenti Questa area utente usata per memorizzare le costanti di calibrazione ed altri dati di cui non ci occuperemo in questo documento Sia la memoria integrata sia i registri sono accessibili usando lo stesso report Per leggere dati i comandi sono mandati al report output 0x17 a2 17 MM FF FF FF SS SS FF FF FF l offset SS SS la dimensione da leggere in byte entrambi in formato big endian Il bit 2 0x04 di MM seleziona lo spazio degli indirizzi Azzerare questo bit permette di leggere la memoria EEPROM impostarlo ad 1 significa leggere 68 2 Come funziona il Wiimote dai registri di controllo I dati letti sono restituiti attraverso il report input 0x21 visto nella sezione 2 2 1 Per scrivere dati i comandi vanno mandati al report output 0x16 a2 16 MM FF FF FF SS DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD Il significato dei byte lo stesso del report 0x21 eccetto per la dimensione che pu essere massimo 16 byte Sul report 0x22 arriva una notifica ackno wledgement che non ancora stata analizzata La scrittura sulla memoria EEPROM non verr descritta in questo documen to in quanto non interessante ai fini del progetto Registri
27. Il thread main quello che fa partire l intera applicazione si occupa di connettersi al Wiimote di inizializzare tutte le strutture dati di abilitare la telecamera IR e di rimanere in attesa di un input dall utente Nella fase di inizializzazione come vedremo in seguito richiede lo stato del Wiimote ed avvia la procedura di abilitazione della telecamera IR che abbiamo visto nella sezione 2 3 1 per entrambe queste operazioni deve comunicare con il 73 74 3 La libreria libcwiid Status_request exec_write_seq cwiid_read mea O process_status O cwiid_read write status read status AI O o CEE write_mesg_array mesg_array 3 A 3 send_rpt update_rpt_mode msg_array Figura 3 1 Struttura di libewiid Wiimote tramite il canale di controllo Si occupa anche di creare i canali Bluetooth e gli altri thread nonch le pipe di comunicazione Router Come dice il nome questo thread si occupa di instradare i dati ricevuti dal Wiimote attraverso il canale Bluetooth interrupt alle funzioni o ai thread che si occuperanno poi di analizzarli ed elaborarli Questo thread l unico che riceve i dati sul canale interrupt quello riservato ai report di tipo DATA e DATC creando cos una struttura modulare ben or ganizzata Router il thread centrale durante l esecuzione dell applicazione immette dati in tutte e tre le pipe si occupa di inoltrare i messaggi alla
28. PU lightboard 57540 14 7 37 72 15 33 py whiteboard 152536 95 5 100 00 100 00 Tabella 6 13 Asus X53S Risultati Benchmark 0 IR Program RES KB CPU KB RES CPU lightboard 58212 5 2 39 05 12 38 py whiteboard 149076 42 0 100 00 100 00 Tabella 6 14 Asus X53S Risultati Benchmark 1 IDLE 50 6 Risultati Program RES KB CPU KB RES CPU lightboard IR 53020 13 7 34 76 14 29 lightboard IDLE 45276 1 8 30 37 4 29 Tabella 6 15 Asus X53S Risultati Benchmark 2 6 3 2 Risultati su Raspberry Pi Program RES KB CPU KB RES CPU lightboard 15084 21 7 29 58 26 40 py whiteboard 51000 82 2 100 00 100 00 Tabella 6 16 Raspberry Pi Risultati Benchmark 0 Program RES KB CPU KB RES CPU lightboard 15084 1 6 29 58 2 63 py whiteboard 51000 60 9 100 00 100 00 Tabella 6 17 Raspberry Pi Risultati Benchmark 1 Program RES KB CPU KB RES CPU lightboard IR 15076 20 3 29 56 24 70 lightboard IDLE 15076 2 3 29 96 3 18 Tabella 6 18 Raspberry Pi Risultati Benchmark 2 6 3 3 Analisi dei dati Dai dati vediamo che lightboard consuma considerevolmente poco rispet to a python whiteboard inoltre stato raggiunto l obiettivo di rendere light board fruibile su Raspberry Pi 6 3 Confronto c
29. R enable control_channel interrupt_channel Router thread 1 WRITE SEQ RPT 2 handshake WRITE SEQ RPT Kernen 5 4 handshake WRITE SEQ RPT 7 wii forward 6 handshake 10 read_packet 11 set report Kennen 12 handshake Figura 3 3 Diagramma di sequenza abilitazione libewiid Wmdemo c permette all utente tramite terminale di abilitare i segnali IR lightboard lo fa in automatico durante la fase di inizializzazione In questa fase si attiva la procedura vista nella sezione 2 3 1 per attivare la ricezione dei dati della telecamera IR Come abbiamo visto la procedura ri chiede 7 passaggi ma libewiid usa soltanto i primi 6 Per fare questo il thread main manda i report necessari sul canale di controllo attende i messaggi di handshake e nel caso delle fasi 3 6 i dati ricevuti in risposta dal Wiimote 78 3 La libreria libcwiid sul canale di interrupt vengono letti ed elaborati dal thread router Per fare questo il thread router utilizza una pipe dedicata la pipe r w read write Alla fine di questa fase inizieranno ad arrivare sul canale di interrupt i mes saggi relativi ai dati IR raccolti dalla telecamera ad infrarossi del Wiimote 3 2 3 Lettura dei dati IR interaction Read IR interrupt_channel Router thread mseg pipe Mesg_callback thread 2 write mesg arra callback_function 4 call Figura 3 4 Diagramma di sequenza lettura libewiid In questa fas
30. R o in sta to di riposo IDLE ed il consumo di RAM anch esso nei due casi precedenti Questo dato per noi pi indicativo in quanto ci dice che impatto potr avere il software su un hardware con poche risorse 4 1 1 Test effettuati su Asus X53S e Processore Intel Core i7 2670QM 2 20GHz x 8 4 1 Risorse richieste da python whiteboard 21 e RAM 3 6 GB e OS type 64 bit e OS Ubuntu 14 10 Elaborazione IR IDLE Consumo CPU 95 9 42 Consumo RAM MB 148 96 145 58 Tabella 4 1 Test effettuati su Asus X53S 4 1 2 Test effettuati su Raspberry Pi Model B e Processore 700MHz Low Power ARM1176JZ F Applications Pro cessor e RAM 512 GB e OS type 32 bit e OS Raspbian December 2014 Elaborazione IR IDLE Consumo CPU 82 2 60 9 Consumo RAM MB 51 51 Tabella 4 2 Test effettuati su Raspberry Pi 22 4 Ipotesi di lavoro Impressioni sull utilizzo Sulla prima macchina il programma funziona abbastanza bene il cursore segue la penna IR con ritardo ma fluido ed utilizzabile Su Raspberry Pi invece completamente inutilizzabile il ritardo di circa 5 secondi Questi dati rendono evidente la necessit di creare una versione lightweight dei programmi per whiteboard esistenti Capitolo 5 Analisi e realizzazione Di seguito verr descritto il processo di analisi delle varie librerie ed ap plicazioni utilizzate nel progetto e la su
31. Wiimote utilizza hardware chiuso per questo motivo le informazioni sul suo funzionamento interno sono il risultato di analisi di reverse engineering 25 Vedremo inoltre come comunicare con il Wiimote a livello di Bluetooth il significato dei messaggi ed il procedimento di confi gurazione della telecamera IR Si consiglia di leggere questa sezione con una conoscenza di base del protocollo Bluetooth e del profilo BT HID utilizzato dal Wiimote Si pu trovare una breve trattazione dell argomento nella tesi associata 13 per approfondimenti ulteriori leggere le specifiche del profilo Bluetooth HID 11 2 1 Comunicazione Bluetooth Il protocollo Bluetooth HID Human Interface Device definisce un insie me di servizi che possono essere usati tra un host ed un dispositivo Questo profilo ha bisogno di due o pi canali L2CAP per trasmettere pac chetti di controllo e pacchetti di dati Un host BT HID deve aprire due canali Control e Interrupt Il canale di controllo impostato come un servizio di tipo Best Effort Dati a bassa latenza sono invece trasportati sul canale di interrupt il tipo di 99 60 2 Come funziona il Wiimote servizio deve dunque essere impostato a Guaranteed per assicurare la qualit del servizio BT HID costruito su alcuni concetti fondamentali un report descrittore ed i report I report sono gli agglomerati di dati che sono scambiati tra un dispositivo ed un client software I report descrittore des
32. a 6 10 Raspberry Pi Benchmark 1 python whiteboard IDLE 6 2 3 Benchmark 2 VIRT KB RES KB SHR KB CPU Command 25204 14000 5176 16 2 usr bin X 28164 1076 852 4 1 lightboard Tabella 6 11 Raspberry Pi Benchmark 2 lightboard IR VIRT KB RES KB SHR KB CPU Command 25204 14000 5176 1 8 usr bin X 28164 1076 852 0 5 lightboard Tabella 6 12 Raspberry Pi Benchmark 2 lightboard IDLE 6 3 Confronto con python whiteboard 49 6 3 Confronto con python whiteboard In questa sezione confronteremo i dati e calcoleremo le percentuali di uti lizzo delle risorse rispetto a python whiteboard Questo vuol dire che il consumo di RAM di python whiteboard verr cal colato come 100 se lightboard consuma la met avremo un 50 rispet to a python whiteboard Per quanto riguarda la memoria verr analizzata soltanto la memoria residente RES Spiegazione delle etichette utilizzate e RES KB specifica il totale di memoria residente utilizzata dai thread e CPU KB specifica il totale di CPU utilizzata dai thread e RES specifica la percentuale di memoria residente utilizzata dai thread rispetto a quella utilizzata da python whiteboard e CPU specifica la percentuale di CPU utilizzata dai thread rispetto a quella utilizzata da python whiteboard 6 3 1 Risultati su Asus X53S Program RES KB CPU KB RES C
33. a prima macchina descritta nella sezione 4 1 1 sono stati fatti tre ben chmark relativi a tre momenti diversi dello sviluppo di lightboard su Rasp berry Pi invece i primi due test sono stati eseguiti insieme I test analizzano tramite htop il consumo di RAM e CPU dei vari thread e del server X saranno riportati anche i dettagli relativi ai benchmark effet tuati su python whiteboard Prima di vedere i benchmark relativi al consumo di risorse della macchina analizziamo come gi fatto per python whiteboard il tempo di elaborazione richiesto da lightboard per elaborare un singolo segnale IR Esaminando un campione di 1000 segnali la media dei tempi di elaborazione di 0 0005291 secondi il 45 34 del tempo impiegato da python whiteboard che abbiamo visto nella sezione 4 1 Questo dato interessante perch ci dice che lightboard impiega meno della met del tempo di python whiteboard per elaborare un segnale rimanendo quindi in IDLE per pi tempo 1Ogni dato corrisponde ad una media di 10 rilevazioni 43 44 6 Risultati 6 1 Benchmark su Asus X53S Prima di vedere i risultati dei benchmark daremo una breve spiegazione della terminologia usata VIRT VIRT specifica la memoria virtuale utilizzata dal processo che equivale alla somma delle seguenti e memoria attualmente usata e memoria mappata nel processo ad esempio la RAM della scheda video per il server X e i file sul disco che sono mappati nel p
34. a successiva realizzazione L analisi segue il modello top down si sono quindi analizzati i componenti partendo dal livello pi alto quello dei moduli e delle interazioni tra essi pas sando per le sequenze di attivazione delle funzioni e routine fino ad analizzare il comportamento interno delle singole procedure Durante questo processo sono stati prodotti alcuni diagrammi di progettazione utilizzando il linguag gio di modellazione UML alcuni di questi verranno analizzati in questo ca pitolo altri pi tecnici e specifici saranno analizzati nella documentazione in Appendice A 5 1 Studio di Cwiid Abbiamo visto nella sezione 2 3 1 che il Wiimote non fa uso dei tipi di dato standard e dei descrittori HID descrive solo la lunghezza del report lasciando il contenuto indefinito La prima problematica da affrontare stata dunque scegliere il driver per Wiimote da utilizzare nel progetto In merito sono stati valutati i driver per Wiimote pi utilizzati e quindi con 23 24 5 Analisi e realizzazione pi esempi e documentazione per quanto riguarda la programmazione C ne troviamo due wiiuse e cwiid Wiiuse Wiiuse una libreria che permette di connettersi a pi Wiimote Supporta l accelerometro la rilevazione IR ed alcune estensioni La libreria gestita da un singolo thread ed non bloccante il che la rende un API leggera e pulita Cwiid Cwiid una collezione di strumenti per Linux scritti in C
35. are disattivare il report dei dati della telecamera IR e attivare disattivare il report dello stato e attivare disattivare i messaggi nella funzione di callback e richiedere un messaggio di stato e stamparlo Wmdemo c offre inoltre un esempio di funzione di callback che semplicemen te stampa i report in una forma pi leggibile ed un ottimo banco di prova per analizzare la libreria e le sue funzionalit 5 3 2 Fasi preliminari Alleggerire il codice Uno degli scopi del progetto di rendere lightboard utilizzabile senza un consumo eccessivo di risorse su sistemi come Raspberry Pi Per prima cosa quindi si cercato di togliere da wmdemo c tutte le funzio nalit non utili al fine di lightboard e di conseguenza anche dalla libreria in modo da snellire il codice e quindi il consumo di RAM Le funzionalit che ci servono sono e attivare disattivare il report dei dati della telecamera IR 5 Analisi e realizzazione e attivare i messaggi nella funzione di callback Riguardo alle funzionalit escluse le spiegazioni sono diverse e la gestione dei led della vibrazione dei bottoni e dell accelerometro non interessante ai fini del progetto e la gestione delle estensioni non aggiunge funzionalit utili ai fini del progetto e la gestione dello stato stata eliminata perch l idea quella di visua lizzare le informazioni sul Wiimote attraverso l interfaccia grafica Per una trattazione pi c
36. aso di libewiid due tipi di analisi sta tica e dinamica Per un analisi pi completa si rimanda alla documentazione in Appendice A 5 2 1 Analisi statica Ancora una volta utilizziamo un diagramma dei componenti per descri vere la struttura generale di python whiteboard pywhiteboard py Questo il modulo centrale qui viene creata l istanza della finestra prin cipale del programma da cui si accede alla schermata di configurazione ed alla calibrazione nonch ad alcune informazioni generali sul Wiimote con nesso 30 5 Analisi e realizzazione C configuration CI pywhiteboard ConfigDialog UI calibration CJ CalibrateDialog FakeCursor Figura 5 2 Diagramma dei componenti di python whiteboard Questo modulo permette di gestire anche i profili disconnettere il Wiimote o passare dalla modalit di solo puntamento al click e viceversa configuration py Questo modulo fornisce l interfaccia per accedere al pannello di configu razione dal quale potremo modificare le impostazioni relative al programma o al Wiimote calibration py Questo modulo permette di gestire la calibrazione del Wiimote utilizza una comoda schermata con quattro punti agli angoli dello schermo Bisogna puntare ogni angolo in successione per permettere al programma di mappare i segnali IR rilevati dal Wiimote in coordinate dello schermo 5 2 Studio di python whiteboard 31 cursor py Questo il modulo
37. aso si perde in flessibilit una volta chiuso python whiteboard infatti non sar possibile cambiare le impostazioni finch non si riavvia l ap plicazione In compenso per restringiamo l esecuzione di python whiteboard al solo avvio del programma permettendo cos ogni possibile ottimizzazione durante la fase pi importante cio quella di rilevamento dei segnali IR e conseguente movimento del mouse Si quindi adottato il secondo metodo dall interfaccia di python whiteboard sar sufficiente premere il bottone Activate per salvare sul file le configura zioni e chiudere l interfaccia grafica I dati salvati sul file sono 1 indirizzo Bluetooth 2 dati di calibrazione 3 impostazioni di configurazione Lightboard a questo punto legge il file si connette al Wiimote specificato dall indirizzo e registra i dati relativi alla calibrazione in modo che possano essere utilizzati successivamente dalla funzione di callback I dettagli sul formato del file verranno discussi nell Appendice A Bisogna per fare una nota sulla funzione utilizzata per chiamare python whiteboard dal codice di lightboard Inizialmente era stata usata la funzione della libreria standard C system Questa funzione richiede l attivazione di un programma molto complesso bash solamente per elaborare alcuni parametri e questo mina la sicurezza dei propri programmi Si preferito usare quindi una funzione della libreria lbs2argv scritta dal Profes
38. che gestisce il cursore interagisce direttamente con la funzione di callback del Wiimote ogni volta che il Wiimote rileva un segnale IR viene chiamata la funzione di callback che si occuper di elaborare questo segnale muovere il cursore ed eventualmente cliccare nel punto rilevato wiimote py Questo modulo contiene tutti i dati del Wiimote e le funzioni di callback Contiene la classe Wiimote che viene istanziata al momento della connes sione con il dispositivo ed necessaria per la maggior parte delle azioni del programma linuxWiimoteLib py Questo modulo l unico collegamento tra il Wiimote ed il modulo wii mote py nascosto al resto delle classi e si occupa di comunicare con il dispositivo utilizzando il protocollo Bluetooth thread py Questo modulo non stato inserito nel diagramma in figura 5 2 perch semplicemente un estensione del modulo QThread importante precisa re per che python whiteboard un applicazione multi thread sono gestite tramite thread le seguenti procedure e la funzione di callback del Wiimote relativa alla ricezione dei dati IR e la connessione con il Wiimote e la gestione del cursore 5 2 2 Analisi dinamica Il flusso di esecuzione di python whiteboard si articola in tre fasi 5 Analisi e realizzazione 1 connessione 2 calibrazione 3 lettura dei segnali IR Connessione In questa fase si connette il Wiimote vengono creati gli oggetti relativi al di
39. crivono il formato ed il significato di ogni agglomerato di dati che il dispositivo supporta 2 1 1 Report Quando le applicazioni ed i dispositivi HID si scambiano dati lo fanno tramite report Ci sono tre tipi di report e Report di input agglomerati di dati che vengono mandati dal dispo sitivo HID all applicazione tipicamente quando lo stato di un controllo cambia e Report di output agglomerati di dati che vengono mandati dall ap plicazione al dispositivo tipicamente per dare un comando al disposi tivo come accendere i led e Report di funzionalit agglomerati di dati che possono essere ma nualmente letti e o scritti sono tipicamente correlati ad informazioni di configurazione Tra report e canali ci sono le seguenti relazioni e i report di funzionalit bi direzionali sono trasportati sul canale di controllo e i report di input e output sono trasportati sul canale di interrupt e tutti i dispositivi BT HID dovrebbero comunicare attraverso un canale di controllo ed un canale di interrupt 2 1 Comunicazione Bluetooth Asyncrhonus nn Input Reports Asynchronus gt Output Reports Synchronous Reports gt Input Output Feature Figura 2 1 Tipi di report e mappatura dei canali L2CAP Intestazione di transazione BT HID Tutti i messaggi scambiati tra un dispositivo HID ed un applicazione sono preceduti da un intestazione di transazione che divide in due campi il tip
40. di controllo Il Wiimote ha alcuni registri di memoria che corrispondono a diverse periferiche Queste includono il microfono il controller delle estensioni e la telecamera IR La periferica a cui accedere selezionata dal primo byte dell indirizzo i 16 bit pi bassi specificano il registro da accedere per quella periferica Le periferiche conosciute sono indicate nella tabella 2 4 Inizio Fine Uso 0xA20000 0xA20009 Impostazioni microfono 0xA40000 OxAAOOFF Impostazioni e dati del controller delle estensioni 0xA60000 OxA600FF Impostazioni e dati del wii motion plus 0xB00000 0xB00033 Impostazioni telecamera IR Tabella 2 4 Registri delle periferiche conosciute 2 3 Telecamera IR Il Wiimote include una telecamera monocromatica da 128x96 di risoluzio ne con un processore di immagini integrato La telecamera guarda attraverso 2 3 Telecamera IR 69 un filtro che fa passare solo gli infrarossi Il processore di immagini integrato pu seguire fino a 4 oggetti in movimento e questi dati sono gli unici disponibili per l host Il processore interno usa un analisi 8x che fornisce una risoluzione di 1024x768 ai punti tracciati La telecamera IR viene abilitata impostando il bit 2 sul report output 0x13 e Ox1A a2 13 04 a2 1A 04 Il primo abilita un pizel clock a 24MHz sul pin 7 della telecamera Il secondo azzera il pin 4 probabilmente abilita la telecamera in una modali
41. e 4 in lightboard modificata ad 1 che indica il numero di sorgenti IR da leggere dai report del Wiimote valid un flag che indica se il dato valido o meno pos invece un array che contiene le coordinate CWIID_X e CWIID_Y del punto struct cwiid_state uint8_t rpt_mode uint8_t led uint8_t rumble uint8_t battery uint16_t buttons uint8_t acc 3 struct cwiid_ir_src ir_src CWIID_IR_SRC_COUNT enum cwiid_ext_type ext_type union ext_state ext enum cwiid_error error 3 Questa invece la struttura relativa allo stato del Wiimote Qui viene utilizzata la struttura cwiid_ir_src per contenere l ultimo dato IR letto in particolare viene creato un array di CWIID_IR_SRC_COUNT strutture Gli altri campi indicano proprio quello che il loro nome suggerisce 3 3 Strutture dati 83 3 3 2 cwiid_internals h In questo file invece la struttura pi importante proprio quella che mantiene i dati riguardanti il Wiimote struct wiimote int flags int ctl_socket int int_socket pthread_t router_thread pthread_t status_thread pthread_t mesg_callback_thread int mesg_pipe 2 int status_pipel2 int rw_pipe 2 struct cwiid_state state cwiid_mesg_callback_t mesg_callback pthread_mutex_t state_mutex pthread_mutex_t rw_mutex pthread_mutex_t rpt_mutex int id const void data F Qui possiamo vedere che sono memorizzati i canali Bluetooth i thread le pipe lo stato lid ed altre informazioni im
42. e il thread status non fa nulla ma pu attivarsi in caso di un input da parte dell utente il thread main rimane in attesa ed il lavoro maggiore viene effettuato dal thread router e dal thread mesg_callback Il thread router ricever continuamente pacchetti li analizzer li elaborer tramite il modulo process c ed infine li inoltrer a mesg_callback tramite la pipe dei messaggi Questo permetter a mesg_callback di occuparsi soltanto della chiamata alla funzione di callback definita dal programmatore 3 2 Analisi dinamica 79 Thread router in dettaglio ERROR flag mesp is set write_mesg_array a a a a ee Figura 3 5 Diagramma delle attivit del thread router Nel diagramma in figura 3 5 vediamo il funzionamento del thread router Come gi anticipato il thread router composto da un ciclo che inizia con la ricezione di un messaggio sul canale di interrupt in base al tipo di messaggio chiamer una funzione del modulo process c adibita alla sua elaborazione Dopodich viene aggiornato lo stato interno memorizzato nella struttura da ti wiimote_t Infine se si abilitata la scrittura dell output nel thread mesg_callback verr inviato un array contenente le informazioni analizzate sulla pipe dei messaggi al thread mesg_callback 80 3 La libreria libcwiid Thread status in dettaglio l I I I I I I I I I I I I I I I I I I I I I I I
43. e la matrice inversa Capitolo 2 Bluetooth Bluetooth una tecnologia senza fili standard per lo scambio di da ti su breve distanze che utilizza onde radio UHF ultra high frequency nella banda ISM Industral Scientific and Medical da 2 4 a 2 485 GHz Bluetooth un protocollo a pac chetto con una struttura master slave Un master pu comunica re con massimo sette slave in una piconet Profili Bluetooth Figura 2 1 Piconet Bluetooth I profili Bluetooth sono protocol li aggiuntivi costruiti sulle basi dello standard Bluetooth Mentre le spe cifiche di quest ultimo definiscono come funziona la tecnologia i profili defi niscono come essa viene usata 2 Per usare la tecnologia Bluetooth un dispositivo deve essere in grado di in terpretare alcuni profili Ogni specifica di profilo contiene informazioni su e le dipendenze da altri formati 2 Bluetooth e i formati di interfaccia utente consigliati e parti specifiche dello stack Bluetooth usati dal profilo Per adempiere al proprio compito ogni profilo usa particolari opzioni e parametri ad ogni livello dello stack 2 1 Stack del protocollo Bluetooth ET Application pplications Profiles layer Audi en dsc Control layer aati Logical link control adaptation protocol Data link Baseband layer Physical Physical radio layer Figura 2 2 Stack Bluetooth Bluetooth definito con un architettura a livelli che consiste di protocoll
44. endiamo per esempio il messaggio a1 30 00 00 Dalla tabella 2 1 vediamo che il tipo a indica un messaggio di tipo DATA il parametro 1 indica che si tratta di un messaggio di input vedere tabella 15 2 1 Comunicazione Bluetooth I O ID Byte Funzione O 0x10 1 Sconosciuta O 0x11 1 LED O 0x12 2 Modalita report dati O 0x13 1 Abilitare la telecamera IR O 0x14 1 Abilitare il microfono O 0x15 1 Richiesta di informazioni di stato O 0x16 21 Scrivere in memoria o nei registri O 0x17 6 Leggere la memoria o i registri O 0x18 21 Dati microfono O 0x19 1 Disattivare il microfono O Ox1A 1 Abilitare la telecamera IR 2 I 0x20 6 Informazioni di stato I 0x21 21 Leggere i dati dalla memoria o dai registri I 0x22 4 Notifica report di output risultato funzione I 0x30 0x3 2 21 Report dati Tabella 2 2 Report del Wiimote della sezione 7 4 9 delle specifiche BT HID 11 0x30 VID del report dalla tabella 2 2 vediamo che esso determina un report dati mentre 0x00 0x00 il payload Informazioni comuni dei report output In ogni report output singolo il bit 0 0x01 del primo byte controlla la funzionalit di vibrazione il bit 2 0x04 usato in molti report output come flag ON OFF per la specifica funzionalit da esso controllata Per esempio mandando 0x04 al report 0x19 sar disattivato il microfono a2 19 04 Mandando invece 0x00 lo s
45. er l utente In questa sezione spiegheremo come eseguire ed utilizzare lightboard Lightboard nella versione 0 1 non prevede una routine di installazione 1 1 Librerie necessarie Lightboard utilizza una versione personalizzata di libewiid non sar quin di necessario installare il pacchetto libewiid dev Le librerie da installare sono e python numpy e python bluez e python xlib e libbluetooth dev e libxtst dev 1 2 Guida all esecuzione Questi sono i passaggi necessari all esecuzione di lightboard 59 56 1 Guida per l utente 1 posizionarsi nella cartella lightboard e lanciare il comando make 2 lanciare il comando lightboard 3 a questo punto si aprir un terminale e l interfaccia di python whiteboard essa risulter privata di alcune configurazioni alcune delle funzionalit di python whiteboard sono state alterate 4 una volta connesso il Wiimote e calibrato lo schermo cliccare su Acti vate per chiudere l interfaccia utente 5 da questo momento si potr utilizzare la penna ad infrarossi proprio come si faceva con python whiteboard 1 3 Configurazioni In figura 1 1 si vede l interfaccia di lightboard python whiteboard di seguito saranno spiegate le configurazioni disponibili nella versione 0 1 del programma Si riportano di seguito le frasi in inglese previste dall interfaccia in figura 1 1 con opportuna spiegazione e Dont wait for devices pick the first one q
46. er s workstation fico comune sui sistemi operativi UNIX like che consente la creazione di un sistema client server di intera zione anche remota con programmi grafici X fornisce le basi per un am biente GUI disegnare e muovere fi X client i i browser nestre su un display e interagire con un mouse ed una tastiera 27 Network Z X Window System utilizza una ter minologia fuorviante per i concetti xterm di client e Server Remote machine Server X Figura 3 1 X11 Un semplice esempio Un server X un applicazione che risiede sul computer che ha la tastiera il monitor ed il mouse connessi Le responsabilit del server inclu dono la gestione dello schermo la gestione degli input da tastiera e dal mouse e la gestione degli input output che provengono da altri dispositivi Questo 15 16 3 X Window System confonde alcune persone perch si aspettano che il server X sia una macchina grande e potente e che il client X sia invece la macchina sulla loro scrivania Client X Ogni applicazione X come XTerm o Firefox un client Un client manda messaggi al server per eseguire operazioni come disegnare una finestra in certe coordinate fare click con il mouse ecc Il server invece manda indietro risposte che includono eventi quali ad esempio il click di un bottone da parte di un utente 21 In figura 3 1 vediamo un semplice esempio dove il server X riceve un input da una tastiera ed un m
47. fun zione di callback e di mandare messaggi al thread status quando c bisogno di aggiornare lo stato del Wiimote 3 1 Struttura di libcwiid 75 Status Questo thread il meno utilizzato ed il pi marginale ma ricopre co munque un ruolo importante in quanto si occupa di aggiornare lo stato del Wiimote quando necessario Nonostante il thread main utilizzi il canale Bluetooth di controllo durante la fase di inizializzazione esso rimane in attesa di un input utente per il resto dell esecuzione Dopo l inizializzazione sar il thread status ad occuparsi del canale di con trollo leggendo i dati e inviando report quando necessario Anche il thread status scrive dati su tutte e tre le pipe ma con meno fre quenza Il thread status riceve i suoi comandi attraverso la pipe di stato e si occu pa di gestire il cambiamento di stato aggiornando la struttura wiimote_t attraverso il modulo state c Mesg_callback Questo thread si occupa della funzione di callback definita dal program matore l unico thread che pu mandare in output delle informazioni nessuno vieta di farlo anche negli altri thread ma questo romperebbe la modularit della libreria rendendo cos il codice pi difficile da leggere Il thread mesg_callback resta in attesa di un input da parte degli altri thread sulla pipe dei messaggi quando riceve un messaggio chiama la funzione di callback passandoglielo come parametro insieme ad alcune informaz
48. i centrali core di collegamento cable replacement di controllo della tele fonia telephony control e adottati I protocolli obbligatori per ogni stack Bluetooth sono LMP L2CAP e SDP In aggiunta i dispositivi che comuni cano via Bluetooth possono universalmente utilizzare questi protocolli HCI e RFCOMM 5 Lo standard si pu dividere in due parti uno stack controller che con tiene le interfacce radio ed uno stack host che utilizza dati di alto livello Lo stack host generalmente implementato come parte di un sistema opera tivo o come pacchetto installabile Stack controller e LMP 2 1 Stack del protocollo Bluetooth Stack host e L2CAP e SDP 17 Link Manager Protocol LMP Serve per impostare e controllare il collegamento radio tra due dispositivi Logical Link Control and Adaptation Protocol L2CAP Serve per fare il multiplexing di pi connessioni logiche tra due dispositi vi che usano diversi protocolli di livello superiore permette segmentazione e riassemblamento dei pacchetti In Basic mode fornisce pacchetti con payload fino a 64KB e MTU di default a 672 byte e 48 byte di minimo obbligatorio In Retransmission and flow control mode pu essere configurato sia per dati isocroni sia per dati affidabili eseguendo ritrasmissione e CRC Sono state poi aggiunte due modalit che rendono obsoleta l ultima In Enhanced retransmission mode stata migliorata la modalit originale canale affidab
49. i attiver 2 Come funziona il Wiimote a2 19 00 Questo comportamento condiviso dai seguenti report e Modalit report dati 0x12 Abilitare la telecamera IR 0x13 Abilitare il microfono 0x14 Disattivare il microfono 0x19 Abilitare la telecamera IR 2 Ox1A Per quanto riguarda la vibrazione invece non abbiamo un tipo di report specifico in generale utilizzando il bit 0 possiamo attivarla o disattivarla da qualsiasi report output questo ad esempio la attiva a2 11 01 Informazioni comuni dei report input I primi due byte di tutti i report input eccetto 0x3d contengono i bottoni principali BB BB Questo include tutti i report di stato 0x2 non solo i report di dati 0x3x 0x3d un eccezione dato che restituisce soltanto informazioni di estensione 2 2 Report In questa sezione verranno illustrati i report utilizzati nel progetto per interfacciarsi con il Wiimote e ricevere i dati della telecamera IR 2 2 1 Status reporting 0x20 Status Per richiedere il report di stato bisogna mandare un qualsiasi messaggio che inizi con 0x15 2 2 Report 65 a2 15 00 Questo richiede un report di stato e disattiva la vibrazione In risposta avremo a1 20 BB BB LF 00 00 VV BB indica i dati relativi ai bottoni VV il livello di batteria LF una maschera di bit indicata nella tabella 2 3 Bit Maschera Significato 0x01 La batteria quasi scarica 0x02 Un
50. i thread necessari all esecuzione delle funzioni di callback linuxWiimoteLib py Questo modulo gestisce tutte le operazioni a basso livello della comuni cazione con il Wiimote le sue classi sono 4 Python whiteboard e Wiimote manda e riceve report permette la connessione del Wii mote l attivazione della telecamera IR e gestisce l esecuzione della funzione di callback e Parser comprende i report inviati dal Wiimote e restituisce oggetti ordinati con le informazioni ricevute e WiimoteState memorizza lo stato del Wiimote e lo tiene aggiornato thread py Un modulo minore estende il modulo QThread I thread utilizzati in python whiteboard si occupano delle seguenti azioni e la funzione di callback del Wiimote relativa alla ricezione dei dati IR e la connessione con il Wiimote e la gestione del cursore 4 2 Analisi dinamica L applicazione comprende tre fasi inizializzazione calibrazione lettura dati IR Inizializzazione Come si pu vedere dal diagramma in figura 4 2 l oggetto centrale di ti po MainWindow esso crea un oggetto di tipo Wiimote ed uno di tipo PBarDlg per visualizzare la barra di caricamento della connessione con il Wiimote vie ne quindi creato un thread apposito che si occupi della connessione Quando il Wiimote connesso viene distrutto l oggetto PBarDlg ed il thread crea to in precedenza attiva la telecamera IR per effettuare la calibrazione Nel frattempo stata
51. il numero di report output che il Wiimote notifica di aver ricevuto EE il codice di errore o il risultato della funzione 00 successo 03 errore 04 05 08 sconosciuto 2 2 2 Data reporting Il Wiimote ha varie modalit di data reporting Ognuna di questa moda lit combina certe funzionalit del nucleo con dati di periferiche esterne e li manda all host tramite uno dei report ID in base alla modalit La modalit di data reporting impostata mandando un comando di due byte al report 0x12 a2 12 TT MM Il bit 2 di TT specifica se si desidera un report continuo Se il bit 2 0x04 vale 1 il Wiimote mander report a prescindere se ci siano state o meno modifiche nei dati Al contrario normalmente il Wiimote manda i dati quando subiscono una modifica MM specifica la modalit di reporting Ogni modalit specificata dall ID di 2 2 Report 67 report output che viene inviato per esempio questo imposta la modalit a 0x33 a2 12 00 33 Da questo momento i dati arriveranno con lID 0x33 PID di default per i report 0x30 Qui sono riportati soltanto i report di interesse per il progetto ovvero il report che contiene i dati della telecamera IR per una trattazione completa consultare il sito wiibrew 25 0x33 Bottoni accelerometro e telecamera IR con 12 byte di dati Questa modalit restituisce dati dai bottoni dall accelerometro e dalla telecamera IR al 33 BB BB AA AA AA II II II II II I
52. ile In Streaming mode non c ritrasmissione o controllo del flusso canale inaf fidabile Service Discovery Protocol SDP Permette ad un dispositivo di trovare servizi offerti da altri dispositivi ed i loro parametri Permette anche all host di determinare quale profilo Bluetooth pu usare il dispositivo con cui sta cercando di connettersi 10 2 Bluetooth 2 2 Human Interface Device Profile HID Wiimote usa il profilo standard Bluetooth HID BT HID per co Profile Stack Profile Model i municare con l host il quale ba Host Application HID Application sato sullo standard USB HID 25 Software firmware La classe USB HID una parte della specifica USB per le perife e tr riche per computer essa specifica una classe di dispositivi che si in terfacciano con l uomo come ta stiere mouse controller per gioca re ecc 23 Bluetooth HID pro gettato per garantire un collega Human interface Device Transport bus ss USB PCI mento a bassa latenza e basso con sumo energetico 16 In figura 2 3 vediamo lo stack del profilo BT HID che mostra i livelli software che risiedono nell host master e Interface Link Manager nell HID slave HID funziona di rettamente sul protocollo L2CAP Melzo Radio enon usa altri protocolli Bluetooth oltre a LMP e SDP Nell esempio in PC Host figura 2 3 l host un PC e sul pro cessore sono eseguiti i livelli supe
53. in quelle coordinate stato registrato il tempo medio che passa tra un segnale ed il successivo per avere una stima di quanti segnali arrivano al secondo al processo Il risultato con un campione di 300 segnali di 0 009822 secondi che si tra duce in 101 81 segnali al secondo una frequenza approssimata di 102Hz La massima frequenza di report di dati per i device BT HID non dovrebbe su perare i 125Hz 11 Chiaramente questo numero basso rispetto ai segnali che il processo pu elaborare in un secondo infatti il tempo medio con un campione di 1000 segnali che python whiteboard impiega da quando arriva un segnale a quando il mouse viene spostato di 0 001167 secondi Il margine dunque molto ampio python whiteboard potrebbe elaborare i segnali di 9 Wiimote contemporaneamente senza congestionare lo stack di re te Bluetooth Questo dato non cos sorprendente tuttavia sappiamo che la latenza dei collegamenti via cavo USB di 1ms 22 i dispositivi Bluetooth HID non dovrebbero aggiungere pi di 10ms alla latenza dei collegamenti via cavo 11 Python whiteboard aggiunge 1 16ms alla latenza se sommia mo tutti i ritardi troviamo che dal momento in cui si accende il led sulla penna ad infrarossi al momento in cui viene spostato il mouse passano approssimativamente 12 16ms Altri due fattori da analizzare per testare le prestazioni di python whiteboard sono il consumo di CPU medio durante l elaborazione del segnale I
54. interpretati su Raspberry Pi si sar accorto che consumano troppo e di conseguenza non permettono un utilizzo fluido in alcuni casi risultano addirittura inutilizzabili Ecco perch stato realizzato lightboard un software derivato da python whiteboard da cui prende soltanto l interfaccia grafica lasciando il cuore dell elaborazione ad un motore ben pi veloce scritto in linguaggio C Precedenti lavori As of June 2008 Nintendo has sold nearly 30 million Wii game consoles This makes the Wii Remote one of the most common computer input devices in the world 111 iv INTRODUZIONE Cos scriveva Johnny Chung Lee nel suo sito web 14 quando inizi il suo viaggio per scoprire le potenzialit di uno tra i pi comuni dispositivi di input per computer Ispirandosi alle idee di J C Lee molti appassionati hanno scritto applicazioni e librerie in molti linguaggi di programmazione Nel gen naio 2011 un gruppo di programmatori docenti collaboratori accademici supportati dal Laboratorio Innovazione Tecnologica Supporto Apprendimen to LITSA dell Universit di Trento crea WiildOs un sistema operativo Open Source per lavagne multimediali interattive 1 Guida alla lettura Scopo di questa trattazione quello di fornire al lettore le basi teoriche per replicare l esperimento e o modificarlo nonch di mostrare il percorso che ha portato al conseguimento dell obiettivo prefissato Nel primo capito
55. ione invece il compilatore cerca di incre mentare le prestazioni del programma e o la dimensione del codice a costo di un maggior tempo di compilazione e della possibilit di fare debug del codice Il compilatore esegue ottimizzazioni basate sulle conoscenze che esso ha del programma Accendere i flag dell ottimizzazione possibile aggiungendo 0x al comando di compilazione dove x il livello di ottimizzazione voluto op pure specificando i flag delle singole ottimizzazioni 01 Con il livello 1 il compilatore cerca di ridurre la dimensione del codice ed il tempo di esecuzione senza nessuna ottimizzazione che comporta un aumento rilevante nel tempo di compilazione 02 Con il livello 2 gec esegue quasi tutte le ottimizzazioni supportate che non comportano un grosso compromesso spazio velocit Comparato al livello 1 questa opzione aumenta sia il tempo di compilazione sia le prestazioni del codice generato 03 Il livello 3 il massimo livello di ottimizzazione possibile con gec usando i flag standard 5 4 Ottimizzazione 41 Lightboard nella versione 0 1 utilizza il livello 2 per evitare instabilit nel programma Per una trattazione pi completa rifersi alla documentazione ufficiale 4 Capitolo 6 Risultati In questo capitolo saranno esposti i dati relativi alle analisi delle presta zioni di lightboard e successivamente messi in relazione con quelli visti nella sezione 4 1 Sull
56. ioni ag giuntive Parleremo pi avanti della funzione di callback di cui si pu trovare un esempio in wmdemo c all interno di cwiid una demo che utilizza la libreria libewiid 76 3 La libreria libcwiid 3 2 Analisi dinamica I diagrammi 3 2 3 3 3 4 indicano le tre fasi principali del funzionamento di libewiid quando viene utilizzato per leggere dati dalla telecamera IR 1 Vinizializzazione 2 l abilitazione dei segnali IR 3 la lettura dei segnali IR 3 2 1 Inizializzazione Interaction INIT control_channel Interrupt_channel Router thread status pipe Status thread 1 status_request lt 3 wii_forward 2 handshake 7 update_rpt mode A ES A A A Figura 3 2 Diagramma di sequenza inizializzazione libewiid In questa fase che inizia subito dopo la connessione viene richiesto lo stato del Wiimote che servir a popolare la struttura dati wiimote t che ve dremo in seguito per far questo il thread main deve scrivere sul canale di controllo I thread sono gi stati inizializzati la risposta alla richiesta dello stato infatti arriver sul canale di interrupt verr letta dal thread router che si occuper di analizzarla e mandare un messaggio sulla pipe di stato in modo che venga 3 2 Analisi dinamica 77 letto dal thread status e quindi elaborato Alla fine di questa fase il thread main si metter in attesa di un input dall utente 3 2 2 Abilitazione dei segnali IR interaction I
57. l Wiimo te distaccandosi cos da licwiid e implementare un interfaccia grafica personalizzata distaccandosi cos da python whiteboard 93 54 CONCLUSIONI e rendere lightboard un demone configurabile e pacchettizzare lightboard e fornire una procedura di installazione Lightboard Manuale e Documentazione Tecnica Versione 1 0 Giovanni Incammicia XV 2015 Giovanni Incammicia giovanni incammicia gmail com This work is licensed under the Creative Commons Attribution ShareAlike 4 0 International License To view a copy of this license visit http creativecommons org licenses by sa 4 0 Introduzione Scopo di questa trattazione quello di fornire un documento di veloce consultazione per comprendere il progetto ed il funzionamento del software Nel primo capitolo di questo documento vedremo come installare ed usare lightboard per creare una lavagna interattiva multimediale Il primo capitolo destinato all utente di lightboard Dal secondo capitolo la documentazione diventa pi tecnica e destinata agli sviluppatori che vogliono ampliare lightboard con nuove funzionalit o ren derlo pi accessibile Il secondo capitolo si concentrer sul funzionamento di basso livello del Wii mote di come ci si interfaccia ad esso e delle sue caratteristiche interne Il terzo capitolo dedicato a libcwiid la libreria C utilizzata in lightboard per comunicare con il Wiimote la sua struttura ed il suo
58. lo vedremo l infrastruttura generale del progetto ed il modo in cui lavorano i vari moduli Il secondo capitolo mostra le basi teoriche per poter comprendere il progetto dal punto di vista della comunicazione Bluetooth tra la macchina che esegue lightboard ed il Wiimote Il terzo capitolo fornisce una visione generale sul protocollo grafico X e sulle librerie grafiche utilizzate nel progetto Dal quarto capitolo inizia il lavoro effettuato su lightboard prima di tutto viene fatta un analisi delle prestazioni di python whiteboard al fine di indi viduare i punti deboli e quindi comprendere su cosa focalizzare l attenzione durante la realizzazione Il quinto capitolo dedicato proprio alla realizzazione allo studio ed alla spiegazione del funzionamento di python whiteboard e della libreria utilizza ta come driver del Wiimote libcwiid Il sesto capitolo contiene i dati dei benchmark effettuati su lightboard in alcune fasi della realizzazione infine li pone a confronto con i dati di python whiteboard In appendice A troviamo la guida utente e la documentazione tecnica que INTRODUZIONE st ultima indirizzata ai programmatori che vogliono modificare l applica zione Il codice utilizzato fornito con licenza GPL ed reperibile al seguente URL https github com GiovanniIncammicia lightboard Indice Introduzione 1 Infrastruttura 1 1 Funzionamento di Lightboard 1 2 Conversione coordinate
59. motivi di sicurezza A questi due casi ci si riferisce rispettivamente come bonding dedicato e bonding generale 5 2 3 Wiimote 13 2 3 Wiimote 2 3 1 Connettere il Wiimote Il Wiimote pu essere messo in discoverable mode premendo i bottoni 1 e 2 insieme In discoverable mode un numero di led da uno a quattro in base al livello di batteria iniziano a lampeggiare Durante l indagine da parte dell host verranno trovati tutti i Wiimote in discoverable mode Ora l host pu stabilire una connessione di banda base Bluetooth baseband non richiesto l appaiamento Dopo che una connessione di banda base Bluetooth stabilita con o senza appaiamento i canali HID possono essere aperti ed usati per leggere e scrivere report dal verso il Wiimote La banda base Bluetooth la parte del sistema che specifica o implementa l accesso al mezzo e le procedure di livello fisico tra dispositivi Bluetooth Si occupa delle specifiche della piconet tra il livello fisico radio e quello di collegamenti dati 6 Stabilire una connessione HID con il Wiimote pu essere fatto sul PSM 0x11 per il canale di controllo e sul PSM 0x13 per il canale dei dati utilizzando il protocollo L2CAP I PSM Protocol Service Multiplexer sono l analogo delle porte utilizzate nel TCP ma utilizzano i numeri dispari nel range 1 32767 8 Lo standard HID permette ai dispositivi di auto descriversi usando il report descrittore HID Questo report include u
60. n enumerazione di report che il dispositivo comprende I report sono unidirezionali ed il descrittore HID elenca per ogni porta la direzione input output ed il payload Come tutti i dispositivi BT HID il Wiimote manda il report descrittore quando richiesto tramite il protocollo SDP Comunque non riporta nessuna informazione riguardo i dati all interno dei report solo la lunghezza in byte rendendo cos inutile l utilizzo dei driver standard HID Un report di input mandato dal Wiimote all host un report di output mandato dall host al Wiimote I primi vengono letti sul canale dei dati che lo stesso sul quale vengono mandati i secondi Il canale di controllo pu 14 2 Bluetooth essere utilizzato con il Wiimote classico per i report di output 25 2 3 2 Latenza e prestazioni Il requisito di prestazione essenziale che BT HID garantisca una reatti vit ai cambiamenti in input simile a quella dei dispositivi cablati Le applicazioni ad alte prestazioni come i videogiochi richiedono un tempo di risposta dalla pressione del bottone o dal movimento del joystick nell ordi ne di una singola finestra video frame ovvero 16 7ms per un aggiornamento video a 60Hz L implementazione del collegamento Bluetooth dovrebbe aggiungere non pi di 5ms di latenza rispetto ad un implementazione cablata 11 Capitolo 3 X Window System Anche conosciuto come X11 X Window System un protocollo gra Us
61. nchmark 0 python whiteboard IR 45 6 3 Asus X53S Benchmark 1 lightboard IDLE 46 6 4 Asus X53S Benchmark 1 python whiteboard IDLE 46 6 5 Asus X53S Benchmark 2 lightboard IR 46 6 6 Asus X53S Benchmark 2 lightboard IDLE 47 6 7 Raspberry Pi Benchmark 0 lightboard IR 47 6 8 Raspberry Pi Benchmark 0 python whiteboard IR 47 6 9 Raspberry Pi Benchmark 1 lightboard IDLE 48 6 10 Raspberry Pi Benchmark 1 python whiteboard IDLE 48 6 11 Raspberry Pi Benchmark 2 lightboard IR 48 6 12 Raspberry Pi Benchmark 2 lightboard IDLE 48 6 13 Asus X53S Risultati Benchmark 0 IR 49 6 14 Asus X53S Risultati Benchmark 1 IDLE 49 6 15 Asus X53S Risultati Benchmark 2 50 6 16 Raspberry Pi Risultati Benchmark 0 50 6 17 Raspberry Pi Risultati Benchmark 1 50 6 18 Raspberry Pi Risultati Benchmark 2 50 xiii Capitolo 1 Infrastruttura Il Wii Remote Wiimote il principale controller per la console Nintendo Wii un dispositivo senza fili che usa la tecnologia standard Bluetooth per comunicare con la Wii costruito intorno ad un Broadcom BCM2042 System on chip Bluetooth 25 Una delle funzionalit principa li del Wiimote il rilevamento del movimento che permette all uten te di interagire e manipolare oggetti sa sullo schermo attraverso il
62. nno ad arrivare sul canale degli interrupt i mes saggi relativi ai dati IR raccolti dalla telecamera ad infrarossi del Wiimote Lettura dei segnali IR A questo punto il thread principale pu mettersi in attesa dell input da parte dell utente che servir a chiudere l applicazione il resto viene fatto dal thread router che ricever i segnali IR e li mander alla funzione di callback I dettagli relativi alla funzione di callback saranno spiegati in seguito mentre un analisi dettagliata della sequenza di operazioni qui introdotte verr fatta nella documentazione in Appendice A 5 2 Studio di python whiteboard 5 2 Studio di python whiteboard WiildOs WiildOs non un semplice programma per la gestione della tua lavagna interattiva multimediale ma un nuovo sistema operativo modulare semplice completo libero open source e gratuito 1 WiildOs costruito su Ubuntu selezionando software adatti all educazione ed all apprendimento tramite il computer e le LIM Esso utilizza python whiteboard un applicazione che permette di trasforma re ogni schermo proiettato in una LIM Per questo motivo abbiamo scelto python whiteboard come punto di partenza per il progetto analizzando i suoi punti di forza e le sue debolezze Python whiteboard Python whiteboard un software open source scritto in Python e svilup pato da Pere Negre compatibile con sistemi GNU Linux In questo capitolo faremo come nel c
63. nta allo schermo mentre la penna ad infrarossi si muove Durante la fase iniziale si effettua la calibrazione nella quale dovremo puntare la penna ad infrarossi in quattro punti agli angoli dello schermo questo serve al Wiimote per capire dove si trova rispetto allo schermo proiettato Da questo momento ogni movimento della penna verr individuato dal Wiimote ed il programma sull host si occuper di fare alcuni calcoli che vedremo in seguito per capire l effettiva posizione della penna sullo schermo Nel diagramma di deployment in figura 1 4 illustrata l infrastruttura del software La user interface interfaccia utente la stessa di python whiteboard riusa 1 Infrastruttura Host Bluetooth LJ Stack Bluetooth Config File R Wiimote data peo oO lt 3 FakeMouse interface Figura 1 4 Diagramma di deployment lightboard ta per permettere all utente di configurare il software senza dover interagire con il terminale Successivamente tutte le configurazioni e la calibrazione vengono salvate in un file chiamato lbconfig ini nella cartella ui stuff Dopo aver premuto il pulsante Activate entra in gioco l engine scritto in C il motore di elabo razione di lightboard Esso legge il file si connette al Wiimote ed inizia a ricevere ed elaborare i dati della telecamera IR muovendo il mouse grazie a XTest Extension un estensione minimale della pi famosa libreria XLib 1 2 Conversione co
64. o di transazione ed un parametro che dipende dal tipo 7 6 5 4 3 2 1 0 HIDP Message Type Figura 2 2 Header di un messaggio Le transazioni consistono di un payload di richiesta al dispositivo ad esso seguiranno in risposta dei dati o un messaggio di handshake Le richieste sono quelle indicate da GET o SET se la richiesta corretta se guir un pacchetto di tipo DATA seguito eventualmente da pacchetti di tipo DATC o un HANDSHAKE 62 2 Come funziona il Wiimote Hex Tipo di transazione Lunghezza payload byte 0 HANDSHAKE 1 1 HID_CONTROL 1 2 3 Reserved 4 GET_REPORT 1 4 5 SET_REPORT 1 payload report dati 6 GET_PROTOCOL 1 7 SET_PROTOCOL 1 8 GET_IDLE 1 9 SET_IDLE 2 A DATA 1 payload report dati B DATC 1 continuo payload report dati C F Reserved Tabella 2 1 Tipi di transazione supportati Sul canale di interrupt vengono trasmessi i pacchetti di tipo DATA e DATC gli altri utilizzano il canale di controllo Non vedremo i dettagli relativi ad ogni tipo di transazione per approfondi menti consultare la sezione 7 4 delle specifiche BT HID 11 2 1 2 Report del Wiimote Per convenzione mostreremo i pacchetti includendo tra parentesi il co mando HID seguito dall ID del report ed il payload come descritto nelle sezioni 7 3 e 7 4 delle specifiche BT HID 11 Ogni byte scritto in esadeci male omettendo lo 0x e separato da spazi Pr
65. ompleta riguardo i report del Wiimote si rimanda alla documentazione in Appendice A Integrazione con python whiteboard A questo punto ci si occupati dell integrazione dell interfaccia grafica di python whiteboard con la base del motore di elaborazione Python whiteboard si occupa di configurare il Wiimote mentre lightboard elabora i segnali IR e muove il cursore La problematica principale legata a questa fase stata quella di come far comunicare le due applicazioni Lasciando aperte entrambe le applicazioni e creando un canale di comunicazione tra i due si sarebbe ottenuto il massimo della flessibilit sarebbe stato possibile modificare le configurazioni a tempo di esecuzione tramite l interfaccia ed eseguirle in tempo reale su lightboard Questo per porta a conseguenze non conformi con le specifiche di progetto in particolare tenere aperte entrambe le applicazioni porterebbe ad un con sumo di RAM e CPU maggiore Anche modificando python whiteboard in modo che resti in attesa di una mo difica nelle impostazioni e non in attesa di un input IR python whiteboard consuma considerevolmente le risorse della macchina Un approccio del genere quindi non porterebbe a nessun vantaggio effet tivo rispetto all utilizzare soltanto python whiteboard La seconda idea 5 3 Lightboard 35 quella di scrivere tutte le configurazioni su di un file alla chiusura di python whiteboard e farle leggere a lightboard In questo c
66. on python whiteboard 51 In generale il miglioramento pi evidente stato nella fase di riposo del pro gramma il che porta ad avere un aumento di prestazioni particolarmente interessante nel caso della modalit di click L utilizzo scorrevole e senza evidenti ritardi non si notano grandi differenze rispetto all utilizzo su una macchina pi potente Conclusioni Abbiamo visto come sia possibile migliorare le prestazioni dei programmi attualmente utilizzati per creare lavagne multimediali interattive sostituen do il motore di elaborazione con uno scritto in C Lightboard permette di sperimentare l utilizzo di una LIM basata su Rasp berry Pi e Wiimote senza eccessivi cali prestazionali dovuti alle poche risorse del sistema Il lavoro fatto con lightboard ed i lavori successivi puntano a raggiungere prestazioni simili a quelle ottenute dalle LIM commerciali uti lizzando quantit sempre minori di risorse cos da permettere la creazione di sistemi integrati e facilmente installabili e facilitare l utilizzo di tecnologie open source nelle scuole italiane Sviluppi futuri Per ottenere queste prestazioni si sono dovuti fare alcuni compromessi che hanno escluso funzionalit a volte decisamente importanti Di seguito un elenco delle idee che potrebbero portare ad un evoluzione di lightboard e rendere lightboard compatibile con il Wiimote Plus e implementare una libreria personalizzata per comunicare con i
67. ordinate Vediamo ora come fa il software a tradurre le coordinate spaziali prese dalla telecamera del Wiimote in coordinate dello schermo Problema Marcare quattro punti su una superficie proiettata che corrispondono a quattro punti di un quadrato coordinate dello schermo 1 2 Conversione coordinate y Y u x Figura 1 5 Problema calibrazione Soluzione Nel nostro caso abbiamo i valori u e v e dobbiamo trovare x e y Vediamo adesso il procedimento formale in seguito vedremo come esso u x Figura 1 6 Soluzione calibrazione implementato in lightboard 1 1 1 Infrastruttura Dalle formule 1 1 e 1 2 otteniamo le seguenti Eseguendo i calcoli dalle formule 1 3 troviamo Usando i quattro angoli dello equazioni Uo Uy U2 U3 Vo VI U2 U3 STO OF FP FP Wi u3 0 0 0 0 Vo VI v2 U3 Rh e e e O O O LS schermo Uo0Xo U1T1 U2T2 U3TZ Uo0Xo UTI U2 2 U38 3 ad g x y w u v 1 b e h 1 2 c f 1 au bu c ur er 1 gu hv l 138 du ev f i OO 1 3b si guthv 1 x au bv c xgu chv 1 4a y du ev f ygu yhv 1 4b abbiamo il seguente sistema di Voto a Xo U T1 b QI V2T2 C v2 V3X3 d T3 1 5 VoXo Yo TUL f Yi V2 2 19 Y2 v323 h Y3 Nella sezione 5 3 3 vedremo un esempio pratico del calcolo 15 Per trovare u v partendo da x y bisogna trovar
68. ouse locali e mostra l output su uno schermo Un browser ed un emulatore di terminale sono eseguiti su una stazione di lavoro utente ed un emulatore di terminale eseguito su un computer remoto ma controllato e monitorato dalla macchina utente 3 1 XTest Extension Library Questa estensione un insieme minimale di estensioni per client e server per testare il server X11 senza intervento dell utente Descrizione Le funzioni fornite da questa estensione ricadono in due gruppi e Operazioni client queste applicazioni manipolano il comportamento lato client che altrimenti sarebbe nascosto e Richieste server queste richieste permettono di accedere a risorse del server altrimenti in sola lettura ad esempio il cursore associato ad una data finestra oppure permettono una sintesi limitata degli eventi dei dispositivi di input ad esempio muovere il dispositivo di puntamento o premere un bottone 10 3 2 Framework Qt 17 3 2 Framework Qt Qt cute un framework di applicazioni multi piattaforma I programmi creati con Qt possono avere un interfaccia grafica nativa in questo caso classificato come un widget toolkit Non per limitato alle interfacce grafiche anche usato per sviluppare programmi senza interfaccia grafica come strumenti a linea di comando e terminali per server 3 2 1 Concetti base di Qt e Astrazione completa dall interfaccia grafica quando stato rila sciato Qt usava
69. p wiibrew org wiki Wiimote Wiimote Library URL http wiibrew org wiki Wiimote_Driver X Window System URL http en wikipedia org wiki X_Window_ System
70. per interfacciarsi con il Wiimote contiene i seguenti strumenti e una libreria libewiid e un driver per utilizzare il Wiimote come un joystick wminput e un applicazione di test demo wmdemo e un interfaccia grafica per gestire i dati ricevuti dal Wiimote wmgui 26 La libreria gestita da pi thread il che la rende un API performante e modulare Dopo aver analizzato entrambe le librerie stata scelta libewiid per la presenza di numerose applicazioni di esempio che avrebbero reso pi scorrevole lo studio della libreria una rilevanza fondamentale nella scelta l hanno avuta anche la sua natura modulare ed il multi threading 5 1 1 Analisi statica Libewiid costituita di vari moduli qui li analizziamo brevemente ver ranno trattati approfonditamente nella documentazione in Appendice A Dal diagramma dei componenti in figura 5 1 vediamo che la libreria composta di numerosi moduli lightboard interagisce con ogni modulo di seguito vediamo per quali scopi e come 5 1 Studio di Cwiid 25 5 rte gt A p socket communicates with L bluetooth c wiimote t from Lightboard a O HT initializes dataType Y I Figura 5 1 Diagramma dei componenti di libewiid bluetooth c Questo modulo si occupa della connessione al Wiimote utilizzando il pro tocollo Bluetooth permette di cercare dei dispositivi e connettersi ad essi utilizza la libreria Blue
71. portanti per il programma Questa senza dubbio la struttura dati pi importante e centrale di tutta la libreria Capitolo 4 Python whiteboard Anche nel caso di python whiteboard faremo un analisi dinamica utiliz zando un diagramma di sequenza per mostrare il flusso di attivazione degli oggetti ed i messaggi scambiati Prima di questo sar necessaria un analisi statica delle classi pi impor tanti di python whiteboard C_ configuration sa pywhiteboard Q Figura 4 1 Struttura di python whiteboard 85 86 4 Python whiteboard Python whiteboard si divide in moduli ben specificati ogni modulo ha la sua funzione e le classi necessarie 4 1 Analisi statica pywhiteboard py Questo il modulo principale le sue classi sono e MainWindow questa la classe che gestisce la finestra principale del programma collegata ad un Wiimote ed in base al suo stato connesso calibrato attivo modifica l interfaccia grafica I suoi metodi permettono di gestire i profili e cambiare lo stato del Wiimote e AboutDlg la schermata di informazioni generali sul programma e PBarDlg la classe che gestisce la barra progressiva che permette di mostrare la connessione al Wiimote configuration py Questo modulo fornisce l interfaccia di configurazione dell applicazione contiene due classi e ConfigDialog la schermata di configurazione vera e propria permet te di accedere alle configurazioni
72. rocesso per la maggior parte sono librerie condivise e memoria condivisa con altri processi VIRT rappresenta la memoria a cui il programma pu accedere nel momento attuale RES RES indica la memoria residente una rappresentazione accurata di quanta memoria fisica attualmente consumata dal processo SHR SHR indica quale parte di VIRT utilizzata attualmente come memoria condivisa o per le librerie Nel secondo caso non significa necessariamente che l intera libreria residente Ad esempio se un programma usa solo alcune funzioni della libreria essa mappata interamente e sar calcolata in VIRT e SHR ma solo la parte della libreria contenente le funzioni utilizzate sar caricata e calcolata in RES 6 1 Benchmark su Asus X53S 45 CPU La percentuale di tempo del processore usato dal processo Command Il nome del comando che ha fatto partire il processo 20 6 1 1 Benchmark 0 Questo benchmark stato eseguito prima delle ottimizzazioni e raccoglie soltanto le prestazioni del programma durante la rilevazione dei segnali IR VIRT MB RES KB SHR KB CPU Command 502 55212 45684 7 6 usr bin X 176 2328 2088 3 8 ightboard 176 2328 2088 2 4 lightboard 176 2328 2088 0 9 ightboard Tabella 6 1 Asus X53S Benchmark 0 lightboard IR VIRT MB RES KB SHR KB CPU Command 796 94600 62644 45 3 py whiteboard
73. sor Renzo Davoli Le funzioni della piccola libreria s2argv consentono di elaborare l unica strin ga contenente tutti gli argomenti compreso quello di indice 0 in modo fles sibile comodo sicuro ed efficiente La libreria infatti gestisce argomenti contenenti spazi in modo simile alle shell fornisce il vettore argv nel formato 36 5 Analisi e realizzazione opportuno per le funzioni di libreria o tramite la execs provvede diret tamente a richiamare la system call ed evitare che i programmatori usino scorrettamente le funzioni system o popen o eseguano sh c 9 5 3 3 Xtest ed elaborazione del segnale IR A questo punto resta soltanto da interpretare i segnali IR in base ai dati di calibrazione e muovere il cursore di conseguenza Calibrazione La schermata di calibrazione di python whiteboard indica i punti ai quat tro angoli dello schermo situati a queste coordinate 40 40 rx 40 40 rx 40 ry 40 40 ry 40 Dove rx la risoluzione orizzontale e ry la risoluzione verticale dello scher mo utilizzato Una volta che si sono memorizzati i dati relativi ai quattro punti si eseguono queste operazioni 1 si crea la matrice A 2 si crea la matrice x 3 si calcola il risultato del sistema di equazioni dato dalle due matrici 4 si memorizzano i dati Le coordinate del Wiimote rientrano nel range 0 1024 per la coordinata orizzontale e 0 768 per quella verticale Di seguito un esempio di coordina
74. spositivo ed alla finestra di configurazione inoltre viene creata la finestra di connessione e successivamente viene creato l oggetto del modulo linuxWii moteLib py e la funzione di callback dei segnali IR Questa funzione non la stessa che verr utilizzata nella fase tre per la rile vazione dei segnali IR serve soltanto al processo di calibrazione e funziona in modo diverso Calibrazione In questa fase viene aperta la schermata di calibrazione e la funzione di callback si occuper di rilevare i segnali IR fino al completamento della procedura una volta registrati i quattro punti il Wiimote viene calibrato e vengono fatti i calcoli matriciali anticipati nel capitolo sull infrastruttura Lettura dei segnali IR Alla fine della calibrazione verr creato un oggetto di tipo FakeCursor che si occuper di creare la nuova funzione di callback e di creare un thread che si occupi di gestire il click del mouse 5 3 Lightboard 5 3 1 wmdemo c Wmdemo c un programma contenuto in cwiid che serve ad illustrare le funzionalit del pacchetto 5 3 Lightboard 33 Una volta fatto partire il programma ci si trover davanti ad un men a linea di comando le azioni disponibili sono e accendere spegnere i led e attivare disattivare la vibrazione e attivare disattivare il report dei dati dell accelerometro e attivare disattivare il report dei dati dei bottoni e attivare disattivare il report delle estensioni e attiv
75. t a basso consumo La telecamera IR ha un campo visivo effettivo di circa 33 gradi orizzontali e 22 gradi verticali Riesce a rilevare sorgenti da 940nm con approssimativa mente il doppio dell intensit rispetto a sorgenti da 850nm 2 3 1 Imizializzazione La seguente procedura attiva la telecamera IR 1 abilitare la telecamera IR Manda 0x04 al report output 0x13 2 abilitare la telecamera IR 2 Manda 0x04 al report output 0x1A 3 scrivere 0x08 nel registro 0xB00030 4 scrivere il blocco di sensibilit 1 nel registro 0xB00000 5 scrivere il blocco di sensibilit 2 nel registro 0xB0001A 6 scrivere il numero della modalit nel registro 0xB00033 7 scrivere 0x08 nel registro 0xB00030 di nuovo Dopo questi passaggi il Wiimote si trover in uno di questi tre stati e la telecamera non sta memorizzando dati 70 2 Come funziona il Wiimote e la telecamera memorizza dati a met della sensibilit e la telecamera memorizza dati a piena sensibilit La scelta dello stato sembra essere puramente casuale Ripetere la procedura finch non ci si trova nello stato desiderato Per evitare la scelta casuale dello stato inserire un ritardo di 50ms tra ogni singola trasmissione Impostazioni di sensibilit La sensibilit controllata da due blocchi di configurazione lunghi nove e due byte rispettivamente Le impostazioni nella tabella 2 5 sono note e funzionanti Blocco 1 Blocco 2
76. te valide wii 57 511 712 368 752 8 31 21 screen 40 40 1326 40 1326 728 40 728 Per ogni coppia di coordinate si creano due righe nella matrice A 8x8 in questo modo 5 3 Lightboard 37 riga 1 wiilil 0 wii i 1 1 0 O 0 screen i 0 wii i 0 screen i 0 wiilil 1 C0 0 O Mit OT wii i 1 1 screen i 1 wii i 0 screen i 1 wii i 1 riga 2 Inoltre per ogni coppia di coordinate si creano due righe nella matrice x in questo modo riga 1 screen i 0 gt riga 2 screen i 1 Nel nostro esempio la matrice A con i calcoli esplicitati 57 511 1 0 0 0 40x57 40 511 0 O 0 57 511 1 40 57 40 x 511 712 368 1 0 0 0 1326 x 712 1326 x 368 0 0 0 712 368 1 40x712 40 368 5 1 152 8 1 0 0 0 1326 x752 1326 8 0 0 0 752 8 1 728 x752 728 8 31 21 1 0 0 0 40 31 40 x 21 0 0 0 31 21 1 728x31 728 x 21 Mentre la matrice x 40 40 1326 40 1326 a 728 40 728 38 5 Analisi e realizzazione Risolvendo il sistema di equazioni dato dalle due matrici 5 1 e 5 2 nella forma Ax h otteniamo una matrice 1x8 con i seguenti risultati 1 2256 0 0740 2 8908 0 3140 1 3729 754 4122 0 0004 0 0002 5 3 Questi risultati vengono memorizzati in otto variabili e salvati nel file di configurazione che sar passato all engine L engine eseguir questi
77. terminare il tipo di estensione in caso contrario si salta questo passaggio Non si analizzer questa fase in quanto non di interesse per il progetto Non sono infatti necessarie estensioni e molte di esse hanno un utilita solo quando il Wiimote stesso ad essere utilizzato direttamente dall utente non quindi nel caso di lightboard o di python whiteboard Dopodich viene effettuato l aggiornamento dello stato come nel caso del thread router e se richiesto l aggiornamento della modalit di report qui che viene abilitata o disabilitata la telecamera IR Infine se specificato si pu mandare un messaggio al thread mesg_callback in modo da poter riportare in output lo stato 3 3 Strutture dati Le strutture dati utilizzate dalla libreria libewiid si trovano nei file cwiid h e cwiid_internals h Nel file cwiid h sono presenti quelle strutture dati che servono a contenere i messaggi e gli stati inviati dal Wiimote in cwiid_internals h ci sono invece le strutture dati che servono alla libreria per le sue funzioni interne In entrambi i file sono definite le costanti le union e le funzioni utilizzate nella libreria 82 3 La libreria libcwiid 3 3 1 cwiid h In questo file le strutture interessanti sono due la prima riguarda i dati IR e la seconda riguarda lo stato struct cwiid_ir_src char valid uint16_t pos 2 int8_t size Il campo size corrisponde ad una costante CWIID_IR_SRC_COUNT che val
78. tooth standard e lo stack bluez connect c Questo modulo si occupa della connessione al Wiimote a livello di proces so dopo essersi connessi utilizzando il protocollo Bluetooth bisogna creare i canali di comunicazione socket sui PSM 0x11 e 0x13 come visto nella sezio ne 2 3 1 Permette inoltre di creare ed inizializzare la struttura wiimote_t che conterr tutte le informazioni relative al Wiimote connesso 26 5 Analisi e realizzazione command c Questo modulo si occupa di parlare direttamente al Wiimote permet tendo cos all applicazione di specificare i comandi da dare al dispositivo tra i comandi principali troviamo la richiesta dello stato del Wiimote e l impostazione delle modalit di report state c Questo modulo permette di aggiornare lo stato in modo da tener traccia di tutte le impostazioni del Wiimote di quelle di inizializzazione e di quelle date dall applicazione tramite il modulo command c salvando il tutto nella struttura wiimote_t interface c Questo modulo fornisce all applicazione l interfaccia per elaborare i mes saggi ricevuti dal Wiimote permette di abilitare e disabilitare l elaborazione dei messaggi nonch di impostare la funzione di callback che si occupa di elaborare tali messaggi thread c Questo modulo definisce i thread che andranno a costituire l infrastrut tura finale del programma i thread utilizzati sono tre escludendo il main e thread router
79. tramite un interfaccia grafica intuitiva e Configuration implementata secondo il pattern singleton questa classe contiene la configurazione corrente dell applicazione e permette di leggere e scrivere valori calibration py Questo modulo si occupa di gestire la calibrazione del Wiimote le sue classi sono 4 1 Analisi statica 87 e CalibrateDialog questa la schermata principale di calibrazione gestisce i punti agli angoli dello schermo e la possibilit di avvicinarli o allontanarli e SmallScreen questa piccola finestra si trova al centro della schermata di calibrazione e permette di vedere la posizione effettiva del punto luminoso nello schermo della telecamera IR e SandClock si occupa dell animazione di completamento dei punti agli angoli dello schermo cursor py Questo modulo contiene le classi necessarie al movimento ed al click del cursore sullo schermo utilizza la libreria X e le sue classi sono e FakeCursor il cursore vero e proprio gestisce il movimento e la funzione di callback del Wiimote e Click la funzione che permette il click del cursore viene istanziata da FakeCursor all occorrenza wiimote py Contiene un unica classe Wiimote ed l unico punto di accesso alle informazioni sul dispositivo permette di impostare una funzione di callback calcolare i dati di calibrazione e salvarli nell oggetto recuperare informazioni sullo stato del Wiimote e creare
80. uesta impostazione permet te di selezionare il primo Wiimote disponibile e connettersi automati camente ad esso in caso contrario verranno mostrati tutti i Wiimote rilevati durante la fase di ricerca e si potr scegliere quale connettere e Do calibration after connection questa impostazione permette di ese guire automaticamente la calibrazione subito dopo la connessione in caso contrario sar possibile calibrare premendo il bottone Calibrate nella schermata principale e Ir sensitivity questa impostazione disattivata nella versione 0 1 del software 1 3 Configurazioni 57 python whiteboard File Help Connect General options amp Don t wait for devices Pick the first one Hide settings z Y Do calibration after connection Profile IR Sensitivity 6 default Wiimote Battery level I 0 Utilization 0 Mouse Control Move Only Figura 1 1 Screenshot interfaccia di lightboard e Move only questa casella di controllo permette di specificare se utiliz zare la penna ad infrarossi come un puntatore spostando quindi il cur sore nel punto rilevato dalla telecamera IR o se usarla come sostituto del mouse effettuando un click sinistro nella posizione rilevata e Profile i profili permettono di salvare impostazioni personalizzate per un uso futuro Capitolo 2 Come funziona il Wiimote In questa sezione spiegheremo il funzionamento del Wiimote e come in terfacciarsi con esso Il
Download Pdf Manuals
Related Search
Related Contents
Toshiba Tecra M10-0L5 Liquiphant T FTL20 Istruzioni per l`uso - GEIGER Antriebstechnik Sanyo VCC-3912 User's Manual 10月7日の作業のお知らせ(PDF形式, 531.11KB) bedienungsanleitung bs-20usb endoskop JET SWIM ELEGANCE 70 INSTALLATION AND USER GUIDE Copyright © All rights reserved.
Failed to retrieve file