2017-09-12 12 views
0

Infrared를 사용하여 Android 앱 'Universal Remote Control'을 만들고 싶습니다. 나는 여기에서 XML 형식으로 많은 IR 코드를 찾을 수있다 : https://github.com/probonopd/lirc-remotes. IR 패턴/코드 및 장치 코드 vs 장치 이름 대

<code name="KEY_PLAY" codeno="0x0000000000000059"> 
     <decoding protocol="Sony12" device="17" subdevice="-1" obc="50" hex0="76" hex1="77" hex2="-1" hex3="-1" misc="no repeat" error=""/> 
     <ccf>0000 006d 000d 0000 005c 0016 0017 0016 002e 0016 0017 0016 0017 0016 002e 0016 002e 0016 0017 0016 002e 0016 0017 0016 0017 0016 0017 0016 002e 03d4</ccf> 
    </code> 

가 지금은 대상 장치 유형을 얻으려면 내가이 XML 파일에서 내 앱에 표시하도록, 다음은 키에 대한 IR 코드의 예입니다. 장치 유형은 TV 또는 DVD 플레이어 또는 AC 등일 수 있습니다. 장치 코드를 가져올 수 있지만 장치 코드를 통해 장치 유형을 얻는 방법은 알고 있습니까?

또 다른 질문은, 위의 모든 XML 파일에 대해 일반적인 안드로이드/자바 코드가 있으며 전송할 필요가있는 IR 패턴을 반환한다는 것입니까?

답변

0
  1. 불행히도 "장치 코드"와 장치 유형 사이에는 간단한 매핑이 없습니다. 실제로 XML의 장치 코드는 IR 프로토콜과 관련이 있습니다. 일부 제조업체는이 필드를 사용하여 장치 유형에 매핑 할 수 있지만 대부분의 제조업체는이 필드를 사용하지 않습니다. 제작자도 장치 코드를 사용하여 실제 장치 유형에 매핑하므로 매핑이 보편적이지 않습니다.

  2. Pronto Hex 형식의 ccf 필드에서 반송파 주파수와 패턴을 추출 할 수 있습니다. (Pronto's IR Code Format 참조) 변환은 매우 간단합니다.

다음은 참조 용 샘플 클래스입니다. (C#으로하지만, 쉽게 자바로 변환 할 수 있습니다.)

public class ProntoFormat 
{ 
    private int mFrequency = 0; 
    private List<int> mSequence1 = new List<int>(); 
    private List<int> mSequence2 = new List<int>(); 

     public int CarrierFrequency { get { return mFrequency; } } 

     public Boolean LoadData(int[] data) 
     { 
      // reset 
      mFrequency = 0; 
      mSequence1.Clear(); 
      mSequence2.Clear(); 

      // check length 
      if (null == data || data.Length < 6) 
      { 
       return false; 
      } 

      // check preamble: must be 0 for raw data, so far we only handle raw data 
      if (data[0] != 0) 
      { 
       return false; 
      } 

      // check frequency 
      if (data[1] != 0) 
      { 
       mFrequency = (int)(1000000/((double)data[1] * 0.241246)); 

       if (mFrequency > 65000) // so we set the ceiling to 65KHz 
       { 
        return false; 
       } 
      } 
      else 
      { 
       return false; 
      } 

      // check burst pair sequence 1 count 
      int sequenceLen1 = data[2] * 2; 

      // check burst pair sequency 2 count 
      int sequenceLen2 = data[3] * 2; 

      if (data.Length < 4 + sequenceLen1 + sequenceLen2) 
      { 
       return false; 
      } 


      for (int i = 0; i < sequenceLen1; i++) 
      { 
       mSequence1.Add(data[4 + i]); 
      } 

      for (int i = 0; i < sequenceLen2; i++) 
      { 
       mSequence2.Add(data[4 + sequenceLen1 + i]); 
      } 

      return true; 
     } 

     public int[] GetWaveform() 
     { 
      if (CarrierFrequency == 0 || 
       (mSequence1.Count == 0 && mSequence2.Count == 0)) 
      { 
       return new int[0]; 
      } 

      // carrier cycle time 
      int cycleTime = 1000000/CarrierFrequency; 

      int[] waveform = new int[mSequence1.Count + mSequence2.Count]; 
      for (int i = 0; i < mSequence1.Count; i++) 
      { 
       waveform[i] = mSequence1[i] * cycleTime; 
      } 
      for (int i = 0; i < mSequence2.Count; i++) 
      { 
       waveform[i + mSequence1.Count] = mSequence2[i] * cycleTime; 
      } 

      return waveform; 
     } 
    }