WindowsとCOM10

  • 2009年02月07日(土)

PicoBoardがうまく使えてないWindowsマシンで、これを使えるようにできないか試してみる。

このマシンでは、PicoBoard付属のUSB SerialがCOM10として認識されていて、Scratch側からはまったく認識できない。

Workaround

割り当てられたCOMポートの内容確認について教えてください。を参考にした。

以下の説明よりも、 USBシリアルポートのポート番号を変更するの方がわかりやすい。

とりあえず、該当デバイスをUSBに刺した状態でデバイスマネージャを起動すると、ポート(COMとLPT)の中に、そのデバイスが表示される。 ここで、右クリックのメニューからプロパティを選択する。 ポートの設定タブの詳細設定ボタンをクリックすると、COMポート番号を選択できるので、(COM1からCOM9の範囲で)適当なものを選択する。

これで、とりあえず利用可能になる。

この方法で、別のコンピュータでCOM10に割り当てられていたDWM200805基板も無事利用できるようになった。

原因と思われるもの

COM10 以上のシリアルポートを指定する方法が原因だと思うのだけども、まだWindows VMのソースは確認していない

しかし、ScratchのCOMポート選択は、COM1からCOM32まで選択できるんだけども、ほとんど意味が無いような気がするなぁ…

で、Windows VMでは…

Win32 Squeakで、最新のSqueakVM-Win32-3.10.10を持ってくる。

これだな。

  • platforms/win32/plugins/SerialPlugin/sqWin32SerialPort.c
  (snip)
  wsprintf(name,TEXT("COM%d"),portNum);
  port = CreateFile(name,
      GENERIC_READ | GENERIC_WRITE,
      0,             /* comm devices must be opened with exclusive access */
      NULL,          /* no security attrs */
      OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
      0,             /* no overlapped I/O */
      NULL           /* hTemplate must be NULL for comm devices */
    );
  (snip)

こんな感じで、直るような気がするけど、実際にbuildはしていない。

vaio [ win32/plugins/SerialPlugin ] % diff -u sqWin32SerialPort.c.20090207 sqWin32SerialPort.c
--- sqWin32SerialPort.c.20090207        2009-02-07 19:29:21.000000000 +0900
+++ sqWin32SerialPort.c 2009-02-07 19:29:54.000000000 +0900
@@ -84,7 +84,7 @@
       success(false);
       return 0;
     }
-  wsprintf(name,TEXT("COM%d"),portNum);
+  wsprintf(name,TEXT("\\\\.\\COM%d"),portNum);
   port = CreateFile(name,
       GENERIC_READ | GENERIC_WRITE,
       0,             /* comm devices must be opened with exclusive access */

そういえば、FreeBSD VMでは…

Scratchのシリアル指定は上記の様にCOM1からCOM32なんだけども、COM1はttyS1(まあ、USBなので実際にはttyU1とか)に割り当てられるので、実はシリアルポートはcom1として認識して無いと使えなかった気がする。

まあ、私の場合は、com0にはGainerとかDWM200805基板がいるので大抵は問題ないんだけども。

Last modified: 2009-02-08
Post-it: New Post-it (help)

Text color: [_][_][_][_]

Background: [_][_][_][_][_][_]

Draw Line:

x: y: