9

使用树莓派 3 和红外线接收器。在一个名为 LIRC 的库的帮助下,我记录了我的 android box 遥控器的信号。

begin remote

    name  MyRemote
    driver devinput
    bits           64
    eps            30
    aeps          100

    one             0     0
    zero            0     0
    pre_data_bits   64
    pre_data       0x0
    gap          509
    toggle_bit_mask 0x0
    frequency    38000

    begin codes
        KEY_1                    0x116B000001000268
        KEY_2                    0x1169000001000267
        KEY_3                    0x116800000100026E
        KEY_4                    0x116E00000100025C
        KEY_5                    0x116C000001000263
        KEY_6                    0x116800000100024E
        KEY_7                    0x115D000001000268
        KEY_8                    0x116E000001000263
        KEY_9                    0x116B000001000267
        KEY_0                    0x116F000001000265
        KEY_DOWN                 0x0360000001000076
        KEY_LEFT                 0x1167000001000264
        KEY_UP                   0x117800000100025E
        KEY_RIGHT                0x1169000001000266
        KEY_BACK                 0x1170000001000262
        KEY_ENTER                0x1167000001000268
    end codes

end remote

问题是我找不到可以帮助我编写代码以从 Note3 发送 IR 信号的库。

4

2 回答 2

3

我在 Redmi Note 4 上测试了ConsumerIrManager,可能它也可以在 Note3 上运行。

向清单添加权限:

<uses-permission android:name="android.permission.TRANSMIT_IR" />

在代码中:

  1. 取回ConsumerIrManager

val irService = getSystemService(Context.CONSUMER_IR_SERVICE) as ConsumerIrManager
  1. 检查发射器是否存在

irService.hasIrEmitter()
  1. 检查发射器是否支持目标频率

fun isSupportedFrequency(irService: ConsumerIrManager, targetFreq: Int): Boolean {
        irService.carrierFrequencies.forEach {
            if (it.minFrequency <= targetFreq && targetFreq <= it.maxFrequency) {
                return true
            }
        }
        return false
}
  1. 传输数据

irService.transmit(targetFreq, data)

UPD1:

要发送 64 位密钥,您可以将它们拆分为两个 32 位密钥。

UPD2:

在幕后ConsumerIrManager使用ConsumerIrService,它使用本机方法private static native int halTransmit(int carrierFrequency, int[] pattern);,仅支持 32 位模式切片。因此,如果拆分无济于事,则可能没有发送 64 位切片的 hacky 方法。

于 2018-08-01T08:20:30.093 回答
2

这不是一个好的解决方案,但无论如何,您可以将您的 64 位 IR 代码转换为 wav 信号(甚至直接从 IR 遥控器录制)并通过MediaPlayer(或其他播放器)通过外部 IR 发射器将其发送到您的 android 盒子,像这样或者那个

于 2018-08-03T12:47:30.820 回答