30 gennaio 2018

Android 7.x Nougat su UDOO Dual/Quad e Neo

lo scorso anno insieme al team di sviluppo di UDOO ci siamo coordinati per iniziare il porting di Android 7.x Nougat per le board Dual/Quad e Neo.
Per vari impegni prioritari però, ci abbiamo potuto dedicare meno tempo durante i mesi ed alcuni punti sono rimasti in sospeso, ora che ho nuovamente un po' di tempo da dedicare mi piacerebbe ultimare i lavori con l'aiuto di chiunque abbia voglia di partecipare.

Cosa funziona:

  • WiFi
  • Touchscreen 7''
  • Touchscreen 15''
  • Audio via HDMI
  • Permessi di root
  • TWRP Recovery
  • Disabilitato verity
  • "Disabilitato" SELinux (impostato su permissivo)

Cosa c'è da sistemare/verificare:

  • Bluetooth
  • Audio IN/OUT AC97
  • OTG
  • Bossac
  • Mount periferiche UMS/SATA
  • Camera (e l'autofocus)
  • Open GAPPS

Informazioni tecniche dell'attuale workspace:

  • Versione Android: android-7.1.2_r36 (Build N2G48H)
  • Versione Kernel: 4.1.35
  • Versione U-BOOT: 2015.04
  • Versione del BSP utilizzato: android_N7.1.1_1.0.0

Attualmente è disponibile il BSP aggiornato, android_N7.1.2_2.0.0, ma bisognerebbe fare il porting del nuovo Kernel 4.9 e l'implementazione di tutto il nuovo HAL.

Ci sarebbe anche il BSP per Android 8.x Oreo ma ancora non ho avuto modo di guardarci e se non sbaglio supporta solo le board i.MX 8MQuad, vedi https://www.nxp.com/support/develop...oftware-and-development-tool-resources:IMX_SW

Tutti i sorgenti sono disponibili qui mentre qui c'è il manifest con le istruzioni su come scaricare l'intero workspace.

Un grazie in anticipo a chi vorrà partecipare.


11 gennaio 2018

RetroPie Box con XBOX

Era da un po' di tempo che pensavo di riutilizzarla per farci qualcosa ed alla fine l'idea che ha prevalso è stata quella di farci una bella RetroPie box per poter tornare a divertirmi con gli storici giochi da sala giochi, Sega Master System, Super Nintendo, Play Station ed altri, che hanno fatto parte della mia infanzia.

Ho iniziato con lo smontare la XBOX in modo da tenere solamente cinque componenti fondamentali:
  1. Il case di plastica nella sua parte superiore e inferiore e da quella inferiore ho rimosso tutto il laminato che la circondava. 
  2. Le 6 viti lunghe utilizzate per la chiusura del case. 
  3. La parte frontale dello sportello del lettore CD. 
  4. Il pannello frontale che contiene il pulsante di accensione/spegnimento, quello dell’apertura dello sportello del lettore CD ed i due LED di notifica. 
  5. Il connettore della 220V rimosso dalla scheda dell’alimentazione interna (questo per intenderci) 

Componenti che ho utilizzato:
  • RaspberryPi 3 
  • MicroSD 32 GB (classe 10) 
  • 4 cavi USB Maschio/Maschio (eBay
  • 4 connettori USB Femmina/Femmina (eBay
  • 1 Cavo HDMI Maschio/Femmina (eBay
  • 1 Cavo RJ45 Maschio/Femmina (eBay
  • 1 Alimentatore 220V → 5V 2A 
  • Saldatore, un po’ di filo elettrico per bassa tensione 
  • Colla a caldo

Il montaggio dei componenti è davvero semplice, i quattro connettori USB vanno sistemati dove prima c’erano le rispettive quattro porte dei game pad, il connettore RJ45 dove c’era quello della board originale della XBOX, quello HDMI dove prima c’era il connettore TV out ed infine quello per l’alimentazione sostanzialmente torna al suo posto originario.



La parte che forse ha richiesto un po’ più di tempo per la messa a punto è la scheda logica che ho leggermente modificato per avere i due led bicolore sempre accesi sul colore verde quando la RetroPie box sarà accesa ed il tasto di alimentazione che accenderà e spegnerà il RaspberryPi.

Ecco lo schema:
Con un filo ho pontato i due piedini centrali (negativo) dei due LED e con un altro filo i due esterni (positivo) che accendono il colore verde.
Dai due piedini esterni del pulsante di accensione ho saldato due fili che poi andranno collegati alla porta GPIO, pin 5 (+) e pin 6 (-) del RaspberryPi.
Ora, per poter far accendere e spegnere il RaspberryPi bisogna creare un piccolo script in Python che controlli gli eventi sui pin occupati dal pulsante, ma prima ho dovuto installare i pacchetti necessari:

$ sudo apt-get install python-dev python-dev gcc python-pip

Dopodiché va installato il pacchetto RPi.GPIO che è un modulo Python per il controllo della porta GPIO:

$ wget https://pypi.python.org/packages/e2/58/6e1b775606da6439fa3fd1550e7f714ac62aa75e162eed29dbec684ecb3e/RPi.GPIO-0.6.3.tar.gz
$ tar xvfz RPi.GPIO-0.6.3.tar.gz
$ cd  RPi.GPIO-0.6.3
$ sudo python3 setup.py install

Dopo aver installato il modulo ho creato lo script:

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import subprocess

# we will use the pin numbering to match the pins on the Pi, instead of the 
# GPIO pin outs (makes it easier to keep track of things)
GPIO.setmode(GPIO.BOARD)  

# use the same pin that is used for the reset button (one button to rule them all!)
GPIO.setup(5, GPIO.IN, pull_up_down = GPIO.PUD_UP)  

oldButtonState1 = True

while True:
    #grab the current button state
    buttonState1 = GPIO.input(5)

    # check to see if button has been pushed
    if buttonState1 != oldButtonState1 and buttonState1 == False:
      subprocess.call("shutdown -h now", shell=True, 
        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
      oldButtonState1 = buttonState1

    time.sleep(.1)

L'ho chiamato shutdown.py e copiato in /usr/local/bin.

Infine, per farlo avviare automaticamente al boot l'ho inserito in rc.local;

$ sudo nano /etc/rc.local

ed ho inserito la riga:

sudo python /usr/local/bin/shutdown.py &

Questo è il risultato dei due LED accesi sul verde quando la RetroPie box è accesa:


Per finire non ho fatto altro che abilitare il server FTP su RetroPie in modo da poter caricare le ROM e gli eventuali BIOS tranquillamente da remoto, oppure, nella quarta porta USB posso inserire qualsiasi dispositivo UMS compatibile dove ho precedentemente copiato i files necessari.

- Fonte per l'idea del pulsante On/Off