WIRC FAQ

  • Russian

  • What is this?
  • Hardware
  • Configuration (please, read carefully!)
  • It doen't work!
  • How to teach WIRC?
  • How to tune WIRC for better recognizing?
  • Comments
  • I found error! What to do?
  • System requirements

    What is this?
    This is program, with help of which you can control you computer via remote control from TV, audio-center or other infrared remote controls.
    It is derived from WinLIRC (Windows Linux Infrared Remote Control) 0.6.1pre2, which is derived from LIRC (Linux Infrared Remote Control). I simply added some features, including RX device support.

    Hardware
    Nesessary hardware is simple - there are actually 2 variants:
  • RX device. It can be any IrDA receiver at IrDA port. I tryed ILMS5360 and TK69 649 chips. Their cost is about $1.5 here at Russia. I guess, that any 5V reciever will be suitable. Also, it can be simple scheme on COM port.
    ILMS5360, TK69 649, TFMS 5NN0, SFH 506 pinout:
     _______
    |  _____|------ TX (connect to RX line on mainboard)
    | |_____|______ +5V
    |_______|------ GND
    
  • DCD device. It is device which sends incoming bit stream through Data Carrier Detect line. It's basic device for WinLIRC - you can find many schemes of it at Internet.

    Configuration
    Now I haven't time to explain everithing :) so, read other WinLIRC documentation. I will explain only main things, which are important if you're using RX device:
  • FIRST, you should disable standard IrDA drivers, which are installed on some mainboards after enabling IrDA. If you're using Windows 9x, or Windows ME find msports.inf in your Windows\Inf directory and edit it:
    1) In section [Std] comment/remove the following lines (if they present):
    %*PNP0510.DeviceDesc% = InfraredComPort, *PNP0510
    %*PNP0511.DeviceDesc% = InfraredComPort, *PNP0511
    Uncomment/add the following lines:
    %*PNP0510.DeviceDesc% = ComPort, *PNP0510
    %*PNP0511.DeviceDesc% = ComPort, *PNP0511
    2) In section [Strings] uncomment/add the following lines:
    *PNP0510.DeviceDesc = "Generic Ir Serial Port"
    *PNP0511.DeviceDesc = "Generic Ir Serial Port"
    For Windows ME you should also delete irmini.inf (or, better rename to irmini.bak for example)
    For Windows 2000 I used such a method to delete standart drivers:
    1) Remove folowing strings from netirsir.inf:
    %*PNP0510.DevDesc% = PNP, *PNP0510
    %*PNP0511.DevDesc% = PNP, *PNP0511
    and replace
    ExcludeFromSelect=*PNP0510,*PNP0511,*IBM0002,*IBM0034,*IBM0020
    to
    ExcludeFromSelect=*IBM0002,*IBM0034,*IBM0020
    2) Add to msports.inf to section [Std]:
    %*PNP0510.DeviceDesc% = ComPort, *PNP0510, *PNP0511 ; Communications Port
    %*PNP0511.DeviceDesc% = ComPort, *PNP0511, *PNP0510 ; Communications Port
    to section [Strings]:
    *PNP0510.DeviceDesc = "Generic Ir Serial Port"
    *PNP0511.DeviceDesc = "Generic Ir Serial Port"
    add
    ExcludeFromSelect=*PNP0510,*PNP0511
    to section [ControlFlags]
  • ONLY NOW enable IrDA in BIOS. Usually you should also enable RX inverting.
  • WIRC (same as WinLIRC) is only server. It receives IR signals, decode them, and sends decoded commands to clients, so you need a WinLIRC client program, which will change volume, run and close programs etc. There are many different clients, but I recommend you uICE. Latest version can be found on http://www.mediatexx.com/. uICE also supports RX device, but it uses incorrect agorithm, and as a result recognizes commands unstable. That's why you should use it only as a WinLIRC client.

    It doen't work!
  • You should have TCP/IP installed on your computer (simply install Dial-Up)
  • You should have mfc42.dll in your Windows\System directory

    How to teach WIRC?
    In this version teaching algorithm is from original WinLIRC. Maybe I'll change it, and teching will be more simple, but now AS IS. Well, I know two types of remotes:
  • Signal repeating remotes
  • Special repeat code remotes
    Signal repeating remotes are Panasonic and Sony - they send identical packets wnen you press and hold button. Special repeat code remote send unique packet when you press button, and if you hold it, they send repeat code - one for all buttons. You can differentiate one type from another if you look at packets in Raw Codes mode. When teaching WIRC, you should select remote type. If your remote is with special repeat code, WIRC will not recognize button holding after teaching. You should manually add new button with name _repeat to .cf file. Codes for this button you should also add manually - you can see them in Raw Data mode. Panasonic.cf is a sample of signal repeating remote. ONWA.cf - sample of special repeat code remote.

    How to tune WIRC for better recognizing?
    Recognizing stability and maximum distance depends on correct setting aeps value in .cf file. You should do it manualy with any text editor. To understand how to do it look to the part of .cf file:
              name Stop
                 4569    1807    3630    3641    3644    1812
                 1818    1820    1814    1814    1818    1810
                 3639    1811    1817    1818    3651    3635
                 3641    3647    3644    3636    3639
    
              name Rew
                 4570    1805    3628    3646    3645    1810
                 1816    3637    1819    1817    1811    1818
                 3642    1815    1813    1821    3650    3645
                 1815    3634    3637    3642    3644
    
    What we see? Many numbers, but actually, there are only three REALY different: 4570, 3640 and 1807 - all other are close to these. Now let's calculate difference: 4570-3640=930, 3640-1807=1833. Then, we take smallest one - 930 and divide it by 2: 930/2=465. Let's take a numer which is a bit smaller, for example 430 - it will be aeps value.

    Comments
    This program is distributed under the GNU Public License and comes with absolutely NO WARRANTY.

    I found error! What to do?
    Simply e-mail me:Nsky@bigfoot.com
    But first, you should go to my homepage http://www.bigfoot.com/~Nsky/ maybe I've released new version.

    System requirements
    Computer with IR receiver and Windows 95/98/ME/2000. Other OS's are not tested.
    Decode errors are possible on slow machines.

    WIRC FAQ

  • Что это такое?
  • Железо
  • Конфигурирование (пожалуйста, прочтите внимательно!)
  • Не работает!
  • Как обучить WIRC?
  • Как настроить WIRC на лучшее распознавание?
  • Замечания
  • Программа глючит! Что делать?
  • Системные требования

    Что это такое?
    Это программа, с помощью которой можно управлять компьютером с обычного пульта от телевизора, аудио-центра или еще от чего-нибудь.
    Она основывается на WinLIRC (Windows Linux Infrared Remote Control) 0.6.1pre2, которая в свою очередь основана на LIRC (Linux Infrared Remote Control). Я просто добавил некоторые возможности, включая поддержку RX устройств

    Железо
    Необходимые железки просты до безобразия - есть 2 варианта:
  • RX устройство. Это может быть любой IrDA приемник на IrDA порту. Я пробовал приемники ILMS5360 и TK69 649. Стоят они примерно $1.5. Я думаю, подойдет любой приемник на 5В. Также можно придумать простую схемку на COM порт.
    разводка ILMS5360, TK69 649, TFMS 5NN0, SFH 506:
     _______
    |  _____|------ TX (соединяется с RX на материнской плате)
    | |_____|______ +5V
    |_______|------ GND
    
  • DCD устройство. Это устройство передает сигналы по линии Data Carrier Detect. Это стандартное устройство для WinLIRC - вы найдете кучу его схем в интернете.

    Конфигурирование
    Сейчас нет времени все объяснять :) поэтому читайте доки к WinLIRC. Объясню только основные моменты, которые важны если вы используете RX устройство:
  • СНАЧАЛА следует отключить стандартные драйвера для IrDA, которые ставятся на некоторых матерях после включения IrDA. Если у вас Windows 9x или Windows ME, то найдите msports.inf в каталоге Windows\Inf и отредактируйте его:
    1) В секции [Std] закоментируйте/удалите следующие строки (если они есть):
    %*PNP0510.DeviceDesc% = InfraredComPort, *PNP0510
    %*PNP0511.DeviceDesc% = InfraredComPort, *PNP0511
    Раскоментируйте/добавьте следующие строки:
    %*PNP0510.DeviceDesc% = ComPort, *PNP0510
    %*PNP0511.DeviceDesc% = ComPort, *PNP0511
    2) В секции [Strings] раскоментируйте/добавьте следующие строки:
    *PNP0510.DeviceDesc = "Generic Ir Serial Port"
    *PNP0511.DeviceDesc = "Generic Ir Serial Port"
    Кроме того, для Windows ME надо удалить irmini.inf (или, лучше переименовать его например в irmini.bak)
    Для Windows 2000 я удалял стандартные драйвера так:
    1) В netirsir.inf удалил строки:
    %*PNP0510.DevDesc% = PNP, *PNP0510
    %*PNP0511.DevDesc% = PNP, *PNP0511
    И заменил строку
    ExcludeFromSelect=*PNP0510,*PNP0511,*IBM0002,*IBM0034,*IBM0020
    на
    ExcludeFromSelect=*IBM0002,*IBM0034,*IBM0020
    2) В msports.inf добавил в секцию [Std] строки:
    %*PNP0510.DeviceDesc% = ComPort, *PNP0510, *PNP0511 ; Communications Port
    %*PNP0511.DeviceDesc% = ComPort, *PNP0511, *PNP0510 ; Communications Port
    в секции [Strings] добавил:
    *PNP0510.DeviceDesc = "Generic Ir Serial Port"
    *PNP0511.DeviceDesc = "Generic Ir Serial Port"
    Добавил
    ExcludeFromSelect=*PNP0510,*PNP0511
    в секцию [ControlFlags]
  • И ТОЛЬКО ТЕПЕРЬ включите IrDA в BIOS'е. Обычно еще требуется включить RX inverting.
  • WIRC (как и WinLIRC) это только сервер. Он получает ИК сигналы, декодирует их, и посылает декодированные комманды клиентам, поэтому вам нужен WinLIRC клиент, который и будет менять громкость, запускать и вырубать программы и т.д. Существует много различных клиентов, но я рекомендую uICE. Свежую версию можно скачать на http://www.mediatexx.com/. uICE тоже может работать с RX устройством, но делает это в корне неправильно, в результате нестабильно распознает и путает кнопки, поэтому следует использовать его только в качестве WinLIRC клиента.

    Не работает!
  • Должен быть поставлен протокол TCP/IP (просто поставьте контроллер удаленного доступа)
  • Нужен файл mfc42.dll в вашем каталоге Windows\System

    Как обучить WIRC?
    На данный момент алгоритм обучения оставлен от оригинального WinLIRC. Возможно, когда-нибудь я его перепишу, и обучение будет происходить проще, однако пока AS IS. Итак, известно 2 типа пультов:
  • Пульты с повтором посылки
  • Пульты со специальным кодом повтора
    К первым пультам вроде как относятся пульты Panasonic и Sony - у них при нажатии и удержании кнопки постоянно посылается одна и та же последовательность. У пультов со специальным кодом повтора при нажатии посылается уникальная для данной кнопки последовательность, а при удержании - коротенький код повтора. Отличить первый от второго можно наугад :) или поглядев в режиме Raw Codes на посылаемые пультом посылки. Во время обучения нужно будет выбрать тип пульта, так как процесс обучения для них отличается. Если у вас пульт с кодом повтора, то после обучения WIRC будет распознавать только первое нажатие, но не будет распознавать удержание кнопки. Для распознавания удержания следует руками, с помощью текстового редактора добавить в .cf файл новую кнопку с именем _repeat, а значения кодов для нее посмотреть в режиме Raw Codes. В качестве примера пультов первого типа приведен файл Panasonic.cf, а пультов второго типа - ONWA.cf

    Как настроить WIRC на лучшее распознавание?
    Стабильность распознавания и максимальное расстояние, на котором сможет работать пульт зависит от корректной установки величины aeps в .cf файле. Вам придется сделать это ручками используя любой текстовый редактор. Чтобы понять метод, посмотрим на пример куска .cf файла:
              name Stop
                 4569    1807    3630    3641    3644    1812
                 1818    1820    1814    1814    1818    1810
                 3639    1811    1817    1818    3651    3635
                 3641    3647    3644    3636    3639
    
              name Rew
                 4570    1805    3628    3646    3645    1810
                 1816    3637    1819    1817    1811    1818
                 3642    1815    1813    1821    3650    3645
                 1815    3634    3637    3642    3644
    
    Что мы видим? Кучу разных чисел, но РЕАЛЬНО различных всего три: 4570, 3640 и 1807 - все остальные совсем немного отличаются от этих. Теперь посчитаем разницу между ними: 4570-3640=930, 3640-1807=1833. Выберем наименьшую - 930 и поделим пополам: 930/2=465. Возьмем число чуть меньше полученого, например 430 - оно и будет величиной aeps.

    Замечания
    Эта программа распространяется согласно лицензии GNU и не предусматривает НИКАКОЙ ГАРАНТИИ.

    Программа глючит! Что делать?
    Писать мне:Nsky@bigfoot.com Для начала следует сходить на мою страничку: http://www.bigfoot.com/~Nsky/ Может там версия посвежее.

    Системные требования
    Компьютер с ИК приемником и Windows 95/98/ME/2000. Другие OS'ки не проверялись.
    Возможны ошибки распознавания на медленных машинах.