ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

CANUSB APIのメモ

車載ネットワークとしてよく使われているCAN信号をUSB経由でPCに取り込むツールの一つであるLAWICL社のCANUSBについて、CANUSB dllを使用した場合のメモというか愚痴をいくつか。

マニュアル誤記

マニュアル Version 0.1.8には以下の誤記がある。

  • int setReceiveCallBack( CANHANDLE h, LPFNDLL_RECEIVE_CALLBACK cbfn )
    関数名が間違っている。正しくは以下。
    int canusb_setReceiveCallBack( CANHANDLE handle, LPFNDLL_RECEIVE_CALLBACK fn )

他にも誤記は多数あるが、その多くは解釈可能である。
例:Id this method is called very often performance will degrade -> たぶんIdではなくIf

ただ、解釈困難な誤記もあるのでいつの日かVersion 1.0になってほしい。

例:Code that open the channel, transmit and then close should bit a bit before closing to allow for the frame to be transmitted. <- "bit a bit"ってなんだろう。set a bitだとしてもbitをsetする関数は存在しないのだが。check a bitだとしてもbitをcheck(略

HANDLEをcloseしても動き続ける

canusb_Close()にてhandleをcloseしても、canusb_setReceiveCallBack()で設定したコールバック関数が1回呼び出されることがある。ただ、これはメッセージキューに溜まっているだけなのかもしれない。コールバック関数側でClose済みかどうかをチェックする必要があるかも。

バッファが溢れやすい

500kbpsのバスに大量のメッセージが流れていると(10ms周期のメッセージが複数とか)、けっこう取りこぼす。そんな状態で送信しようとすると、結構送信バッファが溢れる。CANUSBはCANコントローラ - PC間通信をUSB化したシリアル通信で実現しているので、そこがボトルネックになっているのかも。