NeoFreerunner

De Troulite
Aller à : Navigation, rechercher

Sommaire

Bienvenue sur Fr² : le Freerunner en Français

Sur cette page je résume ce que je fais au fur et à mesure pour rendre le Freerunner utilisable au quotidien. Toute la configuration passe par un pc étant connecté par usb au Freerunner (le terminal avec clavier sms + stylet n'est pas utilisable, en tout cas pas si on est pressé)

Liens utiles

Bugreports

http://docs.openmoko.org/trac

Mailing lists

Pour allez plus loin que cette page wiki (la plupart des infos viennent de ces sources)

CE QUI N'EST PAS LIBRE DANS LE FREERUNNER

Le firmware de la puce GSM, car tout ce qui tourne autour du GSM est soumis à un NDA très strict :

GSM is a closed market, there is only a handfull of certified stacks available 
and these are considered mission critical trade secret -- whether we like 
that or not. Until the forseeable future, I don't see the powers allowing any 
open GSM stack (apart from the fact that such a thing doesn't exist) to be 
allowed to operate in public networks.
Hi
The problem because the GSM chip has a closed firmware is because *laws*
in U.S. and I think also in other countries say that used must to to
have access to it.
Because it is a law, and Openmoko can not to go against laws, it was
told starting by day 1 that it will remain closed. It Openmoko would not
did so, it will be very difficult that it could get the FCC approvation
for its devices.
This law was done because a not running GSM firmware will not only make
your device not running, but also the devices that are near to you.
About the imei, I can confirm that is against laws to change it.

Le matériel

Les boutons

Il y en a 2 :

  • le bouton principal (à droite), qui contrôle l'allumage du Freerunner
  • le bouton auxiliaire (à gauche)

Si on appuie sur les 2 en même temps (en partant d'un Freerunner éteint), on peut lancer uBoot (le bootloader) depuis :

  • la mémoire NAND (rw) : on appuie sur le bouton principal puis (tout en le maintenant enfoncé) on appuie 5-6 secondes sur le bouton auxiliaire
  • la mémoire NOR (ro) : on appuie sur le bouton auxiliaire puis (tout en le maintenant enfoncé) on appuie 5-6 secondes sur le bouton power

Depuis uBoot on peut :

  • démarrer normalement
  • démarrer depuis la carte microSD
  • accepter directement un terminal par port USB (screen -l /dev/ttyACM0 sur le PC)
  • faire des opérations de maintenance depuis le pc avec dfu-util comme :
    • backuper la stack logicielle
    • installer une nouvelle stack

La carte mémoire microSD

Les cartes microSD (SD en général) supportent mal les accès fréquents, a priori mieux vaut donc utiliser une partition ext2 (+ option de montage noatime) qu'une partition ext3. Maintenant il faut relativiser l'affaiblissement de la durée de vie de la carte microSD car cela coûte peu cher de nos jours à remplacer.

Le système de fichier jffs2 semble tout indiquer si on veut avoir un système journalisé sur carte microSD.


La batterie et son chargement par USB

Préambule

  • Tout se passe à la tension de 5V continu
  • Le protocole de communication par port USB impose un minimum de 100mA
  • Le protocole de communication par port USB impose un maximum de 500mA
  • Les chargeurs utilisant des prises USB ne sont pas tenu de respecter ce protocole de communication relatif aux PC
  • Le Freerunner supporte 100mA, 500mA et 1A.

Charger le Freerunner

Quand on branche le Freerunner par port USB à quelque chose fournissant du courant (PC, chargeur, allume-cigare de voiture), il tire 100mA par défaut.

À 100mA, le Freerunner peut se charger très lentement s'il est éteint. S'il est allumé, sa consommation courante est supérieure à 100mA et donc il se décharge.

Une fois branché, le Freerunner négocie par protocole USB pour demander 500mA (si possible).

  • s'il est branché à un PC, les 500mA seront accordés et il se rechargera.
  • s'il est branché à autre chose (un allume-cigare par exemple), aucune négociation n'est possible : il reste à 100mA (par peur de tirer trop de courant et de faire sauter la source d'énergie qui l'abreuve)

La seule exception est le chargeur fourni avec le Freerunner, qui est reconnu par ce dernier (grâce à une résistance de 47 k Ohms) comme étant une source de courant capable de délivrer 1A. Donc dans ce cas précis il se recharge très vite. Tout autre chargeur sera utilisé à 100mA.

À noter : la négociation par protocole USB et la détection du chargeur officiel sont des fonctions logicielles. Si vous êtes sûr que votre source de courant peut fournir 500mA ou 1A, vous pouvez désactiver logiciellement ces fonctions et donc recharger plus vite (si vous tirez trop de courant sur une faible source, il y a risque de surchauffe).


Connecter le Freerunner à quelque chose

Connexion à un PC (ssh)

Sur le pc

ifconfig usb0 192.168.0.200 netmask 255.255.255.0
ssh root@192.168.0.202

puis Entrer (pas de mot de passe par défaut)

Si la carte réseau du PC est déjà en charge de la plage 192.168.0.x il y a conflit d'intérêt entre usb0 et eth0. Il faut rajouter :

route add -host 192.168.0.202 dev usb0


Connexion à Internet (redirigé depuis le PC par USB)

Sur le Freerunner

Dans /etc/network/interfaces

auto usb0
iface usb0 inet static
       address 192.168.0.202
       netmask 255.255.255.0
       network 192.168.0.0
       gateway 192.168.0.200
       up echo nameserver 208.67.222.222 > /etc/resolv.conf
       up echo nameserver 208.67.220.220 >> /etc/resolv.conf

Sur le PC

Personnellement j'utilise arno-iptables-firewall, avec les réponses suivantes aux questions (de mémoire) posées par dpkg :

  • Interface externe (Internet) : wlan0 (wifi)
  • Ip sur interface externe : par dhcp
  • Interface interne (réseau locale) : usb0 (Freerunner)
  • Plage du réseau local sur interface interne : 192.168.0.0/24
  • Faut-il forwarder Internet de l'interface externe vers l'interface interne (réseau local) : oui

Les 3 "stacks" (piles logicielles, voire "distributions") pour FreeRunner

Le Framework

Le framework de l'Openmoko se présente ainsi : http://www.vanille-media.de/images/OpenmokoFramework.png Son but est de fournir une infrastructure orienté autour des services de l'Openmoko, sans privilégier pour autant un langage de programmation ou une API graphique. On remarquera qu'il ne se préoccupe pas du kernel, du bootloader, et ne suppose pas la présence d'un serveur X.

Techniquement toute la collaboration passe par dbus (sur le schéma : au-dessus de dbus c'est séparé, en dessous ça communique).

Les 3 piles logicielles pouvant rendre votre matériel utilisable

Openmoko 2007.2

C'est la stack installée par défaut, et qui repose sur GTK+. Elle utilise le Evolution Data Server pour les messages, et gsmd pour le téléphone.

  • côté développeur : elle s'inscrit dans la lignée de la GNOME Mobile Stack http://www.gnome.org/mobile/ (comme le Maemo de Nokia)
  • côté utilisateur : c'est peu utilisable, ce n'est pas un produit fini.

Qtopia

C'est la solution de Trolltech (à base de Qt), sans serveur X car elle utilise directement le framebuffer. Le téléphone est géré par le Qtopia phone server. C'est aujourd'hui (juillet 2008) la solution la plus finie (et la plus rapide) pour faire de votre Freerunner un téléphone multi-fonctions utilisable au quotidien.

Openmoko 2008.8 (ASU)

Elle sort le 8 août 2008.

Une base de Qtopia (dont le Qtopia phone server) mais portée pour X11 (pas d'utilisation directe du framebuffer) + un jeu d'applications utilisant les Enlightenment Foundation Libraries (Openmoko a recruté Carsten "Rasterman" Haitzler du projet Enlightenment !) . Les applications Qt et non-Qt cohabitent donc.

L'avenir

Le projet Openmoko est totalement focalisé sur ASU. Le but est de la rendre stable et utilisable au quotidien au sein d'un Freerunner utilisable comme téléphone. L'autre but est d'orienter le développement des applications pour respecter le framework (l'image plus haut), à terme les applications "framework-aware" devrait pouvoir passer facilement d'une stack à l'autre.

Openmoko 2007.2 n'avance plus, par manque de ressources ou d'intérêt.


Installer une nouvelle stack from scratch/Mettre à jour

Backup de la stack existante

Il faut dfu-util : http://downloads.openmoko.org/releases/Freerunner/dfu-util (ce programme est disponible dans Debian)

Puis il faut démarrer depuis la mémoire NOR, cf http://wiki.troulite.fr/index.php/NeoFreerunner#Les_boutons

Puis :

./dfu-util -a kernel     -R -U good-kernel.bin
./dfu-util -a rootfs     -R -U good-rootfs.jffs2

L'opération prend un certain temps pour rootfs (45 min)

Ces commandes tirées de http://wiki.openmoko.org/wiki/Pre-Flash_Backup ne marchent pas chez moi :

./dfu-util -a u-boot_env -R -U good-u-boot_env.bin
./dfu-util -a splash     -R -U good-splash.bin
./dfu-util -a u-boot     -R -U good-u-boot.bin

Mettre à jour uBoot

À ne faire que si c'est vraiment utile (par exemple si on veut mettre le kernel sur une partition ext3 et pas vfat)

  • on démarre depuis la mémoire NOR
  • puis depuis le PC :
dfu-util -a u-boot -R -D uboot.bin

uboot.bin étant bien sûr le bootloader tout frais que vous avez téléchargé.

Installer une nouvelle stack ou mettre à jour la stack installée

La plupart (toutes ?) des distributions du Freerunner peuvent être mises à jour depuis un terminal pour peu que le Freerunner soit connecté à Internet, sans avoir besoin d'installer from scratch un nouveau système dans la mémoire principale.

  • Openmoko 2007.2 : opkg update et opkg upgrade
    • certains fichiers de signatures sont manquants (erreur 404) mais ça marche quand même.
  • Qtopia : ?
  • Openmoko 2008.8 (ASU): opkg update et opkg upgrade
  • Debian : aptitude update et aptitude dist-upgrade

Ces mises à jour concernent également le kernel.

Maintenant si on veut installer from scratch une nouvelle version d'une stack, ou carrément installer une stack différente, il faut :

  • démarrer depuis la mémoire NOR
  • puis depuis le PC :
dfu-util -a rootfs -R -D rootfs.jffs2

root.jffs2 étant l'image de la nouvelle stack. Ce fichier contient toute l'arborescence de fichiers, mais pas le noyau (qui lui doit aller ailleurs).

Si on veut installer un nouveau noyau from scratch

dfu-util -a kernel -R -D uImage.bin

uImage.bin étant le noyau.

Installer une stack sur la carte microSD en dual boot

Pour installer qtopia ou ASU en dual boot, il vous faut récupérer :

  • un noyau : uImage.bin
  • une arborescence de fichiers : rootfs.jffs2

Par exemple pour qtopia on peut télécharger un .tar.gz contenant tout cela.

Note préliminaire sur les types de partitions

uBoot < 2008-07-23 ne peut booter un kernel que depuis une partition en FAT

Formatter la carte microSD

On crée 2 partitions :

fdisk /dev/mmcblk0

Copier les fichiers

Sur la première partition on va copie le noyau uImage.bin, directement à la racine Sur la seconde partition il faut transférer l'arborescence de fichiers contenu dans le fichier jffs2. Pour cela :

  • on monte le fichier jffs2 sur le PC :
export loop=$(losetup -f)
losetup $loop <rootfs.jffs2>
modprobe block2mtd block2mtd=$loop,131072
modprobe jffs2
modprobe mtdblock
mkdir <mountpoint>
mount -t jffs2 -o ro /dev/mtdblock0 <mountpoint>
  • on fait un tar avec le contenu monté (notez le . final, il compte) :
tar czf rootfs.tar.gz -C <mountpoint> .
  • on copie (scp) ce tar.gz sur le Freerunner
  • on le décompresse dans la seconde partition de la carte microSD.

Après vous pouvez supprimer :

  • le tar.gz, qui prend de la place pour rien
  • le contenu du répertoire 'boot', parce qu'on a déja uImage.bin dans la première partition et apparement il y a un risque de se marcher sur les pieds

C'est fini, vous pouvez redémarrer, charger uBoot depuis la mémoire NAND (cf http://wiki.troulite.fr/index.php/NeoFreerunner#Les_2_en_m.C3.AAme_temps ), et choisir de démarrer depuis la carte microSD.


Openmoko 2007.2

Le bouton principal

  • Si on appuie peu de temps : ferme l'application courante
  • Si on appuie longtemps :
    • si le Freerunner est en veille : il en sort
    • si le Freerunner est en marche : affiche un menu permettant de :
      • verrouiller l'écran
      • éteindre le Freerunner
      • allumer/éteindre le GSM, le Wifi, le GPS, le Bluetooth

Le bouton auxiliaire (à gauche)

  • Si on appuie peu de temps : revient sur la "Home page"
  • Si on appuie longtemps : affiche un menu permettant de :
    • renverser l'orientation (portrait vers paysage ou l'inverse)
    • passer en plein écran
    • prendre une capture d'écran


Configurer Openmoko 2007.2

Régler l'heure et la date

La timezone

opkg install tzdata
opkg install tzdata-europe
ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime

La date

date -s MMDDhhmmYYYY.ss

ou

opkg install ntpclient
ntpclient -s -h pool.ntp.org

Puis on synchronise avec l'horloge hardware, histoire que ça persiste au reboot

hwclock --systohc


Le son

Supprimer le son de frappe du touchscreen

Commenter la ligne suivante dans /etc/pulse/session

#load-sample touchscreen /usr/share/openmoko/sounds/touchscreen_click.wav


Le volume

alsamixer, en attendant d'installer un logiciel graphique. Alsa.png


Le clavier

multitap-pad (clavier par défaut)

Sa configuration se trouve dans /etc/multitap-pad/im-multipress.conf qu'on peut facilement personnaliser.

matchbox-keyboard (clavier classique)

C'est lui : http://matchbox-project.org/?p=1

Note

Ce clavier vous oblige à utiliser un stylet, les touches étant trop petites pour le pouce.

Installation

On peut le trouver ici : http://www.ginguppin.de/node/15

mkdir matchbox-keyboard
cd matchbox-keyboard
wget http://www.ginguppin.de/files/keyboard-ipk.tar.bz2
tar -jxf keyboard-ipk.tar.bz2
opkg remove -force-depends multitap-pad
opkg install matchbox-keyboard-inputmethod*.ipk
opkg install matchbox-keyboard-im*.ipk
opkg install matchbox-keyboard-applet*.ipk

(Optionnel) Puis on rajoute l'applet en haut à droite de l'écran (pour pouvoir appeler le clavier à tout moment). Dans /etc/matchbox/session il faut rajouter "keyboard" dans les end-applets, exemple :

matchbox-panel-2 --start-applets systray,startup \
 --end-applets openmoko-panel-clock,openmoko-panel-battery,openmoko-panel-gsm,openmoko-panel-gps,openmoko-panel-usb,openmoko-panel-bt,openmoko-panel-memory,openmoko-panel-wifi --titlebar &

Puis on redémarre X :

/etc/init.d/xserver-nodm restart
Si on veut revenir en arrière
opkg remove matchbox-keyboard-inputmethod matchbox-keyboard-im matchbox-keyboard-applet
opkg install multitap-pad

Puis dans /etc/gtk-2.0/gtk.immodules on commente :

#"/usr/lib/gtk-2.0/2.10.0/immodules/libmb-im-invoker.so"
#"matchbox-im-invoker" "Virtual Keyboard" "" "" "*"

Puis on redémarre X.


cellwriter (écriture à la main)

C'est ça : http://risujin.org/cellwriter/ Et on peut le trouver ici : http://www.ginguppin.de/node/16


Utiliser le GPS

Avant toute manipulation, pensez à allumer le GPS (éteint par défaut).

Tester le gps

opkg install openmoko-agpsui

Une fois lancé, on choisit "Power On", on se met dehors et on attend les paquets "Good". Dans le menu SS on peut voir la force du signal. Plus artisanalement :

cat /dev/ttySAC1 

doit renvoyer des infos une fois les satellites localisés.

Utiliser le gps au quotidien

On va installer tangoGPS

opkg install gpsd
opkg install http://www.tangogps.org/downloads/tangogps_0.9.2-r1_armv4t.ipk 

gpsd doit être configuré et lancé :

echo 'GPS_DEV="/dev/ttySAC1"' > /etc/default/gpsd
/etc/init.d/gpsd restart

Attention chez moi le script /etc/init.d/gpsd est buggé, "restart" ne marche pas, j'ai dû faire "stop" puis "start" après (sinon pas de GPS dans tangoGPS)

Un autre logiciel qui semble bien : pyroute

Antenne externe

Si vous voulez brancher une antenne externe pour le GPS, le connecteur sur la droite est de type MMCX (et évidemment l'antenne que j'ai dans un coin est MCX... monde de merde)

Importer ses contacts téléphoniques

Installer python

opkg install python-dbus

Charger la liste des contacts

Il faut avoir la liste de ses contacts dans un fichier au format vCard.

opkg install python-dbus
wget http://www.smurfy.de/files/neo/manage-contacts
python manage-contacts load < contacts.vcf

Sauvegarder la liste des contacts (pas testé)

python manage-contacts dump > contacts_backup.vcf

Vider la liste des contacts

wget http://www.smurfy.de/files/neo/remove_all_contacts
python remove_all_contacts

Celui-ci ne marche que depuis un terminal local, pas depuis ssh.

Qtopia

Personnellement je l'ai installé en dual boot, pour tester. On peut télécharger une image de qtopia depuis http://wiki.openmoko.org/wiki/Latest_Images#Qtopia_image_from_qtopia.net

Importer ses contacts téléphoniques

Il faut avoir ses contacts dans un fichier au format vCard.

/opt/Qtopia/bin/addressbook contacts.vcf (le fichier sera effacé attention !)

Le reste se déroule graphiquement...


Openmoko 2008.8 (ASU)

Mise à jour

Il faut corriger une typo dans /etc/opkg/Multiverse-feed.conf : enlever le / en trop devant Multiverse.

Ensuite il faut coller dans un fichier /etc/opkg/zecke.conf :

src/gz zecke-all http://people.openmoko.org/~zecke/om2008.8-dev/all
src/gz zecke-arm http://people.openmoko.org/~zecke/om2008.8-dev/armv4t
src/gz zecke-i686 http://people.openmoko.org/~zecke/om2008.8-dev/i686
src/gz zecke-neo http://people.openmoko.org/~zecke/om2008.8-dev/neo1973
src/gz zecke-gta02 http://people.openmoko.org/~zecke/om2008.8-dev/om-gta02

Et ensuite opkg update && opkg upgrade fonctionnent.


Compiler Mozilla Fennec

Installer de quoi cross-compiler

aptitude install build-essential ccache autoconf automake autotools-dev libtool \ gettext intltool curl uboot-mkimage mtools fakeroot alien check libglib2.0-dev \ libxrender-dev libgconf2-dev

NB : pas sur que les lib-dev servent


Télécharger et installer toolchain

wget http://downloads.openmoko.org/toolchains/openmoko-i686-arm-linux-gnueabi-toolchain.tar.bz2 or wget http://downloads.openmoko.org/toolchains/openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2

bunzip2 openmoko-*-arm-linux-gnueabi-toolchain.tar.bz2 gzip openmoko-*-arm-linux-gnueabi-toolchain.tar fakeroot alien -d openmoko-*-arm-linux-gnueabi-toolchain.tar.gz sudo dpkg -i openmoko_*-arm-linux-gnueabi-toolchain*.deb


Modifier son environnement

. /usr/local/openmoko/arm/setup-env export PATH=$PATH:/usr/local/openmoko/arm/bin

Installer les dépendances de Fennec

. /usr/local/openmoko/arm/environment-setup opkg-target update opkg-target install libgtk2.0-dev libxaw7-dev libfreetype6-dev libxi-dev libhildonmime-dev libosso-dev libidl-dev liblocation-dev libasound2-dev

Récupérer le source de Fennec

hg clone http://hg.mozilla.org/mozilla-central cd mozilla-central hg clone http://hg.mozilla.org/mobile-browser mobile


Récupération de Google Wave

A geek friend of mine told me he saved enough money to buy a Freerunner. Before he buys it I think I should try to make a document summarizing advantages and constraints of the beast, because it's far from being a normal smartphone. Always remember : it's absolutely NOT for NON-geeks (double negation, yay!)


I could use my own wiki to do it, but it is a good excuse to use Google Wave (I don't use it at all)

I start with important bad things, it could destroy your illusions but I must do that, sorry...


A poor audio quality (phone point of view)

The Freerunner is a bit hard to configure for audio (specially microphone), and even when it has been correctly configured it's not a good phone, even if you just want "normal" quality. You will hear your correspondents perfectly, but for them your voice could be too low ("I can't hear you") or the microphone could be too sensitive ("echo echo I can hear myself" or "it's very noisy around you, are you in a crowdy street ?"). When the Freerunner is well configured, you could use it as a phone and makes some calls, but sometimes you will be told "I can't hear you very well".


A smartphone, not a phone

The Freerunner is a smartphone (a miniaturized computer), which means :

  • poor battery : maybe worse than other smartphones (which are far worse than classical telephones already), you have to charge your Freerunner very often, and by very often I mean every two days.
  • back-lighted lcd screen : like others smartphones (and like your laptop) you have poor visibility as soon as it's sunny.


An outdated piece of hardware (smartphone point of view)

It's a GSM/GPRS phone, it works everywhere but you can't do 'data' seriously because you don't have a 3G chip, nor EDGE (2.5G). 'data' using GPRS is feasible but it's a good old 2ko/s, and as a geek you know you could do email, or check rss or news, but it will be hard to browse modern web with such a slow connection.

Also : no camera, no place to keep your stylus.

An weak piece of hardware (computer point of view)

CPU is a 500MHz one which runs at 400MHz, and it's an old armv4t (not so good for floating points IIRC)

GPU is just a joke : if you want to do 3d things it will be software (forget hardware acceleration). The Freerunner has a small but great screen (480x640, ~240 dpi), but video chip hits its limits their because it was made to work optimally at 240x320.

You will have lots of space if you use a 16Go microsd card (maximal size), but keep in mind it's a slow media.

Internal flash memory is 256Mo, which is enough for main OS.

128mo of RAM is acceptable.

Sound has a lack of bass, you could use it to listen spoken text (podcast, audiobook) but it's not very good for music. It remembers me USB flashdrive with embedded audio capacity : could be useful, but definitely not a great piece of audio hardware

Wifi is weak, you should stay at a short range of wifi spots.


Some great things now

It's a small linux computer in your pocket. Plus the device is sturdy.

You can phone, you have a beautiful screen, you can use GPS, connect to Wifi or bluetooth, play sounds, play with accelerometers (like wiimotes).

You can choose your distribution, depending on what you want to do with your device :

  • Android (from Google) : smartphone with polished interface but less possibilities
  • Qtopia (from Qt) : polished too but more opened to geek things (you have ssh, X server...)
  • SHR (from people) : the default distribution, a smartphone which is also an always evolving linux distribution
  • Gamerunner : no phone/wifi/gps, just a bunch of games (OpenTTD, Quake/Doom/Duke3D, SNes emulator, Numptyphysics, Pingus...) + mplayer
  • Debian : your Freerunner is a computer, you can use a classical Debian and any software provided by it (I launched OpenOffice on an external screen+keyboard once...)

(I use shr)

Everything is accessible and programmable (lightsaber with accelerometers ? tracking software using GPS ? remote control of other computers ? robot control ?).

You don't have as many applications as on iPhone, but you can do what you want with your device without jailbreaking (you can install debian and run Apache if you want...). You will not be asked to pay for soft/maps/ringtones...

You can access your phone by classical ssh access, which means :

  • remote display/control from a real computer (ssh -X or vnc or ...)
  • install/remove software with packages manager (btw all your / is accessible through sftp)
  • everything is the same as on your standard Linux computer

(you can't do that if you choose to install android, because there is no ssh server then)

Some examples :

  • I keep my list of contacts on my laptop (a kde app named Kontacts) and I made a vcard export to load them on my phone
  • I used sql to isolate and export a specific subset of my SMS on my laptop.


GPS works fine, you have software to display your position on a map and tracking your position (tangogps), and you also have software with routing features when you are lost. You can use open or proprietary maps. But you don't have speech synthesis (no audio guide for your car), you have to read the map.


For hardware people

  • free access to all schema. You will never face the "big hardware company selling me a 200$ workaround/fix but I could do it myself for 5$ if only I could have schema"
  • you have a standard (mini) USB port and you could use it in master or slave mode. Depending on the situation you could become a USB key, a GSM modem, an external GPS. Or you could host a laser color printer, a USB hub with keyboard/mouse, ...



Some combination of bad criteria

lcd screen + poor audio quality = bad outdoor phone for sunny days. If you add battery life, you should definitively stay in a civilized society, going from home (with computer) to office (with computer too) and so...

Some combination of good criteria

GPS + maps from openstreetmap on sd card = great tool for tourism, to discover foreign cities and to improve openstreetmap

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils