Отправить 64-битный инфракрасный сигнал с Android

Используя raspberry pi 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.

Отметьте это forum.xda-developers.com/showthread.php?t=1670289

Ufkoku 31.07.2018 15:51

А это developer.android.com/reference/android/hardware/…

Ufkoku 31.07.2018 16:32
9
2
863
2

Ответы 2

Я тестировал ConsumerIrManager на Redmi Note 4, вероятно, он будет работать и на 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-битные фрагменты, если разделение не поможет.

Это не очень хорошее решение, но в любом случае вы можете преобразовать свои 64-битные ИК-коды в wav-сигналы (или даже записать их непосредственно с ИК-пульта) и отправить их через MediaPlayer (или другой плеер) на ваш Android-бокс с помощью внешнего ИК-передатчика на аудиовыходе, например это или что.

Другие вопросы по теме