Sony Ericsson T630 e Linux via IrDA English

Indice

Le informazioni in questo documento si applicano ai telefonini Sony Ericsson T610 e T630; vi sono anche informazioni che possono tornare utili per altri modelli. Ho deciso di scriverlo perché ho avuto non pochi problemi per far funzionare il telefonino con Linux e soprattutto per trovare sul web della documentazione completa; ovviamente, ora che tutto funziona ne trovo a tonnellate... Contattami liberamente per chiarimenti, correzioni, segnalazione di altri link o programmi.

Configurazione del sistema

Le informazioni nei box verdi sono solo per (alcuni) laptop Toshiba.

Impostare IrDA

Per prima cosa occorre disabilitare qualsiasi porta seriale con setserial /dev/ttySx uart none; visto che su questo portatile non ho porte seriali non sono sicuro se sia davvero necessario, ma per sicurezza lo dico :P Questo perché il chip IrDA e i controller seriali potrebbero condividere indirizzi di memoria e quindi andare in conflitto.

È necessario il supporto per il controller IrDA e per IrCOMM nel kernel; queste opzioni si trovano, all'interno del menu di configurazione del kernel, in Device Drivers -> Networking support -> IrDA (infrared) subsystem support. Se il controller è sconosciuto lo si può identificare con findchip -v (incluso nelle IrDA-utils).

Se il chip è un SMC sarà necessario attivarlo tramite un software, visto che il BIOS non se ne occupa. Lo si può scaricare da http://www.janerob.com/rob/ts5100/irda.html o http://libxg.free.fr/irda/lib-irda.html. Bisogna lanciare il programma ad ogni reboot prima di caricare il modulo; affronteremo più sotto la sua configurazione.

Ora si possono caricare i moduli e impostare la connessione IrCOMM:

modprobe smsc-ircc2
modprobe ircomm-tty
irattach irda0 -s

Naturalmente, occorre usare il modulo adeguato al posto di smsc-ircc2.

Ora si dovrebbe vedere l'interfaccia irda0 tramite ifconfig, nonché vari device ircomm# in /dev.

irda0     Link encap:IrLAP  HWaddr 30:3a:30:38  
          UP RUNNING NOARP  MTU:2048  Metric:1
          RX packets:0 errors:238 dropped:238 overruns:0 frame:0
          TX packets:240 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:8 
          RX bytes:0 (0.0 b)  TX bytes:7446 (7.2 KiB)
          Interrupt:3 Base address:0x130 

Si può verificare se IrDA funziona con irdadump, che intercetterà tutti i pacchetti sull'interfaccia. Si dovrebbero leggere alcune righe riguardo il proprio computer, che informa gli altri dispositivi della sua presenza.

01:21:33.405394 xid:cmd 2ce874b7 > ffffffff S=6 s=0 (14) 
01:21:33.495375 xid:cmd 2ce874b7 > ffffffff S=6 s=1 (14) 
01:21:33.585363 xid:cmd 2ce874b7 > ffffffff S=6 s=2 (14) 
01:21:33.675348 xid:cmd 2ce874b7 > ffffffff S=6 s=3 (14) 
01:21:33.765337 xid:cmd 2ce874b7 > ffffffff S=6 s=4 (14) 
01:21:33.855319 xid:cmd 2ce874b7 > ffffffff S=6 s=5 (14) 
01:21:33.945309 xid:cmd 2ce874b7 > ffffffff S=6 s=* flyback hint=0400 [ Computer ] (23) 

Quando poi verrà attivata la porta IrDA del telefonino si dovrebbero vedere anche i suoi pacchetti, del tipo:

06:41:42.185505 xid:rsp 62f9eab1 < 4b51d3a2 S=6 s=0 T630-T628 hint=9124 [ PnP Modem IrCOMM IrOBEX ] (26) 

Ora l'ultimo passaggio. A causa di un bug nel T630 (e nel T610) bisogna eseguire echo 1 > /proc/sys/net/irda/max_tx_window per ridurre la finestra di trasmissione. C'è chi suggerisce di modificare anche max_baud_rate a 115200 e max_tx_data_size a 2000, ma personalmente non sembra che mi servano.

Ora dovrebbe funzionare! Andando all'ultima sezione si possono provare alcuni programmi per controllare se tutto è a posto, per poi procedere agli ultimi passi della configurazione, ossia memorizzarla.

Salvare le impostazioni

Ovviamente i passi finora esposti dovrebbero essere eseguiti ad ogni reboot, il che non è decisamente desiderabile. Per automatizzare la procedura su un sistema Debian è sufficiente fare come segue (su altre distribuzioni potrebbero esserci delle differenze).

Innanzitutto occorre configurare i moduli, aprendo /etc/modprobe.d/irda col proprio editor di testo preferito e aggiungendo le linee

alias irda0 smsc-ircc2
install smsc-ircc2 /sbin/modprobe --ignore-install smsc-ircc2; \
/sbin/modprobe ircomm-tty; echo 1 > /proc/sys/net/irda/max_tx_window

usando, come sempre, il proprio modulo al posto di smsc-ircc2.

La seconda linea va modificata in
install smsc-ircc2 /usr/local/sbin/smcinit; /sbin/modprobe --ignore-install smsc-ircc2;\
/sbin/modprobe ircomm-tty; echo 1 > /proc/sys/net/irda/max_tx_window
per caricare automaticamente il programma di attivazione del chip prima di inserire il modulo. Attenzione ad utilizzare il path corretto del programma!

Infine, si deve configurare irda-utils. In Debian si può fare con dpkg-reconfigure irda-utils, impostando solo irda0 come device seriale (non /dev/irda0), attivando il "discovery mode" e scegliendo se lanciare il tutto all'avvio del sistema. Personalmente preferisco evitare quest'ultima opzione in modo da risparmiare batteria, visto che tanto basta un irattach irda0 per caricare i moduli (grazie all'alias impostato), IrCOMM e il resto.

Il software

Con questi programmi è possibile:

AGGIORNAMENTO: Ho scoperto che si può navigare nel filesystem del telefonino, o almeno in alcune sue parti. I dettagli giusto qui sotto nella sezione su obexftp.

Programmi generici

Ci sono molti programmi per telefonini che supportano i comandi AT e lo standard OBEX.

OpenOBEX tools
Il pacchetto Debian è openobex-apps.
Vi si trovano:
irxfer
con irxfer filename si effettua l'upload di un file, con irxfer ci si mette in ascolto per riceverne
obex_test
shell interattiva. Con c ci si connette al telefonino, con g filename si preleva un file (salvato poi in /tmp), con p filename si invia un file, con d ci si disconnette, con q si esce. Ci sono altri comandi che uso raramente, si possono trovare facilmente provando le altre lettere.
obex_tcp, irobex_palm3
mai provati
Per trasferire file si può anche usare ircp (pacchetto Debian omonimo).

AGGIORNAMENTO obexftp mi funziona! (in parte)
Ecco i dettagli.
  • obexftp -i -l mostra il contenuto della directory root del telefonino, ossia le sottodirectory Immagini, Suoni e Motivi (i nomi possono ovviamente cambiare a seconda della lingua del telefonino).
    ale@flyback~ obexftp -i -l
    No custom transport
    Connecting...done
    Receiving (null)... <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd">
    <!--
    Generated by XML Coder.
    xml_coder.c (Nov 26 2003 15:17:42)
    (C) 2001 Sony Ericsson Mobile Communications AB, Lund, Sweden
    -->
    <folder-listing version="1.0"><folder name="Immagini"/>
    <folder name="Suoni"/>
    <folder name="Motivi"/>
    </folder-listing>
    done
    Disconnecting...done
    
  • obexftp -i -c / -l <dir> mostra il contenuto della directory specificata:
    ale@flyback~ obexftp -i -c / -l Immagini
    No custom transport
    Connecting...done
    Sending /... Sending ... failed: 
    Receiving Immagini...\<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd">
    <!--
    Generated by XML Coder.
    xml_coder.c (Nov 26 2003 15:17:42)
    (C) 2001 Sony Ericsson Mobile Communications AB, Lund, Sweden
    -->
    <folder-listing version="1.0"><parent-folder/>
    <file name="Immagine(1).jpg" size="41859"/>
    <file name="Mauri.jpg" size="1938"/>
    <file name="Michele.jpg" size="2223"/>
    <file name="Mattia.jpg" size="2595"/>
    <file name="Alberto.jpg" size="3019"/>
    <file name="Cuore anim.gif" size="25785"/>
    <file name="For you.gif" size="3887"/>
    <file name="Beer.wbmp" size="134"/>
    <file name="Bomb.wbmp" size="134"/>
    <file name="Cup.wbmp" size="134"/>
    <file name="Drink.wbmp" size="134"/>
    <file name="Guitar.wbmp" size="134"/>
    <file name="Heart.wbmp" size="134"/>
    <file name="Meal.wbmp" size="134"/>
    </folder-listing>
    done
    Disconnecting...done
    
  • E ora la parte dolente: a quanto pare, obexftp può scaricare (e forse inviare ma non ho ancora provato) i file elencati più avanti nella sezione varie; tuttavia, è inutile coi file dell'utente come immagini, melodie e temi. Questi si possono comunque inviare al telefonino, senza specificare la directory di destinazione (insomma, sembra che il telefonino voglia proprio rilevare per proprio conto il tipo di file a seconda dell'estensione e poi metterlo nella directory secondo lui opportuna). Tre esempi:
    ale@flyback~ obexftp -i -g telecom/pb.vcl
    No custom transport
    Connecting...done
    Receiving telecom/pb.vcl...\done
    Disconnecting...done
    
    ale@flyback~ obexftp -i -g Immagini/Mattia.jpg
    No custom transport
    Connecting...done
    Receiving Immagini/Mattia.jpg... failed: Immagini/Mattia.jpg
    Disconnecting...done
    
    ale@flyback~ obexftp -i -p Immagine\ 91.jpg 
    No custom transport
    Connecting...done
    Sending Immagine 91.jpg.../done
    Disconnecting...done
    
  • Insomma: obexftp sembra comodo per inviare file (specie visto che se ne può inviare più di uno con un comando solo) e per controllare i file presenti sul telefonino, ma non è certamente uno strumento indispensabile.
GSMlib
Il pacchetto Debian è gsm-utils.
Ci sono alcuni tool per ottenere informazioni sul telefonino, gestire e mandare SMS, gestire la rubrica. L'ultimo punto non mi funziona molto bene, è lentissimo e impiega a occhio 6-7 minuti. Se ad altri il problema non si ponesse mi farebbe piacere saperlo.
MultiSync
Il pacchetto Debian è multisync, vari plug-in sono disponibili come libmultisync-plugin-*.
Un meraviglioso programma per sincronizzare dati. Si possono scegliere due plug-in, uno per ogni estremità edl collegamento. Suggerisco IrMc Mobile plugin che si connette al telefonino, e per la controparte o Ximian Evolution plugin o Backup plugin, che sincronizzano rubrica e agenda.
btcid
Pacchetti Debian non ufficiali a http://0x63.nu/deb/
Questo programma mostra un OSD (on screen display) col numero e il nome del chiamante. Può anche lanciare un comando in occorrenza di chiamate in entrata o in uscita.

Devo menzionare anche gnokii e gammu, con le rispettive interfacce grafiche xgnokii e wammu Sfortunatamente non mi funzionano molto bene (gammu non può fare praticamente nulla).

Programmi specifici per Sony Ericsson

Ci sono alcuni programmi specifici per modelli Sony Ericsson come il T68i, il T300, il T610 e il T630. Non aggiungono funzioni specifiche, ma possono comunque essere utili.
leif
I pacchetti Debian non ufficiali sono a http://debian.severin.olloz.net/.
Con leif si possono controllare lo stato di carica e la qualità del segnale, gestire le rubriche della SIM e interna, fare telefonate, gestire e mandare SMS, inviare file, sincronizzare l'orologio del telefonino.
tsemgr
Pacchetto Debian non disponibile
Ha caratteristiche simili a leif, in aggiunta può rendere il telefonino un telecomando per alcuni programmi (xmms e altri).
Myericsson
Pacchetto Debian non disponibile.
Non l'ho ancora provato. È scritto per l'Ericsson T39, ma magari qualcosa è compatibile.
MyT68
Pacchetto Debian non disponibile.
Uno strumento per creare temi per T68i. Non l'ho ancora provato ma forse li può fare anche compatibili con T630.
Remote control
Pacchetto Debian non disponibile.
Uno strumento per usare il telefonino come telecomando. Non l'ho mai provato e forse funziona solo via Bluetooth.
K68
Pacchetto Debian non disponibile.
Un altro gestore per T68i, T610, T630. È alle prime fasi di sviluppo, quindi può solo mostrare informazioni sul telefonino e mandare file.

Connessione GPRS

Il telefonino si comporta esattamente come un normale modem, quindi si può utilizzare qualsiasi strumento di connessione (wvdial, pppconfig...). Ovviamente serve una SIM abilitata al GPRS ed alcuni parametri dall'operatore: l'APN (Access Point Name) o una stringa di inizializzazione che lo contenga, e se la rete li richiede anche username, password, IP e indirizzo DNS.

Una volta raccolti i dati bisogna impostare un account nel telefonino, nella sezione Connettività (si può trovare la procedura sul manuale, o farsi mandare un SMS autoconfigurante dal proprio gestore). È bene ricordare il CID (Connection ID) della connessione, visto che servirà nello script di chat. Si può ora configurare il dialer: l'esempio che propongo è basato su pppconfig e Wind.

/etc/chatscripts/gprs
# Stringhe di annullamento
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED

# Inizializzazione modem
'' ATZ

# Selezione del contesto PDP (ossia qui si sceglie a quale connessione del
# telefonino fare riferimento). I parametri sono CID, protocollo (IP o PPP),
# APN. Se l'operatore ha fornito una stringa è meglio usare quella (ovviamente
# col CID corretto).
'' 'AT+CGDCONT=3,"IP","internet.wind",,0,0'

# Requisiti QoS: richiesto e minimo accettabile
'' 'AT+CGQREQ=1,0,0,0,0,0'
'' 'AT+CGQMIN=1,0,0,0,0,0'

# "Stringa di connessione". Il 3 è il CID.
'' 'ATD*99***3#'

CONNECT \d\c
/etc/ppp/peers/gprs
# Praticamente autoesplicativo. I dettagli sono nella manpage di pppd.
# Da notare che con Wind non mi occorrono username e password.

hide-password 
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs"
debug
/dev/ircomm0
115200
defaultroute
noipdefault
remotename gprs
ipparam gprs
usepeerdns
/dev/ircomm0

# Impediamo il controllo di linea tramite pacchetti lcp, non funziona
# col T630 e fa disconnettere dopo poco
lcp-echo-interval 0
lcp-echo-failure 0
Ora dovrebbe funzionare semplicamente con pon gprs.

Varie

Ecco una lista dei file noti sul T630 (dalla documentazione di OBEXftp).

Nome fileContenutoMetodi
telecom/devinfo.txtInformation hardwareGET
telecom/rtc.txtThe Real Time ClockGET/PUT
telecom/pb.vcfLevel 2 access (AccessGET/PUT
telecom/pb/luid/.vcfAdd new entryPUT
telecom/pb/0.vcfOwn business cardGET/PUT
telecom/pb/###.vcfLevel 3 static index accessGET/P UT
telecom/pb/luid/*.vcfLevel 4 unique index accessGE T/PUT
telecom/pb/info.logSupported properties and memory infoGET
telecom/pb/luid/###.logChange logGET
telecom/pb/luid/cc.logChange counterGET
telecom/cal.vcsCalendar Level 2 accessGET/PUT
telecom/cal/luid/.vcsAdd new entryPUT
telecom/cal/###.vcsLevel 3 static index accessGET/ PUT
Telecom/cal/luid/*.vcsLevel 4 unique index accessG ET/PUT
Telecom/cal/info.logSupported properties and memory info GET
Telecom/cal/luid/###.logChange logGET
Telecom/cal/luid/cc.logChange counterGET

E la lista dei dispositivi di memorizzazione disponibili per SMS e rubrica (dalla pagina di manuale di gsmpb e alcuni tentativi AT):

CodiceSignificatoRubrica/SMS
MEMemoria interna del telefonoRubrica e SMS
SMMemoria SIMRubrica e SMS
DCChiamate in uscitaRubrica
MCChiamate perseRubrica
RCChiamate ricevuteRubrica
LDUltime chiamate SIMRubrica
FDSconosciuto?
MVSconosciuto?
HPSconosciuto?
BCSconosciuto?

Link utili

Ecco alcuni link che mi sono serviti. Vorrei ringraziare in particolar modo Emanuele Aina, grazie alla sua pagina ho scoperto del bug IrDA ;)


Alessandro Dalvit, ultima modifica mer 2004/08/18 Valid HTML 4.01! Valid CSS! TuxMobil - Linux on Laptops, Notebooks, PDAs and Mobile Phones