Provided by: manpages-ru_4.19.0-7_all bug

ИМЯ

       lirc - устройства lirc

ОПИСАНИЕ

       Символьные  устройства /dev/lirc* предоставляют низкоуровневый двунаправленный интерфейс к
       аппаратуре с инфракрасным (IR) управлением. Большинство  этих  устройств  может  принимать
       данные,  а не которые и отправлять. При приёме или отправке данных драйвер работает в двух
       различных режимах, в зависимости от имеющейся аппаратуры.

       Некоторая аппаратура (обычно,  ТВ-карты)  декодирует  IR-сигнал  самостоятельно  и  выдаёт
       обработанные  события  о  нажатых  кнопках  в  виде  значений  сканкодов.  Драйверы  такой
       аппаратуры работают в режиме LIRC_MODE_SCANCODE. Обычно, такая аппаратура не  поддерживает
       отправку IR-сигналов. Кроме того, она может декодировать ограниченный набор IR-протоколов,
       обычно, только определённых пультов, поставляющихся с ней в комплекте.

       Другой вид аппаратуры выдаёт  потоки  длительностей  наличия/отсутствия  импульсов.  Такие
       драйверы работают в режиме LIRC_MODE_MODE2. Она может использоваться с любым (почти) видом
       аппаратуры. Этот тип аппаратуры также можно использовать в  режиме  LIRC_MODE_SCANCODE,  в
       этом  случае  сигнал декодируют декодеры ядра. Эти декодеры можно писать в расширенных BPF
       (смотрите bpf(2))  и  присоединять  к  устройству  lirc.  Иногда  такая  аппаратура  также
       поддерживает отправку данных через IR.

       Команда ioctl LIRC_GET_FEATURES (смотрите далее) позволяет определить доступность приёма и
       отправки, режимы, а также другие возможности.

   Чтение входящих данных в режиме LIRC_MODE_MODE2
       In the LIRC_MODE_MODE2  mode,  the  data  returned  by  read(2)   provides  32-bit  values
       representing  a  space  or  a  pulse duration.  The time of the duration (microseconds) is
       encoded in the lower 24 bits.  Pulse (also  known  as  flash)   indicates  a  duration  of
       infrared  light being detected, and space (also known as gap) indicates a duration with no
       infrared.  If the duration of space exceeds the  inactivity  timeout,  a  special  timeout
       package  is  delivered,  which  marks the end of a message.  The upper 8 bits indicate the
       type of package:

       LIRC_MODE2_SPACE
           Значение представляет длительность отсутствия импульса (микросекунды).

       LIRC_MODE2_PULSE
           Значение представляет длительность импульса (микросекунды).

       LIRC_MODE2_FREQUENCY
           Значение     представляет     частоту      (Гц);      смотрите      команду      ioctl
           LIRC_SET_MEASURE_CARRIER_MODE.

       LIRC_MODE2_TIMEOUT
           Значение представляет длительность отсутствия импульса (микросекунды). Пакет описывает
           паузу; смотрите ioctl LIRC_SET_REC_TIMEOUT_REPORTS.

       LIRC_MODE2_OVERFLOW
           The IR receiver encountered an overflow, and as a result data is missing (since  Linux
           5.18).

   Чтение входящих данных в режиме LIRC_MODE_SCANCODE
       В  режиме  LIRC_MODE_SCANCODE  данные,  возвращаемые  read(2)  в  структуре lirc_scancode,
       содержат декодированные нажатия кнопок. Сканкод сохраняется в поле scancode, а протокол IR
       — в rc_proto. В этом поле хранится одно из значений enum rc_proto.

   Запись выходных данных в режиме LIRC_MODE_PULSE
       Данные,  записываемые  в  символьное  устройство  с  помощью  write(2), представляют собой
       последовательность  наличия/отсутствия  импульсов  в  виде  целых  чисел.  Импульсы  и  их
       отсутствие  неявно  разделяются  только  по  их  положению.  Данные  должны  начинаться  и
       заканчиваться импульсом, то есть всегда должно быть нечётное количество  выборок.  Функция
       write(2)  блокирует выполнение до тех пор, пока данные не будут переданы аппаратурой. Если
       данных больше, чем аппаратура может послать, то write(2) завершается с ошибкой EINVAL.

   Запись выходных данных в режиме LIRC_MODE_SCANCODE
       Данные, записываемые в символьные устройства, должны храниться в структуре  lirc_scancode.
       Должны   быть  заполнены  поля  scancode  и  rc_proto,  остальные  должны  быть  равны  0.
       IR-кодировщики ядра преобразуют сканкод в импульсы и паузы.  При  некорректном  протоколе,
       сканкоде или устройстве lirc передача невозможна.

КОМАНДЫ IOCTL

       #include <linux/lirc.h>    /* но смотрите ДЕФЕКТЫ */

       int ioctl(int fd, int cmd, int *val);

       The  following  ioctl(2)  operations are provided by the lirc character device to probe or
       change specific lirc hardware settings.

   Всегда поддерживаемые команды
       Устройства /dev/lirc* всегда поддерживают следующие команды:

       LIRC_GET_FEATURES (void)
           Возвращает битовую маску возможностей; смотрите ВОЗМОЖНОСТИ.

       Если устройство возвращает код ошибки после LIRC_GET_FEATURES, то можно считать,  что  это
       устройство не является lirc.

   Необязательные команды
       Некоторые  устройства  lirc поддерживают команды, перечисленные ниже. Если не утверждается
       обратное, они завершаются с ошибкой ENOTTY, если операция не поддерживается, или с ошибкой
       EINVAL,  если  операция  завершилась  с  ошибкой  или указаны некорректные параметры. Если
       драйвер не анонсирует поддержку определённых возможностей, то вызов соответствующих  ioctl
       завершается с ошибкой ENOTTY.

       LIRC_GET_REC_MODE (void)
              Если в устройстве lirc нет приёмника, то эта операция завершается ошибкой ENOTTY. В
              противном случае возвращается режим приёма, который может быть одним из:

              LIRC_MODE_MODE2
                     Драйвер  возвращает  последовательность  длительностей  наличия/  отсутствуя
                     импульсов.

              LIRC_MODE_SCANCODE
                     Драйвер   возвращает   значения  struct  lirc_scancode,  каждое  из  которых
                     представляет декодированное нажатие кнопки.

       LIRC_SET_REC_MODE (int)
              Задаёт  режим   приёма.   Значением   val   может   быть   LIRC_MODE_SCANCODE   или
              LIRC_MODE_MODE2.Если  в  устройстве lirc нет приёмника, то эта операция завершается
              ошибкой ENOTTY.

       LIRC_GET_SEND_MODE (void)
              Возвращает режим передачи.  Поддерживаются  LIRC_MODE_PULSE  и  LIRC_MODE_SCANCODE.
              Если в устройстве lirc нет передатчика, то эта операция завершается ошибкой ENOTTY.

       LIRC_SET_SEND_MODE (int)
              Задаёт   режим   передачи.   Значением   val   может  быть  LIRC_MODE_SCANCODE  или
              LIRC_MODE_PULSE.  Если  в  устройстве  lirc  нет  передатчика,  то   эта   операция
              завершается ошибкой ENOTTY.

       LIRC_SET_SEND_CARRIER (int)
              Задаёт частоту модуляции. Значением аргумента является частота (в Гц).

       LIRC_SET_SEND_DUTY_CYCLE (int)
              Задаёт  скважность  несущей  частоты  (carrier  duty cycle). Значение val — число в
              диапазоне [0,100], описывающей  ширину импульса в виде процента от  всего  сигнала.
              Значения  0  и  100  не  несут  какого-то особенного смысла, но зарезервированы для
              использования в будущем.

       LIRC_GET_MIN_TIMEOUT (void), LIRC_GET_MAX_TIMEOUT (void)
              В некоторых устройствах есть встроенные таймеры,  которые  можно  использовать  для
              обнаружения  длительного  отсутствия  активности  IR.  Это  может  помочь  lircd(8)
              обнаружить окончание сигнала IR и что можно запускать процесс декодирования.  Такие
              операции   возвращают  целочисленные  значения  минимального/максимального  периода
              ожидания, которое можно задать (в  микросекундах).  У  некоторых  устройств  период
              ожидания    нельзя    изменить.    В   таких   драйверах   LIRC_GET_MIN_TIMEOUT   и
              LIRC_GET_MAX_TIMEOUT возвращают ошибку ENOTTY.

       LIRC_SET_REC_TIMEOUT (int)
              Задаёт период неактивности IR в виде  целого  значения  (микросекунды).  Корректные
              значения  должны  находиться  в  пределах,  полученных  от  LIRC_GET_MIN_TIMEOUT  и
              LIRC_GET_MAX_TIMEOUT. Значение 0 (если поддерживается оборудованием) отключает  все
              аппаратные  ожидания  и  о  данных  сообщается  сразу  после появления. Если точное
              значение установить  невозможно,  то  нужно  указать  следующее  большее  возможное
              значение.

       LIRC_GET_REC_TIMEOUT (void)
              Возвращает текущий период неактивности (в микросекундах). Доступен в Linux с версии
              4.18.

       LIRC_SET_REC_TIMEOUT_REPORTS (int)
              Включает  (val  равно  1)  или  выключает  пакеты  об  (val  равно  0)  ожидании  в
              LIRC_MODE_MODE2. Работа этой операции в разных версиях ядра отличается:

              •  Since Linux 5.17: timeout packages are always enabled and this ioctl is a no-op.

              •  Since  Linux  4.16: timeout packages are enabled by default.  Each time the lirc
                 device is opened, the LIRC_SET_REC_TIMEOUT operation  can  be  used  to  disable
                 (and, if desired, to later re-enable)  the timeout on the file descriptor.

              •  In  Linux  4.15  and  earlier:  timeout  packages  are  disabled by default, and
                 enabling them (via LIRC_SET_REC_TIMEOUT)  on any file descriptor associated with
                 the  lirc  device  has  the effect of enabling timeouts for all file descriptors
                 referring to that device (until timeouts are disabled again).

       LIRC_SET_REC_CARRIER (int)
              Задаёт   верхнюю    границу    несущей    частоты    приёмника    (Гц).    Смотрите
              LIRC_SET_REC_CARRIER_RANGE.

       LIRC_SET_REC_CARRIER_RANGE (int)
              Задаёт  нижнюю границу несущей частоты приёмника (Гц). Для выполнения этой операции
              сначала нужно задать нижнюю границу с помощью ioctl  LIRC_SET_REC_CARRIER_RANGE,  а
              затем верхнюю границу с помощью ioctl LIRC_SET_REC_CARRIER.

       LIRC_SET_MEASURE_CARRIER_MODE (int)
              Включает  (val  равно  1)  или  выключает (val равно 0) режим измерения. Если режим
              включён,   то   после   следующего   нажатия   клавиши   драйвер   пошлёт    пакеты
              LIRC_MODE2_FREQUENCY. По умолчанию должен быть выключен.

       LIRC_GET_REC_RESOLUTION (void)
              Возвращает точность разрешения драйвера (в микросекундах).

       LIRC_SET_TRANSMITTER_MASK (int)
              Включает  набор  передатчиков,  указанных  в  val  в виде битовой маски, где каждый
              включаемый передатчик обозначен 1. Первый передатчик  кодируется  в  самом  младшем
              бите  и  т.  д. Если указана некорректная битовая маска, например, указан бит, но в
              устройстве нет столько  передатчиков,  то  данная  операция  возвращает  количество
              доступных передатчиков и ничего не делает.

       LIRC_SET_WIDEBAND_RECEIVER (int)
              У   некоторых   устройств   есть   специальный   широкополосный  приёмник,  который
              предназначен  для  обучения  выводу  существующего  пульта.  Данную   ioctl   можно
              использовать  для  включения  (val  равно  1)  или  отключения  (val равно 0) этого
              свойства. Это может быть полезно для устройств с узкополосными приёмниками, которые
              не  могут  работать  с  некоторыми  пультами.  Широкополосные приёмники могут иметь
              большую точность. С другой стороны, их недостаток в меньшей дальности приёма.

              Замечание: широкополосные приёмники могут  неявно  включаться,  если  вы  включаете
              сообщения  о несущей. В этом случае, он отключится сразу после отключения сообщений
              о несущей. Попытка отключить широкополосный приёмник при  включённых  сообщениях  о
              несущей ни к чему не приводит.

ВОЗМОЖНОСТИ

       ioctl  LIRC_GET_FEATURES  возвращает битовую маску, описывающую свойства драйвера. В маске
       могут быть установлены следующие биты:

       LIRC_CAN_REC_MODE2
              Драйвер способен вести приём в режиме LIRC_MODE_MODE2.

       LIRC_CAN_REC_SCANCODE
              Драйвер способен вести приём в режиме LIRC_MODE_SCANCODE.

       LIRC_CAN_SET_SEND_CARRIER
              Драйвер поддерживает изменение частоты модуляции с помощью LIRC_SET_SEND_CARRIER.

       LIRC_CAN_SET_SEND_DUTY_CYCLE
              Драйвер поддерживает изменение опорного сигнала с помощью LIRC_SET_SEND_DUTY_CYCLE.

       LIRC_CAN_SET_TRANSMITTER_MASK
              Драйвер поддерживает изменение передатчика(ов) с помощью LIRC_SET_TRANSMITTER_MASK.

       LIRC_CAN_SET_REC_CARRIER
              The   driver   supports   setting   the    receive    carrier    frequency    using
              LIRC_SET_REC_CARRIER.   Any  lirc  device  since  the  drivers were merged in Linux
              2.6.36 must have  LIRC_CAN_SET_REC_CARRIER_RANGE  set  if  LIRC_CAN_SET_REC_CARRIER
              feature is set.

       LIRC_CAN_SET_REC_CARRIER_RANGE
              Драйвер   поддерживает   LIRC_SET_REC_CARRIER_RANGE.   Перед  использованием  ioctl
              LIRC_SET_REC_CARRIER   для   указания   верхней   границы,нужно    вызвать    ioctl
              LIRC_SET_REC_CARRIER_RANGE для указания нижней границы несущей.

       LIRC_CAN_GET_REC_RESOLUTION
              Драйвер поддерживает LIRC_GET_REC_RESOLUTION.

       LIRC_CAN_SET_REC_TIMEOUT
              Драйвер поддерживает LIRC_SET_REC_TIMEOUT.

       LIRC_CAN_MEASURE_CARRIER
              Драйвер      поддерживает     измерение     частоты     модуляции     с     помощью
              LIRC_SET_MEASURE_CARRIER_MODE.

       LIRC_CAN_USE_WIDEBAND_RECEIVER
              Драйвер поддерживает режим обучения с помощью LIRC_SET_WIDEBAND_RECEIVER.

       LIRC_CAN_SEND_PULSE
              Драйвер поддерживает отправку в режиме LIRC_MODE_SCANCODE или LIRC_MODE_SCANCODE.

ДЕФЕКТЫ

       Using these devices requires the kernel source header  file  lirc.h.   This  file  is  not
       available  before  Linux  4.6.   Users  of  older  kernels  could  use the file bundled in
       ⟨http://www.lirc.org⟩.

СМ. ТАКЖЕ

       ir-ctl(1), lircd(8), bpf(2)

       ⟨https://www.kernel.org/doc/html/latest/userspace-api/media/rc/lirc-dev.html⟩

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства    был    сделан    Artyom    Kunyov
       <artkun@guitarplayer.ru>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh
       <d20052005@yandex.ru>, Katrin Kutepova  <blackkatelv@gmail.com>,  Konstantin  Shvaykovskiy
       <kot.shv@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.