件のATOMCamやATOMCam2は、基本的に自分の配下の無線LANに接続して使うように設定することが前提になっていますが、有線LANを使用したほうがいいような環境(電波状態)もあり、一部のユーザからは何でできないの、という声も上がっているようです。
というわけで、無理やりハックしてATOM Cam2を有線LANで使用できるように調整してみました。
必要なファイル類はここにあります。
SDカード上には、このリポジトリにあるTest.tarとscriptsフォルダをコピーしておきます
Test.tarってなんだよ?っていう方はこの辺を参考にしてください。
物理的には、USB電源供給OTGケーブルを使用し、ATOM Camに電源を、ATOM Camからのホスト信号をUSB Ethernetアダプタに接続します。
(写真はハック用なので分解された姿です)
たとえばこんなやつで
ちなみに、都合のいいことにASIX AX88772 などのUSB-Ethernetドライバがカーネルに組み込まれているため、これらは挿入するだけで認識されます。
未確認ですが、Realtek r8152のドライバもあるため、これも認識する可能性があります。
OTGケーブルは付属のケーブルと同一寸法ではないため、屋外に設置するのであれば
この部分をうまいことして防水性能を担保する必要があります。
付属のケーブルは電源の2本しか接続されていないため、このケーブルのA側を加工してもダメです。本体基板のUSBコネクタの信号を使用する必要があります。
Test.tar内の test.shの中身はこんな感じです。
このコードにより、本来のカメラアプリ「iCamera_app」の起動前にSDカード上のscripts/pre.shが、起動後にscripts/post.shが呼び出されます。
また、このスクリプトではtelnetdを立てていますので、Advanced IP scannerなどを使用してIPアドレスを確認した後、telnetでshellに接続することができます。
(ユーザ名は root 、パスワードは atomcam2 )
pre.shの中身は
ここで、scripts/wpa_cli.shコマンドがミソになります。
ATOMCamの組み込みアプリでは、wlanの設定のためにwpa_supplicantや設定の取得のためにwpa_cliを外部コマンドとして実行し、結果を読み込むことでwlanの接続状態を取得したり、IPアドレスの確認を行っています。
wpa_cli -p /var/run/wpa_supplicant -i wlan0 STATUS | grep ip_address
wpa_cli -p /var/run/wpa_supplicant -i wlan0 STATUS | grep wpa_state
内部的には↑のコマンドが呼び出されています。
なんと、これに必要なだけの応答を返すため、中身はたった4行です。ひどい。
#!/bin/sh
echo 'wpa_state=COMPLETED'
echo ip_addresss=`ifconfig eth0 | awk '/inet / {print $2}' | awk -F: '{print $2}'`
このwpa_cli.shを本来の/bin/wpa_cliにovermountし、
iCamera_appから呼び出されるようにしてしまい、実際にはwlanではなくusb etherで通信を確立し、iCamera_appをだますことで有線LANを使用可能にすることができます。
シリアルからifconfigして確認してみると、確かにwlan0の接続が確立していない状態、eth0のみipaddressが来ている状態でATOMアプリから接続ができています。
また、この状態でATOMアプリに新規登録する際、適当なSSIDとパスワードの組み合わせを入れておけば、無線LANを一度も使わずに登録ができることを確認しました。
さて、scripts/以下のファイルを変更する際に、Test.tarの変更は不要です。
そのため、scripts/pre.sh , scripts/post.sh の中身は自由に書き換えて、ハック用の追加コマンドを実行することができます。
突貫で作ってみましたが、とりあえず動いてはいるようです。
もし使う人が多いようならば不具合も出てくるでしょうし、その解決方法も出てくるでしょう。
まあ、とりあえず技術的にはできたよ、っていうことで。