コダックDC20解析日記


1996/08/14 〜 1996/08/26

1996/08/27 〜 1996/09/07


1996/08/27 (火) 曇り
CMTファイルについて

 カヤックで遊んでいる間にうれしいメールが届いた。チノンのES1000を お持ちで、チノン側の付属ソフトにあるCMTフォーマットを解析した方からの メールだ(^O^)。 (吉田様:hideki@yk.rim.or.jp) しかも、解析した内容をここで公開しても構わない という嬉しいお話。ありがとうございました。m(__)m

 CMTファイルはチノンの付属ソフトにあり、コダックの付属ソフトにない 画像フォーマットだが実際の中身はどうやらカメラから送られてくる画像データに ヘッダーを付けただけのもののようだ。実際、先頭128バイト以外はカメラからの フルイメージと同じで枚数情報まで入っている(^^;)。

 ちなみにファイルヘッダーは

0000000 43 4f 4d 45 54 00 00 00 00 80 00 01 e8 00 07 10
0000010 cc 00 0a 2d 00 00 00 00 00 00 00 00 00 00 00 00
0000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
というようなものだそうだ。(各画像によって、どれだけ異なるかは不明)

 前述の吉田さんは、具体的なCMTファイルのフォーマットまで研究されていて、 お話では、フルイメージは1ライン512バイト×242行で構成されており、 はじめの行を0行と考えた上で、各行が

となるよう構成されているとのこと(B,R,G,Iはそれぞれ1バイト)。実際、それに 基づきカラー画像を再生成できたとのお話だった。(すごい進展!!!)

 ただ、それだけの変換では付属ソフトの作り出す奇麗な画像にはならず、ソフト の方で高度な変換処理を行っているのではないかと推測されていた。 また、付属ソフトの変換を真似するのが難しいなら、変換自体は付属ソフトで行う ようにしてもよいのでは?とおっしゃっていた。

 私も今の(フルイメージ)解析作業を止めるつもりはないが、当面吉田さんの おっしゃるような形でソフトを作成していこうと思っている。 実際、CMTファイルの作成は簡単そうなので、まずこの形式のファイル出力を 作成しようと思っている。そうすれば、母艦にフラッシュなどで転送して付属ソフト を使ってtifなりbmpに変換することが可能になる。
(もちろんES1000ユーザーのみ、その恩恵を受けることができる)

ES1000以外のユーザー(DC20など)は上記のようなことができないので、 LXでDC20をシミュレートして付属ソフトに画像をシリアル転送することで 我慢しよう。

 上記の話でDC20とES1000が同等のものという表現をしているが、具体的 なところはまだ不明。今作成中のLX上ソフトを吉田さんにテストして頂いて、同様 な制御ができるか確認をお願いするつもりである。
 今日は妻の具合が悪いのでここまで。明日はボーレートをどこまで上げることが 可能かの実験をすることにする。
今回は全て吉田さんの解析の力によるものです。吉田さんに感謝!!!


1996/08/28 (水) 曇り時々雨
ボーレート変更について

 旅行中に必要性を痛感したボーレート変更について調べてみた。今まで何度も トライをしてみて、付属ソフト〜DC20は難なくボーレート変更できるのに、 こちらは全くだめだった。ブレーク信号が出ているのかなとか、特定の文字を送る のかなとかいろいろ実験したが安定した切り替えはできなかった。

 今日は自宅で仕事だったので久々にワンダースコープ(R)を立ち上げ、9600→ 19200の切り替えをモニタすることにした。(うちのNS/Eでは9600ボー までしか出ないので切り替え前を監視した)また、NTマシンで付属ソフトの送信 状況だけモニタすることにした。(こちらは19200ボーだけ)

 付属ソフト〜DC20では、リトライもなくすぐにボーレート変更できている ようだった。モデム制御線が接続されていない以上なんらかのシーケンスがある はずだが...「をや?」DC20を見つける為のパケットが変だぞ。最初は

41 00 96 00 00 00 00 1A
が2つ出て、その後で
41 00 19 20 00 00 00 1A
が出てボーレート変更している(つまり文字バケしている)。 3、4バイト目の「96 00」「19 20」はボーレート じゃないか?試しに、57600ボーにすると、
41 00 57 60 00 00 00 1A
になってる!!なーんだ。簡単じゃねーか!!(^O^)

 ということで、カメラを見つける為の(?)パケットの3、4バイトとボーレートの 関係は以下の通りとわかりました。(コードは全て16進数)

 結局こんなに簡単な話だったのに見つけられなかったのは、 が反省点としてあげられる。つまり解析は常に初心にかえること!ですね。(^^;)

 早速NT上での解析用ソフトに組み来んでみると、おお早い早い。今までの遅さが うそだったようにスーっと転送してくれる。これなら実用上全然問題なさそうだ。

 今度はLX上のソフトにその機能を組み込んでみると、こちらも面白いように DC20からデータを吸い上げてくれる。ただ、115200ボーはやはり無理がある らしく、途中で取りこぼしの為エラーとなってしまった。読み込み中にゲージ表示 しているので(だって9600ボーでは必要だったんだもん)、これを外せばもう少し いけるかもしれない。57600ボーでは実用に耐える速度で安定して転送できた。 (LXは倍速済み)

 さあ明日はサーバーモードのLX組み込みだが、納期前で時間がなさそう (納期前に何やってんだか)。時間がなければ、今日ちょびっとだけ説明したように 他のパケットの内容についても説明しようと思う。乞うご期待。


1996/08/29 (木) 曇り時々雨
DC20通信パケット(その1)

 今日は案の定時間があまりとれなかったので、通信パケットの説明を行おうと 思う。
 最初は安全の為パケットの説明を希望者にだけ行おうかと思ったのだが、やはり 参考情報として意味あると思い、公開することにした。くり返しになるが、この解析 情報が正しいとは限らないし、万が一この情報によって被害を受けたとしても当方は 一切関知しない。また、この情報に基づきメーカー等に問い合わせ等をすることは絶対 におやめ下さい。

 以前にも述べたがDC20と付属ソフトとの間では以下の通信条件で通信を行って いる。

 そして、付属ソフトからのコマンド送出に対してDC20が応答するというのが 基本動作であり、DC20から何等かのアクションを起こす事は無い(ようだ)。

 付属ソフトからDC20へ送られるパケットは(現在わかっている限り)以下の通り である。 (名称は私が勝手につけています。本来の名称とはきっとかけ離れているでしょう)

  1. カメラチェック(含:ボーレートの切り替え要求)
  2. カメラ情報要求
  3. 継続データ要求(0xD2)
  4. 簡易イメージ要求
  5. フルイメージ要求
  6. フルイメージ属性要求(?)
  7. 撮影
  8. 全イメージ消去
 上記が付属ソフトから発行されるパケット全てである。

命令用のパケットは全て8バイトで構成されており、最後が必ず 0x1A で終わる。 逆にDC20から返されるパケットの長さは可変であり、複数のブロックに分割 されて送られる場合もある。

DC20から付属ソフトに返されるパケットを大別すると以下のようになる。

  1. 正常応答(OK) -- 0xD1
  2. 異常応答(NG) -- 0xE2 (※ 以前 0xE1 とあったのは誤り)
  3. 継続データ有り -- 0xD2
  4. 継続データ無し -- 0x00
  5. 状態応答(256バイト)+チェックサム(1バイト)
  6. 生データ(1024バイト)+チェックサム(1バイト)
 それでは、付属ソフトからDC20へ送る命令パケットについて説明する。 DC20から付属ソフトへの応答パケットについては、必要に応じてその都度説明 する。

1. カメラチェック

 昨日ボーレート設定の話の時に出たパケットである。このパケットは付属ソフトが 何かする前に必ず発行される。また、何等かの命令パケットを送った後にも必ずとい って良いほど発行される。多分、不意の電源断などを考慮してのことだと思う。

 初めてこのパケットが発行される時には、必ず

0x41 0x00 0x96 0x00 0x00 0x00 0x00 0x1A
というパケットが(通信速度9600ボーで)発行される。 DC20は電源投入時は9600ボーとなっており、この状態で、正常応答のパケット (0xD1)を返す。また、確認の為だと思うが、付属ソフトは再度
0x41 0x00 0x96 0x00 0x00 0x00 0x00 0x1A
のパケットを送出している。ボーレートを9600ボー以外に変更したい場合は、 この後に、
0x41 0x00 0x19 0x20 0x00 0x00 0x00 0x1A
のパケットを送出し、 正常応答(0xD1)のパケットを得た後で、 両者が(上記の場合)ボーレートを19200ボーに変更する。 (以後19200ボーにて通信)
付属ソフトは、9600ボー以外でカメラチェックを行った時に、正常応答を 受信できなかった場合、リトライを1度した後、9600ボーに通信速度を落として リトライする(2回)。それでも反応がなかった場合には、エラーとなる。

だから、9600ボー以外で付属ソフトを立ちあげている間に、DC20の電源を落と して再度電源を投入すると、最初のカメラチェックは失敗し、9600ボーでの カメラチェックで正常応答する。その後付属ソフトは、設定してあるボーレートに なるようボーレート変更する。

2. カメラ情報要求

カメラチェックの後に必ずといって良いほど発行されるパケットである。この パケットは以下のような形式である。
0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A
(今までのところ特にパラメータはなさそうだ)

このパケットを受信するとDC20は自分の状態を付属ソフトに報告する。 この状態取得の流れは、

  1. → カメラ情報要求(0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x1A)
  2. ← 正常応答(0xD1)
  3. ← 状態応答(256バイト+チェックサム)
  4. → 継続データ要求(0xD2)
  5. ← 継続データ無し(0x00)
のようになる。
(注)「→」は付属ソフトからDC20への命令パケット、「←」はDC20 から付属ソフトへの応答パケットである

状態応答のパケットは、256バイト固定長で、その後にチェックサム が1バイト付く。

チェックサムは256バイトのデータの排他的論理和をとっただけの 簡単なものである。
パケットの内容は先頭から、
0x01, 0x20 : 固定らしい(変更するとエラーになる)
0x01 : ファームウェアバージョン整数部
0x00 : ファームウェアバージョン小数部
0xAD : 不明
0xC2 : 不明
0xCD : 不明
0xA2 : 不明
  HH : 撮影済み枚数の上位バイト
  LL : 撮影済み枚数の下位バイト
  HH : 撮影可能枚数の上位バイト
  LL : 撮影可能枚数の下位バイト
0x85 : 不明
0x00 : 不明
0x00 が38バイト続く
0xFF が最後まで続く
のようになっている。付属ソフトの内容から判断して、上記不明部分に電池の残量 情報が含まれているはずだが、よくわからなかった。

カメラチェックとカメラ情報パケットをサポートすれば、付属ソフトのカメラ情報 の機能はカバーできる。

 今日はここでおしまい。明日は撮影と、簡易イメージ要求のパケットについて 説明する。


1996/08/30 (金) 曇り時々雨
DC20通信パケット(その2)

 さて、引き続きDC20と付属ソフトとの間でやりとりされるパケットの説明を 行う。今日は撮影と、最初の重要部分、簡易イメージ転送について。

3. 撮影

 撮影は簡単だ。おきまりの、カメラチェックとカメラ情報要求を行った後、以下の ような手順となる。
  1. → 撮影(0x77 0x00 0x00 0x00 0x00 0x00 0x00 0x1A)
  2. ← 正常応答(0xD1)
  3. (数秒待つ)
  4. ← 継続データ無し(0x00)
 ただし、後述する理由から、あらかじめカメラチェックの時に残枚数のチェックを 先にすませておいた方がよい。

 撮影は簡単だし手軽にコーディングできるのだが、一つだけ困った点がある。 それは、撮影パケットを送った後の正常応答がどうやら9600ボー固定で行われて いるようだからだ。というのはボーレートを9600ボー以外にした場合、正常応答 のコードが必ず化けてしまうからだ。(その後の0x00は問題ない)

 多分DC20のバグだろう。いちいちこの時だけボーレート変更するのもイヤなの で、LX用の制御ソフトでは、スリープしてその間の受信内容を無視することに した。実際それで問題は発生していない。

 なお、付属ソフトでは、付属ソフトからの撮影後、撮影した画像の簡易イメージを 自動的に取り込むようにしている。

4. 簡易イメージ要求

 DC20を使ったことのない人に説明すると、簡易イメージとは付属ソフトから DC20で何を撮影したか調べるときに表示されるグレーの画像のことだ。

 この画像は横80ドット縦64ドット(実際に内容があるのは60ドット)の 256階調のグレースケールデータで、表示するとそれなりに内容が把握できる 程の品質を持っている。カラーのフルイメージを表示する前に内容を確認するとき 非常に役立つものだ。(LXのDBで表示させる程度の(小さい)画像なら、この 画像だけでも十分である)

 さて具体的な転送手順について説明する。付属ソフトの場合DC20内の画像を 一度に全て転送してしまうのだが、カメラ内の各データを撮影枚数分転送するだけ なので、1枚の簡易イメージ転送について説明する。

 転送は、カメラチェック・カメラ情報要求の後、以下の手順で行われる。

  1. → 簡易イメージ要求(0x56 0x00 0x00 0x01 0x00 0x00 0x00 0x1A)
  2. ← 正常応答(0xD1)
  3. ← 簡易イメージ応答(1024バイト+チェックサム)
  4. → 継続データ要求(0xD2)
  5. ← 正常応答(0xD1)
  6. ← 簡易イメージ応答(1024バイト+チェックサム)
  7. → 継続データ要求(0xD2)
  8. ← 正常応答(0xD1)
  9. ← 簡易イメージ応答(1024バイト+チェックサム)
  10. → 継続データ要求(0xD2)
  11. ← 正常応答(0xD1)
  12. ← 簡易イメージ応答(1024バイト+チェックサム)
  13. → 継続データ要求(0xD2)
  14. ← 正常応答(0xD1)
  15. ← 簡易イメージ応答(1024バイト+チェックサム)
  16. → 継続データ要求(0xD2)
  17. ← 継続データ無し(0x00)
説明もれがあった。簡易イメージ要求の4バイト目は取得したいイメージの番号 をあらわしている(1〜)。この値によってカメラ内の任意位置のイメージを取得 することができる。
 計5回の転送で、1024*5 = 5120 バイトの画像情報を取得できる。これは、 横80ドット×縦64ドット×1バイト(256階調)のデータをそのまま含んで いる(先頭が画面左上端)。

 簡単ですばやい転送が可能なので、LXなどでは画像付きDBなどと組み合わせると 面白い使い方が可能になりそうだ。

 今日はここまで。次回は、画像消去と標準/スナップ切り替えについて説明する。


1996/08/31 (土) 曇り時々雨
あざみ野フリーマーケットにおでかけ

 今日はあざみ野でフリーマーケットがあったので妻(とその友人)のお供で出か けた。ただ、ビール飲んで疲れてしまったので特に進展はない。

画像その1
約10kバイト


1996/09/01 (日) 曇りのち晴れ
DC20通信パケット(その3)

 さて、今日はカメラ内の画像消去について。

5. イメージ消去

これは非常に簡単だ。撮影と同様、カメラチェックとカメラ情報要求を行った後、 以下のような手順となる。
  1. → イメージ消去(0x7A 0x00 0x00 0x00 0x00 0x00 0x00 0x1A)
  2. ← 正常応答(0xD1)
  3. (数秒待つ)
  4. ← 継続データ無し(0x00)
 撮影時と同様、正常応答は9600ボーで返されるようなので注意が必要。 また、カメラ内に画像が残っている場合には、エラーとなる。
 エラーの場合は、正常応答の後、即座に「0xE2」が返される。
 エラーは、あらかじめカメラ状態の取得ではじくようにした方が無難だろう。

6. 標準/スナップ切り替え

 標準/スナップ切り替えは、以下のような手順である。
  1. → 標準/スナップ切り替え(0x71 0x00 0x01 0x00 0x00 0x00 0x00 0x1A)
  2. ← 正常応答(0xD1)
  3. ← 継続データ無し(0x00)
 「標準/スナップ切り替え」の3バイト目が「0x01」の場合、標準→スナップの 切り替えを行う。また「0x00」の場合、スナップ→標準の切り替えを行う。

 もしカメラ内に画像が残っている場合はエラーとなり、正常応答の後、即座に 「0xE2」が返される。


1996/09/02 (月) 曇時々雨
DC20通信パケット(その4)

 さて今日はフルイメージの転送だ。フルイメージの転送はまだ用途がよくわかって いないパケットがある。ただ、それでやりとりされる内容はフルイメージのデータの 先頭256バイトと同じなので、特に気にしていない。

7. フルイメージ要求

イメージ情報要求とフルイメージ要求の4バイト目は取得したいイメージの番号 をあらわしている(1〜)。この値によってカメラ内の任意位置のイメージを取得 することができる。

「簡易イメージ要求」 の項も参照のこと

  1. → イメージ情報要求?(0x55 0x00 0x00 0x01 0x00 0x00 0x00 0x1A)
  2. ← 正常応答(0xD1)
  3. ← イメージ情報応答(256バイト+チェックサム)
  4. → 継続データ要求(0xD2)
  5. ← 継続データ無し(0x00)
  6. → フルイメージ要求(0x51 0x00 0x00 0x01 0x00 0x00 0x00 0x1A)
  7. ← 正常応答(0xD1)
  8. ← フルイメージ応答(1024バイト+チェックサム)
  9. → 継続データ要求(0xD2)
  10. ...(7〜9を後121回繰り返す)
  11. ← 継続データ無し(0x00)
 フルイメージのパケットは全部で122パケット転送される。各パケット1024 バイトなので、総計124928バイト転送することになる。

 フルイメージの内容は、まだほとんどわかっていないが、各パケットに2ライン分 のデータが入っているようだ。また最初と最後の512バイトは無意味なデータの ようだ。データの内容については、 1996/08/27 の日記 を参照して欲しい。

 これで一通りパケットの説明が終わったので、次回からはまたLX版制御ソフト の進捗の話題に戻る。


1996/09/03 (火) 晴れ時々曇り
LXDCについて

 さて、解析と併行して取り組んでいるLX用のDC20制御ソフトだが、何とか 目鼻がついてきた。先日アルファ版を吉田さんにお送りしたところ、詳細なレポート を頂いた(ありがとうございました)。標準速LXの場合は、57600ボーあたり が実用的な速度のようだ。倍速でも115200で常に安定した接続は難しい。 57600ボーでやりとりした方がトータルでは早いかもしれない。

 現在の機能をメニューから列挙すると

File
  Save as CMT  ... CMTファイルで保存
  Delete       ... ファイル削除
  Rename       ... ファイル名変更
  Exit         ... 終了
Camera
  Info         ... カメラ情報取得
  Table        ... カメラ内の全簡易イメージを取得
  Take         ... 撮影
  Timer        ... タイマー撮影
  Erase        ... カメラ内のイメージ消去
  Image        ... カーソル位置の簡易イメージ取得
  Full         ... カーソル位置のフルイメージ取得
Special
  Redraw       ... 画面再描画
  Local        ... ローカルモード移行
  Camera       ... カメラモード移行
  Server       ... サーバーモード移行
Option
  Setup        ... 各種設定値変更
  9600         ... ボーレート変更
  19200
  38400
  57600
  115200
Quit           ... 終了
Help
  About        ... コピーライト表示
 結構多くなってしまった(^^)。ファイル管理等が面倒だったので、
  1. カメラ内のイメージを管理するモード
  2. ディスク内のイメージを管理するモード
の二つのモードを持つ事にした。カメラモードでは、撮影してカメラ内に残っている イメージと同期するようにし(つまり8枚までしか扱えない)、ローカルモードでは フル画像を取得したファイルだけ表示するようにした。

またサーバーモードでは上記ローカルモードで表示される画像を付属ソフトの動く PC上に転送できるようになっている。(つまりDC20のフリをする)

とりあえず、こんな感じでDC−20のサポートができるようになっている。 そろそろ公開に向けて準備せねば。


1996/09/04 (水) 晴れ
状態応答その後

 最近解析ネタが少なくなってきたのだが、ちょうど良い材料に恵まれた。 それというのも電池がとうとうなくなったので、電池切れの状態がどこにあるか わかったのだ。それとスナップモードであることを示す状態もわかったので あわせて説明する。

 以前 カメラ情報要求 で、カメラから返される状態応答について不明点が多かったが、2つの点について わかったので以下に示す。

0x01, 0x20 : 固定らしい(変更するとエラーになる)
0x01 : ファームウェアバージョン整数部
0x00 : ファームウェアバージョン小数部
0xAD : 不明
0xC2 : 不明
0xCD : 不明
0xA2 : 不明
  HH : 撮影済み枚数の上位バイト
  LL : 撮影済み枚数の下位バイト
  HH : 撮影可能枚数の上位バイト
  LL : 撮影可能枚数の下位バイト
0x85 : 不明
0x00 : 不明
0x00 が9バイト続く
  XX : 標準モードの時0x00, スナップモードの時0x01
0x00 が5バイト続く
  XX : 電池切れの時0x01, そうでない時0x00
0x00 が22バイト続く
0xFF が最後まで続く
 電池切れは単なる1ビットの情報だったようだ。さて気になる使用時間だが、 どうなんでしょ。カタログの400枚は撮影した憶えがないけど、普通の数倍の 転送を行っているハズだからこんなものかな?多分撮影枚数は100枚程度、 転送回数は300回位だと思う(根拠レス)。明日は電池買ってこなきゃ(^^;)。

それともACアダプタを買ってこようかな...(^^;)


1996/09/05 (木) 〜 1996/09/06 (金)
納品作業の為、解析等すすまず。


1996/09/07 (土) 曇り時々雨
ACアダプタ・電池購入

 電池がきれては何にもならないので、新宿ヨドバシカメラで電池を購入。 DURACELL の DL123A が一番やすく一本550円だった。(大体600円を中心に色々 なメーカーの電池がありました。)
 ついでだからと、OA店に足を運びES−1000用のACアダプタを探してみた。 すると3つばかり在庫があったので、ついフラフラ〜と購入してしまった。 消費税込み(?)で4000円だった。
 以前ラオックスで見たとおり、電池の代わりに差す形でカメラと接続する特殊な ものだ。フタがちゃんと閉まらないので、とても格好悪くフタをバキッと割って しまいそうだ。ま、解析の間電池を消耗させていくのに比べれば遥かに経済的なので 家の中では重宝しそうだ。
(でもまじめな話、フタを壊しそう。何とかして > チノンの方)

 来週はLXDCの公開をしようと思っている。動作のチェックやドキュメントの 整備に追われそう。(でも何より TRAIN データの公開準備の方が大変。そちらの 方も乞うご期待)

(なんだか解析ネタが少なくなってきたので日記の間隔も長くなりそうです。)


解析日記に戻る
伊藤 栄一郎/ GHC02331@niftyserve.or.jp