TV HDMI RPI CEC
Gyvename laikais, kai per televiziją nieko gero neberodo. Net žinios nebeįdomios - kaip kokią muilo operą - vis apie apie tą patį kartoja.
Ką daryti, kad tas didelis plokščias daiktas, televizoriumi vadinamas, taptų nors kiek naudingas savo šeimininkui? Ypač jei jis net nėra išmanus, be interneto bei jūtūbo?
Yra tik viena išeitis - prijungti kokį nors paprotinimo prietaisą. Aš pasirinkau Raspberry Pi 4. Veikia ganėtinai neblogai, tik nesinori vis bėgioti prie klaviatūros užsimanius paspausti pauzę ar praleisti seriją.
Būtų idealu, jei galėčiau panaudoti televizoriaus pultelį…
Pirma mintis - panaudoti IR sensorių, išluptą iš kito seno televizoriaus. Žinoma, jutiklis turėtų būti matomas, padėtas prie televizoriaus. Turėtų eiti kokie nors laidai, reikėtų prilituoti dar porą varžų, nes sensorius valgo 5V, o raspberiui reikia 3.3 V. Dar reikėtų iškoduoti pulto siunčiamus signalus, kad suprastumėme kokie mygtukai nuspausti.
Hmm… Gal yra koks paprastesnis variantas?
O kas jei panaudotume pačio televizoriaus IR jutiklį?..
HDMI CEC
Kas jei pats televizorius mums iškoduotų mygtukus? Jei jis draugiškai su mumis bendrautų?
Pasirodo tokia galimybė yra - televizoriai moka kalbėti per HDMI jungtį. Aš tai netikėtai atradau ieškodamas informacijos kaip įjungti televizorių įsijungus avietei. Paaiškėjo, kad galima ne tik įjungti/išjungti TV, bet ir gauti mygtukų nuspaudimus, informaciją apie televizorių, siųsti mygtukų nuspaudimus ir pan. Ši technologija vadinama HDMI CEC.
Turiu dar vieną gerą žinią - avietės HDMI kontroleris moka dirbti su CEC. Netgi yra bibliotekų prikodinta, komandinių įrankių taipogi. Pati geriausia biblioteka - libCEC.
Ji platinama kartu su cec-client
programa, su kuria paprasta testuoti ir eksperimentuoti kaip viskas veikia. Šaunu ir tai, jog dokumentuota net raspberio versija. O dar geriau - kad yra internete mėtosi paprastas pavyzdys.
X11 mygtukai
Na gerai, pultelio mygtukų paspaudimus gauti galime, tačiau kas iš to? Kaip juos išversi į klaviatūros paspaudimus? Pasirodo linux žmonės yra sukūrę biblioteką, kuri labai palengvina darbą su senoviniu X11. Ta biblioteka vadinasi xdo arba xdotool. Kartais ją galima rasti atskirą, atskirame pakete, kartais ji būna priglausta prie xdotool.
Bibliotekos interfeisas iš ties paprastas ir suprantamas - kviečiam funkciją xdo_keysequence, įrašom mygtukus, kuriuos norime paspausti ir viskas. Jei mygtukų keli - tarp jų rašom pliusą, pvz: “Shift+F5“.
Tik yra viena problemėlė: jei reikia naudoti Media mygtukus (Play, Next, Mute ir pan) - kaip žinoti jų pavadinimus? Reikėjo ilgai knisti internetą, kol suradau šį sąrašą:
http://wiki.linuxquestions.org/wiki/XF86_keyboard_symbols
Kodas
Sukaupėme pakankamai žinių, kad galėtume sulipdyti šiokią tokią programėlę, kuri raspberį paverstų televizoriaus dalimi.
Kodą patalpinau čia: https://github.com/piktaszuikis/aviet-s-cec
Tikiuosi jis pakankamai aiškus, jog papildomų komentarų nereikėtų.
Programėlė nedidelė - įjungia televizorių ir pasirenka save kaip įvesties šaltinį, kad TV pradėtų rodyti avietę, o ne kokias dviračio žinias. Tada programa pradeda klausytis pultelio mygtukų ir bando juos išversti į klaviatūros mygtukus. Nieko mandro, bet užtenka.