今はスマホとかbluetoothとかNFCとかの普及ですっかり影の薄くなった赤外線通信ですがガラケーには欠かせない機能の一つですよね・・・
Bluetoothが使えなくても赤外線さえあればスマホでない携帯電話とファイルのやり取りができます。
ケータイで写した写真をBluetoothでパソコンに移そうと苦戦して諦めたので赤外線で移すことにしました。
パソコンに内蔵の赤外線ポートを使います。(古いノートPCなら結構標準装備されてますよね・・・)
まずはIrDA関係を使えるようにします。
aurからirda-utilsをインストール
$ yaourt -S irda-utils
irdaスタート
$ sudo systemctl start irda
こちらの環境ではエラーが出ましたが気にせず進めます。
ir関係のモジュールを読み込み
$ sudo modprobe irda irtty ircomm ircomm-tty
赤外線ポートを設定
irattachコマンドに赤外線ポートのデバイスを指定します。(うちの環境では/dev/ttyS3でした)
$ sudo irattach /dev/ttyS3
通信できてるか確認
$ sudo irdadump
携帯を写真送信する状態にするなどしてPCの赤外線ポートに向けてみてirdadumpに反応があれば成功です。無反応であれば違うデバイス(他の/dev/ttySxやUSBでつないでるのなら/dev/ttyUSBnなど)でirattachをやり直してirdadumpが反応するか確認を繰り返してみてください。
次はファイルの送受信に使うircp-trayをインストールします。
irda-utilsに含まれているircpでファイル送受信できるらしいですができずircp-trayを使えばOKです。
aurにircp-trayありますがコンパイルが通りませんでした。
ソースを簡単に修正する必要がありましたのでソースからインストールします。
gtk2,intltool,irda-utils,libnotify,openobexが必要です。irda-utilsはさっきインストールしたので他をインストール
$ sudo pacman -S gtk2 intltool libnotify openobex
https://launchpad.net/ircp-tray
ここからソースコードを落としてきます。(バージョンは0.7.6でした)
そして展開
$ tar zxvf ircp-tray-0.7.6.tar.gz
$ cd ircp-tray-0.7.6
ソースコードの変更をパッチ形式にしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
--- ./src/ircp_server.c 2011-05-31 01:00:38.000000000 +0900 +++ ircp_server.c 2015-01-05 19:31:09.193008180 +0900 @@ -33,6 +33,27 @@ #define TRUE 1 #define FALSE 0 +/* added */ +static int UnicodeToChar(uint8_t *c, const uint8_t *uc, int size) +{ + int n; + + if (uc == NULL || c == NULL) + return -1; + + /* Make sure buffer is big enough! */ + for (n = 0; uc[n*2+1] != 0; n++); + + if (n >= size) + return -1; + + for (n = 0; uc[n*2+1] != 0; n++) + c[n] = uc[n*2+1]; + c[n] = 0; + + return 0; +} +/* /added */ static void get_incoming_file_info(obex_t* handle, obex_object_t* object, ircp_server_t* srv); // @@ -201,7 +222,7 @@ switch(hi) { case OBEX_HDR_NAME: if( (name = malloc(hlen / 2))) { - OBEX_UnicodeToChar(name, hv.bs, hlen); + UnicodeToChar(name, hv.bs, hlen); } break; default: @@ -270,7 +291,7 @@ case OBEX_HDR_NAME: DEBUG(0, "hlen = %d\n", hlen); if( (name = malloc(hlen / 2))) { - OBEX_UnicodeToChar(name, hv.bs, hlen); + UnicodeToChar(name, hv.bs, hlen); } break; case OBEX_HDR_LENGTH: --- ./src/ircptray_main.c 2011-05-31 01:00:38.000000000 +0900 +++ ircptray_main.c 2015-01-05 19:14:43.034424172 +0900 @@ -248,14 +248,13 @@ notification = notify_notification_new (g_get_application_name(), notify_msg, - icon, - NULL); + icon); if (notification == NULL) { g_warning("failed to setup notification"); return; } - notify_notification_attach_to_status_icon (notification, AppTrayIcon); + /*notify_notification_attach_to_status_icon (notification, AppTrayIcon);*/ if (!notify_notification_show (notification, NULL)) g_warning("failed to send notification"); @@ -277,11 +276,10 @@ notification = notify_notification_new (g_get_application_name(), notify_msg, - icon, - NULL); + icon); if (notification != NULL) { - notify_notification_attach_to_status_icon (notification, AppTrayIcon); + /* notify_notification_attach_to_status_icon (notification, AppTrayIcon);*/ if (!notify_notification_show (notification, NULL)) g_warning("failed to send notification\n"); --- ./src/recvfile.c 2011-05-31 01:00:38.000000000 +0900 +++ recvfile.c 2015-01-05 19:15:26.951770009 +0900 @@ -255,8 +255,7 @@ n = notify_notification_new (title, msg, - MAIN_ICON, - GTK_WIDGET(AppTrayIcon)); + MAIN_ICON); if (n != NULL) { notify_notification_set_urgency(n, NOTIFY_URGENCY_NORMAL); |
これを適当な名前で保存して適用します。/path/to/patchfileに保存したとすると
ircp-tray-0.7.6 $ patch -p0 < /path/to/patchfile
あとはいつも通り
$ ./configure
$ make
$ sudo make install
早速ファイルを受信してみましょう
$ ircp-tray
で立ち上がります。
携帯電話を送信状態にして赤外線ポートに近づけると保存先を指定するダイアログが出てくるので指定したら受信されます。
保存先フォルダをnoneのままにするとセグフォしますので注意。
無事受信開始されると受信状況のプログレスバーが出てきて受信したファイルが保存されます。
送信はステータスバーのアイコンをクリックするとできるようです。
さすが赤外線通信・・・今の技術に慣れてると遅い・・・でもうまくいってよかった!