IqrfDb: rework to include metadata
-
rozdělit IqrfDb na 2 komponenty (interní API pro DB a enumerační komponenta) -
nejprve posbírat všechny potřebné informace a až následně zasahovat do databáze -
pokusit se vyenumerovat produkt z metadat, fallback při chybách
Aktuální proces
1 Zjištění stavu sítě
- bonded => toEnumerate
- discovered => discovered
- mids => mids
- routing (vrn, parent, zone) ...
Data jsou uložena do množin a map s adresou jako klíč.
Porovnání se záznamy zařízení v DB:
- pokud adresa je v DB a není v bonded, je vložena do mapy pro odestranění
- pokud adresa je v DB a v bonded a sedí MID, adresa je odebrána z množiny pro enumeraci
- pokud adresa je v DB a v bonded a nesedí MID, adresa zůstává v množině pro enumeraci
- pokud adresa není v DB, adresa zůstává v množině pro enumeraci
Pokud je vynucena opětovaná enumerace, provádí se vše.
2 Enumerace zařízení
2.1 Enumerace [C]
- data z coordinatorParams, získáno z IqrfDpa komponenty
- čtveřice hwpid, hwpidver, os, dpa použita jako klíč unikátního produkt a produkt uložen v mapě produktů (pokud čtveřici již známe z předchozího zařízení, použije se existující)
- zařízení uloženo v mapě produkt-zařízení jako dvojice adresa a pointer na unikátní produkt
2.2 Enumerace [N]
2.2a Polling
- pokud se má vyenumerovat jen jedno zařízení
- provádí se OS read a peripheral enumeration dotazy
- ze získaných dat opět unikátní produkt a dvojice produkt-zařízení uloženy
2.2b FRC
- frc hwpid, os, dpa (zde se získává i verze OS, tu není třeba zjišťovat, důležitý je OS build)
- ze získaných dat opět unikátní produkt a dvojice produkt-zařízení uloženy
3 Enumerace produktových balíčků
Pro každé zařízení najít balíček, doplnit produktové informace, vytvořit záznamy produktu a zařízení
3.1 Nalezení balíčku
- pokus získání balíčku z cache dle konkrétní čtveřice hwpid, hwpidver, os, dpa
- pokud selže, zkusit najít produkt v db a použít místo balíčku
- pokud selže, pokus získat balíček dle 0, 0, os dpa
- pokud selže pokus získat balíček s hwpid, hwpidver, os a nižší verzí dpa
3.2 Update produktového záznamu z balíčku
- do produktu doplněny handler, hash, poznámky, custom driver
3.3 Uložení driverů
- pro každou periferii produktu pokus najít záznam driveru v DB (dle čísla periferie a verze driveru)
- pokud driver neexistuje, vytvoří se nový driver záznam v db a id driveru se předá produktu pro pozdější párování
- pokud driver existuje v DB, použije se existující záznam
3.4 Uložení produktů a zařízení
- pokud v DB neexistuje produktový záznam, vytvoří se a dále se vytvoří vztah mezi produktem a drivery
- pokud v DB existuje produktový záznam, použije se
- pokud v DB neexistuje zařízení s adresou, vytvoří se nové
- pokud v DB existuje zařízení s adresou, updatují se jeho položky a změny jsou uloženy
Nakonec jsou načteny produktové drivery.
4 Enumerace standardů
4.1 Selekce zařízení k enumeraci
- u každého zařízení v DB zkontrolovat zda jeho standardy byly vyenumerovány
- pokud nebyly, nebo pokud je vynucena enumerace, adresa zařízení je uložena k enumeraci standardů
4.2 Enumerace jednotlivých standardů
- pro každé zvolené zařízení se zkontroluje v DB jestli má standardy
- pokud implementuje standard
4.2.1 Binout
- enumerace binout request
- pokud existuje záznam pro BinaryOutputDevice, updatovat počet implementovaných BO
- pokud záznam neexistuje, vytvořit nový (deviceId, počet)
4.2.2 Dali
- pokud zařízení má periferii, uložen záznam pro DaliDevice (deviceId)
4.2.3 Light
- enumerace binout request
- pokud existuje záznam pro LightDevice, updatovat počet implementovaných BO
- pokud záznam neexistuje, vytvořit nový (deviceId, počet)
4.2.4 Sensor
- enumerace senzorů zařízení
- pro každý typ kontrola existence záznamu v DB
- pokud typ senzoru existuje, použije se záznam
- pokud neexistuje, vytvoří se nový záznam
- vytvořen nový vztah zařízení-senzor pro každý sensor type v odpovědi enumerace senzorů
Edited by Karel Hanák