2011年7月21日木曜日

volume key

fi01_IS01殿がvolume key用のパッチを公開されました。

key trackingもされており、とても素敵です♪(下に書いてあるaltを先に放しても平気)

ソース用のパッチなので、build出来る方しか今は利用出来ませんが・・・


http://cm4is01.remu.biz/todo

へぇー(・ω・)と思いながらリストを見ていたまけねこ。


個人的に気になったのはvolume key。

いつも少し不便だし、どうにか出来ないかなと思い、調べ始めました。
もちろん、一番簡単そうだと思ったからです( ̄ー ̄)

しかし・・・・いくらぐぐっても、

ALT+7キーをvolume keyとかに割り当てるとか言う記事がどこにもねーーー(つωT)
どれもこれも

・ **キーに**を割り当てる。(例:ALTとCTRLキーを入れ替える。物理的キーの割り当て変更)


・ 文字の割り当てを変更する。(例:マイナス+SHIFT=アンダーバーにする。キーと文字の割り当て変更)


・ Androidアプリにおけるキー割り当て。(例:CTRL+何か=何かの動作を割り当てる。)


ばかりで、


・altやctrlなどを押しつつ別キーを同時押しすると、volume up/downになる、


という話がぜんぜん出てこないorz

androidx86とか、なんかそういうショートカットキーがあるみたいですが、
それっぽいところを見たり、commit logを調べても、見つからないorz

前述した3つ目が近いのだけど、これだとあくまでアンドロイドアプリ上の動作なので、

常駐させたりとか必要そうな気がする。。。


とりあえずソースを追いかけたり、Webの記事を探してみることにしました。

(cかじったぐらいでc++,java知らないけど orz)

===================================


Keyboard入力がどう伝わるか。

情報は怪しく、超絶ざっくりです。あくまで参考に。

Linuxキーボードドライバ(msm_i2ckbd.c)


/dev/input/event5 (is01rebuild様より)

なんか分からないけどframework/baseの下辺りにある.cppなコード
/dev/input/event5の中身を読んでkeyeventを作る?監視?irq?

keyEvent.java

アプリからキー入力を取る場合はkeyEvent.dispatchとかして、
getKeyCodeとか使って判別する、らしい?

前二つの段階では、単にハードウェア的なキー番号でやりとり。

後ろでは、.kl(key layout)ファイルとかkcm(key character map)ファイルとかを利用して、
KeyEvent.javaとかKeyCharacterMap.cppとかで、
それをソフトウェア的なキーの番号に変換し、入力文字の割り当てをしてるようです。

===================================


ALT+6にvolume downを割り当てる場合、以下のどこかでやればいいみたい。

・ドライバ  → buildしたりinsmod?するのが面倒臭い。というかkernelはいじくりたくない・・・
・cppなkeyeventを拾って上に送るところ? →cpp知らない:(
・keyEvent.java辺り
・アプリ         → アプリ作れない
排他論的に、keyEvent.javaをいじくることにしましたorz

↓あわわ、これ、framework/baseとframework/policy/baseがまじってる・・・orz

grepとかして場所を確認ください(つω;)
http://pastebin.com/P75kZCgf

2011/7/1修正。PhoneWindowManager.javaの差分忘れてましたOrz

キーコードの入力に対し、人間ならまず「そのキーは何?」と聞くだろう、

そしてプログラム処理もそうするだろう、と判断し、
getKeyCodeの所に、alt+6/7の時は、volumedown/upキーだと答えるように。
systemキーだと思わせるために、isSystemのところを同様に偽装
してみました。

主な修正はこの2点のみなので、keyupやlongpressedの時の判定とか大丈夫かと思いましたが、

HardwareCheckerなるソフトではきちんとkeyup/keydownも判定されているようでした。
あ・・・1点だめだ・・・
・ALT押す → ALT, down
・6押す  → volumedown, down
・ALT離す → ALT, up
・6離す  → 6, up    ←volumedown, upじゃないorz

つまり、volumedownというキーがupされたという情報が出てこない(笑)

けど、実際に操作して音量を上げ下げするのにとりあえずは支障なさそうです。

なんとなく印象として、getKeyCodeを修正するのは邪道ぽく、

本筋はドライバを修正するのが良いような気がします。

今回は、とりあえず動いたからいいや(・ω・)

2011年7月7日木曜日

cm4is01のbuildメモ

CM6byDevRenax-06242011-IS01を対象とした6/28頃のメモです。

基本は、本家 を参照くださいm(_ _)m
=============
. build/envsetup.sh
間にスペース必要


lunch generic_nb30-userdebug
vendor/cyanogen/products/AndroidProducts.mk
cyanogen_harmony.mkの先頭を#
にするとエラー回避

export  USE_CCACHE=1 

sudo update-alternatives --config java
でjava-6-sunを選択(sun-jdk6のインストールは割愛)


vendor/renax/prebuild
二つライブラリ放り込む必要あり。libbattlog.soとlibsynergy_com.so

vendor/renax/gapps
フォルダを作成し、
http://wiki.cyanogenmod.com/wiki/Latest_Version
のhdpiを入れてみた。
全フォルダのファイルを、vendor/renax/gappsに全部全部放り込む。
#初回起動時にwizardが複数出たり無限ループになりそうになったりする。
#ある程度設定したら電源ボタンキーで終了して抜けてしまってごまかしている。

external/wpa_supplicant
中身をSH Developersのと総入れ替え。その後cm4is01を差し替える。
https://sh-dev.sharp.co.jp/android/modules/oss/index.php?/is01

これで一応コンパイルが通るはず?

作成されたsystemフォルダを実機に放り込む前に・・・
・/system/binの中身のアクセス権。chmod 755しておくと吉? ←不要であることを確認 2011/8/3
・/system/etc/dhcpcd/dhcpcd-run-hooks
中身の終わりのほう、
    if [ -f "${hook}" ]; then
の場合は、
    if ls "${hook}" >/dev/null 2>&1; then
としておくと、wifiアクセスエラーおきないかも。