2012年09月24日

USB VID/PID

スイッチサイエンスで『USB PID無償提供プログラム』を検討しているのを知った。USB の ファームウェアを公開している立場からすると、USB の PID/VID は結構厄介で、正直自由に使える ID が欲しい。ID を使わせてあけようと考える人がいるというのは、非常にありがたい。

この機会に使える PID/VID についてまとめておこうと思う。

チップベンダーが提供する サブライセンス

    MicroChip や FTDI, TI (, Atmel も?)などは、製品に利用できる サブライセンスを発行している。が、当然ながら そこのチップを使うことが前提になっている。いまのところ USB 付き AVR の ファームウェアしか作っていないのだが、互換性のある ファームウェアを PIC32MX 向けに作りたいと考えている。

    ベンダーのしばりがあるのも問題だが、作っているものは製品ではないほうがより大きな問題で、サブライセンスを受けようとも思わないし、また受けられるとも思えない。

V-USB が使っている USB の VID/PID

    V-USB の最新版 vusb-20120109.tar.gz を解凍すると USB-IDs-for-free.txt というのがある。これには、いくつかの VID/PID のペアが載っていて、ライセンスに従えば 使用することができる。

    ライセンスは、Version 2009-08-22 となっていて、以前のものから見直しがされている。一番大きな変更だと思ったのは、使うチップやライブラリの条件がないということ。シェアできるようにさえなっていれば、他に条件がないようだ。

    以下、自分の理解。(厳密なものではないので注意)

    テキスト名による 識別

      ・ テキストの ベンダー名と プロダクト名は、USB language 0x0409 (English/US)でなければならない。

      ・ ベンダー名は、自分の Internet domain name (e.g. "mycompany.com") か e-mail address (e.g. "myname@gmx.net") を含んでいないといけない。( たぶん URL でも可 )

      ・ 自分の URL や e-mail アドレスは、レスポンスを返せるものでなければならない。

      ・ ドライバは、全文字列を チェックしなければならない。(sub-string の比較はダメ)

      以上を守れば、次の ID を使うことができる。

      PID dec (hex) | VID dec (hex) | Description of use
      ==============+===============+============================================
      1500 (0x05dc) | 5824 (0x16c0) | For Vendor Class devices with libusb
      --------------+---------------+--------------------------------------------
      1503 (0x05df) | 5824 (0x16c0) | For generic HID class devices (which are
      | | NOT mice, keyboards or joysticks)
      --------------+---------------+--------------------------------------------
      1505 (0x05e1) | 5824 (0x16c0) | For CDC-ACM class devices (modems)
      --------------+---------------+--------------------------------------------
      1508 (0x05e4) | 5824 (0x16c0) | For MIDI class devices
      --------------+---------------+--------------------------------------------

    シリアルナンバーによる 識別

      ・ シリアルナンバーは テキストで、USB language 0x0409 (English/US)でなければならない。

      ・ シリアルナンバーは、自分の Internet domain name (e.g. "mycompany.com") か e-mail address (e.g. "myname@gmx.net") を含んでいないといけない。( たぶん URL でも可 )

      ・ 自分の URL や e-mail アドレスは、レスポンスを返せるものでなければならない。

      ・ Vendor Class を使いたい場合は、libusb か libusb-win32 を使うこと。

      ・ それ以外のクラスを使う場合は、OS のデフォルトのドライバーを使うこと

      以上を守れば、次の ID を使うことができる。

      PID dec (hex) | VID dec (hex) | Description of use
      ===============+===============+===========================================
      10200 (0x27d8) | 5824 (0x16c0) | For Vendor Class devices with libusb
      ---------------+---------------+-------------------------------------------
      10201 (0x27d9) | 5824 (0x16c0) | For generic HID class devices (which are
      | | NOT mice, keyboards or joysticks)
      ---------------+---------------+-------------------------------------------
      10202 (0x27da) | 5824 (0x16c0) | For USB Mice
      ---------------+---------------+-------------------------------------------
      10203 (0x27db) | 5824 (0x16c0) | For USB Keyboards
      ---------------+---------------+-------------------------------------------
      10204 (0x27dc) | 5824 (0x16c0) | For USB Joysticks
      ---------------+---------------+-------------------------------------------
      10205 (0x27dd) | 5824 (0x16c0) | For CDC-ACM class devices (modems)
      ---------------+---------------+-------------------------------------------
      10206 (0x27de) | 5824 (0x16c0) | For MIDI class devices
      ---------------+---------------+-------------------------------------------

    ちなみに、ここで出てきている VID (0x16c0)を、Atmel だと誤解していた。Atmel は 0x03EB で違う。0x16c0 は、 "Van Ooijen Technische Informatica" ( www.voti.nl ) であった。

スイッチサイエンスさんへの要望

    最後になるが、twitter で意見を公募しているようなのだが、twitter の ID を持っていないのでここに書いておこう。

    USB には ドライバーが付き物で、ドライバーまで頑張って作るのではない限り、USB-IDs-for-free のライセンスで結構カバーできる。だが、OS のデフォルトのドライバー で使える別のクラスがあれば、このリストに追加して欲しいということになる。できたら、スイッチサイエンスさんに 同じルールの PID/VID の セットを作ってもらって 要望によって、リストが追加されるようになっているとたいへん嬉しい。

    OSS で ドライバーまで頑張って作るのであれば、ドライバー自体が共有できるものだから、やっぱり このリストに追加して欲しいということになる。

    逆に 個別のID を製品に付けたい ... となると 同人ハード とか 商品の試作みたいなことになるのではないだろうか? OSHW かつ OSS であるなら コピー製品を妨げることは出来ず 累計の制限は無意味になる。 累計の制限を付けるのなら OSS はともかく OSHW の制限は外すべきだと思える。

    まとめると、

    ・ シェアできるものは、USB-IDs-for-free ライクなライセンスで追加の要望が出せる
    ・ シェアできないもの(そのレベルになっていないものも含める)は、累計の制限を付け 仮ID の扱い。

    こんな風だと非常に嬉しい。
posted by すz at 20:37| Comment(0) | TrackBack(0) | 日記
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/58461126
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック