LIRC is the Linux InfraRed Remote Control.
This page details how to install and configure LIRC on a Raspberry Pi.
This allows you to control an amplifiers volume and source selection.
To install lirc
sudo apt-get install lirc
Edit the /etc/modules file
sudo nano /etc/modules
Add the following two lines, choosing the GPIO pins that are not already being used
lirc_dev lirc_rpi gpio_in_pin=23 gpio_out_pin=14
Edit your /etc/lirc/hardware.conf file
sudo nano /etc/lirc/hardware.conf
To be:
######################################################## # /etc/lirc/hardware.conf # # Arguments which will be used when launching lircd LIRCD_ARGS="--uinput" # Don't start lircmd even if there seems to be a good config file # START_LIRCMD=false # Don't start irexec, even if a good config file seems to exist. # START_IREXEC=false # Try to load appropriate kernel modules LOAD_MODULES=true # Run "lircd --driver=help" for a list of supported drivers. DRIVER="default" # usually /dev/lirc0 is the correct setting for systems using udev DEVICE="/dev/lirc0" MODULES="lirc_rpi" # Default configuration files for your hardware if any LIRCD_CONF="" LIRCMD_CONF="" ########################################################
Restart lirc to pickup theses changes (sometimes a reboot is needed)
sudo /etc/init.d/lirc stop sudo /etc/init.d/lirc start
To test if you are receiving IR signals
sudo /etc/init.d/lirc stop mode2 -d /dev/lirc0
You should see something like this:
space 16777215 pulse 14131078 space 8687 pulse 4599 space 657 pulse 1656 space 648 pulse 505 space 600 pulse 1710 space 653 pulse 507 space 593 pulse 559
To List the IR commands you can program enter
irrecord --list-namespace
To create a config file, first stop lirc
sudo /etc/init.d/lirc stop
The put lirc into record mode
irrecord -d /dev/lirc0 ~/lircd.conf
And follow the instructions.
You should end up with a config file similar to:
# # contributed by # # brand: /root/lircd.conf # model no. of remote control: # devices being controlled by this remote: # begin remote name TEAC_H300 bits 16 flags SPACE_ENC eps 30 aeps 100 header 8682 4597 one 646 1664 zero 646 508 ptrail 616 repeat 9263 2290 pre_data_bits 16 pre_data 0xA156 gap 40067 repeat_gap 95502 toggle_bit_mask 0x0 begin codes KEY_POWER 0xE916 KEY_POWER2 0xA156C936 KEY_VOLUMEDOWN 0x7986 KEY_VOLUMEUP 0xF906 KEY_KP1 0xA956 KEY_KP2 0x29D6 KEY_KP3 0x31CE KEY_KP4 0x24DB KEY_KP5 0xB14E KEY_KP6 0x8976 end codes end remote
Copy this to /etc/lirc/lircd.conf
Install the MediaPlayer plugin in the mediaplayer/plugins directory.
In mediaplayer/plugins/LIRC directory should be two files
LIRCIntegration.jar LIRCConfig.xml
The LIRCConfig.xml maps the mediaplayer events to the lirc commands.
At the moment there are two types of events:
Volume (Up/Down) SourceChanged (Name of Source as configured in the InputSources.xml file) StandbyChanged (true (in Standby) or false(not in Standby))
My LIRCConfig.xml looks like this:
<?xml version="1.0" encoding="UTF-8"?> <Mappings> <Mapping> <Event>VolumeInc</Event> <Command>irsend SEND_ONCE TEAC_H300 KEY_VOLUMEUP</Command> <!-- Command>notepad.exe UP</Command --> </Mapping> <Mapping> <Event>VolumeDec</Event> <Command>irsend SEND_ONCE TEAC_H300 KEY_VOLUMEDOWN</Command> <!-- Command>notepad.exe DOWN</Command --> </Mapping> <Mapping> <Event>SourceChanged</Event> <Name>DAB Radio</Name> <Command>irsend SEND_ONCE TEAC_H300 KEY_KP1</Command> </Mapping> <Mapping> <Event>SourceChanged</Event> <Name>Home PC</Name> <Command>irsend SEND_ONCE TEAC_H300 KEY_KP1</Command> </Mapping> <Mapping> <Event>SourceChanged</Event> <Name>iPod</Name> <Command>irsend SEND_ONCE TEAC_H300 KEY_KP3</Command> </Mapping> <Mapping> <Event>SourceChanged</Event> <Name>Laptop</Name> <Command>irsend SEND_ONCE TEAC_H300 KEY_KP4</Command> </Mapping> <Mapping> <Event>SourceChanged</Event> <Name>PlayList</Name> <Command>irsend SEND_ONCE TEAC_H300 KEY_KP3</Command> </Mapping> <Mapping> <Event>SourceChanged</Event> <Name>Radio</Name> <Command>irsend SEND_ONCE TEAC_H300 KEY_KP3</Command> </Mapping> <Mapping> <Event>StandbyChanged</Event> <Name>true</Name> <Command>irsend SEND_ONCE TEAC_H300 KEY_POWER2</Command> </Mapping> <Mapping> <Event>StandbyChanged</Event> <Name>false</Name> <Command>irsend SEND_ONCE TEAC_H300 KEY_POWER</Command> </Mapping> </Mappings>
The LIRCIntegration plugin will receive the event from MediaPlayer, it will then check the mapping and create the LIRC command, it will then put this command in a queue run in a separate thread to be processed.
At the moment the plugin just handles either VolumeInc and VolumeDec requests from the control points such as Kinsky, some control points such as BubbleDS send a SetVolume(xxx) request which at the moment is not handled.
LIRC seems to take a lot of CPU to execute a command and this can interfere with the audio playback.