用android发送64位红外信号

Met*_*lel 9 android infrared lirc

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

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
Run Code Online (Sandbox Code Playgroud)

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

Ufk*_*oku 4

我在 Redmi Note 4 上测试了ConsumerIrManager,可能它也适用于 Note3。

向清单添加权限:

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

并在代码中:

  1. 取回ConsumerIrManager

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

irService.hasIrEmitter()
Run Code Online (Sandbox Code Playgroud)
  1. 检查发射器是否支持目标频率

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

irService.transmit(targetFreq, data)
Run Code Online (Sandbox Code Playgroud)

更新1:

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

更新2:

在底层ConsumerIrManager使用ConsumerIrService,它使用本机方法private static native int halTransmit(int carrierFrequency, int[] pattern);,仅支持 32 位模式切片。因此,如果分割没有帮助的话,可能没有什么奇怪的方法来发送 64 位切片。