ConsumerIrManager.transmit 棒棒糖坏了?

ConsumerIrManager.transmit broken in Lollipop?

我昨天将我的 Samsung Galaxy S4 从最新的 KitKat 升级到 Lollipop (5.0.1),我使用了几个月的红外遥控应用程序停止工作。

由于我使用的是 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 之前)。相反,我收到(见附件)“[解调]不可重复1.BMP”和“[解调]不可重复2.BMP”。请注意波形不是 2 个脉冲...事实上,它甚至不可重复。

对于下面的捕获,当检测到 IR 时信号变低。

我们应该看到两个脉冲在它们之间持续 2.6 毫秒和 2.6 毫秒变低(见下面的绿线)。

我也尝试过使用 50、50、50 的较短脉冲,并观察到第一个脉冲也不正确(见下文)。

查看调制波形: 频率不正确;相反,它大约是 18kHz 且不规则。

我对此非常有经验,并且接受过电子方面的正规教育。

在我看来 ConsumerIrManager.transmit( )...

中有一个错误

奇怪的是,phone 附带的 "WatchOn" 应用程序仍然有效。

感谢您提供的任何见解。

测试设备: Tektronix TDS-2014B,100 MHz,用于峰值检测模式。

正如@IvanTellez 所说,Android 中对此功能进行了更改。奇怪的是,当我让它输出简单的红外信号(用于故障排除目的)时,该功能的行为如上所示(不稳定,载波频率错误等)。当我最终恢复正常类型的红外信号时,它工作正常。