
Linux Infrared HOWTO

Werner Heuser

      <wehe[AT]tuxmobil.org>

   Linux Mobile Edition  Edition
   Version 3.8

   TuxMobil

   Berlin

   Copyright © 2000-2011 Werner Heuser

   $Date: 2011-10-31 15:06:07 $

   The Infrared-HOWTO provides an introduction to Linux and infrared
   devices and how to use the software provided by the Linux/IrDA
   project. This package uses IrDA(TM) compliant standards. IrDA(TM) is
   an industrial standard for infrared wireless communication, and most
   laptops made after January 1996 are equipped with an IrDA(TM)
   compliant infrared transceiver. Infrared ports let you communicate
   with printers, modems, fax machines, LANs, and other laptops or PDAs.
   Speed ranges from 2400bps to 4Mbps.

   The Linux/IrDA stack supports IrLAP, IrLMP, IrIAS, IrIAP, IrLPT,
   IrCOMM, IrOBEX, and IrLAN. Several of the protocols are implemented
   as both clients and servers. There is also support for multiple IrLAP
   connections, via several IrDA(TM) devices at once. The Linux/IrDA
   project started at the end of 1997 and experienced some major
   rewrites since then. Please don't expect every feature working
   straight yet. As far as I know Linux/IrDA is the only open source
   IrDA implementation available.

   Remote Control (RC) via infrared is the aim of the Linux Infrared
   Remote Control - LIRC project, and also described in this HOWTO.

   Copyright (c) 2000-2011 Werner Heuser. For all chapters permission is
   granted to copy, distribute and/or modify this document under the
   terms of the GNU Free Documentation License, Version 1.1 or any later
   version published by the Free Software Foundation; with the Invariant
   Sections being "Preface" and "Credits", with the Front-Cover Texts
   being "Linux Infrared HOWTO", and with the Back-Cover Texts being the
   section "About the Document and the Author". A copy of the license is
   included in the section entitled "GNU Free Documentation License".
     ________________________________________________________________

   Table of Contents
   Preface

        1. About the Document
        2. Status of the Document
        3. About the Author

   I. IrDA

        1. About the Linux/IrDA Project
        2. Getting Started
        3. Specific Connections and IrDA - Protocols
        4. Hardware Supported by Linux/IrDA
        5. Advanced Topics

   II. Infrared Remote Control

        6. Introduction
        7. Linux Infrared Remote Control - LIRC
        8. Lego Mindstorm
        9. Serial Infrared Remote Controller
        10. Infrared Tools for the COREL Netwinder PC
        11. ir
        12. irmctl
        13. IRManager
        14. irXxD
        15. XR3
        16. IR File Chooser
        17. IControl
        18. jlirc
        19. lircemu
        20. smartmenu
        21. iowlircemu
        22. tonto
        23. Infrared Remote Control ./. IrDA

   III. Appendix

        A. Credits
        B. Revision History
        C. Serial Infrared Port Sniffers
        D. Infrared Light and Eye Safety
        E. Copyrights, Disclaimer, Trademarks

   List of Figures
   5-1. IrDA Stack
     ________________________________________________________________

Preface

   

   Better red, than dead.
     Unknown AuthorEss
     ________________________________________________________________

1. About the Document

   This document is based on the [http://irda.sourceforge.net/]
   documentation part of the Linux/IrDA project homepage and the
   [http://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/index.html]
   Linux/IrDA Tutorial by Jean Tourillhes. I have also included material
   provided by the Linux/IrDA core team, the Linux/IrDA mailing lists
   and other sources.

   The document is included in [http://tldp.org/] THE LINUX
   DOCUMENTATION PROJECT - TLDP .

   The latest version of this document is available at
   [http://tuxmobil.org/howto_linux_infrared.html] TuxMobil-HOWTOs.

   Mathieu Arnold provides an earlier version of the
   [http://www.mat.cc/] IR-HOWTO in French. A Japanese translation of
   issue v3.4 is provided by the [http://www.linux.or.jp/JF] Linux
   Japanese FAQ Project .

   Please feel free to contact me for comments or questions about the
   HOWTO. I know this material is not finished or perfect, but I hope
   you find it useful anyway. For other questions and current
   information about Linux/IrDA please ask in the Linux/IrDA mailing
   list as explained below.

   Werner Heuser <wehe_at_tuxmobil.org>
     ________________________________________________________________

2. Status of the Document

   The latest kernel I used is 2.4.19 and the latest irda-utils version
   is 0.9.15. I tried to check all information but I don't have all the
   necessary infrared hardware yet, so if something doesn't work for
   you, please don't blame me.

   Warning

   Former kernel and irda-utils versions need a completely different
   setup. Since I don't recommend to use former versions, all references
   to these setups are removed from this document. You may find some
   hints in the chapter Code History.

   I have included all the changes to be in sync with the 2.4.x kernel
   series and the latest Linux/IrDA development now. Therefore some
   testing and proof-reading has still to be done. So please don't
   expect anything working straight out of the box.
     ________________________________________________________________

3. About the Author

   Since I have installed [http://tuxmobil.org/hp800e.html] Linux on my
   first laptop (HP OmniBook 800CT), I am addicted to Linux and mobile
   computers. I have written the
   [http://tuxmobil.org/howto_linux_laptop.html] Linux-Mobile-Guide and
   founded [http://tuxmobil.org/] TuxMobil: Linux with Laptops,
   Notebooks, PDAs, Mobile Phones and Portable Computers. I am also
   interested in [http://repair4laptop.org/] upgrading, repairing and
   modding laptops or notebooks, [http://repair4pda.org/] disassembling
   and reassembling PDAs and HandHelds and
   [http://repair4mobilephone.org/] taking apart and modding mobile
   (cell) phones. In May 2000 I have founded the German vendor
   [http://xtops.de/] Xtops.DE: Linux, Laptops, Notebooks, PDAs
   pre-installed, to sponsor the TuxMobil project.

   I am also the author of the [http://computerecology.org/]
   Linux-Ecology-HOWTO, which describes Linux as a means to save our
   environment, as well as founder of [http://dataconv.org/] DataConv a
   survey of data conversion and migration tools.

I. IrDA

   Table of Contents
   1. About the Linux/IrDA Project

        1.1. Project History
        1.2. Code History

   2. Getting Started

        2.1. Software
        2.2. Kernel
        2.3. Kernel Module Options
        2.4. Configuration

   3. Specific Connections and IrDA - Protocols

        3.1. Starting the IrDA Stack
        3.2. Printer Connection
        3.3. LAN Connection - IrLAN
        3.4. HP NetBeamer Connection
        3.5. Palm III Connection - IrCOMM
        3.6. Linux Terminal on Palm (Handspring Visor) via IR
        3.7. Psion 5 Connection
        3.8. Connecting from Linux to WinCE 2.11
        3.9. Connecting from Linux to WinCE 3.0 (aka PocketPC)
        3.10. Cellular Phone Connection
        3.11. Digital Camera Connection
        3.12. Microsoft-Windows and Linux/IrDA
        3.13. Linux to Linux Connection
        3.14. Multiple Instances
        3.15. Connection to Docking Station
        3.16. Connection to Keyboard
        3.17. Connection via Serial Cable
        3.18. Null Modem Cable Connection
        3.19. Peer-to-Peer Mode / Direct Mode
        3.20. Linux/IrDA with Toshiba Notebooks
        3.21. IrDA Card in a Desktop Computer

   4. Hardware Supported by Linux/IrDA

        4.1. Obtaining Information about the Infrared Port in Laptops
        4.2. Hardware Surveys
        4.3. Big Endian
        4.4. SMP
        4.5. IrDA Hardware
        4.6. IrDA and USB
        4.7. Linux PDAs: Agenda, iPAQ, Yopy, Zaurus

   5. Advanced Topics

        5.1. Troubleshooting
        5.2. Mailing List
        5.3. GUIs: Gnome, KDE
        5.4. How to Make Infrared Light Visible
        5.5. Power Saving
        5.6. Beyond IrDA
        5.7. IrDA Network Neighborhood
        5.8. Linux/IrDA and APM
        5.9. Performance Testing
        5.10. IrDA Protocols
        5.11. FAQ
     ________________________________________________________________

Chapter 1. About the Linux/IrDA Project

1.1. Project History

   The project started at the end of 1997 with the name Linux/IrDA. Due
   to some troubles with the name IrDA, which is trademarked by the
   Infrared Data Association IrDA , the name was changed to Linux/IR. At
   the end of 1998 the relationship between both became better and the
   name was changed to Linux/IrDA again. Since February 1999 the project
   is an official member of IrDA .

   Companies and developers which are interested in joining these
   efforts should contact the Linux/IrDA Project or me at
   <wehe_at_tuxmobil.org>.
     ________________________________________________________________

1.2. Code History

   The Linux/IrDA project has undertaken some changes in the program
   code, which you should know to understand some possible confusions
   with older documentation, which you shouldn't use anyway.

   Warning

   Some caveats in the documentation have been caused by changes of the
   following concepts, device names and parameters. I hope I have got
   them alright now, they confused me sometimes, too. The new style
   stuff works from Kernel 2.2.15 / 2.4.0. Some important changes were
   made again in Kernel 2.6, not all of these are mentioned in this
   document yet, I will fix that hopefully soon. Anyway I recommend not
   to use any earlier kernel version than 2.6. This document will
   describe differences to the kernel 2.4 series in the appropriate
   places to provide documentation for situations where you must use
   kernel 2.4, which is hopefully rare. You should always use current
   Kernel, irda-utils and documentation.

     * For 2.0.x kernels Linux/IrDA support worked in a totally other
       way (only user-land programs) and is no longer supported by the
       Linux/IrDA project. Since 2.1.131 and 2.2.0 it is part of the
       kernel.
     * The major device number of the irda device changed from 61 to 161
       (as far as I remember there was also a major number 60 around,
       too), also there have been different and now obsolete minor
       device numbers around, see the list of current device numbers
       below.
     * The irmanager is obsolete now, its tasks are now achieved by
       irattach.
     * The module name /dev/ircomm_tty changed to /dev/ircomm-tty , but
       there are other modules around which use either "-" or "_" in
       there names, this might be confusing.
     * The device names /dev/irnine and /dev/ircomm_new are obsolete.
     * IrLPT is handled by IrCOMM now. So all references to irlpt_server
       are obsolete.
     * From irda-utils 0.9.15 the behaviour of the -s option of irattach
       has changed. The option must not use the parameter 1 anymore.
     * The toshoboe driver for Toshiba laptops has been removed from 2.6
       kernels.
     * Some important changes (e.g. for module names) were made in
       Kernel 2.6, these are not mentioned in this document yet, I will
       fix that hopefully soon.
     ________________________________________________________________

Chapter 2. Getting Started

2.1. Software

   The commands provided by the irda-utils package are the basic set of
   tools to get a working IrDA connection. The other tools (e-Squirt,
   IrNET, ..) are optional. Since version 0.9.15 manual pages are
   included. Most current manual pages are at
   [http://tuxmobil.org/software.html] TuxMobil.
     ________________________________________________________________

2.1.1. IrDA-Utils

2.1.1.1. Compilation

     * Use the latest source of irda-utils available at Linux/IrDA
       Project. Also recommended is the latest glibc library. You may
       find out the current version with ldd --version. The use of the
       older libc5 library may lead to compile errors.
     * Untar the package with tar xvzf irda-utils<VERSION> . I recommend
       to do this in /usr/src.
     * Do a make clean (not necessary if you compile the package for the
       first time).
     * Do a make all to build the binaries.
     * Do a make install, this brings all commands into the right place
       and installs some config files in /etc/irda.
     * Sometimes, when you compile the IrDA stack or some various IrDA
       package, you may have the compiler complaining the things such as
       IRLMP_HINT_MASK_SET or IRDAPROTO_ULTRA are not defined. This is
       because of a mess related to kernel headers and the way most
       distributions deal with it. If you have the 2.4.X kernel source
       lying around, the fix is simple. Just copy the header irda.h from
       the kernel to your include directory cp
       /usr/src/linux/include/linux/irda.h /usr/include/linux
     ________________________________________________________________

2.1.1.2. Precompiled Packages

   Debian/GNU Linux provides an irda-utils package since Potato. Also
   Mandrake since 6.1, Redhat since 6.1 and SuSE since 6.1 contain RPM
   packages of the irda-utils. Some caveat with precompiled packages
   might be some incompatibilities between kernel version and
   appropriate package version.
     ________________________________________________________________

2.1.1.3. Contents of Linux/IrDA-Utils

2.1.1.3.1. irattach

   irattach uses the module set as parameter; it can be a specific FIR
   driver: irattach toshoboe or ircomm (and then it loads the module
   aliased as "irda0" in /etc/modules.conf)

   If you are one of the lucky people which have a FIR chipset that is
   supported, then you don't need to use irattach anymore. Now you just
   have to modprobe the driver.
     ________________________________________________________________

2.1.1.3.2. irdadump

   A program that displays all the frames sent, and received on the
   infrared link.

   One advantage of implementing IrDA device drivers as network device
   drivers is that you should be able to attach sniffers to the device
   (or actually the packet type). That way, it is possible to use a
   really handy utility called irdadump (instead of tcpdump). This will
   make debugging MUCH easier. Linux-2.2 implements the BPF (Berkeley
   Packet Filter), so its possible to filter out exactly the frames you
   want to see.

   Note: You probably have to be root for using irdadump . CONFIG_PACKET
   has to be enabled in the kernel. If compiled as a module you might
   load the module manually. irdadump has been converted into a library,
   so it can be used from GUI applications as well.

   Here is a sample output of a small session between Linux and a Palm
   III. This log shows that the local irobex layer is not responding, so
   the Palm III sends a disc frame.
dagbnb /home/dagb/linux/irda-utils/irdadump/ # ./irdadump

20:18:15.305711 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=0
20:18:15.385597 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=1
20:18:15.465568 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=2
20:18:15.545953 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=3
20:18:15.625574 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=4
20:18:15.705575 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=5
20:18:15.785601 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=255,info=Linux
20:18:18.075526 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=0
20:18:18.225498 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=1
20:18:18.375495 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=2
20:18:18.526355 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=3
20:18:18.675614 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=4
20:18:18.676364 xid:rsp:saddr=0x05c589 > daddr=0xb50c14b,S=6,s=4
20:18:18.765506 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=5
20:18:18.927221 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=255,info=Palm
 III
20:18:18.975796 snrm:cmd,ca=0xfe,pf=1
20:18:18.976534 ua:rsp,ca=0x58,pf=1
20:18:18.977145 ua:rsp,ca=0x58,pf=1
20:18:19.585627 rr:rsp,ca=0x58,nr=0,pf=1
20:18:19.585810 rr:rsp,ca=0x58,nr=0,pf=1
20:18:19.606413 i:cmd,ca=0x58,nr=0,ns=0,pf=1
20:18:19.606582 rr:rsp,ca=0x58,nr=1,pf=1
20:18:19.627708 rr:cmd,ca=0x58,nr=0,pf=1
20:18:19.627871 i:rsp,ca=0x58,nr=1,ns=0,pf=1
20:18:19.650571 disc:cmd,ca=0x58,pf=1
20:18:19.650736 ua:rsp,ca=0x58,pf=1
20:18:21.165524 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=0
20:18:21.315608 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=1
20:18:21.315793 xid:rsp:saddr=0x05c589 > daddr=0xb50c14b,S=6,s=1
20:18:21.395499 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=2
20:18:21.545516 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=3
20:18:21.695500 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=4
20:18:21.845840 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=5
20:18:22.007222 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=255,info=Palm
III
20:18:22.056143 snrm:cmd,ca=0xfe,pf=1
20:18:22.056310 ua:rsp,ca=0xc8,pf=1
20:18:22.056381 ua:rsp,ca=0xc8,pf=1

37 pacckets received by filter
     ________________________________________________________________

2.1.1.3.3. irdaping

   Makes it possible to try and ping a remote device using IrDA test
   frames. Not all devices implement support for test frames. This is a
   program similar to ping(8). It sends IrDA test frames, enriched by
   some userdata which contain the frame number and the time the frame
   was sent. You can also change the size of the frame by using the -s
   option. You must supply an IrDA device address, and not an IP
   address. You have to be able to get that device address by using
   irdadump.

   Here is one output sample (pinging an ACTiSYS IR-100M):
dagbnb /home/dagb/linux/irda-utils/irdaping/ # ./irdaping 0xf7be8388
IrDA ping (0xf7be8388): 32 bytes
32 bytes from 0xf7be8388: irda_seq=0 time=102.466003 ms.
32 bytes from 0xf7be8388: irda_seq=1 time=102.202003 ms.
32 bytes from 0xf7be8388: irda_seq=2 time=102.170998 ms.
32 bytes from 0xf7be8388: irda_seq=3 time=101.633003 ms.

4 packets received by filter

   Christian Gennerat "I use an alias which does not use any parameter
   (in $HOME/.bashrc): alias irping="irdaping \`grep daddr
   /proc/net/irda/discovery|sed s/.*daddr://\`" It works fine when there
   is only one discovered client."
     ________________________________________________________________

2.1.1.3.4. irkbd

   Implements support for the mouse and keyboard protocol as used by the
   Tekram IR-660 infrared docking station. For details on how to use
   external keyboards with Linux PDAs see below.
     ________________________________________________________________

2.1.1.3.5. findchip

   Tries to find out which FIR IrDA chipset your machine is using. Try
   out findchip -v to check it out. For other methods to detect the
   chipset see below.
     ________________________________________________________________

2.1.1.3.6. irsockets

   A collection of programs which uses IrDA sockets.
     ________________________________________________________________

2.1.1.3.7. irpsion5

   File transfer program for exchanging files with your Psion PDA.
     ________________________________________________________________

2.1.1.3.8. /etc/irda

   This directory contains the configuration file irda.conf. You may for
   example configure the serial port for the SIR driver. For first
   testing you should try the SIR driver.
     ________________________________________________________________

2.1.2. openobex

   The overall goal of the [http://sourceforge.net/projects/openobex/]
   OpenOBEX project is to make an open source implementation of the
   Object Exchange (OBEX) protocol. OBEX is a session protocol and can
   best be described as a binary HTTP protocol. OBEX is builtin in
   devices like PDA's like the Palm Pilot, and mobile phones like the
   Ericsson R320, Siemens S25, Siemens S45, Siemens ME45, Nokia NM207
   and Nokia 9110 Communicator. OBEX is optimised for ad-hoc wireless
   links and can be used to exchange all kind of objects like files,
   pictures, calendar entries (vCal) and business cards (vCard). A
   typical application is the "beam" function of PalmOS.
     ________________________________________________________________

2.1.3. e-squirt

   [http://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/index.html]
   e-Squirt is a simple protocol for sending URLs over the IrDA medium.
   This allows for interaction with CoolTown enabled devices.
     ________________________________________________________________

2.1.4. IrNET for Linux-IrDA

   [http://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/index.html]
   IrNET is a protocol allowing to carry TCP/IP traffic between two IrDA
   peers in an efficient fashion. It is a thin layer, passing PPP
   packets in a IrTTP socket. It uses PPP in synchronous mode for
   efficiency, and offers lots of flexibility and various features. The
   main part of IrNET in included in kernel 2.4.x, and a user-space
   daemon (to automate connections) is available on the web page.
     ________________________________________________________________

2.1.5. Java - IrDA Interface

   This [http://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/index.html]
   Java Infrared Socket API provides a way of communicating through
   infrared medium on a linux machine using Java. Thus, Java application
   developers can develop applications involving infrared access much
   easily. The API is very similar to java.net.Socket API and has been
   implemented using the Linux infrared stack. Both connection oriented
   streams (IrSocket and IrServerSocket) and connectionless Ultra
   (UltraSocket, UltraPacket) interfaces are available.
     ________________________________________________________________

2.2. Kernel

2.2.1. Preface

   Please read the [http://tldp.org/HOWTO/Kernel-HOWTO/] Kernel-HOWTO
   from TLDP to get more information about the compilation process.
   Thomas Hertweck has written another useful
   [http://www.thomashertweck.de/kernel.html] Linux-Kernel-HOWTO (but it
   is only available in German and Italian). Check the
   [http://irda.sourceforge.net/] Linux/IrDA Project or the Linux/IrDA
   mailing list archives for latest patches.

   You'll find the Linux/IrDA Kernel code in:

   /usr/src/linux/net/irda (protocol stuff)

   /usr/src/linux/drivers/net/irda (device drivers)

   /usr/src/linux/include/net/irda (header files)
     ________________________________________________________________

2.2.2. General Parameters

   Make sure you use kernel 2.6 sources. I recommend not to use any
   earlier kernel version, but this document will describe differences
   to the kernel 2.4 series in the appropriate places. If unsure about
   your kernel version try uname -r.

   For current 2.6 kernels there are no patches necessary. In case there
   is a kernel patch from the Linux/IrDA project or other places to
   apply (for example for kernel 2.4), put it into the directory
   /usr/src or where else your kernel sources live and apply something
   like (replace patch-2_4.0-irdaXXX with the actual file name):
cd /usr/src
tar xvzf patch-2_4.0-irdaXXX.tar.gz
cd linux
patch -p1 -l < ../patch-2_4.0-irdaXXX

   For latest drivers experimental support has to be enabled
   CONFIG_EXPERIMENTAL, at least in kernel 2.4.

   Enable sysctl in "General Setup" CONFIG_SYSCTL.

   You should have proc file system support CONFIG_PROC_FS.

   Also serial support for the SIR features CONFIG_SERIAL.

   I am not sure whether there has to be printer support for using a
   printer with Linux/IrDA CONFIG_PRINTER. But I assume this feature is
   not necessary.

   Networking support _must_ be enabled CONFIG_NET.

   Make sure you have module support CONFIG_MODULES in your kernel! Test
   it e.g. with lsmod.

   Also kerneld support CONFIG_KERNELD. But kmod (CONFIG_KMOD) also
   works. A monolithic kernel seems to work, too. But modules are highly
   recommended!

   To use irdadump you probably have to set CONFIG_PACKET.

   If you only apply the Linux/IrDA patch, you should not have to do a
   make clean, so that should save you some time. I suggest you do
   something like this:

   For kernel 2.4 use: make dep && make all && make modules && make
   install && make modules_install. For kernel 2.6 use: make all && make
   install && make modules_install. If you get really strange errors,
   then try to rebuild from scratch after a make clean.
     ________________________________________________________________

2.2.3. IrDA Specific Parameters

   The following is from ../linux-2.4.3/Documentation/Configure.help
   (kernel 2.4) or ../linux-2.6.x/net/irda/Kconfig,
   ../linux-2.6.x/drivers/net/irda/Kconfig (kernel 2.6) with some
   modifications by me. Please consult the latest available kernel
   documentation for current information and new drivers.
     ________________________________________________________________

2.2.3.1. IrDA subsystem support

   CONFIG_IRDA Say Y here if you want to build support for the IrDA (TM)
   protocols. The Infrared Data Associations (tm) specifies standards
   for wireless infrared communication and is supported by most laptops
   and PDA's.

   To use Linux support for the IrDA (tm) protocols, you will also need
   some user-space utilities like irattach . For more information, see
   the file Documentation/networking/irda.txt. You also want to read the
   InfraRed-HOWTO, available at [http://tuxmobil.org/howtos.html]
   TuxMobil .

   This support is also available as a module called irda.o. If you want
   to compile it as a module, say M here and read
   Documentation/modules.txt.

   IrDA Cache last LSAP

   CONFIG_IRDA_CACHE_LAST_LSAP Say Y here if you want IrLMP to cache the
   last LSAP used. This makes sense since most frames will be
   sent/received on the same connection. Enabling this option will save
   a hash-lookup per frame.

   If unsure, say Y.

   IrDA Fast RR's

   CONFIG_IRDA_FAST_RR Say Y here is you want IrLAP to send fast RR
   (Receive Ready) frames when acting as a primary station. This will
   make IrLAP send out a RR frame immediately when receiving a frame if
   its own transmit queue is currently empty. This will give a lot of
   speed improvement when receiving much data since the secondary
   station will not have to wait the max. turn around time before it is
   allowed to transmit the next time. If the transmit queue of the
   secondary is also empty the primary will back off waiting longer for
   sending out the RR frame until the timeout reaches the normal value.
   Enabling this option will make the IR-diode burn more power and thus
   reduce your battery life.

   If unsure, say N.

   IrDA Debug

   CONFIG_IRDA_DEBUG Say Y here if you want the IrDA subsystem to write
   debug information to your syslog. You can change the debug level in
   /proc/sys/net/irda/debug

   If unsure, say Y (since it makes it easier to find the bugs).

   IrLAP Compression support

   CONFIG_IRDA_COMPRESSION Compression is _not_ part of the IrDA(tm)
   protocol specification, but it's working great! Linux is the first to
   try out compression support at the IrLAP layer. This means that you
   will only benefit from compression if you are running a Linux <->
   Linux configuration.

   If you say Y here, you also need to say Y or M to a compression
   protocol below.

   IrLAP Deflate Compression Protocol (EXPERIMENTAL)

   CONFIG_IRDA_DEFLATE Say Y here if you want to build support for the
   Deflate compression protocol. The deflate compression (GZIP) is
   exactly the same as the one used by the PPP protocol.

   If you want to compile this compression support as a module, say M
   here and read Documentation/modules.txt. The module will be called
   irda_deflate.o.

   IrLAN Protocol But currently the IrLAN protocol is no longer
   maintained by the Linux/IrDA core team.

   CONFIG_IRLAN Say Y here if you want to build support for the IrLAN
   protocol. If you want to compile it as a module (irlan.o), say M here
   and read Documentation/modules.txt. IrLAN emulates an Ethernet and
   makes it possible to put up a wireless LAN using infrared beams.

   The IrLAN protocol can be used to talk with infrared access points
   like the HP NetbeamIR, or the ESI JetEye NET. You can also connect to
   another Linux machine running the IrLAN protocol for ad-hoc
   networking!

   IrCOMM Protocol

   CONFIG_IRCOMM Say Y here if you want to build support for the IrCOMM
   protocol. If you want to compile it as a module (you will get
   ircomm.o and ircomm-tty.o), say M here and read
   Documentation/modules.txt. IrCOMM implements serial port emulation,
   and makes it possible to use all existing applications that
   understands TTY's with an infrared link. Thus you should be able to
   use application like PPP, minicom and others. Enabling this option
   will create two modules called ircomm and ircomm-tty.
     ________________________________________________________________

2.2.3.2. Device Drivers

   IrTTY IrDA Device Driver

   CONFIG_IRTTY_SIR Say Y here if you want to build support for the
   IrTTY line discipline. If you want to compile it as a module
   (irtty.o), say M here and read Documentation/modules.txt. IrTTY makes
   it possible to use Linux's own serial driver for all IrDA ports that
   are 16550 compatible. Most IrDA chips are 16550 compatible so you
   should probably say Y to this option. Using IrTTY will however limit
   the speed of the connection to 115200 bps (IrDA SIR mode)

   If unsure, say Y.

   IrPORT IrDA Device Driver

   CONFIG_IRPORT_SIR Say Y here if you want to build support for the
   IrPORT IrDA device driver. If you want to compile it as a module
   (irport.o), say M here and read Documentation/modules.txt. IrPORT can
   be used instead of IrTTY and sometimes this can be better. One
   example is if your IrDA port does not have echo-canceling, which will
   work OK with IrPORT since this driver is working in half-duplex mode
   only. You don't need to use irattach with IrPORT, but you just insert
   it the same way as FIR drivers (insmod irport io=0x3e8 irq=11).
   Notice that IrPORT is a SIR device driver which means that speed is
   limited to 115200 bps.

   If unsure, say Y.

   Winbond W83977AF IrDA Device Driver

   CONFIG_WINBOND_FIR Say Y here if you want to build IrDA support for
   the Winbond W83977AF super-io chipset. This driver should be used for
   the IrDA chipset in the Corel NetWinder. The driver supports SIR, MIR
   and FIR (4Mbps) speeds.

   If you want to compile it as a module, say M here and read
   Documentation/modules.txt. The module will be called w83977af_ir.o.

   NSC PC87108 IrDA Device Driver

   CONFIG_NSC_FIR Say Y here if you want to build support for the NSC
   PC87108 and PC87338 IrDA chipsets. This driver supports SIR, MIR and
   FIR (4Mbps) speeds.

   If you want to compile it as a module, say M here and read
   Documentation/modules.txt. The module will be called nsc-ircc.o.

   Toshiba Type-O IR Port Device Driver

   CONFIG_TOSHIBA_FIR Say Y here if you want to build support for the
   Toshiba Type-O IR chipset. This chipset is used by the Toshiba
   Libretto 100CT, and many more laptops. If you want to compile it as a
   module, say M here and read Documentation/modules.txt. The module
   will be called toshoboe.o.

   SMC IrCC (Experimental)

   CONFIG_SMC_IRCC_FIR Say Y here if you want to build support for the
   SMC Infrared Communications Controller. It is used in the Fujitsu
   Lifebook 635t and Sony PCG-505TX. If you want to compile it as a
   module, say M here and read Documentation/modules.txt. The module
   will be called smc-ircc.o.

   ALi M5123 FIR Controller Driver (Experimental)

   CONFIG_ALI_FIR Say Y here if you want to build support for the ALi
   M5123 FIR Controller. The ALi M5123 FIR Controller is embedded in ALi
   M1543C, M1535, M1535D, M1535+, M1535D South Bridge. This driver
   supports SIR, MIR and FIR (4Mbps) speeds.

   If you want to compile it as a module, say M here and read
   Documentation/modules.txt. The module will be called ali-ircc.o.

   Serial dongle support

   CONFIG_DONGLE Say Y here if you have an infrared device that connects
   to your computer's serial port. These devices are called dongles.
   Then say Y or M to the driver for your particular dongle below.

   Note that the answer to this question won't directly affect the
   kernel: saying N will just cause this configure script to skip all

   ESI JetEye PC Dongle

   CONFIG_ESI_DONGLE Say Y here if you want to build support for the
   Extended Systems JetEye PC dongle. If you want to compile it as a
   module, say M here and read Documentation/modules.txt. The ESI dongle
   attaches to the normal 9-pin serial port connector, and can currently
   only be used by IrTTY. To activate support for ESI dongles you will
   have to start irattach like this: irattach -d esi.

   ACTiSYS IR-220L and IR220L+ dongle

   CONFIG_ACTISYS_DONGLE Say Y here if you want to build support for the
   ACTiSYS IR-220L and IR220L+ dongles. If you want to compile it as a
   module, say M here and read Documentation/modules.txt. The ACTiSYS
   dongles attaches to the normal 9-pin serial port connector, and can
   currently only be used by IrTTY. To activate support for ACTiSYS
   dongles you will have to start irattach like this: irattach -d
   actisys or irattach -d actisys+.

   Tekram IrMate 210B dongle

   CONFIG_TEKRAM_DONGLE Say Y here if you want to build support for the
   Tekram IrMate 210B dongle. If you want to compile it as a module, say
   M here and read Documentation/modules.txt. The Tekram dongle attaches
   to the normal 9-pin serial port connector, and can currently only be
   used by IrTTY. To activate support for Tekram dongles you will have
   to start irattach like this: irattach -d tekram.

   Greenwich GIrBIL dongle

   CONFIG_GIRBIL_DONGLE Say Y here if you want to build support for the
   Greenwich GIrBIL dongle. If you want to compile it as a module, say M
   here and read Documentation/modules.txt. The Greenwich dongle
   attaches to the normal 9-pin serial port connector, and can currently
   only be used by IrTTY. To activate support for Greenwich dongles you
   will have to insert irattach -d girbil in the /etc/irda/drivers
   script.

   Parallax Litelink dongle

   CONFIG_LITELINK_DONGLE Say Y here if you want to build support for
   the Parallax Litelink dongle. If you want to compile it as a module,
   say M here and read Documentation/modules.txt. The Parallax dongle
   attaches to the normal 9-pin serial port connector, and can currently
   only be used by IrTTY. To activate support for Parallax dongles you
   will have to start irattach like this irattach -d litelink.

   Old Belkin dongle

   CONFIG_OLD_BELKIN_DONGLE Say Y here if you want to build support for
   the Adaptec Airport 1000 and 2000 dongles. If you want to compile it
   as a module, say M here and read Documentation/modules.txt. The
   module will be called old_belkin.o. Some information is contained in
   the comments at the top of drivers/net/irda/old_belkin.c.
     ________________________________________________________________

2.2.4. Current Kernel Patches

   Note: donauboe is a new version of toshoboe better FIR support and
   compatibility with Donauoboe chip from
   [http://libxg.free.fr/irda/lib-irda.html] lib-irda. Note: the
   toshoboe drivers has been removed from the 2.6 kernel series.
     ________________________________________________________________

2.3. Kernel Module Options

   This survey of module options was generated with the modinfo command.

actisys.o
Dag Brattli <dagb_at_cs.uit.no> - Jean Tourrilhes <jt_at_hpl.hp.com>
ACTiSYS IR-220L and IR-220L+ dongle driver

ali-ircc.o
Benjamin Kong <benjamin_kong_at_ali.com.tw>
ALi FIR Controller Driver
io int array (min = 1, max = 4), description "Base I/O addresses"
irq int array (min = 1, max = 4), description "IRQ lines"
dma int array (min = 1, max = 4), description "DMA channels"

esi.o
Dag Brattli <dagb_at_cs.uit.no>
Extended Systems JetEye PC dongle driver

girbil.o
Dag Brattli <dagb_at_cs.uit.no>
Greenwich GIrBIL dongle driver

irport.o
Dag Brattli <dagb_at_cs.uit.no>
Half duplex serial driver for IrDA SIR mode
io int array (min = 1, max = 4), description "Base I/O adresses"
irq int array (min = 1, max = 4), description "IRQ lines"

irtty.o
Dag Brattli <dagb_at_cs.uit.no>
IrDA TTY device driver
qos_mtt_bits int, description "Minimum Turn Time"

litelink.o
Dag Brattli <dagb_at_cs.uit.no>
Parallax Litelink dongle driver

nsc-ircc.o
Dag Brattli <dagb_at_cs.uit.no>
NSC IrDA Device Driver
qos_mtt_bits int, description "Minimum Turn Time"
io int array (min = 1, max = 4), description "Base I/O addresses"
irq int array (min = 1, max = 4), description "IRQ lines"
dma int array (min = 1, max = 4), description "DMA channels"
dongle_id int, description "Type-id of used dongle"

old_belkin.o
Jean Tourrilhes <jt_at_hpl.hp.com>
Belkin (old) SmartBeam dongle driver

smc-ircc.o
Thomas Davis <tadavis_at_jps.net>
SMC IrCC controller driver
ircc_dma int, description "DMA channel"
ircc_irq int, description "IRQ line"

tekram.o
Dag Brattli <dagb_at_cs.uit.no>
Tekram IrMate IR-210B dongle driver

toshoboe.o
James McKenzie <james_at_fishsoup.dhs.org>
Toshiba OBOE IrDA Device Driver
max_baud int

w83977af_ir.o
Dag Brattli <dagb_at_cs.uit.no>
Winbond W83977AF IrDA Device Driver
qos_mtt_bits int, description "Mimimum Turn Time"
io int array (min = 1, max = 4), description "Base I/O addresses"
irq int array (min = 1, max = 4), description "IRQ lines"

irda.o
Dag Brattli <dagb_at_cs.uit.no>
The Linux IrDA Protocol Subsystem
irda_debug_R07c03e02 long

irlan.o
Dag Brattli <dagb_at_cs.uit.no>
The Linux IrDA LAN protocol
eth int, description "Name devices ethX (0) or irlanX (1)"
access int, description "Access type DIRECT=1, PEER=2, HOSTED=3"

   But currently the IrLAN protocol is no longer maintained
   by the Linux/IrDA core team.

ircomm-tty.o
Dag Brattli <dagb_at_cs.uit.no>
IrCOMM serial TTY driver

ircomm.o
Dag Brattli <dag_at_brattli.net>
IrCOMM protocol

irnet.o
<none>
<none>
     ________________________________________________________________

2.4. Configuration

2.4.1. Device Numbers

mknod /dev/ircomm0 c 161 0
mknod /dev/ircomm1 c 161 1
mknod /dev/irlpt0 c 161 16
mknod /dev/irlpt1 c 161 17
mknod /dev/irnet c 10 187
chmod 666 /dev/ir*

   There might be some other device number necessary if you want to use
   the irkbd features. You may find the latest device numbers in
   ../src/linux/Documentation/devices.txt.
     ________________________________________________________________

2.4.2. Device Arrangement

   First you should put your IrDA devices in range. Though it might be
   possible that the Linux/IrDA service detects every new device
   automagically I only have good experience with the devices in range
   during the configuration process.

   Keep your infrared devices together in a range below one meter and an
   angle of 30 degree. There has to be a direct line of sight between
   them. If this is not possible, you may use a mirror (an unused M$ CD
   should work quite good).
     ________________________________________________________________

2.4.3. /etc/modules.conf

   Add the following lines to your /etc/modprobe.conf (for kernel 2.4
   /etc/modules.conf) file (attention: the actual filename may depend on
   your Linux distribution):
# IrDA over a normal serial port, or a serial port compatible IrDA port (SIR)
alias tty-ldisc-11 irtty

# IrCOMM (for printing, PPP, Minicom etc)
alias char-major-161 ircomm-tty     # if you want IrCOMM support

# IRLAN
# But currently the IrLAN protocol is no longer maintained
# by the Linux/IrDA core team.
alias irlan0 irlan

# To be able to attach some serial dongles
# These values are hard-coded in irattach (not instance order)
alias irda-dongle-0  tekram             # Tekram IrMate IR-210B
alias irda-dongle-1  esi                # ESI JetEye
alias irda-dongle-2  actisys            # Actisys IR-220L
alias irda-dongle-3  actisys            # Actisys IR-220L+
alias irda-dongle-4  girbil             # Greenwich GIrBIL
alias irda-dongle-5  litelink           # Parallax LiteLink/ESI JetEye
alias irda-dongle-6  airport            # Adaptec Airport 1000 and 2000
alias irda-dongle-7  old_belkin         # Belkin (old) SmartBeam dongle
alias irda-dongle-8  ep7211_ir          # Cirrus Logic EP7211 Processor (ARM)
alias irda-dongle-9  mcp2120            # MCP2120 (Microchip) based
alias irda-dongle-10 act200l            # ACTiSYS Ir-200L
alias irda-dongle-11 ma600              # Mobile Action ma600

# To use the FIR driver. This applies only to the specific device!!!

#options nsc-ircc dongle_id=0x09        # NSC driver on a IBM Thinkpad laptop
#options nsc-ircc dongle_id=0x08        # HP Omnibook 6000
#alias irda0 nsc-ircc

# options smc-ircc ircc_irq= ircc_dma=
# alias irda0 smc-ircc

# options toshoboe max_baud=
# alias irda0 toshoboe

# options w83977af_ir io= io2= irq= qos_mtt_bits=
# alias irda0 w83977af_ir

# IrNET module...
alias char-major-10-187 irnet       # Official allocation of IrNET

   Then do a depmod -a to update, and then all IrDA modules should be
   automagically loaded when you need them. Note for testing reasons you
   may load them manually, but please make sure not to load them twice.
   There might be some other entries necessary, if you want to use the
   irkbd features or an USB dongle. A template file is included in the
   irda-utils package.

   Note: With Debian GNU/Linux however you shouldn't edit
   /etc/modules.conf directly, instead place the lines inside
   /etc/modutils/irda-utils and run update-modules afterwards. Running
   update-modules seems obsolete for 2.6 kernels.
     ________________________________________________________________

2.4.4. /etc/irda

   Have a look into the files in /etc/irda. Edit them to reflect your
   setup.
     ________________________________________________________________

2.4.5. BIOS Configuration

   Make sure your infrared port is enabled in the BIOS and check what
   interrupt and port address it uses. With some laptops it seems
   necessary to have Microsoft-Windows installed to be able to set BIOS
   parameters.

   I have got reports, that on some laptops, when connected to a docking
   station, the infrared port was disabled .
     ________________________________________________________________

2.4.6. Serial Port

   Please decide first whether you want to set up Irda either in SIR or
   in FIR mode. It is recommended to start with SIR.
     ________________________________________________________________

2.4.6.1. SIR

   Choose the ttySx according to your SIR port. Hint: dmesg | grep tty
   (for details see the chapter Starting the IrDA Stack below).

   To get the SIR "serial" device have a look into the BIOS. Then run
   dmesg | grep tty to get a survey of tty devices supported by your
   machine. Now try to choose the one, which is probably the IrDA
   device.
     ________________________________________________________________

2.4.6.2. FIR

   If you don't succeed with SIR (which seems a rare case) you may try
   FIR. First look up the BIOS. To avoid some conflicts with serial
   devices you should do setserial /dev/ttySx uart none. Note: never use
   setserial /dev/ttySx uart none, when setting up IrDA in SIR mode.

   From Florian Lohoff You should also set "port 0x0 irq 0" otherwise
   you will see interesting effects if there is suddenly a different S1
   e.g. by inserting a modem PCMCIA card. The serial driver will then
   touch the OLD ports without having acquired those which will cause
   the irda stuff to die/hang. This is a bug i havent been able to find
   in the serial driver but it definitly exists (Put a printk into the
   serial_out serial_in stuff).
     ________________________________________________________________

2.4.7. Resource Conflicts: IRQ, IO

   Is some cases IRQ conflicts may occur, especially conflicts with
   sound, PCMCIA or the hotplug system have been reported. Check cat
   /proc/interrupts to get some information about IRQ usage on your
   machine.
     ________________________________________________________________

2.4.8. Starting IrDA

   Most important, you must sync your disks!!! Maybe you have to reboot
   your machine. Have you read the disclaimer?

   There are three sorts of low level drivers: SIR, FIR and dongle for
   machines without an in-built InfraRed port. To start with Linux/IrDA
   I recommend to use the SIR method.

   Load the modules modprobe irda irtty. irattach /dev/ttyS1 -s to
   attach the IrDA device to the IrDA services. Check lsmod and dmesg.

   irdadump should show all available IrDA devices in range now. Hint:
   If you are connecting different Linux boxes, you may use hostname
   YOUR_HOSTNAME to set a unique hostname for each computer.

   On the "server" side do pppd /dev/ircomm0 LOCAL_IP:REMOTE_IP On the
   "client" side do pppd /dev/ircomm0 .

   You may now test the connection with ping. And use all sorts of
   networking connections (ssh, NFS, ...) now.
     ________________________________________________________________

Chapter 3. Specific Connections and IrDA - Protocols

3.1. Starting the IrDA Stack

   There are three sorts of low level drivers: SIR, FIR and dongle.
     ________________________________________________________________

3.1.1. Standard InfraRed - SIR

     * Try to find out which serial port is used by the IR device. You
       may do so by watching the output of dmesg. If serial support is
       modularized do an modprobe serial first. Look for an entry like:

Serial driver version 4.25 with no serial options enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A     #first serial port /dev/ttyS0
ttyS01 at 0x3000 (irq = 10) is a 16550A    #e.g. infrared port
ttyS02 at 0x0300 (irq = 3) is a 16550A     #e.g. PCMCIA modem port

       If this is not the case, you either don't have infrared support
       enabled in the BIOS or the SIR mode of your infrared device is
       not detected by the kernel. Currently I know only two laptop
       models with this effect, the HP OmniBook 800 and the Toshiba
       Libretto models. I am not sure whether PnP support effects the
       detection of the IR port. If you are unsure try it out and let me
       know the results. Maybe you can use FIR mode if SIR doesn't work.
     * In some situations you may have to use setserial /dev/ttyS<0-2>
       port 0xNNNN irq M to set the values for your infrared serial
       port, especially if the infrared port is a separate serial line.
       You usually don't need to change the values! For further
       information look into the FAQ section below.
     * If you don't use kerneld or kmod insert the irda module with
       modprobe irda.
     * Do lsmod. It should show the modules irda and irtty now.
     * A look into /var/log/messages should show the entry "Serial
       connection established" now.
     * Give irattach some time, e.g. seven seconds, to detect other IR
       devices. Then watch the output from the kernel that you will
       hopefully get in /var/log/messages. It should look like the
       following (I removed some lines, which were not related to
       Linux/IrDA):

Jan  2 12:57:26 japh kernel: ttyS00 at 0x03f8 (irq = 4) is a 16550A
Jan  2 12:57:26 japh kernel: ttyS02 at 0x03e8 (irq = 4) is a 16550A
Jan  2 12:57:26 japh kernel: Linux Support for the IrDA (tm) protocols (Dag Br
a
ttli)
Jan  2 12:59:09 japh syslog: executing: 'echo 1 > /proc/sys/net/irda/discovery
'
Jan  2 12:59:09 japh syslog: Setting discovery to 1 exited with status 1
Jan  2 12:59:09 japh syslog: + 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli
Jan  2 12:59:09 japh syslog: + 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli
Jan  2 12:59:09 japh syslog: Serial connection established.
Jan  2 12:59:09 japh kernel: IrDA irda_device irda0 registered.
Jan  2 13:01:22 japh syslog: executing: './drivers start '
Jan  2 13:01:22 japh syslog: Serial connection established.
Jan  2 13:01:42 japh syslogd: Printing partial message
Jan  2 13:01:42 japh 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli
Jan  2 13:02:49 japh kernel: IrDA Discovered: japh
Jan  2 13:02:49 japh kernel:     Services: Computer

     * Even more information you can get with cat
       /proc/net/irda/discovery .
     ________________________________________________________________

3.1.2. Fast InfraRed - FIR

   The IrDA(TM) standard knows three kinds of speeds:

     * SIR = Standard IrDA, up to 115kbps IrDA,
     * MIR = Medium Speed IrDA,
     * FIR = Fast IrDA (4Mbps),
     * VFIR = Very Fast IrDA(16Mbps), seems to become a future standard

   Up to 115.200bps (SIR) many (probably all) infrared controllers work
   like a serial port and use a RZI (return to zero, inverted)
   modulation. Not every infrared controller supports 4Mps (FIR), up to
   4Mbps they have to use 4PPM (4 pulse position) modulation technique.
   A list of supported FIR chips is included in
   /usr/src/linux/drivers/net/irda/Kconfig. You may start the FIR
   service by loading the according module. Linux/IrDA will probe your
   hardware then. More drivers are under development.

   So what speeds can you expect? Using SIR, you should be able to get
   about 10 Kbytes/s. Using FIR (4Mbps) you can get over 300 Kbytes/s
   (if you are lucky).
     ________________________________________________________________

3.1.3. Dongle Connection - Infrared Adapters for the Serial Port

   A survey of supported dongles is included in
   /usr/src/linux/drivers/net/irda/Kconfig.

   Dag Brattli wrote (modified by wh): "To use dongles you have to do
   something like this:
modprobe tekram         # or esi or actisys
irattach -d tekram      # or -d esi or -d actisys

   modprobe is not necessary, if /etc/modules.conf is correct. As you
   can see, you must still use the -d option with irattach since it is
   possible to have two serial ports using different dongles at the same
   time (so the tty you are binding must know which dongle it is
   supposed to use). So if you have two dongles and two serial ports,
   you could do something like this:
modprobe tekram
modprobe esi
irattach /dev/ttyS0 -d esi &
irattach /dev/ttyS1 -d tekram &

   PS: I would not try to turn the two dongles against each other, since
   I really don't know how the stack would react :-) ... Since I don't
   have any of these new ACTiSYS 220L+ dongles, I'm not able to test it.
   Since the new dongle has support for one extra speed (38400bps), you
   must specify the dongles differently with irattach so that the kernel
   knows which dongle you are using (and what QoS can be used):
irattach /dev/ttyS0 -d actisys     # for the 220L dongle
irattach /dev/ttyS0 -d actisys+    # for the 220L+ dongle

   The current implementation of dongle support does not have any state
   associated with it, so its not possible to use both ACTiSYS dongles
   (220L and 220L+) at the same time (connected to two serial ports) for
   now. If someone needs to be able to do so, please mail me (Dag
   Brattli) and I will think about it!"

   Note: When I tried to use an infrared modem (Swissmod 56Ki,
   manufactured by Telelink AG) connected to my laptop (IrDA works with
   Microsoft-Window$95 only, due to non-standard hardware) I had to
   remove the infrared support in the BIOS to get it working!

   Dag Brattli: "It is now possible to use irport instead of irtty! I
   have moved all the dongle stuff out of irtty and into irda_device, so
   it will also be possible to attach dongles to irport. Need however to
   make a small user-space utility dongle_attach that can be used to
   attach dongles to a specific driver instance. BTW: irattach is still
   working as before, and you will not notice the difference even when
   attaching dongles to irtty (I've just redirected the dongle ioctl to
   irda_device). Irport may be interesting since you avoid one software
   interrupt (bh) level, and it's also forced to work in half duplex
   mode so you don't get any echo if the irda port itself don't have
   echo-cancellation (Girbil dongle and HP-4000 etc) ... To use it, you
   must supply the parameters to modprobe like this: modprobe irport
   io=0x3f8 irq=4, or whichever values you use. You can also add these
   parameters to /etc/modprobe.conf (kernel 2.6) or /etc/modules.conf
   (kernel 2.4) like this: options irport io=0x3f8 irq=4, but then you
   must remember to do a depmod -a and use modprobe irport instead of
   modprobe."

   Alvin Loh: "Anyone with a ESI 9680C can use both parallax's and ESI's
   signalling scheme, meaning they can use Parallax's driver with
   ESI9680C to work. "
     ________________________________________________________________

3.1.4. Dongle Connection - Infrared Adapters for the USB Port

   Not every USB dongle does work. For details see the dedicated chapter
   below IrDA and USB.
     ________________________________________________________________

3.1.5. Dongle Connection - Infrared Motherboard Adapter

   Support for e.g. the ACTiSYS IR2000 dongle has been implemented.

   From James I have this description about setting up the hardware:
   There are two configurations, a five pin in line connector and a 6
   pin DIL (at the end of a 18 pin DIL header). Basically any IrDA
   compatible transceiver will work (I have a stack of old IRM3001 these
   are now obselete) you need to hook a capacitor (use a tantalum about
   ~1uF) between 5V and 0V near the transceiver and then connect
   everthing else up (RX->RX, TX->TX, 5V->5V, and 0V-0V). If you don't
   like soldering irons, lots of companies do sell IR modules for the 5
   pin connectors that fit into a hole in your case.
     ________________________________________________________________

3.2. Printer Connection

   Prepare Linux/IrDA as described above. Especially check for the
   existence of /dev/irlpt* (if it doesn't exists do as root mknod
   /dev/irlpt0 c 161 16). Now you may perform a first and simple test.
   Try to write a small file to /dev/irlpt0 by cat FILE >/dev/irlpt0. Do
   not wonder about a bad format (the lines form sort of steps) this is
   just a first check. If this doesn't work please check the permissions
   of /dev/irlpt0. Watch whether the connection indicator of your
   printer shows activity, e.g. the green light above the InfraRed port
   of a HP 6P/MP comes on (lower left hand corner, near the paper tray).

   The cat command will not produce formatted output, but is useful for
   testing. If it works, you may set up an IrDA capable printer
   depending on your printer system. See the documentation, e.g. the
   Printing-HOWTO from [http://www.linuxprinting.org] LinuxPrinting.org
   for detailed information.

   With the [http://www.cups.org] Common Unix Printing System - CUPS use
   for example with a HP LaserJet 2100:
lpadmin -p IRDA_PRINTER_NAME -v parallel:/dev/irlpt0 -E -m de/hp2100_6.ppd.gz

   To get a list of paths to your ppd files use lpinfo -m.

   Of course other printing systems will also work, e.g. you may edit
   /etc/printcap and include irlpt0 as the printer device.

   The better way is to change your /etc/printcap to use /dev/irlpt0 in
   addition or instead of /dev/lp1.

   For easy printer setup you may use a printing software like
   APSFILTER, MagicFilter EZ-Magic (with RedHat there should also be a
   GUI for this purpose). Make a copy of /etc/printcap before.

   Example for APSFILTER with a HP 6P (non-postscript, HP 6MP is with
   postscript). The two relevant questions are: "Do you have a (s)serial
   or a (p)arallel printer interface?" Answer "p" "What's the device
   name for your parallel printer interface?" Answer "/dev/irlpt0"

   Restart the print daemon with kill -HUP <PID of lpd>. If you use
   another print daemon choose the according command.
     ________________________________________________________________

3.3. LAN Connection - IrLAN

   You might connect your Linux box using IrLAN to another network
   device such as a Linux box with IrLAN, a HP NetBeamer or a
   Microsoft-Windows95 box with Infrared Network Device support. But
   this protocol is no longer maintained by the Linux/IrDA core team.
     ________________________________________________________________

3.4. HP NetBeamer Connection

   As far as I know this device uses IrLAN. But currently this protocol
   is no longer maintained by the Linux/IrDA core team.
     ________________________________________________________________

3.5. Palm III Connection - IrCOMM

     * PPP Rui Oliveira wrote: "This is just to let you know that with
       the latest IrCOMM patch (050998) of Takahide Higuchi, I managed
       to HotSync and establish a PPP connection between my Palm III and
       my Linux box. I'm using IRLink (from IsComplete) to redirect the
       serial port to ir. Communication with pilot-xfer (available from
       the "pilot-link" package at
       [http://www.slac.com/pilone/kpilot_home/] kpilot ) works
       flawlessly. Although I was able to establish a PPP connection,
       I'm still unable to fetch mail and do Web browsing. This is
       probably due to connection time-outs. I am checking this out.
       Please see the [http://tldp.org/HOWTO/PPP-HOWTO/] PPP-HOWTO for
       further information about PPP. I managed to establish an
       apparently robust connection between my Linux box and a Palm III.
       The pppd invocation I use is as follows:

   /usr/sbin/pppd /dev/ircomm0 57600 192.168.2.10:192.168.2.11
   proxyarp passive silent persist noauth local nodetach

       Over the PPP connection I used ping, ssh, and HTTP. Strange is
       however the fact that discovery must be enabled (maybe obsolete)
       . Otherwise, even with an active IrCOMM connection, the link goes
       down due to a IrLAP disconnect. The pilot-link tools (used for
       Linux/Palm synchronization) also ran flawlessly over IrCOMM via
       /dev/ircomm0." There are also reports about kpilot, though not
       working as flawlessly as pilot-xfer.
     * IrCOMM Jon Howell wrote: "I thought I'd try IrCOMM, since the
       Palm III can be made to reroute serial info to the IR port (using
       IrLink from IS/Complete, available at
       [http://www.palmcentral.com] PalmCentral , and then you can run a
       terminal program (like PalmTelnet in serial mode) over IrDA. I
       can only assume it's using the IrCOMM protocol. I've tested this
       configuration between two Palm Pilots, but of course I can't know
       what the protocol running over the IR is." (1) Start HotSync on
       your Palm. You need the
       [http://www.palm.com/support/downloads/irenhanc.html] IrDA
       upgrade for the Palm to have IrCOMM support (2) Place the Palm in
       front of the dongle. (3) Start pilot-xfer -p /dev/ircomm0 -s
       <sync-dir> . And if you are lucky it will start syncing. If you
       start pilot-xfer before you start HotSync on the Pilot, you will
       _not_ be lucky! Maybe a terminal program like PalmTerm or
       [http://pamupamu.tripod.co.jp/soft/mterm/mterm_E.htm] MiniTerm (a
       former version of this HOWTO referred to it as MTerm) is also
       useful.

   Wessel de Roode wrote: The Palmpilot is default locked on 57k. You
   can however if you write your own software for the Pilot, use the
   115k line settings. I quote a part from the irlib.h:
---------- irlib.h from the SDK 3.0 from palmpilot -----
// Options values for IrOpen
#define irOpenOptBackground     0x80000000   // Unsupported background task us
e
#define irOpenOptSpeed115200    0x0000003F   // sets max negotiated baud rate
#define irOpenOptSpeed57600     0x0000001F   // default is 57600
#define irOpenOptSpeed9600      0x00000003

   Peter Pregler reported: If the Palm enters the range of the
   irda-device a popup appears with the text "Transmission: waiting for
   sender"

   Ron Choy answered: There is a software called
   [http://hp.vector.co.jp/authors/VA005810/irda/shutup10.zip] ShutupIR
   that is supposed to help with this problem of annoying popup I
   haven't tried it but it looks like it would fix your problem.
     ________________________________________________________________

3.6. Linux Terminal on Palm (Handspring Visor) via IR

   by Chris Morris on Linux/IrDA list: In addition to using IrDA to
   hotsync my Handspring Visor I got my Handspring visor to work as a
   Linux text terminal via infrared last night. My computer is a Dell
   Inspiron 3800 (BTW I wracked my brains for weeks trying to get IR to
   work. The whole problem was caused by Linux looking at the wrong IRQ
   for ttyS3 . ). I am using Beam Sync for Visor V1.0b2 by
   [http://muchy.com/index.html] Hacker Dude-san (in Japanese) and
   [http://pamupamu.tripod.co.jp/soft/mterm/mterm_E.htm] MiniTerm (a
   former version of this HOWTO referred to it as MTerm) by Shigeyuki
   Seko . On the laptop I have IrDA set to SIR mode and COM 3 via BIOS.
   I have to set /dev/ttyS3 to IRQ3 via setserial /dev/ttyS3 irq 3 on
   boot up. After boot up I do a:
/sbin/modprobe irda
/sbin/modprobe irtty
/sbin/modprobe ircomm
/sbin/ircomm-tty
/usr/sbin/irattach /dev/ttyS3 -s

   cat /proc/net/irda/discovery shows the visor as IrComm Now
   /etc/mgetty+fax/mgetty.conf has to have these options: port ttyS3
   direct y speed 9600 , faster maybe possible but only 9600 worked for
   me so far toggle-dtr n Then in /etc/inittab: palm:235:respawn:
   /sbin/mgetty ircomm0 After all of this I can start MiniTerm, issue a
   '/sbin/init q' then send a few <CR> from the Visor and I get a text
   termianl login. While composing this email I found a previously
   undiscovered website that seems most helpful:
   [http://abgruen.de/palm/palm-ppp-mini.txt] palm-ppp-mini
     ________________________________________________________________

3.7. Psion 5 Connection

   Andrew Chadwick wrote: A nifty way to check that the baud rates for
   SIR are set up properly (if you have a Psion Series 5) is to point
   the S5 at your Linux box's IR window and try to beam a file. While
   the beamer dialog's on the screen, the S5 will try to make an IrDA
   connection (even when it claims it can't find another IR machine).
   You should be able to do a cat > /dev/ttyS3 and if the serial
   parameters are right on both machines, you should see the words
   "Symbian EPOC" (machine ident) scroll past amidst the spew.

   Fons Botman wrote: " Maybe someone with a Psion 5 would like to test
   this program. It emulates the protocol for the Psion 5 IR send and
   receive command for files on linux. You can now exchange files with
   simple commands. The transfer rate is 9.7 KBytes/sec on a 115KB SIR
   link for big files which is not bad methinks. It is beta, so be sure
   to backup the Psion first, I did get a soft reset once (no data
   loss). ;-)" I have put the source into the appendix.
     ________________________________________________________________

3.8. Connecting from Linux to WinCE 2.11

   Submitted by Arthur Tyde and Bryan Abshier of Linuxcare Inc.

   This will tell you how to set up a masqueraded PPP connection via.
   IrDA from WinCE to a Linux based notebook computer. Once you are IP
   connected, the rest is up to you. We put this together as a guide for
   Sony notebook users with Casio E-100/105 PDA's, though the procedure
   should work for any WinCE 2.11 device with infrared capabilities
   talking to any notebook. Do all the Linux side testing signed on as
   root, standard warnings apply.

   Configure WinCE Configure a network connection for your WinCE device.
   Go into "Connections" and create a "Direct Connection" Name it
   something meaningful, for device select "Infrared Port". Go into
   settings and change the baud rate to 115200, this is the max for
   WinCE. Go to TCP/IP settings and check "Use server-assigned IP
   address," and "Use software compression," and "Use IP header
   compression" Make sure "Use Slip," is unchecked. For Name Servers,
   make sure "Use server-assigned addresses" is checked. Go to Start,
   Settings, Communications, Identification and enter something for the
   Device Name. (I used "cetoy") You most likely already have these
   values set if you have synced with a Win9x desktop using Activesynch.

   Configure Linux/IrDA Set up IrDA support on your notebook (described
   elsewhere) and get to the point where your notebook will discover an
   IrDA compliant device. A good sign is the irda0 device will show up
   when you execute ifconfig. It will not have an IP address, this is
   ok.

   Setup the Connection Test the discovery by setting an IrDA device in
   range of your IR port, wait 5 seconds, and;

   cat /proc/net/irda/discovery

   For example, the Ericsson I888 World Phone with IR port enabled
   should immediately show something like this;

"name:I 888 WORLD   ,hint:0x9104,saddr:0x838470e5,daddr:0x152dceaa"

   Your WinCE machine will not be discovered unless it's actively
   looking for a connection. So, if you want to test with WinCE position
   your device and double tap on the network icon you created in step 2,
   you should see something like this:

"name:mytoy,hint:0x8204,saddr:0x838470e5,daddr:0x00000b72"

   The name displayed will be whatever value you have entered into the
   Start, Settings, Communications, Identification as the Device Name.
   At this point, with basic IrDA functioning- we can move on to
   establishing a PPP connection for WinCE. These scripts can also be
   used for serial cable connects. Create the following files and copy
   them into the directory indicated.

   /usr/sbin/cebox.sh - make it executable
#!/bin/sh
pppd call cebox

   Because Microsoft likes to break standards, you need the following
   chat script. This will feed WinCE the proper ASCII keywords it wants
   before allowing a PPP connection.

   /etc/ppp/cebox.chat
TIMEOUT 3600
"CLIENT"    "CLIENT\c"
""      "SERVER\c"

   The following file will allow you to specify the IP addresses, IR (or
   serial port if using a cable) device, DNS and so forth. I do not
   recommend you change the 192.IP addresses below. WinCE really has an
   affection for 192.168.55.100 because all the MS synch tools seem to
   have it hardcoded. DNS can be whatever you normally use.

   /etc/ppp/peers/cebox
/dev/ircomm0 115200 crtscts
connect '/usr/sbin/chat -v -f /etc/ppp/cebox.chat'
noauth
local
192.168.55.101:192.168.55.100
ms-dns 10.2.0.1

   Testing the connection Ok, now you can test the connection to make
   sure it all works. Reboot your machine, run irattach /dev/ttyS2 -s
   (/dev/ttyS2 being the serial port your BIOS sees the IR device as, if
   irattach is not running, start it) Align the IR ports, at the Linux
   command prompt type /usr/sbin/cebox.sh, and simultaneously press
   return to start cebox and double tap your connection icon in WinCE.
   You should get a happy message from WinCE reporting Connecting to
   Host, Device Connected, Authenticating User, User Authenticated and
   finally Connected. You should see something like this when you are
   connected:
irda0     Link encap:IrLAP  HWaddr 06:89:d0:58
      UP RUNNING NOARP  MTU:2048  Metric:1
      RX packets:246 errors:0 dropped:0 overruns:0 frame:0
      TX packets:251 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:8

ppp0      Link encap:Point-to-Point Protocol
      inet addr:192.168.55.101 P-t-P:192.168.55.100 Mask:255.255.255.255
      UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
      RX packets:10 errors:0 dropped:0 overruns:0 frame:0
      TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:10

   The following script sets up IrDA, establishes a ppp connection with
   WinCE, and then sets up IP masquerading. It is provided as an example
   of how you can tie this all together. This is more or less a manual
   approach. You can get creative, start irattach at boot and stick a
   line in inittab to constantly look for a WinCE connection on the IR
   port. This will however, run down your batteries and limit your
   ability to access other IR gadgets. I just use the script below.
   Position the device, run wince and start communications on your PDA
   when the script tells you to.

   /usr/local/bin/wince - make this executable
#!/usr/bin/perl
use strict;
#
# Enable IrDA, start ppp0 and set up WinCE masquerading
# A. Tyde - Linuxcare Inc.
#
print "\n-> Setting up IR infrastructure...\n";
system("killall irattach 2>/dev/null");
sleep 1;
system("/usr/sbin/cebox.sh");
print "   Start WinCE Serial or IR networking now!\n";
open(ECHO,">/proc/sys/net/ipv4/ip_forward") or die "Can not open /proc/sys/net
/
ipv4/ip_forward";
print ECHO "1";
close (ECHO);
print "   Serving 192.168.55.100 to WinCE device...\n\n";
system("ipchains -F");
sleep 5;
system("ipchains -P forward DENY");
system("ipchains -A forward -s 192.168.55.100/32 -j MASQ");
exit 0;
     ________________________________________________________________

3.9. Connecting from Linux to WinCE 3.0 (aka PocketPC)

   This chapter is a courtesy of Stanislav Sokolov.

   This section covers how to connect a PocketPC device to a Linux box.
   The information provided in section "Connecting from Linux to WinCE"
   (found also at [http://www.cewindows.net/wce/linux-serial.htm]
   CEwindows ) does not apply to PocketPC as Microsoft in one of there
   brighter moments removed support for direct IrDA connections from
   version 3.0 of WinCE. I used the document "Linux to Windows CE
   Connection" (found at [http://www.the-gadgeteer.com/linux_ce.html]
   The Gadgeteer ) as a starting point, but had to modify and simplify
   several aspects. This section will go as far as ping between PocketPC
   and Linux. You should be able to find many networking applications at
   [http://www.pdacentral.com/wince/ftp.htm] PDAcentral,
   [http://www.cam.com] CAM or [http://www.wincecity.com] WinCEcity .

   Here is the system I used:

     * Compaq iPAQ with PocketPC Version 3.0.9348 (I don't know if this
       would work for PocketPC 2002 as Microsoft likes changing
       standards from version to version).
     * On the Linux side was a Compaq LTE5250 laptop with Slackware
       Linux 7.1.
     * Kernel 2.4.19
     * PPP 2.4.1 (PPP must not be older than 2.4.0 when used with kernel
       2.4.x)

   On the PocketPC side go to Start -> Settings -> Connection -> Modem.
   Make a new connection, call it something meaningful (I use Linux-m),
   choose "Generic IrDA modem", set baud rate to 115200. Tap "Advanced".
   In "Port Settings" select 8-N-1-Hardware and check "Enter dialing
   commands manually". This is done so as PocketPC would not try to dial
   a phone number as we do not want it. The other two boxes should
   remain unchecked. In TCP/IP select "Use server-assigned IP address"
   uncheck "Use Slip", but check "Use software compression" and "Use IP
   header compression". In "name Servers" select "Use server-assigned
   addresses". Tap "ok" and "Next". You should not be asked for
   telephone number (if you are, just enter 1 and doublecheck that you
   actually selected manual dialing commands box in advanced section).
   Make sure that "Cancel call..." and "Wait for dial tone..." boxes are
   unchecked. We are now done with the PocketPC part.

   On Linux we must first make sure that all the necessary modules are
   loaded. Here are the modules that were loaded and in use during a
   successful communication session:
Module                  Size  Used by    Not tainted
ircomm-tty             31040   2
ircomm                 13448   0  [ircomm-tty]
irtty                   7616   2
ppp_async               6688   1
ppp_generic            15740   3  [ppp_async]
slhc                    4592   1  [ppp_generic]

   Make sure that ls -la /dev/ircomm* produces a similar output:
crw-------   1 root     root     161,   0 Nov 25 15:09 /dev/ircomm0
crw-r--r--   1 root     root     161,   1 Nov 22 19:30 /dev/ircomm1

   Start irattach irattach /dev/ttyS2 -s

   Now we have to enable a login terminal on the IrDA port. I used
   agetty (or your favorite getty variant) for that purpose. Add the
   following line to your /etc/inittab:
s3:2345:respawn:/sbin/agetty ircomm0 115200 vt100

   save the file and activate it by restarting init:
init 2; sleep 3 ; init 3

   Also prepare the following shell script that will perform the second
   phase of connection:
#!/bin/sh
/usr/sbin/pppd -detach noauth local lock 192.168.55.1:192.168.55.2 ircomm0 115
200 &

   Now the connection itself: Align the IR ports and on the PocketPC go
   to Start -> Programs -> Connections and tap the connection that you
   created (Linux-m). In the "Connect To" dialog that shows up leave
   everything unfilled and just tap on "Connect". "Manual Dialing
   Terminal" will show up. There you should see the login prompt for
   your Linux-box (If the login prompt does not show up at once, bring
   up the virtual keyboard and tap 'enter'). You do not need to login
   (though it is a bonus - speaking of the ultimate remote controller :)

   On the Linux-box execute the pppd command as soon as some "garbage"
   shows up in the PocketPC's terminal, tap "File" -> "Continue". pppd
   should come with the following message:
Using interface ppp0
Connect: ppp0 <--> /dev/ircomm0
Cannot determine ethernet address for proxy ARP
local  IP address 192.168.55.1
remote IP address 192.168.55.2

   And PocketPC should show a dialog with "Status: Connected". You can
   run ifconfig to check that ppp0 interface is up and running. ping
   192.168.55.2 should produce something like that:
PING 192.168.55.2 (192.168.55.2): 56 data bytes
64 bytes from 192.168.55.2: icmp_seq=0 ttl=32 time=62.5 ms
64 bytes from 192.168.55.2: icmp_seq=1 ttl=32 time=310.0 ms
64 bytes from 192.168.55.2: icmp_seq=2 ttl=32 time=59.9 ms
64 bytes from 192.168.55.2: icmp_seq=3 ttl=32 time=59.8 ms
64 bytes from 192.168.55.2: icmp_seq=4 ttl=32 time=60.0 ms

--- 192.168.55.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 59.8/110.4/310.0 ms

   RTT will depend on the distance and lighting conditions. When you tap
   "Disconnect" something like that will show up:
LCP terminated by peer
Modem hangup
Connection terminated.
Connect time 2.6 minutes.
Sent 1336 bytes, received 1274 bytes.

   Now, if not all went that well, check the following:

     * getty is started. It will not start if /dev/ircomm0 is not
       configured. That is modprobe ircomm-tty should come up before
       getty is invoked.
     * "Enter dialing commands manually" is checked. PocketPC should not
       attempt to dial any number!
     * You have async PPP support in kernel. modprobe ppp_async loads
       successfully or you don't have PPP async compiled into kernel.
       Otherwise you will get the "Couldn't set tty to PPP discipline:
       Invalid argument" error message.
     * pppd should be setuid root: chmod u+s /usr/sbin/pppd.
     ________________________________________________________________

3.10. Cellular Phone Connection

   As far as I know some cellular phones use the IrCOMM standard, e.g.
   Ericsson SH888 and NOKIA 6110 (I'm not sure about the NOKIA 8110).
   Some cellular phones (Ericsson T68) use the IrOBEX standard or IrMC.
   For more and general information about Linux and cell phones see
   [http://tuxmobil.org/phones_linux.html] TuxMobil . You may use IrCOMM
   to set up a PPP modem connection and OpenOBEX to send or retrieve
   files (e.g. addressbook entries, logo, ringtones).
     ________________________________________________________________

3.10.1. Generic Instructions

   This chapter describes how to connect your mobile phone via IrDA with
   your Linux box. It is based on a report by Matthias Schmidt. It was
   tested with the following mobiles:

     * Ericsson T39m
     * Siemens S25
     * Siemens S35i
     * Siemens ME45
     * Nokia 6110
     * Nokia 6210

   Configure the IrDA basics as described above (kernel configuration,
   /etc/modules.conf, irattach, PPP) (for detailed information about PPP
   see also the [http://tldp.org/HOWTO/PPP-HOWTO/] PPP-HOWTO. Now check
   whether your mobile phone was found:
# irdadump
xid:rsp be1eb736 > 08666644 S=6 s=4 SIEMENS S35 hint=9024 [ Modem IrCOMM IrOBE
X ] (28)
# irdadump
xid:rsp be1eb736 > 35450000 S=6 s=4 Nokia 6100 hint=8101 [ PnP Telephony ] (28
)
# irdadump
xid:rsp be1eb736 > 04489982 S=6 s=5 SIEMENS ME45 hint=b124 [ PnP Modem Fax IrC
OMM IrOBEX ] (29)
     ________________________________________________________________

3.10.1.1. PPP dial-up Software

3.10.1.1.1. minicom

   There are several ways to connect to your ISP. The easiest (and
   sometimes the only) way is to use a terminal program like minicom.
     ________________________________________________________________

3.10.1.1.2. wvdial

   If you prefer more comfort, you can use
   [http://www.worldvisions.ca/wvdial/] wvdial. It's easy to configure
   and it works with a lot of roaming providers and the german Tante T.
   gh0st and me did some testing yesterday and we weren't able to
   connect to the dial-in server of the HRZ with wvdial. wvdial always
   failed with "Bad password", because the server respondend faster that
   the mobile softmodem could send the login and password strings. See
   the standard ppp config below. /etc/wvdial.conf:
[Dialer Defaults]
Modem = /dev/ircomm0
Baud = 9600
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Password = internet
Username = internet
Phone = 00393492002800
ISDN = 0
Modem Type = Analog Modem

[Dialer shh]
Init3 = ATM0
     ________________________________________________________________

3.10.1.1.3. PPP Tools

   Problems with wvdial (see explanation above)? IMHO the best way is to
   use the standard [http://ppp.samba.org/ftp/unpacked/ppp/] PPP tools .
   You can configure them via pppconfig, start with pon and stop
   connection with poff.

   Example files for PPP with a connection named irda:
   /etc/ppp/pap-secrets
# username      connection-name password
test    irda            test

   /etc/ppp/peers/irda
hide-password
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/irda"
debug
/dev/ircomm0
9600
defaultroute
noipdefault
user test
remotename irda
ipparam irda
usepeerdns

   /etc/chatscripts/irda
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED
'' ATZ
# dial-in number of the ISP
OK-AT-OK ATDT<YOUR_ISP_PHONE_NUMBER>
CONNECT \d\c
     ________________________________________________________________

3.10.1.2. Logos, Sounds, SMS, ...

   If you get your mobile working via infrared, you can do some nice
   stuff with it. You can save your phonebook or your SMS, send SMS, put
   new logos (BMP format) on it, save the old logo to your harddisk and
   do the same with your ringtones (MIDI). To do all this nice things,
   you'll need the following:

     * a OBEX capable mobile phone, e.g. a Siemens mobile-phone
     * a working infrared connection
     * the [http://www.hendrik-sattler.de/scmxx/] scmxx tool
     * gscmxx (optional)

   Bind your mobile phone to IrDA services

# irattach /dev/ttyS1 -s
IrDA: Registered device irda0

   Check the connection
# irdadump
xid:cmd 9d5dcefa < ffffffff S=6 s=3 (14)
xid:cmd 9d5dcefa < ffffffff S=6 s=4 (14)
xid:rsp 9d5dcefa > 08666644 S=6 s=3 SIEMENS S35 hint=9024 [ Modem IrCOMM IrOBE
X ] (28)

   Show general information about your mobile phone
# scmxx -i
Accessing device /dev/ircomm0
OK, a modem device is present.
Vendor:         SIEMENS
Model:          S35i
Revision:       20
Serial (Phone): xxxxxxxxxxxxxxx
Serial (SIM):   xxxxxxxxxxxxxxx
SIM-ID:         xxxxxxxxxxxxxxxxxxxxx
Operator:       D2
SMS Server:     +491722270333
Charset:        GSM
Battery:        40%
Signal/BER:     -79 dBm/?
Time:           02/10/07,11:48:49
Readable Slots: bmp: 0-1, mid: 0, vcs: 1-30
Phonebooks:     FD, SM, ON, ME, LD, MC, RC, OW, MS, CD, BL, RD, CS
SMS storages:   SM

   Save your phonebook to disk
# scmxx -g -PSM -f phonebook
Accessing device /dev/ircomm0
OK, a modem device is present.
Detected SIEMENS S35i
phonebook created.
Receiving: 1 2 3 4 5 6 7 8 9 [...]
Received all gettable entries

   Show your SMS (here in slot 3)
# scmxx -g -S3 -f -
Accessing device /dev/ircomm0
OK, a modem device is present.
Detected SIEMENS S35i
Looking for SMS of specified type...
Receiving incoming, read SMS from slot 3.
Slot: 3
From: xxxxxxxxxxxxxx
Date: 2002-10-03 23:11:47 (GMT+0)
SMSC number: xxxxxxxxxxxxxxxx
PDU type: SMS-DELIVER MMS
Data Coding Scheme: 7bit-GSM
Message length: 160
Message:
        xxxxxxxxxxxxxxxxxxxxxxxxxx

   Save your current logo to disk
# scmxx -g -B0 -f logo.bmp
Accessing device /dev/ircomm0
OK, a modem device is present.
Detected SIEMENS S35i
Slot 0...
Receiving packet 1 of 5...
logo.bmp created.
Receiving packet 2 of 5...
Receiving packet 3 of 5...
Receiving packet 4 of 5...
Receiving packet 5 of 5...
File transfer complete.

   Save your current ringtone to disk
# scmxx -g -M0 -f sound.mid
Accessing device /dev/ircomm0
OK, a modem device is present.
Detected SIEMENS S35i
Slot 0...
Receiving packet 1 of 1...
sound.mid created.
File transfer complete.
     ________________________________________________________________

3.10.2. OBEX Connection

   See the OpenOBEX chapter below. Detailed information about OBEX
   connections to mobile phones will follow soon hopefully. See also the
   Palm III section for information about setting up a connection.
     ________________________________________________________________

3.10.3. Specific Mobile Phones

3.10.3.1. Motorola

   Michael McConnell has posted an initial version of a guide to get the
   Motorola Timeport GSM phone and Linux-IrDA talking on
   [http://www.eridani.co.uk/docs/linux-timeport/] his website.
     ________________________________________________________________

3.10.3.2. Ericsson

   Note for T39 users (maybe for T300, too). Please check the web page
   of [http://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/index.html]
   Jean Tourrilhes , you will need to apply kernel patches and tweak
   /proc/sys/net/irda/max_tx_window

   1. Configuration To start a communication session with /dev/ircomm0 ,
   for instance, say:
dip -t
> port ircomm0
> term

   Probably you may use cu or xc instead of dip, too cu -l /dev/ircomm0
   or xc -l /dev/ircomm0. There are also reports about some efforts with
   the Ericsson GF768 and IR Modem DI 27.

   Benny Amorsen wrote: The SH888 emulates an IRDA-port when you connect
   it using the serial cable. Why someone would think up something weird
   like that is beyond me, but that is the way you get it to work in
   Windows. Not that I ever managed to make it work in Windows, though.

   Ales Dryak has send this survey (looks like a Debian/GNU Linux
   distribution, please modify your configuration accordingly). Mobile
   Ericsson SH888 ati1 = 980408 1035 PRGCXC125101:

mknod /dev/ircomm0 c 161 0
mknod /dev/ircomm1 c 161 1

   2. /etc/conf.modules:
alias tty-ldisc-11 irtty
alias char-major-161 ircomm-tty

   3. /etc/irda/drivers: irattach /dev/ttyS0 -s # (IrDA port in SIR
   mode) 4. /etc/chatscripts/sh888
<ABORT stuff>
"" \d\d\d\d\d\dATZE0
OK ATD<phone number to call)
CONNECT \d\c

   5. /etc/ppp/peers/sh888
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/sh888"
/dev/ircomm
115200
defaultroute
noipdefault
user <your username> # don't forget to add your password to chap secrets or ch
at script

   A few seconds (app. 30) after executing pppd call sh888 I get
   connected to our Intranet/Internet having full IP connectivity
   (telnet, ftp, www, icmp tested). Futhermore I can connect to
   /dev/ircomm using minicom and play with AT command. Great! And looks
   stable!
     ________________________________________________________________

3.10.3.2.1. Tools

   Gerhard Gonter reported: Several members of the list are successfully
   using the Ericsson mobile phone SH888 with the Linux-IrDA software,
   usually to use it as a modem. The software is also quite useful to
   access other parts of the phone using AT commands. The built-in
   phonebook is an interesting target.

   After A quick research on the Internet (FreshMeat, Deja, YAHOO), I
   did not find any phonebook tool for Linux (or another Unix). To solve
   that problem, I wrote a small Perl script and a related module. Since
   this now works acceptably well for me, I decided to wrap that up and
   release it at this early stage of development. The tarball can be
   retrieved
   [http://falbala.wu-wien.ac.at:8684/pub/english.cgi/0/172903] here .

   In the mailing list gsmlib was also recommended, though ... there was
   no way for me to use this over infrared, no connection with my sh888.
   Florian Lohoff reported: Works (kind of) with the S25. I needed to
   change a ifdef as it seems the S25 does not respond with CR LF. But
   setting a link from /dev/mobilephone -> /dev/ircomm lets me send SMS
   via the S25 without a problem. Phonebook backup does NOT work because
   the S25 does some silly responses to probably empty phonebooks.

   The specifications for SMS messages and phone books can be downloaded
   free (of charge, not FSF free ;-) from ETSI. Search for GSM 07.07
   (you might also want GSM 07.05). You have to register before
   downloading it. The standards are in Acrobat PDF format. The S25
   supported commands are available on the Siemens websites as a PDF for
   free.

   A survey of the AT commands for the SH888 is at
   [http://mobileinternet.ericsson.se/emi_download/sh888/888_R1D.pdf]
   Ericsson .
     ________________________________________________________________

3.10.3.3. NOKIA

   Carlos Vidal wrote: Correct me if I'm wrong, but it seems to me that
   Nokia telephones do not contain a genuine hardware modem, but
   something which is similar in principle to WinModems for PC. Whenever
   Nokia writes about modem communication, they use the name "Windows
   software modem" (or something similar). Which is actually backed up
   by the need to use special Nokia software for Windows (called Nokia
   Cellular Data Suite).

   Joonas Lehtinen wrote: This is true with 61xx models. Models: 8810,
   9000(i) and 9110 should work fine. (They have inbuilt modem). My
   Nokia 9000 reports IrCOMM with linux.

   Some suggestion by Carlos Vidal carlos_at_tarkus.se : "I'm doing some
   tests trying to see how far can I get with my Nokia 6110 on Linux.
   I've just compiled gnokii-0.2.4 [ [http://www.gnokii.org/] gnokii is
   a tool set for Nokia mobile phones connected via serial cable for
   Linux and *BSD , WH], but it doesn't work [please check current
   gnokii , the behaviour should have been improved, there is also
   useful documentation about IrDA connections to phones, WH]. As I have
   Nokia Data Suite I did the following connection:

   Nokia 6110 <-- Nokia Cable --> PC/Linux <-- Null-modem cable -->
   PC/W95

   In the PC/Linux I run the program snooper (by Jun-ichiro itojun Itoh
   , sorry couldn't find an URL maybe some other sniffer will do it
   also, e.g. sniffit, see also appendix about serial sniffers, WH) with
   small modifications in order to configure the serial port correctly.

   Normally, if snooper has the correct baud rate, the phone and the
   PC/W95 should communicate as if there was no snooper in between. This
   worked pretty well when I cracked the protocol of my Minolta camera.
   The problem here is that the phone doesn't answer or hangs after a
   while.

   It seems that the timing is quite important during the initial phase
   of the communication. The log I obtain is:

0>1: UUUUUUUUUUUUUUUUUUUUUUUU
line 0: LE *DTR *RTS ST SR CTS CD RI *DSR
line 1: LE *DTR *RTS ST SR CTS CD RI *DSR
0>1: UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
U
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
U
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
U
UUUUUUUUUUUUUUU\x1e\x00\x0c\x02\x00\x09\x00\x01\x00\x0d\x00\x00\x02\x01@\x00P\
x
06
1>0: \x18\x00\x00\x00\xfc\x18\x00\x00\x00\x00\x00\x00\xc0\xf0
0>1: \x1e\x00\x0c\x02\x00\x09\x00\x01\x00\x0d\x00\x00\x02\x01@\x00P\x06
1>0: \x18\x00\x00\x00\x18\x00\x00\xc0\xf0\x18\x00\x00\x00\x00\x00\x00\xc0\xf0
0>1: \x1e\x00\x0cd\x00\x06\x00\x01\x00\x10\x01`\x13\x13
1>0: \x18\x00\x00\xf0\x00\x00\xfc
0>1: \x1e\x00\x0cd\x00\x06\x00\x01\x00\x10\x01`\x13\x13

   0 is the PC/95 and 1 is the phone. The communication starts with a
   stream of 'U' (0x55) and with DSR/DTR on. The phone answers with
   '0x18 0x00 ...'. This dialog continues for a while as if both were
   deaf and finally the phone crashes and the only way to reset it is to
   remove the batteries!

   I guess that what happens is that the phone is trying to find the
   correct baud-rate and fails because of the delays introduced by
   snooper. This probably has to do with some IrDA protocol used with
   also with the infrared connection."

   Wessel de Roode "I managed to get the Discovery IR hint bits (with my
   Palm Pilot):

Discover:
0:xxxxxxxx:81.01
    01  IR_HINT_PNP     01  IR_HINT_TELEPHONY (IrMC ?)
    80  IR_HINT_EXT

Device info query:
\006Device\012DeviceName
    4e 6f 6b 69 61 20 36 31 30 30       Nokia 6100

   I also managed to query the PNP device of the Nokia. It has one PNP
   device. It's PNPC100 which equalt a 9600 baud modem. I deleted the
   query, if somene can send me a hint to restore it. was somthing like
   IrDA:<dunno>:PNP:Comp#01 The same query with IrDA:<dunno>:PNP:CompCnt
   gives the number of PNP-devices are available in the Nokia. Which is
   here only one."

   There are also reports about gsmlib for sending and receiving sms
   messages, updating address books etc). These functions are working,
   except for minor charset problems.
     ________________________________________________________________

3.10.3.3.1. Recommended Tools

   [http://www.gnokii.org] gnokii is a Linux/Unix tool suite and soon to
   be modem/fax driver for Nokia (GSM) mobile phones. Phones supported
   include 3110, 3810, 8110, 5110, 6110 and their derivatives.
     ________________________________________________________________

3.10.3.4. Siemens

   Configuration By Florian Lohoff: "Do it step by step - Get your irda
   working irattach /dev/ttySx etc. Then have a look at the
   /proc/net/irda/discovery whether you find something like this:

(flo@paradigm)~# cat /proc/net/irda/discovery
IrLMP: Discovery log:
nickname: SIEMENS S25, hint: 0x9024, saddr: 0x4286ce23, daddr: 0x04295741

   Now load ircomm and ircomm-tty and normally(tm) you should be able to
   connect to the correct /dev/ircomm and you can easily dial and
   load/backup the phonebook etc ...", e.g. with minicom.

   Timo Felbinger describes the connection between a Toshiba and a
   Siemens S25:

     * kernel 2.2.12 and patch-2.2.12-irda3, IrDA support in the kernel,
       ircomm and ircomm-tty as a module
     * mknod /dev/ircomm0 c 161 0
     * modprobe ircomm, modprobe ircomm-tty
     * start irattach with modprobe toshoboe in the start section of
       /etc/irda/drivers . Note: don't load toshoboe before the
       irattach, this may cause device or resource busy
     * after dip -t and the command port ircomm0 the S25 shows a
       connection. Note: the IR port of the S25 has to be activated of
       course, the distance between the two devices seems not critical.
     * After term the S25 behaves like the usual Hayes modem and can be
       used with the AT commands.
     * dial-out with pppd works out of the box.
     ________________________________________________________________

3.10.3.4.1. Recommended Tools

   [http://www.hendrik-sattler.de/scmxx] SCMxx can copy files to and
   from a Siemens mobile phone and also delete stored files. Files can
   read from a given file or through stdin and stored to a given file or
   stdout. SMS can also be directly sent or received without storing in
   the mobile phone. SCMxx was tested with several mobile phones
   manufactured by Siemens (only S25 and later).
     ________________________________________________________________

3.10.4. German e-plus

   A note to German e-plus users:

   Every e-plus contract (except Free&Easy) contains a PPP conncetion to
   the WWW (no separate registration necessary). This service is
   available around Germany under the phone number 123100. This worked
   also out of the box.

   pppd configuration:

/dev/ircomm0
defaultroute
netmask 255.255.255.0
debug
mtu 552
crtscts
noauth
connect '/usr/sbin/chat -v -f /etc/ppp/eplus.chat'
chat script /etc/ppp/eplus.chat:

ABORT "BUSY"
ABORT "ERROR"
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "NO ANSWER"
SAY "initializing modem..."
"" "AT"
"OK" "ATZ"
SAY "dialing..."
"OK" "ATDT123100"
SAY "waiting for CONNECT..."
"CONNECT" ""
SAY "connected!"
SAY ""

   For the nameserver you may use 192.76.144.66 . Username or password
   are not necessary.
     ________________________________________________________________

3.11. Digital Camera Connection

   Markus Schill wrote: "Great that there are also other people who are
   interested in using the SONY DSC-F1 IR adapter under linux. Up to now
   I have only toyed around with the linux-irda software and the serial
   IR adapter from PuMa Technologies that came with the camera. This is
   the status. I am using linux 2.0.33 and the latest linux-irda... If I
   use:
modprobe irda
modprobe irtty
irattach /dev/ircomm0

   the adapter starts talking to the camera. /var/log/messages says that
   SONY-DSC-F1 was found, but no service is started. (Please note, this
   probably doesn't apply to the 2.2.x kernel versions of Linux/IrDA,
   [WH]).

   There are two programs for linux available that can be used for the
   communication with the camera via cable: (1) chotplay and (2)
   stillgrab. They both take a tty as commandline option, so I guess
   that they should work if the irtty layer of the protocol stack works
   correctly ... I have not looked at anything in the linux-irda code,
   yet!). I am not sure whether I understand the stack but shouldn't the
   irtty make the thing look like a normal tty? What service should be
   started. "

   Dag Brattli wrote: "I'm not sure which application level protocol the
   camera uses, but it is possible that it implements the IrDA(TM)
   Infrared Transfer Picture Specification (IrTran-P). If you take a
   look at [http://www.irda.org/] IrTran protocol , you will see that it
   is a protocol which is implemented above IrCOMM (not IrTTY!). IrTTY
   is something we use just to be able to talk to the Linux serial
   driver. "

   The Kodak-Digital-Camera-HOWTO by David Burley now describes how to
   get IrDA working and implemented to get communications and to use the
   DigitalOS camera's with Linux and IrDA.
     ________________________________________________________________

3.12. Microsoft-Windows and Linux/IrDA

3.12.1. Introduction

   Why this? Unfortunately Linux users are not always supplied with the
   necessary hardware information. Sometimes it is possible to look at
   this information in Microsoft-Windows. Sometimes its even useful to
   connect the two. Linux could also provide occasional access point
   services to a Microsoft-Windows laptop of a friend dropping by.

   Where to get it from? At [http://www.microsoft.com/] MicroSoft in the
   directory
   /Windows95/downloads/contents/WURecommended/S_WUCommunications/W95IrD
   A/ you will find a support pack Infrared Transfer 2.0. It is a
   self-extracting archive W95IR.EXE with 331KB. Note: Microsoft seems
   to change the location of this file (and others) at random, the
   former URL is Microsoft Windows95 IrDA - Old

   Microsoft(tm) has three versions of IrDA support for Windows95. The
   version number can be found in the "Software" icon in the Control
   Panel and the file infrared.inf.

   Version 1.0 is still delivered with some hardware.

   Version 2.0 is the version they currently offer at their web site. It
   is in the self-extracting file W95IR.EXE. The last time I looked
   (1999-02-21) it was 434KB and was found at
   http://support.microsoft.com/download/support/mslfiles/W95IR.EXE the
   link is dead now. Their website is frequently changing, so do not be
   surprised to find the file (also) in another location or not at all.

   Version 3.0 can/could be found in their downloadable Infrared
   development kit IRDDK30, but is mostly useful for developers. It is
   internally different from 2.0, it is based on "miniport" network
   drivers, just like the Linux version. It exists for some time and has
   some support for NT, but it clearly did not make it into the
   mainstream NT4.0 distributions. For 95 you are probably better off
   with 2.0. The choice may depend on the documentation of the drivers
   you get with your specific hardware.

   The Microsoft website also used to contain a nice utility IrXfer,
   contained in the archive IRXFER.EXE, This is the Infrared Transfer
   utility, which uses an IrOBEX variant I think, it is referenced in
   the IrOBEX protocol description. The utility was freely downloadable,
   but I could not find it the last time. It is a nice graphical utility
   which can be used to transfer files over IrDA between computers.

   With some machines, e.g. a HP Omnibook 800 it is necessary to use a
   vendor specific version of this package (for the HP Omnibook 800 you
   may find it on the recovery CD).

   Especially the ..\windows\inf\*.inf files and the device manager are
   of interest to look for configuration details.

   As far as I know Window$NT doesn't support IrDA(TM). About Window$98
   I have heard there is no IrDA(TM) support yet.
   [http://www.countersys.com/] Countersys claims to sell an IrDA
   solution for NT4.0 to support their JetBeam product, Microsoft refers
   to them for it.

   AFAIK:

     * Windows95 : use 2.0
     * Windows98 : delivered with 3.0 and IrXfer (works with Linux/IrDA,
       IrOBEX?)
     * WindowsNT4.0: no IrDA support directly by the system
     * Windows2000 : 3.0(+?) [http://www.microsoft.com/hwdev/infrared/]
       MicroSoft
       There are also some non M$ products available. Note: Some of them
       use proprietary infrared protocols:
     * CounterPoint: QuickBeam 1.15 (works with Linux/IrDA, IrOBEX?)
     * LapLink 7.5
     * CarbonCopy 32 4.0
     * pc ANYWHERE 7.5
     * Puma Technology: TRANXIT pro 4.0
     ________________________________________________________________

3.12.2. Connection between Linux/IrDA and MS-Windows95 IrDA(TM)

   You may use
   [http://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/index.html]
   IrNET .
     ________________________________________________________________

3.12.3. Communication between MS-Windows98 and Linux

   Ha Duong Minh: Today I am delighted to report that ircp from the
   [http://sourceforge.net/projects/openobex/] OpenOBEX project , works
   like a charm to transfer files between my Linux box and its
   Microsoft-Windows98 cousin. It can't be simpler: ircp file1, file2,
   ... to send or ircp -r [DEST] to receive files over IrDA.
     ________________________________________________________________

3.12.4. Communication between MS-Windows2000/XP and Linux

   [http://www.stud.uni-hannover.de/~kiszka/IrCOMM2k/English/] IrCOMM2k
   is a driver by Jan Kiszka for Windows 2000 and XP. It emulates a
   serial port which can be used to exchange data with mobile devices.
   For example, some cellular phones are able to act as modems or fax
   devices. PDAs with infrared interface can be synchronized with the
   PC. IrCOMM2k is an Open Source project according to the terms of the
   GPL.
     ________________________________________________________________

3.13. Linux to Linux Connection

3.13.1. Connection Methods

   There should be four ways to get two Linux machines connected via
   Linux/IrDA.

     * Dag Brattli wrote about the IrOBEX support: "The awakened reader
       may wonder what prevents the beaming of files from Linux to
       Linux? Well, nothing!! (but I haven't tried that yet). This means
       that we now have a "simple" way of beaming files between Linux
       laptops. I think that this may be the "killer app" we all have
       been waiting for!" Try to "load_misc irobex at both ends, and
       then try irobex_app get on one of the machines and irobex_app put
       <file> on the other.".
     * Via Linux/IrDA network connection. But the IrLAN protocol is no
       longer maintained by the Linux/IrDA core team.
     * With IrCOMM support, in other words over a serial line, which
       could mean minicom, pppd, etc. If you want just now to use IrCOMM
       between Linux boxes, please add this line to /etc/conf.modules of
       _one_ box:

# set ircomm protocol engine to client-only mode
options ircomm ircomm_cs=1

       Note: Don't add it to both boxes, or they cannot accept incoming
       connection each other! But since 2.2.7 there's no need to add
       options ircomm ircomm_cs=1 to /etc/conf.modules anymore. Please
       remove it if you are using it.
     * [http://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/index.html]
       IrNET
     ________________________________________________________________

3.13.2. Compression

   Please note this feature is still quite experimental! Dag Brattli
   wrote: "Just wanted you to know I have just added COMPRESSION support
   to IrLAP! As you may know, this is _not_ part of the IrDA(TM)
   standard, but Linux can now negotiate with its peer and check if it
   has the same compression capabilities). So obviously if you are
   talking to Win95, Palm III or whatever, you will _not_ get
   compression!!! This is something which is exclusive for Linux as far
   as I know! The IrDA(TM) standard says that devices should ignore
   unknown field in the negotiation header, so we are still "compatible"
   with IrDA(TM) (have just borrowed an unused header value).

   If you want to try using the compression code (Linux <-> Linux) you
   will have to insert the irda_deflate module some time before you
   actually make the connection. I do it before irattach.

   The compression standard I have added is the deflate format used by
   the zlib library which is described by RFCs (Request for Comments)
   1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt (zlib
   format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).

   The compression interface is similar to PPP, so you can add as many
   different compressors as you want. Currently there is only support
   for GZIP, but BSD compression will be added later. ... Have just
   tested GZIP compression at 4Mbps. It was a really bad idea!
   Compressing the frames takes so much time that the performance is
   actually worse than when not using compression at all. The conclusion
   is that compression should only be used for SIR speeds, ..."
     ________________________________________________________________

3.14. Multiple Instances

   Dag Brattli wrote: "The IrLAP layer has been enhanced to allow more
   than one instance (so I can use IrLAN on my built-in ir-port, and
   communicate with the Pilot over the IrDA dongle at the same time) ...
   So how do you make two Linux/IrDA connections? Well, you just fire up
   irattach for each of the IrDA ports you have like this:
irattach /dev/ttyS0         # (my ESI dongle)
irattach /dev/ttyS2         # (my builtin IrDA port)

   Also work with FIR devices like this :
irattach irda0 -s
irattach irda1 -s

   They will not see each other if you run them on the same machine,
   since they will initiate discovery exactly at the same time. You
   should however be able to use them against two other laptops. I can
   run a dongle, builtin IrDA port and a IrDA PCMCIA card at the same
   time with three other IrDA devices without any problems.

   You should notice that if the devices can interfere with each other
   then it might be difficult to obtain a connection, since a device is
   not allowed to transmit if the media is busy. I sometimes have to put
   a book between them."
     ________________________________________________________________

3.15. Connection to Docking Station

   Dag Brattli: "Connection to the [http://www.tekram.com/] Tekram
   IRDocking IR-660 . This device is a docking station with LAN access,
   printer, mouse and keyboard. You can also use them at the same time
   as the internal mouse and keyboard! Just fire up gpm -t ps2
   /dev/irkbd and the laptop will make a keyboard/mouse connection to
   the IR-660. Now I just have to make gpm read both /dev/psaux and
   /dev/irkbd, and then make X11 read /dev/gpmdata, and I should have
   the thing configured!

   ... one problem: gpm can handle multiple mice, but Linux cannot
   handle multiple different keyboards. So if you have one norwegian
   keyboard and one remote US keyboard like I have, then things will be
   a little bit confusing. I got a hint from Alan Cox about a project
   that is implementing real support for multiple keyboards, so I'll
   check that out.

   ... OK, I sort of worked it out. By using TIOCSTI on /dev/console,
   you can insert scancodes directly into the tty queue. This can be a
   problem for virtual consoles that expect to receive some translated
   and cooked keycodes, but X happens to like raw scancodes, so this
   will work quite nice when using X but not for other virtual consoles.
   Anyway this is good enough for me, so I will not use a lot of time
   converting the scancodes to keycodes and index them with some keymap
   just to make it work with text only virtual consoles. As I see it the
   irkbd driver has now been successfully been ported to user-space :-)

   ... the Tekram IR-660 device can, in addition to attach a keyboard
   and mouse, also print using IrTTP (it can print using IrLPT, but that
   is not so funny since it requires exclusive use of IrLMP, and you
   don't wan't to stop the network, mouse and keyboard just to print a
   document). I'll try and see if I can get IrTTP printing working using
   a fifo as well.

   ... Tekram has added a control channel in addition to the data
   channel so that you can get some status information about what is
   going on. The name of their own protocol is P1248. It's published
   through the "P1248" class and "IrDA:TinyTP:LsapSel" LM-IAS entry, so
   you can try to find it.

   ... Canon is using the P1248 protocol, and their printer monitor
   program BrintBuddy2 (Japanese version) is using this protocol now. I
   don't know what they use for the data channel. Maybe they support
   TinyTP directly in addition to the other methods. You can try and
   look up the "IrLPT" class with the "IrDA:TinyTP:LsapSel" in the
   LM-IAS and see if you can find it."
     ________________________________________________________________

3.16. Connection to Keyboard

   The Linux/IrDA keyboard driver is now in user-space. Please see
   chapter Connection to Docking Station above.

   Lichen Wang: "The so called IrDA-D standard is designed to transfer
   Data. It is not suitable for IR Keyboard. IrDA-D is what Dag ported
   to Linux OS and what MS ported to Windows OS.

   The so called IrDA-C (Control) is designed for Keyboard, Joy-stick,
   etc. I am not aware that there is any product in the market that is
   using it yet.

   IrDA-D cannot talk to IrDA-C. IrDA-C cannot talk to IrDA-D either.
   Both the physical encoding/decoding and the software protocol are
   very different.

   It is possible to implement both IrDA-D and IrDA-C in the same
   device. Sharp says that IrDA-D and IrDA-C can coexist -- as long as
   both of them are not used at the same time in the same IR space. This
   sounds rather funny to me. According to this definition, anything can
   co-exist with anything as long as you do not destroy the universe
   permanently in the process ;-)

   Seriously, what SHARP says is that they can tailor the IrDA-D so that
   there are some unused time between the negotiated maximum turnaround
   time and the actual transmission. They then squeeze the IrDA-C frames
   in those unused time. The IrDA-D Primary and IrDA-C Master must be
   implemented in the same device. The keyboards will work, but mice and
   joysticks may be sluggish at times."

   For details about using external keyboards with Linux PDAs, see the
   PDA chapter below.
     ________________________________________________________________

3.17. Connection via Serial Cable

   For some reasons it may be useful to connect via serial cable instead
   of using a real infrared link. Bjorn Hanson wrote: "Using a cable, I
   managed to get a PPP connection through my Ericsson SH888. I did the
   following (maybe some steps are wrong but they worked for me :-)

     * added alias tty-ldisc-11 irtty to /etc/conf.modules
     * edited /etc/irda/drivers to irattach /dev/ttyS0
     * manually inserted the irda and irtty modules using modprobe
     * start irattach
     * run kppp using /dev/ircomm0 (through symlink /dev/modem)
     * executed stty < /dev/ircomm0
     * ping the host
     * ifconfig irda0 down

   Everything worked fine for ping and ssh (doing ls -l a couple of
   times) but the computer hang when I tried to mail (Netscape) this
   through that PPP. After reboot I tried both Netscape and lynx. Both
   were able to establish contact but none got any data."

   Another way by Claudiu Costin:

     * Linux 2.2.5 with IrDA compiled as modules
     * Because irattach don't make kernel to load automatically IrDA
       stack, let's type modprobe actisys .
     * Now, irattach /dev/ttyS1 -d actisys where COM2 is used for null
       link
     * ping <address> works very good!

   This has to be done for both machines.

   Please note this is not the recommended way to connect two machines.
   Use PPP instead. Though I cannot see how this approach is useful I
   have included it beause it was asked sometimes in the mailing list.
     ________________________________________________________________

3.18. Null Modem Cable Connection

   You may set up a connection without IrDA capable hardware, using a
   serial null modem cable. Just attach the IrDA ports to the serial
   ports, .e.g. irattach /dev/ttyS0 -s on both machines.
     ________________________________________________________________

3.19. Peer-to-Peer Mode / Direct Mode

   IrCOMM and IrLAN work in both modes, but currently I don't have
   further information about the differences between these modes and how
   to set them up. Also currently the IrLAN protocol is no longer
   maintained by the Linux/IrDA core team.
     ________________________________________________________________

3.20. Linux/IrDA with Toshiba Notebooks

   Guenther Wieser has written a
   [http://www.creative-it.com/linux/irda/toshiba_irda_howto.html] HOWTO
   about Toshiba and IrDA . These notebooks need the toshoboe Linux/IrDA
   driver.
     ________________________________________________________________

3.21. IrDA Card in a Desktop Computer

   Some recent motherboards are equipped with IrDA chips, in some cases
   you need IrDA LEDs additionally. You may find a working example
   described by
   [http://bogmog.sourceforge.net/document_show.php3?doc_id=13] Andreas
   Gohr.
     ________________________________________________________________

Chapter 4. Hardware Supported by Linux/IrDA

4.1. Obtaining Information about the Infrared Port in Laptops

   To get the IrDA port of your laptop working with Linux/IrDA you may
   use StandardInfraRed (SIR) or FastInfraRed (FIR).
     ________________________________________________________________

4.1.1. SIR

   Up to 115.200bps, the infrared port emulates a serial port like the
   16550A UART. This will be detected by the kernel serial driver at
   boot time, or when you load the serial module. If infrared support is
   enabled in the BIOS, for most laptops you will get a kernel message
   like:
Serial driver version 4.25 with no serial options enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A     #first serial port /dev/ttyS0
ttyS01 at 0x3000 (irq = 10) is a 16550A    #e.g. infrared port
ttyS02 at 0x0300 (irq = 3) is a 16550A     #e.g. PCMCIA modem port
     ________________________________________________________________

4.1.2. FIR

   If you want to use up to 4Mbps, your machine has to be equipped with
   a certain FIR chip. You need a certain Linux/IrDA driver to support
   this chip. Therefore you need exact information about the FIR chip.
   You may get this information in one of the following ways:

    1. Read the specification of the machine, though it is very rare
       that you will find enough and reliable information there.
    2. Try to find out whether the FIR chip is a PCI device. Do a cat
       /proc/pci . The appropriate files for 2.2.x kernels are in
       /proc/bus/pci . Though often the PCI information is incomplete.
       You may find the latest information about PCI devices and vendor
       numbers in the kernel documentation usually in
       /usr/src/linux/Documentation or at the page of
       [http://members.datafast.net.au/~dft0802/] Craig Hart. From
       kernel 2.1.82 on, you may use lspci from the pci-utils package,
       too.
    3. Use the DOS tool CTPCI330.EXE provided in ZIP format by the
       [http://www.heise.de/ct/ftp/ctsi.shtml] German computer magazine
       CT. The information provided by this program is sometimes better
       than that provided by the Linux tools.
    4. Try to get information about Plug-and-Play (PnP) devices. Though
       I didn't use them for this purpose yet, the isapnp tools, could
       be useful.
    5. If you have installed the Linux/IrDA® software load the FIR
       modules and watch the output of dmesg, whether FIR is detected or
       not.
    6. Another way how to figure it out explained by Thomas Davis
       (modified by WH): "Dig through the FTP site of the vendor, find
       the Windows9x FIR drivers, and they have (for a SMC chip):

-rw-rw-r--   1 ratbert  ratbert       743 Apr  3  1997 smcirlap.inf
-rw-rw-r--   1 ratbert  ratbert     17021 Mar 24  1997 smcirlap.vxd
-rw-rw-r--   1 ratbert  ratbert      1903 Jul 18  1997 smcser.inf
-rw-rw-r--   1 ratbert  ratbert     31350 Jun  7  1997 smcser.vxd

       If in doubt, always look for the .inf/.vxd drivers for Windows95.
       Windows95 doesn't ship with _ANY_ FIR drivers. (they are all
       third party, mostly from Counterpoint, who was assimilated by
       ESI)."
    7. Also Thomas Davis found a package of small DOS utilities made by
       SMSC. Look at [ftp://ftp.smsc.com/pub/appsoftware/] IR_UTILS.ZIP
       The package contains FINDCHIP.EXE. And includes a FIRSETUP.EXE
       utility that is supposed to be able to set all values except the
       chip address. Furthermore it contains BIOSDUMP.EXE, which
       produces this output:
       Example 1 (from a COMPAQ Armada 1592DT)

In current devNode:
           Size      = 78
           Handle    = 14
           ID        = 0x1105D041 = 'PNP0511' -- Generic IrDA SIR
Types:  Base = 0x07, Sub = 0x00,  Interface = 0x02
Comm. Device, RS-232, 16550-compatible
Attribute = 0x80
                CAN be disabled
                CAN be configured
BOTH Static & Dynamic configuration
Allocated Resource Descriptor Block TAG's:
TAG=0x47, Length=7 I/O Tag, 16-bit Decode
Min=0x03E8, Max=0x03E8
Align=0x00, Range=0x08
TAG=0x22, Length=2 IRQ Tag, Mask=0x0010
TAG=0x79, Length=1 END Tag, Data=0x2F

       Result 1:
       Irq Tag, Mask (bit mapped - ) = 0x0010 = 0000 0000 0000 0001 0000
       so, it's IRQ 4. (start at 0, count up ..), so this is a SIR only
       device, at IRQ=4, IO=x03e8.
       Example 2 (from an unknown machine)

In current devNode:
          Size      = 529
          Handle    = 14
          ID        = 0x10F0A34D = 'SMCF010' -- SMC IrCC
Types:  Base = 0x07, Sub = 0x00,  Interface = 0x02
Comm. Device, RS-232, 16550-compatible
Attribute = 0x80
               CAN be disabled
               CAN be configured
BOTH Static & Dynamic configuration

Allocated Resource Descriptor Block TAG's:
TAG=0x47, Length=7 I/O Tag, 16-bit Decode
Min=0x02F8, Max=0x02F8
Align=0x00, Range=0x08
TAG=0x22, Length=2 IRQ Tag, Mask=0x0008
TAG=0x47, Length=7 I/O Tag, 16-bit Decode
Min=0x02E8, Max=0x02E8
Align=0x00, Range=0x08
TAG=0x2A, Length=2 DMA Tag, Mask=0x02, Info=0x08
TAG=0x79, Length=1 END Tag, Data=0x00

       Result 2:
       a) it's a SMC IrCC chip
       b) one portion is at 0x02f8, has an io-extent of 8 bytes; irq = 3
       c) another portion is at 0x02e8, io-extent of 8 bytes; dma = 1
       (0x02 =0000 0010)

   Warning

   The package is not intended for the end user, and some of the
   utilities could be harmful. The only documentation in the package is
   in Microsoft Word format.
    8. Use the Device Manager of the MicroSoft Windows9x/NT operating
       system.
    9. You may also use the hardware surveys mentioned below.
   10. And as a last resort, you may even open the laptop and look at
       the inscriptions at the chips themselfs. Here is a probably
       incomplete list of manufacturers: Chrystal, Hewlett Packard (HP,
       chipsets are marked HSDL), Hitachi, IBM, National Semi Conductor
       (NSC), NEC, Philips, Sharp, Standard Micro Systems Corporation
       (SMC/SMSC), Texas Instruments (TI), VLSI, Winbond. As an example
       of application circuits the HSDL-7001 (from a HP brochure,
       modified by WH):

    LEDs    Encode/Decode    SIR/FIR

   HSDL-1001    HSDL-7001      UART 16550/
                  MicroController
   ______      ______________      ____________
  |      |    |              |    |            |
(||   TXD|<---|IR_TXD     TXD|<---|SOUT        |
  |      |    |              |    |            |
  |      |    |           RCV|--->|SIN        |
  |      |    |              |    |            |
(||   RCV|--->|IR_RCV  16XCLK|<---|BAUDOUT     |
  |      |    |          NRST|-+  |            |
   ------      --------------  |   ------------
                               V
     ________________________________________________________________

4.2. Hardware Surveys

   There are some surveys about Linux and infrared capable devices in
   the WWW:

     * The [http://irda.sourceforge.net/] Linux/IrDA Project - Hardware
       Survey.
     * I have set up a [http://tuxmobil.org/ir_misc.html] IrDA hardware
       survey at TuxMobil . This list also contains information about
       infrared capable devices which are not mentioned here (mice,
       printers, remote control, transceivers, etc.). To make this
       hardware survey more valuable it is necessary to collect more
       information about the infrared devices in different hardware. You
       can help by sending me a short e-mail containing the exact name
       of the hardware you have and which type of infrared controller is
       used. Please let me also know how well Linux/IrDA worked, at
       which tty, port and interrupt it works and the corresponding
       infrared device (e.g. printer, cellular phone) you use. You can
       also help by contributing detailed technological information
       about some infrared devices, which is necessary to develope an
       according driver for Linux.
     ________________________________________________________________

4.3. Big Endian

   Though there have been some problems with big endian machines,
   Linux/IrDA now works successfully. For example I have got a report
   about an Apple PowerBook G4 (AlBook 2. generation) working with a
   STir USB dongle.
     ________________________________________________________________

4.4. SMP

   Jean Tourrilhes: "Tested IrSock, IrNET and OpenObex with multiple
   dongles on a SMP box. Works fine. However, the code is not fully SMP
   safe yet, so you never know..."
     ________________________________________________________________

4.5. IrDA Hardware

     * SIR
     * FIR
     * serial dongle
     * USB dongle
     * PCMCIA cards
     * PCI cards

   You may find a survey of Linux/IrDA capable devices at
   [http://tuxmobil.org/ir_misc.html] TuxMobil.
     ________________________________________________________________

4.6. IrDA and USB

   The IrDA USB driver is included in recent 2.4 kernels. It's not as
   efficient as other FIR hardware, but at least is supported and is
   relatively easy to get working. Also, all the current products are
   based on the same hardware, and we know most of its bugs.

   As far as I know the Actisys 2000U and Extended System ESI-9685
   dongles seem to be based on the same hardware. Both USB dongles work
   fine with the Linux driver. It's possible to have multiple USB
   dongles in a box (for now, only up to 4).

   The latest version of the driver has been tested with usb-uhci and
   usb-ohci. see also driver infos in src e.g. USB 2.0

   There is an USB IrDA Bridge Device spec at Rev 0.9B , it's being
   adopted as an USB class specification. You can find it at under 0.9
   Class Specification header at [http://www.usb.org] USB.org .

   Recently a new type of USB dongle from SigmaTel has appeared on the
   market which is _not_ compliant with the IrDA-USB specification, and
   therefore doesn't work with this driver. On the other hand, SigmaTel
   has made available the
   [http://www.sigmatel.com/technical_docs.htm#wireless] full technical
   specification , so writing a driver for it is possible.
     ________________________________________________________________

4.6.1. Environment

   I have checked this chapter with this environment:
   [http://www.actisys.com] ACTiSYS ACT-IR2000U FIR-USB Adapter (but it
   should work for any other USB dongle except the one mentioned above),
   Kernel 2.4.19, irda-utils 0.9.14 and [http://www.debian.org] Debian
   GNU/Linux 3.0 Woody.
     ________________________________________________________________

4.6.2. Prerequisites

   You need a kernel with appropriate IrDA and USB support and the
   standard entries in /etc/modprobe.conf (kernel 2.6) /etc/modules.conf
   (kernel 2.4) and devices in /dev/ir* as described in the chapters
   above. And a second IrDA device whether with Linux inside or not,
   e.g. a laptop, a printer or a cell phone with IrDA port.

   You need a working USB controller. Check whether the appropriate
   module is already inserted with lsmod. If not you may insert it with
   modprobe usb-uhci (for Intel/Via USB controllers) or modprobe
   usb-ohci (for other USB controllers)

   Note: this driver has NOT been tested with the usb-ehci driver (for
   USB 2.0 controllers). This driver WON'T WORK with the uhci driver
   (alternate/JE driver for Intel/Via USB controllers).

   Warning

   Note that there is another USB IrDA driver ( provided by the
   [http://www.linux-usb.org] Linux USB Project) for those devices
   called ir-usb. This module is NOT compatible with the IrDA stack and
   conflicts with irda-usb. Because it always loads first, you have to
   remove ir-usb completely.

   If you are not familiar with routing issues, I dare to recommend to
   shut down all external network interfaces with ifconfig during the
   first set up. Then check with route -n. Also netfiltering (iptables)
   may cause problems, so if you are not connected to a network you may
   disable it.

   I have described the process in every detail, to make every caveat as
   clear as possible. The actual configuration is much shorter and
   easier. During configuration I will choose to open three different
   terminal windows to watch the log messages from different programs.
     ________________________________________________________________

4.6.3. Plugging in the Dongle

   Now plug the dongle in and check the Kernel messages with dmesg:
hub.c: USB new device connect on bus1/1, assigned device number 2
usb.c: USB device 2 (vend/prod 0x50f/0x180) is not claimed by any active drive
r.
usb.c: registered new driver irda-usb
IRDA-USB found at address 2, Vendor: 50f, Product: 180
irda_usb_parse_endpoints(), And our endpoints are : in=02, out=01 (64), int=03
irda_usb_init_qos(), dongle says speed=0x13E, size=0x20, window=0x2, bofs=0x4,
 turn=0x2
IrDA: Registered device irda1
USB IrDA support registered

   If you have already some other IrDA hardware configured on the PC,
   the driver won't load as irda0, so to check the message log as shown
   above is important (the driver can manage up to 4 IrDA-USB dongles
   per PC, that can be increased in the source).

   In this example the device is irda1. You may check this with
   ifconfig, too:
irda1     Link encap:IrLAP  HWaddr 2c:52:61:ec
          EtherTalk Phase 2 addr:140/191
          UP RUNNING NOARP  MTU:2048  Metric:1
          RX packets:2278 errors:0 dropped:0 overruns:0 frame:0
          TX packets:844 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0
          RX bytes:33848 (33.0 KiB)  TX bytes:15116 (14.7 KiB)
     ________________________________________________________________

4.6.4. Attaching the Driver

   Now you are ready to attach the Linux/IrDA service to the dongle With
   irattach irda1 -s (note the device name from the step before).

   The green LED on the adapter should blink now, approximately every
   three seconds. And with dmesg you may see this message:
irlap_change_speed(), setting speed to 9600
irlap_recv_discovery_xid_cmd(), discovery frame to short!

   Now start irdadump, you should see all IrDA devices in range. Or at
   least this one, here "japh" (the other IrDA device in this example is
   named "Olga"). For diagnostic purposes leave irdadump running in this
   terminal window and switch to another window for the next steps.
07:58:40.889590 xid:cmd ffffffff < 4fe026d8 S=6 s=3 (14)
07:58:40.979575 xid:cmd ffffffff < 4fe026d8 S=6 s=4 (14)
07:58:40.979679 xid:rsp 2c5261ec > 4fe026d8 S=6 s=4 japh hint=0400 [ Computer
] (20)
07:58:41.069571 xid:cmd ffffffff < 4fe026d8 S=6 s=5 (14)
07:58:41.166552 xid:cmd ffffffff < 4fe026d8 S=6 s=* Olga hint=0400 [ Computer
] (20)
07:58:43.620104 xid:cmd ffffffff < 4fe026d8 S=6 s=0 (14)
07:58:43.709078 xid:cmd ffffffff < 4fe026d8 S=6 s=1 (14)
     ________________________________________________________________

4.6.5. Loading the IrCOMM Modules

   Now load the IrCOMM modules (note this is usually done automagically
   by the kernel daemon kmod if you start PPP or printing via IrDA, but
   for the first time we do things by hand). So do modprobe ircomm and
   modprobe ircomm-tty .

   The dmesg will show now:
IrCOMM protocol (Dag Brattli)
ircomm_open_lsap()
ircomm_tty_attach_cable()
ircomm_tty_ias_register()
ircomm_tty_close()
ircomm_tty_shutdown()
ircomm_tty_detach_cable()
ircomm_close()

   And with lsmod you may see:
Module                  Size  Used by    Tainted: P
ircomm-tty             30080   0  (autoclean)
ircomm                 13164   0  (autoclean) [ircomm-tty]
irda-usb               13776   1
...
irtty                   7264   0  (autoclean)
irda                  141648   1  (autoclean) [ircomm-tty ircomm irda-usb irtt
y]
     ________________________________________________________________

4.6.6. Setting up a Network (PPP)

   You may start pppd with commandline options, but for me it's more
   convenient to have a configuration file /etc/ppp/peers/irda.
connect /bin/true
noauth
persist
debug
kdebug 7
nodetach
115200
local
/dev/ircomm0
192.168.0.2:192.168.0.3

   Some note about the configuration: Yes the device name is correct,
   don't choose an USB device here. If the other IrDA device is a Linux
   laptop you may use the same configuration file and the same PPP
   options, without the last line, which sets the LOCAL and REMOTE IP
   address. The following entries are for debugging purposes and can be
   commented out when everything works fine:
persist
debug
kdebug 7
nodetach

   Now start PPP with pppd call irda. For diagnostic purposes leave the
   messages running in this terminal window and switch to another window
   for the next steps.
Serial connection established.
using channel 3
Using interface ppp0
Connect: ppp0 <--> /dev/ircomm0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x4592a46e> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x4592a46e> <pcomp> <accomp>]
...

   Now start PPP on the remote IrDA device and you should see:
sent [LCP EchoReq id=0x0 magic=0x3c8803b1]
sent [IPCP ConfReq id=0x1 <addr 192.168.0.2> <compress VJ 0f 01>]
sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x3c8803b1> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x3c8803b1> <pcomp> <accomp>]
rcvd [LCP EchoReq id=0x0 magic=0xa922f0e8]
sent [LCP EchoRep id=0x0 magic=0x3c8803b1]
rcvd [IPCP ConfReq id=0x1 <addr 0.0.0.0> <compress VJ 0f 01>]
sent [IPCP ConfNak id=0x1 <addr 192.168.0.3>]
rcvd [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
sent [CCP ConfAck id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
rcvd [LCP EchoRep id=0x0 magic=0xa922f0e8]
rcvd [IPCP ConfAck id=0x1 <addr 192.168.0.2> <compress VJ 0f 01>]
rcvd [CCP ConfAck id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
Deflate (15) compression enabled
rcvd [IPCP ConfReq id=0x2 <addr 192.168.0.3> <compress VJ 0f 01>]
sent [IPCP ConfAck id=0x2 <addr 192.168.0.3> <compress VJ 0f 01>]
Cannot determine ethernet address for proxy ARP
local  IP address 192.168.0.2
remote IP address 192.168.0.3
Script /etc/ppp/ip-up started (pid 3975)
Script /etc/ppp/ip-up finished (pid 3975), status = 0x1

   And in the window running irdadump you see the IrDA traffic:
08:17:11.179260 i:rsp  > ca=08 pf=1 nr=1 ns=2 LM slsap=00 dlsap=19 CONN_RSP (6
)
08:17:11.199127 i:cmd  < ca=08 pf=1 nr=3 ns=1 LM slsap=00 dlsap=1d CONN_RSP (6
)
08:17:11.199226 i:rsp  > ca=08 pf=1 nr=2 ns=3 LM slsap=1d dlsap=00 GET_VALUE_B
Y_CLASS: "IrLPT" "IrDA:IrLMP:LsapSel" (30)
08:17:11.219123 i:cmd  < ca=08 pf=1 nr=4 ns=2 LM slsap=00 dlsap=1c CONN_RSP (6
)
08:17:11.219207 i:rsp  > ca=08 pf=1 nr=3 ns=4 LM slsap=1c dlsap=00 GET_VALUE_B
Y_CLASS: "IrDA:IrCOMM" "Parameters" (28)
08:17:11.241117 i:cmd  < ca=08 pf=1 nr=5 ns=3 LM slsap=19 dlsap=00 GET_VALUE_B
Y_CLASS: "IrDA:IrCOMM" "Parameters" (28)
08:17:11.241213 i:rsp  > ca=08 pf=1 nr=4 ns=5 LM slsap=00 dlsap=19 GET_VALUE_B
Y_CLASS: Success N/A (19)
08:17:11.259114 i:cmd  < ca=08 pf=1 nr=6 ns=4 LM slsap=00 dlsap=1d GET_VALUE_B
Y_CLASS: No such class (11)
08:17:11.259216 i:rsp  > ca=08 pf=1 nr=5 ns=6 LM slsap=1d dlsap=00 DISC (6)
08:17:11.280107 i:cmd  < ca=08 pf=1 nr=7 ns=5 LM slsap=00 dlsap=1c GET_VALUE_B
Y_CLASS: Success N/A (19)
08:17:11.280281 i:rsp  > ca=08 pf=0 nr=6 ns=7 LM slsap=1c dlsap=00 DISC (6)
08:17:11.282124 i:rsp  > ca=08 pf=1 nr=6 ns=0 LM slsap=1e dlsap=00 CONN_CMD (6
)
08:17:11.299104 i:cmd  < ca=08 pf=1 nr=1 ns=6 LM slsap=19 dlsap=00 DISC (6)
08:17:11.299204 rr:rsp > ca=08 pf=1 nr=7 (2)
08:17:11.319102 i:cmd  < ca=08 pf=1 nr=1 ns=7 LM slsap=1a dlsap=00 CONN_CMD (6
)
08:17:11.319209 i:rsp  > ca=08 pf=1 nr=0 ns=1 LM slsap=00 dlsap=1a CONN_RSP (6
)
08:17:11.339100 i:cmd  < ca=08 pf=1 nr=2 ns=0 LM slsap=00 dlsap=1e CONN_RSP (6
)
08:17:11.339197 i:rsp  > ca=08 pf=1 nr=1 ns=2 LM slsap=1e dlsap=00 GET_VALUE_B
Y_CLASS: "IrDA:IrCOMM" "IrDA:TinyTP:LsapSel" (37)
08:17:11.361096 i:cmd  < ca=08 pf=1 nr=3 ns=1 LM slsap=1a dlsap=00 GET_VALUE_B
Y_CLASS: "IrDA:IrCOMM" "IrDA:TinyTP:LsapSel" (37)
08:17:11.361191 i:rsp  > ca=08 pf=1 nr=2 ns=3 LM slsap=00 dlsap=1a GET_VALUE_B
Y_CLASS: Success Integer: 14 (15)
08:17:11.380092 i:cmd  < ca=08 pf=1 nr=4 ns=2 LM slsap=00 dlsap=1e GET_VALUE_B
Y_CLASS: Success Integer: 14 (15)
08:17:11.380214 i:rsp  > ca=08 pf=0 nr=3 ns=4 LM slsap=1e dlsap=00 DISC (6)
08:17:11.382104 i:rsp  > ca=08 pf=1 nr=3 ns=5 LM slsap=14 dlsap=14 CONN_CMD TT
P credits=0(7)
08:17:11.399090 i:cmd  < ca=08 pf=1 nr=6 ns=3 LM slsap=1a dlsap=00 DISC (6)
08:17:11.399190 rr:rsp > ca=08 pf=1 nr=4 (2)
08:17:11.419082 i:cmd  < ca=08 pf=1 nr=6 ns=4 LM slsap=14 dlsap=14 CONN_CMD TT
P credits=0(7)
08:17:11.419159 rr:rsp > ca=08 pf=1 nr=5 (2)
08:17:11.438080 rr:cmd < ca=08 pf=1 nr=6 (2)

   Switch to another terminal and check the PPP device with ifconfig :
ppp0      Link encap:Point-to-Point Protocol
          inet addr:192.168.0.2  P-t-P:192.168.0.3  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0
          RX bytes:318 (318.0 b)  TX bytes:708 (708.0 b)

   With ps aux | grep irda you should now see these Processes:
root      3534  0.0  0.2  1272  464 ?        S    06:51   0:00 irattach irda1
-s
root      3579  0.3  0.2  1400  476 tty1     S    06:55   0:06 irdadump
root      4312  0.1  0.4  2088  948 tty2     S    07:18   0:00 pppd call irda

   With route -n you may now see this PPP devices:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.3     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
0.0.0.0         192.168.0.3     0.0.0.0         UG    0      0        0 ppp0

   And it should be possible to do a ping 192.168.0.3 to the remote
   host:
PING 192.168.0.3 (192.168.0.3): 56 data bytes
64 bytes from 192.168.0.3: icmp_seq=0 ttl=64 time=290.7 ms
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=146.6 ms

   Now you may use TCP/IP applications. For example ssh (note it will
   take some time to establish the connection be patient):
ssh -v USER@192.168.0.3
     ________________________________________________________________

4.6.7. Setting up a Printer Connection (IrLPT)

   Instead of using TCP/IP connections the dongle works for printer
   connections, too. The device name is /dev/irlpt0. For details about
   IrDA printer connections see the appropriate chapter above.
     ________________________________________________________________

4.6.8. Cleaning Up

   You may now finetune your settings, e.g. to solve routing issues. It
   may also possible to set up higher speeds, but I haven't tried that
   yet. If everything works fine, you may now choose to make the
   configuration permanent. You may edit /etc/irda.conf and configure
   the system V init scripts (for IrDA, network, ..). But the way to do
   it right depends on your Linux distribution.
     ________________________________________________________________

4.6.9. Remaining Problems

   I encountered a strange problem. When inserting the IrDA-USB dongle,
   I got a slight and constant noise from the beeper.
     ________________________________________________________________

4.7. Linux PDAs: Agenda, iPAQ, Yopy, Zaurus

   The most known Linux PDAs in these days are the
   [http://tuxmobil.org/pda_linux_agenda.html] Agenda VR3 by
   AgendaComputing (out-of-production), the
   [http://tuxmobil.org/pda_linux_ipaq.html] iPAQ by COMPAQ, the
   [http://tuxmobil.org/pda_linux_sharp_sl5000.html] Zaurus SL-5000/5500
   by SHARP, and the [http://tuxmobil.org/pda_yopy.html] Yopy by
   Samsung. All of these have an infrared port. There are different
   Linux distributions for Linux PDAs available, e.g.:
   [http://www.trolltech.com/] QT Embedded (pre-installed on the SHARP
   Zaurus), [http://opie.handhelds.org/] Opie,
   [http://familiar.handhelds.org/] Familiar and more. Software IPK
   packages mentioned below you may find at
   [http://www.killefiz.de/zaurus/] Zaurus Software Index - ZSI or
   [http://ipkgfind.handhelds.org] ipkgfind. See
   [http://tuxmobil.org/pda_linux.html] TuxMobil for further information
   about Linux on and with PDAs in general.

   The following is based on my experience with the
   [http://www.sharp-world.com/] SHARP Zaurus SL-5500G, with the
   original SHARP romimage 2.38G and Kernel 2.4.6-rmk1-np2-embedix#1,
   but may be applied mutatis mutandis to other Linux PDAs. The Zaurus
   comes with a written manual, where beaming files and PPP connections
   are explained using the GUI (e.g. FileManager, Settings). Here I will
   try to cover what can be done from the command line and topics
   neither included in the official SHARP manual nor the
   [http://www.rit.edu/~tfs1812/opieusermanual/book1.htm] Opie User
   Manual . The infrared functions seem to be part of the StrongARM
   SA1110 CPU, the IrDA driver module is named sa1110_ir (on the stock
   Zaurus IrDA support seems to be built into the Kernel). From the
   irda-utils only irattach is available. IrDA support is attached via
   irattach /dev/ttyS2 -s 1 (note "-s 1" will be replaced by "-s" with
   newer versions). So it looks like SIR is used, I don't have
   information about FIR support yet. To get some of the functionality
   of irdadump and detect other IrDA devices in range or debug IrDA you
   may use cat /proc/net/irda/discovery and the other files in the /proc
   filesystem or compile the irda-utils for the ARM archictecture by
   yourself, also pre-compiled binaries are available. From the device
   files only /dev/ircomm (note it's not /dev/ircomm0) is created by
   default. The file modules.conf doesn't seem to exist. With irrecv you
   may start the infrared GUI settings. IrOBEX support is available, but
   the appropriate tools from
   [http://sourceforge.net/projects/openobex/] OpenOBEX are missing, but
   you may beam files to a Palm PDA, cell phone or another Linux box or
   a Microsoft-Windows machine from the GUI. The IrDA startup scripts
   lives in /home/etc/rc.d/init.d/irda. For infrared remote control
   support see below. With irdadump from another Linux box the Zaurus
   identifies as (look at the second line):

10:56:48.652982 xid:cmd b03cbbb9 > ffffffff S=6 s=5 (14)
10:56:48.652963 xid:rsp b03cbbb9 < b7960e8f S=6 s=4 localhost hint=8420 [ Comp
uter IrOBEX ] (26)
10:56:48.742992 xid:cmd b03cbbb9 > ffffffff S=6 s=* japh hint=0400 [ Computer
] (20)
10:56:51.203002 xid:cmd b03cbbb9 > ffffffff S=6 s=0 (14)
     ________________________________________________________________

4.7.1. PPP

   With PPP you may get a network connection through your cell phone or
   with another computer. See the [http://tldp.org/HOWTO/PPP-HOWTO/]
   PPP-HOWTO for details. For fowarding packages via NAT through another
   Linux box see the [http://iptables-tutorial.frozentux.net/]
   IPTABLES-Tutorial .

   You may start pppd with commandline options, but for me it's more
   convenient to have a configuration file /etc/ppp/peers/irda. Here is
   an example for a first test:
connect /bin/true
noauth
persist
debug
kdebug 7
nodetach
115200
local
/dev/ircomm
192.168.0.2:192.168.0.3

   If the other IrDA device is a Linux laptop you may use the same
   configuration file name and the same PPP options without the last
   line, which sets the LOCAL and REMOTE IP address. Also take care of
   the correct device name, e.g. /dev/ircomm0. The following entries are
   for debugging purposes and can be commented out when everything works
   fine:
persist
debug
kdebug 7
nodetach

   Now start PPP with pppd call irda on both machines. For diagnostic
   purposes leave the messages running in this terminal window and
   switch to another window for the next steps. You may now check the
   network connectivity with ifconfig and ping. For connections to a
   cell phone see the Cellular Phone Connection chapter above.
     ________________________________________________________________

4.7.2. Beaming Files - OpenOBEX

   The advantage of OBEX is usually the integration. Send an
   appointement event over OBEX, and most likely the Zaurus will
   integrate that in the built-in calendar automagically, like the Palm
   does. Same for business cards. The IrOBEX protocol offers an easy way
   to beam files via infrared to another PDA, a cell phone or computer.
   The Linux tools are provided by
   [http://sourceforge.net/projects/openobex/] OpenOBEX . Beaming via
   the GUI between two Zaurus PDAs or to a Palm PDA might work. But
   currently I couldn't send or receive files from my Linux laptop. When
   trying to send a file per ircp FILE, I get this irdadump message:
11:11:03.943005 i:cmd  > ca=8a pf=1 nr=0 ns=0 LM slsap=12 dlsap=00 CONN_CMD (6
)
11:11:03.972964 i:rsp  < ca=8a pf=1 nr=1 ns=0 LM slsap=00 dlsap=12 CONN_RSP (6
)
11:11:03.973010 i:cmd  > ca=8a pf=1 nr=1 ns=1 LM slsap=12 dlsap=00 GET_VALUE_B
Y_CLASS: "OBEX:IrXfer" "IrDA:TinyTP:LsapSel" (37)
11:11:04.002973 i:rsp  < ca=8a pf=1 nr=2 ns=1 LM slsap=00 dlsap=12 GET_VALUE_B
Y_CLASS: No such class (11)
11:11:04.003015 i:cmd  > ca=8a pf=1 nr=2 ns=2 LM slsap=12 dlsap=00 DISC (6)

   When trying to receive a file per ircp -r, I get this irdadump
   message:
11:15:08.682979 i:cmd  < ca=8a pf=1 nr=4 ns=5 LM slsap=53 dlsap=00 CONN_CMD (6
)
11:15:08.683063 i:rsp  > ca=8a pf=1 nr=6 ns=4 LM slsap=00 dlsap=53 CONN_RSP (6
)
11:15:08.712970 i:cmd  < ca=8a pf=1 nr=5 ns=6 LM slsap=53 dlsap=00 GET_VALUE_B
Y_CLASS: "OBEX" "IrDA:TinyTP:LsapSel" (30)
11:15:08.713035 i:rsp  > ca=8a pf=1 nr=7 ns=5 LM slsap=00 dlsap=53 GET_VALUE_B
Y_CLASS: No such class (11)
11:15:08.732976 i:cmd  < ca=8a pf=1 nr=6 ns=7 LM slsap=53 dlsap=00 DISC (6)

   Jean Tourrilhes suggests this solution: "The Zaurus doesn't support
   the "OBEX:IrXfer" service, it probably only supports the "OBEX"
   service use cat /proc/net/irda/irias to verify. So, either you start
   a server on "OBEX:IrXfer" on the Zaurus, (ircp_server - cross
   compiled for Zaurus), or you use a client using "OBEX" on the laptop
   (irobex_palm3)."
     ________________________________________________________________

4.7.2.1. Tools

   Beamster is a little Gtk/python utility to help with IrDA transfers
   especially from and to Linux PDAs
   (ftp://ftp.handhelds.org/pub/linux/dists/familiar/feeds/unstable/pack
   ages/armv4l/). It can talk to most handhelds/laptops/printers which
   use the IrDA Object Exchange protocol (OBEX), in fact any device
   which already works with the openobex package will work with this. It
   should be fairly intuitive to use. Make sure that IrDA is 'On',
   position the two devices, wait for the status bar to show that a new
   peer has been discovered, choose the transfer mode (use 'Palm3' for
   PalmOS peers and 'Windows' for everything else) then press 'beam' or
   'receive' as appropriate. Note that 'receive' toggles on and off.
   Tested transfers to and from this IrDA devices: an old Palm3, a Psion
   5MX, a Windows 98 ThinkPad and a Linux desktop with an Actisys L220+
   dongle.

   The ObexFTP implementation [http://triq.net/obexftp] flexmem accesses
   the Flex.Memory directly. I piped a S45 data explorer (windows)
   session through sersniff. The log looks roughly like OBEX over cable.
   In fact old Open OBEX is working with the Siemens S45 mobile phone.
   It is confirmed to work well with Siemens S45/ME45 and similar mobile
   phones. You may access the Flex Memory on Siemens mobile equipment
   via IrDA or serial connection.
     ________________________________________________________________

4.7.3. Printing

   To print directly to an IrDA capable printer you need the device file
   /dev/irlpt0. If it's not available, use mknod /dev/irlpt0 c 161 16 to
   create it. Now you may perform a first and simple test. Try to write
   a small file to /dev/irlpt0 by cat FILE >/dev/irlpt0. With the stock
   Kernel from SHARP this didn't work, but with a custom kernel it
   worked fine. Do not wonder about a bad format (the lines form sort of
   steps) this is just a first check. To get a pretty print format you
   may have to write a filter as described in the Printing-HOWTO from
   [http://www.linuxprinting.org] LinuxPrinting.org . More about
   printing from mobile Linux devices you may find in the
   [http://tuxmobil.org/howto_linux_laptop.html] Linux-Mobile-Guide .
     ________________________________________________________________

4.7.4. Remote Control - LIRC

   Consumer InfraRed - CIR aka remote control via infrared can be had on
   a Linux PDA by installing lirc-modules-KERNEL for the appropriate
   Kernel version, and [http://www.lirc.org/] LIRC. For more details see
   the [http://handhelds.org/z/wiki/ConsumerIR] HandHelds.org-WiKi and
   the [http://www.rit.edu/~tfs1812/] Opie-Remote page. Opie-Remote is a
   remote control emulator for the Compaq iPAQ and the SHARP Zaurus.
     ________________________________________________________________

4.7.5. Programing QT Embedded for IrDA

   At the SHARP Zaurus Developer Site you may find the
   [http://www.zauruszone.com/howtos/irda_howto.shtml] Zaurus-IrDA-HOWTO
   , which explains how to utilize the IrDA port on the Zaurus. The
   [http://www.uv-ac.de/ipaqhelp/] iPAQ Help - iPAQ and Zaurus
   development using QPE by Werner Schulte desribes how to develope
   Qtopia applications in general.
     ________________________________________________________________

4.7.6. Keyboards and Scanners

   For the iPAQ there is module h3600_microkbd, which supports the
   MicroInnovations IR keyboard. There seem to be optical barcode
   readers available, which use sort of a red light to read the data.
   But I doubt that this has anything to do with IrDA or Consumer
   InfraRed - CIR.

   [http://195.184.237.106/~zaurus/] IRK allows you to use external
   infrared keyboards with the Zaurus. It interfaces the LIRC driver to
   the Qtopia environment. Currently only the Chicony KB-9820 keyboard
   (German version) is supported.
     ________________________________________________________________

Chapter 5. Advanced Topics

5.1. Troubleshooting

5.1.1. General Information

   If you encounter problems. Try the following:

     * Read the FAQ section below.
     * Look at /var/log/messages and/or /var/log/kern.
     * Do a dmesg.
     * Look at the different files in /proc/irda.
     ________________________________________________________________

5.1.2. Known Bugs

   If you find a bug, please send a bug report to the mailing list,
   including dmesg output, and which Linux version, and hardware you are
   using. Thank you!

   Sometimes IrCOMM fails to connect, especially when both devices
   discover each other. You can disable discovering with echo 0
   >/proc/sys/net/irda/discovery.

   A CR (carriage return) character cannot be transfered between two
   linux boxes via IrCOMM with cat file >/dev/ircomm0 and cat
   /dev/ircomm0. It causes a strange thing and freezes your Linux box.

   IrOBEX may eat some data on receive. The bug is most probably in the
   user-space side of IrOBEX.
     ________________________________________________________________

5.1.3. Troubleshooting Techniques

   Although I'm not much of a hacker I collected some tricks to track
   errors or bugs in the Linux/IrDA software.

     * You may set the debug level in /proc/sys/net/irda/debug to 1, 2,
       3, 4.
     * Use the files in /proc/sys/net/irda to try different parameters
       like echo 0 > /proc/sys/net/irda/discovery. The /proc/*/irda
       files are:

root@duckman:~# ls /proc/sys/net/irda/* /proc/net/irda/*
/proc/net/irda/discovery
/proc/net/irda/irlmp
/proc/net/irda/irda_device
/proc/net/irda/irttp
/proc/net/irda/irias
/proc/net/irda/irlap
/proc/sys/net/irda/devname
/proc/sys/net/irda/discovery
/proc/sys/net/irda/compression
/proc/sys/net/irda/debug

     * It is also possible to debug the code. But I don't know how to do
       this. If you want to use SKB debug code, you may edit irda.h and
       change /include/linux/skbuff.h (see revision history of snapshot
       10-2-98).
     * For problems with the irda module a utility from the modules
       package kdstat might be helpful. But I was not able to try this.
     * "You can now alter the number of discovery packets used (1, 6, 8
       or 16) and the timeout between sending them (2-8 * 10 ms) in
       /proc/sys/net/irda. Please experiment if you have problems
       discovering your device. My Palm III seems to like 16
       discovery_slots and 8 (*10 ms) for slot_timeout. " ... "The
       absolute minimum for reliable discovery of the IR-610 seems to be
       9." Another statement: ... the Palm III does not like 8 discovery
       frames in a row, but 6 is OK. With 8 it will answer 1 out of 6-10
       times, with 6 it answers every time. I really don't know if this
       is a problem with Linux-IrDA or the Palm III. One solution to
       this problem, is to cycle though some different discovery methods
       for each discovery like this: Disocvery 1: send 8 xid frames with
       80 ms separation If answer, keep the same config, if no answer,
       try next config Discovery 2: send 6 xid frames with 80 ms
       separation Discovery 3: send 8 xid frames with 90 ms separation
       Discovery 4: send 6 xid frames with 90 ms separation Discovery 5.
       Go back to 1. or some other pattern and maybe more combinations.
       Maybe this is sometimes implemented, so it would be enabled if
       /proc/sys/net/irda/discovery_slots is set to 0 .
     * If anybody gets a kernel Oops, then please feed it to the
       ../linux/scripts/ksymoops/ksymoops program, so that we can find
       out where it went wrong. Just cut out the Oops lines from the
       syslog, save them to a file, and then run ksymoops <file>.
     * Dag Brattli wrote: I found out that the cs4232 sound card was
       giving me several hundred interrupts per second! I removed the
       sound stuff from my kernel, and the machine is now generally
       about 4 times faster! Linux/IrDA may get problems if you are
       running the esound server (esd) on your machine. Both my
       machines, a 166Mhz Pentium laptop and a 200Mhz Pentium Pro cannot
       run Linux/IrDA when esd is running. The reason is that esd makes
       the soundcard give interrups over 300 times/second which makes
       the serial driver overrun when receiving. This is because the
       serial driver now uses slow interrupts in Linux-2.2 (everything
       is slow interrupts in 2.2), so the interrupt-handler schedules on
       its way out. The good thing about slow interrupts is that packets
       are delivered much faster, since you don't need to wait for the
       next timer-tick. The only exception for this is the pc87108
       driver which works fine since it uses DMA and will only give a
       couple of interrupts per packet.
     * There are also some userspace tools irdaping and irdadump to
       check Linux/IrDA connections.
     * AFAIK it is possible to use IrCOMM either with an infrared device
       or via serial cable. Maybe this give some debugging
       possibilities, too.
     * 1) You may edit /etc/conf.modules, adding the following lines:
       option irda irda_debug=3 2) Make sure the irda modules have been
       totally removed. 3) Edit /etc/syslog.conf, adding the following
       lines:

*/*         -/var/log/all

       4) Do killall -1 syslogd . 5) Print, or do whatever causes
       problems with irlpt . 6) Check all the files in /var/log/ .

   For some ThinkPad models you have to reboot to the preinstalled M$ OS
   and activate the IrDA port using the Thinkpad tools. There is
   currently no Linux tool to achieve that. This will disable your
   internal serial port (ttyS0)!. The DOS tool is PS2.EXE, as far as I
   know tpctl doesn't achieve this. It is really important to use this
   DOS program to enable IrDA. Using the Microsoft-Windows tools does
   not work. Without that the driver loads correctly and everythings
   seems OK, but the LED does not light bright enough.
     ________________________________________________________________

5.1.4. PCI Device Numbers

   Daniel R. Risacher magnus_at_alum.mit.edu wrote: To syncronize my
   Palm III with my Tecra 8100 running 2.2.17, I needed to edit
   /usr/src/linux/include/net/irda/toshoboe.h I changed "#define
   PCI_DEVICE_ID_FIR701 0x0701" to "#define PCI_DEVICE_ID_FIR701 0x0D01"
     ________________________________________________________________

5.1.5. scanport

   scanport can be used to get the correct device ID for a chip. It's
   part of the hwtools package (on Debian, probably same elsewhere). You
   just type it in and it scans the I/O ports from 0x100 to 0x400 - the
   usual ISA range. Above 0x400 there are shadows of below 0x400
   devices, and beyond that there are PCI devices, so the default is not
   to scan above 0x400. "Anyway, I had to manually scan using inb to
   find my chip's I/O. Fortunately I didn't have to go far to find it.
   (Newer sound cards often sit at 0x530ish, with 0x220 reserved for
   legacy compatibility modes) Normally, if you know where some device
   is located you just point the driver at it and the driver probes to
   see if it's the device the driver is expecting. Not entirely safe,
   but much safer than every driver probing every I/O port looking for
   something it thinks it can understand. scanport only does reads,
   which are usually safe."
     ________________________________________________________________

5.2. Mailing List

   You are welcome to use the Linux-IrDA mailing list for posting
   questions, answers, bug-reports, patches, suggestions and comments
   about Linux-IrDA. Please note that mailinglist doesn't accept mail
   from non-subscribers. This is to provide high signal-noise ratio and
   avoid spam. For subscribing and unsubscribing point your browser to
   [http://lists.sourceforge.net/lists/listinfo/irda-users] irda-users
   and here you will find Linux-IrDA mailing list control page. Read on
   "Subscribing to Linux-IrDA" section and fill email address field and
   password field (twice). Then press "Subscribe" button.

   To post a message to all the list members, send email to
   <irda-users@lists.sourceforge.net>. Before asking questions consider
   this as a last resort after reading the documentation and searching
   [http://www.google.com/] Google or the search engine of your choice.
   Please check the archive for answers to your questions also. It will
   be much easier quicker to help you, if you provide some information.
   Please include the output of:
uname -a
cat /proc/net/irda/discovery
setserial -g -a /dev/ttyS*
findchip
irdadump

   and of course any error messages, and the relevant parts of dmesg.
   Please make also sure you provide some information about IrDA support
   in the BIOS and the Linux distribution you are using.
     ________________________________________________________________

5.3. GUIs: Gnome, KDE

   The [http://sourceforge.net/projects/girda/] Gnome IrDA applet is a
   GNOME IrDA applet for monitoring IrDA devices.

   Beamster is a little Gtk/python utility to help with IrDA transfers
   especially from and to Linux PDAs
   (ftp://ftp.handhelds.org/pub/linux/dists/familiar/feeds/unstable/pack
   ages/armv4l/). It can talk to most handhelds/laptops/printers which
   use the IrDA Object Exchange protocol (OBEX), in fact any device
   which already works with the openobex package will work with this. It
   should be fairly intuitive to use. Make sure that IrDA is 'On',
   position the two devices, wait for the status bar to show that a new
   peer has been discovered, choose the transfer mode (use 'Palm3' for
   PalmOS peers and 'Windows' for everything else) then press 'beam' or
   'receive' as appropriate. Note that 'receive' toggles on and off.
   Tested transfers to and from this IrDA devices: an old Palm3, a Psion
   5MX, a Windows 98 ThinkPad and a Linux desktop with an Actisys L220+
   dongle.
     ________________________________________________________________

5.4. How to Make Infrared Light Visible

   

   What you don't see gets you.
     Unknown AuthorEss

   If you have an IrDA aware printer, you can point your phone at it and
   you should see a light near the IR port light up or flash. If you
   have a Palm organizer w/ IR, point it at the phone. If the IR on the
   phone is in discovery mode, you should see the "Waiting for Sender"
   dialog box pop up on the Palm.

   There is a program for the Palm called "IRMonitor" which measures IR
   emissions. You can get this off EuroCool or PilotZone. You run the
   program, point your Palm at where you think the IR beam should be
   coming from and if there are any emissions from that port, they will
   show up as a spike on the IrMonitor scrolling graph. I would highly
   recommend this program to anybody out there who plays with or works
   with IR devices.

   You may also use a video camera to detect infrared light. But I
   couldn't check this yet.

   Most of this section is taken from a posting to the Linux/IrDA list
   by "The Armadillo with the Mask".
     ________________________________________________________________

5.5. Power Saving

   In the specifications of my HP OmniBook 800 it is recommended to turn
   off the IR port, if it is not in use, because it may consume up to 10
   percent of the battery time.

   If necessary, you may also try to disable the Fast RRs feature in the
   IrDA section of the kernel. This option will give you much better
   latencies but will consume more power.
     ________________________________________________________________

5.6. Beyond IrDA

5.6.1. Extending Transmission Distance

   According to the IrDA specification the range is up to 1 meter. From
   the "IrDA Data Link Design Guide" p. 20 by [http://www.hp.com/go/ir]
   Hewlett-Packard : " In some cases it may be desired to increase link
   distance beyond the 1 meter guaranteed by IrDA. The two ways to do
   this are to increase transmitted light intensity, or to increase
   receiver sensitivity. In order to extend the link distance, both
   sensitivity and intensity must be increased for both ends of the IR
   link. If it is desired to communicate with a standard IrDA device
   that may have minimum transmitter intensity, the receiver intensity
   must be increased. The standard IrDA device may also have minimum
   receiver sensitivity, so transmitter intensity must also be
   increased."

   Andreas Butz wrote: "This might be a silly question, but has anyone
   an idea whether the whole IrDA stack really relies on a two-way
   connection, or whether there are some parts of it that could be
   abused for a one-way connection, ideally for unreliable data? We're
   trying to modify some IR dongles to broadcast information to palm
   pilots over several meters distance (cover a whole room), and since
   we don't want to modify the pilots themselves, and increasing the
   sensitivity on the receiver side seems unlikely to work, we're stuck
   with a one way link.". Please see the mailing list archive for
   details of the discussion.

   Sent by Marc Bury " .. just heard about some Philips new scheme for
   remote controls: they call it IRDA - Control. This is supposed to be
   bi-directional, 75 kbps data rate, multiple simultaneous devices (up
   to 8) and with a minimum 6 meter range!" More information at
   [http://www.irda.org/] IrDA.org .

   The German magazine ELEKTOR issued a guide to build a Long Distance
   IrDA Dongle (20m, RS232, IrDA 1.0), [http://www.elektor.de] ELEKTOR
   5/97 p.

   "The main problem is that you generally have to make the receiver
   more sensitive. Basic physics has the inverse square law: the
   intensity drops with the SQUARE of the distance, so going from 1 to 5
   meters requires 25x the power (and battery drain on a portable
   device), or 25x the sensitivity (and dynamic range - it still has to
   be able to work at 3 inches). And if you want to do it on the other
   end, it doesn't simply have to be 25x more sensitive, it must pick up
   the tiny IrDA pulse needle in a haystack of florescent lights, screen
   savers, moving shadows ..."

   Also laser diodes (pulsable) were recommended by K-H. Eischer: But
   they are more expensive. And the laser diodes are also dangerous if
   they have more than 1 mW. A better solution would be to use lenses to
   focus the beam. There is a minimum of absorbtion in the air (I don't
   know the right frequency) and you should use IR diodes with this
   frequency.

   James wrote: " Who ever it was wanting to do long distance with IrDA,
   we've tried this before. The best approaches are:

     * wavelan - buy the cards but not the antennas you can make your
       own with equaly good gain as the $9000 type they sell here.
     * microwave - you can pick up X-band doppler radar modules, tune
       them slightly apart and use the your local TX as the LO for the
       incomming RX, the whole thing behaves like ethernet and you can
       hook it onto an AUI port, this may now be illegal.
     * ir - Many people sell kits which transmit video over Ir, they
       come complete with the large fresnel lense you need, they manage
       about 4MHz b/w over 100m.
     * laser diodes - when we looked at these they were a pain, I think
       elantec make decent drivers but modulating them was a big pain,
       Steve Carcia had a series on articles on modulating He-Ne lasers
       but be careful they have lots of volts in them that want to get
       out and kill you.

   Whatever you choose IrDA might very well be a good choice for a
   protocol, given it's one of the few that sensibly copes with
   simplex."

   Here are some links to
   [http://repair4laptop.org/notebook_irda_selfmade.html] do-it-yourself
   InfraRed (IrDA) devices to use with your laptop, notebook, PDA or
   mobile phone.
     ________________________________________________________________

5.6.2. Upcoming Standards (Bluetooth and IrDA)

   "More and more people now think that IrDA and Bluetooth will live
   happily side by side, and the idea of Bluetooth as the IrDA killer
   just don't work anymore. IrDA is still unbeatable in
   price/performance and with the new additions to the standards family
   like AIR and VFIR, it's really good to see that IrDA is moving in the
   right direction."
     ________________________________________________________________

5.7. IrDA Network Neighborhood

5.7.1. Laptop-Printer-PDA

   You can take a little peek at [http://irda.sourceforge.net]
   Drag-n-drop stuff , so you will be able to drop files to your PDA
   (uses IrOBEX) or drop files to your printer (uses IrLPT) etc.
     ________________________________________________________________

5.7.2. Bridging/Routing

   James wrote: " ... there is a much better way of doing the bridging
   which is routing. This is entirely user land and requires no kernel
   patches. But the IrLAN protocol is no longer maintained by the
   Linux/IrDA core team.

   It's in two parts (you may only need one your milage may vary...) the
   first called irdaipcfg does the following:

   1) First part is executed as irdaipcfg ifeth ifirlan daemonizes, then
   looks for ARP packets on ifirlan, checks that the arp was not
   generated by the machine on which it is running. The arp contains the
   ip address of the machine on the other end of the irlan (it was
   generated by the gratuatous arp in the irlan code). The program then
   sets up a host route to this ip address via ifirlan, adds a proxy arp
   to ifeth for it and generates a gratuatous arp on ifeth. It writes
   the ip address of the client in /var/run/host.ifirlan so you can
   easily undo all of this from a script.

   2) Second part is executed as gratarp ifirlan. Sometimes the
   gratuatous arp seems to get lost in the pipe work, gratarp daemonizes
   and spits out a whole stream of the things...

   I use them as follows: (you can use them to do whatever you like)

   On my host (the machine bolted to my local net) irlanx is brought up
   as 10.192.0.1 with a netmask of 255.255.255.255 and a broadcast of
   10.192.0.1 by my ifup script from /etc/irda/network by irattach.
   /etc/irda/network then runs irdaipcfg eth0 irlanx and this does the
   routing.

   From /etc/irda/network
"start")
    echo 1 >/proc/sys/net/ipv4/conf/all/forwarding
    ./ifup ifcfg-${device}
    /sbin/irdaipcfg ${localnet} ${device}
    ;;
"stop")
    host=`cat /var/run/host.${device}`
    if [ .$host != . ]; then
      /sbin/arp -d ${host} dev ${localnet}
      /sbin/route delete ${host} dev ${device}
    fi
    ./ifdown ifcfg-${device}
    /sbin/ifconfig ${device} down
    ;;

   on the client I set up IrLAN to use an address on my normal subnet
   10.32.32.51 but with netmask 255.255.255.255 (not my usual netmask) I
   have some static routes which are host 10.192.0.1 dev irlan, and net
   default gw 10.192.0.1 dev irlan. I run gratarp from the
   /etc/irda/network, and I can wander arround my house and not lose
   telnet and ssh sessions ..."
     ________________________________________________________________

5.7.3. IPv6

   As far as I know IPv6 has neighbor discovery mechanism, but I don't
   have information about Linux/IrDA used with IPv6. Please see the
   mailing list archive for a discussion of this topic under the subject
   :"patch-2.2.7-ac1-irda4".
     ________________________________________________________________

5.7.4. DHCP

   I have got reports that it is possible to use dhcpcd with IrLAN.
   Please use latest DHCP software. But currently the IrLAN protocol is
   no longer maintained by the Linux/IrDA core team.
     ________________________________________________________________

5.8. Linux/IrDA and APM

   Fons Botman wrote: "When I hibernate my HP OmniBook 2000CT, (Fn-12
   diskimage is written to disk, machine turns off completely) with
   irtty active and turn it on again, irda does not work. I can see it
   trying to reply to discovery frames it receives from a windows box,
   using irdadump on the OmniBook. but the windows PC does not see the
   replies. If I just kill irattach and remove irtty and serial, and
   start irattach again, it starts working again. Does this occur with
   other linux laptops also? Is it a problem in the serial device
   driver? " Also Pedro Figueiredo reported this problem for a Fujitsu
   LifeBook 735DX.

   Answer by Dag Brattli: "Could you all check if the same thing is
   happening when your're using PPP (and not using IrDA). I guess the
   APM stuff shuts down the serial port, so that the driver will need to
   reinitialize it when waking up again. This is properly implemented by
   some of the PCMCIA drivers I know about, but I really don't think the
   serial driver gets any events from the APM system.

   So here you have your own little kernel project. Start adding APM
   support to irport which will be the easiest thing (and also to the
   FIR drivers), then you can start adding a patch to the serial driver
   (if needed). Again I think the PCMCIA subsystem may be a good source
   on how to fix it properly."
     ________________________________________________________________

5.9. Performance Testing

   netperf is a benchmark that can be used to measure the performance of
   many different types of networking including Unix Domain Sockets and
   TCP and UDP via BSD Sockets. It provides tests for both
   unidirectional throughput and end-to-end latency.
   [http://www.netperf.org/netperf/NetperfPage.html] Netperf page.

   bing by Pierre Beyssac determines bandwidth on a point-to-point link
   by sending ICMP ECHO_REQUEST packets and measuring their roundtrip
   times for different packet sizes on each end of the link.
     ________________________________________________________________

5.10. IrDA Protocols

5.10.1. IrDA Stack

   Figure 5-1. IrDA Stack

   [irda_stack.jpg]

   IrDA Stack.
     ________________________________________________________________

5.10.2. Existing IrDA Protocol Implementations

   From Lichen Wang I have taken these remarks:

   IrLAP, IrLMP, and TinyTP are pretty stable now. But various
   individual implementations may still have quirks.

   IrCOMM is widely used, but Microsoft vowed to drop it and use
   IrSocket only.

   IrObex, IrMC, IrTran-P, etc. are showing up in various devices. The
   supports on PC are segmented and sometimes very poor.

   New IrDA Protocol Development AIR is pushed mainly by IBM. You get
   wider angle and longer distance (10M?) but may be at lower data rate.
   You can also time-multiplex this already slow channel. In my opinion
   the benefit to the user is very little. AIR hardware and software
   changes are costly. I think you will have to wait for a long time, if
   ever, to see any product using AIR.

   IrBUS is pushed mainly by Sharp. It is aimed at remote control, IR
   keyboard, etc., not for data communication. I think if Sharp succeed,
   you may see IrBUS in set-top boxes, web-tv, etc. If and when these
   devices reaches a critical mass, some PC may incorporate IrBUS in
   order to control these devices.

   VFIR is the latest. The benefit is higher data rate (16 Mbps). Unlike
   AIR and IrBUS, the software changes for VFIR are minimum. The changes
   are mainly in hardware.

   In summary, I do not think we need to wait in anticipation of new
   IrDA protocols. A easy to install and solid implementation of the
   existing IrDA protocols is the cutting edge!.
     ________________________________________________________________

5.11. FAQ

     * Q0 - Question: What is the difference between irport and irtty?
     * Answer: I never used irport because irtty works for me, but it
       should not matter which low level driver you use. I used
       successfully irtty, nsc-ircc and irda-usb (depending on my
       hardware).
     * Q1 - Question: I do not know anything about ports and irqs. What
       should I do?
     * Answer: PART A: Hardware settings - 1 Have a look at your
       hardware specs!!! If not available look at the support page of
       your vendor, or contact the support hotline. You might also find
       the information in one of the hardware surveys mentioned above.
       PART B: How to tell the kernel about the hardware settings -4 cat
       /proc/ioports to see which ports are already in use. -5 cat
       /proc/interrupts to see which interrupts are already in use. -6
       Make ports and interrupts available for use with the IR device,
       e.g. stop the PCMCIA service or include a line like this in
       /etc/sysconfig/pcmcia: PCIC_OPTS="irq_list=3,4,5,7,9,10,12,14,15"
       -7 Now try to guess what the right interrupt and port is. Use
       setserial /dev/ttySx irq M port 0xNNNN to tell the kernel. If
       there is more then one possible chance try them all (Note: As
       mentioned in the Serial-HOWTO you should not try irq 0, 1, 6, 8,
       13, 14). -8 If you were successful please send these parameters
       to the author, because I would like to include them in the
       Infrared Hardware Survey. -9 Good luck. It might also be
       necessary to fine tune the IR serial port with setserial, e.g.,
       setserial /dev/ttyS0 spd_vhi (speed rate 115200).
     * Q3 - Question: I get a message like tcsetattr read/write error in
       /var/log/messages.
     * Answer: Caused probably by wrong /dev/ttyS* or wrong irq or port.
     * Q4 - Question: Every setting seems alright, because I get the
       appropriate messages. But it still does not work.
     * Answer: Move the devices to within 0.5 meter (1.5 feet). Check
       that only one application is using the infrared port. Check that
       both devices are using the same protocol, such as IrOBEX or
       IrCOMM.
     * Q7 - Question by Ho Chin Keong: Is there other way of setting up
       communication between the 2 laptops besides setting up a LAN
       route between the two?
     * Answer by Dag Brattli: Yes and no! One of the IrDA standard,
       IrCOMM permits you to emulate a serial cable between two laptops,
       so you can use any application written for serial ports
       (terminals, PPP, slip, etc.). This is however not yet implemented
       in Linux/IrDA. The IrLPT (printer) support is actually a subset
       of IrCOMM, so some of it is working!
     * Q8 - Question by Ho Chin Keong: If I block the infrared path
       deliberately for more than 10 seconds, the connection could not
       re-establish. I have to kill the irattach and restart the whole
       procedure to start the infrared route. The connection could be
       maintained, however, if the blocking is less than 10 seconds. Is
       this part of the design or a bug? Is there any way whereby we can
       lengthen this time limit from 10 s to longer or infinitely?
     * Answer by Thomas Davis: This seems to be a bug in the primary
       side of the IrLAP/IrLMP code. It appears not to send the
       reset/disconnect notice all the way back up the stack. You'll
       notice it when IrLPT gets stuck in the query mode while you were
       trying to talk to a printer, and disconnected/interrupted it when
       it was handshaking. (and now, it shows up in the IrLAN portion)
     * Q11 - Is there any IrDA support for BSD?
     * Answer: Linux/IrDA seems to be the only available GPL source yet.
     * Q12 - By Rui Oliveira: I am having a problem connecting a PalmIII
       to a Linux box with an Actisys 220L adapter. With a motherboard
       adapter (no brand but, I think, similar to the Actisys 210L) I
       simply redirect a pilot syncronization tool (pilot-xfer) to
       /dev/ttyS1 which has the ir adapter attached and, using IrLink in
       SIR mode, I can get the Linux box to talk with the PalmIII.
       Trying the above through a serial port with a serial-irda Actisys
       220L adapter I can't get this to work. My question is :What
       happens if one just throws data into a serial port with a irda
       adapter?
     * Answer by Lichen Wang: In terms of hardware, IrDA SIR needs a
       serializer- deserializer, an encoder-decoder, and a transceiver.
       The UART that drives the COM port of any PC is a
       serializer-deserializer. In some PC, there is also an
       encoder-decoder which can be enabled or disabled by the BIOS.
       When it is disabled, the COM port is usable as an old COM port.
       When the encoder-decoder is enabled, usually the COM port is no
       longer usable but an IrDA port is now usable instead. Actisys
       IR-210 is a SIR transceiver and thus can be used if the PC has
       this kind of UART with an IrDA encoder-decoder and the BIOS has
       enabled it. Under this hardware configuration, you need to tell
       the Windows setup program that you have "standard infrared
       devices" and with "Built-in Infrared port on laptop or desktop".
       Actisys IR-220, on the other hand, includes both the
       encoder-decoder and the transceiver. It is designed to be used
       with a regular UART. If the UART in the PC has also the
       encoder-decoder built-in, you must use BIOS to disable that.
       Under either of this hardware configuration, you need to tell the
       Windows setup program that you have an "ACTiSYS" manufactured
       "ACT-IR220L Infrared Wireless Interface". To answer your
       question: In addition to throwing data at the serial port, you
       need to tell the UART and the encoder-decoder what data rate to
       use. In the case of a built-in encoder-decoder, when you set the
       data rate of the UART, the encoder-decode also get set correctly.
       In the case a separate encoder-decoder, you need to tell both of
       them the data rate separatly.
     * Q13 - If I try to make a connection, say telnet, it takes an
       incredibly long time for the login prompt to appear.
     * Answers by Renaud Baldura, Dag Brattli and Hee Thong: ... it's a
       DNS problem. The resolver times out trying to reverse-resolve the
       IP address of your incoming connection. I think just renaming
       /etc/resolv.conf to something else takes care of it. ... or add
       some static bindings in /etc/hosts for the machines you want to
       access in your ad-hoc network. That should avoid the DNS lookups.
       ... If both machines are in a private test environment, put the
       following line in the /etc/host.conf, order hosts, bind. This
       will make the machine check the /etc/host file before doing a DNS
       lookup. Remember to update the host file on both machines to
       reflect the IP and host names of the 2 machines.
     * Q14 - Question by David LaPorte: I was wondering if anyone has
       had any success getting the irda port on the Toshiba Tecra 740cdt
       working. ... I've read that it should show up at IRQ 11, ttyS2.
       Well, I have a PCMCIA modem which steals ttyS2 and the PCMCIA
       controller steals IRQ 11. Does anyone have any suggestions?
     * Answer by Dag Brattli: If you still have Win95 on your machine,
       you should go to the device manager and change the PnP setup for
       the IrDA port (something else than the stuff your're already
       using). You could for example move away ttyS1 (in Win95), so that
       it uses the values that the PCMCIA card is going to steal, and
       then use the settings from ttyS1 for ttyS2.

dagbnb ~/linux/test/ > cat /etc/sysconfig/pcmcia
PCMCIA=yes
PCIC=i82365
PCIC_OPTS="irq_list=7,9,10"
CORE_OPTS=

       ... should make sure the PCMCIA controller stays away from irq
       11. Also make sure that the IrDA port is enabled in Win95 since
       it's disabled by default.

II. Infrared Remote Control

   Table of Contents
   6. Introduction
   7. Linux Infrared Remote Control - LIRC
   8. Lego Mindstorm
   9. Serial Infrared Remote Controller
   10. Infrared Tools for the COREL Netwinder PC
   11. ir
   12. irmctl
   13. IRManager
   14. irXxD
   15. XR3
   16. IR File Chooser
   17. IControl
   18. jlirc
   19. lircemu
   20. smartmenu
   21. iowlircemu
   22. tonto
   23. Infrared Remote Control ./. IrDA
     ________________________________________________________________

Chapter 6. Introduction

   Remote control via infrared is not the aim of the Linux/IrDA project
   but is included in this HOWTO to cover "Linux and Infrared" more
   completely. I found some projects which are working on this topic.
   You may find some links to current information at
   [http://tuxmobil.org] TuxMobil.
     ________________________________________________________________

Chapter 7. Linux Infrared Remote Control - LIRC

   [http://www.lirc.org] LIRC is a package that supports receiving and
   sending IR signals of the most common IR remote controls. It contains
   a device driver for hardware connected to the serial port, a daemon
   that decodes and sends IR signals using this device driver, a mouse
   daemon that translates IR signals to mouse movements and a couple of
   user programs that allow to control your computer with a remote
   control. The IR hardware can be either selfmade or choosen from a
   variety of commercial solutions. Takahide Higuchi wrote about LIRC:
   "It's great, and it seems almost complete solution, but it seems
   there is almost nothing supporting hardware on the market (or need to
   solder some special circuit ... it is hard work for many people to do
   so). I believe that LIRC will be more popular if consumer IR support
   is implemented in FastIR drivers and some common API (for example, a
   raw IrSocket and common ioctls) is made!".
     ________________________________________________________________

Chapter 8. Lego Mindstorm

   Quoting the [http://tldp.org/HOWTO/Lego/] Lego Mindstorm with Linux
   Mini-HOWTO by Luis Villa:" In case you don't know, the Lego
   Mindstorms Kit is a robotics kit from The Lego Group that retails for
   about 200 US dollars. For that, you get a lot of Lego pieces, a large
   brick containing a CPU, an LCD, and some connectors (known as the
   RCX), a couple of motors, and some light and touch sensors that allow
   you to interact with the outside world. ..."

   "All communication to the RCX is done via the IR tower, which is
   connected to the machine via a serial port. As a result, if you have
   no serial port connection, you will be unable to use the RCX unless
   you can buy an adapter. Furthermore, under certain circumstances,
   there may be problems with IRQs or serial port conflicts. This is
   particularly likely if your modem uses /dev/ttyS0."
     ________________________________________________________________

Chapter 9. Serial Infrared Remote Controller

   This is a simple, cheap device that can be connected to any serial
   port to control most components that have infrared remote controls.
   It was designed and built on a solderless breadboard and is finally
   designed as a PC board. You may find this package
   [http://www.armory.com/~spcecdt/remote/remote.html] here .
     ________________________________________________________________

Chapter 10. Infrared Tools for the COREL Netwinder PC

   Ryan Shillington wrote some tools to control the COREL Netwinder via
   infrared, for example:

   Server Side for the Corel Palm Administrator (daemon). It depends on
   having ir-simple installed and up and running. With this you can
   check and change IP addresses, Gateway addresses, setup eth1, etc.
   You can also run simple commands AND you can check the Temperature,
   Memory, Load averages, etc.

   Client Side for the Corel Palm Administrator. You can also run simple
   commands AND you can check the Temperature, Memory, Load averages,
   etc.

   A very basic infrared device driver. This does not support IrDA (only
   unreliable transfers). It looks specifically for Remote Control
   signals (and Keyboard, etc.). It blocks and passes data up very
   differently.

   You should get the tools at the [http://www.netwinder.org/] Netwinder
   project.
     ________________________________________________________________

Chapter 11. ir

   ir is an interface program to [http://www.redrat.co.uk/] Chris
   Dodge's RedRat 2 infrared controller to send and receive infrared
   signals to/from consumer devices like TV's, VCR's, cable boxes, and
   stereos. It is written in Perl. It uses only the basic Perl
   constructs and no external packages, so it should work on any
   platform that supports Perl and serial communications. It can be
   accessed via the command line or cron, as an email handler (through
   aliases), or as a cgi script which will automatically generate a form
   with all possible codes. It has macro capability so one command can
   send a series of IR signals. With an X-10's IR543, it can be used to
   control X10 devices, too. Download it [http://thekramers.net/ir/]
   here.
     ________________________________________________________________

Chapter 12. irmctl

   [http://www.nongnu.org/irmctl/] irmctl is an utility daemon to
   control your favorite non-IRDA infrared receiver. For the moment,
   only irman (through libirman) is supported.
     ________________________________________________________________

Chapter 13. IRManager

   IRManager (dead link:
   http://home.student.utwente.nl/f.c.vanviegen/releases/irmanager/) is
   a Linux daemon to make advanced use of an
   [http://www.evation.com/irman/] IRMan infrared receiver. It forwards
   IR signals to (multiple) native IRMan applications, and can be used
   with your own scripts and applications. It also has a mapping system
   and its advanced configuration options make it the most flexible and
   easy way to remote control your computer.
     ________________________________________________________________

Chapter 14. irXxD

   [http://www.noomore.org/irXxD/] irXxD is a library for
   sending/receiving infrared remote control codes. It includes kernel
   2.0 and 2.2 modules for receiving/sending IR codes under Linux, and
   various support for other operating systems.
     ________________________________________________________________

Chapter 15. XR3

   [http://www.orbit2orbit.com/gmd/RedRat/index.html] Xr3 is package of
   Linux tools for the [http://www.redrat.co.uk/index.html] RedRat2
   serial port based Learning IR Remote Control. It was initially
   developed for use with a [http://www.replaytv.com] ReplayTV Personal
   Video Recorder(PVR) but has now been expanded to handle any kind of
   IR controlled A/V equipment.
     ________________________________________________________________

Chapter 16. IR File Chooser

   [http://www.splitbrain.org/index.php?x=.%2FProgramming%2FPerl%2FIR+Fi
   le+Chooser] Infra Red (IR) File Chooser is a remote-controlled menu
   for selecting files and loading them by an assigned program. You can
   add as many filetypes and associated programs as you wish. The
   functionality of InfraRed (IR) File Chooser may be extended using
   Perl or Shell scripts. The GUI was created with Perl::GTK and it uses
   RCU::Lirc to fetch the remote controller commands.
     ________________________________________________________________

Chapter 17. IControl

   [http://icontrol.sourceforge.net] IControl interprets signals from
   Creative's RM-900 remote control and the accompanying IR LiveDrive!
   receiver unit. It is currently capable of sending input to various
   programs (including XMMS, Xine, XawTV, and XScreensaver), as well as
   circulating window stacking order (sending windows to the
   background), and changing input focus. It is completely configurable,
   allowing the user to map any key to any action the daemon supports.
   Support for other remote controls is planned.
     ________________________________________________________________

Chapter 18. jlirc

   [http://jlirc.sourceforge.net/] jlirc is a Java client API for the
   LIRC and WINLirc programs. It lets enables IR remote control support
   for Java applications.
     ________________________________________________________________

Chapter 19. lircemu

   [http://lirc.sourceforge.net/software/snapshots/] lircemu is a small
   tool for developers of LIRC applications. It emulates the LIRC daemon
   so you can test, develop, and use programs with LIRC support. It
   provides a graphical virtual remote control so you can send buttons
   an easy way. Also a simple version for console is included. Note:
   This tool has been developed by David Kutalek. Since his original
   website has vanished, the link above points to some maybe outdated
   version of lircemu.
     ________________________________________________________________

Chapter 20. smartmenu

   [http://perso.nnx.com/pludov/homepage/index-smartmenu.html] smartmenu
   is a menuing application written by Ludovic Pludov for use with
   remotes via Lirc. It's purpose is to provide smart way of controlling
   your linux box with a remote control.
     ________________________________________________________________

Chapter 21. iowlircemu

   [http://www.darav.de/iowlircemu.html] iowlircemu is an emulator of
   LIRC which (currently) only supports the Code Mercenaries GmbH's
   IO-Warrior24 starterkit. Neither LIRC is required, nor it depends on
   it. It's distributed under the terms of GPL. Also it provides an
   interface to write data to a connected LCD. An plugin for xmms is
   also included in the package.
     ________________________________________________________________

Chapter 22. tonto

   [http://giantlaser.com/tonto/] Tonto is a developer-oriented
   companion to the popular Pronto line of programable remotes made by
   Philips. Tonto provides both an IDE and a Java API for editing CCF
   files.
     ________________________________________________________________

Chapter 23. Infrared Remote Control ./. IrDA

   Two of the above mentioned projects use some kind of selfmade dongle
   for infrared remote control. There is also a description to build a
   serial IrDA dongle by yourself in the German [http://www.elektor.de]
   ELEKTOR 5/97 p. 28 magazine. Maybe someone can merge these two kind
   of dongles together.

   For a discussion of the relation between Infrared Remote Control and
   IrDA I quote from the Linux/IrDA mailing list (shortend and modified
   by WH):

   Ryan Shillington wrote: "ConsumerIR - CIR, Remote IR and ASK-IR are
   very different from IrDA (FIR, MIR, SIR).

   Remote IR and ASK-IR are very low speed and low frequency (but very
   long range) uses for IR. They operate around 2400 baud.

   SIR operates at higher rates, and is meant for long range
   transmission where you need more than a few characters pass through
   (unlike a remote control).

   MIR is a little faster (less range), but with speeds up to 1.15 Mbps,
   and FIR (where the devices have to be practically touching) is 4Mbps.
   The range is inversely proportional to the speed you can send data
   at.

   I'm working on drivers for Remote-IR, but you should know that your
   IR stuff has to support it. Look for protocols like NEC, RC-5 or RC-0
   (those are the most common ones).

   You can use SIR to receive Remote Control signals. Set your baud rate
   nice and low and data will come through. BUT, from my experience,
   it's not the RIGHT data. It's not being analyzed in the right way,
   and as such, you can't compute the checksums or check it with its
   complement.

   I have managed to get data in (using SIR) with remote controls. I
   have been told that SIR will read the remote control stuff
   differently depending on temperature (although I have never had that
   experience). "

   Lichen Wang wrote in response: "The so-called ASKIR in most laptops
   etc. is not meant for remote IR devices. ASKIR is meant for Sharp
   Wizard and Zaurus PDAs and some of Sharp's notebook PCs. Sharp stated
   this long before IrDA was established and is still supporting it to
   maintain backward compatibility. Apple's Newton had this capability
   at one time, too.

   Briefly, ASKIR uses 9.6 Kbps (19.2 and 38.4 Kbps are also possible)
   asynchronous data format of 8 data bits, 1 stop bit, and odd parity.
   The start bit as well as all 0 bit in data/parity are transmitted as
   IR square wave at 500 KHz (DASK sub-carrier). The stop bit as well as
   all 1 bit in data/parity are represented by the absence of any IR
   transmission.

   As you can see, this is totally incompatible with existing IR remote
   control. [..]

   True. Not only can you use SIR hardware to receive, you can transmit,
   too. Of course, there are some limitations.

   Most IR remote controls use 38 KHz sub-carrier. 3 times 38 is 114,
   very close to 115.2. You can set the UART to operate at 115.2 Kbps, 7
   data bits, no parity, and 1 stop bit - a total of 9 bits. Each 3
   cycles of the 38 KHz sub-carrier can be received or transmitted as a
   byte of 0x5B.

   There are some physical limitations in addition to the fact that the
   sub-carrier must be 38 KHz. The SIR receiver is not as sensitive to
   38 KHz as the IR remote receiver designed for that. The SIR
   transmitter has a much lower duty cycle and thus can not emit a
   strong sub-carrier either.

   IR remote encodes the control signal by turning on and off the
   sub-carrier at certain specific patterns. Now that you can transmit
   and receive the sub-carrier, what remains is all in timing.

   For transmit, you have to know how many consecutive bytes of 0x5B to
   send for each burst of the sub-carrier, and how long to be quiet
   between the bursts.

   For receive, you have to know how many of the 0x5Bs you received are
   consecutive, and how long the gaps were between these groups of
   consecutive bytes. [..]

   My experience with the IrDA link distance of SIR, MIR and FIR is
   somewhat different from what Ryan said. [..]

   SIR, MIR and FIR should all work from 0 to 100 cm but in practice:

   (a) Some devices may have problems at LONG distances.

   When possible, place the two communicating devices no more than 50 cm
   apart. Low power devices, such as pagers, phones, etc. may have even
   shorter ranges despite the fact that they use SIR instead of MIR or
   FIR.

   (b) Some devices may have problems at SHORT distances.

   Place the two devices at least a few cm apart. Putting the two
   devices too close to each other can cause troubles.

   It is somewhat intuitive that when the link is not reliable we put
   the two devices closer together. But it is counterintuitive that too
   close is not good either. The reason is that the light intensity at 1
   cm is 10.000 times brighter than that at 100 cm. At 0.5 cm, it is
   40.000 times, etc. The IR receiver manufacturers have difficulties to
   cover this huge dynamic range. We all have problems reading under a
   10 W light bulb, but imagine how it feels under a 100.000 W light!

   The IrDA Physical Layer is totally incompatible with the DASK
   modulation used in IR remote controls. Thus it is not possible to use
   the same controller function for both FIR and remote control.
   However, practically all FIR controller chips do include some
   additional functions to support remote control. National, SMC, and
   Winbond (just to name a few) all have such I/O chips.

   The IR transmitter for FIR and remote control are very similar. I
   have tried a standard FIR transmitter. It can reach 10 meters for
   remote control purpose. Thus it performs just as good as transmitters
   designed for remote control.

   The IR receiver for FIR and remote control are somewhat different. A
   FIR receiver can receive remote control signals but can reach only 1
   meter whereas receivers designed for remote control typically can
   reach 10 meters.

   I have an ISA bus adapter with a National I/O chip that supports both
   FIR and remote control. I also have IR Dongles that include both FIR
   and remote control receivers. (Plus a transmitter for both modes.) I
   cannot find any software to support remote control functions. I did
   my own experiments in DOS (I cannot run Linux yet.) Anybody interest
   in this? "

   Benny Amorsen wrote: "I have a laptop that is supposed to support
   ASKIR. The mode of the infrared port can be switched to ASKIR in the
   BIOS. Having to reboot to switch the mode in the BIOS makes it
   useless, though, so someone would have to find a way to switch on the
   fly. "

   Dag Brattli wrote: It should be possible to use IrControl (formerly
   IrBus) for IrDA compliant remote controls. I currently don't know
   about any remote controls using IrControl standard, but there should
   be some out there (anyone else who knows better?). You should go to
   the [http://www.irda.org/] IrDA site and get the physical layer
   standard (which includes IrControl I think).

   "Normal" IrDA (using IrLAP) is _not_ well suited for remote control
   because of the connection oriented nature (and just supports 9600bps
   for connectionless use). The reason for the limited range is
   eye-safety they say (but I currently don't know why CIR works better
   using the same power). I have however seen laptops connect at 4-5
   meters (but I don't think that any high speed communication would be
   possible).

   Most IrDA chipsets are capable of CIR operation, and it is quite easy
   to modify the drivers so they talk CIR. Takahide Higuchi has started
   to look at IrSockets and it would be great if we could open a "raw"
   Ir(DA) socket which then could send and receive CIR packets. Then all
   the CIR applications could live in userspace.

   I know that Corel is interested in using CIR for controlling the
   NetWinder (and they actually have running code). Take a look at
   [http://www.slashdot.org/articles/98/12/05/0916216.shtml] this
   article or [http://www.netwinder.org/~ryansh] Ryans page .

   From the "IrDA Data Link Design Guide" p. 21 by
   [http://www.hp.com/go/ir] Hewlett-Packard : " It is possible to
   transmit and receive signals other than IrDA signals with
   Hewlett-Packard IR transceivers. For implementation details, please
   refer to the Application Note, Transceiver Performance with ASK and
   TV Remote Signals."

   From the IR-MAN page:

   Fortunately, many IrDA devices are compatible with the 38-kbps ASK
   modulation used in TV remotes. This means that they can work with
   such kind of infrared type signals. ... However, it seems that there
   are still many portable computers that can't receive TV infrared
   stuff.

   For desktop computers, there exist two options, depending on the
   motherboard you have. Usually a Pentium MoBo has an I/O chipset ready
   for infrared communication. There is a special connector where you
   can connect the transducer. The other option is buying a serial type
   transceiver that connects to the standard serial port (RS-232) of the
   computer. ... PC Remote Control has been tested with success using
   both type of IrDA devices:

   1) IRmate IR-210 Serial Port Infrared Adapter. ... The serial port
   speed at wich the device sends recognizable data values is 2400 bps.
   I don't know if this speed will be the same for all the adapters of
   this type or is an unique characteristic of this model.

   Look at the examples of data values received to see how similar are
   them. There are some infrared commands that change a lot every time,
   difficulting the recognition. In such cases, a great tolerance in the
   comparison could be used, but the risk of confusion between different
   commands will be increased. An apropiate tolerance value for almost
   all cases is 20.

   2) Actisys IR2000L connected to an Asus P2B motherboard. ... There
   are several serial port speeds that work well, although 4800 bps
   seems to be the best one. Other adapters of this same type work also
   well using this speed. Take a look at the samples of data sequences
   received using this device. Some remote buttons send exactly the same
   sequence and it's impossible to distinguish between them at all.

   3) Asus IR-eye connected to the same MoBo as above. It works as well
   as the Actisys device.

   TV remotes send commands only one way, in a low-speed burst for
   distances of up to 30 feet. They use directed IR with LEDs that have
   a moderate cone angle to improve ease-of-use characteristics.
   Cordless connectivity via IrDA transfers files, point-to-point and
   bidirectionally, in a high-speed burst for short distances using
   directed IR with LEDs having a narrow cone angle. IrDA transmissions
   require relatively careful aiming, and they're easy to block. For
   this reason, don't expect a great distance while working with the
   remote unit.

   Alessio Massaro : wrote: " IrDA doesn't talk to tv-remotes, but it
   does have the IrCOMM layer to emulate a serial i/f. My guess is that
   to get LIRC working with it, you should just need ... to read from
   the IrCOMM virtual serial device (as you would with a /dev/cua or
   whatever) and use a remote that can be seen by your dongle+IrDAheader
   pair."

   Answer by Dag Brattli: "You are talking about being normal serial
   ports, but that is something at least I have choosen IrDA not to be.
   I have implemented all the device drivers as network device drivers,
   so things are a bit different (more frame oriented). The device
   drivers deliver IrDA frames and currently nothing else.

   But I don't think that we must have a tty interface to the IrDA
   device drivers in order to support more RAW reads and writes. And
   btw. forget about IrCOMM, it has nothing to do with this issue.

   I have actually already implemented support for raw reads and writes
   for the device drivers, since some of the dongles require this."

III. Appendix

   Table of Contents
   A. Credits
   B. Revision History
   C. Serial Infrared Port Sniffers

        C.1. Sniffer by Gerd Knorr
        C.2. sersniff

   D. Infrared Light and Eye Safety
   E. Copyrights, Disclaimer, Trademarks

        E.1. Disclaimer and Trademarks
        E.2. Copyrights
        E.3. GNU Free Documentation License - GFDL
     ________________________________________________________________

Appendix A. Credits

   Thanks to:

   * The members of the Linux-IrDA mailing list. * The writers of the
   other HOWTOs which gave me many inspirations. * The developers of the
   SGML-Tools which provided some means to write a HOWTO. * Benny
   Amorsen * The Armadillo with the Mask * Mathieu Arnold * Fons Botman
   * Philip Blundell * Dag Brattli - Linux/IrDA core team * David Burley
   * Andreas Butz * Edgardo Calabrese > * Andrew Chadwick * Ho Chin
   Keong * Claudiu Costin * Stefan Dahlke * Thomas Davis - Linux/IrDA
   core team * Colin DeWitt * Richard Donkin * Ha Duong Minh * Ales
   Dryak * K-H. Eischer * Ove Ewerlid * Timo Felbinger * Tollef Fog Heen
   * Christian Gennerat * Gerhard Gonter * Mike Groeneweg * Bjoern
   Hansson * Sebastian Henschel * Takahide Higuchi - Linux/IrDA core
   team * Jon Howell * Gerd Knorr * Hannes Kurth * Arthur Tyde and Bryan
   Abshier from [http://www.linuxcare.com] Linuxcare Inc. * Joonas
   Lehtinen * Mark Lewis * Florian Lohoff * George MacDonald * Pawel
   Machek * James McKenzie * Alessio Massaro * Harald Milz * Bjoern Mork
   * Tang Ning * Rui Oliveira * Igor Pesando * Kurt Pfeifle * Raj
   Rijhwani * Christian Rishoej * Wessel de Roode * Matthias Schmidt *
   Markus Schill * Ryan Shillington * Stanislav Sokolov * Richard
   Titmuss * Jean Tourrilhes * Christian "oftl" Veigl * Carlos Vidal *
   Lichen Wang * Guenther Wieser * Toni van de Wiel * Ralf Zabka *
   Christian Zoz

   Sorry I didn't start to follow the credits when starting the HOWTO,
   so probably I forgot somebody.
     ________________________________________________________________

Appendix B. Revision History

     * v0.1 to v0.4a, 19 March 1998 to 4 August 1998, drafts, not
       included in the LDP
     * v1.0, 14 August 1998, release to the LDP
     * v1.1, 18 August 1998, added info about IrCOMM patch by Takahide
       Higuchi, minor changes
     * v1.2, 24 August 1998, updated to linux-irda-1998-08-20 snapshot,
       added FIR section and revision history, minor changes
     * v1.3, 27 September 1998, added sections about multiple instances,
       cellular phones, digital cameras,Linux to Linux connection, the
       cutting edge - CVS, power saving; some changes in general
       configuration section, changes in hardware survey section, minor
       changes
     * v1.4, 11 October 1998, better description of IrCOMM support,
       changes in dongle connection section, changes in Palm III
       section, minor changes
     * v1.5, 12 October 1998, minor changes
     * v1.6, 26 October 1998, section about IrManager added, updated to
       the linux-irda-1998-10-21 snapshot, changed dongle connection
       section, minor changes
     * v1.7, 1 November 1998, added remote control section, changed
       dongle connection section, minor changes
     * v2.0, 9 January 1999, nearly complete rewrite and rearrangement
       according to the new structure of Linux/IR which is included into
       the kernel since 2.1.131, added info about BIOS support into
       dongle connection section, configuration tool section and CVS
       section removed
     * v2.1, 13 January 1999, minor changes
     * v2.2, 26 January 1999, project name changed from Linux/IR to
       Linux/IrDA, extended the Troubleshooting chapter, changed the
       order of the Known Bugs chapter after the Troubleshooting
       chapter, removed some lint
     * v2.3, 4 February 1999, added chapter about Eye Safety written by
       Andreas Butz; spell checking, reworking of Kernel Parameters
       chapter and additional information by Andreas Butz; minor changes
     * v2.4, 9 February 1999, changed information about applying a patch
       file
     * v2.5, 12 March 1999; new URL for Linux/IrDA; added chapters about
       Big Endian support, irdaping, irdadump and Beyond IrDA -
       Extending Transmission Distance; chapter Obtaining Information
       about the Infrared Port in Laptops improved; added many
       information provided by Fons Botman to Windows chapter; added SMP
       chapter; information about Ericsson SH888 added; removed obsolete
       FAQs; minor changes
     * v2.6, 6 April 1999, added chapters Connection to Docking Station,
       Connection to Keyboard and Connection via Serial Cable, minor
       changes
     * v2.7, 11 June 1999 started chapter Upcoming Standards (Bluetooth
       and IrDA), added annotations about CORBA to GUI chapter, minor
       information about Nokia cellular phones added, added appendix
       Serial Infrared Port Sniffer, started IrDA Network Neighborhood
       section, started Connection to Psion 5 chapter and appendix C,
       minor additions to LIRC chapter, minor changes
     * v2.8, 20 September 1999, added LiRC mailing list, changed
       <htmlurl ... > tag to <url ...>, changed format of conf.modules
       entries, addition to hardware detection (PCMCIA), added IrDA
       mailing list, changed address of Linux-IrDA mailing list, minor
       additions to multiple instances section, added URL of French
       translation, added new sersniff to Appendix B, added section
       about precompiled packages, added Palm III Connection to Thinkpad
       600 chapter, minor changes
     * v2.9, 21 September 1999, changes in Printer Connection chapter,
       spellchecking, added connection to Siemens S25, minor changes
     * v2.10, 2 November 1999, minor changes
     * v2.11, 9 March 2000, added links to the 'irctl' and 'IRManager'
       infrared control programs, new base URL of the document, new
       chapter Connecting from Linux to WinCE courtesy from Arthur Tyde
       and Bryan Abshier of Linuxcare Inc., link to IrDA-Java interface
       added, link to HOWTO about Toshiba and IrDA added courtesy from
       Guenther Wieser, more information about a connection to S25
       courtesy by Timo Felbinger, links to AT commands for cellular
       phones added, new chapter Code History, link to SH888 phone book
       tool, a short survey of IrDA protocols courtesy from Lichen Wang,
       minor changes
     * v3.0, 5 November 2000, format changed to DocBook , license
       changed to GNU Free Documentation License - GFDL, title changed
       from IR-HOWTO to Infrared-HOWTO, new document URL, links to
       Linux/IrDA updated
     * v3.1, 8 November 2000, links updated, changed to DocBook 3.1
     * v3.2, 21 March 2001, obsolete references to irmanager,
       /dev/irnine and wrong device numbers removed, changes according
       to kernel 2.4.x applied, extensive proof-reading and testing, new
       links to e-Squirt added, new chapter about module options, new
       chapter about null modem connection, sections reordered and
       cleaned up, other links updated
     * v3.3, 22 April 2001, included docs from 2.4.3 kernel, removed
       references to obsolete stuff, minor changes
     * v3.4, 04 September 2002, improved the Linux PDA chapter with
       information about PPP, OpenOBEX, printing and more, worked the
       new syntax for -s option of irattach into the appropriate
       sections, reworked and improved the IrDA and USB chapter,
       reworked printing stuff, removed obsolete hints to irlpt_server
       and IrLPT, described how to use the Common Unix Printing System -
       CUPS, added the new irda-users mailing list address as well as of
       the new archive, added links to Gnome IrDA applet and Beamster
       GTK/Python into the new GUI section, added link to Japanese
       translation, added information about some LIRC programs (IR
       Chooser, IControl, jlirc), changed all references to URLs into
       hyperlinks, changed all @s in mail addresses to _at_ to help
       prevent spam (at least a little), URL corrections (LDP, ..),
       minor changes
     * v3.5a, 29 March 2003, added new dongles to /etc/modules.conf,
       added link to IrCOMM2k, added links to LIRC progs (lircemu,
       tonto), added some more infos about OBEX, removed a misleading
       reference to setserial, removed obsolete IrLAN stuff
       (irlan_client, irlan_server modules), added warning about IrLAN
       currently unmaintainded, corrected wrong issue date of v3.4,
       changed all URLs from mobilix.org to tuxmobil.org and other URL
       corrections, converted whole document to XML 4.1.2 (all tags are
       now lowercase, some closing tags added), rearranged the order of
       some chapters (SIR, FIR, dongles), chapter about cell phone
       connection rewritten (added link to scmxx, added generic
       instructions, thanks to Matthias Schmidt), added chapter about
       connections to PocketPC (thanks to Stanislav Sokolov), minor
       changes
     * v3.6, 15 June 2003, abstract mentions PDAs, minor changes
     * v3.7, 08 October 2005, A technical and a language review have
       been achieved by Sebastian Henschel. Numerous bugs have been
       fixed and many URLs have been updated. Some obsolete stuff has
       been removed. Some documentation about Linux/IrDA with kernel 2.6
       has been added (but there is still work to do).
     * v3.8, 31 October 2011, The link to lircemu has been changed,
       links and descriptions to smartmenu as well as to iowlircemu have
       been added.
     ________________________________________________________________

Appendix C. Serial Infrared Port Sniffers

C.1. Sniffer by Gerd Knorr

   This program by courtesy of Gerd Knorr. You may use it to sniff the
   traffic which is going trough your IrDA port for details of the
   protocol (change the default ttyS1 in the source if necessary):

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/ioctl.h>

#define BUFSIZE 1024

int
read_and_print(int fd, int sec, int usec)
{
    int         rc,l,i;
    char        buf[BUFSIZE+1];
    fd_set      set;
    struct timeval  tv;

    if (sec || usec) {
    FD_ZERO(&set);
    FD_SET(fd,&set);
    tv.tv_sec  = sec;

    tv.tv_usec = usec;
    if (0 == select(fd+1,&set,NULL,NULL,&tv))
        return -1;
    }

    switch (rc = read(fd,buf,BUFSIZE)) {
    case 0:
    printf("EOF");
    exit(0);
    break;
    case -1:
    perror("read");
    exit(1);
    default:
    for (l = 0; l < rc; l+= 16) {
        printf("%04x  ",l);
        for (i = l; i < l+16; i++) {
        if (i < rc)
            printf("%02x ",buf[i]);
        else
            printf("-- ");
        if ((i%4) == 3)
            printf(" ");
        }
        for (i = l; i < l+16; i++) {

        if (i < rc)
            printf("%c",isalnum(buf[i]) ? buf[i] : '.');
        }
        printf("\n");
    }
    break;
    }
    return rc;
}

void
setlines(int fd, int rts, int dtr)
{
    int lines = 0;

    if (rts) lines |= TIOCM_RTS;
    if (dtr) lines |= TIOCM_DTR;

    ioctl(fd,TIOCMSET,&lines);
}

int main(int argc, char *argv[])
{
    int         ser,i;
    struct termios      saved_attributes,tattr;
    struct winsize      win;
    char        buf[16];

    if (-1 == (ser = open("/dev/ttyS1",O_RDWR))) {

    perror("open /dev/ttyS1");
    exit(1);
    }

    /* Set the terminal mode */
    tcgetattr (ser, &tattr);
    cfmakeraw (&tattr);
    cfsetospeed (&tattr,B9600);
    cfsetispeed (&tattr,B9600);
    tcsetattr (ser, 0, &tattr);

    setlines(ser,0,0);
#if 0
    tcsendbreak(ser,0);
#endif

    /* main loop */
    fprintf(stderr,"setup done\n");
    while (-1 != read_and_print(ser,30,0)) {
    usleep(100000);
    }

    return 0;
}
     ________________________________________________________________

C.2. sersniff

   Written by Jonathan McDowell
   [http://www.earth.li/projectpurple/progs/sersniff.html] sersniff is a
   simple program to tunnel/sniff between 2 serial ports. The program
   was written to aid with the decoding of the protocol used by the
   Nokia 9000i Communicator to talk to the NServer software Nokia
   provides, which only runs under Windows.
     ________________________________________________________________

Appendix D. Infrared Light and Eye Safety

   This section summarizes some ideas and thoughts that were exchanged
   on the Linux/IrDA mailing list. It is not medically well-founded, and
   whoever has better evidence or some more well-founded source of
   information is encouraged to contribute it to this HOWTO.

   The IrDA spec says that the range of IrDA devices has been limited to
   1m for reasons of eye safety. Another plausible assumption is that
   power consumption and IR pollution/crosstalk were reasons for this
   limitation. In principle there could be danger for the eye, because
   infrared light is not registered by the eye, and thus the pupil won't
   close in order to protect the retina from bright IR light sources.
   This is the same situation as with UV light, which will cause snow
   blindness eventually, but in contrast to UV light, IR light contains
   much less harmful energy due to its longer wavelength.

   The only legal restrictions and medical advices we were able to find
   on the web were concerned with infrared emissions of heat lamps or in
   the welding process and IEC 825-1 (CENELEC EN60825-1). This suggests
   that IR light as emitted by IrDA devices will be harmless, since even
   the peak power emitted by strong IR LEDs (ca. 300mW) is several
   orders of magnitude below the power emitted by medical IR heat lamps
   (up to 500W). For these, however, you are supposed to wear protective
   goggles, so maybe if you are looking straight into 1.000 infrared
   LEDs flashing at once, you should do so, too. The effect of infrared
   light is mostly heat, though, and not an alteration or destruction of
   the biological cell structure, such as caused by UV light. Though in
   the specs for the HP OmniBook 800 Hewlett-Packard recommends not to
   look directly into the IR LED.

   As stated above, this discussion is only based on guesswork and
   common sense assumptions about the data found in IR LED and heat lamp
   specs. If anybody with a better medical knowledge can comment on
   this, please do so!
     ________________________________________________________________

Appendix E. Copyrights, Disclaimer, Trademarks

E.1. Disclaimer and Trademarks

   This is free documentation. It is distributed in the hope that it
   will be useful, but without any warranty. The information in this
   document is correct to the best of my knowledge, but there's a always
   a chance I've made some mistakes, so don't follow everything too
   blindly, especially if it seems wrong. Nothing here should have a
   detrimental effect on your computer, but just in case I take no
   responsibility for any damages incurred from the use of the
   information contained herein.

   Though I hope trademarks will be superfluous sometimes (you may see
   what I mean at [http://www.opensource.org/osd.html] Open Source
   Definition ), I declare: If certain words are trademarks, the context
   should make it clear to whom they belong. For example "MS Windows NT"
   implies that "Windows NT" belongs to Microsoft (MS). "Mac" is a
   trademark by Apple Computer. Many of the designations used by
   manufacturers and sellers to distinguish their products are claimed
   as trademarks. Where those designations appear in this book, and I
   was aware of a trademark claim, the designations have been printed in
   caps or initial caps. All trademarks belong to their respective
   owners.
     ________________________________________________________________

E.2. Copyrights

   For all chapters permission is granted to copy, distribute and/or
   modify this document under the terms of the GNU Free Documentation
   License, Version 1.1 or any later version published by the Free
   Software Foundation; with the Invariant Sections being "Preface" and
   "Credits", with the Front-Cover Texts being "Linux Infrared HOWTO",
   and with the Back-Cover Texts being the section "About the Document
   and the Author". A copy of the license is included in the section
   entitled "GNU Free Documentation License".
     ________________________________________________________________

E.3. GNU Free Documentation License - GFDL

   Version 1.1, March 2000

   Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place,
   Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy
   and distribute verbatim copies of this license document, but changing
   it is not allowed.
     ________________________________________________________________

E.3.1. 0. PREAMBLE

   The purpose of this License is to make a manual, textbook, or other
   written document "free" in the sense of freedom: to assure everyone
   the effective freedom to copy and redistribute it, with or without
   modifying it, either commercially or noncommercially. Secondarily,
   this License preserves for the author and publisher a way to get
   credit for their work, while not being considered responsible for
   modifications made by others.

   This License is a kind of "copyleft", which means that derivative
   works of the document must themselves be free in the same sense. It
   complements the GNU General Public License, which is a copyleft
   license designed for free software.

   We have designed this License in order to use it for manuals for free
   software, because free software needs free documentation: a free
   program should come with manuals providing the same freedoms that the
   software does. But this License is not limited to software manuals;
   it can be used for any textual work, regardless of subject matter or
   whether it is published as a printed book. We recommend this License
   principally for works whose purpose is instruction or reference.
     ________________________________________________________________

E.3.2. 1. APPLICABILITY AND DEFINITIONS

   This License applies to any manual or other work that contains a
   notice placed by the copyright holder saying it can be distributed
   under the terms of this License. The "Document", below, refers to any
   such manual or work. Any member of the public is a licensee, and is
   addressed as "you".

   A "Modified Version" of the Document means any work containing the
   Document or a portion of it, either copied verbatim, or with
   modifications and/or translated into another language.

   A "Secondary Section" is a named appendix or a front-matter section
   of the Document that deals exclusively with the relationship of the
   publishers or authors of the Document to the Document's overall
   subject (or to related matters) and contains nothing that could fall
   directly within that overall subject. (For example, if the Document
   is in part a textbook of mathematics, a Secondary Section may not
   explain any mathematics.) The relationship could be a matter of
   historical connection with the subject or with related matters, or of
   legal, commercial, philosophical, ethical or political position
   regarding them.

   The "Invariant Sections" are certain Secondary Sections whose titles
   are designated, as being those of Invariant Sections, in the notice
   that says that the Document is released under this License.

   The "Cover Texts" are certain short passages of text that are listed,
   as Front-Cover Texts or Back-Cover Texts, in the notice that says
   that the Document is released under this License.

   A "Transparent" copy of the Document means a machine-readable copy,
   represented in a format whose specification is available to the
   general public, whose contents can be viewed and edited directly and
   straightforwardly with generic text editors or (for images composed
   of pixels) generic paint programs or (for drawings) some widely
   available drawing editor, and that is suitable for input to text
   formatters or for automatic translation to a variety of formats
   suitable for input to text formatters. A copy made in an otherwise
   Transparent file format whose markup has been designed to thwart or
   discourage subsequent modification by readers is not Transparent. A
   copy that is not "Transparent" is called "Opaque".

   Examples of suitable formats for Transparent copies include plain
   ASCII without markup, Texinfo input format, LaTeX input format, SGML
   or XML using a publicly available DTD, and standard-conforming simple
   HTML designed for human modification. Opaque formats include
   PostScript, PDF, proprietary formats that can be read and edited only
   by proprietary word processors, SGML or XML for which the DTD and/or
   processing tools are not generally available, and the
   machine-generated HTML produced by some word processors for output
   purposes only.

   The "Title Page" means, for a printed book, the title page itself,
   plus such following pages as are needed to hold, legibly, the
   material this License requires to appear in the title page. For works
   in formats which do not have any title page as such, "Title Page"
   means the text near the most prominent appearance of the work's
   title, preceding the beginning of the body of the text.
     ________________________________________________________________

E.3.3. 2. VERBATIM COPYING

   You may copy and distribute the Document in any medium, either
   commercially or noncommercially, provided that this License, the
   copyright notices, and the license notice saying this License applies
   to the Document are reproduced in all copies, and that you add no
   other conditions whatsoever to those of this License. You may not use
   technical measures to obstruct or control the reading or further
   copying of the copies you make or distribute. However, you may accept
   compensation in exchange for copies. If you distribute a large enough
   number of copies you must also follow the conditions in section 3.

   You may also lend copies, under the same conditions stated above, and
   you may publicly display copies.
     ________________________________________________________________

E.3.4. 3. COPYING IN QUANTITY

   If you publish printed copies of the Document numbering more than
   100, and the Document's license notice requires Cover Texts, you must
   enclose the copies in covers that carry, clearly and legibly, all
   these Cover Texts: Front-Cover Texts on the front cover, and
   Back-Cover Texts on the back cover. Both covers must also clearly and
   legibly identify you as the publisher of these copies. The front
   cover must present the full title with all words of the title equally
   prominent and visible. You may add other material on the covers in
   addition. Copying with changes limited to the covers, as long as they
   preserve the title of the Document and satisfy these conditions, can
   be treated as verbatim copying in other respects.

   If the required texts for either cover are too voluminous to fit
   legibly, you should put the first ones listed (as many as fit
   reasonably) on the actual cover, and continue the rest onto adjacent
   pages.

   If you publish or distribute Opaque copies of the Document numbering
   more than 100, you must either include a machine-readable Transparent
   copy along with each Opaque copy, or state in or with each Opaque
   copy a publicly-accessible computer-network location containing a
   complete Transparent copy of the Document, free of added material,
   which the general network-using public has access to download
   anonymously at no charge using public-standard network protocols. If
   you use the latter option, you must take reasonably prudent steps,
   when you begin distribution of Opaque copies in quantity, to ensure
   that this Transparent copy will remain thus accessible at the stated
   location until at least one year after the last time you distribute
   an Opaque copy (directly or through your agents or retailers) of that
   edition to the public.

   It is requested, but not required, that you contact the authors of
   the Document well before redistributing any large number of copies,
   to give them a chance to provide you with an updated version of the
   Document.
     ________________________________________________________________

E.3.5. 4. MODIFICATIONS

   You may copy and distribute a Modified Version of the Document under
   the conditions of sections 2 and 3 above, provided that you release
   the Modified Version under precisely this License, with the Modified
   Version filling the role of the Document, thus licensing distribution
   and modification of the Modified Version to whoever possesses a copy
   of it. In addition, you must do these things in the Modified Version:

   A. Use in the Title Page (and on the covers, if any) a title distinct
   from that of the Document, and from those of previous versions (which
   should, if there were any, be listed in the History section of the
   Document). You may use the same title as a previous version if the
   original publisher of that version gives permission.

   B. List on the Title Page, as authors, one or more persons or
   entities responsible for authorship of the modifications in the
   Modified Version, together with at least five of the principal
   authors of the Document (all of its principal authors, if it has less
   than five).

   C. State on the Title page the name of the publisher of the Modified
   Version, as the publisher.

   D. Preserve all the copyright notices of the Document.

   E. Add an appropriate copyright notice for your modifications
   adjacent to the other copyright notices.

   F. Include, immediately after the copyright notices, a license notice
   giving the public permission to use the Modified Version under the
   terms of this License, in the form shown in the Addendum below.

   G. Preserve in that license notice the full lists of Invariant
   Sections and required Cover Texts given in the Document's license
   notice.

   H. Include an unaltered copy of this License.

   I. Preserve the section entitled "History", and its title, and add to
   it an item stating at least the title, year, new authors, and
   publisher of the Modified Version as given on the Title Page. If
   there is no section entitled "History" in the Document, create one
   stating the title, year, authors, and publisher of the Document as
   given on its Title Page, then add an item describing the Modified
   Version as stated in the previous sentence.

   J. Preserve the network location, if any, given in the Document for
   public access to a Transparent copy of the Document, and likewise the
   network locations given in the Document for previous versions it was
   based on. These may be placed in the "History" section. You may omit
   a network location for a work that was published at least four years
   before the Document itself, or if the original publisher of the
   version it refers to gives permission.

   K. In any section entitled "Acknowledgements" or "Dedications",
   preserve the section's title, and preserve in the section all the
   substance and tone of each of the contributor acknowledgements and/or
   dedications given therein.

   L. Preserve all the Invariant Sections of the Document, unaltered in
   their text and in their titles. Section numbers or the equivalent are
   not considered part of the section titles.

   M. Delete any section entitled "Endorsements". Such a section may not
   be included in the Modified Version.

   N. Do not retitle any existing section as "Endorsements" or to
   conflict in title with any Invariant Section.

   If the Modified Version includes new front-matter sections or
   appendices that qualify as Secondary Sections and contain no material
   copied from the Document, you may at your option designate some or
   all of these sections as invariant. To do this, add their titles to
   the list of Invariant Sections in the Modified Version's license
   notice. These titles must be distinct from any other section titles.

   You may add a section entitled "Endorsements", provided it contains
   nothing but endorsements of your Modified Version by various
   parties--for example, statements of peer review or that the text has
   been approved by an organization as the authoritative definition of a
   standard.

   You may add a passage of up to five words as a Front-Cover Text, and
   a passage of up to 25 words as a Back-Cover Text, to the end of the
   list of Cover Texts in the Modified Version. Only one passage of
   Front-Cover Text and one of Back-Cover Text may be added by (or
   through arrangements made by) any one entity. If the Document already
   includes a cover text for the same cover, previously added by you or
   by arrangement made by the same entity you are acting on behalf of,
   you may not add another; but you may replace the old one, on explicit
   permission from the previous publisher that added the old one.

   The author(s) and publisher(s) of the Document do not by this License
   give permission to use their names for publicity for or to assert or
   imply endorsement of any Modified Version.
     ________________________________________________________________

E.3.6. 5. COMBINING DOCUMENTS

   You may combine the Document with other documents released under this
   License, under the terms defined in section 4 above for modified
   versions, provided that you include in the combination all of the
   Invariant Sections of all of the original documents, unmodified, and
   list them all as Invariant Sections of your combined work in its
   license notice.

   The combined work need only contain one copy of this License, and
   multiple identical Invariant Sections may be replaced with a single
   copy. If there are multiple Invariant Sections with the same name but
   different contents, make the title of each such section unique by
   adding at the end of it, in parentheses, the name of the original
   author or publisher of that section if known, or else a unique
   number. Make the same adjustment to the section titles in the list of
   Invariant Sections in the license notice of the combined work.

   In the combination, you must combine any sections entitled "History"
   in the various original documents, forming one section entitled
   "History"; likewise combine any sections entitled "Acknowledgements",
   and any sections entitled "Dedications". You must delete all sections
   entitled "Endorsements."
     ________________________________________________________________

E.3.7. 6. COLLECTIONS OF DOCUMENTS

   You may make a collection consisting of the Document and other
   documents released under this License, and replace the individual
   copies of this License in the various documents with a single copy
   that is included in the collection, provided that you follow the
   rules of this License for verbatim copying of each of the documents
   in all other respects.

   You may extract a single document from such a collection, and
   distribute it individually under this License, provided you insert a
   copy of this License into the extracted document, and follow this
   License in all other respects regarding verbatim copying of that
   document.
     ________________________________________________________________

E.3.8. 7. AGGREGATION WITH INDEPENDENT WORKS

   A compilation of the Document or its derivatives with other separate
   and independent documents or works, in or on a volume of a storage or
   distribution medium, does not as a whole count as a Modified Version
   of the Document, provided no compilation copyright is claimed for the
   compilation. Such a compilation is called an "aggregate", and this
   License does not apply to the other self-contained works thus
   compiled with the Document, on account of their being thus compiled,
   if they are not themselves derivative works of the Document.

   If the Cover Text requirement of section 3 is applicable to these
   copies of the Document, then if the Document is less than one quarter
   of the entire aggregate, the Document's Cover Texts may be placed on
   covers that surround only the Document within the aggregate.
   Otherwise they must appear on covers around the whole aggregate.
     ________________________________________________________________

E.3.9. 8. TRANSLATION

   Translation is considered a kind of modification, so you may
   distribute translations of the Document under the terms of section 4.
   Replacing Invariant Sections with translations requires special
   permission from their copyright holders, but you may include
   translations of some or all Invariant Sections in addition to the
   original versions of these Invariant Sections. You may include a
   translation of this License provided that you also include the
   original English version of this License. In case of a disagreement
   between the translation and the original English version of this
   License, the original English version will prevail.
     ________________________________________________________________

E.3.10. 9. TERMINATION

   You may not copy, modify, sublicense, or distribute the Document
   except as expressly provided for under this License. Any other
   attempt to copy, modify, sublicense or distribute the Document is
   void, and will automatically terminate your rights under this
   License. However, parties who have received copies, or rights, from
   you under this License will not have their licenses terminated so
   long as such parties remain in full compliance.
     ________________________________________________________________

E.3.11. 10. FUTURE REVISIONS OF THIS LICENSE

   The Free Software Foundation may publish new, revised versions of the
   GNU Free Documentation License from time to time. Such new versions
   will be similar in spirit to the present version, but may differ in
   detail to address new problems or concerns. See
   [http://www.gnu.org/copyleft/] copyleft .

   Each version of the License is given a distinguishing version number.
   If the Document specifies that a particular numbered version of this
   License "or any later version" applies to it, you have the option of
   following the terms and conditions either of that specified version
   or of any later version that has been published (not as a draft) by
   the Free Software Foundation. If the Document does not specify a
   version number of this License, you may choose any version ever
   published (not as a draft) by the Free Software Foundation.
