◎QV-10/10a/11/30/70/100/200/300/700/770 player "QVplay" Ver. 0.95
                                                          1999.05.05

●これはなんですか?

QV-10に始まるCASIOの液晶デジタルカメラQVシリーズは近年まれにみる
素晴らしい製品ですが、残念なことにパソコン接続キットの
パソコンリンクソフトはWindowsまたはMacintoshでなければ動きません。

日頃、主にFreeBSDやLinuxなどのUnix環境を利用しているユーザにとって、
カメラからデータを吸い上げ、JPEG、TIFF形式等の画像ファイルに
変換するために、Windows/Macを使用しなければならないという状況は
苦痛ともいえるでしょう。(^^)

幸い、cam形式ファイルからのファイル変換については、岩間さんの解析情報、
のおかげでitojunさんのcam2jpeg、仙田さんのcamtoppm.plを利用することがで
きるようになりました。

あとはカメラからデータの吸い出しさえできれば...

それを行なうのがqvplay(qvplay.x, qvplay.exe)です。

#ことわらなくてもわかると思いますが、X680x0な人は以下の説明
#でのqvplayをqvplay.xに、WindowsNT/95な人はqvplay.exeに読みかえて
#ください。

#Ver. 0.90からfine modeをもつQVシリーズにも対応してますので、
#以下の説明でのQV-10というところはQV-100/200/300等
#に読み代えてください。またQV-10a/30/11/70はQV-10と互換のはず
#ですので同様に読み代えてください。

#Ver. 0.95からeconomy/normal/fine modeをもつQVシリーズに
#も対応してますので、以下の説明でのQV-10というところは
#適宜QV-700/770に読みかえてください。QV-700/770については
#撮影、電源電圧の表示等、一部使えない機能があります。

#QV-5000SX/QV-7000SX、QV-2000UX等のSXシリーズ、UXシリーズ
#では使えません。

qvplayを使えば
・QV-10からの画像データの取り出し
・QV-10のLCD画面に好きな画像番号の画像を表示する
・QV-10に記録されている画像の枚数を表示する
・QV-10に記録されている画像のうち好きな画像番号の画像を削除する
・QV-10のシャッターを切る(撮影する)
ことができます。また、qvrecを使えば
・QV-10へPPM形式、RGB形式、CAM形式の画像ファイルを書きもどす
などの操作を行なうことができます。
また、Ver.0.90からqvplayはQV-100のFine画像(640x480)に
対応しています。(qvrecは従来のNormal画像のみ)
また、Ver.0.95からqvplayはQV-700/770のFine/Normal/Economy画像(640x480)に
対応しています。(qvrecは未対応)

●作者
  林 謙一 xg2k-hys@asahi-net.or.jp
  itojunさん itojun@itojun@itojun.org

●注意
以下の事項に納得した方のみしか本ソフトウェアqvplayを利用しては
いけません。

・本ソフトウェアを使用することによってQV10、およびその中に
  収められている画像データ等が致命的破壊を被る可能性があります。
・本ソフトウェアを使用することによって生じる損害、不利益等に
  ついて、林は一切の責任を負いません。
・本ソフトウェアに付随する資料の内容によって生じる損害、不利益等
  について、林は一切の責任を負いません。
・場合によっては接続ケーブルを改造する必要があります。
  (古いFreeBSD、NEXTSTEPはこの改造が必要です。)
・本ソフトウェアを使用することによってQV10、接続ケーブルが故障
  したとしてもCASIOさんに質問することは絶対にしないでください。
  (修理依頼するときはWindows/Mac版の通信ソフトで現象を
   確認してからにしてください)
・通信プロトコルの調査は Windows NT3.51J上で
  パソコンリンクソフトウェア for Windowsをうごかした結果に
  基づくものです。なお、CASIOのパソコンリンク
  ソフトウェア for WindowsはWindows NT上での動作は保証して
  おりませんので、解析結果はあまり信用できません。(^^;;;
・qvplay(とqvrecとqvalldel)の開発にはitojunさんをはじめたくさんの方々
  の御協力がありましたが、当然のことながら上記の免責事項は
  その方々にも適用されます。
・qvplay(とqvrecとqvalldel)はいわゆるフリーソフトウェアです。
  使用に際しては特にフィーを請求しません。
  ただし、くる物は拒みません。(^^)
・qvplay(とqvrecとqvalldel)を商用ソフトウェアの一部として配布することは
  禁止しませんが、林をはじめqvplayの開発に関係された方々はそれに
  対して一切のサポートおよび、責任を負いません。
・qvplay(とqvrecとqvalldel)のVer 0.95は自由に配布してもらって
  構いませんし、ソースを別のプログラムに組み込んで使っても
  構いません。また、得に連絡の必要はありません。
・何かライセンスらしきものが欲しい場合は、BSDスタイルか、LGPLの
  好きな方を選んでください。
・Ver 0.10aと0.95以外のバージョンは得にアナウンスがあるものを除いて
  開発中またはすでに古いバージョンですので再配布を禁止します。

●動作(確認)環境
*Unix系OS
・PC/AT互換機 Linux 1.2.13、1.3.20、2.0.35、2.0.36
  (RedHat 5.2J、OpenLinux 1.3、TurboLinux 3.0、Slackware 3.1、
   VineLinux 1.1、PlamoLinux 1.3)
・PC/AT互換機 Linux 2.2.X
  (VineLinux 2.0、Slackware7.0、Laser5 Linux 6.0 rel.2、
   Laser5 Linux 6.2、Red Hat 6.1J、RedHat 6.2J、
   TurboLinux 4.2、TurboLinux 6.0WS(J)、Omoikane Linux 1.1、
   Kondara/MNU Linux 1.1、Kondara/MNU Linux 1.2)
・PC/AT互換機 BSD/OS 2.0
・Sony NEWS-3150U2 NEWS-OS 4.2.1RN
・Sony NEWS-1860 NEWS-OS 4.2C
・Sony NEWS-4000 NEWS-OS 6.1.2
・NEC EWS4800 Rel.4.4 Rev01
・Sun Sparc Station 20 Solaris2.3(SunOS 5.3)
・Sparc互換機 SunOS 4.1.4
・Apple Macintosh SE/30 NetBSD 1.0
・PC/AT互換機 FreeBSD 2.2.6R
・PC/AT互換機 FreeBSD 2.0.5R 2.1.0R(*)(**)
・NeXT NeXTcube(M68040-25) NEXTSTEP 3.3J(*)

*非Unix系OS
・SHARP X68030 + Human68k 3.02
・PC/AT互換機 Windows NT 3.51/4.0(Intel系) DOSプロンプトで動かします
・PC/AT互換機 Windows 95 DOSプロンプトで動かします
・PC/AT互換機 OS/2 Warp 3.0(Intel系) コマンドプロンプトで動かします

  (*)印のあるものは後述の通信ケーブルの改造が必要です。
 (**) FreeBSDについてはkernelのソースパッチをあてると
     RTSがoffのまま、通信ができるようになり、ケーブルの
     改造は必要なくなります。詳しくはREADME.FreeBSDを
     参照してください。
     また、FreeBSD 2.2 Release以降のものは上記パッチは
     必要ありません。

●ソースセットの内容物
  README このファイル(JIS)
  README.FreeBSD 古いFreeBSDカーネル(2.0.X, 2.1.X)へのパッチ(JIS)
         (FreeBSDカーネルへのパッチは下川さんによるものです。)
  PROTOCOL.txt QV10との通信プロトコルの説明(JIS)
  PROTOCOL.eng 
  HISTORY 開発履歴(JIS)
  FAQ.txt 良くある質問(JIS)
  install-sh
  setup         
  obj/
     Win32/
         config.h
         getopt.c (GNUのgetoptです。)
         getopt.h (GNUのgetoptです。)
         tty_w32.c
         tty_w32.h
         その他必要なソースはsrc/からシンボリックリンク
         しています。
     X68k/
         Makefile
         config.h
         siochk.c (増田さんよりソースをお借りしております(_ _))
         tty_x68.c
         tty_x68.h
         x68k.c
         その他必要なソースはsrc/からシンボリックリンク
         しています。
     os2/         (OS/2への移植は大久保さんによるものです)
         README.OS2 (ver.0.10のOS2対応パッチに含まれていたREADMEです。)
         os2.mak
         config.h
         qvplay.def
         qvrec.def
         tty_os2.h
         tty_os2.c
         その他必要なソースはsrc/からシンボリックリンク
         しています。
     dos/       (DOS(MCDドライバ利用)への移植は須田さんによるものです)
         readme.txt (ver.0.10のDOS対応パッチに含まれていたREADMEです。)
         makefile
         config.h
         mcd_if.h
         mcdcall.c
         mcdcall.h
         tty_dos.h
         tty_dos.c
         その他必要なソースはsrc/からシンボリックリンク
         しています。
  src/
     qvplay.c
     qvrec.c
     qvalldel.c
     qvplay.1
     qvrec.1
     qvalldel.1
     common.h
     command.h
     command.c    
     command1.h
     command1.c    
     command2.h
     command2.c    
     command3.h
     command3.c    
     getuint.c
     getuint.h
     tty.h
     tty.c   
     jpeg.h     
     jpeg.c
     ppm.h
     ppm.c
     bmp.h
     bmp.c
     cam2jpgtab.h (itojunさんのcam2jpgからお借りしております(_ _))
     jpegtab_f.h
     configure*
     Makefile.in
     configure.in
     config.h.in

●X680x0用バイナリセットセットの内容物
  README  このファイル(SJIS)
  HISTORY 開発履歴(SJIS)
  FAQ.txt 良くある質問(SJIS)  
  qvplay.x
  qvrec.x
  qvalldel.x

●WindowsNT/95用バイナリセットセットの内容物
  README  このファイル(SJIS)
  HISTORY 開発履歴(SJIS)
  FAQ.txt 良くある質問(SJIS)  
  qvplay.exe
  qvrec.exe
  qvalldel.exe

●Unix系OSでコンパイルする方法
ttyがつかえるUnix系OSならほぼ問題なくコンパイルできると思います。

1. ./setup os名   (os名は適当でいいです。c.f. linux, newsos4 ...
                   unameが使える環境であれば ./setup だけでもいいです)
2. cd obj/os名
3. ./configure
4. obj/os名 に出来上がるcommon.h の #define RSPORT
   をお使いになるttyデバイスのスペシャルファイル
   に変更してください。
   または、
     ln -s /dev/ttyS0 /dev/qvtty
   として、使いたいttyデバイスに/dev/qvttyというシンボリックリンクを
   作るようにしてください。
5. obj/os名 に出来上がるMakefile の install:のところで、
   $(INSTALL_PROGRAM) -s -o root -g uucp -m 2755 $(PROG1) $(bindir)/$(PROG1)
   等としているところの -o root -g uucp の部分が
   使おうとしているttyデバイスのスペシャルファイルの
   owner/groupと同じになっているかどうか確認してください。
   たとえばLinuxの場合、
   % ls -l /dev/ttyS0
   crw-rw----   1 root     uucp       4,  64 May  6  1998 /dev/ttyS0
                  ↑owner  ↑group
   で確認できます。 違っている場合、Makefileの内容を変更してください。
6. make
7. su
8. make install

OSの種類とRSPORTのスペシャルファイルの例
(PC Unixの場合、以下の例ではCOM1になります)
・Linux 2.2.X 2.3.X       #define RSPORT "/dev/ttyS0"
・Linux 1.2.X 1.3.X 2.0.X #define RSPORT "/dev/cua0"
・BSD/OS 2.0              #define RSPORT "/dev/tty00"
・NEWS-OS 4.2.1RN         #define RSPORT "/dev/tty00"
・NEWS-OS 4.2C            #define RSPORT "/dev/tty00"
・NEWS-OS 6.1.1           #define RSPORT "/dev/term/00"
・SunOS 4.1.4             #define RSPORT "/dev/ttya"
・Solaris2.3(SunOS 5.3)   #define RSPORT "/dev/ttya"
・NetBSD 1.0              #define RSPORT "/dev/tty00"
・EWS4800 Rel.4.4 Rev01   #define RSPORT "/dev/term/00"
・FreeBSD 2.1.0R 2.2.0R   #define RSPORT "/dev/cuaa0"
・NEXTSTEP 3.3J           #define RSPORT "/dev/ttya"

●X680x0でコンパイルする方法
ディレクトリobj/X68kのソースとsrc/のソースを使って
gcc & gmake & libc でコンパイルして下さい。
具体的には

ソースをX680x0上で展開
cd QVplay\obj\X68k
copy ..\..\src\*.c . (必要に応じて)
copy ..\..\src\*.h . (必要に応じて)
gmake -f Makefile
qvplay.x、qvrec.x、qvalldel.xが出来上がる

という手順です。
X68k\ディレクトリ中でシンボリックリンクになっている
ソースが見当たらないばあい、上記のcopyコマンドが必要です。

●Windows NT(Intel系)でコンパイルする方法
ディレクトリobj/Win32のソースとsrc/のソースを使って
VisualC++4.1でコンパイルしてください。
(VisulC++2.0や4.0や5.0、6.0でも問題ないと思います。たぶん)
具体的には

ソースをWindows NT上で展開
cd QVplay\obj\Win32
copy ..\..\src\*.c . (必要に応じて)
copy ..\..\src\*.h . (必要に応じて)
nmake -f Makefile
qvplay.exe qvrec.exe qvalldel.exeが出来上がる。

Unix系OSと同様にデフォルトのシリアルポートの
名前をcommon.h の #define RSPORT "COM1"
に定義してあります。必要に応じて変更して下さい。

Win32\ディレクトリ中でシンボリックリンクになっている
ソースが見当たらないばあい、上記のcopyコマンドが必要です。

●OS/2 Warp 3.0 (Intel系)でコンパイルする方法
EMX開発環境、OS/2用GNU makeが必要です。

ソースをOS/2上で展開
cd QVplay\obj\os2
copy ..\..\src\*.c . (必要に応じて)
copy ..\..\src\*.h . (必要に応じて)
make -f os2.mak
qvplay.exe、qvrec.exe、qvalldel.exe が出来上がる。

という手順です。

Unix系OSと同様にデフォルトのシリアルポートの
名前をcommon.h の #define RSPORT "COM1"
に定義してあります。必要に応じて変更して下さい。

os2\ディレクトリ中でシンボリックリンクになっている
ソースが見当たらないばあい、上記のcopyコマンドが必要です。

●DOS (MCD通信ドライバ使用)でコンパイルする方法
  Turbo C++ Ver 4.0、および、MCD Version 0.91がt必要です。
  詳しくはreadme.txtを参照してください。

ソースをDOS上で展開
cd QVplay\obj\dos
copy ..\..\src\*.c . (必要に応じて)
copy ..\..\src\*.h . (必要に応じて)
make する
qvplay.exe、qvrec.exe、qvalldel.exe が出来上がる。

という手順です。

Unix系OSと同様にデフォルトのシリアルポートの
名前をcommon.h の #define RSPORT "AUX1"
に定義してあります。必要に応じて変更して下さい。

dos\ディレクトリ中でシンボリックリンクになっている
ソースが見当たらないばあい、上記のcopyコマンドが必要です。
(注)DOS版はまだまだ動作が不穏です。(^^;;

●qvplay、qvrec、qvalldelを使うために用意するもの&準備
・CASIO 液晶デジタルカメラ 
   QV-10、QV-10a、QV-30、QV-11、QV-70
  (QV-11は試していませんがたぶん使えると思います)
  QV-100、QV-300、QV-200
  (QV-200は試していませんがたぶん使えると思います)
  QV-700、QV-770
  (QV-700は試していませんがたぶん使えると思います)
  (以下の説明ではすべてQV-10と書いていますが、上記の機種でも
   使えます)
・CASIO 液晶デジタルカメラ用パソコン接続キット for Windows
  (LK-1,LK-10DV,LK-10NC) の接続ケーブル
  または
・CASIO 液晶デジタルカメラ用パソコン接続キット for Machintosh LK-2
  の接続ケーブル
  または
・CASIO 液晶デジタルカメラ用パソコンリンクケーブル
  IBM PC/AT互換機用 QC-1D
  または
・CASIO 液晶デジタルカメラ用パソコンリンクケーブル
  PC9801用 QC-1N

(LK-とLK-2は、QV10との接続ケーブルは共通で、変換コネクタが
Dsub25-Dsub9か、Dsub25-MiniDinかの違いだけのようです)
(CASIOよりLK-10DV、LK-10NCの他にもLK-2aが発売されていますが、
 これについてはまだ動作したという報告は聞いておりませんが、
 たぶん大丈夫だと思います。)
(QC-1DやQC-1Nはケーブルのみの商品なので、X680x0ユーザや
 Unix専用マシンのユーザはこちらを買ったほうがいいでしょう。
 QV-1DとQV-1Nの違いはコネクタがDsub9ピンかDsub25ピンかの違いです。

 接続ケーブルでパソコンorワークステーションとQV10を接続してください。
あとはqvplayを使うだけ〜といきたいところですが、実はここでひとつ注意
があります。

 ご存知?のとおり、接続ケーブルには電子回路がくみこまれており、
RS-232CレベルからQV10用の電圧レベルに変換していると思われます。
その変換回路の電源として、CTS,DTRが+側電源、RTSが-側電源のよう
です。したがって、「RTSがoff、CTS,DTRがonでないと回路が作動
せず、QV10からのデータが流れて来ない」ようです。

 qvplayではRTSをoff、CTS,DTRをon にするようにしているのですが、
それでも何故かうまくデータが取れないことがあります。

 また、NEXTSTEP等のようにRTSをoffするとシリアルデータのやりとり
を止めてしまうOSもあります。(これはRTS線の意味を律義に正しく
実装しているということであり、OSの能力、仕様がおかしいという
わけではありません。ちょっと融通の効かない奴だという気は
しますが。(^^)
(FreeBSDについてはREADME.FreeBSDを参照してください。)
 もし、qvplayを使おうとするOSがRTSをoffしたまま通信することが
できないようなものの場合、以下のような改造を行なう必要があります。

・接続ケーブルのRS-232C側の4番ピン(RTS)を7番ピン(GND)と
  ショートさせる
   
これでRTSは常にoff(厳密にはoffじゃないですが)になり、変換回路が
作動するので、QV10からのデータは常に流れて
来るようになります。接続ケーブルを改造するのが嫌な場合は
RS-232Cのジャンパボックス等を買って来て、

             ジャンパボックスの
(WS/PC側)    ♂側ピン      ♀側ピン(QV10接続ケーブル側)
        RTS  4         ┌──4  RTS
        GND  7 ────┴──7  GND
(その他のピンはストレート全結線)
(上記のピン番号は25ピンタイプのRS-232Cコネクタの番号です。
 9ピンタイプの場合は、それぞれ7(RTS)、5(GND)になります。)

のような配線をして、以下のように接続すればいいでしょう。

[WSのシリアルポート]--[ジャンパボックス]--[QV10接続ケーブル]--[QV10]

 なお、上記改造を行なってもCASIOのパソコンリンクソフト(Windows用)は
動作しました。

#何故かGNDへRTSを落とさなくても「接続ケーブルのRS-232C側の4番ピン
#(RTS)を抜いてしまう(接続しない)」でもなんとなく動いてしまう場合
#もあります。

#QC-1D、QC-1Nでは変換回路が黒い箱のなかに入っており、それがケーブルの
#途中にありますが、その箱を開けてみると回路基板にJP1という部分が
#あります。ここをショートさせると上記の改造と同じことになります。
#(当然ですが、メーカー保証はうけられなくなります。)

●qvplayの使い方

QV-10の動作状況は3種類あるようです。
 1. リセットモード
 2. コマンド待機モード
 3. コマンド処理中モード

リセットモードは電源投入直後の状態で、QV-10のボタン操作が可能です。
また、リセットモードでもホストコンピュータ側からの操作コマンドを
受け付けます。

コマンド待機モードはホストコンピュータ側からのシリアル回線による
操作コマンドを受け付ける状態です。この状態になった時には、QV-10の
ボタン操作は効かなくなります。

コマンド処理中モードはホストコンピュータ側からのシリアル回線による
操作コマンドを処理している状態で、この状態の間は、ホストコンピュータ側から
の操作コマンドはリセットコマンドを以外はうけつけないようです。

リセットコマンドはどういうモードでもうけつけるみたいです。

qvplayによってQV-10にいろいろな動作をさせることができますが、
その結果、コマンド待機モードに入ります。このままではQV-10の
キー操作ができませんので、なるべく後述の-rオプションを最後に
つけるようにして動作の最後にリセットモードに入るようにした
ほうがいいでしょう。

また、qvplayから「tty not respond.」のようなメッセージが
出てきたり、どうもデータ転送がされてないような気がする
場合、途中で中断したい場合はCTRL-Cで中断して下さい。
中断したときにはQV-10も電源を入れ直して下さい。

・usage
  qvplay オプション

 オプションの説明
 num : 画像番号、1〜96(QV-10/10a/30/11/70)
                 または1〜192(QV-100/300/200/770)の整数
                 (QV-700はメモリが許す限り?)
 filename : 出力ファイル名 文字列

 -h           簡単なオプションの説明を表示します。
 -r           QV10にリセット動作を行なわせます。
              QV10の画面がいったんクリアされ、QV10のボタン操作が
              有効になります。リセットされたからといって、QV-10の中
              の画像が消えてなくなるわけではありません。
 -n           QV10に記録されている画像の枚数を標準出力に表示します。
 -N           QV10に記録可能な画像の枚数(空き)を標準出力に表示します。
              *QV-700/770ではこの機能は正しく動きません。
 -p num       QV10のLCDの画像を画像番号のものに切替えます。
 -o filename  出力ファイル名の指定
 -F {jpeg,ppm,PPM,rgb,RGB,bmp,BMP,cam} 
              出力フォーマットの指定
              -a オプションまたは -g オプションと同時に使います。
              -a オプションまたは -g オプションよりも前に指定しないと
              フォーマットの指定が有効になりません。
              jpeg JPEG(JFIF)形式で画像データを出力します。
              ppm  PPM形式でthumnail画像データを出力します。
              PPM  PPM形式で画像データを出力します。
              rgb  RGB(Q0)形式でthumnail画像データを出力します。
              RGB  RGB(Q0)形式で画像データを出力します。
              bmp  BMP(24bit)形式でthumnail画像データを出力します。
              BMP  BMP(24bit)形式で画像データを出力します。
              cam  CAM形式でthumnail画像と画像データを出力します。
              デフォルトはjpegが指定されている状態になります。
              フォーマット名は、実際は頭1文字しか判別
              していませんので、photoでもpictureでもppmと同じ
              です。
              QV-100の場合、Fine画像、Normal画像は自動的に認識
              し、それぞれのフォーマット(jpeg、PPM、RGB、cam)で
              書き出されます。
              QV-700/770の場合、画像の大きさはすべて640x480ですが、
              画質(Fine/Normal/Economy)は自動的に認識し、
              それぞれのフォーマット(jpeg、PPM、RGB、cam)で
              書き出されます。
              DOS用qvplay.exeではフォーマット指定にPPM, RGB, BMP
              は使用できません。
 -g num       画像番号の画像をを-Fオプションで指定した形式に
              変換して出力します。
              -o オプションが指定されていれば、そのファイル名で、
              -o オプションが指定されていなければ、標準出力へ
              出力します。
 -a           QV10に記録されているすべての画像を-Fオプションで
              指定した形式に変換して出力します。
              -F オプションが指定されていないとき、
              -o オプションが指定されていれば、
              filename_001.jpg
              filename_002.jpg
              filename_003.jpg
              .....
              というファイル名で出力されます。
              -o オプションが指定されていなければ、
              qv_001.jpg
              qv_002.jpg
              qv_003.jpg
              .....
              というファイル名で出力されます。
              -F オプションが指定されている時はそれぞれ、
              *.ppm、*.cam 等のようになります。
              -s、-eオプションを使うことで、全部の画像ではなくて、
              出力する画像の画像番号の最初と最後を指定することができます。
 -s num       -a、-I オプションと同時に使います。
              -a、-I オプションよりも前に指定しないと有効になりません。
              出力、レポートする最初の画像番号を指定します。
 -e num       -a、-I オプションと同時に使います。
              -a、-I オプションよりも前に指定しないと有効になりません。
              出力、レポートする最後の画像番号を指定します。
 -v           -a オプションまたは -g オプションと同時に使います。
              -a オプションまたは -g オプションよりも前に指定しないと
              有効になりません。
              データ転送動作を標準エラー出力に簡単にレポートします。
              表示される数字は画像番号とデータ転送バイト数を示します。
              (できあがるJPEG、CAM等のファイルの大きさではありません。
               ファイル形式によりますが、ファイルサイズより少し小さい
               数字が表示されます。)
 -d num       画像番号の画像をQV10から削除します。
 -4 num1,num2,num3,num4
              QV10のLCDを4分割画面にし、指定した4つの画像番号
              のものを表示します。画像番号は同じものでもかまいま
              せん。また、画像番号の指定は1〜4つのいくつでもか
              まいませんが、3つ以下の場合は省略した部分は最後に
              指定した画像番号の次のものになります。
              例えば -4 4,6 と指定した場合 -4 4,6,7,8と指定した
              ことと同じことになり、QV10のLCDには
                 4  6
                 7  8
              の順に画像が表示されます。
              QV10内の画像が4つ以下の場合、最後の画像が繰り返して
              表示されます。
 -9 num1,num2,....num9
              QV10のLCDを9分割画面にし、指定した9つの画像番号
              のものを表示します。画像番号は同じものでもかまいま
              せん。また、画像番号の指定は1〜9つのいくつでもか
              まいませんが、8つ以下の場合は省略した部分は最後に
              指定した画像番号の次のものになります。
              例えば -9 4,6 と指定した場合 -9 4,6,7,8,9,10,11,12,13
              と指定したことと同じことになり、QV10のLCDには
                 4  6  7
                 9  9 10
                11 12 13
               の順に画像が表示されます。                 
              QV10内の画像が9つ以下の場合、最後の画像が繰り返して
              表示されます。
 -P num       指定した画像番号の画像にプロテクトをかけます。
 -U num       指定した画像番号の画像のプロテクトを解除します。
 -i num       指定した画像番号の画像にプロテクトがかけられているか
              どうかを標準出力にレポートします。
	      QV100の場合640x480画像か480x240画像かもレポートします。
 -I           QV10に記録されているすべての画像のプロテクト状態
              をレポートします。
	      QV100の場合640x480画像か480x240画像かもレポートします。
              -s、-eオプションを使うことで、全部の画像ではなくて、
              レポートする画像の画像番号の最初と最後を指定する
              ことができます。
 -t           撮影します。(QV10のファンクションスイッチを
	       RECの位置にしてください)
              *QV700/770ではこの機能は使えません。
 -V           QV10の電源の状態をレポートします。
              (表示される値は概算です。正確ではありません。)
              *QV700/770ではこの機能は使えません。
 -0           オーではありません。ゼロです。
              QV10の電源をOFFします。
 -1           オートパワーオフ機能を無効にします。
 -7           QV10のLCDに7色のカラーバーを出します。
              カラーバーが出ている状態では他の操作ができない状態に
              なりますので-rコマンドや電源ON/OFFによってQV-10を
              リセットモードにする必要があります。
 -D ttydevice QV10と通信を行なうttyデバイスを変更します。
              WindowsNT/Windows95の場合は COM1〜COM4を
              指定して下さい。
              デフォルトのttyデバイスはソースのcommon.hに
              定義したものになります。(/dev/qvtty)      
              X680x0の場合は内蔵シリアルポート以外は選べ
              ませんのでこのオプションは無効です。
 -S {normal,mid,high,top,light} または {1,2,3,4,5}
              QV10との通信速度を変更します。
              1 normal   標準速     9600 baud
              2 mid      中速      19200 baud
              3 high     高速      38400 baud
              4 top      超高速    57600 baud
              5 light    光速(^^; 115200 baud
              速度名は、実際は頭1文字しか判別
              していませんので、hyperでもhogehogeでもhighと同じ
              です。
              (top以上のスピードは環境によっては使えません)
              (X680x0ではmid以上の速度を使う場合はtmsio.x等の
               高速シリアルドライバを常駐するようにしてください。 )
(X680x0のみ)
 -X num       画像番号の画像をX680x0のグラフィック画面に
              表示します。表示領域は480x480です。
              X680x0のグラフィック画面の都合上、
              5,5,5の15bit colorに減色されて表示されます。
              QV100のFine画像の場合も表示画像は480x480です。
 -z           REC/PLAY SWの状態やCCDカメラ部分の状態を表示します。
              *QV700/770ではこの機能は使えません。
 -Z           本体バージョンと思われる値を4バイトの16進数で表示します。
              詳細はPROTOCOL.txtを参照してください。

-rオプションをのぞき、qvplayによる動作を行なった結果、QV10は
コマンド待機モードに入ります。動作させたあと、QV10のボタン操作
を有効にしたいばあいは、必ず-rオプションをつけるか、QV10の電源
をいったんOFFにして電源を再投入してください。
また、一部のオプションは-rオプションを後につけてリセットしないと
その効果がわからないもの(-dの削除等)もあります。

オプションは書いた順番どおりに左から右に解釈、実行されます。
同じオプションを何度書いてもかまいません。
ただし、-s -e -o -v  オプションについてはそれが効果をおよぼす
オプション(-a -g -I)よりも左側に書かないと効果がありません。

-h オプションは実行された瞬間、usageを表示してqvplayを終了
します。以降に書かれたオプションは無視されます。
 
QV10から出力されるJPEG形式、PPM形式、RGB形式、BMP形式の
ファイルは画像がNormal画像の場合、480x240の横長サイズに
なっていますので通常の使用のためには、xv等の画像処理ツールで
アスペクト比を4対3に補正する必要があります。
QV100/QV770の640x480画像の場合は、アスペクト比が1:1なので、
補正する必要はありません。

X680x0の場合、アスペクト比が都合良く4対3に近いので、
-Xオプションでグラフィック画面に表示した画像は補正しなくても
それなりに見えます。(厳密には4:3じゃないので気になる場合は
補正してください。)

通信速度指定オプションより右のオプションから指定した通信速度が
有効になりますので、 通信速度の指定はなるべく左側に書いて下さい。
また、機種、OSにより、通信速度の限界はさまざまです。
(例えばNEWS-OS4.2Cとかは9600baudが限界)
 
-rオプションは実行されると通信速度を標準速(9600baud)に戻します。

また、すべてのオプションを実行し終った後、qvplayが終了する時も
通信速度を標準速(9600baud)に戻します。
 
古いLinux環境(glibc2以前のもの)などでは、通信速度のうち、
high以上を使う場合は注意が必要です。

古いUnix系OSでは、シリアルポートの通信速度はB38400までですので、
-S high までしか使えません。
また、古いLinux環境ではLinuxのsetserialコマンド等のように
38400baudに設定すると実際には57600baudや、115200baudが
使えるものもあります。このような場合(コンパイルすると、
B57600、B115200が未定義である、等のエラーが出る場合)、
MakefileのCFLAGS = に -DCANNOTUSEHIGHSPEEDを追加して
コンパイルしてください。
この場合、qvplayの内部ではhighも、topも、lightも
B38400に設定していますので、top、lightを使う場合は、あらかじめ
setserialコマンド等を使ってシリアルポートの設定を行なって下さい。
(FreeBSDや最近のLinuxについては素直にB57600、B115200が使えるので、
 そのように設定しています。setserial等のコマンドは必要ありません。)
 例1
    setserial /dev/cua1 spd_hi        57600baudに設定
    qvplay -S top -o hoge.jpg -g 1 
 例2
    setserial /dev/cua1 spd_vhi      115200baudに設定
    qvplay -S light -o hoge.jpg -g 1 
(115200baudでの転送はエラーが発生する場合が多く、
 結構シリアルカードの相性?に依存します。)

また、PC/AT互換機の場合、シリアルカードは16550A互換のもの
でないとmid以上のスピードを指定しても十分な速度が出ません。

環境変数QVPLAYTTYでは、コマンドラインオプション -D で
指定しなかった場合のデフォルトのシリアルポートの設定ができます。
Unix系OSの場合は「/dev/ttyS0」等のスペシャルファイルのパス名を
WindowsNT/95の場合は「COM1」〜「COM4」を指定してください。
X680x0の場合はシリアルポートは内蔵シリアルポートに固定です
ので環境変数QVPLAYTTYも無視されます。

・例題
    cjpeg/djpegはIndependent JPEG GroupのJPEGライブラリ
    のサンプルプログラム、
    pnm*とかppm*はpbmplus/netpbm の ツール類です。

 1. 簡易スライドショー
    qvplay -p 1 
    sleep 5
    qvplay -p 2
    sleep 5
    qvplay -p 3
    sleep 5
    .....
    qvplay -r

 2. とりあえず1枚データをとりだす
    qvplay -o hoge.jpg -g 10

 3. とりあえず1枚データをとりだしてアスペクト比の補正して
    interlace gifへ変換(Unix系OSの場合)
    (Normal画像の場合)
    qvplay -g 10 | djpeg |  pnmscale -xsize 320 -ysize 240 \
                 | ppmquant 256 | ppmtogif -interlace > hoge.gif
    (Fine画像の場合)
    qvplay -g 10 | djpeg -gif > hoge.gif

 4. とりあえずデータ全部とりだす(JPEG形式)
    qvplay -o hoge -a
 
    hoge_001.jpg, hoge_002.jpg ....というファイルが出来上がります。

 5. 4枚目のデータから10枚目のデータをとりだしてリセット
    取り出し状況も見たい
    qvplay -v -s 4 -e 10 -a -r
    
    qv_004.jpg, qv_005.jpg, ...... qv_009.jpg, qv_010.jpg, 
    というファイルが出来上がります。

 6. 6枚目のデータをrokuban.jpg、12番目のデータをjuuniban.jpg
    として取り出したい
    qvplay -o rokuban.jpg -g 6 -o juuniban.jpg -g 12

 7. 全部のデータのthumbnail部分を取り出したい
    qvplay -F ppm -a
   
    qv_001.ppm, qv_002.ppm ....というファイルが出来上がります。

 8. 8枚目のデータをCAM形式で取り出したい。
    qvplay -F cam -g 8 > No8.ppm

 9. TV電話ごっこ?(^^)
    (QV-700/770では使えません)
    QV10の画像全部消してから
    qvplay -t
    qvplay -g 1 | どうにかして相手に送る (をいをい^^)
    qvplay -d 1 
    撮影(-t)へもどる

10. 中速モードを使って1枚データをJPEG形式で取り出す。
    qvplay -S mid -v -o 10.jpg -g 10 

11. 光速モードを使ってデータをJPEG形式で全部とりだす。 
    (Linux、FreeBSD、OS2、WinNT/95 only)
    setserial /dev/cua1 spd_vhi  ←Linuxの場合
    qvplay -S light -v -a

    qv_004.jpg, qv_005.jpg, ...... qv_009.jpg, qv_010.jpg, 
    というファイルが出来上がります。

12. (X680x0 only) X680x0のグラフィック画面に6枚目のデータを表示
    qvplay -X 6

●qvrecの使い方
 
・usage
  qvrec [オプション] 書き込みたいファイル1 書き込みたいファイル2 ...

  指定した画像ファイルを順番にQV-10へ書き込んだ後に、
  QV-10をリセットします。
  画像ファイルはQV-10にすでに記録されている画像に追加される形
  で書き込まれます。
  ファイルを指定しなかった場合、標準入力からの入力を画像ファイルと
  して書き込みます。(1枚ぶんだけです)

 オプションの説明
 -h           簡単なオプションの説明を表示します。
 -v           データ転送動作を標準エラー出力に簡単にレポートします。
              表示される数字は画像番号とデータ転送バイト数を示します。
              (転送するCAM形式の画像ファイルの大きさではありません。
               ファイルサイズより少し小さい数字が表示されます。)
 -F {ppm,PPM,rgb,RGB,cam,CAM} 
              画像フォーマットの指定
              ppm または PPM     画像をPPM形式とみなします。
              rgb または RGB     画像をRGB(Q0)形式とみなします。
                                 FAL/IPRファイルは考慮しません。
              cam または CAM     画像をCAM形式とみなします。
              デフォルトはPPMが指定されている状態になります。
              フォーマット名は、実際は頭1文字しか判別
              していませんので、photoでもpictureでもPPMと同じ
              です。
              (!!QV100のFine画像には対応していません。!!)
              (!!QV700/770にも対応していません。!!)
              DOS用qvrecではフォーマット指定にPPM, RGB
              は使用できません。
 -D ttydevice QV10と通信を行なうttyデバイスを変更します。
              詳しくはqvplayのオプションの説明を参照して下さい。
 -S {normal,mid,high,top,light} または {1,2,3,4,5}
              QV10との通信速度を変更します。詳しくはqvplayの
              オプションの説明を参照して下さい。

(注意) 書き込む画像は。
         PPM形式の場合はraw(P6)フォーマットで、RGB各256階調の24bit
         カラー、大きさ480x240ドットのものしかうけつけません。
         RGB形式の場合もPPM形式と同様(480x240のみ)ですが、大きさ、
         階調等のチェックを一切行なわないので、注意してください。

・例題
 1. PPM形式の画像ファイルをQV-10へ書き込む
    qvrec file1.ppm file2.ppm file3.ppm
    すでにQV-10に4枚の画像が記録されていた場合、
    file1.ppmは画像番号5に、
    file2.ppmは画像番号6に、
    file3.ppmは画像番号7に、
    記録されます。

 2. 高速モードを使ってPPM形式の画像ファイルをQV-10へ書き込む
    画像ファイルの転送状況も見たい
    qvrec -v -S h file.ppm

 3. 標準入力からPPM形式の画像ファイルをQV-10へ書き込む
    cat file.ppm | qvrec

 4. CAM形式の画像ファイルをQV-10へ書き込む
    qvrec -F cam file1.cam

●qvalldelの使い方
 
・usage
  qvalldel [オプション]

  QV10に記録されている画像を全部削除した後に、QV10をリセットします。
  (注意!!)プロテクトをかけた画像も削除されます。
  起動すると、Are you sure? と聞いてきますのでyを入力すると、
  全画像が削除されます。

  FATAL ERRORになって♪きむらかずしさんのqv10faqにある
  リセット操作も効かないQV10の場合、このqvalldelを使う
  ことでQV10が復活する場合があります。
                      ~~~~~~~~~~~~~~

  qvalldel はダメモトでFATAL ERRORからの復活に使用するために
  作ったものです。通常の使用においての全画像の削除は、素直にQV10の
  [DELボタン][-]ボタンによる操作で行なってください。

 オプションの説明
 -h           簡単なオプションの説明を表示します。
 -f           Are you sure?のメッセージを出さず、いきなり
              全画像を削除します。
 -D ttydevice QV10と通信を行なうttyデバイスを変更します。
              詳しくはqvplayのオプションの説明を参照して下さい。

●画像フォーマットについて

・PPM形式
Unix系OSのフリーソフトnetpbm/pbmplusで扱われる標準フォーマットです。
P3形式とP6形式がありますが、qvplayではP6形式で出力します。
先頭にASCII文字で
P6\n
幅ドット数\n
高さドット数\n
255\n
の3行の文字列を書いた後ろに1ドットずつRGB3バイト
のデータをバイナリで続けたものです。
(厳密には\nはスペースやTABでもかまいませんし、
 '#'以降\nまではコメントになります。)

・RGB(Q0)形式
実は良く知らないのですが(^^;;、NiftyのFQLDフォーラムで
良く使われている画像フォーマットです。
幅、高さ、色の深み等の情報は一切なく、単純に
RGB3バイトのデータを並べたものです。
このままでは幅、高さの情報がないので、普通はFALファイル
またはIPRファイルと呼ばれるファイルと組で扱われます。
qvplayではFAL/IPRファイルは出力しませんので、以下のような
内容のFAL/IPRファイルをテキストエディタ等で作成して利用
して下さい。

*.FALの内容
(thumbnail画像の場合は480 240の部分を52 36に変更してください)
(Fine画像の場合は480 240の部分を640 480に変更してください)
F_ALL(V1.00)
  480   240     0     0
   1.00   255   255   255   0
*.IPRの内容
(thumbnail画像の場合は480 240の部分を52 36に変更してください)
(Fine画像の場合は480 240の部分を640 480に変更してください)
480 240 0 0

・BMP形式
Windows/OS2等で使われる画像フォーマットです。
qvplayではWindows 3.x形式、24bitカラーのBMP形式でファイル
出力します。

・JPEG形式
いわゆるJFIFですが、QV-10/100系の場合Normal画像は、
幅、高さが480x240、ノンインターリーブ形式、画像精度8、
コンポーネント3、色成分間引率2:3というちょっと変わった
ファイル形式ですので対応していないJPEGアプリケーション
も結構あります。
QV-100系のFine画像または、QV-700/700系のすべての画像は、
幅、高さが640x480、コンポーネント3、色成分間引率2:2の一般的?
なものですので、ほぼすべてのJPEGアプリケーションで
扱うことができます。

●他にあると嬉しいフリーウェア/シェアウェア

 紹介しているURLは適当にarchieで探したものです。
 このドキュメントを読んでいる時にはすでに存在していない
 かも知れませんので、注意してください。

・Unix系OSの場合
  cam2jpeg        (CAM形式からJPEG形式への変換フィルタ)
                  最近のバージョンはQV100のFine画像や、
                  QV700/770のCAMファイルに対応しています。
                  後述のxv3.10aとセットで使うと良いでしょう。
 <ftp://ftp.itojun.org/pub/digi-cam/QV10/unix/>

  netpbmかpbmplus (ファイルフォーマット変換フィルタ集)
 <ftp://ftp.info.eng.niigata-u.ac.jp/pub/X11/client/netpbm/>
  djpeg           (Independent JPEG Groupのjpegライブラリ
                   のサンプルとして入っています。jpegライブラリ
                  自体は下のxv-3.10aに附属しています。)

  xv-3.10a        (万能画像ビューア シェアウェア、アスペクト比、
                   色補正も簡単にできるので重宝しています。
                   シェアウェア代金は郵便局の国際送金を使って
                   送ることができます。)
 <ftp://ftp.airlab.cs.ritsumei.ac.jp/pub/X/xv-3.10a.tar.gz>

  xv-310a-jp-extension
                  (xvにPIC、PIC2等の日本でよく流通している
                   画像フォーマットを読み書きできるようにする
                   パッチ。itojunさんのcamtojpegがあれば、
                   CAM形式も扱えるようになるので、これと
                   qvplayがあれば超極楽です。^^)
 <ftp://ftp.airlab.cs.ritsumei.ac.jp/pub/X/xv-jp-extension/>

・X680x0の場合
  PIC.XかAPIC.X   (言わずと知れたPIC画像ローダ&セーバ。
                   qvplay.xの-Xオプションで画面に表示させてから
                   PIC.XでセーブするとPIC形式のファイルが作れます)
 <ftp://ring.vector.co.jp/archives/common/x68/graphics/>

  VIEWCAM.X       (CAM形式を表示できる画像ローダです。これで
                   X680x0でもcam形式で画像を保存しておけばいつでも
                   画像を見ることができます。)
 <http://www.vector.co.jp/authors/VA004839/>

  TMSIO.X等       (いわずと知れた高速シリアルドライバ。
                   mid(19200baud)以上の速度で転送を行なう場合は
                   あらかじめ常駐するようにしてください。)
 <ftp://ring.vector.co.jp/archives/common/x68/comm/tmn/>
                   
・WindowsNT/95の場合
  Susie32         (万能画像ビューア、プラグインを追加することで
                   いろいろなフォーマットの画像を扱えます。
                   βバージョンながらCAM形式のプラグインもあります
                   ので、これとqvplay.exeがあれば超極楽です。^^)
                   SusieとCAM用プラグインはホームページ
                   <http://www.st.rim.or.jp/~otake/>
                   から取って来れます。

  QVE.EXE         (qvplay.exe用のWindows用GUIです。)
                  NIFTY の FWINMM LIB-6にあるようです。

・その他
  電子工作の趣味のある方は山本さんの"QV10<URA>Info"が
  参考になるかもしれません。
  <http://www.kiwi-us.com/~mohyama/article/QV10/>

  DOS用を使う場合は、須田さんのホームページが参考になります。
  MCDも置いてあります。
  <http://http://fujita.kuee.kyoto-u.ac.jp/~suda/qv/>

  OS/2の方はStermという通信ソフトに附属のSTCOM.SYSを使うと
  -S lightが使えるらしいです。

  どうしてもRTSがOFFにならないOSを使っている場合や、
  光速(115200baud)モードを使いたい場合は堀本さんや
  GAMMA宮本さんのホームページで紹介されているMAX232を
  使ったシリアルインタフェースを使ってみるといいかも知れません。
  <http://www.bekkoame.or.jp/~horimoto/QV-MAX/>
  <http://home.interlink.or.jp/~gamma/qv10.html>

●データ転送にかかる時間(参考)
  QV-10のNormal画像96枚のデータをJPEG形式で全部取り出すの
  にかかった時間です。
  (486DX4 Linux 1.2.8 で qvplay -S n -v -a として計測)
    速度               時間
  1 normal   標準速    38分31秒
  2 mid      中速      31分32秒
  3 high     高速      11分52秒
  4 top      超高速      9分27秒
  5 light    光速        7分01秒
  いったん光速モードに慣れるともう標準速は使えません。(^^)

●謝辞
・cam形式の解析を行なって下さった岩間さん
・camからjpegへの変換ソフトウェアをつくって下さったitojunさん、仙田さん
・qv10faq.txtを作成してくださった♪きむらかずしさん
・通信プロトコルについて非常に有益な情報をくださった
  Brahmaさん、Gotoさん、marioさん、Yatoさん
・X680x0版について動作テスト&アドバイスをいただいた増田さん、柳川さん
・NT/95版について動作テスト&アドバイスをいただいたばかりか、
  GUIプログラムQVW.EXEまで作ってくださった平野さん
・OS/2版を作成してくださった大久保さん
・DOS版を作成してくださった須田さん
・X680x0用CAM画像ローダviewcam.xを開発してくださったあさとさん
・FreeBSDのRTS端子の問題を解決する方法を教えてくださった下川さん。
・電池電圧レポート機能のための詳しいデータを計測してくださった桑田さん
・QV100を貸してくださった木村さん。(木村さんのご協力なしではqvplayの
  QV100対応はありえなかったでしょう。)
・HP100/200LX用qvplayのQVRemoteを作成してくださいった雀部さん
・qvplayの動作テスト報告&アドバイスをいただいた
  itojunさん、久田さん、野萱さん、♪きむらかずしさん、
  大内さん、安田さん、一色さん、松山さん、増田さん、
  平野さん、藤田さん、今井さん、大庭さん、姫野さん、
  村井さん、はねさん、坊農さん、村尾さん、大久保さん
  田渕さん、ひばらさん、柳川さん、奥野さん、所さん、
  山本さん、亀岡さん、宮本さん、Linus Jinさん、
  多田さん、依田さん、久門さん、Robert Buntingさん、
  Stuart Inglisさん、Ed Wangさん、中井さん、
  Emerson Brasil Gomesさん、Johan Verner Olsenさん、
  Brian Fahrlanderさん、おもてさん、Jason Froebeさん、
  森さん、狐崎さん、 佐々木さん、佐藤さん、
  Ed Grimmさん、Ferenc Papaiさん、Jean-Baptiste Nivoitさん、
  Jason Froebeさん、Magnus Therningさん、Ed Grimmさん、
  他、沢山の方々。(順不同)
・通信プロトコル説明英語版の私のアヤシゲな英語を矯正してくださった
  Erica Sadunさん
・英語版man page を書いてくださいましたBob Heppleさん、
・怪しい英語版のREADMEを校正してくださったEd Grimmさん
・そして、QV-10を企画設計生産販売修理(^^;してくださったCASIOの皆様

●わかっているバグ/仕様
・QV-100/300でqvplayの -t(撮影)オプションが正しく作動しない
・qvrecはQV-100系のFineモードやQV-700/770に対応していない
・DOS版はいまいち(特にfineモード)まともに動かない(^^;;;;

●今後の課題
 qvplayシリーズはこのバージョンをもって開発を終了します。
 以下の課題がまだ残っていますがだれか挑戦しませんか?
・通信プロトコルのさらなる解明
・-tオプション(撮影)の安定稼働
・qvrecのQV-100/300/700/770への対応
・DOS版の動作安定化
・nvに対応させてCUSeeMeする。(3コマ/分ぐらいならいけそう)

●皆様への要望
・バグレポート、改善要求は大歓迎です。
  (xg2k-hys@asahi-net.or.jpまでどうぞ)
・各種Unixプラットフォームでの動作確認も大歓迎です。
・各種環境への移植も大歓迎です。
  (何故かQV-10の解説本だけ出てるB-TRONって…いったい?)
・NEXTSTEPでRTSをoffにしたままシリアル通信する方法、
  誰か教えて下さい


林謙一のホームページへ戻る