ASPLinux Community
Сообщество пользователей Linux
FAQHCLФорум / ОбщийWikiLinuxStartОткрытки
Google

Настройка интерфейса IrDA в ASPLinux 9

Автор: Леонид Кантер
Дата: 24 июня 2003 г.
Последние изменения: 17 декабря 2003 г.

Содержание

1 Введение

Семейство протоколов IrDA поддерживается некоммерческой организацией “The INFRARED DATA ASSOCIATION”. Эти протоколы предназначены для высокоскоростной передачи данных между устройствами, расположенными в прямой видимости на небольшом расстоянии друг от друга. Основным преимуществом инфракрасного протокола передачи данных является то, что это беспроводный протокол, то есть для установки связи между двумя устройствами, поддерживающими IrDA, достаточно расположить их в пределах видимости и направить окна приемопередатчиков друг на друга. Поэтому инфракрасными портами оборудуются подавляющее большинство портативных и карманных компьютеров, а так же такие устройства, как цифровые фотокамеры, сотовые телефоны, принтеры и другие. В настольный компьютер также может быть установлен инфракрасный порт, как расширение одного из COM-портов или как отдельное устройство USB.

Протоколы IrDA являются открытыми протоколами (то есть их техническое описание опубликовано в открытых источниках), и это дало возможность реализовать поддержку IrDA в ядре и приложениях ОС Linux. Ниже мы рассмотрим настройку протокола IrDA в ОС Linux на примере ASPLinux 9.

2 SIR или FIR

Приемопередатчики IrDA разделяются на два вида — SIR и FIR:

  • SIR используют обычный COM-порт и поэтому их скорость ограничена скоростью UART — не более 115200 бит/сек.
  • FIR используют специализированные микросхемы и поэтому скорость передачи данных может достигать 4 Мбит/сек. Большинство микросхем FIR имеют встроенную эмуляцию UART, что позволяет использовать их в режиме SIR в том случае, если драйвер этой микросхемы недоступен.

3 Настройка порта SIR

Настройка адаптера IrDA в режиме SIR является наиболее простой процедурой, поскольку не требует загрузки дополнительных модулей. Достаточно только выяснить, какой из COM-портов использует адаптер, и указать правильное устройство в файле /etc/sysconfig/irda (этот файл входит в пакет irdautils, который для работы с портом IrDA должен быть обязательно установлен). Имя порта должно быть указано с учетом соответствия имен устройств в DOS/Windows и Linux:

  • COM1 соответствует /dev/ttyS0
  • COM2/dev/ttyS1
  • COM3/dev/ttyS2
  • COM4/dev/ttyS3

То есть, если адаптер подключен к порту COM2, файл /etc/sysconfig/irda должен выглядеть так:

IRDA=yes
DEVICE=/dev/ttyS1
#DONGLE=actisys+
DISCOVERY=yes

Примечание

На портативных компьютерах устройства PCMCIA могут использовать прерывание 3, необходимое для работы IrDA на /dev/ttyS1. Это может привести к неработоспособности IrDA или даже зависанию компьютера. Поэтому рекомендуется на запретить использование IRQ 3 в настройке подсистемы PCMCIA. Для этого необходимо в файле /etc/pcmcia/config.opts убрать значок комментария перед строкой “exclude irq3”. Соответствующий фрагмент этого файла должен выглядеть так:

# Resources we should not use, even if they appear to be available

# First built-in serial port
exclude irq 4

# Second built-in serial port
exclude irq 3

# First built-in parallel port
exclude irq 7

# PS/2 Mouse controller port, comment this out if you don't have a PS/2
# based mouse
exclude irq 12

После изменения файлов конфигурации необходимо запустить службу irda. Для этого нужно в консоли набрать команду service irda start (от имени пользователя root) либо активировать службу при помощи графической утилиты управления службами serviceconf, которая находится в папке “Начать здесь” -> “Системные параметры” -> “Настройка сервера”. При помощи этой же утилиты можно настроить автоматический запуск службы irda при перезагрузке компьютера, который по умолчанию отключен.

3.1 Диагностика

После запуска службы irda в системе должен появиться интерфейс irda0. Убедиться в его наличии можно следующей командой:

$ /sbin/ip ad sh irda0
3: irda0: <NOARP,UP> mtu 2048 qdisc pfifo_fast qlen 8
    link/irda

Теперь можно убедиться, что инфракрасная связь действительно работает. Для этого нужно расположить в зоне действия порта любое устройство, поддерживающее IrDA, и запустить команду irdadump. Если связь работает, вывод команды должен быть примерно таким:

[root@omnibook root]# irdadump
09:27:50.616311 xid:rsp e4cc8809 < 52710000 S=6 s=1 Nokia 6210 hint=b125 [ PnP Modem Fax Telephony IrCOMM IrOBEX ] (27)
09:27:50.624805 xid:cmd e4cc8809 > ffffffff S=6 s=2 (14)
09:27:50.714794 xid:cmd e4cc8809 > ffffffff S=6 s=3 (14)
09:27:50.804793 xid:cmd e4cc8809 > ffffffff S=6 s=4 (14)
09:27:50.894790 xid:cmd e4cc8809 > ffffffff S=6 s=5 (14)
09:27:50.984791 xid:cmd e4cc8809 > ffffffff S=6 s=* omnibook hint=0400 [ Computer ] (24)

Как видно, в радиусе действия порта был успешно обнаружен телефон Nokia 6210. Настройка специализированной программы для работы с телефонами Nokia — gnokii — будет описана в отдельной статье.

4 Настройка порта FIR

4.1 Подбор драйвера адаптера FIR

Настроить IrDA-адаптер в режиме FIR возможно только в том случае, если в ядре Linux имеется драйвер этого контроллера. В таблице ниже приведен список поддерживаемых контроллеров FIR и соответствующих модулей ядра.

ПроизводительМоделиМодуль ядра
SMC37C44, 37C665GT, 37C669, 37C78, 37N769, 37N869, 37B72X, 37B77X, 37B78X, 37B80X, 37C67X, 37C93X, 37C93XAPM, 37C93XFR, 37M707, 37M81X, 37N958FR, 37N971, 37N972, 47B27X, 47B37X, 47M10X, 47M120, 47M13X, 47M14X, 47N252, 47S42Xsmc-ircc
NSCPC87108, PC87338nsc-ircc
WINBOND83977w83977af_ir
TOSHIBAOBOE IrDAtoshoboe

Определить, какой именно контроллер установлен, можно по документации компьютера либо при помощи утилиты findchip, которая входит в пакет irdautils. Ниже приведен расширенный вывод утилиты findchip на двух различных компьютерах.

HP Omnibook 500:

[root@omnibook irda]# findchip -v
Found NSC PC87338 Controller at 0x398, DevID=0x0b, Rev. 2
 SIR Base 0x2f8, FIR Base 0x2f8
 IRQ = 3, DMA = 1
 Enabled: yes, Suspended: no
 UART compatible: yes
 Half duplex delay = 0 us

RoverBook Discovery KT6:

[root@rover root]# findchip -v
Found SMC FDC37N869 Controller at 0x3f0, DevID=0x02, Rev. 0
 SIR Base 0x2f8, FIR Base 0x110
 IRQ = 3, DMA = 3
 Enabled: yes, Suspended: no
 UART compatible: yes
 Half duplex delay = 3 us

Как видно из вывода findchip, на HP Omnibook 500 необходимо использовать драйвер nsc-ircc, а на RoverBook — smc-ircc, причем оба эти чипа поддерживают эмуляцию UART и могут также быть настроены в режиме SIR как /dev/ttyS1.

4.2 Изменение файла настройки модулей /etc/modules.conf

Поскольку ядро Linux при загрузке распознает контроллер FIR как обычный последовательный порт, необходимые ресурсы (порт и прерывание) оказываются занятыми драйвером последовательного порта. Поэтому в /etc/modules.conf необходимо включить команду, которая будет освобождать ресурсы последовательного порта перед загрузкой драйвера FIR. Ниже приведен фрагмент файла /etc/modules.conf, который привязывает к устройству irda0 драйвер nsc-ircc и перед загрузкой этого драйвера освобождает ресурсы порта /dev/ttyS1.

alias irda0 nsc-ircc
pre-install irda0 /bin/setserial /dev/ttyS1 uart none

Файл /etc/sysconfig/irda при этом должен выглядеть следующим образом:

IRDA=yes
DEVICE=irda0
DISCOVERY=yes

Обратите внимание, что устройство irda0 здесь указывается без /dev/. Дальнейшие действия по настройке порта такие же, как и при настройке SIR — достаточно запустить службу irda и убедиться в наличии связи с устройством.

5 Настройка USB IrDA

В настоящее время все большое распространение получили IrDA-адаптеры, подключаемые к шине USB. Среди моделей, работоспособность которых под Linux подтверждена, можно перечислить ACTiSYS ACT-IR2000U FIR-USB адаптер, Tekram 410U и некоторые NoName адаптеры, использующие ту же элементную базу. Поскольку эти устройства являются устройствами FIR, их настройка во многом аналогична настройке встроенных устройств FIR. Так, формат файла /etc/sysconfig/irda для FIR-USB адаптеров полностью аналогичен описанному выше для встроенных устройств FIR:

IRDA=yes
DEVICE=irda0
DISCOVERY=yes

Инициализация необходимого модуля irda-usb происходит автоматически, но в стандартной конфигурации одновременно с драйвером irda-usb грузится драйвер эмуляции последовательного порта ir-usb, который препятствует работе irda-usb. Поэтому перед подключением устройства в файл /etc/modules.conf необходимо добавить следующую строку:

alias ir-usb off

Если после этого подключить FIR-USB адаптер, команда /sbin/ip ad sh должна показать наличие устройства irda0. После чего можно запустить службу irda (команда service irda start) и убедиться в наличии связи с IrDA-устройством, находящимся в пределах видимости (команда irdadump).

6 Устранение возможных проблем

6.1 Проблемы при настройке FIR

Если при попытке загрузить модуль FIR (smc-ircc, nmc-ircc, toshoboe) выдается сообщение об ошибке (нет такого устройства), возможно устройство использует нестандартные ресурсы. В этом случае можно уточнить ресурсы устройства в документации компьютера, настройках BIOS или в обзоре оборудования системы Windows, если она уже установлена на компьютере, и указать их как аргумент модуля FIR. Например, для модуля nsc-ircc могут быть указаны следующие аргументы:

  • io — порт ввода-вывода (io=0x2f8)
  • irq — прерывание (irq=3)
  • dma — канал прямого доступа (dma=1)

Параметры должны быть указаны в файле /etc/modules.conf следующим образом:

options nsc-ircc io=0x2f8 irq=3 dma=1

7 Ссылки по теме

  1. Linux-IrDA project
  2. Linux Infrared HOWTO (Полное руководство по работе с устройствами IrDA)
  3. Linux-IrDA quick tutorial (Краткое руководство с примерами)
  4. GNOME-апплет для мониторинга устройств IrDA