製品情報 » JPEGカメラ » JPEGカメラC1098-SS » C1098のバグについて

C1098のバグについて

 C1098-SSからJPEG画像を取り出す際には、パケット単位でデータを受け取ります。この際のパケットのサイズはSet Packe Sizeコマンドで行いますが、この際に指定するサイズは4の倍数である必要があります。これはC1098-SS内部のコントローラが32bitマシンなので4バイト単位でRAMにアクセスするためです。この制限はマニュアルには記載されていないので注意が必要です。
 また例えばパケットサイズを512バイトに設定した際に、通常のパケットの構造は、パケット連続番号(2バイト)+データ長(2バイト)+データ(506バイト)+チェックサム(2バイト)となります。つまりパケットサイズから連続番号、データ長、チェックサムの合計6バイトを差し引いた506バイトずつのデータが送られてきます。
 しかし最後に送られてくるパケットだけは違います。JPEG画像のサイズはまちまちですので最後のパケットだけはデータ長が様々に変化します。ここで問題になるのは、偶然にこのデータサイズが256の倍数になった際に(256,512,768,1024など)、C1098-SSは本来のデータを送信した後に更に256バイトの意味の無いデータを送信するバグがあります。
 これはカメラ内部でデータを転送する際のループの処理に問題があり、256バイト単位でデータを処理していて、本来は0になったら処理を終了する必要があるのに、0を256と解釈して余計に256バイトのデータを送ってしまうという処理をしてしまっているためです。残念ながらこのバグは半導体内のROMに焼きこまれている処理なので修正ができません。そこでコントロールソフト側で対応する必要があります。

・パケットサイズを256以下に設定する

 パケットサイズを256にすれば、データの長さは必然的に6バイトの付加情報を差し引いた250バイト以下にしかなりませんので、上記のバグに遭遇する事はありません。サイレントで提供しているC#のサンプルソースではパケットサイズを256に設定していますので、このソースを参考にドライバを作成している方は、このバグを心配する必要はありません。

・余計なデータを捨てる処理を加える

 パケットサイズを264以上に設定する場合には、パケットを受け取ったら先頭の付加情報からデータのサイズを把握して、もしそのサイズが256や512であれば、もう256バイト分だけデータを空読みして下さい。得られたデータ長と0xffをAND演算して0になった場合にこの処理をする事になります。

 このバグを回避すればC1098-SSは大変安定した動作をしますので、上手にC1098-SSを活用してください。