LIRC를 이용한 IR 레코딩

LIRC를 사용하여 IR 레코딩 하기 위해서, lircd 데몬을 실행되고 있다면 kill 시키도록 한다. lircd 데몬이 실행 상태에서 ir 레코딩은 이상한 데이터가 기록된다.

타켓보드에서 irrecord 명령어를 아래와 같이 실행하여 ir 레코딩을 시작할 수 있다.

$ irrecord -d /dev/lirc0 ./lircd.conf

irrecord를 실행하면 아래와 같이 RCU 이름을 설정하고 IR 레코딩을 진행하도록 한다.

HD_WSCL 이름을 갖는 lirc.conf 파일이 생성되며, 다음 단계에서는 최대한 많은 key를 입력하도록 한다. 여기서 주의할 점은 1초이상 길게 눌려서는 안된다.

위 단계에서 RCU가 사용하는 RC5/NEC 등의 프로토콜을 판단한다. 프로토콜 스캔이 완료되면 각 key에 대한 keycode를 맴핑하면 된다. keycode는 /usr/include/linux/input-event-codes.h를 참고하도록 한다.

위와 같이 각 key에 대한 keycode 입력을 완료되면 빈공간 없이 <Enter> 입력하면 완료되고, 바로 toggle bit mask를 스캔한다. RCU 프로토콜 스캔 단계와 같이 최대한 많은 key를 입력하도록 한다. bit mask 스캔이 완료되면 conf 파일이 생성되는 것을 확인하도록 한다.

$ vi HD_WSCL.lirc.conf

begin remote
  name  HD_WSCL
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  header       8931  4504
  one           544  1701
  zero          544   586
  ptrail        545
  repeat       8931  2263
  pre_data_bits   16
  pre_data       0x101
  gap          114913
  toggle_bit_mask 0x808
  frequency    38000

      begin codes
          KEY_POWER                0x10EF
          KEY_MUTE                 0x58A7
          KEY_1                    0xC03F
          KEY_2                    0xC837
          KEY_3                    0xD827
      end codes
end remote

RCU HD_WSCL은 NEC 프로토콜을 사용하기 때문에, frequency는 38K를 사용한다. toggle_bit_mask 값이 0x808로 정의 되어 있을 경우, lircd에서 한번 더 계산하기 때문에, toggle_bit_mask 값은 0으로 변경한다. 위 conf 파일의 keycode는 이미 비트 연산된 값이다.

 

그리고 suppress_repeat를 설정하여 repeat 처리되는 정도를 조절할 수 있다. suppress_repeat 설정하지 않을 경우 0으로 설정되는데, 이 경우 키 입력을 한번 하였지만, 2-3번 눌린것으로 처리하는 경우가 빈번하게 발생한다.