Linuxで仮想COMを使いたいのですがどうすれば良いですか?


経緯を説明するために、特定のプリンターの説明から始めさせて頂きます。

弊社のCT-S280というプリンターでは、FTDIという会社のUSBシリアル変換チップを使っておりますが、USBとして仮想COMしか用意していないため、CUPS用の説明用に用意された下記のページに仮想COMドライバーの説明を用意しております。
 http://www.citizen-systems.co.jp/english/support/download/printer/driver/cups/source/
この説明に出てくるファイルの中でLinux上で見つからないソースファイルは、
FTDI社のサイト
 http://www.ftdichip.com/Drivers/VCP.htm
にて入手できます。

CT-S280以外のプリンターで、このチップを使わずに実現している仮想COMについてもFTDIのチップと動作が互換になるように設計されておりますので、上記のサイトの説明は他のプリンターの仮想COMにも通用します。

ただし、FTDIのチップはバージョンにより動作が違っていて、仮想COMドライバーもチップのバージョンに合わせて動作を変えるようになっているようです。
弊社の仮想COMは古いFTDIのチップの仕様をベースにしていますが、プリンターのモデルによっては新しいチップのバージョンと認識されしまう場合があり、正しく動作しないケースがあります。(文字化けします。)
その対策として、上記のサイトで説明されているUSBのIDの変更以外に、追加のパッチを当てる方法がありますので、以下に説明します。

(kernel ソースの展開先)/drivers/usb/serial/ftdi_sio.c の CT-S280 のパッチ(ただし、VID=0x2730,PID=0xfff)の他に
ftdi_determine_type 関数に下記のようにパッチを当てて下さい。
---------------------------------------------------------------------
この関数の最初の方に
 version = le16_to_cpu(udev-> …
と書かれた行があります。この直後(すぐ下のif文で分岐する前)に
 if( version == 0x002 ) version = 0x400;
という行を追加(入れ替えではありません)して、bcdDevice が 4 と同じように扱われるようにして下さい。
---------------------------------------------------------------------
なお、同じPCにFTDI のチップを使ったデバイスが接続されていた場合は、この変更がそのデバイスの動作に影響する可能性があります。ご了承下さい。

ただし、接続直後にだけゴミ印字が混ざることがありましたが、原因の追及まではできませんでした。
※※※ 上記は、弊社からの解決策のご提案に過ぎず、保証もサポートも出来ないことをご了承下さい。※※※

このエントリーにコメントできません。