2009-07-26, 16:54
2009-07-27, 14:46
Hi,
First try to configure lirc to work with X10 remote, This link may help.
Second remap the keys to a Lircmap.xml file.
Good luck and sorry for my bad english
First try to configure lirc to work with X10 remote, This link may help.
Second remap the keys to a Lircmap.xml file.
Good luck and sorry for my bad english
2009-07-27, 15:30
What do you mean with remap?
I have copy my lirc.conf and paste it in lircmap.xml
What is with the keymap.xml?
Greezz
I have copy my lirc.conf and paste it in lircmap.xml
What is with the keymap.xml?
Greezz
2009-08-17, 10:53
I have the same RC but it did not work properly with the normal "medion setting".
I works fine using "nVidia_UR88A" ... check this link http://linuxundich.de/de/ubuntu/pc-funkf...-mit-lirc/ for details. In short
and select above nVdia remote control
I works fine using "nVidia_UR88A" ... check this link http://linuxundich.de/de/ubuntu/pc-funkf...-mit-lirc/ for details. In short
Code:
sudo dpkg-reconfigure lirc
and select above nVdia remote control
2011-02-16, 22:23
I know this is an old thread, but I have the same remote and had some problems with it for which I want to share my solution.
Note that this solution can work for any remote that exhibits the same problem with lirc. Look at the python script for some parameters you might modify.
First of all, I use this config, which is slightly modified from the ati one, with all the correct names for each button: my lirc config file
More important, I had problems with this remote in that I couldn't quickly press the same button multiple times. It would interpret it as a long held press instead of different single button presses. I think not everyone has this problem, but since I had it, some other people with the same remote might have it.
In irw, I would get something like:
when quickly pressing the same button continuously.
Notice that the counter just keeps increasing instead of resetting to 0.
Normally, a single button press for this remote should result in 5 events (meaning the counter goes from 00 to 04 and would then reset to 00)
This meant that I had to wait like a second between each button press before I could press it again, or it would start scrolling verry quickly, like when the button was held.
I fixed this by creating a python daemon that has to be started after starting lirc, it reads from the socket that lirc sends its data to, changes it and sends it to another socket. The output socket of the python program is the one that xbmc has to connect to, so you need to make sure that lirc outputs to a different socket than /dev/lircd, and make the python script output to /dev/lircd instead.
To test it, you can do this:
Try pressing quickly or holding a button on the remote. The counter will only go to 4 and then reset to 0.
Now quick key presses will work in xbmc. The negative is that you cannot change the repeat rate or delay of held buttons, but I quite like the values how they are. Anyway, for me this makes the remote much more usable in xbmc. (and any other program for that matter) It's a hack, but at least I'm not hacking the lirc code.
You can find the script here: lirc adapter script
To use this solution permanently, you might want to edit your /etc/init.d/lirc script to use the right options and start the python adapter alongside it.
Update: modified URLs to make sure they remain on the web
Note that this solution can work for any remote that exhibits the same problem with lirc. Look at the python script for some parameters you might modify.
First of all, I use this config, which is slightly modified from the ati one, with all the correct names for each button: my lirc config file
More important, I had problems with this remote in that I couldn't quickly press the same button multiple times. It would interpret it as a long held press instead of different single button presses. I think not everyone has this problem, but since I had it, some other people with the same remote might have it.
In irw, I would get something like:
Code:
00000014f41f0000 00 right Medion_X10
00000014f41f0000 01 right Medion_X10
00000014f41f0000 02 right Medion_X10
00000014f41f0000 03 right Medion_X10
00000014f41f0000 04 right Medion_X10
00000014f41f0000 05 right Medion_X10
00000014f41f0000 06 right Medion_X10
00000014f41f0000 07 right Medion_X10
00000014f41f0000 08 right Medion_X10
00000014f41f0000 09 right Medion_X10
...
Notice that the counter just keeps increasing instead of resetting to 0.
Normally, a single button press for this remote should result in 5 events (meaning the counter goes from 00 to 04 and would then reset to 00)
This meant that I had to wait like a second between each button press before I could press it again, or it would start scrolling verry quickly, like when the button was held.
I fixed this by creating a python daemon that has to be started after starting lirc, it reads from the socket that lirc sends its data to, changes it and sends it to another socket. The output socket of the python program is the one that xbmc has to connect to, so you need to make sure that lirc outputs to a different socket than /dev/lircd, and make the python script output to /dev/lircd instead.
To test it, you can do this:
Code:
sudo lircd -n --output /dev/lircd_orig
python lirc_adapter.py
irw /dev/lircd
Try pressing quickly or holding a button on the remote. The counter will only go to 4 and then reset to 0.
Now quick key presses will work in xbmc. The negative is that you cannot change the repeat rate or delay of held buttons, but I quite like the values how they are. Anyway, for me this makes the remote much more usable in xbmc. (and any other program for that matter) It's a hack, but at least I'm not hacking the lirc code.
You can find the script here: lirc adapter script
To use this solution permanently, you might want to edit your /etc/init.d/lirc script to use the right options and start the python adapter alongside it.
Update: modified URLs to make sure they remain on the web
2012-01-31, 00:08
i have the exact same issue with too many button presses.
i'm still looking for a fix.
could u post your lirc init script aswell?
i prolly modified it in the way it should be right?
regards
i'm still looking for a fix.
could u post your lirc init script aswell?
i prolly modified it in the way it should be right?
regards
2012-02-07, 11:45
Elf1sh Wrote:i have the exact same issue with too many button presses.
i'm still looking for a fix.
could u post your lirc init script aswell?
i prolly modified it in the way it should be right?
regards
Try this.
http://forum.xbmc.org/showthread.php?tid=83590
2012-02-08, 12:37
My problems existed already on Ubuntu 10.04 and don't seem to have anything to do with the latest kernel update.
After having fiddled with both lirc and xbmc timeout and other settings, and having tried different kernel modules, I gave up and fixed it this way.
I'm still not exactly sure whether my problem is the same as the other threads indicate. It seems different, because with my remote keypresses aren't doubled when you press once, you just cannot press the same button twice within a second or XBMC starts scrolling like a madman.
I know one thing, setting higher delay times doesn't solve anything because at a lower level multiple keypresses keep being transmitted as an ever increasing counter.
After I solved it this way, I can tell you that I'm happily using my medion remote control with XBMC and never had a problem since. I guess that's what counts.
After having fiddled with both lirc and xbmc timeout and other settings, and having tried different kernel modules, I gave up and fixed it this way.
I'm still not exactly sure whether my problem is the same as the other threads indicate. It seems different, because with my remote keypresses aren't doubled when you press once, you just cannot press the same button twice within a second or XBMC starts scrolling like a madman.
I know one thing, setting higher delay times doesn't solve anything because at a lower level multiple keypresses keep being transmitted as an ever increasing counter.
After I solved it this way, I can tell you that I'm happily using my medion remote control with XBMC and never had a problem since. I guess that's what counts.
2012-02-08, 12:38
Here is the startup script. It's a very simple and stupid mod and I didn't make scripts to stop or restart it.
/etc/init.d/lirc
It's the original lirc daemon startup script with two changes: force override the configuration to use atiusb driver, and startup the intermediary script and move around the proper socket files.
You will need to change "/home/duststorm/projects/lirc_medion_remote_fix/lirc_adapter.py" into the location where your script resides.
/etc/init.d/lirc
Code:
#! /bin/sh
### BEGIN INIT INFO
# Provides: lirc
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts LIRC daemon.
# Description: LIRC is used to control different
# infrared receivers and transceivers.
### END INIT INFO
load_modules ()
{
MODULES_MISSING=false
log_daemon_msg "Loading LIRC modules"
for mod in $*; do
if [ $mod = "udev" ]; then
log_end_msg 0
log_success_msg "Restarted via udev, don't reload modules"
break
else
modprobe $mod 2> /dev/null || MODULES_MISSING=true
fi
done
log_end_msg $?
if $MODULES_MISSING; then
log_failure_msg "Unable to load LIRC kernel modules. Verify your"
log_failure_msg "selected kernel modules in /etc/lirc/hardware.conf"
START_LIRCMD=false
START_LIRCD=false
fi
}
build_remote_args ()
{
REMOTE_ARGS="$*"
#For remote only detection support, we need
#both REMOTE_DEVICE and TRANSMITTER_DEVICE undefined
if [ -z "$REMOTE_DEVICE" ] && [ -z "$TRANSMITTER_DEVICE" ] && [ -c $dev ]; then
REMOTE_DEVICE="$dev"
fi
#If we have a REMOTE_DEVICE or REMOTE_DRIVER defined (either because no devices
#were defined, OR if we explicitly did), then populate REMOTE_ARGS
if [ ! -z "$REMOTE_DEVICE" ] || [ ! -z "$REMOTE_DRIVER" ]; then
if [ -n "$REMOTE_DEVICE" ] && [ "$REMOTE_DEVICE" != "none" ]; then
REMOTE_ARGS="--device=$REMOTE_DEVICE $REMOTE_ARGS"
fi
## MODDED by duststorm: force driver
# if [ -n "$REMOTE_DRIVER" ] && [ "$REMOTE_DRIVER" != "none" ]; then
# REMOTE_ARGS="--driver=$REMOTE_DRIVER $REMOTE_ARGS"
# fi
REMOTE_ARGS="--driver=atilibusb $REMOTE_ARGS"
#Now, if we ALSO have a transmitter defined, add some args
#To make the first lircd listen up
if [ ! -z "$TRANSMITTER_DEVICE" ] || [ ! -z "$TRANSMITTER_DRIVER" ]; then
REMOTE_ARGS="$REMOTE_ARGS --listen"
fi
## MODDED by duststorm: use different socket
#REMOTE_ARGS="--output=$REMOTE_SOCKET $REMOTE_ARGS"
REMOTE_ARGS="--output=/dev/lircd_orig $REMOTE_ARGS"
fi
echo $REMOTE_ARGS
}
build_transmitter_args ()
{
TRANSMITTER_ARGS="$*"
#Transmitters must be explicitly be defined
if [ ! -z "$TRANSMITTER_DEVICE" ] || [ ! -z "$TRANSMITTER_DRIVER" ]; then
if [ -n "$TRANSMITTER_DEVICE" ] && [ "$TRANSMITTER_DEVICE" != "none" ]; then
TRANSMITTER_ARGS="--device=$TRANSMITTER_DEVICE $TRANSMITTER_ARGS"
fi
if [ -n "$TRANSMITTER_DRIVER" ] && [ "$TRANSMITTER_DRIVER" != "none" ]; then
TRANSMITTER_ARGS="--driver=$TRANSMITTER_DRIVER $TRANSMITTER_ARGS"
fi
#Now, if we ALSO have a remote defined, add some args
#To make the second lircd connect
if [ ! -z "$REMOTE_DEVICE" ] || [ ! -z "$REMOTE_DRIVER" ]; then
TRANSMITTER_ARGS="$TRANSMITTER_ARGS --connect=localhost:8765 --pidfile=/var/run/lirc/lircd1.pid"
fi
TRANSMITTER_ARGS="--output=$TRANSMITTER_SOCKET $TRANSMITTER_ARGS"
fi
echo $TRANSMITTER_ARGS
}
. /lib/lsb/init-functions
test -f /usr/sbin/lircd || exit 0
test -f /usr/sbin/lircmd || exit 0
START_LIRCMD=true
START_LIRCD=true
START_IREXEC=true
if [ -f /etc/lirc/hardware.conf ];then
. /etc/lirc/hardware.conf
fi
if [ ! -f /etc/lirc/lircd.conf ] || grep -q "^#UNCONFIGURED" /etc/lirc/lircd.conf; then
if [ "$1" = "start" ]; then
log_success_msg "No valid /etc/lirc/lircd.conf has been found."
log_success_msg "Remote control support has been disabled."
log_success_msg "Reconfigure LIRC or manually replace /etc/lirc/lircd.conf to enable."
fi
START_LIRCD=false
START_LIRCMD=false
START_IREXEC=false
fi
if [ ! -f /etc/lirc/lircmd.conf ] || grep -q "^#UNCONFIGURED" /etc/lirc/lircmd.conf; then
START_LIRCMD=false
fi
if [ ! -f /etc/lirc/lircrc ] || grep -q "^#UNCONFIGURED" /etc/lirc/lircrc; then
START_IREXEC=false
fi
#We need default socket locations
OLD_SOCKET="/dev/lircd"
if [ -z "$REMOTE_SOCKET" ]; then
REMOTE_SOCKET="/var/run/lirc/lircd"
fi
if [ -z "$TRANSMITTER_SOCKET" ]; then
TRANSMITTER_SOCKET="/var/run/lirc/lircd"
#Now, if we ALSO have a remote defined,
#change the default transmitter socket
if [ ! -z "$REMOTE_DEVICE" ] || [ ! -z "$REMOTE_DRIVER" ]; then
TRANSMITTER_SOCKET="${TRANSMITTER_SOCKET}1"
fi
fi
case "$1" in
start)
if [ "$LOAD_MODULES" = "true" ] && [ "$START_LIRCD" = "true" ]; then
load_modules $2 $REMOTE_MODULES $TRANSMITTER_MODULES $MODULES
fi
if [ "$START_LIRCD" = "true" ]; then
[ -d "/var/run/lirc" ] || mkdir -p "/var/run/lirc"
log_daemon_msg "Starting remote control daemon(s) : LIRC "
REMOTE_LIRCD_ARGS=`build_remote_args $REMOTE_LIRCD_ARGS`
TRANSMITTER_LIRCD_ARGS=`build_transmitter_args $TRANSMITTER_LIRCD_ARGS`
#if we have a remote defined, it is primary process
if [ ! -z "$REMOTE_LIRCD_ARGS" ]; then
start-stop-daemon --start --quiet --oknodo --exec /usr/sbin/lircd -- $REMOTE_LIRCD_ARGS < /dev/null
log_end_msg $?
# MODDED by duststorm
# if [ -S "$REMOTE_SOCKET" -a "$OLD_SOCKET" != "$REMOTE_SOCKET" ]; then
# rm -f $OLD_SOCKET && ln -s $REMOTE_SOCKET $OLD_SOCKET
# fi
# Start in-between-daemon and make symlink to new socket location
sleep 2
chmod 666 /dev/lircd_orig
python /home/duststorm/projects/lirc_medion_remote_fix/lirc_adapter.py &
sleep 2
chmod 666 /dev/lircd
if [ ! -f "/var/run/lirc/lircd" ]; then
ln -s /dev/lircd /var/run/lirc/lircd
fi
sleep 1
chmod 666 /var/run/lirc/lircd
#now if we additionally have a transmitter defined, it is secondary process
if [ ! -z "$TRANSMITTER_LIRCD_ARGS" ]; then
/usr/sbin/lircd $TRANSMITTER_LIRCD_ARGS < /dev/null
if [ -S "$TRANSMITTER_SOCKET" ]; then
rm -f ${OLD_SOCKET}1 && ln -s $TRANSMITTER_SOCKET ${OLD_SOCKET}1
fi
fi
elif [ ! -z "$TRANSMITTER_LIRCD_ARGS" ]; then
start-stop-daemon --start --quiet --oknodo --exec /usr/sbin/lircd -- $TRANSMITTER_LIRCD_ARGS < /dev/null
log_end_msg $?
if [ -S "$TRANSMITTER_SOCKET" -a "$OLD_SOCKET" != "$TRANSMITTER_SOCKET" ]; then
rm -f $OLD_SOCKET && ln -s $TRANSMITTER_SOCKET $OLD_SOCKET
fi
else
log_end_msg 1
fi
fi
if [ "$START_LIRCMD" = "true" ]; then
[ -d "/var/run/lirc" ] || mkdir -p "/var/run/lirc"
log_daemon_msg "Starting remote control mouse daemon : LIRCMD "
start-stop-daemon --start --quiet --oknodo --exec /usr/sbin/lircmd < /dev/null
log_end_msg $?
fi
if [ "$START_IREXEC" = "true" ]; then
[ -d "/var/run/lirc" ] || mkdir -p "/var/run/lirc"
log_daemon_msg "Starting execution daemon: irexec"
start-stop-daemon --start --quiet --oknodo --exec /usr/bin/irexec -- -d /etc/lirc/lircrc < /dev/null
log_end_msg $?
fi
;;
stop)
if [ "$START_IREXEC" = "true" ]; then
log_daemon_msg "Stopping execution daemon: irexec"
start-stop-daemon --stop --quiet --exec /usr/bin/irexec
log_end_msg $?
fi
if [ "$START_LIRCMD" = "true" ]; then
log_daemon_msg "Stopping remote control mouse daemon: LIRCMD"
start-stop-daemon --stop --quiet --exec /usr/sbin/lircmd
log_end_msg $?
fi
if [ "$START_LIRCD" = "true" ]; then
log_daemon_msg "Stopping remote control daemon(s): LIRC"
start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
log_end_msg $?
[ -h "$OLD_SOCKET" ] && rm -f $OLD_SOCKET
[ -h "${OLD_SOCKET}1" ] && rm -f ${OLD_SOCKET}1
fi
;;
reload|force-reload)
if [ "$START_IREXEC" = "true" ]; then
start-stop-daemon --stop --quiet --signal 1 --exec /usr/bin/irexec
fi
if [ "$START_LIRCD" = "true" ]; then
start-stop-daemon --stop --quiet --signal 1 --exec /usr/sbin/lircd
fi
if [ "$START_LIRCMD" = "true" ]; then
start-stop-daemon --stop --quiet --signal 1 --exec /usr/sbin/lircmd
fi
;;
restart)
$0 stop
#passes parameter $2 which is possibly our udev paramater
$0 start $2
;;
*)
echo "Usage: /etc/init.d/lircd {start|stop|reload|restart|force-reload}"
exit 1
esac
exit 0
You will need to change "/home/duststorm/projects/lirc_medion_remote_fix/lirc_adapter.py" into the location where your script resides.
2012-02-08, 12:59
For reference I will inline the code of the links in this forum, in case the hosting might ever go down. These are the two same files as linked to in my previous post.
lirc_adapter.py
medion-md8080xl-remote.conf
lirc_adapter.py
Code:
#! /usr/bin/env python
# Patching script for fixing faulty Medion X10 remote
# input (or similar)
# This fixes the issue where quickly repeatet short key presses
# are read like a continuous press.
#
# This script must run in the background while using lirc (start it
# after starting lircd) and will read from the lircd socket, transform
# the data to eliminate the problem, and send it to a different output
# socket. This output socket contains the corrected signals and is the
# one that should be fed to any program using lirc.
import socket,os,sys,threading,thread
class MainServer(object):
'''Main class of the server'''
#Settings (change if necessary)
REPEAT_COUNT = 5 # max sequence number (set to number of repeats for one keypress)
LIRC_SOCKET = "/dev/lircd_orig" # input: socket that lirc writes to
OUTPUT_SOCKET = "/dev/lircd" # output: socket to output to, let your programs listen to this
DAEMONIZE = True
DEBUG = False
def __init__(self):
self.connectedClients = []
def start(self):
'''Start server'''
# Connect to input socket
self.s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
self.s.connect(MainServer.LIRC_SOCKET)
print "Listening to socket %s" % MainServer.LIRC_SOCKET
# Create worker for input processing
inputWorker = InputWorker(self.s,self)
inputWorker.start()
# Create output socket
self.o = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
try:
os.remove(MainServer.OUTPUT_SOCKET)
except OSError as e:
print e
print "Sending output to socket %s" % MainServer.OUTPUT_SOCKET
self.o.bind(MainServer.OUTPUT_SOCKET)
os.chmod(MainServer.OUTPUT_SOCKET, 666)
self.o.listen(5) # queue up to 5 connect requests before refusing new ones
# Main loop, wait for incoming connections
try:
while True:
(clientSocket, address) = self.o.accept()
print "Client connected"
# add clientsocket to list of clients
self.connectedClients.append(clientSocket)
except (KeyboardInterrupt, SystemExit):
print "Received keyboard interrupt, quitting."
def broadcastMessage(self, message):
'''Broadcast message to all connected clients'''
newClients = []
for client in self.connectedClients:
try:
client.send(message)
newClients.append(client)
except Exception:
print "Error sending to client, disconnect"
client.close()
self.connectedClients = newClients
def quit(self):
'''Stop main thread and quit server'''
print "Closing connections"
self.s.close()
self.o.close()
[c.close() for c in self.connectedClients ]
os._exit(1)
class InputWorker(threading.Thread):
'''Worker process for handling input'''
def __init__(self,inputSocket,mainServer):
threading.Thread.__init__(self)
self.inputSocket = inputSocket
self.mainServer = mainServer
self.daemon = True
def run(self):
while True:
# Listen for new input
inp = self.inputSocket.recv(1024)
if not inp:
print "Connection with lirc socket lost, quitting"
self.mainServer.quit()
break
if MainServer.DEBUG:
print "Received: %s" % inp
output = self.processInput(inp)
if MainServer.DEBUG:
print "Sending: %s" % output
self.mainServer.broadcastMessage(output)
def processInput(self,inp):
'''This is where the magic happens.
This function transforms the lirc input into the output format we want.'''
try:
parts = inp.split(" ")
seqNb = int(parts[1], 16)
seqNb = seqNb % MainServer.REPEAT_COUNT
parts[1] = str(hex(seqNb).lstrip("0x")).rjust(2,"0")
return " ".join(parts)
except Exception:
return inp
def daemonize():
'''Daemonize this server (fork in background)'''
# Dual fork hack to make process run as a daemon
# from: http://motomastyle.com/daemonizing-a-python-script/
if __name__ == "__main__":
try:
pid = os.fork()
if pid > 0:
sys.exit(0)
except OSError, e:
sys.exit(1)
os.chdir("/")
os.setsid()
os.umask(0)
try:
pid = os.fork()
if pid > 0:
sys.exit(0)
except OSError, e:
sys.exit(1)
## MAIN ##
if MainServer.DAEMONIZE:
daemonize()
print 'Starting LIRC adapter server'
server = MainServer()
server.start()
print 'Stopping server'
medion-md8080xl-remote.conf
Code:
# Please make this file available to others
# by sending it to <[email protected]>
#
# this config file was automatically generated
# using lirc-0.7.0(atiusb) on Fri Feb 18 01:53:46 2005
#
# contributed by FUX 2005-02-17
#
# brand: Medion
# model no. of remote control: RF Remote Control
# FCC ID: B4S20016398
# devices being controlled by this remote:
#
begin remote
name Medion_X10
bits 16
eps 30
aeps 100
one 0 0
zero 0 0
pre_data_bits 8
pre_data 0x14
post_data_bits 16
post_data 0x0
gap 235996
toggle_bit_mask 0x80800000
begin codes
tv 0x000000000000012C
vcr 0x000000000000022D
dvd 0x000000000000D904
music 0x000000000000DB06
radio 0x000000000000032E
photo 0x000000000000DA05
preview 0x000000000000042F
list 0x0000000000000530
setup 0x000000000000F01B
desktop 0x0000000000000631
vol- 0x000000000000DD08
vol+ 0x000000000000DE09
mute 0x000000000000D500
ch- 0x000000000000E10C
ch+ 0x000000000000E00B
red 0x0000000000000732
green 0x0000000000000833
yellow 0x0000000000000934
blue 0x0000000000000A35
txt 0x000000000000EB16
1 0x000000000000E20D
2 0x000000000000E30E
3 0x000000000000E40F
4 0x000000000000E510
5 0x000000000000E611
6 0x000000000000E712
7 0x000000000000E813
8 0x000000000000E914
9 0x000000000000EA15
0 0x000000000000EC17
chsearch 0x000000000000F11C
del 0x000000000000F520
ren 0x0000000000000B36
snapshot 0x000000000000ED18
left 0x000000000000F21D
up 0x6F9A
up2 0xEF1A
right 0x000000000000F41F
down 0x000000000000F722
ok 0x000000000000F31E
acquire 0x0000000000000C37
editimage 0x0000000000000D38
rewind 0x000000000000F924
play 0x000000000000FA25
forward 0x000000000000FB26
rec 0x000000000000FC27
stop 0x000000000000FD28
pause 0x000000000000FE29
skipr 0x000000000000F621
fullscreen 0x0000000000000E39
skipf 0x000000000000F823
dvdmenu 0x000000000000EE19
off 0x000000000000D702
dvdaudio 0x0000000000000F3A
end codes
end remote