Skip to content
View in the app

A better way to browse. Learn more.

Armbian Community Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Enabling Infrared IR Receiver on NanoPI NEO

Featured Replies

TL;DR *Works* with a minor amendment to the DTS overlay pin reference.

 

$ uname -a
Linux nanopineo 5.10.13-sunxi #trunk SMP Mon Feb 8 21:56:43 CET 2021 armv7l armv7l armv7l GNU/Linux

$ dmesg | grep Machine
[    0.000000] OF: fdt: Machine model: FriendlyARM NanoPi NEO

# Baked current kernel. Configuration ... CIR module appears to NOT be enabled by default for NanoPI NEO.
$ grep -iE  "^CONFIG_IR_.*(CIR|SUN)" /boot/config-5.10.13-sunxi
CONFIG_IR_GPIO_CIR=m
CONFIG_IR_SUNXI=m

# Connected Vishay TSOP4838 IR Receiver to 3V3 (via 100R, with C100nF to GND), GND, OUT -> PL11
#              +----------+
# 1 --- OUT ---!     /--\ !
# 2 --- GND ---!     |  | !
# 3 --- 3V3 ---!     \__/ !
#              +----------+

# Get DTS and install as user overlay (commit 0ff3217)
$ wget -O sun8i-h3-cir.dts https://raw.githubusercontent.com/armbian/sunxi-DT-overlays/master/sun8i-h3/sun8i-h3-cir.dts
# Fix pin reference
# from     ir_pins_a             (from DTS file)
#   to               r_ir_rx_pin (from dtc -I fs -O dts /proc/device-tree)
$ sed -e "s/ir_pins_a/r_ir_rx_pin/" sun8i-h3-cir.dts > sun8i-h3-cir-nanopineo.dts

$ cat sun8i-h3-cir-nanopineo.dts
/dts-v1/;
/plugin/;

/ {
        compatible = "allwinner,sun8i-h3";

        fragment@0 {
                target = <&ir>;
                __overlay__ {
                        pinctrl-names = "default";
                        pinctrl-0 = <&r_ir_rx_pin>;
                        status = "okay";
                };
        };
};

$ armbian-add-overlay sun8i-h3-cir-nanopineo.dts
Compiling the overlay
Copying the compiled overlay file to /boot/overlay-user/
Reboot is required to apply the changes

$ shutdown -r now

$ dmesg | grep sunxi-ir
[   10.653323] rc rc0: sunxi-ir as /devices/platform/soc/1f02000.ir/rc/rc0
[   10.653692] rc rc0: lirc_dev: driver sunxi-ir registered at minor = 0, raw IR receiver, no transmitter
[   10.653883] input: sunxi-ir as /devices/platform/soc/1f02000.ir/rc/rc0/input3
[   10.665297] sunxi-ir 1f02000.ir: initialized sunXi IR driver

# Protocols file is there == driver present and overlay loaded OK.
$ cat /sys/class/rc/rc0/protocols
rc-5 nec rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp imon rc-mm [lirc]

# Enable "nec" protocol.
# I tried them all to find out what encoding is used by the remote that I happened to have here.
# There may be a smarter way where the IR subsystem tells you what encoding an incoming signal has.
$ echo "+nec" > /sys/class/rc/rc0/protocols

# The bracketed items appear to be [enabled]
$ cat /sys/class/rc/rc0/protocols
rc-5 [nec] rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp imon rc-mm [lirc]

# Test:
$ apt-get install ir-keytable

$ ir-keytable
Found /sys/class/rc/rc0/ with:
        Name: sunxi-ir
        Driver: sunxi-ir
        Default keymap: rc-empty
        Input device: /dev/input/event3
        LIRC device: /dev/lirc0
        Attached BPF protocols: Operation not supported
        Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon rc-mm
        Enabled kernel protocols: lirc nec
        bus: 25, vendor/product: 0001:0001, version: 0x0100
        Repeat delay = 500 ms, repeat period = 125 ms

$  ir-keytable -t
Testing events. Please, press CTRL-C to abort.
147.355171: lirc protocol(necx): scancode = 0xe31947
147.355225: event type EV_MSC(0x04): scancode = 0xe31947
147.355225: event type EV_SYN(0x00).
^C


# Test using event system (adjust Input device, cf. above):
$ evtest /dev/input/event3
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "sunxi-ir"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 152 (KEY_SCREENLOCK)
  Event type 2 (EV_REL)
    Event code 0 (REL_X)
    Event code 1 (REL_Y)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Key repeat handling:
  Repeat type 20 (EV_REP)
    Repeat code 0 (REP_DELAY)
      Value    500
    Repeat code 1 (REP_PERIOD)
      Value    125
Properties:
  Property type 5 (INPUT_PROP_POINTING_STICK)
Testing ... (interrupt to exit)
Event: time 1612923728.916182, type 4 (EV_MSC), code 4 (MSC_SCAN), value e31948
Event: time 1612923728.916182, -------------- SYN_REPORT ------------
Event: time 1612923728.967737, type 4 (EV_MSC), code 4 (MSC_SCAN), value e31948
Event: time 1612923728.967737, -------------- SYN_REPORT ------------
^C

# From here on, use LIRC and/or adjust /etc/rc_maps.cfg et al. to map scan
# codes to key codes. This makes the IR receiver compatible with media player
# software. For the IoT device that I am building currently the scan codes
# suffice, so I won't describe this here.


(I am not really sure if that name change is a bug in the DTS repository, or if that name "ir_pins_a" refers to an older kernel, or if one is supposed to have another DT fragment somewhere that maps "ir_pins_a" to "r_ir_rx_pin", please comment if above is not the _right solution_.)

Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.