年末大掃除で、いただき物の202HWが出てきた。
基本、テレビは殆ど見ないこともあり、いただいてすぐにしまい込んでいたのだと思う。
この製品について改めて調べてみると、フルセグ、防水、外部アンテナにも対応するなど、契約者数水増しや契約解除忘れを狙ったセコい商売といった事情があるにせよ、実質タダのおまけ製品としてはなかなかのものだったのではないだろうか。
ただし、この製品、専用のSIMを抜いたり契約を解除するとTV視聴時やスライドショー時に、以下のようなメッセージが画面半分を専有し大きく視聴が制限されるようになるというトラップ付きであった。
3G通信が限定されているため緊急地震速報等の一部機能が使用できません。 通常の状態へ戻すには電波の良いところへ移動するか、お客様の契約状態をご確認ください。
そういった事情もあって、当方が譲り受けることとなったわけではあるが、またしかし、ある界隈ではこの制限の解除手法が確立されており、比較的簡単に行えることも知られている。
前置きが長くなったが、今回はこの製品PhotoVision TV 202HWの制限解除を行う方法をメモ。
無事制限解除成功の暁には、防災グッズとして災害時の出動に備える予定だ。
§ 解除手順
TL;DR
大まかな手順は以下の通り。202HW本体のファームウェアバージョンはα28.1
であった。
- 基板上のRxとTx信号を使用してシリアルコンソールに接続。
- SDカードに保存しておいたTV制限解除プログラム(apk)をインストールしてTV制限解除。
- システムファイルを改鋳版と差し替えてスライドショーの制限解除。
- シェルコピーでルート化、ADBサービス有効化でUSBアクセス復活。
使ったもの
- ハンダゴテ
- はんだ
- ジャンパー線
- プラスドライバー
- カッターナイフ
- SDカード
- Orange Pi Win (シリアル通信用)
- Windows PC
ファイルの入手先
基板上のRxとTx信号を使用してシリアルコンソールに接続。
202HWの電源をOFFにし、裏蓋2枚を外して基盤を露出させる。細かい作業になるのでディスプレイを取り外したほうが作業しやすい。
基板裏面にアクセスできたら、カッターやドライバー等でレジストを剥がしてはんだ付けする。接触が悪いと通信に支障が出るので、導通を確認しながら丁寧に。
シリアル接続にはUSBシリアル変換器を使用するのが一般的だが、あいにくと所持していないためOrange Pi WinのGPIOで代用。UART2を使用する。
GPIO UART2CON1-P32 UART2_RTS PB2 CON1-P36 UART2_CTS PB3 CON1-P38 UART2_TX PB0 CON1-P40 UART2_RX PB1
P32のRTS(Request To Send)とP36のCTS(Clear To Send)は、フロー制御用の信号線なので今回は使用しない。
202HWとは最小構成のUARTで接続。 一方のTX(Transmit Data)と他方のRX(Receive Data)を互い違いに結線するクロス結線を行う。(202HWのTxをOrangePiのRxへ、OrangePiのTxを202HWのRxへとつなぐ。)
結線を完了したら、OrangePiからシリアル通信を開始する。
ソフトウェアは今回はminicomを使用。
$ sudo apt install minicom
$ sudo minicom -s
ポート:/dev/ttyS2 速度:115200bps データ:8bit パリティ:None ストップ:1bit フロー制御:None
ACアダプタを接続して充電状態にするとターミナルにずらずらとLinuxの起動メッセージが表示されるので、起動完了まで暫く待つ。
準備ができたらENTERキーで202HWのコンソールに接続できる。
取りこぼしたデータは文字化けとして現れる。
充電モードの場合はルート起動するのでコンソールもルートシェルになる。
SDカードに保存しておいたTV制限解除プログラム(apk)をインストールしてTV制限解除
TVの制限解除を行うためにapkをインストールする。通常のAndroidと同じようにpmコマンドが使用できる。
APKファイルの受け渡しにはSDカードを使用すると良い。
$ pm install /mnt/sdcard2/photovision_tv_function_unlocker.apk
上記プログラムを追加すると、メニューへ制限解除ツールが追加される(「本体設定」の下に追加される)ので、そちらから制限解除の有効/無効を行えるようになる。
制限解除プログラムはGitHubで公開されている。
https://github.com/173210/photovision_tv_function_unlocker
およそ7年前のプログラムではあるが、特に問題なく動作した。
ざっとソースコードを確認したところ、ContentResolver
経由でnone_alert_mode
設定を変更しているだけのようだ。
システムファイルを改鋳版と差し替えてスライドショーの制限解除
ざっくりと、dpf-libs.jar
ファイルをSDカードへ抽出し、WindowsPC上で改鋳版を生成、本体へ書き戻しといった手順となる。
システムファイルを改鋳することになるので最悪起動できなくなることに留意する。
jarファイルをSDカードに吸い出す。cpコマンドは使用できないので、ddコマンドで代用。
$ dd if=/system/framework/dpf-libs.jar of=/mnt/sdcard2/dpf-libs.jar
入手したjarファイルをPC上で、展開、デコンパイル、パッチ当て、再コンパイル、再圧縮を行う。
必要なプログラムを同梱したスクリプトが用意されているのでそれを使用する。javaは別途インストールが必要。
今回はOpenJDKをインストールしたので、パスを通して、スクリプトを実行する。jarファイルはスクリプトと同じ場所にコピーしておく。
$ set path=%path%;c:\jdk-13\bin
$ go.cmd
生成したmod.jar
をSDカードに保存し、202HWへ受け渡し、ルートコンソールでオリジナルと置き換える。
$ dd if=/mnt/sdcard2/dpf-libs_mod.jar of=/system/framework/dpf-libs.jar
$ chmod 644 /system/framework/dpf-libs.jar
$ reboot
システムを再起動するとシステム更新処理が走り、スライドショーが制限解除される。
シェルコピーでルート化、ADBサービス有効化でUSBアクセス復活。
ルートシェルで、シェルをコピーしてsuコマンドを生成。また、adbサービスを有効化してmicroUSBでアクセスできるようにする。
$ cd /system/bin
$ cat sh > su
$ chmod 4755 su
$ setprop persist.service.adb.enable 1
以上。