自分自身のための ものづくり / 自分自身のためのものづくりメモ

突っ込みなどがありましたら掲示板にお願いします。

* シリアルマウス

PC mouse info
http://www.tkk.fi/Misc/Electronics/then/mytexts/mouse.html
更新:リンク変更

PIC K iT PS/2⇔シリアル マウスインターフェイス
http://members.jcom.home.ne.jp/irv/documents/sermouse/0511123_SirialMouse_manualB0.pdf
スクロールマウスのデータフォーマットの情報あり。その他にも色々参考になる。


 比較的簡単なハードウェアとソフトウェアでWindows機(等)にマウス扱いされる自作ハードを繋げるのは魅力だが、Windows2000, XPでは電源ON時にしか認識されない(?)等、微妙に面倒が多いのが難点。
 あと、近頃はシリアルポート搭載率が減少傾向。USB<->シリアル変換はシリアルマウスには対応していないのが多い。

#電子工作

* Vista環境にて、PL-2303を使用したUSB接続COMポートで、TEXCELLのRubyシリアル通信ライブラリを用いてデータを受信できない。その原因と対処法

#プログラミング #Ruby #シリアルポート

事象

 Windows Vista の環境にて、USB接続のCOMポート(シリアルポート)を介して繋いだ機器のデータを、TEXCELLのRubyシリアル通信ライブラリ wincom.rb にて全く受信できない。teratermでは受信できる。。
 同じ接続対象機器・同じプログラムでも、レガシーな COM1 に繋いだならば受信できる。
 同じ接続対象機器・同じUSB接続シリアルポート・同じプログラムで、WindowsXP 環境では受信できる。

原因

 Vista環境にて、USB接続シリアルポートでは、ReadFileを実行した際、「読み取ったバイト数」として常にゼロが帰ってくるため。
 ドライバのバグか?

対処

 ReadFileの「読み取ったバイト数」は使わず、ClearCommErrorを実行した際に得られた COMSTAT構造体 の「受信バッファにあるデータのバイト数」を使う。
 ReadFileでそのバイト数読むと指示しているのだから、問題ない…と思う。問題あったとしても、常に0バイトよりはマシだ。
    def receive
(中略)
#                rcvchar = @wcrecv.unpack("a#{irlen[0]}")[0]
                rcvchar = @wcrecv.unpack("a#{ilen}")[0]

補足

 試したUSB接続シリアルポートアダプタは、以下2点。
 UC-232Aのドライバは、uc232a_windows_vista.rar (Ver._v1.0 2007-7-10)を使用。
 URS232GFは、Vista標準ドライバで利用できるとの事だが、できなかった。「URS232GFは一部ロットにて使用できません。」とのこと。チップ製造元であるProlificのイトから、PL2303_Prolific_DriverInstaller_v10518.zip (2009/7/23 v1.0.5.18 )をダウンロードし、インストール。
 上記2点、チップ自体は同じか。ならば、ドライバもほぼ同一なのだろう。

あとがき

 今までTEXCELLのwincom.rbをありがたく便利なブラックボックスとして使わせて頂いていたのだが、中身を見て、色々と面倒な Win32API を隠蔽してくれていた事を実感した。今回必要に迫られてベールの下を覗いたけど、Win32APIは直接触らずに済むならそうしたい代物だ。


関連ページ

TEXCELL Rubyシリアル通信ライブラリ
http://www.texcell.co.jp/ruby/wincom/rubywincom.html

hirax.net::wincom.rbのCOM10以上対応
http://www.hirax.net/diaryweb/2009/07/29.html

Serial Communications in Win32
http://msdn.microsoft.com/en-us/library/ms810467.aspx

Windows/Vista/USB-RS232C(シリアル) - Tomocha WikiPlus
Windows Vista で動く、USB-RS232C変換ケーブル情報
http://wiki.tomocha.net/Windows_Vista_USB-RS232C.html

* Windows環境にて、USB接続COMポートを、個体識別する

#メモ #プログラミング #シリアルポート #Ruby
 Windows環境(少なくともWindows XP)では、USB接続のRS-232C(正確にはEIA-574)アダプタのCOMポート番号は、差すUSBポートを変えるとコロコロ変わる。COM19になったりCOM6になったり…。とても困る。
 一方、USB接続のその手の機器は、デバイスマネージャ上で個体識別できる。ならば当然、自作プログラムでも個体識別し、COMポート番号を自動設定できる。
 WMIを介して情報を得る。Win32_SerialPortではUSB接続の情報が得られない(場合が多い?)ので、Win32_PnPEntity からCOMポートを抜き出すのが確実。

require 'win32ole'

def ports
    locator = WIN32OLE.new("WbemScripting.SWbemLocator")
    services = locator.ConnectServer(".","root/cimv2")
    ports = services.ExecQuery "Select * From Win32_SerialPort"
    ports.each do |port|
        p port.Caption
        p port.Description
        print "\n"
    end
end

def ports_pnp
    ps = []
    locator = WIN32OLE.new("WbemScripting.SWbemLocator")
    services = locator.ConnectServer(".","root/cimv2")
    ports = services.ExecQuery "Select * From Win32_PnPEntity"
    ports.each do |port|
        if /\(COM\d+\)$/ =~ port.Caption
            p port.Caption
            p port.Description
            p port.Manufacturer
            print "\n"
        end
    end
end
   


print "Select * From Win32_SerialPort\n"
ports

print "Select * From Win32_PnPEntity\n"
ports_pnp

ruby -Ks comports.rb

Select * From Win32_SerialPort
"通信ポート (COM1)"
"通信ポート"

"通信ポート (COM2)"
"通信ポート"

Select * From Win32_PnPEntity
"Prolific USB-to-Serial Comm Port (COM19)"
"Prolific USB-to-Serial Comm Port"
"Prolific"

"USB-to-Serial Comm. Port (COM6)"
"USB-to-Serial Comm. Port"
"Aten"

"通信ポート (COM1)"
"通信ポート"
"(標準ポート)"

"通信ポート (COM2)"
"通信ポート"
"(標準ポート)"


参考文献:

Kick4 BBS
USBシリアルのポート名を知る方法?
http://www.kick4.net/bbs/c-board.cgi?cmd=ntr;tree=4;id=

Win32_SerialPort Class (Windows)
http://msdn.microsoft.com/en-us/library/aa394413(VS.85).aspx
Win32_PnPDevice Class (Windows)
http://msdn.microsoft.com/en-us/library/aa394352(VS.85).aspx

* serial keys

#電子工作 #途中経過 #メモ
 お手軽にWindowsマシン(等)にキーボードのふりをするデバイスを繋ぐことができる「シリアルキー」に関するメモ。
 マウスカーソルの絶対座標移動とかもできて、色々使いでがありそう。
(近頃はレガシーデバイスが絶滅危惧種で、あまりお手軽でもないかも)

テクニカルライター後田 敏の部屋 PICマイコンーシリアルキーズ
http://goda.blog3.fc2.com/blog-entry-84.html
 十数回にわたるシリーズ。日本語キーボード設定での不具合などに関して詳しく書かれていたりして、かなり参考になる。

テクニカルライター後田_敏の部屋_(2)シリアルキーズ
仕様まとめ

シリアルキーによる補助装置のプログラミング
http://support.microsoft.com/default.aspx?scid=kb;ja;260727
 送信する文字列の表が見やすい。

site:www.microsoft.com serial-keys - Google 検索
http://www.google.com/search?hl=ja&lr=lang_ja&q=+site:www.microsoft.com+serial-keys
 各種Windowsでの設定方法


GIDEIの概要
http://www5.wind.ne.jp/ja1syk/uni_design/gidei-j1.htm
 マウスのコマンドなども規定されている。
 WindowsXPでも有効らしい。

日本におけるシリアルキーの経緯
http://www5.wind.ne.jp/ja1syk/serialkeys.htm
 Windows日本語版におけるシリアルキーの冷遇されっぷりが切々と記されている。


#「シリアルキーボード」とか「serial keyboard」とかで検索してもプロトコルの情報が引っかからなくて悩んでたのだけど、「シリアルキー」「serial keys」だったのか。