Utiliser la librairie C# avec .NET Core sous ARM64

Utiliser la librairie C# avec .NET Core sous ARM64

Il y a quelque semaines, nous avons listé les librairies Yoctopuce qui supportaient Linux ARM64, mais C# ne faisait pas partie de cette liste car .NET Core 2.0 ne supporte pas cette architecture. Nous avons tout de même ajouté le support ARM64 à notre librairie C#, car il est possible d'utiliser une version preview de la prochaine version qui supporte cette plateforme.



En effet, la prochaine version de .NET Core (.NET Core v3.0) supportera Linux ARM64 et cette version est annoncée pour septembre 2019. Nous avons donc fait tous nos tests avec la version .NET Core 3.0 Preview 7.

La librairie C# avec .NET Core 3.0 Preview


Pour tester notre librairie avec .NET Core 3.0 Preview, il faut commencer par installer le SDK sur une machine Linux ARM64, dans notre cas un Nvidia Jetson Nano. La procédure est facile, il faut downloader le SDK sur le site de Microsoft et suivre les instructions.

Une fois le SDK installé, on peut créer un nouveau projet de type "console" à l'aide de la commande suivante:

yocto@jetson-dev:~/test$ dotnet new console



Il faut ensuite ajouter notre librairie C# au projet. La solution la plus simple est d'utiliser notre package NuGet Yoctopuce.YoctoLib. La commande dotnet add package télécharge et ajoute la version la plus récente de notre librairie au projet en utilisant NuGet.

yocto@jetson-dev:~/test$ dotnet add package Yoctopuce.YoctoLib



Il ne "reste plus" qu'à écrire le code de l'application. Pour cet exemple, nous allons simplement afficher la version de la librairie C# que nous avons installé et afficher le numéro de série des modules Yoctopuce connectés sur les ports USB.

class Program
{
    static void Main(string[] args)
    {
        YModule m;
        string errmsg = "";


        Console.WriteLine("Yoctopuce C# Library:" + YAPI.GetAPIVersion());

        if (YAPI.RegisterHub("usb", ref errmsg) != YAPI.SUCCESS) {
            Console.WriteLine("RegisterHub error: " + errmsg);
            Environment.Exit(0);
        }

        Console.WriteLine("Yoctopuce devices on USB:");
        m = YModule.FirstModule();
        while (m != null) {
            Console.WriteLine(m.get_productName()
                + " (" + m.get_serialNumber() + ")");
            m = m.nextModule();
        }

        YAPI.FreeAPI();
    }
}




Il est ensuite possible de compiler et lancer l’exécutable directement à l'aide de la commande dotnet run:

yocto@jetson-dev:~/test$ dotnet run Yoctopuce C# Library:1.10.36692 (1.10.36692) RegisterHub error: the user has insufficient permissions to access USB devices (ypkt_lin:406)



L'appel à YAPI.GetAPIVersion() fonctionne mais pas l'appel à YAPI.RegisterHub. C'est normal. Sous Linux, par défaut, seul le super user peut accéder aux ports USB. Il y deux solutions, utiliser sudo pour accorder temporairement les droits root ou ajouter une règle udev au système, comme décrit dans cet article.


Si on lance la même commande avec sudo, tout fonctionne:

yocto@jetson-dev:~/test$ sudo dotnet run Yoctopuce C# Library:1.10.36692 (1.10.36692) Yoctopuce devices on USB: Yocto-LatchedRelay (YLTCHRL1-4C6D0)



La librairie C# avec Mono


Le framework Mono supporte aussi Linux ARM64. Nous avons donc mis à jour notre tutoriel Mono
ainsi que l'exemple qui est disponible sur GitHub.

Si vous avez déjà une application qui fonctionne sous Mono, il faut mettre à jour la librairie Yoctopuce et recompiler l'application. Il faut aussi copier en plus la librairie dynamique libyapi-aarch64.so dans le même répertoire que l’exécutable.

L'application peut ensuite fonctionner sous Linux ARM64 avec Mono.

yocto@jetson-dev:~/ConsoleApp1/bin/Release$ sudo mono ConsoleApp1.exe Device list YLTCHRL1-4C6D0 (Yocto-LatchedRelay)



Conclusion


Avec cette nouvelle librairie C#, nous supportons désormais complètement l'architecture ARM64 (aussi appelée aarch64), que cela soit sous Mono ou avec les futures versions de .NET Core.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.