{{::home_peri03.gif?300|}} ====== Dialup over IrDA (Internet Sharing) ====== ===== Intro ===== This tutorial will describe how to **share internet** or **network** over **[[IrDA]]** using [[Linux]] and [[Laptop]] or some small device like Raspberry PI. You will be able to connect your old [[Handheld PC|PDA]]'s or other devices to internet or just browse local network with this method. Technically it will use [[ppp]] (dialup) connection over [[IrCOMM]] protocol using **IrDA SIR** (9.6–115.2 kbit/s) modulation scheme. This method is also can be used to connect two Laptops or [[Handheld PC|PDA]]'s, but //one of them must be running [[Linux]]//. //In this tutorial the main machine (server) [[Laptop]] or [[Raspberry PI]] we will call **Host** and the [[Handheld PC|PDA]] who connects to this **Host** we will call **Guest**.// For **Guest** i have the honor to use [[HP Jornada 720]] to test the connectivity on the [[windows:Windows CE]] 3.0 OS Environment. ===== Requirements ===== * **Debian Stretch** [[http://archive.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/mini.iso|Installation media]] (when installing choose to **"manually enter repository"** and specify **"archive.debian.org"** because it's not supported anymore). The tutorial with more recent Linux distribution will come later.. * **[[Laptop]]** at least **200 Mhz** Pentium with **128 MB** of RAM Or [[RaspberryPI]], another flavours can be used also like, **OrangePI**, **BananaPI** and ApplePI (j/k). * USB **IrDA Adapter** (Check compatible adapters list in this tutorial) * A little patience ==== Compatible irDA Adapters ==== **DISCLAIMER!** Most **IrDA adapters** that are **integrated** in 2000's era laptop computers should be compatible. For most **USB/Serial** adapters you should look ebay for //ACTiSYS [[https://www.actisys.com/IrDAProd.html|IrDA adapter]]//. ^ ID ^ Name ^ Status ^ Price/Url/Buy ^ Chip ^ Interface ^ Speeds ^ Hardware IDs ^ IrComm Compat ^ Notes ^ | 1 | Laptop [[MaxData Pro 650T]] | **TESTED->WORKING** | ? | ? | Internal | 9600-115200 | | Yes | Used as default device in this tutorial | | 3 | Gembird UIR-33 | TESTED->NOT WORKING | [[https://gembird.com/item.aspx?id=4262|product page]] 9.96 € | Moschip 7784 | USB | ? | [9710:7703] | ? |It needs new driver for 5.x kernel. Old driver only available [[https://web.archive.org/web/20061108183707/http://www.moschip.com/data/products/MCS7784/Linux_7784.tar.gz|for 2.4 kernel]]. I've [[https://github.com/e1z0/irda/commit/a4be25d362a1fe50e42f111643aa00467e5c54c0|started to port]] old driver to the 5.x kernel, but another device arrived at the time, so i will use the new one insead. | | 3 | [[irda_internet_sharing_MA-620|MA-620 Infrared Adapter]] | TESTED->**WORKING*** | [[https://www.ebay.com/itm/385652134546|buy]] 6 € | MA620 | USB | 9600 | 0df7:0620 | Yes | I have bought it, and it's **working fine** but only in **9600** baud rate. For technical perspective it uses Prolific (PL2303) USB serial converter. //irattach /dev/ttyUSB0 -d ma600 -s// does the job. | | 4 | irDA piHAT | TESTED->NOT WORKING | [[https://irdroid.eu/product/irda-pihat/|buy]] 33 € [[https://irdroid.com/irdroid-rpi-infrared-transceiver/|buy]] 19.90 € | mcp2120 | Serial PI GPIO | | | No | All devices from seller uses same mcp2120 chips, default 9600 baud, which cannot be changed and does not even support IrComm Protocol. | | 5 | Actisys ACT-IR100UD | UNTESTED->ARRIVING | [[https://www.ebay.com/itm/255413964717|buy]] 10.95 € | | USB | ? | ? | ?| | 6 | [[irda_internet_sharing_Tekram IRmate IR-210B|Tekram IRmate IR-210B]] | TESTED->WORKING | 9 € | | RS232/COM | 9600 | ? | ?| | * The device works with some exceptions like speeds limited to specific baud rate or some serial converter issues happening. ===== Prepare Linux Machine (Host) ===== You should already have **GNU/Linux Debian Stretch** installed and running. This tutorial does not cover any newer Debian distributions or any other Linux Distributions that are not Debian brand. For Other distributions or newer Debian Linux distributions please read next section. **Lets begin!** I have tested this configuration on [[MaxData Pro 650T]] [[Laptop]] which already have [[IrDA]] integrated. Before that i have already tried same with [[Compaq Armada M700]] but have failed due to **smsc-ircc2** kernel module, which was able to talk only in one way and not bidirectional. I was very lucky because [[MaxData Pro 650T]] have Bios options to configure [[IrDA]] and able to assign port to it, so i set it to com2 port, i have also presented with other parameters for IrDA port: COM2 Address: 2F8 IRQ 3 I already know the IRQ address, lets run **"dmesg"** in Linux and get some information: # dmesg|grep serial [ 3.231566] serial8250: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A Ah, so in Linux system its actually mapped as /dev/ttyS1 (first port, look at the irq number), ok i've got it. Enable ip **packet forwarding** on [[Linux]] machine by editing **/etc/sysctl.conf** and adding the line: # nano /etc/sysctl.conf net.ipv4.ip_forward=1 Save file (CTRL+X, Y, enter). Now we have to install some user-space software for controlling our [[IrDA]] device: # apt-get install irda-utils ppp # systemctl enable irda-utils # nano/etc/default/irda-utils Change **ENABLE="false"** to **ENABLE="true"** and save this file (CTRL+X, Y, enter). Reboot the machine: # reboot After reboot we can test the IrDA connectivity between devices. On [[Linux]] **Host** machine run command: irdadump Prepare your [[Handheld PC|PDA]] **Guest** device (mine was [[HP Jornada 720]]) and make sure the IrDA adapters are pointed to each other, then run **Start > Settings > Control Panel > Communications > PC Connection > Change** then select **Infrared port** and **close these two dialogs** with **"OK"** on the window title. {{::jornada_net_img_9084.jpeg?400|}} Then go to **Start > Programs > Communication** click on **PC Link**, look at your **Linux terminal**, you should see something like this: 19:35:33.076789 xid:cmd ffffffff < 000010d9 S=6 s=* Handheld_PC hint=8224 [ PDA/Palmtop IrCOMM IrOBEX ] (28) 19:35:33.604281 snrm:cmd ca=fe pf=1 a0d8b52e < 000010d9 new-ca=56 LAP QoS: Baud Rate=115200bps Max Turn Time=500ms Data Size=2048B Window Size=4 Add BOFS=0 Min Turn Time=500us Link Disc=12s (32) 19:35:33.607548 ua:rsp ca=56 pf=1 a0d8b52e > 000010d9 LAP QoS: Baud Rate=115200bps Max Turn Time=500ms Data Size=2048B Window Size=7 Add BOFS=0 Min Turn Time=5000us Link Disc=12s (31) 19:35:33.741380 rr:cmd < ca=56 pf=1 nr=0 (2) 19:35:33.743527 rr:rsp > ca=56 pf=1 nr=0 (2) 19:35:33.753108 i:cmd < ca=56 pf=1 nr=0 ns=0 LM slsap=03 dlsap=00 CONN_CMD (6) 19:35:33.755555 i:rsp > ca=56 pf=1 nr=1 ns=0 LM slsap=00 dlsap=03 CONN_RSP (6) 19:35:33.768281 i:cmd < ca=56 pf=1 nr=1 ns=1 LM slsap=03 dlsap=00 GET_VALUE_BY_CLASS: "IrDA:IrCOMM" "IrDA:TinyTP:LsapSel" (37) 19:35:33.771536 i:rsp > ca=56 pf=1 nr=2 ns=1 LM slsap=00 dlsap=03 GET_VALUE_BY_CLASS: No such class (11) 19:35:33.782052 i:cmd < ca=56 pf=1 nr=2 ns=2 LM slsap=03 dlsap=00 DISC (6) 19:35:33.783546 rr:rsp > ca=56 pf=1 nr=3 (2) The first line also shows us the **Handheld_PC** as device name, so we are now have **Proof Of Concept** that the [[IrDA]] **hardware link is ok**. Now we will try to mess up with some software tricks to make the **dialup server**, so [[windows:Windows CE]] handheld **Guest** can connect to the internet via our main machine! Open File: nano /etc/ppp/connect.sh Paste these contents: #!/bin/bash read -n 5 i echo "CLIENTSERVER" iptables -t nat -A POSTROUTING -o enp0s11 -j MASQUERADE Save the file (CTRL+X, Y, enter). Open another file: nano /etc/ppp/disconnect.sh Paste this: #!/bin/bash iptables -t nat -D POSTROUTING -o enp0s11 -j MASQUERADE Save the file (CTRL+X, Y, enter). Yet, another file: nano /etc/ppp/peers/irda Paste again: connect /etc/ppp/connect.sh disconnect /etc/ppp/disconnect.sh noauth debug kdebug 255 nodetach nocrtscts 115200 persist passive local /dev/ircomm0 192.168.55.100:192.168.55.101 netmask 255.255.255.0 ms-dns 1.1.1.1 Save the file (CTRL+X, Y, enter). At last, we can run final commands to start the pppd server: chmod +x /etc/ppp/connect.sh /etc/ppp/disconnect.sh modprobe ircomm-tty pppd call irda debug dump logfd 2 Now look at the **Guest** section(s) on how to configure** client computer/pda** to connect to this **Host**. ==== For newer Linux'es ==== It's possible that this tutorial will be compatible with some newer distributions that uses old kernel version 4.16 or lower and who still maintains and have **irda-utils** package and all required IrDA kernel modules: * irda * irtty_sir * sir_dev * ircomm_tty * ircomm * crc_ccitt If there are no kernel modules that does not mean that they are not included in the kernel source, so simple kernel recompile with redefined config will enable you to have these required modules. **PLEASE NOTE** Linux kernel from version **4.17** completely removed **IrDA support** from their source code tree in 2008. There are github repository called [[https://github.com/cschramm/irda|Out-of-tree irda subsystem and drivers for Linux]] which tries to support newer kernel. I have tested with Linux kernel 5.15.25 on OrangePI Lite using Armbian 22.02.1 [[https://stpete-mirror.armbian.com/archive/orangepilite/archive/Armbian_22.02.1_Orangepilite_focal_current_5.15.25.img.xz|Focal image]]. It works without any problems. Here is the basic setup: apt-get install build-essential git linux-headers-current-sunxi git clone https://github.com/cschramm/irda.git cd irda make -C src ln -sf /usr/src/irda/src/net/irnet /lib/modules/$(uname -r)/kernel/net/ ln -sf /usr/src/irda/src/net/irlan /lib/modules/$(uname -r)/kernel/net/ ln -sf /usr/src/irda/src/net/ircomm /lib/modules/$(uname -r)/kernel/net/ ln -sf /usr/src/irda/src/net/*.ko /lib/modules/$(uname -r)/kernel/net/ mkdir /lib/modules/$(uname -r)/kernel/drivers/net/irda ln -sf /usr/src/irda/src/drivers/*.ko /lib/modules/$(uname -r)/kernel/drivers/net/irda/ depmod -a Now you can load any necessary IrDA adapter **kernel module** or general support IrDA modules such as **ircomm** or **ircomm-tty**. ===== Windows CE 3.0 (Guest) ===== As i mentioned before we will be using [[HP Jornada 720]] as the **Guest** [[Handheld PC|PDA]] to connect to the Host machine via [[IrDA]]. So in the [[Handheld PC|PDA]] navigate: **Start > Programs > Communication > Remote Networking**. The new Window will appear with **"Make New Connection"** icon, click on it. Type the **Connection Name** and select connection type: **Direct Connection**. Click **Next**, Select the device that you want to use: **Infrared Port**. The rest of the information can be seen in the pictures. {{::jornada_720_net_img_9100.jpeg?400|}}{{::jornada_irda_net_img_9087.jpeg?400|}}{{::jornada_irda_net_img_9088.jpeg?400|}} {{::jornada_irda_net_img_9089.jpeg?400|}}{{::jornada_irda_net_img_9090.jpeg?400|}} After you finish setting a connection click **Finish**. Now **double click** on it to connect. For testing you can use [[https://www.codeguru.com/windows/ping-utility-for-windows-ce/|this tool]] to ping other devices on the network or internet. {{::jornada_irda_net_img_9091.jpeg?400|}} ===== Windows CE 2.11 (Guest) ===== Additionally I have tested this setup with NTT DoCoMo [[Sigmarion 1]] which is running [[windows:Windows CE]] 2.11. You have to install [[https://www.hpcfactor.com/downloads/475/HPCFactor_Generic_IrDA_Modem_Driver/version_1.0.0.04|HPC:Factor Generic IrDA Modem Driver]] (GenIrDA-c3.CAB). Here are the pictures with the configuration. {{::1_sigmarion_irda_ppp_img_9102.jpeg?400|}}{{::2_sigmarion_irda_ppp_img_9103.jpeg?400|}}{{::3_sigmarion_irda_ppp_img_9105.jpeg?400|}}{{::4_sigmarion_irda_ppp_img_9104.jpeg?400|}}{{::5_sigmarion_irda_ppp_img_9106.jpeg?400|}}{{::6_sigmarion_irda_ppp_img_9107.jpeg?400|}} ====== Ready to use IrDA Box ====== {{::irdabox-firstprototype_final_case_view2.jpeg?400|}} I have started working on some kind of open device, that acts like **Wifi->IrDA** bridge, which has a nice Web Management based UI. It's based on the same **OrangePI Lite Board** with some integrated batteries to make device more portable. I'm now testing few hardware prototypes and developing software at [[https://github.com/e1z0/irda-box|github]]. So everyone who is interested can build the device himself. All required tools and components are mentioned in the README. So if you are interested please look at it. {{keywords>internet,IrDA,ppp,dialup,linux,wince,windows ce}}