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でも似たようなやり方で日本バンドに対応させることができました。

December 25, 2016 22:46 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

コメントする