1.7とはなんだったのか(6)

ドライバの不具合に悩む

ふたつ目の大きな問題は、リリース後に表面化した。

特定メーカーのdocomo端末を用いたときに、DAブラックホールが端末に接続できないケースが報告された。

COMポートは認識しているが、接続だけができない(≒初期化もできない)という謎現象である。
ただし問題が生じた端末でも、Bluetooth対応機種でBluetooth接続を行えば、この現象は発生しない。
問題は、きまって「USBケーブル接続」のときに起きていた。
つまり端末の問題ではなく、ドライバの問題であることが示唆されていた。

報告の数が 少しずつそろってくると、その現象は64bitOS上に限り発生していることがわかった。また特定メーカーの特定期間に販売された端末のUSBドライバだけで起きていることもわかってきた。

やがて、原因がわかった。
その携帯端末の64bit用USBドライバは WOW64(32bitエミュレーター)への対応が不完全だったため、32bit側の「MSCommコントロール」でエラーが生じ、ポートを開くことができないでいたことがわかった。
なお同メーカーの32bit用USBドライバには、この問題はなかった。

ドライバの不具合ではあるが、こちらも端末の検証用PCが「Windows7/32bit」であったことで、事前にこの問題を把握することができなかったのは、私のミスである。

コントロールの内製(自作)にふみ切る

不具合である以上、この問題を本質的に解決するなら、メーカーにドライバを改修してもらうのが筋である。
が、それを待ってる時間はないし、その当時 かなりゴタゴタしてるメーカーだったので、あまり期待はできかなかった。
またWin32APIを経由してファイルストリームでシリアルポートを制御する方法をプログラミングすれば、エラーによる門前払いを防ぐことができることも実験の結果わかった。

そこで おもいきって MSCommと互換性のある「DACommコントロール」を作成し実装することにした。

VB6.0でできるの?と思う向きもあるかもしれないが、時間はかかるものの、人間ワザの範囲だった。(いや、ほんとうのこと言うと、結構たのしかった)

なんというか、この20年・自分が使ってきたコントロールが どういった理由でそういう実装になっていたか、よくわかった。

そうこうして、次のようにクラスを再構成した。

DAブラックホール1.7の場合、デフォルトであれば、MSComm が選択されるが、通信デバイスの設定の「汎用コントロール」のチェックをはずすと DAComm になる。

通信デバイスの設定

この問題では、苦労もし、悩まされもしたが、有意義な時間を過ごさせてもらったような気がする実装につながった。

(つづく)