Yoctopuce et le framework Mono

Yoctopuce et le framework Mono

On nous a demandé récemment si nous comptions publier une librairie pour le framework Mono. Nous n'avions rien prévu de tel dans nos plans mais nous avons malgré tout promis d'y jeter un coup d'œil. Pourquoi ne pas faire ça ensemble?

Mono est une implémentation open-source de C# entièrement compatible avec C# .NET. "Quel intérêt?" me direz-vous, puisque Microsoft distribue C# .NET gratuitement. Eh bien, l'intérêt réside dans le fait que les applications faites avec Mono peuvent tourner non seulement sous Windows mais aussi sous Linux et Mac OS X. Alors peut-on faire marcher l'API Yoctopuce C# ailleurs que sous Windows ?

L'API Yoctopuce est divisée en deux couches principales: l'API haut niveau qui gère les fonctionnalités "abstraites" des modules Yoctopuce: Température, Voltage, Relais etc... et l'API bas niveau qui gère les communications avec le matériel.

L'API haut niveau est toujours écrite dans le langage cible de la libraire, ici C#, et ne fait jamais d'appels système exotiques. Elle a donc toutes les chances fonctionner quelle que soit la plate-forme. L'API de bas niveau, quant à elle, est écrite en C et est disponible sous plusieurs formes: fichiers sources, librairie pré-compilée statique ou dynamique.

Les différentes versions précompilées de l'API bas niveau de Yoctopuce
Les différentes versions précompilées de l'API bas niveau de Yoctopuce


L'API Yoctopuce C# est distribuée uniquement avec la librairie dynamique yapi.dll, ce qui est assez logique puisque jusqu'à présent, l'API C# n'était destinée qu'à Windows.

Un simple test permet de vérifier qu'avec Mono sous Windows, un programme d'exemple comme celui du Yocto-Temperature fonctionne parfaitement. Il suffit de copier main.cs, yocto_api.cs, yocto_temperature.cs et yapi.dll dans le même répertoire et de faire gmcs *.cs pour obtenir un exécutable fonctionnel. Comme quoi Mono a vraiment l'air compatible avec C# .NET :-)

La difficulté est bien évidement de faire fonctionner l'API sous d'autres systèmes d'exploitation: cela se résume à demander à Mono de charger la librairie dynamique correspondant au système d'exploitation plutôt que yapi.dll. Et bien figurez-vous que c'est prévu: il suffit de créer un fichier de configuration indiquant les correspondances entre la DLL et les autres librairies en fonction du système d'exploitation.

<configuration> <dllmap dll="yapi.dll" os="linux" target="libyapi.so.1.0.1"/> <dllmap dll="yapi.dll" os="osx" target="libyapi.dylib"/> </configuration>

Pour faire fonctionner l'API Yoctopuce avec le framework Mono quel que soit le système d'exploitation, il suffit donc de récupérer la librairie dynamique correspondant à votre OS et votre architecture (vous la trouverez dans l'API C++), de copier le contenu du fichier ci-dessus sous le nom nom_d'exécutable.config et le tour est joué.

Compilation de l'exemple du Yocto-Temperature sous Linux avec Mono
Compilation de l'exemple du Yocto-Temperature sous Linux avec Mono


Pour être tout à fait franc, on a quand même dû faire quelques petites modifications dans la couche de haut niveau pour que cela fonctionne avec Mono. Et si vous comptiez utiliser Mono sur un Raspberry PI, ne vous réjouissez pas trop vite: Mono ne supporte pas encore l'architecture HardFloat (hf), du coup les calculs en virgule flottante ne marche pas trop bien. Vous pourrez commuter un relais, mais pas lire la température d'un capteur.

Commenter 2 commentaires Retour au blog



1 - oaimac Vendredi 16 décembre 2016 21H49

Est-ce que la librairie C# actuelle est une librairie portable pouvant être utilisée avec Xamarin pour Android ? avec UWP pour téléphone Windows 10 ?
Merci,

2 - seb (Yocto-Team)Lundi 19 décembre 2016 8H04

@oaimac: Notre librairie C# ne fonctionnera pas avec Xamarin pour Android ou Windows 10 mobile.

Cependant, Il semble que Xamarin soit capable d'utiliser une librairie écrite en Java:
https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library
Si c'est le cas vous pouvez utiliser notre libraire Android écrite en Java.

Pour Windows 10 Mobile, nous travaillons sur une nouvelle librairie qui sera compatible avec
Windows 10 Mobile:
https://www.yoctopuce.com/FR/article/apercu-de-la-librairie-windows-uwp

Yoctopuce, get your stuff connected.