Delock USB Infrarot Adapter

携帯とのデータのやりとりの為に、AmazonでUSBのIrDAのモジュール(SD-IRU1S) を1780円で購入してみた。

モジュールの開発元のページ (既に製造中止の模様。。。)
チップメーカーのMosChipのページ (チップはMCS7780の模様)。。。 だったが現在はASIX Electronicsが供給元に なっている。
Full Speed device @ 3 (0x1D140000): ....  Vendor-specific device from unknown vendor
  Device Descriptor  
    Descriptor Version Number:  0x0110
    Device Class:  255  (Vendor-specific)
    Device Subclass:  1  (Vendor-specific)
    Device Protocol:  0
    Device MaxPacketSize:  8
    Device VendorID/ProductID:  0x1685/0x0200  (unknown vendor)
    Device Version Number:  0x0008
    Number of Configurations:  1
    Manufacturer String:  0 (none)
    Product String:  0 (none)
    Serial Number String:  0 (none)
  Configuration Descriptor  
    Length (and contents):  39
      Raw Descriptor (hex)  0000: 09 02 27 00 01 01 00 80 DC 09 04 00 00 03 00 00 
      Raw Descriptor (hex)  0010: 00 00 07 05 81 03 0A 00 01 07 05 02 02 40 00 00 
      Raw Descriptor (hex)  0020: 07 05 83 02 40 00 00 
    Number of Interfaces:  1
    Configuration Value:  1
    Attributes:  0x80 (bus-powered)
    MaxPower:  440 ma
    Interface #0 - Unknown  
      Alternate Setting  0
      Number of Endpoints  3
      Interface Class:  0  (Unknown)
      Interface Subclass;  0
      Interface Protocol:  0
      Endpoint 0x81 - Interrupt Input  
        Address:  0x81 (IN)
        Attributes:  0x03 (Interrupt no synchronization data endpoint)
        Max Packet Size:  10
        Polling Interval:  1 ms
      Endpoint 0x02 - Bulk Output  
        Address:  0x02 (OUT)
        Attributes:  0x02 (Bulk no synchronization data endpoint)
        Max Packet Size:  64
        Polling Interval:  0 ms
      Endpoint 0x83 - Bulk Input  
        Address:  0x83 (IN)
        Attributes:  0x02 (Bulk no synchronization data endpoint)
        Max Packet Size:  64
        Polling Interval:  0 ms

Endpointの構成がF5U103と同じなので、ほとんどコードをいじらずにいけそう。

USBRequest()の中身をコメントアウトして、idProduct,idVendorを変更して ビルドしてみた。

http://blaulogic.comというなくなったサイトにあったPico-IrDAという オープンソースをインターネットアーカイブからダウンロードしてちょっとい じったところ、BAUMからアドレスデータが受信できたので、ちゃんと動いてい るっぽい。今のところ送信は出来ていないがIrLAPの問題のようだ。

Pico-IrDAのいじったところはselect回り。

OpenOBEXというオープンソースもあるのだがこれはIrLAP層などがドライバー に含まれている事を前提にしたコードで、これ自体にIrLAPの実装がないので そのままでは使えないので断念した。Pico-IrDAの存在はpspirdaというアプリ から知った。

Pico-IrDAからBAUMへの転送が出来るようになった。問題はIrOBEXのフレーム をPico-IrDAから送った後にLAP,LMP,TTPだけの9バイトのフレームがBAUMから 返ってきてエラーになっていた。とりあえず再送すると2回目の送信ではIrOBEX のフレームが返ってくるようなので、ループを入れてみた。下がOpen時に再送 しているパターン。

Send    : c0 03 76 02 01 01 80 00 07 10 00 00 78 2e 52 c1
Receive : c0 02 96 01 02 01 47 0f c1
Send    : c0 03 98 02 01 01 80 00 07 10 00 00 78 67 a6 c1
Receive : c0 02 b8 01 02 00 a0 00 07 10 00 07 fd 47 0f c1

送受信できるようになったのだが今度は時々ドライバーが固まる。アプリケー ション側のデバッグライトを外すと固まる頻度があがる。アプリケーションも 一緒に固まるのだが、gdbでみるとreadで止まっている。

書き込みの処理は以下のような流れ。StartTransmissionでエンドポイントの パイプにWriteしています。

enqueueData -> SetUpTransmit -> StartTransmission

ソースをubsa-osxの svn にアップしてみた。レジスタの読み込みを試したのだが DeviceRequestがe000404fでエラーになるので、とりあえずあきらめた。 全くコントロールが効かないが初期状態の9600で通信できている。また気が向 いたらデバッグしてみたい。(2010/02/12)

DeviceRequestのパラメータはMCS7780の新しいデータシート(Rev. 1.2)にはな いのだが古い(Rev. 1.0)には記載があったのでそれを使った。IOUSBと相性が悪 いのか、パラメータ自体が間違えているのかのどちらかだと思われる。

MCS7780にはインタラプトのエンドポイントが存在するが使われていないような 感じだ。おそらく他のUART系USBのチップと同じコアを使った為に残っている のはないかと想像される。

元のBelkinF5U103Driverのコードから制御線関係のコードを外してクリーンア ップしてある。

大きなデータを送るとまだ落ちる。。。

Pico-IrDAを使ってMac OS Xのアドレスブックのプラグインを作ってみた。 電話番号をクリックしてデータを送れるようになっている。ソースはubsa-osxの svn に入れてある。

RIMG0018 RIMG0019

BAUMの赤外線通信のvCardは以下のような内容。
BEGIN:VCARD
VERSION:2.1
N;CHARSET=SHIFT_JIS:テスト;;;;
SOUND;X-IRMC-N;CHARSET=SHIFT_JIS:テスト;;;;
TEL;PREF;HOME:0312345678
X-070;BUNKEI:0
EMAIL;PREF;HOME:abc@pdx.ne.jp
X-CLASS:PUBLIC
BDAY:20000101
X-HOBBY;CHARSET=SHIFT_JIS:読書
X-CONSTELLATION:CAPRICORN
NOTE;CHARSET=SHIFT_JIS;ENCODING=QUOTED-PRINTABLE:=82=D9=82=B0
REV:20100207T013200Z
X-REDUCTION:5
X-GNO:0
END:VCARD
調子に乗ってもう一つドングルを買ってみたのだが、こちらは10.5.8のIOUSB (IOUSBFamily 3.5.2)とは相性が悪くて認識されない。 FreeBSDでは以下のようにでるのだが。。。
 port 1 addr 2: full speed, power 440 mA, config 1, IrDA/USB Bridge(0x4200), Sig
matel Inc(0x066f), rev 0.08
エラーメッセージ
The IOUSBFamily is having trouble enumerating a USB device that has been plugged
in. It will keep retrying.
The IOUSBFamily was not able to enumerate a device.
Copyright (C) 2010 Hiroki Mori All Rights Reserved.