2021.01.7

“Távirányító” készítése az IRPlus alkalmazáshoz LIRC fájl alapján

Ez a leírás a hobbielektronika.hu oldalon felvetődött kérdés nyomán született meg, ahol egyik fórumtársunk szerette volna használni az IRPlus alkalmazást, ámde elakadt egy olyan eszköz felvételével, ami nem szerepel az alap eszközök között. Szerencsére megtalálta az ő eszközéhez szükséges távirányító kódjait a http://lirc.sourceforge.net/remotes/ oldalon, s itt kezdődtek az igazi nehézségek.

Elvileg az alkalmazás képes a LIRC fájlt közvetlenül beolvasni, de ez mindig valami hibába ütközött, így alternatív megoldást kellett keresni. Az alkalmazás közvetlen Internetről is le tudja szedni a kérdéses konfigurációt, illetve fájlból beolvasni, de mindkét esetben elhasalt, nem sikerült betölteni a talált LIRC leírót.

A https://irplus-remote.github.io/ oldalon sok hasznosnak látszó dolgot lehet találni, többek között olyan konvertálót is, ami elméletileg képes lehetne a készülékünkhöz talált LIRC fájl átkonvertálására az IRPlus alkalmazáshoz használható "XML" formátumba. Itt az idézőjelek nem véletlenül kerültek be, ugyanis a program irplus kiterjesztésű szöveges fájlja még véletlenül se felel meg az XML szabványnak (hiányzik a bevezető kötelező fejléc). S ez még a kisebb gond - a nagyobb, hogy még a konvertálást se jól végzi, valamilyen furcsa oknál fogva a gombokat nem választja szét, így használhatatlan végeredményt produkál.

Itt kezdett el érdekes lenni a dolog, hiszen az XML szabvány nem bonyolult, a LIRC fájl szintén egyszerű, miért is ne lehetne összehozni? Először arra gondoltam majd készítek egy kis programocskát hozzá, azonban rá kellett döbbennem, hogy ez automatikusan nem lehet jó, mindenképpen kell hozzá a humán erőforrás. Miért is kell kézzel piszkálni? Mivel az IRPlus alkalmazásban a gombok méretét, háttér- és szövegszínét, elhelyezkedését is lehet változtatni, így ezekre az információkra is szükség van ahhoz, hogy esztétikus elrendezést lehessen alkotni, azonban ezeket az információkat a LIRC leíró nem tartalmazza. A gombok elhelyezkedését nem közvetlenül tudjuk befolyásolni, sajnos vannak furcsa elgondolások az alkalmazáson belül.

Szerencsére az alkalmazás nem csak importálni, hanem exportálni is tud eszköz fájlokat, így elég jó kiindulási alapnak tűnt nekem egy biztosan működő fájl átírása. A fórumtárs által keresett eszköz a Yamaha RS-KX1 távirányító volt, így az elképzelésem az volt, hogy egy hasonló eszköz működő beállításait fogom kiexportálni és átnézni, így választásom a Yamaha RAV214 távirányítóra esett, ez alapján kezdtem el az irplus kiterjesztésű XML szerű fájlformátum megértését, s ennek eredményeként írom az itt tapasztaltakat. Persze ahhoz, hogy pár dologra rájöjjek, néznem kellett a telefonon magát az alkalmazást is a kiexportált fájlal együtt, így nyertek értelmet benne bizonyos paraméterek. Maga a fájl felépítése a következő:

<irplus>
 <device manufacturer="gyártó" model="modell" columns="oszlopok" format="IR kód formátuma">
  <button label="felirat" labelSize="gomb minimum magassága" span="oszlopban megadott szélessége" labelColor="felirat színe ARGB formában" backgroundColor="gomb háttérszíne ARGB formában">IR kód</button>
...
 </device>
</irplus>

S akkor jöjjön a részletes ismertető a fájlban található paraméterekről, illetve a tapasztalt hiányosságokról (igen, direkt többes szám). Az alkalmazás a távirányító gombkiosztását oszlop és sor elrendezésben használja, ahol egy sornak mindig azonos magassága van. Azt, hogy mennyi oszlopra ossza fel a telefon képernyőjét, előre meg kell határoznunk és oda kell figyelnünk, hogy a sorokat automatikusan fogja tördelni az alkalmazás. Több beállítást is néztem, ahol általánosan a 12 oszlopnyi felosztás volt jellemző, ami logikus, hiszen így 1-4 gomb mind kiosztható egyforma szélességben (12, 6, 4, 3 oszlop széles gombok).

A device tag paraméterei:

  • manufacturer: a gyártó meghatározása, ez alapján a programban lehet szűrni, így nem baj, ha egyformán írjuk be az azonos gyártót (ugye a HP, Hewlett Packard, HewlettPackard, ... mind ugyan az, mégis más, ha meg kell jelennie); szöveges paraméter
  • model: modell meghatározása; szöveges paraméter
  • columns: a képernyőt mennyi oszlopra ossza fel; egész szám paraméter
  • format: az infra kód formátuma, amiben a gombokhoz tartozó kódot fogjuk megadni; szöveges paraméter, eddig PROTOEDIT_HEX és WINLIRC_NEC1 értékekkel találkoztam

A gombok meghatározására szolgáló button tag paraméterei:

  • label: a gombra kerülő felirat, az UNICODE karakterek HTML formátumban kerülhetnek bele, hogy megfelelően jelenjenek meg; szöveges paraméter
  • labelSize: a gomb általunk kívánt minimum magassága, ha a szöveg nem fér ki széltében, akkor automatikusan tördeli és meg fogja növelni ezt a méretet megjelenítéskor; lebegőpontos szám egy tizedesjegyig, tizedesponttal
  • span: a gomb pontos szélessége oszlopban meghatározva; egész szám
  • labelColor: a gombon szereplő szöveg színe ARGB formátumban; szöveges paraméter, s HTML-lel ellentétben csak az érték kerül be, a bevezető kettőskereszt nem!
  • backgroundColor: a gomb háttérszíne ARGB formában; szöveges paraméter, s HTML-lel ellentétben csak az érték kerül be, a bevezető kettőskereszt nem!

A gomb funkcióját (az infra kódot, amit ki kell küldenie) pedig a button indító és /button lezáró tag közé kell beírni (<button paraméterlista>@@@</button> sorban a @@@ helyére).

A két színparaméter elhagyható, ha nem adunk meg semmit, akkor az alapértelmezett színnel jeleníti meg a program a gombot. Itt kerül elő az első olyan hiányosság, ami talán nem volt feltűnő, hogy a gomboknak nem mondhatjuk meg melyik sorba kerülnek, se azt, hogy melyik oszlopba! A program az irplus fájlt sorról-sorra haladva dolgozza fel, s rajzolja ki a gombokat egymás után. Amikor egy gomb eléri az oszlop végét, akkor a következőt már új sorba fogja rajzolni. Sajnos én nem találtam módot rá, hogy üres mezőt rakjak be (bár lehet, hogy a gomb háttérszínével trükközve és a kódot kihagyva működhet), így a pontos pozíciót nem tudjuk könnyedén meghatározni, mindig az előző gomb után fog következni. A gombokra csakis szöveges paraméter kerülhet, képet nem lehet rárajzolni - ezt a hiányosságot viszont az Unicode karakterek sokasága tudja kicsit enyhíteni. Egy sorban minden gomb ugyan olyan magas lesz, mint az adott sor legmagasabb gombja, ezt tervezéskor vegyük figyelembe! S talán a legfontosabb - a fájl karakterkódolása ANSI legyen, bár XML esetében az UTF8 a megszokott...

Ennyi ismertető után az írásom elején említett probléma megoldását is megmutatom, hogy könnyebb legyen megemészteni az eddig leírtakat. A cikkhez mellékelem az elkészült eszközleírót, amit már be lehet importálni az IRPlus programba, s visszajelzés alapján megfelelően működik is.

Amire szükségünk lesz a távirányító fájl elkészítéséhez:

  • LIRC fájl a korábban említett http://lirc.sourceforge.net/remotes/ oldalról
  • egy felismerhető kép (fotó/rajz) a távirányítóról, ebben a kedvenc keresőnk képkeresője segíthet
  • szövegszerkesztő (esetemben a notepad++)
  • segíthet, de nem feltétlen szükséges segédeszköz a Microsoft Excel és klónjai, mint a LibreOffice Calc
  • segít egy, a programból kiexportált működő irplus fájl, de az eddig ismertetett dolgokat betartva ez nem szükséges

Fórumtársunk kérésére én a Yamaha RS-KX1 távirányítót másoltam le, ehhez rendelkezésre áll a gombok leírója LIRC formátumban, így nem magamnak kellett kinyernem. A LIRC fájl számunkra lényeges tartalma a gombokhoz tartozó IR jelsorozatokat hexa formában sorolja, ahogy alább látható.

      begin codes
          KEY_PLAY                 0x00000000FE0100FF        #  Was: PLAY
          KEY_STOP                 0x00000000FE01C03F        #  Was: STOP
          KEY_FASTFORWARD          0x00000000FE0140BF        #  Was: FFWD
          KEY_REWIND               0x00000000FE01807F        #  Was: REWIND
          SEARCH_FWD               0x00000000FE0150AF
          SEARCH_REW               0x00000000FE01D02F
          KEY_RECORD               0x00000000FE0120DF        #  Was: RECORD/PAUSE
          DECK_A/B                 0x00000000FE01609F
          KEY_RECORD               0x00000000FE01A05F        #  Was: REC_MUTE
          MONITOR                  0x00000000FE01F00F
          DIR_A                    0x00000000FE01E01F
          DIR_B                    0x00000000FE0110EF
          INTRO_SCAN_>             0x00000000FE017887
          INTRO_SCAN_<             0x00000000FE01F807
          DUBBING                  0x00000000FE01906F
          COUNTER_RESET            0x00000000FE01B04F
          COUNTER_REMAIN           0x00000000FE01B847
          COUNTER_MEMORY           0x00000000FE01708F
          COUNTER_TAPE             0x00000000FE0130CF
      end codes

Ez a kódsorozat az általam kiexportált fájlhoz képest mutat pár eltérést. Az egyik szembeötlő különbség, hogy a kiexportált irplus fájl a kódokat 0x1234 0x1234 formában adja meg, míg itt egyben kapjuk a hexa kódot. Ami viszont rögtön szembe ötlött, hogy az első kódrészlet mindig megegyezett a fájlon belül, mint ahogy itt is. Így tehát a két formátum közti konvertáláshoz szinte semmi mást nem kell tennünk, mint kettébontani a LIRC leíró kódját, azaz mondjuk a COUNTER_TAPE kód ezentúl 0xFE01 0x30CF lesz. Itt vetettem be a "szövegszerkesztő" segédeszközöm, azaz az Excel-t. Még mielőtt valaki meglepődne, elárulom, elég barátságos szöveg manipuláló függvények vannak ebben a táblázatkezelő programban, s ha egy sorra megírjuk amit szeretnénk, akkor azt egy egérmozdulat csak alkalmazni a többire...

Ebben a lépésben döntöttem el azt is, hogy milyen szöveg kerüljön a gombokra, illetve melyik gomb milyen széles lesz, a végtelen egyszerű képletet követve. A távirányító fotója alapján a gombbal egy sorban lévő gombok számától függően kapott egy szélességet, ha abban a sorban 1 gomb van, akkor 12 (teljes képernyőnyi), ha 2, akkor 6, ha 3, akkor 4 oszlop széles lett a gomb a sorban lévő többivel együtt. Az excelben alkalmazott képleteim az összefűz, közép és jobb függvényekből lettek megalkotva, mellékelem az íráshoz.

Miután az excel segítségével generált sorok elkészültek, azokat kézzel a megfelelő pozícióba (megfelelő sorba) húztam notepad++-ban, majd következett az első próbateszt, ahol beimportáltam az elkészített fájlt. Működött elsőre, ahogy vártam is, már csak a csinosítás volt hátra. A csinosítás során határoztam meg a színeket, illetve javítottam a feliraton, ahol az indokolt volt. Az eredmény magáért beszél.

Mindez a művelet megközelítőleg két órát emésztett fel a keresgéléssel, megértéssel, mindennel együtt, viszont ha egy következőt kellene ez alapján elkészíteni, nem igényelne tíz percnél többet.

Kategória: Segédletek