-
Notifications
You must be signed in to change notification settings - Fork 0
Home
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 :
- xPLThermostat, crée des thermostats.
- xPLChrono, crée des compteurs
- xPLCalcul, effectue des calculs
- xPLFictif, crée des devices fictifs
- xPLOwfs, tous vos capteurs 1-wire sur le réseau xPL
- xPLCron, le célèbre cron (planificateur de tâche) version xPL
- xPLDatabase, mémorise les valeurs des devices xPL
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;
}
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);
xPLLib est fournie avec plusieurs extensions prêtes à l'emploi.
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
.
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.
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
.
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.