2010/03/25

[Nokia N900] 内蔵FMラジオを日本向け周波数帯にする。(失敗編)

美しき人間の日々

N900内蔵FMラジヲを日本向けの周波数帯にしようと試行錯誤した記録。
結論から言うと、周波数帯の変更には成功しましたが、受信は出来てません。
成功編は未定。

試行錯誤の道程*1
  • FMRadio.pyを読んでみる
  • /sys/class/i2c-adapter/i2c-3/3-0022/以下をいじってみる
  • FMRadio.pyとFMRadioUI.pyを改変してみる
  • fmコマンドだとかradioコマンドだとかを試してみる

*1
たたたっ高村光太郎ちゃうわ!

わかったこと
さて、(たしかN800のFMラジオ界隈でも活躍されてた)Martin Grimmeさん(pycage)の
直球ネームアプリケーション、"FMRadio"のソースを読む限り、N900では改変カーネルを焼く必要は無いようです。
そのかわり、sysfs(/sys/以下)を適切にいじってやることでリージョンの設定が出来ます。
具体的に述べていくと
/sys/class/i2c-adapter/i2c-3/3-0022/region
に国別のコードnを書き込むわけです。[n=0,1,2,3,4]
このコードnはカーネルソース中
drivers/media/radio/radio-bcm2048.cに定義されており、抄出すれば
/* USA */
{
.channel_spacing = 20,
.bottom_frequency = 87500,
.top_frequency = 108000,
.deemphasis = 75,
.region = 0,
},
/* Australia */
{
.channel_spacing = 20,
.bottom_frequency = 87500,
.top_frequency = 108000,
.deemphasis = 50,
.region = 1,
},
/* Europe */
{
.channel_spacing = 10,
.bottom_frequency = 87500,
.top_frequency = 108000,
.deemphasis = 50,
.region = 2,
},
/* Japan */
{
.channel_spacing = 10,
.bottom_frequency = 76000,
.top_frequency = 90000,
.deemphasis = 50,
.region = 3,
},
/* Japan wide band */
{
.channel_spacing = 10,
.bottom_frequency = 76000,
.top_frequency = 108000,
.deemphasis = 50,
.region = 4,
},
つまり日本向けの周波数にしたいなら、ルート権限で
echo 3 > /sys/class/i2c-adapter/i2c-3/3-0022/region
だとか
echo 4 > /sys/class/i2c-adapter/i2c-3/3-0022/region
とすればよく、実際にやってみると /sys/class/i2c-adapter/i2c-3/3-0022/以下
region_bottom_frequencyとregion_top_frequencyが上記の抄出範囲で定義された値になっていることが確認できます。
このうえで、リージョン決め打ちのFMRadio*2を少々改造します。
改造したのは/opt/fmradio/components/fmradio/以下FMRadio.pyとソースtarボールから抽出し、同ディレクトリに放りこんだFMRadioUI.py。
FMRadio.pyは258行目付近と268行目付近に追記およびコメントアウト
# return self.FM_BAND_EUR
return self.FM_BAND_JPN
# band = self.FM_BAND_EUR
band = self.FM_BAND_JPN
FMRadioUI.pyは124行目付近に追記およびコメントアウト。
# self.__fmscala.set_range(87500, 108000)
self.__fmscala.set_range(76000, 108000)

ここでコマンドラインからFMRadioを起動し、前出の方法でリージョンコードを4に書き換えてから、なるだけ素早くFMRadioを再起動。*3
指針は76.0Mhzを指し、成功か。と思いきや87.5Mhz以上でしか正常に選局できない。
エラー出力を読むと、V4l2インターフェースの_VIDIOC_S_FREQUENCYへの書き込みに失敗している。。。
改造*5がまずいんだろうか、気を取り直して、次へ進む。
さて、N900のFMラジオにはv4lのAPIを使って、/dev/radio1経由でアクセスできます。
と言うことはつまり、TVカードにFMラジオが乗っていた頃からのソフトウェア資産がそのまま利用できる。素晴らしきかなLinux!
コンパイルも面倒なのでdebianのリポジトリから適当にバイナリをとってくる。素晴らしきかなDebian!
(以下の操作は裏でFMRadioを起動し、リージョンを書き換えてから行っています。)
数あるラジオ関連ツールの中から、初めに試したのはFMRadioに勝るとも劣らないド直球ネームのradio
美しき人間の日々
radio -c /dev/radio1
が、うまくいかない。(リージョンの問題ではないはず、というのもradioは周波数帯制限のないラジオソフトウェアとして紹介されているのをどっかで見たよな気がしなくもないから。)
特にエラーメッセージも出ないので、次にfmtoolsを試してみる。
コマンドラインから
fm -d /dev/radio1 xx.x
するとまた出た!_VIDIOC_S_FREQUENCYのI/Oエラー!
ひょっとして、これはドライバのバグなんですかねぇ。
参考までにv4l-info /dev/radio1の出力(一部)は
### v4l2 device info [/dev/radio1] ###
general info
VIDIOC_QUERYCAP
driver : "bcm2048"
card : "Broadcom bcm2048 FM Radio Recei"
bus_info : "I2C: 0x22"
version : 0.0.1
capabilities : 0x50400 [?,TUNER,?]

standards

inputs

tuners
VIDIOC_G_TUNER(0)
index : 0
name : "FM Receiver"
type : RADIO
capability : 0x11 [LOW,STEREO]
rangelow : 1216000
rangehigh : 1728000
rxsubchans : 0x2 [STEREO]
audmode : STEREO
signal : 0
afc : 0
こんな感じ。
rangelowおよびrangehighは16で割ればそれぞれ76000/108000であり、一応適切に設定されているようだ。

*2
将来的にはsysfsから読んでくれるようになるらしい。
set_fm_band(self, band)なる未使用関数が有ったり、着々と進歩している。いろいろと頭の下がる思いです。
*3
なぜこんな面倒な手順をとるかというと、
FMRadioを起動すると同時にカーネルモジュールradio-bcm2048.koが読み込まれ、デバイスノードや/sys/class/i2c-adapter/i2c-3/3-0022/以下が作成される訳ですが、FMRadioは起動時にv4l2インターフェースから周波数帯の上限と下限を読み込むので、リージョンコードの書き換えをFMRadioに反映させるためにはFMRadioをいったん終了し、(多分/usr/libexec/n900-fmrx-enablerあたりが)カーネルモジュールをアンロードする前に、もう一度FMRadioを起動するという手順を踏む必要があるからです。復文長い。
ちなみに/etc/modprobe.d/を使ってradio_bcm2048.koのロード時に
リージョンコードを書き込む様に設定*4してみましたが、FMRadioによるロードではそれらの設定は無視されてしまいました。
というわけでFMRadio.pyの__init__内でos.systemとsudo echoを組み合わせて使うのが消極的かつそこそこマシな自動化だろうか。
*4
/etc/modprobe.d/radio-rx-jpnとして以下の内容のファイルを作成
install radio_bcm2048 /sbin/modprobe --ignore-install radio_bcm2048 && echo 4 > /sys/class/i2c-adapter/i2c-3/3-0022/region

*5
ざざざっ雑誌ちゃうわ!久米田康治やわ!

蛇足
FM送信機(/dev/radio0)の周波数帯を日本向けにしたい場合
/sys/class/i2c-adapter/i2c-2/2-0063/region
に上記と同じく3か4の値を書き込みます。
が、それだけでは設定UIは87.5Mhz〜108.0Mhzのままです。
周波数帯は決め打ちになっているのか、はたまたシステムのロケールにしたがって変更されるのか。
なかなか一筋縄には行きませんな。だがそれが良い。

2010/03/18

[Nokia N900] MerをmicroSDから起動/LXDEをセットアップ

松本素生ソロ活動かよ!

なんだか危ういMaemo5/Fremantle環境のバックアップとして、Mer(0.17testing11)をmicroSDにインストールしてみた記録です。
とりあえずLXDEおよび拙作clickhack900のセットアップまで。
お決まりの注意書きは一番下です。

必要なもの
  • N900
  • 空のmicroSD(2GB以上)
  • 転んでも泣かない根性
microSDのフォーマットなどはN900単体でも可能ですが、Linuxの入ったPCがあると便利かもです。

下準備
  • microSDにext3フォーマットされた2GB以上のパーティションを作る
ココらへんはサクッと書き飛ばしますが、参考までに、easy-debianでgpartedを使うなら、
$sudo apt-get install gparted dosfstools
$sudo gpartedbin
"Memeory card format unsupported"などと出ますが問題なくフォーマットできます。

松本素生ソロ活動かよ!
1GBはどこへ消えた?/スペンサー・ジョンンソ
今回はmer-armel-n900-rootfs-v0.17testing11.tar.gzを/home/user/MyDocs/にダウンロードしました。
  • qole氏のrepositoryからfanoush氏製bootmenuをインストールする
  1. AppMgrに登録してある人はAppMgrでbootmenuと検索、インストール
  2. してない人はここから直接.debをダウンロードの上、root権限で
    dpkg -i bootmenu_1.6_armel.deb
ランチャーから"Install Bootmenu"。
キーボード全開の状態で起動するとブートメニューが出ます。
  • gnuなtarをダウンロードする
先のアーカイブをN900で展開するよ。って人には必要です。
ここからダウンロードしたdebを
dpkg-deb -X tar_1.14-2.1osso_armel.deb /opt/tmptar
として展開しておきます。

インストール
  • merのrootfsを展開する
さきほど作ったパーティションをマウントします。
(少なくともext3な第二プライマリパーティションは自動でマウントしてくれない様です)
mkdir /media/mmc2
mount -t ext3 -o noatime /dev/mmcblk1p2 /media/mmc2
merのrootfsを展開します。
cd /media/mmc2
/opt/tmptar/usr/bin/tar --numeric-owner -pzxf /home/user/MyDocs/mer-armel-n900-rootfs-v0.17testing11.tar.gz
  • firmwareファイルをコピーする
完全にオープン。とは言えないN900の、無線LAN等各種ハードウェアをMer上で動かすためにfirmwareファイルをコピーします。
cp -Ra /lib/firmware/* lib/firmware/
どなたか俺はクローズドソースは好かん!という方がcatでゴリゴリとデバイスドライバなり書いていただけると皆ハッピーでラヴアンドピースになれるかと思います。
  • bootmenu用のコンフィグファイルを作成する
bootmenuにmerを登録します。
/etc/bootmenu.d/以下に以下のような内容で拡張子.item(例:merp2.item)のファイルを作成します。
今回は2番目のパーティションにインストールしたので、
1行目のITEM_NAMEには"partition2"、3行目のITEM_DEVICEには"p2"という文字列が含まれています。
ITEM_NAME="Mer (external SD, partition 2)"
ITEM_ID="mer"
ITEM_DEVICE="${EXT_CARD}p2"
ITEM_MODULES="mbcache jbd ext3"
ITEM_FSTYPE="ext3"
ITEM_FSOPTIONS="noatime,ro"
耐障害性は落ちてしまいますが、ITEM_FSOPTIONSにdata=writebackと付け加えるとちょっぴり高速かもしれません。
  • いったんMerを起動してユーザー登録などを済ませる
ひとまずN900を再起動し、Merを立ち上げます。
起動直後バイブレーションが作動しNokiaのロゴが出ますが、このタイミングでキーボードが開いていればBootmenuに入れます。
方向キーとReturnキーで先ほど登録したMerを選択して起動します。
ただし、バックライトオフの状態でMerを起動するとヒドい目に会うので、ツいていなくて点いていない場合はShutdownを選択。
キャリブレーションに始まるユーザー登録が済んだら、重いhildon-desktop*1を操作してxtermを起動し、
sudo reboot
と入力してCtrl+m。パスワードは先のウィザードで入力したモノです。
今度はキーボードを閉じた状態で起動するか、BootmenuでFlashを選ぶかしてMaemoを起動します。

*1
ハードウェアアクセラレーションを効かせたMerの動画なんかもあるのできっともうすぐサクサクしてくれるはず。
  • LXDEをインストール
まずは先程と同様にしてマウント。
mount -t ext3 -o noatime /dev/mmcblk1p2 /media/mmc2
現状デフォルトのhildon-desktopはごらんの有り様なので、代わりにネットブック用軽量WMとして名を馳せたLXDEを使います。
まずeasy-debianに同梱のシェルスクリプト/sbin/debianを用いてmer環境にchrootします。
(多分chrootコマンド単体でも必要十分です。)
debian(もしくはchroot) /media/mmc2
なにはともあれupdateし、続けてLXDEをインストールします。
apt-get update
apt-get install lxde lxlauncher
一方グラフィカルなログイン画面なんていらねえ族は、代わりに
apt-get --no-install-recommends install lxde libgtkstylus lxlauncher
su user
echo "exec startlxde" >> -/.xinitrc
chmod +x -/.xinitrc
終わったらexitもしくはCtrl+dでMaemoに戻ります。
  • LXDEでNetworkManager(nm-applet)のアイコンを出す
デフォルトでは、無線LAN接続をGUIで設定可能にしてくれる便利アプリ
NetworkManagerがLXDEのタスクバーに出ません。
そこで/media/mmc2/etc/xdg/autostart/nm-applet.desktop内OnlyShowInの値を
OnlyShowIn=GNOME;XFCE;LXDE
と書き換えるか
#OnlyShowIn=GNOME;XFCE;
とコメントアウトすれば、この問題を解決できます。
  • キーマップを入れ換える
Maemo環境のキーマップをMerに持っていきます。
cd /media/mmc2/usr/share/X11/
mv xkb xkb.old
cp -Ra /usr/share/X11/xkb .
しかしこの方法では”Shift+Fn+”という修飾が有効にならず、
またFn+方向キーのコンビネーションが無視されたり、GDMでログインできなかったり(!)するので、さらにXmodmapを利用します。
何処でもいいですが、例えば/media/mmc2/etc/gdm/Init/.Xmodmap.n900といったファイルを作成し、以下の内容を書き込みます。
keycode 36 = KP_Enter
keycode 74 = Tab
keycode 73 = Escape
ついでに/media/mmc2/etc/gdm/Init/Defaultの冒頭9行目あたり(つまりgdm_which()の直前ですね)に
xmodmap /etc/gdm/Init/.Xmodmap.n900
という一文を挿入します。
これで一応F7(-キー)でEscape、F8(+キー)でTabが打てるようになり、GDMからログインが可能になりました。
  • 右クリックを可能にする
拙作のclickhack900で右クリックを可能にする。
というかインストールされたlibgtkstylusによって長押しによる右クリックは実現されているので、正確には”別の方法で”可能にします。
ここからclickhack900.gzをダウンロード後、
mv clickhack900.gz /media/mmc2/usr/local/bin/
gunzip /media/mmc2/usr/local/bin/clickhack900.gz
加えて前出の/media/mmc2/etc/gdm/Init/Defaultの冒頭に
/usr/local/bin/clickhack900 &
と書いておくことで、Fn(青い矢印キー)を押している間 タップが右クリックになります。
もちろんドラッグ*2もできます。
(実際には単に/dev/input/event1の内容を拾って適宜xmodmapを実行するだけのhackと呼ぶのは憚られるシロモノだったりする)

*2
(こんなのセキュリティ的に)ダメ・ゼッタイという方はlibgtkstylusをお使い下さい。
  • 再起動してもう一度Merを立ち上げてみる
以上でインストールは終了です。
再起動してBootmenuからMerを選択し、
松本素生ソロ活動かよ!
こんな画面(GDM)
がでてくれば成功です。
Mer0.17testing11自体が正式リリース前でややバギーだったり、キーマップの問題から目をそらしていたり、バッテリー残量表示がなかったり*3しますが、ひとまず。

*3
これとバックライト調節に関してはdeblet時代の遺産が使えるのかもしれない。

ネタ元
http://mer-project.blogspot.com/2010/01/dual-booting-mer-on-nokia-n900.html

最後になりますが、お決まりの注意書きです。
この記事は、将来的にもっとボケが進行したり、トミー・リー・ジョーンズに記憶を消去されたり、自動車事故で15分ごとに記憶を失う障害を負い恋人の顔も思い出せない状況で進行する怒涛のクライム・サスペンス!な状況に陥ったときの備忘録であり、内容の正当性はまったく保証されません。過度な期待はしないでください。

2010/03/16

[Nokia N900] 雑多な雑感についての雑然たる雑文

ハードとソフト
  • 画面はリナザウと似た構造で、表層から感圧パネルを挟んで2~3ミリ奥まった所に液晶がある感じ。
    →感度がいいのもリナザウと似てるが、こっちは視野角がバッチリ広いし日光下でも見やすい。
    →色温度が高いところは初代iPhoneと似てるのかもしれない。
  • N900をしばらく使ったあとN810を触ると、N810のタブレット感*1に少々ビビる。
  • てかキーが少ないよ!
    →近接センサを修飾キーとして使うとかいうアレゲすぎる案があるらしい。
  • image-viewer(Photos)のResizeは劣化したのかも。特定の大きさにするのがより面倒になった。
    →GraphicsMagick使えばいいんだが、n900ではサイズのデカいアプリをインストールするのが恐い*2
  • 販促?用に入ってるChick WinslowのMagic WordsはイントロがJPop(しかもアニソン)

*1
野性のモバイラーのみが持つといわれている第八感。
JobsがiPadと名付けて商品化した事でも知られる。
*2
まんじゅう恐い的ないみではないです

mplayerとか
  • extrasのブツはnomenuでbulidされてるのがちょっと残念。
  • -ao alsaだと再生開始時に止まるが、-ao pulseなら無問題。
    →ってことで~/.mplayer/configにao=pulse,alsaと書く。
  • /etc/mplayer以下のコンフィグファイルを読んでない?
  • スライドロックすると再生が止まる。省電力の弊害か。
  • せっかく-vo xvで再生してるので、タップで再生/一時停止出来るようにしておく
    →~/.mplayer/input.confにMOUSE_BTN0 pauseと追記。
  • dbus-send --print-reply --dest=com.nokia.mediaplayer /com/nokia/mediaplayer com.nokia.mediaplayer.mime_open string:hyper_egashirakoushien_s12e14.mp4
    でmediaplayerにファイルを渡せるので、
    #!/bin/sh
    FILE=`realpath $1`
    [ -e $FILE ] &&\
    dbus-send --print-reply\
     --dest=com.nokia.mediaplayer /com/nokia/mediaplayer\
     com.nokia.mediaplayer.mime_open string:"$FILE"
    とかいう適当シェルスクリプトを置いておけば便利便利。

alsaとpulseaudio
  • alsamixerが最初から入っている
    →暇な時はalsamixer -c0で楽しもう。
  • さすがesdの置き換えを狙うだけあってpulseaudioの互換性が凄い。
    →/usr/bin/esdを用意するあたり、奴らは本気だ。
  • でもn900でpadspを使うにはちょっと作業が必要だった。
    まずdebian/lennyのpulseaudio-utilsをダウンロードしてdpkg-deb -Xで展開、libpulsedsp.soを抽出し/usr/lib/に放りこむ。
    このままだとgetoptsが無いと言われるので(getoptがコマンドでgetoptsがシェル関数らしい)
    bashを入れて、/usr/bin/padspの冒頭を
    #!/bin/sh
    から
    #!/bin/bash
    に変更する。

Stability
  • /optから/usr/lib以下にシンボリックリンクを貼るとリブートループに突入する?
    →wiki.maemo.orgを読めばそこらへん書いてありそう。
  • 3~4回フラッシュを経験し、精神的に打ちのめされつつも*3焼物職人としての自覚が芽生え始めたところでとある情報を手に入れた。
    →なんでも、リブートループに入った後でflasherから--enable-rd-modeするとループから抜けられる(ことがある)らしい。
    →ってことはパーミッションの関係なんだろうか。
  • N810と同じく、ブート画面にTuxとか出すにはkernel入れ換えが必要らしい。
    →んでもPR1.1のカーネルソースはまだ出ていないらしい。
  • そんなわけで、レスキューのためにもSDブートのMerを入れてみたのだ。
  • このガイダンスに従って入れる。
  • (ただし0.17testing11を使った。)
  • bootmenuのdebはお馴染みqole氏のrepository(http://qole.org/repository/)にあるよ。
  • なんとmer簡単になったもので、bootmenuのためにinitflasherしなくても良くなったらしい。

*3
N900のmicroUSBポートも物理的に打ちのめされている。

その他
  • N810をsambaサーバーにしてじみちに環境移行してますが、やたらと転送速度が遅い。一方WANだと速度が出る。謎に満ちてんな。
  • 内蔵32Gに書き込んでいると異常にもっさりする。swapの読み書きとあいまってIOが輻輳しているんだろうか。
  • D-Padがない
     →センターキー(Return)がない
      →一部アプリケーション(DilloとかXJPとか)はN900のリターンキー(KP_Enter)を認識しない
       →N900ではxmodmapもつかえない
        →どうするどうする
  • とりあえずXJPをKP_Enterに対応させてみました。
    →xrandrで無理やり縦画面にすると、なぜだかフォントが大きくなるようです。
wayv
まあ読みやすくていいけどさ。


追記:キーマップファイル/usr/share/X11/xkb/symbols/nokia_vndr/rx-51の397行目付近
key { [ KP_Enter ] };
key { [ Return , KP_Enter ] };

としてみました。
取り急ぎDilloとXJPで動作を確認しましたが、どうも動作がヤバそうだったらShift+Returnで回避しつつ書き戻すという方向で。

TODO
  • FMラジオを日本向け周波数帯にする。n800と同じならカーネルをいじる必要あり?先人たちの日本語記事を参考に。
  • N8x0ではNITDroidの人がグラフィカルなブートメニューとかカーネルを選択可能にするシステム(kexec)について研究していましたが、n900ではどうなんでしょう?

2010/02/28

[Nokia N810] 車輪(ahostwin)をつくろう、そしてあなたは画面を回す。(オマ ケ:gst-playerのアップデート)

できっこないをやらなくちゃ
できっこないをやらなくちゃ

hostwinをX11ネイティブにしてみました
Another hostwinで、ahostwin・・・名前のセンスはないです。(オマージュ!*1)
車輪の大発明がqole氏のeasydebianにおけるBundyo氏のhostwinだとすれば、こいつがまさに車輪の再発明。
hostwinと比べてちょっとだけ良い点は
  • Gtkじゃないので立ち上がりが早い
  • 背景色が指定できる
  • フルスクリーンオプション(-fs)でwmctrlとおさらば出来る
所。悪い点は、、、悪い点を書くにはこの余白(ブログ)はあまりに狭すぎる。。。
じゃあそもそもなんでそんなモノを作ったかと言うと、
easydebian(Xephyr)がMaemo(Xomap)側の画面回転に応じてくれないのを何とかしたかったからなのです。
で、それは結局Xrandrの一連のコマンド
xrandr --newmode portrait 0 480 0 0 0 800 0 0 0
xrandr --addmode default portrait
xrandr --output default --mode portrait
によって実現できました。
かくして要らない子となったahostwinの記事を書く理由?それを書くにはこのネット(余白)はあまりに狭すぎる。。。

ファイル:使い方:
ahostwin [-fs] [-wn windowname] [-ic iconname] [-bg #FFFFFF] [-e command]

ビルド:
gunzip ahostwin.c.gz
chmod +x ahostwin.c
./ahostwin.c


gst-playerのアップデート
gstreamer vs mplayer (1)に出てきたアレです。
実行中にバックライトがフェードするのを抑止するようにしました。
ファイル:

*1
QuasarMediaPlayerのcompat/qt3とかを使って、かの伝説的アプリabookreaderの
abookreader
ガワ*2

まではmakeできたんですが、
肝心の描画部分がQDirectPainterを使ってfbに書く事で実現されていて難題。つまり詰っている。
drawPixmapで置き換えるにはどーすればいいんだろう。
*2
ガワと言えばNintendo DSのピクトチャットを傍受するBSD(/Linux)向けアプリPictoSniffもガワだけmakeで放置されている。
pictosniff
ピーピング・田代・トム(通称出歯ガメ)

2010/02/22

[Nokia N810] 810 / ロシアへ愛をこめて (PowerVR MBX SDKに関するメモ)

歌声よおこれ
歌声よおこれ
To Russia with love. Спасибо Veska!
なにやらカスペルスキーの名産地ロシア語圏のInternetTablet系フォーラムで紹介して頂いた様で、ありがたい限りです。
いやぁ、google translateって本当にいいもんですねえ(google版シベリア超特急)。
あまり内容の無いブログですが今後ともよろしくお願いします。
最初ロシアからのアクセスが増えているのに気付いた時は、(ウサビッチを薦めすぎた廉かなんかで)ついにKGBに目を付けられたかと大変おののきましたよ。

さて、ざっとPowerVR MBX SDKを試してみた結果言えるのは、
現状、凄いものが見たいならliqflow(↓)をインストールした方が良いということです。


まあ人柱気質の開発者向けベータベータみたいなものですから当然なのですが、冒頭のスクリーンショット(xegltest)を撮るのに百億の再起動と千億のリセットが必要になった事は記しておきます。

動作が確認できたのはservice_testとxegltest、power_test、成功率の高い手順を愚直に書けば
  1. N810を起動
  2. Xterm(mrxvt)起動
  3. cat /proc/kmsg
  4. 新しいタブ(ウィンドウ)を開く
  5. /etc/init.d/rc.pvr start
  6. lsmod
    Module Size Used by
    omaplcd 10832 2 - Live 0xbf099000
    mbxaccess 25464 3 omaplcd, Live 0xbf091000
  7. mbxdaemon
  8. service_test q
  9. xegltest

ただし、xegltestでは画面更新(expose関係?)が上手く行っていないのか、マウスカーソル以下しか更新されません。
また、ウィンドウマネージャのXボタンでxegltestを終了するとmbxdaemonが落ちるようです。

ウチの環境ではglinfoをはじめ、egl_test等は
X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 3 (X_GetWindowAttributes)
Resource id in failed request: 0x0
Serial number of failed request: 7
と言って死んでしまいます。(Xephyr内でも同様)
バグ以外に怪しむべきは
  • Readme.txt流し読みのインストール方法
  • rotate対応版のXomap
てな所ですかね。

TMOのスレッドでは盛んに報告がされてますが、いまだTIの受理待ちの人もいるみたいですし、Merのblogに件のガイダンスが出てきたらいろいろわかってくるのではないでしょうか。

2010/02/21

[Nokia N810] PowerVR MBX SDKをインストール

青春狂想曲
やはりというべきか、待ちきれず手を出してしまいました。
前回ダウンロードしたOMAP24xx_MBX_K2621_N8xx_v3535630.zipを展開するとOMAP24xx_MBX_Linux_N8xx-3.5.35.630.binなるInstallJammer製インストーラが出てきます。
(余談ですが名前の通りのInstall Shieldクローン(OSS)で見た目もそっくり。ウィンドウマネージャのqvwmとどえらい調和*1してました。)
x86なLinux上で
chmod +x OMAP24xx_MBX_Linux_N8xx-3.5.35.630.bin
として実行属性をつけ
./OMAP24xx_MBX_Linux_N8xx-3.5.35.630.bin
でインストール開始。無事終了したらn810から操作
(今回はSambaで共有済みのディレクトリにインストールしました)
cd Graphics_SDK/OMAP24xx_MBX_SDK_N8xx/bin/binary_omap2420_linux_release/
debugとreleaseがありますが、お好みで。
install.sh中の改行コード(^M)が鬱陶しいのでまず排除。
perl -i.old -npe 's/\r\n/\n/' install.sh
あ、/etc/init.d/以下にインストールされるrc.pvrもついでに
perl -i.old -npe 's/\r\n/\n/' rc.pvr
[追記:]うっかりしてました。ここで
mv install.sh install.sh.old2
sed -e "s/2.6.21/2.6.21-omap1/g" install.sh.old2 > install.sh
[/追記]
そしたら
chmod +x install.sh
chmod +x rc.pvr
./install.sh

ライブラリのパス追加が面倒なので手動で/usr/local/lib以下のライブラリを/usr/libに移動して
ldconfig
次はkernelを焼く。rotateや高速MMCとはしばらくお別れ。
cp ../kernel/zImage /boot/
ln -fs /boot/zImage /etc/flash-and-reboot/kernel
flash-and-reboot
自動で再起動がかかる。起動出来たら万歳三唱。神に感謝*2
/etc/init.d/rc.pvr start
後、/sys/module/mbxaccess/以下を見てニヤニヤするべし。

*1
キル・ビル好きのFSF信者が見たら発狂するレベル。
*2
「あなたたちの神の名は、なんていうの?」
僕は深呼吸をして落ち着きを取り戻してから口を開いた。「ロックンロール」

[Nokia N810] ねんがんの PowerVRMBX SDK をてにいれた

世界をかえさせておくれよ
メールしてから待つこと三日。
もっと気合いを入れて書くべきだったかメール、とSEAMO的倒置法を用いてウェルテルばりに悩んでいる所にTIから返事が来ました。
書かれたリンク先でTI-Passシステムに登録し、my.TIのトップページに行くと、そこには大きく片仮名で"エクストラネット"の文字が!
はやる気持ちを抑えつつ、間接を極められた高橋名人ばりの速度でタップして跳んだページからOpenGLES SDK for OMAP2420 NokiaN800
の文字を捜し出し、OMAP24xx_MBX_K2621_N8xx_v3535630.zipをダウンロードすることに成功しました。リビジョンは3.5.35.630。
今回のドライバのMaemoコミュニティ側開発者の一人であり、Merの偉い人でもあるStkeeps氏が手順とか書いてくれるらしいのでそれ待ち。

2010/02/19

[Nokia N810] apwal/アイコン/グリッド/ランチャー

世界をかえさせておくれよ
世界をかえさせておくれよ
まえふり
はあまりに長いので後置されました。

ビデオ


インストール
Diablo/extras-devel/desktopセクション/apwal から

設定
apwalの設定はapwal configurationかコマンドラインから
apwal --edit (--config)

skippy-xd.rcでは
rbottom = apwal ,NULL

四隅で設定を変えたいなら
lbottom = apwal --config /home/user/.apwalrc_lb.xml ,NULL

といった具合に--configをつけて設定ファイルを読ませる。
(名前にNULLを設定しておくとポップアップが出ません。)

apwalは"カーソル位置を基点にアイコンを出す"ランチャーなのでハードキーに割り当てるとどこにアイコンが出るか判りません。(skippy-xd側でXWarpPointerとかを呼び出せば解決できる?)

本家http://apwal.free.fr/

変更点
オリジナルでMaemoのアイコンを使うと
wayv
こういうこと
になるので原始的forループとgdk_pixbuf_scale_simpleを用いてアイコンを48x48内に等縮して表示するようにしました。
GDK_INTERP_NEARESTだし速度低下はそんなに無いと思うけど、気になる人は48x48のアイコンを自前でつくって設定すればよろし。
apwalのコンフィグ後にapwal自体が縮小したアイコンを作ってどこかに保存しておくのがベスト?

そのほか
apwalって発音がわからねえ(さすがフランス製だ!)
gtkじゃないNetbook Laucher(netbook-launcher-efl)があるらしいので試してみる予定。マツコDXの如き鈍重さで動くだろう


はてなユーザーのように長くて衒学趣味的でスノッブ丸出しに書いてみた持論*1、もしくはちんぷんかんぷんなキャプション*2
最速インターフェースは紙とペンじゃないかと思っている門外漢ですが、
skipy-xd+wayvが技術的興味を他にしては実用性ゼロなのは明白です。
SwapKey押す -> キーを押すか四隅をタップ -> 図形を書く
この3ステップでは手の移動距離(=時間的コスト)があまりに大きい。
そのうえn8x0はサイズからして猪木とスタパ先生以外の日本人には片手で扱えない代物で*3、そもそものモバイル機器におけるジェスチャー認識のレーゾンデートル―すなわち"片手では厳しい正確なタップの代替"―を根本的に否定してしまっている。
いっぽうでSkippy-xd+dmenuは、なるほど
SwapKey押す -> キーを押して起動
という2ステップでのアプリ起動が可能だけれども、そもそも
  • キーボードを開くので片手操作不可能
  • n800ユーザーは使えない

という難点がある。
ここで
SwapKey押す->SwapKey押す->ホーム画面
という多分Skippy-xdによってもたらされる最も大きな恩恵である所のショートカットを
SwapKey押す->SwapKey押す->なんらかのランチャ->SwapKey押す->ホーム画面
であるとか
SwapKey押す->SwapKey押す->ホーム画面->SwapKey押す->なんらかのランチャ
という風に組み換えるのが現時点で出しうる最適解だと考えるが、
最適解を出してしまうと手段の目的化というモバイラーにとっての最大の目的としばらくさよならしなくてはならなくなるので、
SwapKey押す -> キーを押すか四隅をタップ -> アイコン型ランチャー起動
という解決に落ち着きましたよ。
あ、Skippy-xd自体アイキャンディー以外の何者でもないという事実には目をつぶっている。


*1
過度な一般化はいつも楽しく、後で読み返すとイヌのおとしもの並み
*2
まるでスペインの宗教裁判のようだ
*3
通称ドラゴンころし


2010/02/18

[Nokia N810] PowerVRMBXドライバキター

世界をかえさせておくれよ
TI's OMAP Gaming SDK and Tools
にはまだ出てないですが、gamingonomap@list.ti.comにかくメールしてExtraNetsのURLとパスワードをもらえばOMAP24xx_MBX_K2621_N8xx_v3535630.zipとやらが手に入るらしい。
my.TIのアカウントは大分前に取得しましたが、やっぱりメールする必要があるんですね。。。
依然エンドユーザー向け品質ではないし、カーネル焼直したり面倒っぽいので、いっそコミュニティSSU出るまで待ってしまおうか。

追記:メールしなくてもmy.TIトップページに出るっぽい?
areas of interestを適切に設定する必要があるとか?

それから本文に全然関係ないですが、QuasarMediaPlayer最新版( 0.96r188r31)がdiabloのextras-develいりしました。
maemo向けにもechoテーマ向けのQt3色設定とかQscrobblerが閉じられない問題の解決とかいろいろ更新があるのでぜひ。
それにしてもQt3をextras-develに入れるの大変でした。(debianのをほとんどそのままもってきただけなんだけど)
追記2:メール必須です

2010/02/13

[Nokia N810] MPlayer SVN-r30541-4.3.2 (C) 2000-2010 MPlayer Team


光のロック

たまには人に親切にしようよ楽しいよ、と言ったばかりにひとりの男が木に釘付けにされてから二千年近く

いまだに人間はブログを書いてしまう罪な生き物でもあるので、こんな時間に更新。
MPlayer SVN-r30541-4.3.2*1でH.264再生できました。
とはいえ、rc1,rc2よりは格段に軽いものの、gstreamerには勝てませんでした。DSPつよし*2

ファイル: mplayer_r30541-4.3.2.gz

いきさつ:
先日のポストにこんなコメント
>r30479
1月終わりぐらいのものですか。ならもっと新しいrev使った方が良いかと。
ffmpegのr21696-r21705において、更なるarmv6向けの最適化が入ったようですし。

を頂いたので、さっそくsvn update。
出来上がったバイナリでh264なファイルを再生してみたところ、前回と同じでさっぱりダメ。
苦し紛れにlibavcodec以下h264と名の付くファイルを
-mfpu=vfp -mfloat-abi=softfp -mcpu=arm1136jf-s
ではなく
-mcpu=arm1136jf-s
オプション付きでリコンパイルしたところ、再生できるようになりました。

それから前回書き忘れていたんですが、asはCodeSourcery(http://www.codesourcery.com/)の新しい奴(GNU assembler version 2.19.51 (armv6l-unknown-linux-gnueabi) using BFD version (GNU Binutils) 2.19.51.20090709)を使ってます。

*1
3.4.4だったのはmaemoパッチのせい?
俺の中の怠け者の血が騒ぐので(つまりめんどくさいので)未確認。
*2
公園で全裸になって逮捕されてもテレビに復帰できるレベル*3
*3
誰とは言ってないし、鶴瓶師匠なんて生放送で”出し”ましたが大丈夫だったんですよ批判してる訳じゃないんですよジャニーズファンのみなさん

その他:
  • Maemo5向けにmplayerをポートしてる人がMaemo4向けにもポートするとかいう噂を聞きました
  • XDaliClockですが既にhidonizeされたポートがchinookのextrasにありました。有名アプリケーションだもんなぁ。。(S60でも動くとか)

2010/02/12

[Nokia N810] XDaliClockの記録残しつつ

その温もりに用がある
記事タイトルにも潜む例の絵(ラブソング)の中のアナログ時計が動くアプリがあったらそれはそれで楽しく、かつ見辛いでしょうが、
XDaliClockならデジタル時計の文字がぐねぐね動くので楽しさと見易さが両立*1します。

ビデオ:

gst-lauch+ximagesrcでスクリーンキャストもどき*2をしてみました。
再生速度がなんかはやい。

ファイル:
オリジナルからの変更点:
  • フルスクリーンキー(F6)でフルスクリーン
  • スワップキー(ESC)で終了
  • -fullscreenオプションでNetWMを使うように変更
使い方:
gunzipして/usr/local/bin/とか適当にパスの通ったところに放り込む
オプションに関してはxdaliclock -h すれば全部判りますが、
-fg  で文字色、-bg で背景色指定
-bulitinX でフォントサイズ指定。横画面なら-builtin3がいい感じ
-cycleでサイケな気分
-transparentはskippy-xdの画面で効果あり(重い)
-countdown で±百時間内でのカウントダウン/アップ

上の動画でやってるように数字キーを押すと文字盤が変化します。
わあ!11じ11ぷん11びょうだ!とかやってともだちをおどろかせましょう。

ビルド:
本家(http://www.jwz.org/xdaliclock/)からxdaliclock-2.30.tar.gzをダウンロード、展開して
cd X11 ; ./configure --prefix=/usr && make
gtkディレクトリにはgtkバージョンがありますが、まだ未完成のようです。(色指定などが出来ない)
フォントサイズを画面サイズに応じて変更してくれてたりと便利な部分もあるのでアップデートに期待。

*1
正確には、楽しさと見易さとダリっぽさが三国鼎立している。
*2
gst-launch ximagesrc ! videoscale ! video/x-raw-rgb,width=400,height=240,framerate=15/1 ! ffmpegcolorspace ! jpegenc ! mux. avimux name=mux ! filesink location=sctest1.avi


雑感:
  • Mac(Classic|OSX),PalmOS,WebOS,Linux(X)で動くらしい(javascriptのもあるね)
  • hildonタスクスイッチャに出るようにした方がいいかな
  • -countdownは恋人が東京タワーごと人質に取られた時とかに使えばいいんじゃない
  • 記事の出だしがなんか翻訳サイトの訳文みたいになってしまった
  • 記録残しつつ百変華でググッたら4番目にDQNネームのサイトが出てきた
    ショックは大きく、わたしはかなしんでいる


2010/02/11

[Nokia N810] [App Review] 百変華!SVGClock

wayv
微妙に役に立たないアプリを排出(!輩出)する事で一部業界*1ではわりと有名らしいと聞かなくもないような気がするこのブログにも、
とうとう、有用なアプリケーションを紹介する日が来てしまいましたまあ落ち着けっ!
。。。息を吐いて、、、吸って、、、吐いて、、、吸って、、、、
吐いて、、、扱って、、、吐いて、、、吸って、、、、
吐いて、、、吐いて、、、吐いて、、、吸って、、、、


はい。今"扱"が混じっている事に気付いた人はこんなどうでもいいブログをしっかり読んでしまった事を猛省すべきです。
気付かなかった人は今一度ちゃんと人生を見つめ直してください。
(あんまり見るとゲシュタルト崩壊しますよ)

そういうわけで、今回紹介するのはSVGClock。
(ユーザー数の少ない)Maemo環境にはありえべからざる100種類以上のスキンが手に入ってしまうデスクトップウィジェットです。

インストール:
1.extras-develを有効にします
2.TMOのこのスレッドのファーストポストから
  • SVGClock-1.0.0-1_all.deb
  • Themes.tar.gz
くわえてsvgclock.py.zip をダウンロード*2 /home/user/MyDocs/あたりに保存しておきます
3.Xtermを開き
$sudo apt-get install gnome-python-desktop librsvg2-2 librsvg2-common hildon-desktop-python-loader python2.5-hildondesktop python2.5-hildon python2.5-gobject python2.5-dbus python2.5-osso python2.5-cairo python2.5-gtk2
4.SVGClockとデフォルトのテーマをインストール
$cd /home/user/MyDocs
$sudo dpkg -i SVGClock-1.0.0-1_all.deb
$tar xvzf Themes.tar.gz
$chown -R user:users Themes
5.最新のスクリプトと入れ換え
$sudo mv svgclock.py.zip /usr/lib/hildon-desktop/svgclock.py
(.zipは偽装なのでそのまま移動すればよし)
6.ホーム画面-メニュー-Select applets-SVGClockにチェックを入れOK
7.うまくいけば
wayv
こいつが出てくる

スキンの入れ換え:
1.好みのCairo-Clock向けスキンをココ(Gnome-Look.org)とかからダウンロード、/home/user/MyDocs/Themesに保存
2.Xtermを開いて/home/user/MyDocs/Themes/に移動
$cd /home/user/MyDocs/Themes/
3.デフォルトのテーマを移動
(スキン入れかえ一回目)$mv default old.default
(2回目から)$rm default
4.$tar xvzf ukagaka.tar.gz だとか$tar xvjf kiss.tar.bz2だとかしてさっきダウンロードしたテーマを展開
5.そのテーマを有効化(foobarは4.で展開して出てきたフォルダ名)
$ln -s foobar default
6. インストールの6.と同様に今度はチェックをはずしてOK
7. 6.と同様にチェックをいれてOK

*1
マリモ業界?あとガリ業界?
*2
debのバージョンアップがあればsvgclock.py.zipのダウンロード及びインストールの5は必要ありません。

雑感:
  • なにはともあれ作者さんに感謝
  • 作者はTMOでお世話になっているshinさんです。
  • インストールがやや頻雑(ああそうですか)ですね
  • まあいったん設定すればそう変えることは無いだろうから問題ないかも
  • 各スキンフォルダ内の.svgファイルを雛形にInkscapeなどでオリジナルの時計が作れます
  • 共通部品である各スキンフォルダ内の.svgファイルを入れ替えればもっと手軽にオリジナルの時計が作れます
  • JapaneseThemeClockにはちょっと笑った。トトロいいですね
  • N900でも動くらしい

2010/02/10

[Nokia N810] gstreamer(gst-ffmpeg) vs mplayer (SVN-r30479-3.4.4)で H.264+aac再生対決 (2)

言いたいことも言えずに! (少ないキューブリック*1知識でがんばって書いています)
ハイハイゼア!
前回のラポストのグラフはHeartRails GraphてえハラーショーなWebサービスで作ったんだ。いくらグルーピーな俺でもこのサイトが如何にキューブリックを偏愛してるかはすぐにわかったぜウジ虫!
ライティライト、今回はmplayerをbuildする訳だが、ソースコードをじっくりかわいがった結果、まるでオープンソース界にそびえ立つクソのようになって、なって、えーっと、
(ハートマン語彙が尽きた)

さりとてデイジィベルを歌う訳にもいかないので
さっさと結論に入りますと、mplayerのrc1,rc2*2ではとても再生できず、最新svnはH.264の判別にすら失敗しました。
(適当半手動パッチが原因?)
かくして、前回の冒頭に戻ってgstreamerの勝ち。

某不正献金問題に対するマスコミ各社同様に役に立たなくなってしまった(長い修辞)
SMplay(svnのmplayer)*3ですが、
さすが最新ソースというべきか、はたまた例の魔法の呪文*4のおかげか、
rc2よりキビキビ動くので、amrとlibcacaサポートを有効にしてコンパイルしてみました。
多分libncurseswも要るのでextras-develにある奴を使ってください。
オマケはlibgstcacasink.so。

ファイル:


インストール:
  • *.deb : dpkg -i
  • *.gz : gunzip後、mplayerは/usr/local/bin/だとか適当な所へ、
    libgstcacasink.soは/usr/lib/gstreamer-0.10/へ

使いかた:
mplayer_svn-30479-3.4.4 -vo caca -vf scale -tv driver=v4l2:width=192:height=144:noaudio -fps 15 tv://
だとか
gst-launch v4l2src ! 'video/x-yuv-rgb,width=320,height=240,framerate=8/1' ! ffmpegcolorspace ! cacasink

で前出のネオ拡張現実。*5
neoar
コレです

libcaca_0.99.16-maemo1_armel.debに同梱の
cacaview
cacaview

は"cacaview necofolder/koneko/*.jpg"(imlib2が要ります)


*1
声に出していってみよう!モバイラーならゾクッとするはず。
キュー、ブリック。
*2
extrasにある1.0rc1と、TMOのこのスレッド(http://forums.internettablettalk.com/showthread.php?t=18231 )にあるbundyo氏版rc2(SVN-r26265-3.4.4)
オプションはほとんどmaemoデフォルトのmplayer.conf +
-correct-pts -noframedrop -vfm ffmpeg -lavdopts fast:skiploopfilter=all
*3
その長く果てしないコンパイルの間にN810が二回落ちたことで知られている。
*4
-mfpu=vfp -mfloat-abi=softfp -mcpu=arm1136jf-s
高度に発達した科学や愛の実在並に理解不能デス。
*5
よくよく考えるとネオのは拡張仮想現実ですね。

ビルド:
libamr はここ(http://www.penguin.cz/~utx/amr)から
libcaca はこちら(http://caca.zoy.org/)から
mplayer はあちら(http://www.mplayerhq.hu/MPlayer/releases/mplayer-export-snapshot.tar.bz2)から
mplayerのmaemopatchはそこら(http://www.mediafire.com/?noc0lynd0gi)から 持ってきました。
libgstcacasinkはこのgstreamer-plugins-good(http://www.gstreamer.net/src/gst-plugins-good/)の中にあります。

mplayerのconfigureは
--enable-armv5te --enable-armv6 --enable-armvfp --enable-largefiles --prefix=/usr --confdir=/etc/mplayer --enable-alsa --disable-ossaudio --enable-menu --disable-md5sum --enable-freetype --enable-esd --enable-sdl --enable-mad --enable-caca --enable-fbdev --disable-mencoder --enable-libopencore_amrnb --enable-libopencore_amrwb
こんなかんじで、patchしてからconfig.makに例の呪文をつけました。
そのあと/usr/lib以下libamrnbからlibopencore_amrnbにシンボリックリンクしてmake。

2010/02/08

[Nokia N810] gstreamer(gst-ffmpeg) vs mplayer (SVN-r30479-3.4.4)でH.264+aac再生対決 (1)

wayv
どうもみなさんボンジュール

最近は動画共有サイトに高画質化の波が押し寄せてきているようで、N810ではちょっとつらい場面も増えてきたのでいろいろ試行錯誤しました。
結論からいえば、gstreamerの勝ち。しかし試合に勝って勝負に負けた感じ。
判りやすく言うと、gstreamerもmplayerも力不足でした。

収穫はmplayerでamr(nb/wb)が再生できるようになったこと。
よくあるガラケーの.3gpで音が出るようになります。
(標準のmediaplayerでは前から再生できたけど、あんなの重くて使ってられません。)
動画を文字列で表示する、いわばaalib(http://aa-project.sourceforge.net/gallery/)のカラー版、libcaca(http://caca.zoy.org/)をくっつけてみたりもしました(↑↓)。

wayv
縮小するとわかりやすい

カメラと繋げば、コレが拡張現実(http://www.youtube.com/watch?v=WR2GUWrxTmU)ってやつだ!(ネオ的な意味で)。
wayv
某アニメ風にZaurus

N8x0とおなじCPU(OMAP2420)を搭載したガラケーでH.264再生してたりしますし、
PowerVRMBXといっしょにIVAもオープンになったらもうちょっと望みが出てくるのかも。


まずgtreamer。
よさげなフロントエンドがなかったので*1、今回はコマンドラインからgst-launchを使います。
gst-lauchはべつだん動画再生ソフトという訳ではないので
  • シークや音量調節ができない
  • 今回はffmpegを使うので結局中身はmplayerと同じ(むしろバージョンが古い)
などはっきり言って良いとこ無しなのですが、
修造本気出せ
N810でのgstreamerにはmplayerにはない大きな利点がひとつあります。

そう、dspmp3sinkやdspaacsink、dsppcmsinkなどのエレメントから、dspにアクセス出来るのです。
たとえばmp3ではmplayerの固定小数点化されたlibmadと、dspでの再生に大きな差はないのですが、
これがaacとなると、現状手に入るmaemo向けmplayer(libfaad)ではやたらとCPUを食います。
ただでさえ重いh264ですので、少しでも他の計算は少なくしておきたいところです。
(ただし、フツーのカーネルではdspを使っている間cpuクロックが330Mhzに固定されるので、トレードオフではある)

さっそくやってみます。
最初から入っているgst-ffmpegはいろいろ機能が削除されているので、ここ(http://www.gstreamer.net/src/gst-ffmpeg/)からソースを手に入れてbuildします。
といってもあまりに新しいとgstreamer本体のバージョンが古すぎて怒られるのでちょい古めをチョイス。今回は0.10.2ぐらいにしておきました。
展開してconfigureし、いざmake、といきたいところですが
ここでMakefileに魔法の呪文を追加します。
-mfpu=vfp -mfloat-abi=softfp -mcpu=arm1136jf-s
これらをgccの引数にするとすこしだけarmに最適化されるらしいです。
バイナリサイズは確実に小さくなりますね。(Autobuilderでつくったバイナリのサイズが自前ビルドと変わるのはコレのせい?)
for FIL in `find . -name Makefile` ; do cp $FIL $FIL.bak ; sed -e "s/-O2/-O2 -mfpu=vfp -mfloat-abi=softfp -mcpu=arm1136jf-s/g" $FIL.bak > $FIL ; done
こんなかんじで大雑把にやりましたが、環境変数とかで一括指定する方法がある気もする。
makeできたら、
mv /usr/lib/gstreamer-0.10/libgstffmpeg.so /usr/lib/gstreamer-0.10/libgstffmpeg.so.old.maemo
として、 gstreamer0.10-ffmpeg-ossoのバックアップをとり、
mv .lib/libgstffmpeg.so /usr/lib/gstreamer-0.10/ 
で出来上がったlibgstffmpeg.soを/usr/lib/gstreamer-0.10に放り込んでいよいよ再生。
gst-launch filesrc location=hyper_egashira_kousien_2nd_008.flv ! ffdemux_mov_mp4_m4a_3gp_3g2_mj2 name=demuxer demuxer. ! queue ! ffdec_h264 !xvimagesink force-aspect-ratio=yes demuxer. ! queue ! dspaacsink
うーん。試してみたのは512x288/H.264/128kAACで動きの少ない動画だったのでそこそこいけましたが、動きの激しいシーンではだいぶコマ落ちしました。
好印象だったのは再生速度が変わらないところですね。
mplayerだと間延びしたように音声の再生がおくれるのですが、gstreamerだと映像と音声がずれません。
ファイル: libgstffmpeg.so.gz


*1Totem以外にも日本の方が作られているYuumo(http://www.ryuuo.com/movie/)なんてのがありますが、多分一番シンプルなのはMarc-André Lureauさんが書かれてFelipe Contrerasさん(http://felipec.wordpress.com)がメンテしているgst-player(http://github.com/felipec/gst-player)。
gnome関連のライブラリがいらなくてmakeは楽チン、Youtubeのflvだとかvimeoのmp4はdspを使って再生してくれますし、シークもできますが、今回再生した動画とはどうも相性がわるいようでした(自動判別が失敗する)。
もちろん使い分ければ便利です。フルスクリーンキー(F6)が効くようにしたバイナリをおいておきます。使いかたはgst-player /path/to/yourfile.hoost.ernesto
ファイル: gst-player.gz

以下もっと余談。Felipe氏はgst-omapfb(http://github.com/felipec/gst-omapfb)なんてのにも関わっていて、こりゃ便利そうだとmakeしてみたのですが、N810では岸辺露伴ばりに動きません。

#gst-launch ~~~ ! omapfbsink
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
Setting pipeline to NULL ...
FREEING pipeline ...

どうやらフレームバッファのmmapで失敗してるようなので、mplayerのvo_nokia770.c(-vo omapfb)からコードを失敬していじっていると、ひとたび再生すればもれなく再起動まで画面をぶっ壊すおののき系最恐バイナリが出来てしまい、あえなくお蔵入りとなりました。


さてと、随分と長くなりました(約500わたし彼女)。よってmplayerとlibcaca編は後半へつづく

2010/02/02

[Nokia N810] wayVは愉快なジェスチャなランチャ


N900など当代の加速度センサ入りスマートフォンですと、
例えばハルヒダンス(2番)を踊ってモバイル版AR-MMDアプリを起動するだとか、事態はまさに狂乱の様相を呈してくるのでありますが、
これがN8x0のようなロートル旧世代PDAなら、タッチパネルにマルを描いてメモ帳を起動するくらいですむわけです。
わけなのでwayV+skippy-xdで快適ジェスチャーランチャ生活。はじまる。

インストール:
extras-develのdesktopカテゴリ、wayv-maemoより

ビデオ:


その他:
本家はこちら(http://www.stressbunny.com/wayv/)。

skippy-xd.rcでの設定は
lbottom = /usr/bin/wayv /home/user/.wayv.skippy.conf ,wayV
てな感じでOK。 (.wayv.skippy.confは自動でインストールされます。)

設定はAppMenu - wayV configurationか、/home/user/.wayv.skippy.confを任意のエディタで編集することで出来ます。
(wayV configurationの実体はleafpad(無ければosso-notes)に/home/user/wayv.skippy.confを渡すだけのシェルクスリプトです。)
confファイルはデフォルトでは/etc/wayv/wayv.confですが、(上記のように)/usr/bin/wayvの第一引数に指定することで別の物も使えます。
したがって、skippy-xd.rcにおけるrtop rbottom ltop lbottomにそれぞれ違う設定のwayVを割り当てるなんてことも可能です(覚えてらんないけど)。

confファイルでは、
プリセットされた各図形にconfファイル後部に記載されたactionを割り当てていきます。
手軽で認識率が高い図形はc / i - L バックスラッシュ ダウンバックスラッシュ shape1(逆L)などですかね。
コレだけではバリエーションが足りないという人は、confファイル冒頭の
Think = "Pda"
をコメントアウトし
# Think = "Pda & Vector"
の#を外すと、各図形の書き方向も考慮されるようになり、ちょっとハッピーです。


本来、wayVは常駐型アプリケーションです。
しかしながら、随時起動させても十分速く、またN810的にはその方が便利なので、若干改造しました。
具体的にはsrc/process.cの分岐条件WA_EXEC(抄出)

                        case WA_EXEC:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                /* Free up the parsed commandline */
                                for(a = 0; temp[a] != NULL; a++)
                                        free(temp[a]);

                                free(temp);
                                exit(0); 
           break:
のbreak一歩手前にexit()を挿入することで、アプリケーションが起動した後、すぐに終了するようになっています。

そのほか、
dbus-send --session --print-reply --dest=org.freedesktop.Notifications \
 /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint\
 string:
を利用してwayv.skippy.conf内の各actionで指定されたprocess = exec "foo"のfoo部分をポップアップ表示します.。





2010/01/27

[Nokia N810] minivmacでN810はサクサクレトロiTablet(iSlate)になる。


BasiliskII(漢字Talk7)なんかより、もっとレトロフューチャーするために、MacintoshPlus on N810と洒落込んでみました。
使うのはminivmac
WindowsやOSX、Linuxは言うに及ばず、PocketPCだとかiPhoneにも移植されているマルチな奴です(メイドロボじゃないよ)。
既にTMO(というかITTの頃のハナシだけど)で配布されてますが、画面が小さかったり、本家で新バージョンが出ていたりするので、自分でbuildしてみることにしました。


minivmacのbuildはすさまじくハッキッシュ
あ…ありのまま 起こった事を話すぜ!
「ソースコードをダウンロードしたと思ったらディスクイメージが入っていた」
な、何を言っているかわからねーと思うが、俺も何が起こったのかわからなかった。
本家に「v3.1.3のソースコードはディスクイメージの形で配布され、buildするにはv3.0.0以降のminivmacが必要」
とか書いてあって頭がどうにかなりそうだった。

が、よく考えると、もうどうにかなってるので大丈夫でした。


さて整理すると、
*各プラットフォーム向けソースコードを別々に配布するのはもうメンドーだ
 →*マルチプラットフォームなconfigureみたいなのがあるといいよね
  →*必要なのは共通の実行環境か
 →*minivmac使いが共通して持ってるモノってなんだ?
→*一つ前のバージョンのminivmacはあるよな
   →*minivmacを実行環境にしたソースコード生成アプリを書けばいいんだ!
ということなのではないでしょうか。(頭に*の付いた行は妄想です。)
なんか鶏卵問題というか、自己言及に陥りそうですが、
win/mac/linux向けには公式でバイナリ配布してるので、buildはあくまでもチューンしたい人向けのオプションということなんでしょう。

このソースコードジェネレーター(たぶん言い方があるよなぁ)はBasiliskIIなど他のエミュレータ上のみならずMacPlus実機でも動いちゃったりします。
しかしながら、minivmacを使うと出来上がったソースコードのアーカイブをホストのディスクに書き出してくれるので便利がいいです。


そういうわけで
とりあえず上記TMOのminivmacをつかってやってみます
(スクリーンショットは便宜上800x480ですが、ホントのTMO版minivmacは512x342です。)

minivmac、Disk603.dsk、vMac.romを一つのディレクトリーにまとめて、
minivmac Disk603.dsk /path/to/sourcecode/minivmac-x.x.x.src.dsk
として起動。
ちょっとかぶってますが

buildをダブルタップするとテキストウィンドウが開くので
そこに本家のマニュアルを読みつつオプションを入れます。
-t lx86 -e bgc -api xwn -no-asm -eol unx -hres 800 -vres 480 -arc tar
最終的にはこんな感じに。
-t lx86 x86とかついてますがアーキテクチャ依存のコードは吐きません。
-api gtk は微妙に機能が削れるのでやめて-api xwn。
-no-asm はpowerpc環境以外意味をなさないらしいですが気休めに。
-sound 1 だとalsaをつかって音をだしてくれるようですが、esddspも効き目無しで結局off(デフォルトでoff)
準備が出来たらGo.

ウィンドウがアクティブでないと(前面にないと)処理が止まる?ので御注意を。
しばらくするとminivmacと同じディレクトリにソースコードのtarボールがつくられるので、tar xvfで展開してcd,make。
うまくいけばminivmacが完成。
N810上でも完成。
はしたのですが、動作速度がうまく調節できず、爆速で動いてしまうバイナリになりました。
まあどうってことはありません。使わないし(えっ)。
しかしながら、このままだと、n810ではフルスクリーン(ctrl+F)時にカーソルがヘンな動きをしてしまいます。
wmctrl でフルスクリーンにするとまともなので、windowmanagerの機能をつかってフルスクリーンになるように改造してみました。

ファイル:
  • minivmac.xwn.hres.gz
  • minivmac-3.1.3-lx86-xwn-fullscreen.patch.gz


  • Linux Mac Mac 偽Mac(mlwm)!


    *あんまり関係ないですが、appleからiTabletが送られてきました。テストして欲しいそうです。

    2010/01/24

    [Nokia N810] [Nokia N900] N8x0に及ばぬ一点を越えるためN900はusbipの手を 借りてUSBホストになる

    メモメモ。
    TMO
    本家
    n8x0をサーバーにすればモバイルでもOK.
    んでもUSBフラッシュメモリ/HDDはどうせWifi経由ならSambaのほうがオーバーヘッドが少なそう。
    HIDもsynergyかBlueMaemoでOK.
    当然マニアックな使いかた限定か。

    ----
    NexusOneは液晶綺麗すぎでしょう。OLEDスゴい。RAM512Mも魅力的だ。電子コンパスは3軸。どうするどうする。

    [Nokia N810] 結局dillo2.1.1は改造され適当なパッチが残される。

    dillo google

    先日のポストではローカルhtml設置で妥協しましたが、結局ソースコードに手を出しました。
    反省はしていないが公開はしている(diffデス)。

    変更点 :
  • ショットカットキーにwebsearch2を追加
    → SelectionのPrimary(例:Dilloで選択した文字列)を新しいタブで検索
  • Shift+リンクタップでリンク先を新しいタブに開く機能を追加
  • 新しいタブを開いたとき、focusがどっかにいってしまうのを修正
    → タブを開いた直後、Shift+左右キーでタブ移動可能に


  • ファイル :
  • dillo.moded.gz
  • dillo_maemo-1.diff.gz


  • 詳細 :
    - ~/.dillo/keysrcか/etc/dillo/keysrcのwebsearch2に設定したショートカットキーから、選択文字列を新しいタブで検索できます。
    デフォルトはCtrl+g、でも検索ウィンドウを使わないならCtrl+sとかで良いと思います。
    -----------以下無用のこと-------------
    パッチを読めばマルわかりですが、バツボタンをミドルクリックしたときの処理をちょっと替えて、かつ、ショートカットキーからその処理を実行するようにしただけです。
    したがってバツボタンをミドルクリックしてコピーしたURLを開いていたマニアック野郎は、このパッチをあてると、かなしみのひとになるでしょう。
    ホントは別のwidgetにhandleさせるか、xembed.c辺りをいじくり倒すべきですね。まあ適当パッチですゆえ。
    -------------------------------------------------

    - shift + リンクタップでリンク先が新しいタブに開きます。
    2.x以前のDilloとか、FirefoxだのchromeだのではフツーShiftではなくてCtrlですが、shift+左右キーがタブ移動に割り当てられていることを鑑みてこうしてみました。
    ちゅーかデフォでは中クリックからしか新タブに開けないのですが、それってなんかヘン。

    - 新しいタブを裏で開いたとき、focusがどっかにいってしまうのを修正。(?)
    a_UIcmd_open_url_nt()にurlを渡すと新タブで開いてくれるわけですが、裏で開いた後、一度画面をタップしないとタブ移動が出来ないようだったのでmain_areaにfocusするようにしてみました。

    後は
  • ~(チルダ)の処理
  • 文字エンコード選択
  • MatchboxWM固有(たぶん)の問題(focusが変なせいでちょいちょいキー入力が死ぬ)

  • あたりが実装/解決されたら嬉しい。
    おまけで
    インライン入力(これはfltk2周り?)とか、w3mライクにttp://とembed,objectタグを処理できたり、リンク先を別プログラムに渡せるようになったりしたら楽しいですね。
    2.1.2が待ち遠しい。

    2010/01/20

    [Nokia N810] 筆圧検知できますよ (アップデート1)

    前回の続きです。

    ポップ野郎!

    モバ絵するほどの絵心も風流心もないですが、なんとなくアップデート。

    ファイル :
  • xpressure.gz
  • makai-zou.diff.gz

  • 現在のキーマップ :
  • スワップキー(ESC) : 終了
  • フルスクリーンキー(F6) : ペン色がランダムに変化
  • プラスキー(F7) : ペン色の白黒きりかえ ←new
  • D-padセンター : キャンバスリセット
  • D-pad左右 : ペンサイズ変更1 ←new
  • D-pad上下 : ペンサイズ変更2 ←new

  • 変更点 :
  • ペンサイズの調節機能追加
  • 偽消しゴム機能追加
  • 名前を変えました

  • ペンサイズは
    (変数1 - 筆圧生データ) / 変数2 = ペン半径
    という計算で決定されます。
    この変数1および変数2を、それぞれD-Padの左右キー/上下キーで変更できるようにしてみました。
    変数2が2.5ぐらいだといい感じですね。

    偽消しゴム機能はペン色の白黒を切替えます。
    切替える前の色にもどったり、背景色を考慮したりしません。

    それから勝手にバイナリの名前を変えました。
    オリジナリティはゼロだけどな!
    まさに外道!

    Xpressureって和訳すれば謎の重圧?みたいな感じでしょうか。しかも遊星からくるやつ。
    漫画もいいぜ

    Technorati Tags:

    [Nokia N810] google.co.jp/dillo

    dillo1
    □を消します

    Dilloを使っているとき、
      1. 検索したい語句を選択ctrl+tで新タブ開く
      2. ctrl+hでhomeになっているgoogleへ
      3. goggle上部の謎フォームボックスの分スクロールダウン
      4. プラスキーでミドルクリックオン
      5. フォームをタップしてペースト、エンターで検索
    という一連の動作をよく行うのですが、4でなんやかんや間違って選択した結果、
    dillo1
    こういう状況

    におちいることが多々有るわけです。

    どうすりゃいいんだ
    A. dpiを駆使して*1w3mっぽく(or Firefoxぽく)google検索する
     → 技術力不足で無理
    B. form.cc回りを改造して<textarea>タグのstyle=display:noneに対応させる
     → コミュニケーション力不足(コミットとか無理)で無駄
    C. 中国の手を借りてgoogleをクラック、google.co.jp/dilloを作る
     → 人脈不足で無理

    D. ローカルにgoogle.htmlとか置いてみる

    56k時代を思わせるセピア色の消極的対応、Dで逃げることにしました。
    DはダザイのDです。富嶽三十六計逃げるがなんとやら。
    あとシンジは黙っとけ(映画版でも言うんですかね)


    つくってあそぶ
    wget -k google.co.jp -O google.html

    すると、相対リンクが絶対リンクに変換されたgoogle.htmlができます。
    そのなかの
    <script>,<textarea>
    タグをざくざく消したら、
    mv google.html /home/user/.dillo/

    と適当な所に移動し~/dillorcを
    startpage=file:///home/user/.dillo/google.html
    home=file:///home/user/.dillo/google.html

    と変更すれば
    dillo1
    記念日ロゴも見れるんじゃないでしょーか

    追記:記念日ロゴ見れませんでした。

    6255byte → 3821byte へとサイズも減少して万々歳だ。
    二つの意味で、dilloにシカク無し?
    dillo_google.html

    *1
    たとえば風來散人さん作のrssリーダープラグイン(0.8.x向け)などがあります。
     2.x系だとdpidが洗練されてきていますし、いろいろ融通が効くっぽいです。
    dpidにurlを送って新しいタブに開いたりできたら、いいなあ。
    氏は2.x系にもパッチなど送られています。見習いたい。