lirc(4) Device Drivers Manual lirc(4) NUME lirc - dispozitive lirc (Linux Infrared remote control) DESCRIERE Dispozitivele de caractere /dev/lirc* ofera o interfaa bidirecionala de nivel scazut pentru telecomenzile cu infrarou (IR). Majoritatea acestor dispozitive pot primi, iar unele pot trimite. Atunci cand primete sau trimite date, controlorul funcioneaza in doua moduri diferite, in funcie de hardware-ul subiacent. Unele echipamente hardware (de obicei, placi TV) decodifica semnalul IR intern i furnizeaza apasarile de buton decodificate ca valori ale codului de scan. Controlorii pentru acest tip de hardware funcioneaza in modul LIRC_MODE_SCANCODE. De obicei, un astfel de hardware nu accepta trimiterea de semnale IR. In plus, un astfel de hardware poate decodifica doar un set limitat de protocoale IR, de obicei doar protocolul telecomenzii specifice care este inclusa, de exemplu, cu o placa TV. Alte echipamente hardware furnizeaza un flux de durate ale impulsurilor/spaiilor. Astfel de controlori funcioneaza in modul LIRC_MODE_MODE2. Acest tip de hardware poate fi utilizat cu (aproape) orice tip de telecomanda. Acest tip de hardware poate fi utilizat i in modul LIRC_MODE_SCANCODE, caz in care decodoarele IR ale nucleului vor decoda IR. Aceste decodoare pot fi scrise in BPF extins (a se vedea bpf(2)) i ataate la dispozitivul lirc. Uneori, acest tip de hardware accepta i trimiterea de date IR. Ioctl-ul LIRC_GET_FEATURES (a se vedea mai jos) permite, printre altele, sa se verifice daca primirea i trimiterea sunt acceptate i in ce moduri. Citirea intrarii cu modul LIRC_MODE_MODE2 In modul LIRC_MODE_MODE2, datele returnate de read(2) furnizeaza valori pe 32 de bii reprezentand un spaiu sau o durata de impuls. Timpul duratei (microsecunde) este codificat in cei 24 de bii inferiori. Impulsul (cunoscut i sub denumirea de flash) indica o durata de detectare a luminii infraroii, iar spaiul (cunoscut i sub denumirea de spaiu) indica o durata fara infrarou. Daca durata spaiului depaete timpul de inactivitate, este livrat un pachet special de timp de inactivitate, care marcheaza sfaritul unui mesaj. Cei 8 bii superiori indica tipul de pachet: LIRC_MODE2_SPACE Valoarea reflecta o durata a spaiului (microsecunde). LIRC_MODE2_PULSE Valoarea reflecta durata unui impuls (microsecunde). LIRC_MODE2_FREQUENCY Valoarea reflecta o frecvena (Hz); consultai ioctl-ul LIRC_SET_MEASURE_CARRIER_MODE. LIRC_MODE2_TIMEOUT Valoarea reflecta o durata a spaiului (microsecunde). Pachetul reflecta un timp de ateptare; consultai ioctl-ul LIRC_SET_REC_TIMEOUT_REPORTS. LIRC_MODE2_OVERFLOW Receptorul IR s-a confruntat cu o depaire de capacitate i, prin urmare, datele lipsesc (de la Linux 5.18). Citirea intrarii in modul LIRC_MODE_SCANCODE In modul LIRC_MODE_SCANCODE, datele returnate de read(2) reflecta apasarile de buton decodate, in structura lirc_scancode. Codul de scanare este stocat in campul scancode, iar protocolul IR este stocat in rc_proto. Acest camp are una dintre valorile din structura enum rc_proto. Scrierea ieirii in modul LIRC_MODE_PULSE Datele scrise in dispozitivul de caractere folosind write(2) sunt o secvena de impulsuri/spaii de valori intregi. Impulsurile i spaiile sunt marcate doar implicit prin poziia lor. Datele trebuie sa inceapa i sa se incheie cu un impuls, deci trebuie sa includa intotdeauna un numar impar de eantioane. Funcia write(2) se blocheaza pana cand datele au fost transmise de hardware. Daca sunt furnizate mai multe date decat poate trimite hardware-ul, apelul write(2) eueaza cu eroarea EINVAL. Scrierea ieirii in modul LIRC_MODE_SCANCODE Datele scrise in dispozitivele de caractere trebuie sa fie o singura structura lirc_scancode. Campurile scancode i rc_proto trebuie completate, toate celelalte campuri trebuie sa fie 0. Codificatoarele IR ale nucleului vor converti scan-codul in impulsuri i spaii. Protocolul sau codul de scanare nu este valid, sau dispozitivul lirc nu poate transmite. COMENZI IOCTL #include /* Dar consultai seciunea ERORI */ int ioctl(int fd, int cmd, int *val); Urmatoarele operaii ioctl(2) sunt furnizate de dispozitivul de caractere lirc pentru a sonda sau modifica parametrii hardware specifici lirc. Comenzi acceptate intotdeauna Dispozitivele /dev/lirc* accepta intotdeauna urmatoarele comenzi: LIRC_GET_FEATURES (void) Returneaza o masca de bii de caracteristici combinate; consultai CARACTERISTICI. Daca un dispozitiv returneaza un cod de eroare pentru LIRC_GET_FEATURES, se poate presupune ca acesta nu este un dispozitiv lirc. Comenzi opionale Unele dispozitive lirc accepta comenzile enumerate mai jos. Cu excepia cazului in care se specifica altfel, acestea eueaza cu eroarea ENOTTY daca operaia nu este acceptata sau cu eroarea EINVAL daca operaia a euat sau au fost furnizate argumente nevalide. Daca un controlor nu anuna suportul pentru anumite caracteristici, invocarea ioctl-urilor corespunzatoare va eua cu eroarea ENOTTY. LIRC_GET_REC_MODE (void) Daca dispozitivul lirc nu are receptor, aceasta operaie eueaza cu eroarea ENOTTY. In caz contrar, se returneaza modul de recepie, care va fi unul dintre: LIRC_MODE_MODE2 Controlorul returneaza o secvena de durate ale impulsurilor/spaiilor. LIRC_MODE_SCANCODE Controlorul returneaza valorile structurii lirc_scancode, fiecare dintre acestea reprezentand o apasare de buton decodificata. LIRC_SET_REC_MODE (int) Stabilete modul de recepie. val este fie LIRC_MODE_SCANCODE, fie LIRC_MODE_MODE2. Daca dispozitivul lirc nu are receptor, aceasta operaie eueaza cu eroarea ENOTTY. LIRC_GET_SEND_MODE (void) Returneaza modul de trimitere. Este acceptat modul LIRC_MODE_PULSE sau LIRC_MODE_SCANCODE. Daca dispozitivul lirc nu poate trimite, aceasta operaie eueaza cu eroarea ENOTTY. LIRC_SET_SEND_MODE (int) Stabilete modul de trimitere. val este fie LIRC_MODE_SCANCODE, fie LIRC_MODE_PULSE. Daca dispozitivul lirc nu poate trimite, aceasta operaie eueaza cu eroarea ENOTTY. LIRC_SET_SEND_CARRIER (int) Stabilete frecvena de modulaie. Argumentul este frecvena (Hz). LIRC_SET_SEND_DUTY_CYCLE (int) Stabilete ciclul de funcionare al purtatoarei. val este un numar in intervalul [0,100] care descrie laimea impulsului ca procent din ciclul total. In prezent, nu este definita nicio semnificaie speciala pentru 0 sau 100, dar valorile sunt rezervate pentru utilizare viitoare. LIRC_GET_MIN_TIMEOUT(void) LIRC_GET_MAX_TIMEOUT(void) Unele dispozitive au temporizatoare interne care pot fi utilizate pentru a detecta absena activitaii IR pentru o perioada lunga de timp. Acest lucru poate ajuta lircd(8) sa detecteze ca un semnal IR s-a terminat i poate accelera procesul de decodare. Aceste operaii returneaza valori intregi cu timpul de ateptare minim/maxim care poate fi definit (microsecunde). Unele dispozitive au un timp fix de ateptare. Pentru astfel de controlori, LIRC_GET_MIN_TIMEOUT i LIRC_GET_MAX_TIMEOUT vor eua cu eroarea ENOTTY. LIRC_SET_REC_TIMEOUT (int) Stabilete valoarea intreaga pentru timpul de inactivitate IR (microsecunde). Pentru a fi acceptata, valoarea trebuie sa fie in limitele definite de LIRC_GET_MIN_TIMEOUT i LIRC_GET_MAX_TIMEOUT. O valoare de 0 (daca este acceptata de hardware) dezactiveaza toi timpii de ateptare hardware, iar datele trebuie raportate cat mai curand posibil. Daca valoarea exacta nu poate fi definita, atunci trebuie definita urmatoarea valoare posibila mai mare decat valoarea data. LIRC_GET_REC_TIMEOUT (void) Returneaza timpul de inactivitate curent (microsecunde). Disponibila de la Linux 4.18. LIRC_SET_REC_TIMEOUT_REPORTS (int) Activeaza (val este 1) sau dezactiveaza (val este 0) pachetele de timp de ateptare in LIRC_MODE_MODE2. Comportamentul acestei operaii a variat in funcie de versiunile nucleului: o Incepand cu Linux 5.17: pachetele de timp de ateptare sunt intotdeauna activate, iar acest ioctl este un no-op. o Incepand cu Linux 4.16: pachetele de timp de expirare sunt activate in mod implicit. De fiecare data cand dispozitivul lirc este deschis, operaia LIRC_SET_REC_TIMEOUT poate fi utilizata pentru a dezactiva (i, daca se dorete, pentru a reactiva ulterior) timpul de ateptare pe descriptorul de fiier. o In Linux 4.15 i versiunile anterioare: pachetele de timp de ateptare sunt dezactivate in mod implicit, iar activarea lor (prin LIRC_SET_REC_TIMEOUT) pe orice descriptor de fiier asociat cu dispozitivul lirc are ca efect activarea timpilor de ateptare pentru toate descriptoarele de fiier care se refera la acel dispozitiv (pana cand timpii de ateptare sunt dezactivai din nou). LIRC_SET_REC_CARRIER (int) Stabilete limita superioara a frecvenei purtatoare de recepie (Hz). A se vedea LIRC_SET_REC_CARRIER_RANGE. LIRC_SET_REC_CARRIER_RANGE (int) Stabilete limita inferioara a frecvenei purtatoare de recepie (Hz). Pentru ca acest lucru sa aiba efect, stabilii mai intai limita inferioara utilizand ioctl-ul LIRC_SET_REC_CARRIER_RANGE i apoi limita superioara utilizand ioctl-ul LIRC_SET_REC_CARRIER. LIRC_SET_MEASURE_CARRIER_MODE (int) Activeaza (val este 1) sau dezactiveaza (val este 0) modul de masurare. Daca este activat, de la urmatoarea apasare de tasta, controlorul va trimite pachete LIRC_MODE2_FREQUENCY. In mod implicit, acesta ar trebui sa fie dezactivat. LIRC_GET_REC_RESOLUTION (void) Returneaza rezoluia controlorului (microsecunde). LIRC_SET_TRANSMITTER_MASK (int) Activeaza setul de transmiatoare specificate in val, care conine o masca de bii in care fiecare transmiator activat este un 1. Primul transmiator este codificat de bitul cel mai puin semnificativ i aa mai departe. Atunci cand este data o masca de bii nevalida, de exemplu un bit este activat chiar daca dispozitivul nu are atat de multe transmiatoare, aceasta operaie returneaza numarul de transmiatoare disponibile i nu face nimic in caz contrar. LIRC_SET_WIDEBAND_RECEIVER (int) Unele dispozitive sunt echipate cu un receptor special de banda larga care este destinat a fi utilizat pentru a invaa ieirea unei telecomenzi existente. Acest ioctl poate fi utilizat pentru a activa (val egal cu 1) sau dezactiva (val egal cu 0) aceasta funcionalitate. Acest lucru ar putea fi util pentru dispozitivele care, altfel, au receptoare cu banda ingusta care le impiedica sa fie utilizate cu anumite telecomenzi. De asemenea, receptoarele cu banda larga pot fi mai precise. Pe de alta parte, dezavantajul lor este, de obicei, gama redusa de recepie. Nota: receptorul de banda larga poate fi activat implicit daca activai rapoartele purtatoarei. In acest caz, acesta va fi dezactivat de indata ce dezactivai rapoartele purtatoarei. Incercarea de a dezactiva un receptor de banda larga in timp ce rapoartele purtatoarei sunt active nu va avea niciun efect. CARACTERISTICI ioctl-ul LIRC_GET_FEATURES returneaza o masca de bii care descrie caracteristicile controlorului. Urmatorii bii pot fi returnai in masca: LIRC_CAN_REC_MODE2 Controlorul este capabil sa recepioneze utilizand LIRC_MODE_MODE2. LIRC_CAN_REC_SCANCODE Controlorul este capabil sa recepioneze folosind LIRC_MODE_SCANCODE. LIRC_CAN_SET_SEND_CARRIER Controlorul accepta schimbarea frecvenei de modulare utilizand LIRC_SET_SEND_CARRIER. LIRC_CAN_SET_SEND_DUTY_CYCLE Controlorul accepta modificarea ciclului de funcionare utilizand LIRC_SET_SEND_DUTY_CYCLE. LIRC_CAN_SET_TRANSMITTER_MASK Controlorul accepta schimbarea emiatorului (emiatoarelor) activ(e) utilizand LIRC_SET_TRANSMITTER_MASK. LIRC_CAN_SET_REC_CARRIER Controlorul accepta stabilirea frecvenei purtatoare de recepie utilizand LIRC_SET_REC_CARRIER. Orice dispozitiv lirc de la fuzionarea controlorilor in Linux 2.6.36 trebuie sa aiba activata funcia LIRC_CAN_SET_REC_CARRIER_RANGE daca este activata funcia LIRC_CAN_SET_REC_CARRIER. LIRC_CAN_SET_REC_CARRIER_RANGE Controlorul accepta LIRC_SET_REC_CARRIER_RANGE. Limita inferioara a purtatoarei trebuie mai intai stabilita utilizand ioctl-ul LIRC_SET_REC_CARRIER_RANGE, inainte de a utiliza ioctl-ul LIRC_SET_REC_CARRIER pentru a stabili limita superioara. LIRC_CAN_GET_REC_RESOLUTION Controlorul accepta LIRC_GET_REC_RESOLUTION. LIRC_CAN_SET_REC_TIMEOUT Controlorul accepta LIRC_SET_REC_TIMEOUT. LIRC_CAN_MEASURE_CARRIER Controlorul accepta masurarea frecvenei de modulaie utilizand LIRC_SET_MEASURE_CARRIER_MODE. LIRC_CAN_USE_WIDEBAND_RECEIVER Controlorul accepta modul de invaare utilizand LIRC_SET_WIDEBAND_RECEIVER. LIRC_CAN_SEND_PULSE Controlorul accepta trimiterea folosind LIRC_MODE_PULSE sau LIRC_MODE_SCANCODE ERORI Utilizarea acestor dispozitive necesita fiierul de antet al sursei nucleului lirc.h. Acest fiier nu este disponibil inainte de Linux 4.6. Utilizatorii de nuclee mai vechi ar putea folosi fiierul inclus in . CONSULTAI I ir-ctl(1), lircd(8), bpf(2) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.12 1 septembrie 2024 lirc(4)