諦めた」と書いたPQI Air Card II(以下、Air Card)でのデジカメ画像の転送であるが、実は密かに日夜続けていたw(投稿の間が空いたのはそのせいだ) 買ったお金が無駄になるのが嫌なのでなく、「できそうでできない」というムカつかせる状態や僕の好奇心がそうさせていた。毎日、夜には諦めて片付けるものの、朝起きると新しいアイデアが浮かび、引っ張り出して試し、結局駄目でがっかりして、「もう諦めた!」と決意を堅くして仕舞うの繰り返しだった。

大きな問題は以下だった。

  • 電源をonにした時、通常はWi-Fi(Linuxも)を起動させないようにする。
  • デジカメから、Linuxを起動するかどうかの切り替えができるようにする。

切り替える手段がほとんどないので、Air CardやFlashAirのやり方をならって、特定の画像を削除することにした。ただ、前にも書いたように、切り替え機能を実現するベースに使おうとしているファームウェア更新プログラム(program.bin)ではifなどの条件判定ができないうえに、入手したu-bootをコンパイルしてもなぜかうまく動かない機能が多いので、どうしても、「あるファイルがあったら*する/しない」という判定ができずにいた。

それが、昨夜ふと思い付いたことで可能になった。

program.binは、SD内にファームウェアの更新に必要なファイルがあるかどうかを判定して(u-bootの)ファイル読み込みやフラッシュ書き込みコマンドを実行しているので、その判定処理を使うのだ。具体的には、例えば、SDにあるImage3というファイルをフラッシュに書き込むコマンドは、program.binの中に以下のような文字列で書かれている。

fatload mmc 1 208000 image3; sf erase 200000 300000; sf write 1ffc00 200000 300000

今までは、そこにファイル有無を判定するコマンドを入れて失敗していたのだが、そもそも、Image3がある時だけこれが実行されるのだから、これが呼ばれる前にImage3というファイルの有無の判定処理があるはずで、それが使えるのだ。それで、書き込みコマンドを以下のように書き換えれば、SDにImage3がある時には、(しばらくの間: 10万秒(= 約1日)を期待する)Linuxを起動させないようにすることができる(u-bootにはシステムを止めたり何もしないでいるコマンドがないので、sleepを使った)。

sleep 100000

そのように書き換えて(実際には、コマンドを書けるサイズが大きいのでpreprog_chk.binというファイル用の領域を使った)、SDに対象のファイルを作って起動したら、当たり前ながらLinuxは起動しなかった。

実際にデジカメから設定できるようにするには、設定に使う画像ファイルはDCIMディレクトリの下になければならないのだが、運良く乗り越えられた。program.binの中には、存在を確認するファイル名を格納している領域があるので、そこに判定に使いたいファイル名(例: DCIM/100_CTRL/nowf0001.jpg)を書き込めば良い。実際には、本来のファイル名より実際のファイル名が長いからオーバーしてしまうのだが、たまたま、その後にメッセージの文字列が入っていたので、そこまで使って格納できた。メッセージは見えないので、おかしくても全く問題ない。具体的には、

preprog_chk.bin\0pre-program check passed.

DCIM/100_CTRL/nowf0001.jpg\0 check passed.

に変えた(文字列中の"\0"は、文字列の終端を示す文字である。\0は記載したそれぞれの文字列の最後にもあるが、省略している)。これで、DCIM/100_CTRL/nowf0001.jpgがある時はWi-Fi(Linuxも)は起動せず、それをカメラで削除して電源を入れ直せばWi-Fi(Linuxも)が起動するようになる(Linuxが起動したら、削除した設定用ファイルなどを復活させるようにした)。なお、デジカメはディレクトリ名やファイル名や画像のサイズを細かくチェックしているので、それらを規格や仕様に合わせないと、デジカメにエラーが出たり画像が表示されなかったりするので、注意が必要だ。

画像の削除でWi-Fi(Linux)をonにできるようになった

ここで、動作確認していたら問題が見付かった。Linuxを起動させないようにするsleepの待ち時間が想定よりかなり短いことが分かった。調べたら、約1日は持つと思っていた"sleep 100000"が約4分で終わってしまった。どういう訳か、単位が秒でなく1/416秒程度だったようだ。仕方ないので、約1時間ごとに繰り返すように、以下のようにした(調べたところでは、アドレスe00000にジャンプするとプログラムが(再)起動するようなので、そうした)。

sleep 1440000; go e00000

ようやく、実使用時の操作方法でPCに画像を転送できるように(実際にはPCから画像が取り込めるように)なったと思いきや、更に大きな落とし穴があった。

デジカメの省電力(自動電源off)機能だ。

今の状態ではWi-Fiでの転送速度はUSBに比べれば遅いが、改良していくら高速化しても、大量の画像を転送しているうちにデジカメの電源が切れる可能性が0にならないのだ。マニュアルによれば、5分で切れる(時間は変更不可・・・)。今日測定したら、1枚の転送に約6秒掛かっていたので、50枚以上取り込もうとしたら切れる。いくら高速化したって(現実には10倍だって無理だろう)、いつかは切れる。一方、USB(PTP)の場合は、カメラが自分で転送中と分かっているから、おそらく絶対に切れない。自分で転送しているのに切るのなら、とんでもない間抜けだ。

カメラは、挿さっているSDが勝手にWi-Fiで転送しているなんてことは知る由がないし、SDからカメラに「ちょっと電源切らないで」なんて言えないので、それを防ぐにはデジカメの省電力機能をoffにするしかないが、使っているうちに自分で電源を切り忘れる可能性があるから嫌だし、転送のたびに設定を変えるのは面倒だ(それならケーブルを繋ぐ方がいい)。

「Wi-Fi内蔵SD」は本質的に駄目だったのだ。

確かに、ちょっと前に見たページにも省電力機能と競合するのでWi-Fi SDは下火になったようなことが書いてあった。。。 これって、最初っから太刀打ちできないとか腐っているもの(例: 竹槍)を気合や根性でなんとかしようとしたけど結局は無駄で、他所の賢い人が考えた素性のいいものに完敗するという、日本の伝統ではないか!w (多分、「本物」は、この期に及んでも分割転送とかいろいろやるんだろうな・・・ 僕はもうお腹いっぱいだが)

散々苦労したし、渾身のシステムができそうでわくわくしていたものの、結局はお蔵入りだ。がっかりしたが、まあ、随分遊べて(ちょっとしたハッカーの真似事?w)おもしろかったし、いろいろなことが分かったので良しとしたい。

が、すごく疲れたー。

これで安心して本当に仕舞えるかな(micro SDだけ残してさっさと捨てたいくらいだw)。

最後に一言:

駄目なものはいくら頑張ったって無駄。

 

PS. それにしても、Air Cardの中をかなりいろいろ見たが、これまでに書いた以外にも山ほどまともに動かない/作っていない・手抜きなところが多く、いかにも「中華クオリティ」(ただし、本当はどの国の人が作ったのかは知らない)だと思った。まあ、それでもそれなりに売れてそれなりに動いているのだから、逆に感心する。でも、それが結局は、あのとんでもない評価に繋がっているのだろう。やっぱり、手抜きはいけない。

(19:55 画像を追加)

  • wifi機能付のSDカード

    wifi機能付のSDカード

    wifi機能、つまり、無線LANを使った通信機能のあるSDカードがある程度広まった感があるのでここで…

  •   0
  •   0

4件のコメント

  1. naoki:

    いやあ、学生に戻ったような気分で拝読しました。

    なるほど、WiFi機能付きSDカードが流行らないのはそういう理由だったんですね。

    僕の場合、FlashAir購入の目的が「外出先でデジカメ撮影し、その場でSNS投稿したい(数枚だけスマフォ/タブレットに転送したい)」だったので、ニーズに合っていたと言えます。

    ちなみに、転送する写真を選択して送るモードです。

    •   0
    •   1
  2. れんと:

    ●そう、本当に学生時代のようにやってましたw その時の失敗(うまく行かなかった)した悔しい気分も、一緒です(爆)

    なるほど、そういう用途なら確かにいいですね。デジカメを余り使わなくなったとおっしゃっていたように、今はスマフォで直接になっちゃいそうですけどね・・・

    •   0
    •   1
  3. naoki:

    スマフォで直接が、正直言って荷物が増えなくていいですね。すぐにSNS投稿できますし。

    ですが、本当に珍しく気が向いた時にデジカメを持ち出して取った写真を見ると、描写力が全く違うと感じることがありますね。

    •   1
    •   0
  4. れんと:

    ●確かにそうです。画質とか描写力に関してはデジカメだと思います。

    •   0
    •   1

コメントを書く

名前    

メール 

URL