Mon aventure au pays des tablettes géantes

Après maintes recherches et plusieurs semaines de veille continue sur d’éventuelles solutions pour mon projet de tableau interactif, je viens hier de trouver une solution sur le Web… Mes premiers tests effectués hier soir sont concluant et je dois stabiliser ma solution aujourd’hui (un kernel compile en ce moment)…

De nouveaux espoirs…

Malgré mes recherches sur Google, aucune piste sur la façon de modifier la reconnaissance de mon matériel… J’avais quelques espoirs car si le pointage ne s’effectuait pas sur 1, 2 ou 3 doigts, j’obtenais un effet avec 4 et 5 doigts… Donc le matériel devait être bien reconnu mais les commandes en retour des actions mal interprétées par Android… Cette idée s’est avérée confortée après avoir installé une application android “Droid Examiner” qui m’a permis de constater dans la liste des Input Devices qu’au niveau du 3M microtouch, les 3 premières lignes contenaient un premier code source et les suivantes un autre code… la solution passaient certainement par un nouveau paramétrage du kernel permettant de reconnaître correctement les Events sur ce matériel…

Et puis, hier, avec les mêmes mots-clés que d’habitude (rk3188 touchscreen mk908…) ma veille me reconduit sur un forum que j’avais ciblé et qui concerne un autre mini-PC… et là la lecture d’un post me redonne espoir : à une question sur le fonctionnement d’un touchscreen sous Odroid, l’admin du forum annonce un article complet dans le magazine gratuit en PDF édité par l’équipe d’Odroid et qui devra paraître… le 10 février… et nous sommes le 12 !!! Je me précipite donc sur le site à la recherche du document, le trouve et le télécharge… A la lecture de l’article concernant les tablettes géantes, je trouve des pistes TRES sérieuses… qui me laissent espérer une issue probable à mon problème !

projet_3Rappel de l’environnement du projet

  • écran tactile Iiyama t2735msc
  • mini-pc tronsmart MK908 V5
  • clavier physique logitech avec trackpad
  • portable HP dualboot Ubuntu 12.04LTS / Windows 7

Reprise du projet

Les indications proposent bien une modification de certains fichiers sources du kernel avant sa recompilation… Je fais le tour de mes kernel pour constater que je ne dispose que des sources pour test du kernel 3.0.72 d’omegamoon et celui du Kit Kat… pas de Jelly Bean en 3.0.36… Pô grave, je vais en profiter pour réinstaller le système sous kit kat 😉

Après modifications des fichiers sources et recompilation du noyau, j’installe le mini-PC… il redémarre… durant la phase de paramétrage du mini-pc, je teste le tactile… ça marche !!!!

Une fois Kit Kat démarré, je continue mes tests matériels… le Wifi fonctionne, pas de problème de sauts d’écran (passage intempestif au noir que j’avais pu avoir lors de la dernière installation de KitKat… par contre, pas de webcam (l’écran tactile contient une webcam intégrée)…

Il est tard… je décide de reprendre demain matin, à tête reposée…

projet_2Le projet se dessine donc comme suit :

  • utilisation du kernel source du kitkat
  • modification des fichiers sources
  • compilation du noyau
  • installation de la rom customisée
  • tests des fonctionnalités

La solution expliquée

Je dézippe le kernel dans mon home…

Sous linux, je repère les données Vendor et Device avec la commande lsusb

lsusb
Bus 002 Device 012: ID 0596:053f MicroTouch Systems, Inc.

J’effectue les modifications de fichiers suivants dans le kernel précédemment téléchargé :

Fichier drivers/hid/hid-ids.h

#define USB_VENDOR_ID_3M 0x0596
#define USB_DEVICE_ID_3M1968 0x0500
#define USB_DEVICE_ID_3M2256 0x0502
#define USB_DEVICE_ID_3M3266 0x0506
#define USB_DEVICE_ID_3M2735 0x053f

Fichier drivers/hid/hid-multitouch.c

static const struct hid_device_id mt_devices[] = {
/* 3M panels */
 { .driver_data = MT_CLS_3M,
 HID_USB_DEVICE(USB_VENDOR_ID_3M,
 USB_DEVICE_ID_3M1968) },
 { .driver_data = MT_CLS_3M,
 HID_USB_DEVICE(USB_VENDOR_ID_3M,
 USB_DEVICE_ID_3M2256) },
 { .driver_data = MT_CLS_3M,
 HID_USB_DEVICE(USB_VENDOR_ID_3M,
 USB_DEVICE_ID_3M3266) },
/* Iiyama t2735msc */
 { .driver_data = MT_CLS_3M,
 HID_USB_DEVICE(USB_VENDOR_ID_3M,
 USB_DEVICE_ID_3M2735) },

Je lance une compilation du kernel  depuis le répertoire /kernel :

make clean
make nconfig
make -j2

Cela me créer un nouveau kernel que je copie depuis mon home vers un répertoire partagé avec Windows.

Installation de la ROM

Je redémarre sous Windows pour installer la ROM Finless 2 (Kit Kat) avec le nouveau noyau customisé

Je connecte le min-pc sur le port OTG et le branche après avoir utilisé un trombone pour activer le reset.

Une fois le mini-pc monté dans windows, j’utilise les outils de Finless  ROM_flash_Tool_137 pour flasher la nouvelle ROM avec le kernel customisé.

Après le Flash, le mini-pc redémarre sous Kit Kat… j’effectue les paramétrages de rigueur pour le WIFI et la création de mon compte Google… avec un écran tactile en fonctionnement !

Un clavier physique AZERTY

Installation de ADB Konnect sous Android, puis activation de l’application

Reboot du PC sous linux

sudo adb connect 192.168.0.XXX
sudo adb remount rw
sudo adb push Generic.kcm /system/usr/keychars
sudo adb push Generic.kl /system/usr/keylayout

Les problèmes restant à résoudre

  • pas de webcam (interne à l’écran)
  • stabiliser la gestion des couleurs (à tout moment elle peuvent se réduire… sans doute au nombre de 16 ou 256…
  • comprendre pourquoi certaines applications Android refusent de s’installer par manque de compatibilité

Le résultat en vidéo