Stap 6: Hoe het werkt
Overzicht
Het basisidee is dat er een ééntoewijzing tussen het indrukken van een knop op uw afstandsbediening en een toetsencombinatie die naar uw PC verzonden. IRK! gewoon leert uw externe leren een code waarmee een bepaalde toetsencombinatie te drukken. Zodra je hebt die code geprogrammeerd op een van uw externe knoppen, zal de code terug naar IRK overbrengen door het op die knop te drukken! die zal, uiteraard, erkennen dan stuur het naar de PC als een USB-toetsaanslag.
Omdat IRK! gegenereerd van de IR-code, het kan niet eventueel niet erkennen - zo IRK! hoeft niet te ondersteunen van een ontelbaar verschillende IR afstandsbediening modellen!
USB-toetsaanslagen
USB-toetsaanslagen worden verzonden naar de PC met behulp van de codes die zijn gedefinieerd in de specificatie USB Human Interface Device (HID) gebruik tabellen . Dat specificatie, bijvoorbeeld definieert, dat code 0x04 de letter betekent "a". Voor een toetsenbord-apparaat, zoals IRK!, extra "modifier" codes kunnen worden verzonden naar de PC om aan te geven of de GUI (aka Windows toets, Apple-toets, Super sleutel), de controle, de Alt en de Shift-toetsen ook "ingedrukt zijn". Als u bijvoorbeeld voor het verzenden van een hoofdletter "a", IRK! stuurt 0x02 (betekenis Shift is ingedrukt) en 0x04 ("a" drukt meaning). De computer interpreteert die volgorde als betekenis hoofdletter "A". Onmiddellijk na het verzenden van die reeks, IRK! stuurt een "null" reeks 0x00 en 0x00 om aan te geven dat geen toets of key modifiers momenteel wordt ingedrukt. Dit wordt vereist door het USB-protocol anders dat de PC zullen denken dat u ingedrukt houdt de Shift en "A" sleutels tot de ontvangst van de volgende USB-key code.
Dus, je kunt zien dat IRK! alleen moet zitten kundig voor "leren" een afstandsbediening leren een opeenvolging van 0x02 gevolgd door 0x04 te vertegenwoordigen de letter "A". Wanneer de gebruiker op die knop drukt op de afstandsbediening, IRK! ontvangt met behulp van de infrarood-ontvanger en stuurt u de volgorde van de 0x02 0x04 op de PC die zal worden geïnterpreteerd als de gebruiker op Shift + A op een USB-toetsenbord te drukken.
Infrarood opdracht Format
IRK! alleen erkent infrarood signalen die zijn geadresseerd aan een bepaalde IRK! eenheid. Om dit te bereiken, is een byte van het adres ook verzonden/ontvangen op de infrarood pad. Elke infrarood opdracht is een reeks van zes (6) bytes als volgt:
AA, AA', UX, UX', JJ, YY'
Waar:
AA is de byte van het adres van 0x00 aan 0xFF
AA' is de omgekeerde adres byte (alle degenen geconverteerd naar nullen en vice versa)
UX is de pagina gebruik (U = 0x0 aan 0xF) en, voor het gebruik van het toetsenbord, de modifier nybble X (Control, Alt, Shift)
UX' is de omgekeerde UX-byte
JJ is de byte van de opdracht (voor het gebruik van het toetsenbord, de USB key code)
JJ ' is de omgekeerde opdracht byte
De reden voor het overbrengen van een omgekeerde kopie van elke byte is te verminderen van de kans dat interferentie heeft veroorzaakt een ongeldig bevel te ontvangen. Bijvoorbeeld, je zou niet willen dat uw verzoek om te "spelen deze opname" moet worden uitgelegd als "Verwijder deze opname" gewoon omdat een vlieg het infrarood signaal pad in dat moment onderbroken!
Als u wilt valideren elke opdracht is ontvangen, IRK! controleert dat AA (omgekeerde) gelijk is aan AA', en dat UX (omgekeerde) gelijk is aan de UX', en die JJ (omgekeerde) resulteert in YY', en dat beide AA gelijk is aan deze IRK!' s apparaatadres of AA is gelijk aan 0xFF (het broadcast-adres). Als al het bovenstaande is true, dan IRK! kan vrij zeker dat er een geldige opdracht en zal handelen.
Infrarode transmissie techniek
IRK! Pulse Width Modulation (PWM) gebruikt voor het coderen van de serie van 1's en 0's die vormen van elke opdracht. U kon het herprogrammeren van de microcontroller als u wilt gebruiken een andere techniek zoals Manchester-codering methode maar PWM werkt prima. Bijvoorbeeld, de USB '1' toets wanneer gecodeerd met PWM ziet eruit als de afbeelding hierboven.
Wanneer het signaal is "laag", wordt een IR-uitbarsting van pulsen op 38 kHz overgebracht. Omgekeerd, wanneer het signaal is "hoge" het vertegenwoordigt een periode van stilte.
Er is een toonaangevende uitbarsting voor 1000 µs dan voor 600 µs stilte (in versies van IRK! voordat 2.04, het was 9400 µs en 4500 µs respectievelijk). Deze toonaangevende uitbarsting was voorgeschreven oudere infraroodontvanger modules te "trainen" hun Automatic Gain Control (AGC) circuits zodat ze kunnen bepalen wat een normale signaalniveau was. Hedendaagse IR ontvangers hoeft meestal niet aan deze eis, maar uw externe leren mogelijk oude zo IRK! nog steeds wordt ondersteund.
Daarna een '1' is gecodeerd als een korte uitbarsting, gevolgd door een lange stilte, en een '0' is gecodeerd als een korte uitbarsting, gevolgd door een korte stilte.
Broadcast adres
Een byte van het adres van 0xFF is erkend door alle IRK! apparaten die u kan hebben gebouwd. Het is dus mogelijk voor één afstandsbediening voor het verzenden van een opdracht aan alle IRK! apparaten gelijktijdig.
Opdrachten voor het beheer van systeem
IRK! ook ondersteunt de USB gedefinieerde "systeem" opdrachten genaamd "Slapen", "Wake" en "Power Off". Sommige USB-toetsenborden hebben toetsen voor deze functies, maar ze zijn niet intrinsiek functies van een toetsenbord. Ieder voldoende geprogrammeerde USB-apparaat, zoals IRK!, USB systeem besturingsopdrachten kunt verzenden naar uw PC te vragen het te gaan "Slapen" modus, bijvoorbeeld. Het volgende is een samenvatting van de resultaten van de opdrachten van het System Control op mijn PC (jouw snelheid kan variëren):
Power Off CPU uit, schijf uit, Monitor uit, USB = off
Slapen CPU, schijf, Monitor af, USB uitschakelt op = op
Wakker = bevat niet werken!
Power schakelaar ingedrukt = CPU uit, schijf uit, Monitor uit, USB op
Consument apparaat opdrachten
IRK! ondersteunt de USB gedefinieerde "consument apparaat" commando's zoals "Mute", "Vol +", "Vol-", "Rekenmachine", "Browser Home", u kunt deze opdrachten gebruiken om te controleren uw mediaspeler (afspelen/pauzeren, stoppen, achteruit, vooruit enz) of starten van toepassingen (rekenmachine, Browser, Media speler enz.).
Voor een volledige lijst van de consument apparaat-opdrachten die u kunt gebruiken, gewoon downloaden het USB menselijke Interface apparaat gebruik tabellen document. Dat klinkt ingewikkeld, maar de specificatie is niet zo moeilijk te lezen. In het bijzonder kijken naar tabel 17 "Consument gebruik Page". Het maakt niet uit dat IRK! toont niet de namen van alle deze opdrachten als u scroll via hen, kunt u nog steeds vragen IRK! om te sturen naar uw USB moet host (bv Linux, Windows, MythTV etc)- en de USB-host uitvoeren de bijbehorende functie.
Aan-/ uitschakelaar en Reset schakelaar opdrachten (experimenteel)
Oplettende lezers zullen hebben gemerkt dat er een probleem met het proberen om IRK! "Power On" uw PC - omdat niet alle pc's leveren macht om USB-apparaten altijd wanneer de kracht van het systeem is uitgeschakeld en IRK! hangt af van de macht wordt geboden door de USB-interface van het systeem dat is aangesloten.
Een manier rond dit is aan de macht van het IRK! circuit van de "Standby" spanning (Vsb) van de PC power supply. VSB op oudere computers leveringen + 5V rond 10 mA ook al hebt u uw PC uitgeschakeld. Meer recente ATX voedingen kunnen Vsb leveren tegen 2A. Dit betekent dat, als aangedreven van Vsb, IRK! kan wakker luisteren voor IR-opdrachten, zolang de PC is aangesloten op het stopcontact van de macht te blijven. De IRK! circuit voorziet in de macht en Reset knoppen in te drukken op uw PC, maar u moet een of andere manier het aanboren van de Vsb-uitvoer van de voeding van uw PC's ertoe brengen om te werken. Ik weet niet van elke moederborden met een gemakkelijk toegankelijke kop-speld voor Vsb. Dit betekent dat als u wilt dat deze functie, dan u wellicht fysiek breken de Vsb draad van de voeding van de PC. De Vsb draad moet de paarse draad.
Merk op dat het aandrijven IRK! van de Vsb is niet getest op het moment, maar in principe moeten werken. De aan-/ uitschakelaar en Reset schakelaar functies werken zolang IRK! al wordt vanaf USB aangedreven.