Se connecter à un device
Module d’exemple : helloindi — le plus petit IndiModule possible.
"status": {
"permission": 0,
"e": {
"connection": { "type": "light", "label": "Device connection" }
}
}HelloIndi::HelloIndi(...)
: IndiModule(...)
{
loadOstPropertiesFromFile(":helloindi.json");
giveMeADevice("device", "Device", INDI::BaseDevice::GENERAL_INTERFACE);
}giveMeADevice("device", ...) ajoute l’élément device dans la propriété devices — sa liste de valeurs ne propose que les devices présents sur le bus et exposant l’interface demandée.
Se connecter dès que le device apparaît
void HelloIndi::onNewDevice(INDI::BaseDevice dp)
{
if (QString(dp.getDeviceName()) == getString("devices", "device"))
{
connectDevice(getString("devices", "device"));
}
}onNewDevice() est appelé pour chaque device qui apparaît sur le bus, pas seulement celui choisi — d’où la comparaison avant d’appeler connectDevice(). Un module réel attend en général une action explicite de l’utilisateur plutôt que de se connecter automatiquement comme ici ; ce raccourci n’est là que pour que l’exemple soit testable sans aucune interaction.
Refléter l’état de connexion
void HelloIndi::onUpdateProperty(INDI::Property property)
{
if (QString(property.getDeviceName()) != getString("devices", "device")) return;
if (QString(property.getName()) != "CONNECTION") return;
INDI::PropertySwitch sw = property;
bool connected = false;
for (unsigned int i = 0; i < sw.count(); i++)
{
if (QString(sw[i].name) == "CONNECT" && sw[i].s == ISS_ON) connected = true;
}
getEltLight("status", "connection")->setValue(connected ? OST::State::Ok : OST::State::Idle, true);
}onUpdateProperty() est appelé à chaque mise à jour de n’importe quelle propriété de n’importe quel device connecté — deux filtres sont donc systématiques : le device concerné, puis le nom de la propriété INDI (CONNECTION ici, un nom standard présent sur tout driver). INDI::PropertySwitch sw = property; est la vue typée habituelle d’un client INDI — rien de spécifique à OST.
Voir la vue d’ensemble : onUpdateProperty() est le hook public pensé pour être surchargé. updateProperty() (protégé) n’est à surcharger que si le module a besoin d’un accès plus direct, comme pour une capture d’image — voir Capturer une image.