door Paul » 13 jan 2014, 20:14
Het is een heeeeel lang verhaal. Maar een tipje van de sluier:
Signalen opvangen en decoderen lijkt simpel maar het probleem is eigenlijk tweeledig:
1. We kennen niet op voorhand de eigenschappen van het signaal;
2. We kennen ook niet de eigenschappen van de ontvanger, en die verschillen nog qua doorgifte ruis, up-time na inschakelen, etc.
Gevolg is dat het lastig is om vreemde signalen te onderdrukken met behoud van de events die je wel nodig hebt. Onze Nodo denktank heeft het volgende gemaakt (de nummers verwijzen naar de bijgevoegde afbeelding. Signaal is een HomeEasy HE844 handzender).
1. Er komt ruis binnen. De scanloop duurt ong. 14uSec. Dus een KAKU puls van 350uSec. Zal zeker niet worden gemist. Zodra er een signaal aankomt wordt de hoofdloop verkort zodat er geen uitstapjes meer zijn naar Serial, Ethernet, Timers, Wired, etc. Die worden gebufferd.
2. Signaal komt binnen en deze wordt met opgevangen in de RawSignal[] array.
3. Deze 'spike' geeft aan dat er een signaal ontvangen is >= 8 hele geldige pulsen.
4. FetchSignal() wordt verlaten. De Nodo gaat het signaal omzetten naar een event.
5. Event is berekend en de Nodo staat halverwege de volgende herhaling van het signaal weer gereed voor ontvangst. Echter de Nodo wacht tot het restant van het signaal voorbij is.
6. Als restant voorbij, dan wordt de volgende pulsenreeks weer opgeslagen in RawSignal[]
7. Nieuwe hele signaal is binnen en wederom herkend als een geldig signaal. Herhalen van stap-4.
Dit is op signaal niveau. Op event niveau hebben we ook maatregelen genomen:
* Als er een event (Commando, Event, Plugin) wordt herkend en er volgt binnen zeer korte tijd een RawSignal, dan wordt dit geïnterpreteerd als een stoorpuls en dus genegeerd.
* Als er een event (...) wordt herkend en er volgt binnen zeer korte tijd exact hetzelfde event, dan wordt dit geïnterpreteerd als een staart van een reperterend signaal (b.v. KAKU)
- Bijlagen
-
Groeten Paul