2011年12月 6日 (火)

android で USB Bluetoothドングルを試す

手持ちにあるBluetooth USBアダプタは、Bluetooth ver2.1対応 USBアダプタ BT-MicroEDR2X

これがandroidタブレットで使えるか調べてみた。

調べてみようと思ったのは、何故か、EM51にはBluetooth関係のファイルがそろっているからである。

/system/bin/sdptool
/system/bin/bluetoothd
/system/lib/libbluedroid.so
/system/lib/libbluetooth.so
/system/lib/libbluetoothd.so

等々... 出来そうな感じ。しかし・・・

①カーネルにBluetoothドライバモジュールが入っていない

②androidの設定に「Bluetooth」の項目が存在しない。

この2点をクリアしなければならない。

以下からはクリアするために行ったメモ。

①ドライバモジュールの構築

TCC8902のカーネル2.6.29のソースを入手し、モジュールだけビルドした。
sdカードに出来上がったbluetooth.ko, btusb.ko を入れて、adbコマンドで確認

------------------------------------------------------------------
# insmod /sdcard/bluetooth.ko
# insmod /sdcard/btusb.ko
------------------------------------------------------------------

Bluetooth USBアダプタを差し込んでみてdmesgで確認する

# dmesg
------------------------------------------------------------------
<6>Bluetooth: Core ver 2.15
<6>NET: Registered protocol family 31
<6>Bluetooth: HCI device and connection manager initialized
<6>Bluetooth: HCI socket layer initialized
<6>Bluetooth: Generic Bluetooth USB driver ver 0.5
<6>usbcore: registered new interface driver btusb
------------------------------------------------------------------
きちんとロードされてる!

/proc でも確認する。
---------------------------------------------------------------------
# cat /proc/bus/usb/devices | grep -e^[TPD] | grep -e Cls=e0 -B1 -A1
--------------------------------------------------------------------
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=e0(unk. ) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0a12 ProdID=0001 Rev=48.39
---------------------------------------------------------------------
OK。

hciconfigでBluetoothアドレスが有効か確認する。

# hciconfig
---------------------------------------------------------------------
hci0:   Type: USB
        BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0
        DOWN
        RX bytes:0 acl:0 sco:0 events:0 errors:0
        TX bytes:0 acl:0 sco:0 commands:0 errors:0
---------------------------------------------------------------------

まだこの時点では、有効になっていない。起動するには、upを指定する

---------------------------------------------------------------------
# hciconfig hci0 up
---------------------------------------------------------------------

再度hciconfigを実行
---------------------------------------------------------------------
# hciconfig
hci0:   Type: USB
        BD Address: 00:1B:DC:0F:89:4B ACL MTU: 310:10 SCO MTU: 64:8
        UP RUNNING
        RX bytes:354 acl:0 sco:0 events:12 errors:0
        TX bytes:38 acl:0 sco:0 commands:11 errors:0
---------------------------------------------------------------------
UP RUNNING と表示され、bluetoothのアドレスが変化した。
カーネルレベルでは成功している。

ついでに他のデバイスが見えるか確認してみた。
---------------------------------------------------------------------
# hcitool scan
Scanning ...
        6C:23:B9:XX:XX:XX       SO-01B
---------------------------------------------------------------------
近くに置いていたXperiaが表示された。成功。

後は、このモジュールは、/sdcardでは、都合が悪いので、別な場所へコピーしておく
--------------------------------------------------------------------
# cp /sdcard/bluetooth.ko  /system/etc
# cp /sdcard/btusb.ko      /system/etc
-------------------------------------------------------------------

②Bluetoothの有効化

/init.rcスクリプトを調べてみると、bluetoothdサービス起動部分がdisableになっている。

disabledの行をコメントアウトする必要がある。

変更前
--------------------------------------------------------------------------------
service bluetoothd /system/bin/bluetoothd -n
    socket bluetooth stream 660 bluetooth bluetooth
    socket dbus_bluetooth stream 660 bluetooth bluetooth
    # init.rc does not yet support applying capabilities, so run as root and
    # let bluetoothd drop uid to bluetooth with the right linux capabilities
    group bluetooth net_bt_admin misc
    disabled
--------------------------------------------------------------------------------

変更後
--------------------------------------------------------------------------------
service bluetoothd /system/bin/bluetoothd -n
    socket bluetooth stream 660 bluetooth bluetooth
    socket dbus_bluetooth stream 660 bluetooth bluetooth
    # init.rc does not yet support applying capabilities, so run as root and
    # let bluetoothd drop uid to bluetooth with the right linux capabilities
    group bluetooth net_bt_admin misc
#    disabled
--------------------------------------------------------------------------------

しかしルートファイルなので、adbコマンドで直接書き換えが出来ない orz

じゃあ、ファームウェアアップデートファイル update.zip の中のboot.imgファイルを
分解して、ルートファイルの/init.rcを書き換えることにした。

手順)以下のサイトから以下のファイルをダウンロードする。

http://fei-yen.jp/maya/wordpress/2010/08/30/android2-1%E7%AB%AF%E6%9C%AB%E3%82%92%E5%85%A5%E6%89%8B%EF%BC%81%EF%BC%88%E6%9B%B8%E3%81%84%E3%81%A6%E3%82%8B%E9%80%94%E4%B8%AD%E3%81%A0%E3%81%91%E3%81%A9%E5%85%AC%E9%96%8B%EF%BC%89/

split_bootimg.zip
replace_ramdisk.php

zipファイルは解凍して、Linux上で作業する。

書き換え作業は、上記のURLを参考に行う。

Bluetoothの設定は?

andoridの「設定」はファイルSettings.apkが行っている。
これはメーカーのオリジナルのプログラム。
メーカーのSettings.apkのソースをもらわない限り不可能。

でも、androidアプリ SuperBoxでBluetoothの呼び出しが出来る

SuperBoxでBluetoothの設定呼び出しが出来たが、それでもBluetoothは、有効にならない。orz

原因は、下記のサイトを読むとandroidのソースにパッチを当てる必要があった。

http://www.kumikomi.net/archives/2009/09/beagleboardandroid_wii1.php?page=1

AndroidではBluetoothモジュールの電源制御にRF KillというKernelの機能
(Switch Class)を使用している。しかし、Bluetooth USBアダプタは、この仕組みに対応していない。

Bluetoothの電源制御はlibbluedroidライブラリで実施しており,このソース・コードを修正する必要がある。

結局、androidのビルドをしなければならない。orz

| | コメント (0) | トラックバック (0)

2011年12月 3日 (土)

4方向回転を止め、ホームを縦画面固定にする

手順です。

①android.policy.jar をカスタマイズする。

  1) android.policy.jarをSDカードにコピーしてPCへもってくる

    # cp /system/framework/android.policy.jar /sdcard

  2) anroid.policy.jar を android.policy.jar.zipへファイル名変更して、winrarなどで、classes.dexを取り出す。

  3) コマンドプロンプトで、以下を実行。   (baksmali-1.2.6.jarは別途ググってダウンロードしておく)

    d:\EM51> java -Xmx1G -jar baksmali-1.2.6.jar classes.dex

    すると、outフォルダの下に.smaliのファイルが沢山できる。
    これと同じことをSmartQV5のandroid.policy.jarでも同じように実行する。

  4) SmartQV5のPhoneWindowManager.smali を EM51のoutフォルダへ上書きする。

    ※SmartQV5は、Gセンサー搭載しておらず、ホームは縦画面固定になっている。
            つまり自動回転を無視した前提の作りになっている。
            その記述がPhoneWindowManager.java。

  5) 再び、classes.dex を作る。 (smali-1.2.6.jarは別途ググってダウンロードしておく)

    d:\EM51>java -jar smali-1.2.6.jar -o classes.dex out

  6) winrarなどでandroid.policy.jar.zipの中のclasses.dexを上書きする。
     ※apkと違って署名は不要らしい。

  7) android.policy.jar.zip をandroid.policy.jarにファイル名変更する。

  8) adb shell などで、android.policy.jarを /system/framework/へ上書きする。

    # cp /sdcard/android.policy.jar /system/framework

  9) dalvik-cache フォルダの該当 dex を削除する。

    # rm /data/dalvik-cache/system@framework@android.policy.jar@classes.dex

      ※削除したdalvik-cache の該当ファイルは、再度作られる。

② Gセンサーであるライブラリ、sensors.tcc92xx.so を動かないようにリネームする

  c:\> adb shell
  # cd /system/lib/hw
  # mv sensors.tcc92xx.so sensors.tcc92xx.so.org

③) 再起動

| | コメント (0) | トラックバック (0)

2011年11月18日 (金)

EM51のandroidで使えるカーネルモジュールの構築メモ

1) クロスコンパイラのtar.gzをどっかのサイトからダウンロードする

   arm-2008q3-39-arm-none-eabi-i686-pc-linux-gnu.tar.gz

2) そのファイルを/optへ展開する。

$ su
# cd /opt
# tar xvfj /home/mydownload/arm-2008q3-39-arm-none-eabi-i686-pc-linux-gnu.tar.gz

3) 環境変数へセットする

# export PATH=/opt/arm-2008q3/bin/:$PATH
# export ARCH=arm
# export CROSS_COMPILE=arm-none-gnueabi-

4) カーネルのtar.gzを解凍する

# cd ~
# tar xvfz kernel.tar.gz
# cd ./kernel

5) カーネルのモジュールの設定をする。
   *.koが欲しいので、<M>の設定をする。

   以下は、btusb.ko, bluetooth.ko, tun.ko, cifs.ko, nls_utf8.ko の例

# make menuconfig
===========================================================
->  Linux Kernel v2.6.29 Configuration screen
   
Networking support --->
<M>  Bluetooth subsystem support --->
     Bluetooth device drivers --->
       <M> HCI USB Driver

Network device support
<M>   Universal TUN/TAP device driver support 

File systems
--- Network File systems
   <M>   CIFS support (advanced network filesystem, SMBFS successor)
   [*]     CIFS statistics                                          
   [*]       Extended statistics                                    
   [*]     Support legacy servers which use weaker LANMAN security 
   [*]     CIFS extended attributes                                 
   [*]       CIFS POSIX Extensions                                 
   [*]     Enable additional CIFS debugging routines               
   [*]     CIFS Experimental Features (EXPERIMENTAL) 

Navive Language support
   <M>  NLS UTF-8   
===========================================================
他はデフォルトのままにする。

6) MakefileのEXTRAVERSION は空白にしておく

# vi Makefile
---------------------------------------------------------
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 29
EXTRAVERSION =
----------------------------------------------------------

7) コンパイルする

# make modules ARCH=arm CROSS_COMPILE=arm-none-eabi-

8) 以下のファイルが出来上がる

./kernel/drivers/bluetooth/btusb.ko
./kernel/net/bluetooth/bluetooth.ko
./kernel/drivers/net/tun.ko
./kernel/fs/cifs/cifs.ko
./kernel/fs/nls/nls_utf8.ko

| | コメント (0) | トラックバック (0)

EM51のsystem.img

EM51のsystem.imgの扱いメモ

Q)解凍するには?
A) unyaffsを実行します。

# unyaffs system.img

Q)弄った後作るには?
A) mkyaffs2imageを実行します

# mkyaff2image system system.img

(systemは解凍した時に作成したディレクトリ)

「mkyaffs2.tar.gz」をダウンロード

| | コメント (0) | トラックバック (0)

EM51 android 2.1 のカスタムファーム

オリジナルからちょこっとだけ変更です。

修正点

①日本語フォントの導入
②センターのENTERキーをHOMEキーへ変更
③以下のカーネルモジュールを導入
  /system/lib/module/fun.ko
  /system/lib/module/cifs.ko
  /system/lib/module/nls_utf8.ko

  tun.ko: OpenVPN 用
  cifs.ko, nls_utf8.ko: Samba アクセス用
  Marketからダウンロードするアプリ OpenVPNSetting, Mount Manager で確認しています。
  起動時にはロードされていないので、各アプリでロードしてください。

  カーネルバージョンとビルド番号は以下になってます。(オリジナルのまま)

Device

【アップデート方法】
EM51をFastbootモードで起動し、コマンドプロンプトから
C:\EM51> fastboot flash system system_yaffs2.img
を実行してください。

その後
C:\EM51> fastboot reboot
でリセットです。

EM51のsystem.imgをダウンロード

| | コメント (0) | トラックバック (0)

2011年11月 6日 (日)

EM51のハードウェアキーにHOMEを追加する

EM51には、ハード的なHOMEキーがない。これがとても残念。

出来れば、センターの十字キーの真ん中のボタンをHOMEキーにしたい。

それでキー定義を調べてみた。どうやら下記のファイルらしい。

/system/usr/keylayout/telechips_keypad.kl

android market からダウンロードした keyevent display から

十字キーのセンターキーを押してみると、

キーコードは、66、スキャンコードは、28

キーコード一覧をみると 66は、 0x0042 KEYCODE_ENTER と定義されている。

http://start-android-sdk.blogspot.com/2010/05/android-keyevent-keycode-list.html

となっている。

ということは、

telechips_keypad.kl に記載されている

key 28 ENTER


key 28 HOME WAKE

に変更すればいいのではなかろうか? …試してみたら、出来た。

手順は、以下の通り

C:\> adb shell

# cp /system/usr/keylayout/telechips_keypad.kl /sdcard

/sdcardのtelechips_keypad.klをWindowsのエディタで修正する。

key 28 ENTER

の行を

key 28 HOME WAKE

に書き換えて保存します。

その後は、adb shell でオリジナルのバックアップを取りつつ

# cd /system/usr/keylayout/
# cp telechips_keypad.kl telechips_keypad.kl.org
# cp /sdcard/telechips_keypad.kl .

を行って、再起動で完了です。

| | コメント (0) | トラックバック (0)

2011年11月 5日 (土)

EM51にCyanogenMod 7/ClockworkMod Recovery 5を入れてみた

ダウンロードサイトは、http://androtab.info/telechips/cyanogenmod/

CyanogenMod 7とは、gingerbread(andorid 2.3.7)をベースにしたカスタムROM

CPU=TCC8902/8803で実装しようというプロジェクトがあるようで、EM51も動作対象。

current status (2011/10/29)をみると、動かないものとして
①3G
②bluetooth
③camera
④hardware accelerated video
⑤GPS
⑥HDMI

となっている。

④は非常に残念。ハードウェアアクセラレーションが有効でないと
動画の再生は無理。youtubeなどが使えない。

また、EM51では、以下の課題(issue)も記載されている

サスペンド/レジューム機能

電源を入れたまま、しばらくほっておくと、サスペンド状態になります。
この後、タッチパネルやキーを押しても、ディスプレイは元に戻りません。

なので、現状
・サスペンドに入る時間を最大の30分にしておく
・もしサスペンドになったら、後ろのリセットボタンで電源OFFにする。
という回避策ぐらしか見つかりません。

またこのファームウェアでは、android marketが入っていないので、以下のサイトから
ダウンロードしておきます。
http://wiki.cyanogenmod.com/index.php?title=Latest_Version#Google_Apps

いろいろ課題はありますが、それでも使う価値があります。

①HOMEボタンがないEM51で仮想的にボタンを用意することができます。
 cyanogenmodの設定でソフトボタンの選択が可能です。
 左上にホームのアイコンが出てきます。

Device1


②画面回転を制御できます。オリジナルのEM51は、4方向回転の機能があって
 使ってると、出来がよいのか悪いのか分からないほど画面がくるくる回ります。
 これが縦と横だけの2方向の設定が可能になります。

Device2


この2点がとても重宝していて、標準では、解像度=160で細かすぎて使いづらいので
以下のように解像度=200に変更して使っています。

Device4


※解像度の変更についてはまた後日。


| | コメント (0) | トラックバック (0)

2011年6月25日 (土)

EM51のFastBootモード

EM51では電源キーとMenuキーを同時に押して電源ONするとFastBootモードに入ります。
しかし、普通のandroid SDKでは、なぜかデバイスが認識しない。

どうやって認識させるかというと、

1)gentouch78patchv3-Lincs.zipをGoogleってダウンロードします。

2)このファイルを解凍します。
すると android_usb_windows フォルダが出てきます。

この直下にある以下の3つのファイルをインストールしたandroid SDKのUSBドライバフォルダ
(D:\android-sdk-windows\google-usb_driver 等)へコピーします




android_usb.inf
androidusb.sys
WdfCoInstaller01005.dll

こんな感じになります。
Install_fastboot1

3)EM51をfastBootモードで起動してデバイスの更新でデバイスを再インストールします。
するとデバイスマネージャーの内容はこんな風に変わります。

Install_fastboot2

これで fastbootコマンドが有効になります。
以下のような形でbootやsystemの書き換えが可能になります。

fastboot flash boot boot.img
fastboot flash system system.img


| | コメント (0) | トラックバック (0)

2011年6月24日 (金)

EM51でClockworkMod Recovery

xda-developersで紹介されていました。ありがとうっ!

手順です

1)このサイト http://androtab.info/telechips/firmwares から
①dump-recovery-signed.zip
②Emdoor EM51のClockworkMod Recovery 4(EM51-recovery-signed.zip)
をダウンロードしておきます。

2)ダウンロードしたdump-recovery-signed.zipをupdate.zipに
リネームしてEM51のSDカードに入れます。

3)EM51のリターンボタンを押しながら電源ONします。するとリカバリーモードに入ります。

4)リターンを押すとメニューが出てくるので、apply sdcard:update.zipを選択します。
Old_recovery

すると、こんなメッセージが出力されます。
Progress

このとき、SDカードに dumped_recovery.img とdumped_proc_mtd.txtが作られます。

5)reboot system now を選択し電源OFFします。

6)ダウンロードしたEM51-recovery-signed.zipをupdate.zipに
リネームしてEM51のSDカードに入れます。

7)EM51を電源入れなおして、先ほどと同様にリターンボタンを押しながら
電源ONを行いリカバリーモードに入ります。

8)リカバリーモードのメニュー画面からapply sdcard:update.zipを
選択してインストールします。

9)reboot system now を選択し電源OFFします。

これで新しいリカバリーモードのインストールが完了です。

リターンボタンを押しながら電源ONするとこんなリカバリーモード画面になります。
New_recovery

これで今のファームウェアのバックアップや
このページに記載されているCyanogenMod 7 (gingerbread/2.3.4) がインストールすることが出来ます。

しかしバックアップの処理時間がやたら長いよ~。

| | コメント (0) | トラックバック (0)

2011年6月21日 (火)

androidにUSB GPS をつなげてみた

手元にaitendoで販売されているGM-235を持っており、これを接続してみた。
Gm235
EM51のUSB-Aポートへ接続してみた。

dmesgで確認すると

<6>usb 1-1: new full speed USB device using tcc-ohci and address 2
<6>usb 1-1: configuration #1 chosen from 1 choice
<6>cdc_acm 1-1:1.0: ttyACM0: USB ACM device

認識してるっ!
どうやらEM51ではカーネル側でcdc acmドライバが組み込みされており、ログでは、/dev/ttyACM0となっているが、実際には、/dev/ttyUSB0が生成されている。

なので、sttyとcatでNMEAデータが取れるか試してみる。

# busybox stty -F /dev/ttyUSB0 4800
# cat /dev/ttyUSB0

結果

$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,,V,N*64
$GPTXT,01,01,01,NMEA unknown msg*58

やたっ!怪しげな$GPTXTがあるが、出力されている。
これならEM51でGPSが使えそう。

でも、「設定」⇒「現在地情報とセキュリティの設定」にGPSの項目が存在しない。
どうやってGPSの項目を出すのか?これが分からない。_| ̄|○

| | コメント (6) | トラックバック (0)

その他のカテゴリー

CE6 | EM51 | HSG X5A | iPAQ | Linkstation | PDA | SC-02B | SmartQ | Voosoo V7