Skip to content
This repository has been archived by the owner on Feb 3, 2019. It is now read-only.
François JARRIER-GELLEZ edited this page Oct 7, 2016 · 13 revisions

Bienvenue sur le wiki xPLLib

xPLLib est une librairie C++ pour interagir avec le protocole application xPL. Son code est cross-plateform et a déjà compilé avec succès sous Windows et Linux avec des processeurs x86 et ARM. Certains projets l'utilisant génère des executables pour Raspberry PI. Pour plus d'information sur le protocole xPL, consulter Wikipédia ou le site du projet xPL.

xPLLib est déjà utilisée dans plusieurs projets :

Mise en oeuvre

Copier le contenu du dossier src dans votre projet

#include "xPLDevice.h"

int main(int argc, char* argv[])
{
    xPL::xPLDevice m_xPLDevice;

    m_xPLDevice.Initialisation("fragxpl", "chrono", "default");
    m_xPLDevice.SetAppName("xPL Chrono", "1.0.0.0");
    m_xPLDevice.Open();

    while(true)
    {
        m_xPLDevice.WaitRecv(500);
    }

    m_xPLDevice.Close();

    return 0;
}

Extension

Afin de pouvoir écouter les messages xPL et en émettre, il faut ajouter une extension à l'objet xPLDevice. L'extension est une classe qui implémente l'interface IExtension (meaculpa pour les plus puristes d'entre nous, ce n'est pas une interface mais une classe abstraite ne comprenant que des méthodes virtuelles pures puisque la notion d'interface n'existe pas en C++).

class MonxPLDevice : public xPLDevice::IExtension
{
    public:
        MonxPLDevice(xPLDevice* xPLDev);
        ~MonxPLDevice();

        bool MsgAnswer(SchemaObject& msg);
}

La méthode MsgAnswer sera appelée à chaque réception de messages. Le xPLDevice passé au constructeur n'est pas indispensable, mais il sera utile pour envoyer des messages. Pour activer l'extension, il faudra ajouter, sur l'exemple plus haut, avant l'instruction open, les lignes suivantes :

MonxPLDevice monExtension(&m_xPLDevice);
m_xPLDevice.AddExtension(&monExtension);

Extensions prédéfinies

xPLLib est fournie avec plusieurs extensions prêtes à l'emploi.

Sensors

Cette extension gère tous les messages nécessaires pour les capteurs (classe sensor.basic), il suffit de lui fournir la liste des capteurs, leur types et leurs valeurs via les méthodes ...

... Refactoring en cours car les noms des méthodes ne sont pas judicieuses/intuitives ...

Il y a exemple d'utilisation de cette extension dans le projet xPLFictif.

BasicConfig

Cette extension permet de gérer les messages de classe config afin de paramétrer votre application. Les paramètres sont enregistrés (voir la page Stockage des paramètres) pour être réutilisés au démarrage de l'application. La méthode AddBasicConfig permet de lui donner les différents paramètres à gérer, la méthode SetCallBackConfig permet de définir la classe qui sera appelée à chaque modification de paramètres pour reconfigurer l'application. Cette dernière classe utilisera la méthode GetConfigItem pour retrouver les valeurs configurées.

Il y a exemple d'utilisation de cette extension dans la classe xPLDevCfg de xPLLib.

AdvanceConfig

Cette extension permet de gérer les messages de classe advanceconfig, ce n'est pas une classe standard de messages XPL. Elle fonction sur le même principe que l'extension BasicConfig, mais au lieu de configurer les paramètres globaux de l'application, elle configure les devices gérés par l'application. Par exemple, pour xPLThermostat, cette extension permet de configurer les différents thermostats du daemon. Les messages xPL de classe config ne peuvent pas être utilisés car ils ne peuvent pas traiter une liste de plusieurs propriétés.

Retrouver un exemple d'utilisation de cette extension dans le projet xPLChrono.

Classe xPLDevCfg

La classe xPLDevCfg est une classe qui hérite de xPLDevise et implémente l'extension BasicConfig afin de paramétrer des informations liées au protocole xPL et des informations de déboggage. Tout les éléments de paramétrage sont décrit sur la page Stockage des paramètres.