About this site
このサイトは、航空・宇宙コンピュータ電子工作といった時代の最先端のことから、登山といった文明生活から遥かにかけ離れたことまで、思うがままに書いてあります。写真も大好きです。
興味がある方にしかおもしろくないと思いますが、どうぞ楽しんでいってください。あと、MovableTypeのカスタマイズ情報を提供しています。

If you are interested in "Super Sylphide", an autopilot system for small UAVs, please visit this page.

Super Sylphide猫カメラGPSロガーXBee電力計


最後に、はてなアンテナやRSSリーダーで読む場合はこちらからどうぞ。
Entries @ recently

January 10, 2017

Xiaomi Mi Max (Hydrogen) の MIUI8 FM Radio (stock) 日本バンド対応

前回の記事でXiaomi Redmi Note 3 ProのFM Radio日本バンド対応について書きましたが、別機種、別ディストリビューションでの対応も同じ感じでできましたので、記事にしてみようと思います。今回対象としたのはXiaomi Mi MaxのMIUI8のFM Radioです。

Screenshot_2017-01-10-20-29-32-612_com.miui.fm.png
79.5MHzを受信!

前回同様、ターゲットをもう少し詳細に書くと、Xiaomi Mi MaxのうちROMが32GBのもので、Hydrogenというコードで呼ばれている機種になります。またAndroidはXiaomi純正のMIUI8で本記事を書いている時点で最新のGlobal Development版である6.12.22になります。

日本バンドへの対応方法ですが、大きく2つの作業となりました。以下順に書いていきます。なお決まりこどで書いておきますが、同じことをする場合は自己責任でお願いします。書いてあることが意味不明の場合も自己解決でお願いします。

ひとつ目は(クローズドソースなので大きな声では言えないのですが)Androidアプリ(apk)の改造です。
/system/app/FM以下がFMラジオのアプリなので、それをとってきます。oat/arm64/FM.odexをbaksmaliでdeodex(『DeodexInstructions』がとても参考になりました)して、FMラジオの受信最低周波数を規定している部分(com/miui/fmservice/FmServiceUtils.smali)を編集(このとき『Dalvick opcodes』を参考にしました)、smaliで全体をclasses.dexにコンパイルし、それを元apkに7zaで組み込んで(『deodex化とodex化 』を参考にしました)、改変apkを完成させます。
あとはTWRPの作業で、/system/app/FM/oat/arm64/FM.odexが邪魔になるので消去、/system/app/FM/FM.apkを改変apkに置換(このとき/system/app/FMをrestoreconしないとSELinuxに後でおこられましたのでしておくべきです)すれば完成です。Dalvik/ART CacheもWipeしたほうがよいかもしれません。
せっかくなので改変apkをおいておきます。また余談としてですが、改造している際に、マレーシア(region:MY)とブラジル(region:BR)、そしてその他の地域でそれぞれ最低周波数が、87.5(0x36b)や87.8(0x36e)、87.0(0x366)に標準設定されているのが興味深かったです。これを踏襲したこったやり方として、regionがJP(日本)のときだけ76MHzにするという対応もできますが、面倒だったのでその他の地域を76MHzに書き換えました。

もう1つは前回のRedmi Note 3 Pro (Kenzo)と同様の処置で、FMラジオを担当している石の設定ファイルの追加です。詳細は前回の記事に譲りますが、/etc/fm/fm_srch_af_th.confを足します。

こんな感じで76MHzから108MHzまでFM局をシークしてくれるようになりました。快適です。他のSanpdragon機種でも同じような感じで日本のバンドに対応できるのではないかと思います。

20:41 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/941

December 25, 2016

Xiaomi Redmi Note 3 Pro (kenzo) の CyanogenMod13 FM Radio 日本バンド対応

今年は怒涛のように過ぎていきました、早いものでもう年末です。少しばかり時間がとれてXiaomiのスマホをいじる機会があり、内蔵のFMラジオをカスタマイズしたので、そのことについて備忘録を残しておこうと思います。ターゲットはkenzoというコードネームがついたRedmi Note 3 Pro (RN3P)に、CyanogenMod 13 (CM13)を適用した機種になります。

まず、ターゲットについて、もう少し詳細を書いておきます。これがややこしいのです。
ハードウェアであるRedmi Note 3にはCPUがQualcommとMediaTekの2種類が混在しますが、QualcommのSnapdragon 650を搭載している機種です。またソフトウェア(ROM)は、Xiaomi謹製のMIUIではなくカスタムROMのCM13、もっというと最新はAndroid 7.1が入ったCM14.1ですが、安定性を取ってAndroid 6ベースであるひとつ過去のCM13を使っています。CM13も公式ピルドではなく、指紋センサ(Goodix)への対応の関係で、カスタムビルドされたもの(20161016)に、カスタムカーネル(Randon)を充てて(僕が使ったのは現時点での最新版V3.3.1ではなく、過去のv3.2でした)使っています。

この状態で快適に使えてはいるのですが、唯一気に入らない点として、FMラジオの対応周波数が国外仕様の87.5MHzから108MHzでした。これまでの情報として、国内の76MHzからの周波数にも強引に対応できるとの情報があったので、これはおそらくソフトの問題だな、と感じ、根本的な解決を実施したのが今回のお話です。

結局のところ、以下2点対応することで76MHzからの周波数の受信ができました。お約束として書いておきますが、同じことを試さても自己責任でお願いします。

1つはCM13ではFMラジオとして、com.android.fmradioをアプリとして使っているのですが、このアプリの下限周波数が87.5MHzとなっていることです。ROMにあったアプリ(/system/priv-app/FMRadio/FMRadio.apk)をadb pullで抜き出し、apktoolで解体、定数を87.5MHzを表す875(0x36b)から76MHzを表す760(0x2f8)に書き換え(FmUtils.smaliに4箇所ありました)、その後apktoolでapkに戻して、(システムアプリなのでadb installではなく)adb shellでsu後、上書きしました。こうすることで、まずアプリを76MHzからの対応へと書き換えました。改造したFMRadio.apkをおいておきます。

次にアプリが依存するライブラリの設定ファイルを作成することで、76MHzからの受信に対応するようにします。これはたまたまadb logcatをしていて気づいたのですが、依存しているライブラリは/etc/fm/fm_srch_af_th.confというファイルを記述することでFMラジオのICの設定をコントロールできる(以下述べる情報を適用する前後のログなど)ようでした。これを元にネットの情報にあたってみると、fm_srch_af_th.confのパーサや、サンプルがひっかかり、先のリンクのfm_srch_af_th.confにあるような記述をしたファイルを/etc/fm/fm_srch_af_th.confに配置することで、76MHzから108MHzを受信できることがわかりました。

これで快適に日本の周波数のFMラジオを聴けています。RN3P、いじりがいがある楽しい機種です。また、Qualcomm系のチップでCyanogenModなら、同じやり方でFMラジオの対応ができるのでないかと思います。

※その後、Mi MaxとMIUI8でも似たようなやり方で日本バンドに対応させることができました。

22:46 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/940

July 26, 2016

Super Sylphide 進捗状況(86) -- ちょっとすごいロガーのバイナリ自動生成

生存報告がてら、ちょっとすごいロガーGitHubで公開していることの関連話を記録しておこうと思います。

ソースコードや基板設計データは、作ったものをそのままGitHubにpushすればよいので、手間はないのですが、附随するファームウェアやツールのバイナリは、これまで手動生成して登録していたため、それなりに時間を取られてきました。ならば、ということで全部自動化してみました。生成しているものとその仕組みです。

ファームウェア
実機で動く8051バイナリ。Travis-CIでコンパイラであるsdccをスクリプトで野良ビルドし、さらにファームウェア自体をビルドしている。タグ付きの場合に限り、GitHubのReleaseにDeployしている。
ツールバイナリ(Linux)
Travis-CIでmake,g++でビルド。常にmasterの最新版をBintrayにDeployするようにした。
ツールバイナリ(Raspberry Pi)
Travis-CIでmake,g++-arm-linux-gnueabihfでクロスビルド。g++-arm-linux-gnueabihfはaptで拾ってきている。常にmasterの最新版をBintrayにDeployするようにした。
ツールバイナリ(Windows)
AppVeyor上のVisual Studio 2015でslnをビルドしている。常にmasterの最新版をBintrayにDeployするようにした。

.travis.yml.travis.bintray.jsonあたりに上記手順が集約されています。またAppVeyorはGUIで設定してしまっているのですが、Yamlで書き出すとこんな感じになっています。

最も嵌ったのがTravis-CIのBintrayへのJSONの書き方でincludePattern等が純粋な正規表現ではないところです。JSONを駆動しているprovide付近にある通り、正規表現の丸括弧前でどこかしらのパスに一致している必要がありました。

こんな感じでGitHubにpushするだけでいろいろと回るようになっています。

22:51 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/939

March 26, 2016

Super Sylphide 進捗状況(85) -- ちょっとすごいロガーとesp8266を連携

ちょっとすごいロガーに対して、無線LANモジュールのesp8266で無線化してみました。以下の動画では秋月電子のesp8266 DIP化キットを使っています。

詳細は随時追記予定です。またgithubでは近いうちにこれらのことができるコードをv1.1+Firmwareとしてリリース予定ですしました。リリースノートにはesp8266用のスクリプトが置いてあります。

23:16 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/938

February 24, 2016

Super Sylphide 進捗状況(84) -- Travis-CIでsdccを回す

ちょっとすごいロガーgithubでソースなどを公開していますが、それと組み合わせてビルドテストなどを行うことができるTravis-CIが便利です。Travis-CIはPC系のものにはだいたい対応していますが、カスタムビルド環境を整備することで、ちょっとすごいロガーが依存しているコンパイラのsdccにも対応することができました。

キーとなるのは下に示した.travis.ymlです。ここにビルドやビルド後にバイナリを公開するデプロイの動作を記述しています。

上記にある通り、boostなどの標準的なツールはaptで入れることができるのですが、さすがにsdccには対応していない(リクエストが出されているようなので、そのうち対応されるかも?)ので、カスタム野良ビルドスクリプトbuild-sdcc.shを指定しています。

こんな感じで、この記事を書いている時点でのちょっとすごいロガー最新ファームウェアをv1.0+Firmwareとタグ付けしてリリースしました。最近機能を追加等していますので、その話はまたgithubの中のWikiで公開したいと思います。

23:02 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/937

February 13, 2016

MacOSX 10.5.8 に clamav

かなり古いMac mini (2007年のCore 2 Duo)のメンテをして、ウイルス対策をほどこすことにしました。といってもMac mini自体のウイルス対策をするというよりは、プロキシと組み合わせてウイルススキャンゲートウェイとし、他のPCのインターネットアクセスを保護しようという使い方をしています。プロキシにはsquid-3.4.13、ウイルススキャンにはclamav-0.99、間をつなぐのはc_icap-0.4.2 + c_icap_module-0.4.2 で構成しました。『icap連携をしてみる』『ウイルス対策の組込み(ClamAV)』を参考にしつつ、全てセルフビルドで構成してみました。

中でも古いMacOSX 10.5.8にclamavの導入には苦労したので、備忘録をここに残しておこうと思います。必要なライブラリ(最低限zlib)が揃っていれば configure && make && make install まで通るのですが、いざ動かしてみようとすると、例えばウイルス定義データベースを更新するfreshclamを実行すると

WARNING: [LibClamAV] cli_cvdload: Corrupted CVD header
ERROR: Verification: Malformed database

となって死んでしまいます。これは結局のところ、MacOSX 10.5.8に入っているzlibが古くzlib-1.2.3であることが原因でした。以下、対処方法を書いておきます。

続きを読む "MacOSX 10.5.8 に clamav"
21:37 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/936

January 23, 2016

ThinkPad X40 BIOS電池の交換

軽いデモをするときに使っているノートPC ThinkPad X40のBIOSの電池(FRU 92P1004)が切れてしまったので、交換しました。ネットを探ると、コネクタがついていて差し替えるだけで交換が完了できる部品があるのですが、せっかくなので電池だけの交換をしてみることにしました。

分解をしてみるとこんな感じになっています。

x40_battery_orig.jpg
被覆をはがすと

3本線がでているのですが、そのうち2本(白と黒)はGND側でした。残りの赤は+側です。電池はCR2025でした。

電池への直接半田付けはかなり危険が伴う(YouTubeで検索すると、爆発という不穏な単語がでてきます)ので、金属タブが既にスポット溶接されている電池に電線とコネクタを半田付けで移植しました。なお入手性の都合でCR2016に変更しました。

移植するとこんな感じです。

x40_battery_mod.jpg

あと熱収縮チューブを被覆としてかぶせて完成です。実機に搭載してみましたが、問題なく使えました。

18:26 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/935