Android KitKat IR API для отправки команды Pronto Hex

Я пытаюсь отправить команду Pronto IR с помощью Android API KitKat IR. Android выдает ошибку, говоря, что "Non-Positive Slice". Я попробовал приведенный ниже пример команды Pronto Hex, которую я хочу отправить с помощью Android IR Manager API. Пожалуйста, помогите мне решить проблему.

Шестнадцатеричная команда Pronto IR: 0000 006D 0000 000D 0006 0115 0006 0115 0006 00BB 0006 00BB 0006 00BB 0006 00BB 0006 00BB 0006 00BB 0006 00BB 0006 00BB 0006 0115 0006 0900

Array of Patterns: int [] data = [0,109,0,13,6,277,6,277,6,277,6,277,6,187,6,277,687,818,187,687,187,187,787,287,687,787,619,2304]

irManager.transmit (38000, данные);

2 ответа

Я не уверен на 100%, но я думаю, 0 не допускается.

Как правило, вам не нужны первые четыре цифры. Формат Pronto Hex состоит из 3 частей:

  • преамбула
  • Burst Pair Sequence 1
  • Последовательность пар серии 2 (необязательно)

Преамбула содержит 4 цифры:

  1. Всегда 0.
  2. Частота. Если n - вторая цифра, частота рассчитывается по: 1000000/(n*0,241246)
  3. Количество пар разрыва в последовательности 1
  4. Количество пар разрыва в последовательности 2

Таким образом, первые четыре цифры в последовательности должны быть удалены.

Примечание. Android API не на 100% корректен. https://developer.android.com/reference/android/hardware/ConsumerIrManager.html, int[])

Чередование вкл / выкл в микросекундах для передачи.

Но на некоторых версиях Android, в зависимости от устройства, вы должны посылать счетчик импульсов вместо времени в микросекундах. Число импульсов зависит от частоты. Число импульсов в секунду составляет 1000000 / частота. Вы должны умножить каждую цифру на это значение перед передачей.

Я знаю, что это не совсем то, что вы ищете, но у меня тоже была эта проблема, и оказалось, что я пытался использовать неправильные коды и неправильно.

Я нашел этот ресурс: https://irdatabase.globalcache.com/irdatabase.htm и он кажется надежным, по крайней мере, для моего телевизора Samsung.

Чтобы использовать его, вы должны зарегистрироваться в yahoo/google/facebook (что мне показалось странным.... но на сайте, на котором я его нашел, http://www.power7.net/SamsungIR.html сказано, что все в порядке, и они еще не спамили меня...) и выбирают, какое устройство вам нужно. Затем вы получите что-то похожее на это:

sendir, 1: 1,1,38226,1,1,170,171,21,65,21,65,21,65,21,22,21,22,21,22,21,22,21,22,21,65, 21,65,21,> 65,21,22,21,22,21,22,21,22,21,22,21,22,21,65,21,22,21,22,21,22,21, 22,21,22,21,22,21,65,21,22,2> 1,65,21,65,21,65,21,65,21,65,21,65,21,1783,170,171, 21,22,21,4892

Удалите "sendir,1:1,1", и вы найдете 38226 в качестве частоты. Затем следует удалить следующий ",1,1", а остальное - то, что вам нужно передать. Как сказал другой ответ, мне нужно было умножить каждое число на: * 1000000/ частота;

Например, первые несколько чисел в моем int[] выглядят так:

int[0] = 4447 //(originally 170)
int[1] = 4473 //(originally 171)
int[2] = 549  //(originally 21) 

Удачи, и я надеюсь, что это поможет вам!

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