我正在研究 Imx8mm evk 和 yocto 项目。
我一直在尝试 ir-receiver 解决方案。
遥控器正在使用 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 红外遥控
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
开始和结束逻辑为高。
但是,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