2012年8月9日木曜日

AndroidとPCをUSBケーブルでネット接続

無線LANが使えない環境で、rootを取らずにAndroidとPCをネットワーク接続出来ないものかと色々調べていました。
  • adb forwardとAndroidのSSHサーバーの組み合わせ
    Androidで動いているsshdのポートをadb forwardでPCに持ってきておいて、今度はそのポートにssh接続してtunnelを作ってみましたが、どうやらAndroid側で新規にポートを開くのが許可されていないらしく失敗。
  • USB TunnelとWindowsアプリの組み合わせ
    AndroidアプリのUSB Tunnelとadbを使ったWindowsアプリでネットワークを構成するのですが、Windowsアプリが必要という時点で対象外。
  • adb ppp !!
    よくよく調べてみると、adbにpppコマンドがあることを発見。
    ドキュメントがほとんど無かったのですが、とりあえず次のコマンドを実行してみると、PC側、Android側のそれぞれにppp0インターフェースが出来て、IPアドレスも振られることが確認出来ました。
    adb ppp "shell:pppd nodetach noauth noipdefault /dev/tty" nodetach noauth noipdefault notty <local-ip>:<remote-ip>
    その後、Android側からpingを打ってみると、きちんと反応が返ってきて接続が出来ているようだったので、今度はブラウザでアクセスしてみたら反応なし。
    ルーティングがおかしいのかと思ったり少し悩みましたが、そういえばFirewallということで、iptablesの設定を変えてみたら、無事にAndroidのブラウザからUSBケーブルを通してPCの鯖が見えるようになりました。

2012年7月31日火曜日

iCou 8はまだ来ない

注文してから、そろそろ2ヶ月。
届く気配はまったくありません。
悲しい予想が当たりそう…

Androidでけいあん!!!

NDKでusb_setinterfaceを実装してみたのですが、いろいろ試してみたところAndroidのUSBホスト機能だけでもなんとかなることが判明。 結局JavaだけでTSを取り出すところまで出来ました。

はじめTSは取得出来ているのにデータの中身がぐちゃぐちゃで、なにかバグを埋め込んだかと悩みましたが、これはチューナーのチャンネルを設定した後、ある程度の時間を置いて安定するまでのデータを捨てることで解決。

ただ、処理が追いついていないせいか0.3%くらいのパケットがドロップしています。

次はワンセグの切り出しと、パフォーマンスチューニングかな。

2012年7月28日土曜日

Androidでけいあん!!

recfsusb2nのC++からAndroid Javaへの移植はほぼ完了したのですが、最後の最後でつまりました。

いろいろ初期化してチャンネル合わせて、最後にストリームの転送を開始するコマンドを送るところで、それを送るのに使われている usb_setinterface というAPIがサポートされていないことがわかりました。

面倒くさいのとCPU依存になってしまうのでいやだったのですが、しょうがないのでNDKにまで手を出すことに。
ざっと調べたところ、NDKだとioctlは使えるようだし、USBホスト機能側からファイルディスクリプタも取得出来るようなので、なんとかなりそう。

でも結局NDKにまで手を出すんだったら、はじめからそっちでやっておけば、わざわざJavaへの移植しなくても良かったのにというのはあります…

2012年7月22日日曜日

Androidでけいあん!

AndroidでUSBホスト機能が使えるようになったので、recfsusb2n Linux版を参考にしてFSUSB2の初期化ロジックまで作ってみました。

まだきちんと確認出来ていませんが、いちおうチューナーとカードリーダーの両方とも正常に初期化出来ているようです。

あたりまえと言えばあたりまえなのですが、AndroidのUSB機能のAPIは、ほぼLinuxのAPIと同じなので、いまのところの作業としてはC++のコードをJavaに移植しているだけに近いです。そのためbyteとintの相互変換が多くなっていて、Java的にはかなりパフォーマンスが悪そうなので、後でチューニングの必要がありそうです。

unsignedな数値型が無いことも含めて、やはりJavaはハードウェア寄りのコード書くのには向いていない気がします。

2012年7月20日金曜日

AndroidのUSBホスト機能

Androidの3.1以降ではUSBホスト機能がサポートされたので、比較的簡単にUSB機器と通信するプログラムが書けるようになっています。
http://developer.android.com/guide/topics/connectivity/usb/host.html

FSUSB2がLinuxで使えるのは確認出来たので、今度はAndroidアプリから認識出来るか試してみたら、ハマってしまい何時間か無駄にしたのでメモしておきます。

ポイントは2つ。
  1. 本体でUSBホスト機能が有効になっていなかった。

    カーネルはUSB機器が接続されたことを認識しているのに、Android側に何もメッセージが飛んでないので、原因を調べるのに随分かかりました。わかってしまえばなんのこともない。

    これはD70Wがそうだっただけなのかもしれませんが、Android 3.1以降でもUSBホスト機能が有効になっていないことがあるみたいです。

    下記の内容のファイルを android.hardware.usb.host.xml という名前で作成しておいて 、
    <?xml version="1.0" encoding="utf-8"?>
    <permissions>
        <feature name="android.hardware.usb.host" />
    </permissions>
    このファイルをAndroidの /system/etc/permission ディレクトリに置いてからリブートすれば、USBホスト機能を有効に出来ます。

  2. USB機器を特定するためのIDの指定が10進数だった。

    AndroidアプリがFSUSB2に特定して反応するように device_filter でベンダーIDとプロダクトIDを指定するわけですが、ここに16進数でIDを指定していたのでメッセージが受け取れていませんでした。

    lsusbの出力にしろ、あちこちに出てくるメッセージにしろ、IDは16進数で表示されているので、それをそのまま設定していたのが敗因でした。
    これは16進数を10進数になおして設定すれば良いです。
以上で、AndroidアプリからFSUSB2を認識するところまでは確認出来ました。

2012年7月2日月曜日

Androidでlsusb

試しにD70WにFSUSB2繋いでみたら、なんか普通に認識してるっぽいメッセージ。
もう少し詳しく見てみようとlsusbしてみたら。
/system/bin/sh: lsusb: not found
 これは自分コンパイルして入れなきゃならんのかと思いかけたけど、そういえばbusyboxってのがあった事を思い出した。
/system/bin/busybox lsusb
...
...
Bus 001 Device 005: ID 0511:0029
busyboxを自分で入れた覚えはないんだけど、中華androidだから初めから入っていたのかな?

2012年6月30日土曜日

Android開発にIBM JDK使った時の問題


OracleのJDKを使ってる時には問題なかったのだけど、Oracle以外のJDKを使う必要があってIBMのJDKに切り替えたら、いきなりビルドでエラー発生。
どうやらapkに署名をするところでエラーになっている模様。

仕方がないのでOpenJDKに切り替えたら、こちらは問題無し。
sun.security.x509.X500Nameなんていう、ベンダー固有のパッケージを使っているADTが悪いんだろうけど、なんとかIBM JDKのままスッキリ解決する方法が欲しいところ。

2012年6月21日木曜日

iCou 8が届かない

今月のはじめにパンダに注文した7インチAndroidタブレットのiCou 8ですが、出荷が遅いので問い合わせてみたところ、7月末くらいになりそうとの事。まあ想定どおり。
代わりにAinol Aurora IIなら割引き価格ですぐ出荷するよとのオファーがありましたが、横長スクリーンはいらんので今回はパス。
とりあえず7月までは待ってみようかと思いますが、その時期になるとNexusタブレットが発表されてしまい、そのままiCou 8は幻になってしまいそうな予感がします。

2012年6月10日日曜日

FSUSB2をカードライターとして使う (7)

PTやPLEXシリーズを持っていて、汎用カードリーダーは無いけどk-an!!は有るという、そんなユーザーっているのかな?
いてもかなりの少数派でしょうね。

そんなわけで利用者は自分しかいないのかもしれませんが、VirtualPTのカードリーダーとしても使えるようにしてみたのでアップ。
あいかわらずの手抜き対応なので、常用には十分ご注意を。
http://ll.la/cbM@

機能追加
  • VirtualPTで必要とされるAPIを追加
    • SCardAccessStartedEvent
    • SCardCancel
    • SCardReconnect
    • SCardReleaseStartedEvent

2012年6月4日月曜日

三菱の27インチ液晶モニタ RDT272WX

今使ってる25.5インチの液晶モニタRDT261WHがだいぶんへたってきていて、しばらく買い替え先を探していたんですが、これまでの三菱の27インチクラスはパネルがいまいちだったし、かといって他のメーカーは入力周りがいまいちでなかなか手が出ませんでした。
テレビ、ゲームにPCと1台で全てまかなってるので選択肢が少ないんです。

そんなところ、三菱から27インチのIPS液晶を採用したRDT272WXが発表されたので、ようやく買い替えることが出来そう。発売は6月15日。

入力端子もDVI-D * 1 / HDMI * 2のデジタル以外に、D端子 * 1 / D-SUB * 1のアナログもしっかりついてるあたりが三菱の伝統を守ってて良い感じ。

なんだかんだで、14インチの金魚鉢にはじまって、17インチのトリニトロンやら含めて、コストパフォーマンスの良さでモニタは三菱製が連続してるな。
昔、ブラウン管のキャリブレーションにずっとつきあってくれた九州三菱のサポートの好印象の影響もあるのかもしれない。その節はお世話になりました。

でも、まだ黒しかないみたいなので、実際に買うのは白待ちかな。

2012年6月3日日曜日

FSUSB2をカードライターとして使う (6)

これでかなり安定するはず。
ツールによってカードへのアクセス方法がいろいろで、
全てのパターンに対応するのは難しそう。
http://ll.la/M:UW

修正内容
  • 読み書きの単位が大きい場合にアドレスがずれていたのを修正(以前のバージョンは危険なので捨ててください)
  • JPKI利用者ソフトでの動作を修正



2012年6月2日土曜日

FSUSB2をカードライターとして使う (5)

やはり手元に実カードがないといろいろとやりづらい。
とは言っても何もテストしてないのはさすがにまずいので、
機能を追加した部分について、カードのエミュレータ作ってバグ出しをしてみた。
http://ll.la/KX.5

機能追加
  • 読み込みサイズが指定されていなかった場合に対応
  • 書き込み単位が大きい場合に対応
修正内容
  • 読み込みサイズが指定されていなかった場合に間違ったアドレスのデータを取得していたのを修正
  • 書き込み単位が大きい場合にループしていたのを修正

ICOO iCou 8を注文してみた。

製造元のWebページにすら仕様が載っていなくて、すぐ消えて無くなりそうな予感でいっぱいですが、
7インチでアスペクト比4:3のIPS液晶のタブレットなんて他に出てきそうにないし、
また円高も進んできたというのもあって、熊猫で注文してみた。
急ぐこともないので送料無料の航空便を選んだので、さていつごろ届くことやら。

FSUSB2をカードライターとして使う (4)

対応カードを増やすべく、いくつかの機能追加をしてみました。
http://ll.la/=n+M


修正内容
  • 読み込みサイズが指定されていなかった場合に対応
  • 書き込み単位が大きい場合に対応
  • デバッグログ出力を追加 
人柱版です。
カードが利用不能になる可能性があるので覚悟の上でご利用ください。
何かあっても一切の保障はありません。 
うまく動かない場合は、動作ログ"winscard.log"の内容を報告してもらえると対応出来るかもしれません。


以前のものでは動いていなかったのが、動くようになった時も報告してもらえると助かります。

バグがいろいろと見つかったので削除。
カードのエミュレータ作ってバグ取りします…

2012年5月31日木曜日

FSUSB2をカードライターとして使う (3)

いくつか問題があったので修正。
これで使える範囲が広くなってるといいな。

なお、カードは必ず事前に挿入しておく必要があります。

修正内容
  • JPKI利用者ソフトでの動作確認が出来るように修正
    (実際に正常動作を確認したわけではありません)
  • 読み込み単位が大きいと不安定なことがあったのを修正
http://ll.la/YM~E

2012年5月27日日曜日

解像度の高い7インチ中華android端末

ICOO iCou 8

Allwinner A10(MAX1.5GHz)
7インチ(1024x768)IPS液晶
385g

Ainol NOVO7 Burning

Amlogic8726-M6 Cortex-A9×2 デュアルコア 1.5GHz 
7インチ(1280x800)IPS液晶


動画用なら、アスペクト比16:10なNOVO7 Burningなんだろうけど、読書用としたら4:3なiCou 8も捨てがたい。
軽ければ軽いほど良いので、iCou 8の385gはちょっと考えてしまう。
Burningの重さはどれくらいなんだろう。


FSUSB2をカードライターとして使う (2)

はまりどころが色々ありましたが、何とか完成。
手抜きまくりなので、常用は控えた方が良いかも。

内容:
 ・winscard.dllとして不足していたいくつかのAPIのダミーを追加
 ・メモリの自動確保モードに嘘対応
 ・カードステータスとして常に「挿入済」を返す
 ・カード内部での通信エラーを無視

利用手順:
 0. KTV-FSUSB2をカードリーダーとして使えていることが前提
 1. 元のwinscard.dllをwinscard-fsusb2.dllにリネーム
 2. 同じフォルダにラッパーのwinscard.dllをコピー

http://ll.la/cc=I
◆WPjeGg6tSAさんに敬意を表しつつキーワードは第2期。

2012年5月26日土曜日

FSUSB2をカードライターとして使う (1)

http://tri.dw.land.to/fsusb2n/ で配布されていたwinscard.dllを使うと、KTV-FSUSB2をカードリーダーとして使えます。
KTV-FSUSB2のハードウェア的にはカードライターとしても使えるはずなのですが、このDLLがリーダーとして使うための最低限のAPIしかサポートしていないので、実際にはライターとしては使えませんでした。
それだと不便なこともあるということで、勉強もかねてwinscard.dllのラッパーDLLを作ってみる。

FSUSB2の使い方はwikiを参照
http://ktvwiki.sitemix.jp/index.php?BonDriver_FSUSB2N

2012年5月12日土曜日

Trac覚え書き

ここのところWindows環境なことが多く、Trac Lightning使ってさぼっていたけど、久しぶりにTrac環境を素から構築してみたので、覚え書きを作る。

レポートのExcelダウンロード

Trac 0.12の標準機能のCSVダウンロード機能だと、Excelで開いた時に文字化けするという苦情が多いので、Excelダウンロード機能を追加する。

以前はExcelReportPatchを使っていたけど、最近はExcelDownloadPluginがあるのでこれを適用。

前提条件として、xlwtの導入が必要。

どちらもデフォルトの導入方法で日本語も問題なし。

まずxlwtの導入。xlwtのソースを展開して。

# python setup.py install

ExcelDownLoadPluginのビルドもいつもどおり。

# python setup.py bdist_egg

あとは、distディレクトリ内に出来たeggをtracのpluginsディレクトリにコピーして導入完了。

Tracで設定が有効になると、レポート画面の下に"Excel | Excel (履歴含む)"というリンクが追加される。

2012年3月29日木曜日

ICOO D70W入手

春節前にAinol Novo7 Auroraを注文したんですが、いろいろありました。いろいろ…
ということで、注文から2ヶ月経った昨日、ようやくICOO D70Wがはるばるシンガポールから手元に来ました。
発送日は3/21だったので、1週間での到着です。
注文したものと届いた物が違うのは、まあそういうことです。

これからいろいろ触っていこうと思います。

android

いまさらですがandroidのお勉強をはじめてみようかと思いたったので、
その記録をぼちぼち書いていくことにします。