久しぶりにUSB_MIDIのファーム開発作業をしていて遭遇した状況を書いておこうと
思います。
発端は、PICrouterのUSB用コールバック関数群を、Mainのあるソースと分離させて
別ソースファイルにしたことでした。コードを少し整理して、処理を関数化していて、
バグを混入させてしまいました。そのバグというのは、USB_MIDIの受信処理のステート
が初期設定までは進むが、パケットが来ても実際の受信処理には進めないという、
if文の判定条件を逆にしてしまっていたという残念なものです。
気づいてしまえばなんてことは無いバグなんですが、しばらく気がつかずにあれや
これやテストしていました。
まず、
- Windowsからデバイスはきちんと認識されており、デバイスマネージャーでも特にエラーなども出ていない。
なのに、
- パッドを押してもMIDIノートが送信されない(Max6で作ったテストパッチでノートが受信できない)。
- Maxからデバイスに対してMIDIを送ると1回目は無反応。2回目でMaxがフリーズ。
- いったん、Maxを終了し、Ableton Liveを起動するとLiveではノートを受信できる。じゃあとLiveを閉じて再度Max6を立ち上げようとしても、Maxが立ち上がらない。一旦、USBケーブルを抜かないと終了出来ず。
なんだ?っと思い、試しにMacで通信テストしてみると・・・問題無くMaxパッチでデバイス
からのMIDIノートを受信できる。Mac側から送信したMIDIはバグで受信できないが、フリーズは
しない。
Macが優秀というか何というか・・・。Windowsだと送受信共に動作がおかしくなってしまったため、
原因の特定に手こずってしまいました。Macでやってたらもうちょっと早く修正できたかなぁ?
Windowsの方が不具合が大げさかもしれません。
コメントをどうぞ