私は Imx8mm evk と yocto プロジェクトに取り組んでいます。
私はIRレシーバーソリューションを試しています。
リモート コントロールは NEC IR プロトコルを使用しています。
1.GPIO設定
IR レシーバーは GPIO13 に接続されています。
fsl-imx8mm-evk.dts を編集
{ ir_recv { compatible = "gpio-ir-receiver"; gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_ir>; }; : : : }; &iomuxc { pinctrl-names = "default"; pinctrl_ir: irgrp { fsl,pins = < MX8MM_IOMUXC_GPIO1_IO13_GPIO1_IO13 0x1d6 >; }; : : :
GPIO13 : 入力とプルアップモード
root@imx8mmevk:~# cat /sys/kernel/debug/gpio gpiochip0: GPIOs 0-31, parent: platform/30200000.gpio, 30200000.gpio: gpio-13 ( |gpio-ir-recv ) in hi IRQ gpio-15 ( |cd ) in lo IRQ
GPIO IR リモート コントロールを有効にする
menuconfig ---> Device Drivers ---> Remote Controller devices ---> <*> GPIO IR remote control
2.LIRCのインストール
local.conf ファイルを編集する
この行を追加します。
IMAGE_INSTALL_append = " lirc"
lircd のバージョンと lirc ドライバーの確認
root@imx8mmevk:~# lircd -version lircd 0.9.4d root@imx8mmevk:~# dmesg | grep "LIRC" -i [ 1.455517] lirc_dev: IR Remote Control driver registered, major 236 [ 1.500490] IR LIRC bridge handler initialized [ 1.535966] rc rc0: lirc_dev: driver ir-lirc-codec (gpio-rc-recv) registered at minor = 0
3. mode2 コマンドを使用してリモートをテストする
lirc ドライバーを停止してステータスを確認する
root@imx8mmevk:~# systemctl stop lircd.socket lircd.service root@imx8mmevk:~# systemctl status lircd.socket lircd.service ● lircd.socket Loaded: loaded (/lib/systemd/system/lircd.socket; disabled; vendor preset: e> Active: inactive (dead) since Thu 2019-09-26 07:17:02 UTC; 2min 19s ago Listen: /run/lirc/lircd (Stream) Sep 26 06:59:56 imx8mmevk systemd[1]: Listening on lircd.socket. Sep 26 07:17:02 imx8mmevk systemd[1]: Closed lircd.socket. ● lircd.service - LIRC Infrared Signal Decoder Loaded: loaded (/lib/systemd/system/lircd.service; enabled; vendor preset: e> Active: inactive (dead) since Thu 2019-09-26 07:17:02 UTC; 2min 19s ago Process: 3653 ExecStopPost=/bin/rm -fR /run/lirc (code=exited, status=0/SUCCE> Process: 3652 ExecStopPost=/bin/rm -f /dev/lircd (code=exited, status=0/SUCCE> Process: 3617 ExecStart=/usr/sbin/lircd --pidfile=/run/lirc/lircd.pid --devic> Process: 3615 ExecStartPre=/bin/ln -s /run/lirc/lircd /dev/lircd (code=exited> Process: 3603 ExecStartPre=/bin/rm -f /run/lirc/lircd (code=exited, status=0/> Process: 3602 ExecStartPre=/bin/rm -f /dev/lircd (code=exited, status=0/SUCCE> Process: 3601 ExecStartPre=/bin/mkdir -p /run/lirc (code=exited, status=0/SUC> Main PID: 3622 (code=killed, signal=TERM) Sep 26 06:59:58 imx8mmevk systemd[1]: Starting LIRC Infrared Signal Decoder... Sep 26 06:59:58 imx8mmevk systemd[1]: Started LIRC Infrared Signal Decoder. Sep 26 07:17:02 imx8mmevk systemd[1]: Stopping LIRC Infrared Signal Decoder...
モード 2 を実行し、リモート コントロールをテストする
root@imx8mmevk:~# mode2 --driver default --device /dev/lirc0 Using driver default on device /dev/lirc0 Trying device: /dev/lirc0 Using device: /dev/lirc0 Warning: Running as root.
リモコンのボタンを押す (NEC プロトコル)
space 13301060 pulse 399019 space 9015 pulse 4474 space 594 pulse 1661 space 574 pulse 556 space 575 pulse 556 space 575 pulse 555 space 574 pulse 557 space 574 pulse 557 space 574 pulse 557 space 573 pulse 558 space 573 pulse 558 space 574 pulse 1663 space 573 pulse 1664 space 572 pulse 1663 space 573 pulse 1664 space 572 pulse 1663 space 573 pulse 1664 space 573 pulse 1663 space 573 pulse 1665 space 572 pulse 1664 space 573 pulse 558 space 572 pulse 1664 space 573 pulse 558 space 572 pulse 558 space 572 pulse 558 space 572 pulse 558 space 573 pulse 557 space 572 pulse 559 space 572 pulse 1665 space 571 pulse 558 space 572 pulse 1664 space 573 pulse 1663 space 572 pulse 1665 space 571 pulse 1664 space 572
しかし、最初と最後のログがわかりません。
スペース 13301060、スペース 572
開始および終了ロジックは High です。
しかし、mode2 の最初と最後のログはスペースです。
「スペース」が論理的に低い時間であることは知っています。
何か間違っていることでも?
どうすれば解決できるのか教えてください。
ありがとうございました!!
記録しない
root@imx8mmevk:~# irrecord -n -d /dev/lirc0 test_remote.conf Warning: Running as root. Using driver default on device /dev/lirc0 irrecord - application for recording IR-codes for usage with lirc Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de) This program will record the signals from your remote control and create a config file for lircd. A proper config file for lircd is maybe the most vital part of this package, so you should invest some time to create a working config file. Although I put a good deal of effort in this program it is often not possible to automatically recognize all features of a remote control. Often short-comings of the receiver hardware make it nearly impossible. If you have problems to create a config file READ THE DOCUMENTATION at https://sf.net/p/lirc-remotes/wiki If there already is a remote control of the same brand available at http://sf.net/p/lirc-remotes you might want to try using such a remote as a template. The config files already contains all parameters of the protocol used by remotes of a certain brand and knowing these parameters makes the job of this program much easier. There are also template files for the most common protocols available. Templates can be downloaded using irdb-get(1). You use a template file by providing the path of the file as a command line parameter. Please take the time to finish the file as described in https://sourceforge.net/p/lirc-remotes/wiki/Checklist/ an send it to <lirc@bartelmus.de> so it can be made available to others. Press RETURN to continue. Checking for ambient light creating too much disturbances. Please don't press any buttons, just wait a few seconds... No significant noise (received 0 bytes) Enter name of remote (only ascii, no spaces) :NEC1 Using NEC1.lircd.conf as output filename Now start pressing buttons on your remote control. It is very important that you press many different buttons randomly and hold them down for approximately one second. Each button should generate at least one dot but never more than ten dots of output. Don't stop pressing buttons until two lines of dots (2x80) have been generated. Press RETURN now to start recording. ................................................................................ Got gap (8996 us)} Please keep on pressing buttons like described above. Cannot find any gap, using an arbitrary 50 ms one. If you have a regular remote for e. g., a TV or such this is probably a point where you hit control-C. However, technical hardware like air condition gear often works without any gap. If you think it's reasonable that your remote lacks gap you can proceed. Press RETURN to continue. Please enter the name for the next button (press <ENTER> to finish recording) KEY_POWER Now hold down button "KEY_POWER". Please enter the name for the next button (press <ENTER> to finish recording) KEY_MODE Now hold down button "KEY_MODE". Please enter the name for the next button (press <ENTER> to finish recording) KEY_1 Now hold down button "KEY_1". Please enter the name for the next button (press <ENTER> to finish recording) KEY_2 Now hold down button "KEY_2". Please enter the name for the next button (press <ENTER> to finish recording) Checking for toggle bit mask. Please press an arbitrary button repeatedly as fast as possible. Make sure you keep pressing the SAME button and that you DON'T HOLD the button down!. If you can't see any dots appear, wait a bit between button presses. Press RETURN to continue. Cannot find any toggle mask. Successfully written config file NEC1.lircd.conf
NEC1.lircd.conf
begin remote name NEC1 bits 0 eps 0 aeps 0 one 0 0 zero 0 0 gap 50000 toggle_bit_mask 0x0 frequency 38000 begin codes KEY_POWER 0x0 KEY_MODE 0x0 KEY_1 0x0 KEY_2 0x0 end codes end remote