Introduzione step by step all'ambiente di sviluppo per gli smart glasses Epson Moverio BT-200. Presentazione realizzata da Niccolò Mangiarotti in occasione dell'hackathon del 17 ottobre in H-Farm.
4. 01
Creiamo un nuovo Android Application Project.
Sui Moverio BT-200 è montato Android 4.0.3 IceCreamSandwich;
impostare quindi correttamente il Minimum Required SDK ed il Target
SDK.
www.joinpad.net
5. 02
Una volta creato il progetto per includere l’SDK Moverio è
sufficiente copiare la libreria BT200Ctrl.jar nella cartella libs…
www.joinpad.net
6. www.joinpad.net
03
…ed aggiungere al manifest la permission per modificare le
impostazioni audio del device (nel caso si intenda utilizzare l’API
per la gestione dell’audio).
7. www.joinpad.net
Eseguire un deploy del nostro progetto Hello World sui Moverio BT-
200 non è un’operazione differente da un normale deploy di un
progetto android su di un normale device
04
9. 06
Passiamo ora all’utilizzo dell’SDK Moverio partendo dall’API più
interessante, il Display 2D/3D Switching, mediante la quale è
possibile implementare la visione stereoscopica.
Display 2D/3D Switching
Class :DisplayControl
Function :setMode
Summary :Switch BT-200 display mode
Prototype :int setMode(int displayMode,boolean toast)
Argument :Display Mode Number DISPLAY_MODE_2D,
DISPLAY_MODE_3D
toast true(Display), false(not display)
Return Value:result 0(success), other(error value)
www.joinpad.net
10. 07
Possiamo provare velocemente il funzionamento di questa API
impostando la visione 3D immediatamente.
www.joinpad.net
Come è possibile notare come risultato di questa operazione la
nostra area di lavoro è ora estesa su entrambe le lenti invece di
essere riprodotta in mirroring.
11. www.joinpad.net
08
In questo esempio la visualizzazione è ovviamente disturbata,
infatti sull’occhio sinistro vedremo il nostro testo Hello World e
l’actionbar con il titolo del’app mentre sull’occhio destro vediamo
una actionbar vuota ed uno sfondo bianco.
Questo ci da però l’idea di come gestiremo il 3D: semplicemente la
nostra view dovrà essere divisa verticalmente in 2 metà, ciascuna
delle quali corrisponderà ad un occhio.
12. www.joinpad.net
09
Proviamo ora a modificare il nostro esempio per utilizzare
correttamente questa feature, come prima cosa dividiamo la nostra
view in 2 metà di uguale dimensione.
13. www.joinpad.net
10
Proviamo ora a modificare il nostro esempio per utilizzare
correttamente questa feature, come prima cosa dividiamo la nostra
view in 2 metà di uguale dimensione.
14. 11
Modifichiamo ora il nostro layout.
www.joinpad.net
• Rimuoviamo l’actionbar dell’app modificando il manifest
• Rimuoviamo il menu di sistema
• Impostiamo uno sfondo trasparente (corrispondente al colore
NERO per i Moverio BT-200)
15. www.joinpad.net
12
• Aggiungiamo un semplice asset centrandolo in entrambe le
metà della nostra root view
16. 13
Effettuando il deploy dell’app il risultato sarà questo:
www.joinpad.net
17. 14
Si nota subito come il nostro asset sia stato “stretcchato”, ne
riduciamo quindi la larghezza della metà per riprodurre l’aspect
ratio originale:
www.joinpad.net
19. www.joinpad.net
16
…ed applicandole ai nostri due widget possiamo simulare un
effetto di avvicinamento/allontanamento in stereoscopia del nostro
asset:
20. www.joinpad.net
17
È possibile ottenere la stereoscopia anche utilizzando immagini
fotografate in stereoscopia cosi come video o ambienti
tridimensionali.
21. www.joinpad.net
18
È possibile ottenere la stereoscopia anche utilizzando immagini
fotografate in stereoscopia cosi come video o ambienti
tridimensionali.
22. www.joinpad.net
19
È possibile ottenere la stereoscopia anche utilizzando immagini
fotografate in stereoscopia cosi come video o ambienti
tridimensionali.
24. 21
Passiamo ora all’API di switch dei sensori che permette di abiitare
alternativamente i sensori di movimento dell’HeadSet e del
Controller
Switch sensor (Controller/Headset)
Class :SensorControl
Function :setMode
Summary :Switch BT-200 sensor mode
Prototype :int setMode(int sensorMode)
Argument :Sensor Mode Number
SENSOR_MODE_CONTROLLER(Controller),
SENSOR_MODE_HEADSET(Headset)
Return Value:result 0(success), other(error value)
www.joinpad.net
26. www.joinpad.net
23
Mediante una semplice Activity configurata per la gestione dei
sensori è possibile verificare con un semplice output a video come
abilitando i sensori dell’HeadSet o del Controller il vettore di
rotazione si modifica muovendo uno oppure l’altro device
28. 25
Le successive API permettono di controllare componenti dei
Moverio BT-200 quali la luminosità, l’accensione/spegnimento del
display e l’accensione/spegnimento dell’audio del device
Il funzionameto di queste API è molto semplice ed essenziale
www.joinpad.net
29. 26
L’API di accensione/spegnimento del’audio del device
Set ON/OFF for Audio Mute
Class :AudioControl
Function :setMute
Summary :Set BT-200 Audio mute ON/OFF
Prototype :int setMute(boolean mute)
Argument :mute ON(TRUE), OFF(FALSE)
Return Value:result 0(success), other(error value)
www.joinpad.net
31. 28
L’API di accensione/spegnimento del display
Class :DisplayControl
Function :setMute
Summary :Set BT-200 display mute ON/OFF
Prototype :int setMute(boolean mute)
Argument :mute ON(TRUE), OFF(FALSE)
Return Value:result 0(success), other(error value)
www.joinpad.net
32. www.joinpad.net
29
Anche in questo caso l’implementazione è molto semplice, il
componente che espone questa api è il DisplayControl, lo stesso
che abbiamo già utilizzato per eseguire lo switch 2D/3D
33. 30
L’API di settaggio del livello di luminosità del display
Setting Display Brightness
Class :DisplayControl
Function :setBacklight
Summary :Set BT-200 display brightness
Prototype :int setBacklight(int backlight)
Argument :Display Brightness 0-20
Return Value:result 0(success), other(error value)
www.joinpad.net
34. www.joinpad.net
31
In questo caso dato che è possibile impostare un set di valori (da 0
a 20) invece di un toggle utilizzeremo un seekbar
35. www.joinpad.net
32
L’API di lettura del livello di luminosità del display
Getting Display Brightness
Class :DisplayControl
Function :getBacklight
Summary :Get BT-200 display brightness value
Prototype :int getBacklight()
Argument :none
Return Value:Brightness value 0-20(success), other(error value)