最近の記事

GPD Pocket 内蔵USBハブ基板 公開

November 19, 2017

ちょっと時間が空いてしまいましたが、GPD Pocket 内蔵USBハブ基板基板データを公開しようと思います。前回の写真の基板から微調整してあります。

フレキシブル基板の製造がやっかいかと思いますが、そこをクリアすれば普通の製作と何も変わりません。ちなみに今回の基板では、PCBwayというところを利用してみました。フレキシブル基板でも見積もりがとれたので使ってみたという感じです。やり取りは丁寧でしたし、出来上がった基板も合格点だと思います。

GPD Pocket 内蔵USBハブ基板

October 18, 2017

前回の記事でアートワークだけを紹介しましたが、あれは数か月前に発売された小型PC GPD Pocketを改造するための基板でした。動作確認がいちおう取れたので、続きの記事を書いてみようと思います。

上下が作ったもの(部品半田付け前、後)で、真ん中は元からのもので取り換えて使います。

HUB_FPC_assembled_0.jpg

こうやって装着します。

HUB_FPC_assembled_1.jpg

GPD Pocketには何か内蔵できそうなスペース(上の写真だと右下の部分)があり、お手軽に拡張できそうなものというとUSB機器となるのですが、残念ながら標準で余っているUSBポートがありません。一方、これまでの先駆者(Redditの記事や、雑技公房さん)により、メイン基板とサブ基板をつなぐフレキシブル基板からUSBの配線を取り出せることがわかっています。

そこで比較的綺麗に改造できるようにUSB High-speed対応ハブIC(Cypress CY7C65632)が載ったフレキシブル基板を作ってみました。4ポート分岐できるのですが、1ポートは元のサブ基板へ、残りの3ポートは奥まで引きずり出してあり、ここに(分解や半田付けは必要ですが)好きなUSB機器を接続できるようにしてあります。

改造前と改造後のデバイスマネージャの表示は以下の通りです。

HUB_FPC_before.png
前。

HUB_FPC_after.png
後。ハブが増えた!

もう少し工夫の余地がありそうな気がするのですが、そのうち回路図やアートワークを公開しようと思います。

※その後基板の情報を公開しました。

久しぶりの基板作成

October 14, 2017

少し電子工作から遠ざかっていたこともあり、リハビリで基板を起こしてみることにしました。以下のようなものを作ろうと思います。

HUB_FPC_brd.png

横幅で100mm程度なので、かなり小さい基板です。何に使うかは、うまく動いたら、ということで、ご想像にお任せします。

※その後、動作確認が取れたので、この基板の続きの記事があります。

自転車用六角穴付き特注ナット

October 08, 2017

ご無沙汰しています、最近ブログに書けるネタがあまりなく困っていたところですが、ようやく書けるネタができたので、生存報告がてら書いてみることにします。自転車用のナットを特注してみた話です。

モノはブレーキを取り付ける用のナットです。シマノスモールパーツとしてある市販品(型番Y85575110、例えばサイクルベースアサヒで買える)だと寸法があわず、下の絵のようなナットを特注してみました。ネジが市販品よりも深くまで刺さるようにしてあります。

custom_nut.png

そして、モノができました。

custom_nut_photo.jpg左が特注品、右が市販品。

特にこの自転車用のナット、1年がかりで解消した案件なので、とても感慨深いです。何にそんな時間がかかったのか、というと、先端についている六角穴です。自転車用、特にロードバイク用でしょうか、のネジ類は、トルクをかけたときに舐めないように概ね六角穴になっていますが、これが曲者でした。小ロットでも特注製作をしてくれる会社は、インターネットで調べると結構出てくるのですが、六角穴の加工を引き受けてもらえるところがなかなかなく、最終的に三喜製作所さんで製作してもらえました。特注ということでDIYのネジに比べるとかなり高額ですが、大変満足な仕上がりです。

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

January 10, 2017

前回の記事で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機種でも同じような感じで日本のバンドに対応できるのではないかと思います。

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

December 25, 2016

今年は怒涛のように過ぎていきました、早いものでもう年末です。少しばかり時間がとれて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でも似たようなやり方で日本バンドに対応させることができました。

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

July 26, 2016

生存報告がてら、ちょっとすごいロガー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するだけでいろいろと回るようになっています。