昨日、Samsung Galaxy S4を最新のKitKatからLollipop(5.0.1)にアップグレードしましたが、何ヶ月も使用していたIRリモコンアプリが機能しなくなりました。
KitKat ConsumerIrManagerの最新のコピーを使用していたため、transmit()関数は以下のコードを使用してパルス数を送信していました。それは非常にうまく機能しました。
private void irSend(int freqHz, int[] pulseTrainInMicroS) {
int [] pulseCounts = new int [pulseTrainInMicroS.length];
for (int i=0; i<pulseTrainInMicroS.length; i++) {
long iValue = pulseTrainInMicroS[i] * freqHz / 1000000;
pulseCounts[i] = (int) iValue;
}
m_IRService.transmit(freqHz, pulseCounts);
}
昨日機能しなくなったとき、私はそれを注意深く見始めました。
送信された波形は、要求されたパルス列とは何の関係もないことに気づきました。以下のコードでさえ正しく機能しません!
private void TestSend() {
int [] pulseCounts = {100, 100, 100};
m_IRService.transmit(38000, pulseCounts);
}
結果として得られる波形には多くの問題があったため、まったく役に立ちません。
- 波形は完全に間違っていました
- 周波数が間違っていて、パルス間隔が規則的ではありませんでした
- それらは再現可能ではありませんでした
復調された波形を見る: 100、100、100が正しくレンダリングされていれば、2.6ms(4.4.3(?)100 usより前)の2つのパルスが表示されているはずです。代わりに、「[復調]再現性のない1.BMP」と「[復調]再現性のない2.BMP」を受け取りました(添付を参照)。波形は2パルスではないことに注意してください...実際、それは再現性さえありません。
以下のキャプチャについては、IRが検出されると信号がローになります。
2つのパルスが2.6ミリ秒と2.6ミリ秒の間ローになるのを確認する必要があります(下の緑色の線を参照)。
また、50、50、50を使用してより短いパルスを試しましたが、最初のパルスも正しくないことがわかりました(以下を参照)。
変調された波形を見る: 頻度が正しくありませんでした。代わりに、それは約18kHzで不規則でした。
私はこれについてかなりの経験があり、電子工学の正式な教育を受けています。
ConsumerIrManager.transmit()にバグがあるようです...
不思議なことに、電話に付属の「WatchOn」アプリケーションは引き続き機能します。
あなたが与えることができるどんな洞察にも感謝します。
試験装置: Tektronix TDS-2014B、100 MHz、ピーク検出モードで使用。
回答:
回答№1は0@IvanTellezが言うように、Androidに変更が加えられましたこの機能に関して。不思議なことに、(トラブルシューティングの目的で)単純なIR信号を出力させた場合、関数は上記のように動作します(不規則に、間違ったキャリア周波数など)。最終的に通常のタイプのIR信号に戻ったとき、それは正しく機能しました。