L’équipe Ingénierie de produits de Savoir-faire Linux, ainsi que l’équipe du projet Ring, se sont récemment installés dans les nouveaux locaux sur la rue Clark à Montréal. Mais après le bonheur de l’emménagement, un problème apparut : à l’heure du déjeuner, les livreurs devaient cogner à la porte pour rentrer. Notre équipe a donc imaginé, conçu et construit un système d’interphone surnommé « Quick-Phone » (inspiré de QTQuick) pour gérer l’accès au bureau. Et voilà comment l’histoire du « Quick-Phone » fait maison commence.
Une idée de départ
Comme la plupart des entreprises, nous disposons tous ou presque d’un téléphone de bureau qui se connecte à un réseau interne en utilisant le protocole SIP. Nous décidons d’utiliser le serveur open source Asterisk afin de simplement installer un téléphone SIP régulier sur le mur extérieur pour établir une connexion entre les invités qui se tiennent à la porte et les personnes à l’intérieur. Nous voulions allé même plus loin. Pourquoi ne pas concevoir un interphone SIP moderne, sexy avec écran tactile ? Un développement open source dans un système embarqué avec une interface utilisateur… Facile, c’est ce que nous développons tous les jours pour nos clients !
Avec Technologic Systems
Pour démarrer, nos amis de Technologic Systems nous ont généreusement fait parvenir leur nouveau système tactile TS-TPC-7990 pour les besoins de notre interphone maison. Cette carte intègre un CPU ARM Quad Core NXP i.MX6 de 1 GHz avec un puissant GPU et un ensemble de codeurs / décodeurs matériels pour prendre en charge les applications graphiques et multimédia.
Système embarqué TS-7990 de Technologic Systems complet avec écran tactile capacitifn
Nous avons défini l’objectif de valeur minimum pour que le produit ait une interface simple qui répertorie tous les utilisateurs pour appeler directement une personne du département. Pour ce faire, nous avons conçu notre interface utilisateur (UI) avec Qt QML, en profitant de l’accélération matérielle pour obtenir plus de réactivité. QML est un outil génial pour la création d’interfaces UI complexes avec OpenGL. Avec l’aide du GPU, QML offre un fonctionnement sans accroc sur les plateformes embarquées. Puis, nous avons utilisé «Qt-cinématique expérience 3D» qui fonctionne à merveille sur TS-7990, en ne consommant qu’environ 20% de la capacité de l’UC.
De plus, en utilisant un décodeur matériel dans le pipeline GStreamer, nous avons pu décoder 720p h24 stream avec presque aucune utilisation du CPU. Même si nous avons décidé de ne pas ajouter d’appels vidéo pour cette première version, ces expériences ont montré que cette carte était déjà capable de supporter des applications multimédia. En ce qui concerne le système technologique prêt à l’emploi, il fournit déjà un support pour Qt QML dans leur couche Yocto. Nous avons profité de cette opportunité et nous avons commencé à coder dans la langue QML et par la même occasion, contribuer à la communauté open source Yocto.
Pour alimenter le système avec des données, nous avons récupéré dans un premier temps tous les noms d’utilisateurs, numéros de postes et photos du trombinoscope présents dans notre système de gestion intégré (la plateforme ERP open source Odoo). Nous les avons stockés dans un fichier avec un simple client REST. Une étape simple mais nécessaire pour s’assurer que l’ordinateur intégré ait accès à son propre fichier indépendant de données.
Ensuite, nous avons intégré une célèbre SIP stack, pjsip et son python wrapper pour développer un simple appelant SIP. Nous avons choisi pjsip pour trois raisons. Tout d’abord, c’est une bibliothèque de communication multimédia fiable, écrite en langage C. Nous avions auparavant déjà utilisé ses bibliothèques de bas niveau pour notre téléphone DHT / SIP : Ring, et le fonctionnement était très satisfaisant. Deuxièmement, le pjsip est très efficace. Ses bibliothèques de haut niveau supportent déjà un ensemble de codecs audio tels que les codecs Speex, iLBC, GSM, G711, G722 et L16. Enfin, nous connaissions très bien les tenants et les aboutissants. En fait, en quelques heures, nous avions développé un SIP basé sur le python pjsip pour gérer les appels depuis l’interphone.
Tout assemblé, tout connecté !
Avec la soirée d’inauguration des nouveaux bureaux, nous savions que c’était le bon moment pour installer le prototype – un petit cadeau d’ouverture pour ainsi dire ! C’était aussi l’occasion de démontrer notre expertise, plus précisément notre capacité de développement logiciel et d’assemblage avec un composant industriel pour en faire un objet connecté dernier cri ! Restait le montage de la planche sur le mur d’entrée. Nous avions besoin d’une boîte en bois sur mesure, d’une alimentation et d’une connexion, tout en disposant d’une sortie «Ethernet».
Le processus de confection de la boîte en bois par des ingénieurs de produits
Quelques problèmes ont été rencontrés, car la carte ne prenait pas en charge ‘Power-Over-Ethernet’. Nous avions besoin jusqu’à 19W (à <28V), différent d’une configuration PoE typique. Nous avons donc manipulé un injecteur PoE passif afin d’utiliser notre propre alimentation et piraté un câble Ethernet pour diviser l’alimentation du tableau. En ce qui concerne la boîte en bois, nous avons conçu un cadre personnalisé quelques coups de bombes de peinture et le tour était joué !
Test driving the ‘PoE’ setup
Après avoir monté l’appareil, nous avons fait un peu plus de débogage afin de réduire la vitesse du lien. C’était nécessaire car notre câble Ethernet piraté n’était plus correctement blindé. Mais à la fin, deux heures avant l’arrivée des invités d’inauguration, nous étions fiers : nous pouvions établir le «premier appel» entre le couloir et notre bureau. Le lendemain, le livreur est entré avec un sourire radieux sur son visage : Il n’attendait plus à la porte !
Une petite ligne de commande pour déboguer et la magie opère.
Tout en open source
L’ensemble du projet a été construit à l’aide d’outils et de bibliothèques open source. En fait, toute personne intéressée peut suivre des étapes simples afin de créer sa propre version. Visitez le dépôt GitHub pour obtenir des instructions sur la façon de construire votre propre image pour un TS-TPC-7990. Le code source de l’application QML est également disponible sur GitHub.
Un travail d’équipe
Ce fut un projet amusant qui a le mérite de fonctionner efficacement, comme une unité clé en main. Nous avons usé de l’expertise et de l’inspiration de toute l’équipe pour ce petit défi technologique. C’est ce à quoi nous nous concentrons tous les jours. Pour ce projet interne, nous avons utilisé la même «Méthodologie de développement agile» que nous utilisons pour nos clients. Nous avons définit les acteurs du
Une fin heureuse pour l’équipe prête à accueillir le monde !
projet : deux parties prenantes, un propriétaire de produit et l’équipe de développement. Nous avons organisé de courtes réunions pour comprendre les besoins, fixer les priorités, estimer l’effort pour effectuer chaque tâche, et les diviser en itérations de courts métrages. Nous avons également fixé des délais d’itérations régulières, le premier étant la journée d’inauguration. Maintenant, nos intervenants sont satisfaits, mais bien sûr, ils ont demandé quelques améliorations supplémentaires. Nous poursuivons le travail. Histoire à suivre !