Sunday, January 30, 2011

Figured the Remote Button Mapping Out Again

That's good news for me. Should finish the mapping up tomorrow.

So everything is near to the way I want it. So, of course, it's time to do something that may break it horribly again. :) I have an Intel chipset but XBMC compiles to use vdpau by default. So this week, it's time to get the Intel drivers on the XBMC-Live system and get VAAPI working.

It also won't be long until I'm able to order the new drive (2tb thank you). That means a fresh new install of both the development (Ubuntu desktop) and production (XBMC-Live) systems. This is good because the Ubuntu desktop is running a bit flaky these days and refuses to acknowledge that the dvdrom is even there along with the compiled from source XBMC segfaulting on a regular basis.

Once I get the XBMC-Live exactly where I want it, I think I'll follow the guide for building a minimum install system, try everything on a less bloated distro such as ArchLinux and the final goal is to build it from scratch (LFS for the win). Should give me something to do on a regular basis for quite a while.

There's also an old standalone imon VFD driver for lcdproc from 2005. I'd love to get it to compile and see if I can get it running. One less daemon to have to worry about if that would work and lirc can be dropped.

Saturday, January 29, 2011

XBMC-Live up and running.

Actually, it's been up and running for a few days now. I've already wiped the partition clean once and reinstalled and upgraded the 2.6.32 kernel to 2.6.38. XBMC works out of the box with a .38 kernel remote control wise. Unfortunately, though, the VFD doesn't. So even though XBMC can run the remote w/o lirc, lcdproc needs lirc to run the VFD. The 2.6.36 and lower kernels come with lirc_dev and lirc_imon in the kernel which, once set up, runs great. 2.6.38 switches to the imon driver in the kernel. A good start because it does cut down on configuration and let's the imon work out of the box. I'll have to check to make sure that I can map the buttons but here's hoping...

And here's the setup from source for lcdproc:

Create directory for lcdproc

$ mkdir lcdproc

Change to lcdproc directory

$ cd lcdproc

Download lcdproc source:

$ wget http://softlayer.dl.sourceforge.net/project/lcdproc/lcdproc/0.5.3/lcdproc-0.5.3.tar.gz

Unpack the source

$ tar -xvf lcdproc-0.5.3.tar.gz

Change into lcdproc-0.5.3 directory

$ cd lcdproc-0.5.3.tar.gz

Configure

$ ./configure --enable-drivers=imon

Make

$ make -j4

And install

$ make install

And install

$ sudo make install

Copy LCDd.conf to /etc/LCDd.conf

$ sudo cp LCDd.conf /etc/LCDd.conf

Cp startup scripts:

$ sudo cp ./scripts/init-LCDd.debian /etc/init.d/LCDd
$ sudo cp ./scripts/init-lcdproc.debian /etc/init.d/lcdproc

Change LCDproc.conf

$ sudo nano LCDd.conf

Change Driver=curses to Driver=imon

Uncomment Hello message if desired.

Start LCDd
$ sudo /etc/init.d/LCDd start

Should see welcome message

Start lcdproc
$ sudo etc/init.d/lcdproc start

Should see information.

Had to change the DriverPath in LCDd.conf to /usr/lib/lcdproc/

Open ~/.xbmc/userdata/guisettings.xml
change haslcd to true.

Restart xbmc-live.

Hopefully everything works.

Tuesday, January 25, 2011

Decided to install XBMC Live a few days ago.

So I cleared some space on my hdd (Can't wait until next month when I can get the 2tb SATA hdd!!) and started the install process.

XBMC Live 10.0 comes with a 2.6.32 kernel which uses the old lirc_imon and lirc_dev kernel drivers instead of the imon driver in the more recent kernels (2.6.37 and up?).

This means that the remote doesn't have to be configured using the device input layer and all the keys on the RM200 work, just NOT out of the box. Shocker, I know.

In addition, XBMC doesn't show that pain in the ass problem where trying to watch avis that have been burned to DVDrs doesn't take forever to load the file list. I'll have to take a look at the differences and see if I can find a workaround for my Ubuntu 10.10 install that is running a 2.6.36 kernel.

So I went ahead and dropped the 2.6.36 kernel (last kernel that doesn't use the imon driver, I think) into the XMBC Live distribution. It fixed a few problems that I had after I hosed a few things hacking around the system. ;)



----------------------------------------------------------
Update kernel from deb packages:


http://www.unixmen.com/linux-tutorials/780-upgrade-your-kernel-the-safe-way-in-ubuntu-linuxmint

Go to http://kernel.ubuntu.com/~kernel-ppa/mainline/ and select kernel

switch to download directory:

$ cd ~/development/kernel

Download linux-headers file that ends with all.deb

$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.36-rc7-maverick/linux-headers-2.6.36-020636rc7_2.6.36-020636rc7.201010070908_all.deb

Download the linux-headers for the that ends with i386 or AMD64:

$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.36-rc7-maverick/linux-headers-2.6.36-020636rc7-generic_2.6.36-020636rc7.201010070908_i386.deb

Download the linux-image file for the architecture you want:

$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.36-rc7-maverick/linux-image-2.6.36-020636rc7-generic_2.6.36-020636rc7.201010070908_i386.deb

Install the linux-headers;
$ sudo dpkg -i linux-headers-2.6.36-020636rc7_2.6.36-020636rc7.201010070908_all.deb

Install the linux-headers i386 or AMD64:
$ sudo dpkg -i linux-headers-2.6.36-020636rc7-generic_2.6.36-020636rc7.201010070908_i386.deb

Install the linux-image:
$ sudo dpkg -i linux-image-2.6.36-020636rc7-generic_2.6.36-020636rc7.201010070908_i386.deb

Reboot.

Check kernel with uname

$ uname -r
------------------------------------------------------------------

Next on deck kernel-wise is to compile from vanilla source...

So then I had to get lirc and lcdproc working for my Antec Multimedia Station Elite w/ the Veris RM200 remote (note: this only works for 2.6.36 kernels and down since higher kernels have the imon driver built in that requires the remote to be setup using the device input layer):

------------------------------------------------------------------


Make sure that kernel has loaded lirc_imon and lirc_dev (2.6.36 and lower):

xbmc@XBMCLive:~$ lsmod | grep lirc
lirc_mceusb 12402 0
lirc_imon 22905 0
lirc_dev 8884 2 lirc_mceusb,lirc_imon

Configure lirc

xbmc@XBMCLive:~$ sudo dpkg-reconfigure lirc

Hit down arrow key until Soundgraph iMon Antec Veris is highlighted, press enter key.
Press enter key again unless you want to set up an IR transmitter (not covered here).

* Stopping remote control daemon(s): LIRC [ OK ]
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service udev reload

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the reload(8) utility, e.g. reload udev
* Loading LIRC modules [ OK ]
* Starting remote control daemon(s) : LIRC [ OK ]

Test remote by starting irw and pressing various keys:

xbmc@XBMCLive:/etc/lirc$ irw
01007f0000000201 00 KEY_DOWN Antec_Veris_RM200
01007f0000000201 01 KEY_DOWN Antec_Veris_RM200
0100007f00000201 00 KEY_RIGHT Antec_Veris_RM200
0200001e00000201 00 KEY_1 Antec_Veris_RM200
0200001f00000201 00 KEY_2 Antec_Veris_RM200
0200002000000201 00 KEY_3 Antec_Veris_RM200
0200002100000201 00 KEY_4 Antec_Veris_RM200
0200002200000201 00 KEY_5 Antec_Veris_RM200
0200002300000201 00 KEY_6 Antec_Veris_RM200
0200002400000201 00 KEY_7 Antec_Veris_RM200
0200002500000201 00 KEY_8 Antec_Veris_RM200
0200002600000201 00 KEY_9 Antec_Veris_RM200
0220002500000201 00 Star Antec_Veris_RM200
0200002700000201 00 KEY_0 Antec_Veris_RM200
0220002000000201 00 Hash Antec_Veris_RM200

Good to go.

---------------------------------------------------

And now lcdproc compiled from source:

---------------------------------------------------
Create directory for lcdproc

$ mkdir lcdproc

Change to lcdproc directory

$ cd lcdproc

Download lcdproc source:

$ wget http://softlayer.dl.sourceforge.net/project/lcdproc/lcdproc/0.5.3/lcdproc-0.5.3.tar.gz

Unpack the source

$ tar -xvf lcdproc-0.5.3.tar.gz

Change into lcdproc-0.5.3 directory

$ cd lcdproc-0.5.3.tar.gz

Configure

$ ./configure --enable-drivers=imon

Make

$ make -j4

And install

$ make install

And install

$ sudo make install

Copy LCDd.conf to /etc/LCDd.conf

$ sudo cp LCDd.conf /etc/LCDd.conf

Cp startup scripts:

$ sudo cp ./scripts/init-LCDd.debian /etc/init.d/LCDd
$ sudo cp ./scripts/init-lcdproc.debian /etc/init.d/lcdproc

Change LCDproc.conf

$ sudo nano LCDd.conf

Change Driver=curses to Driver=imon

Uncomment Hello message if desired.

Start LCDd
$ sudo /etc/init.d/LCDd start

Should see welcome message

Start lcdproc
$ sidp etc/init.d/lcdproc start

Should see information.

Had to change the DriverPath in LCDd.conf to /usr/lib/lcdproc/

------------------------------------------

So I'm good to go until I find something else to break. Which won't be too long because I get to start from near scratch once I get the new drive. Fun. ;)

~T

Sunday, January 23, 2011

Veris Remote Issues Ironed out

Installed the 2.6.38rc2 kernel.  The integrated imon driver in the kernel now defaults to keyboard mode instead of  mouse mode.

Changelog:

-----------------------------------------------------------------------------------------------------

commit 76f1ef427c0aab3d3c917b497562ea2cdaaae056
Author: Jarod Wilson <jarod@redhat.com>
Date:   Thu Jan 6 16:59:35 2011 -0300

    [media] rc/imon: default to key mode instead of mouse mode
    
My initial thinking was that we should default to mouse mode, so people could use the mouse function to click on something on a login screen, but a lot of systems where a remote is useful automatically log in a user and launch a media center application, some of which hide the mouse, which can be confusing to users if they punch buttons on the remote and don't see any feedback. Plus, first and foremost, its a remote, so lets default to being a remote, and only toggle into mouse mode when the user explicitly asks for it. As a nice side-effect, this actually simplifies some of the code a fair bit...
    
Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

commit 5aad724280b9f8ffff3a55311ef0ba35ebb4099a
Author: Jarod Wilson <jarod@redhat.com>
Date:   Thu Jan 6 16:59:36 2011 -0300

[media] rc: fix up and genericize some time unit conversions
    
The ene_ir driver was using a private define of MS_TO_NS, which is meant to be microseconds to nanoseconds. The mceusb driver copied it, intending to use is a milliseconds to microseconds. Lets move the defines to a common location, expand and standardize them a touch, so that we now have:
    
MS_TO_NS - milliseconds to nanoseconds
MS_TO_US - milliseconds to microseconds
US_TO_NS - microseconds to nanoseconds
    
Reported-by: David Härdeman <david@hardeman.nu>
CC: Maxim Levitsky <maximlevitsky@gmail.com>
Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

commit 9ad77eb57b45f81ac3e12077d19e5f121c4cff6d
Author: Jarod Wilson <jarod@redhat.com>
Date:   Thu Jan 6 16:59:34 2011 -0300

[media] rc/imon: need to submit urb before ffdc type check
    
Otherwise, we have a null receive buffer, and the logic all falls down, goes boom, all ffdc devs wind up as imon IR w/VFD. Oops.
    
Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-------------------------------------------------------------------

Previously, I had followed suggestions to install the remote by its event.  This works, however, if you plug in or unplug another USB device and reboot, the event id for the remote can change and you get a non-responsive remote.  So the preferred method, for me at least, is to use the by-id:

find device id:
$ lsusb

us 005 Device 002: ID 15c2:0044 SoundGraph Inc.

or
$ cat /proc/bus/input/devices

I: Bus=0003 Vendor=15c2 Product=0044 Version=0002
N: Name="iMON Remote (15c2:0044)"
P: Phys=usb-0000:00:1d.3-2/input0
S: Sysfs=/devices/pci0000:00/0000:00:1d.3/usb5/5-2/5-2:1.0/rc/rc0/input6
U: Uniq=
H: Handlers=kbd event6
B: EV=100013
B: KEY=fff 0 400000108c0320 2d5008000000000 30000 400119000 418614100801 809e168000000000 200000010004002
B: MSC=10

Find the device ID:
$ ls /dev/input/by-id

usb-15c2_0044-event-if00
usb-15c2_0044-event-mouse
usb-15c2_0044-mouse

$ sudo dpkg-reconfigure lirc
Select Linux input layer (/dev/input/eventX) for Remote control configuration:
Select none for IR transmitter
select /dev/input/event6 for Custom even interface for your dev/input device

Open /etc/lirc/hardware.conf

$ sudo gedit /etc/lirck/hardware.conf &

Change REMOTE_DEVICE="/dev/input/event6
to
REMOTE_DEVICE="/dev/input/by-id/usb-15c2_0044-event-if00"

Save file

Restart lirc
$ sudo /etc/init.d/lirc restart

Use irw to check to see if button presses are being received properly:
>>irw

Works on restart of lirc and continues working after restart.  It also works when a usb device is unplugged, the computer is restarted and the event id changes for the remote.

The App Launcher button doesn't work and neither do the number buttons on the remote so the next step is to play with the config files and codes.

Tuesday, January 11, 2011

"Small" issue.

XBMC decided to crash whenever I play a DVD.


DtsDeviceOpen: Create File Failed
CRITSEC[0x11b71e0]: Trying to enter destroyed section.
CRITSEC[0x11b71e0]: Trying to leave destroyed section.
CRITSEC[0x11b02e8]: Trying to enter destroyed section.
CRITSEC[0x11b02e8]: Trying to leave destroyed section.
CRITSEC[0x11b9288]: Trying to enter destroyed section.
CRITSEC[0x11b9288]: Trying to leave destroyed section.
CRITSEC[0x11b71e0]: Trying to enter destroyed section.
CRITSEC[0x11b71e0]: Trying to leave destroyed section.
CRITSEC[0x11b71e0]: Trying to enter destroyed section.
CRITSEC[0x11b71e0]: Trying to leave destroyed section.
CRITSEC[0x11b71e0]: Trying to enter destroyed section.
CRITSEC[0x11b71e0]: Trying to leave destroyed section.

So the recommendation was to kill Pulse Audio.  So I uninstalled it.  I'll my usual tests (audio disc, avi file on hdd, avi files on DVD, avi files on cd, copied DVD, factory DVD etc.).  

Hopefully this will kill the frequent problem I have with DVD+-Rs with video container files like avi and mkvs locking XBMC up.

Ok, guess it didn't. I still get:



Running DIL (3.6.0) Version
DtsDeviceOpen: Opening HW in mode 0
DtsDeviceOpen: Create File Failed
CRITSEC[0x11b71e0]: Trying to enter destroyed section.
CRITSEC[0x11b71e0]: Trying to leave destroyed section.

The DVD drive that I have installed is probably at least 5 years old or more so I'm not ruling that out as a cause of some problems, however, the tray was open when I started XBMC this time and so I have to assume that it's something else.


When launching from the command line.  I didn't reboot after pulling Pulse Audio off. Guess I'll try a rebuild and if that doesn't work revert to an earlier more stable version.

I also have an issue with this version of XBMC (pre-10.5 r35617M) where inserting a DVD into the drive is supposed to autoplay the DVD but instead it brings up a file manager like window with the options:

Browse Video
Browse Music
Browse Pictures
Browse Files


A busy weekend.

I got quite a few things accomplished and several problems worked out.  Again, I'll rewrite these with more detail once I start building kernel that is solely for running XBMC.  So consider this as more of a memory jog.  If you have any questions or recommendations, feel free to comment.  I'm not an expert (yet...lol) but I will do my best to either answer the question or point you in the right direction.

My Veris RM200 remote is now fully functional.  I just need to map a few more buttons.  The key to this was, when running the lirc configuration, to select Linux Input Layer and then set it to your remote's device event.
So you run
>> cat /proc/bus/input/devices


You'll get output for the various devices that are present.  This is the entry for my Veris RM200 remote which uses lirc's iMON drivers:


I: Bus=0003 Vendor=15c2 Product=0044 Version=0002
N: Name="iMON Remote (15c2:0044)"
P: Phys=usb-0000:00:1d.3-2/input0
S: Sysfs=/devices/pci0000:00/0000:00:1d.3/usb5/5-2/5-2:1.0/rc/rc0/input5
U: Uniq=
H: Handlers=kbd mouse1 event5
B: EV=100007
B: KEY=fff 0 400000108c0320 2d5008200000000 30000 400119000 419614100801 809e168000000000 200000010004002
B: REL=103

So the device field in the lirc configuration setup should be /dev/input/event5

Before this change, my remote worked but was only partially functioning.  IRW wasn't echoing any remote button presses so I knew something was up.  So once I changed it from the Antec Veris/Imon, IRW started chirping like a bird and XBMCis now fully controllable using the mouse.

This is the information that helped me get my remote working.  There may have been some intermediate steps because I tried quite a few different things:
http://forum.xbmc.org/showthread.php?t=83284

An important note is that I am running the 2.6.35-24-generic kernel.  Most instructions that I have seen include loading 2 kernel modules.  The kernel I'm using has the iMON dirvers included already.

When you make a major change to the lirc configuration such as changing the device that lirc is using, you should also rebuild XBMC.  I've looked quite a bit, but if XBMC doesn't hardcode the lirc device during the build, then it's hiding the location because I can't find it...

Here is my current lirc hardware.conf file (/etc/lirc/hardware.conf):

#############################################################

# /etc/lirc/hardware.conf
#
#Chosen Remote Control
REMOTE="Linux input layer (/dev/input/eventX)"
REMOTE_MODULES=""
REMOTE_DRIVER="devinput"
REMOTE_DEVICE="/dev/input/event5"
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF="devinput/lircd.conf.devinput"
REMOTE_LIRCD_ARGS=""

#Chosen IR Transmitter
TRANSMITTER="None"
TRANSMITTER_MODULES=""
TRANSMITTER_DRIVER=""
TRANSMITTER_DEVICE=""
TRANSMITTER_SOCKET=""
TRANSMITTER_LIRCD_CONF=""
TRANSMITTER_LIRCD_ARGS=""

#Enable lircd
START_LIRCD="true"

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD="false"

#Try to load appropriate kernel modules
LOAD_MODULES="false"

# Default configuration files for your hardware if any
LIRCMD_CONF=""

#Forcing noninteractive reconfiguration
#If lirc is to be reconfigured by an external application
#that doesn't have a debconf frontend available, the noninteractive
#frontend can be invoked and set to parse REMOTE and TRANSMITTER
#It will then populate all other variables without any user input
#If you would like to configure lirc via standard methods, be sure
#to leave this set to "false"
FORCE_NONINTERACTIVE_RECONFIGURATION="false"
START_LIRCMD=""

# Receiver settings required by gnome-lirc-properties
RECEIVER_MODEL="iMON\ Remote\ \(15c2:0044\)"
RECEIVER_VENDOR="Linux\ Input\ Device"

# Remote settings required by gnome-lirc-properties
REMOTE_MODEL="Linux\ Input\ Layer\ compatible\ Remote"
REMOTE_VENDOR="Generic"

################################################################

And here is the lircd.conf (/etc/lirc/lircd.conf):

################################################################


#This configuration has been automatically generated via
#the Ubuntu LIRC package maintainer scripts.
#
#It includes the default configuration for the remote and/or
#transmitter that you have selected during package installation.
#
#Feel free to add any custom remotes to the configuration
#via additional include directives or below the existing
#Ubuntu include directives from your selected remote and/or
#transmitter.

#Configuration for the Linux input layer (/dev/input/eventX) remote:
include "/usr/share/lirc/remotes/devinput/lircd.conf.devinput"
###################################################################

And the include file (/usr/share/lirc/remotes/devinput/lircd.conf.devinput)


###################################################################


# generated by devinput.sh
begin remote
        name            devinput
        bits            16
        eps             30
        aeps            100
        pre_data_bits   16
        pre_data        0x0001
        post_data_bits  32
        post_data       0x00000001
        gap             132799
        toggle_bit      0

begin codes
KEY_0 11
KEY_102ND 86
KEY_1 2
KEY_2 3
KEY_3 4
KEY_4 5
KEY_5 6
KEY_6 7
KEY_7 8
KEY_8 9
KEY_9 10
KEY_A 30
KEY_AB 0x196
KEY_ADDRESSBOOK 0x1ad
KEY_AGAIN 129
KEY_ALTERASE 222
KEY_ANGLE 0x173
KEY_APOSTROPHE 40
KEY_ARCHIVE 0x169
KEY_AUDIO 0x188
KEY_AUX 0x186
KEY_B 48
KEY_BACK 158
KEY_BACKSLASH 43
KEY_BACKSPACE 14
KEY_BASSBOOST 209
KEY_BATTERY 236
KEY_BLUE 0x191
KEY_BLUETOOTH 237
KEY_BOOKMARKS 156
KEY_BREAK 0x19b
KEY_BRIGHTNESS_CYCLE 243
KEY_BRIGHTNESSDOWN 224
KEY_BRIGHTNESSUP 225
KEY_BRIGHTNESS_ZERO 244
KEY_BRL_DOT10 0x1fa
KEY_BRL_DOT1 0x1f1
KEY_BRL_DOT2 0x1f2
KEY_BRL_DOT3 0x1f3
KEY_BRL_DOT4 0x1f4
KEY_BRL_DOT5 0x1f5
KEY_BRL_DOT6 0x1f6
KEY_BRL_DOT7 0x1f7
KEY_BRL_DOT8 0x1f8
KEY_BRL_DOT9 0x1f9
KEY_C 46
KEY_CALC 140
KEY_CALENDAR 0x18d
KEY_CAMERA 212
KEY_CAMERA_FOCUS 0x210
KEY_CANCEL 223
KEY_CAPSLOCK 58
KEY_CD 0x17f
KEY_CHANNEL 0x16b
KEY_CHANNELDOWN 0x193
KEY_CHANNELUP 0x192
KEY_CHAT 216
KEY_CLEAR 0x163
KEY_CLOSE 206
KEY_CLOSECD 160
KEY_COFFEE 152
KEY_COMMA 51
KEY_COMPOSE 127
KEY_COMPUTER 157
KEY_CONFIG 171
KEY_CONNECT 218
KEY_CONTEXT_MENU 0x1b6
KEY_COPY 133
KEY_CUT 137
KEY_CYCLEWINDOWS 154
KEY_D 32
KEY_DASHBOARD 204
KEY_DATABASE 0x1aa
KEY_DEL_EOL 0x1c0
KEY_DEL_EOS 0x1c1
KEY_DELETE 111
KEY_DELETEFILE 146
KEY_DEL_LINE 0x1c3
KEY_DIGITS 0x19d
KEY_DIRECTION 153
KEY_DIRECTORY 0x18a
KEY_DISPLAY_OFF 245
KEY_DISPLAYTOGGLE 0x1af
KEY_DOCUMENTS 235
KEY_DOLLAR 0x1b2
KEY_DOT 52
KEY_DOWN 108
KEY_DVD 0x185
KEY_E 18
KEY_EDIT 176
KEY_EDITOR 0x1a6
KEY_EJECTCD 161
KEY_EJECTCLOSECD 162
KEY_EMAIL 215
KEY_END 107
KEY_ENTER 28
KEY_EPG 0x16d
KEY_EQUAL 13
KEY_ESC 1
KEY_EURO 0x1b3
KEY_EXIT 174
KEY_F10 68
KEY_F11 87
KEY_F12 88
KEY_F13 183
KEY_F14 184
KEY_F15 185
KEY_F1 59
KEY_F16 186
KEY_F17 187
KEY_F18 188
KEY_F19 189
KEY_F20 190
KEY_F21 191
KEY_F22 192
KEY_F23 193
KEY_F24 194
KEY_F2 60
KEY_F 33
KEY_F3 61
KEY_F4 62
KEY_F5 63
KEY_F6 64
KEY_F7 65
KEY_F8 66
KEY_F9 67
KEY_FASTFORWARD 208
KEY_FAVORITES 0x16c
KEY_FILE 144
KEY_FINANCE 219
KEY_FIND 136
KEY_FIRST 0x194
KEY_FN 0x1d0
KEY_FN_1 0x1de
KEY_FN_2 0x1df
KEY_FN_B 0x1e4
KEY_FN_D 0x1e0
KEY_FN_E 0x1e1
KEY_FN_ESC 0x1d1
KEY_FN_F 0x1e2
KEY_FN_F10 0x1db
KEY_FN_F1 0x1d2
KEY_FN_F11 0x1dc
KEY_FN_F12 0x1dd
KEY_FN_F2 0x1d3
KEY_FN_F3 0x1d4
KEY_FN_F4 0x1d5
KEY_FN_F5 0x1d6
KEY_FN_F6 0x1d7
KEY_FN_F7 0x1d8
KEY_FN_F8 0x1d9
KEY_FN_F9 0x1da
KEY_FN_S 0x1e3
KEY_FORWARD 159
KEY_FORWARDMAIL 233
KEY_FRAMEBACK 0x1b4
KEY_FRAMEFORWARD 0x1b5
KEY_FRONT 132
KEY_G 34
KEY_GAMES 0x1a1
KEY_GOTO 0x162
KEY_GRAPHICSEDITOR 0x1a8
KEY_GRAVE 41
KEY_GREEN 0x18f
KEY_H 35
KEY_HANGEUL 122
KEY_HANJA 123
KEY_HELP 138
KEY_HENKAN 92
KEY_HIRAGANA 91
KEY_HOME 102
KEY_HOMEPAGE 172
KEY_HP 211
KEY_I 23
KEY_INFO 0x166
KEY_INSERT 110
KEY_INS_LINE 0x1c2
KEY_ISO 170
KEY_J 36
KEY_K 37
KEY_KATAKANA 90
KEY_KATAKANAHIRAGANA 93
KEY_KBDILLUMDOWN 229
KEY_KBDILLUMTOGGLE 228
KEY_KBDILLUMUP 230
KEY_KEYBOARD 0x176
KEY_KP0 82
KEY_KP1 79
KEY_KP2 80
KEY_KP3 81
KEY_KP4 75
KEY_KP5 76
KEY_KP6 77
KEY_KP7 71
KEY_KP8 72
KEY_KP9 73
KEY_KPASTERISK 55
KEY_KPCOMMA 121
KEY_KPDOT 83
KEY_KPENTER 96
KEY_KPEQUAL 117
KEY_KPJPCOMMA 95
KEY_KPLEFTPAREN 179
KEY_KPMINUS 74
KEY_KPPLUS 78
KEY_KPPLUSMINUS 118
KEY_KPRIGHTPAREN 180
KEY_KPSLASH 98
KEY_L 38
KEY_LANGUAGE 0x170
KEY_LAST 0x195
KEY_LEFT 105
KEY_LEFTALT 56
KEY_LEFTBRACE 26
KEY_LEFTCTRL 29
KEY_LEFTMETA 125
KEY_LEFTSHIFT 42
KEY_LINEFEED 101
KEY_LIST 0x18b
KEY_LOGOFF 0x1b1
KEY_M 50
KEY_MACRO 112
KEY_MAIL 155
KEY_MAX 0x2ff
KEY_MEDIA 226
KEY_MEDIA_REPEAT 0x1b7
KEY_MEMO 0x18c
KEY_MENU 139
KEY_MESSENGER 0x1ae
KEY_MHP 0x16f
KEY_MINUS 12
KEY_MODE 0x175
KEY_MOVE 175
KEY_MP3 0x187
KEY_MSDOS 151
KEY_MUHENKAN 94
KEY_MUTE 113
KEY_N 49
KEY_NEW 181
KEY_NEWS 0x1ab
KEY_NEXT 0x197
KEY_NEXTSONG 163
KEY_NUMERIC_0 0x200
KEY_NUMERIC_1 0x201
KEY_NUMERIC_2 0x202
KEY_NUMERIC_3 0x203
KEY_NUMERIC_4 0x204
KEY_NUMERIC_5 0x205
KEY_NUMERIC_6 0x206
KEY_NUMERIC_7 0x207
KEY_NUMERIC_8 0x208
KEY_NUMERIC_9 0x209
KEY_NUMERIC_POUND 0x20b
KEY_NUMERIC_STAR 0x20a
KEY_NUMLOCK 69
KEY_O 24
KEY_OK 0x160
KEY_OPEN 134
KEY_OPTION 0x165
KEY_P 25
KEY_PAGEDOWN 109
KEY_PAGEUP 104
KEY_PASTE 135
KEY_PAUSE 119
KEY_PAUSECD 201
KEY_PC 0x178
KEY_PHONE 169
KEY_PLAY 207
KEY_PLAYCD 200
KEY_PLAYER 0x183
KEY_PLAYPAUSE 164
KEY_POWER 116
KEY_POWER2 0x164
KEY_PRESENTATION 0x1a9
KEY_PREVIOUS 0x19c
KEY_PREVIOUSSONG 165
KEY_PRINT 210
KEY_PROG1 148
KEY_PROG2 149
KEY_PROG3 202
KEY_PROG4 203
KEY_PROGRAM 0x16a
KEY_PROPS 130
KEY_PVR 0x16e
KEY_Q 16
KEY_QUESTION 214
KEY_R 19
KEY_RADIO 0x181
KEY_RECORD 167
KEY_RED 0x18e
KEY_REDO 182
KEY_REFRESH 173
KEY_REPLY 232
KEY_RESERVED 0
KEY_RESTART 0x198
KEY_REWIND 168
KEY_RFKILL 247
KEY_RIGHT 106
KEY_RIGHTALT 100
KEY_RIGHTBRACE 27
KEY_RIGHTCTRL 97
KEY_RIGHTMETA 126
KEY_RIGHTSHIFT 54
KEY_RO 89
KEY_S 31
KEY_SAT 0x17d
KEY_SAT2 0x17e
KEY_SAVE 234
KEY_SCALE 120
KEY_SCREEN 0x177
KEY_SCROLLDOWN 178
KEY_SCROLLLOCK 70
KEY_SCROLLUP 177
KEY_SEARCH 217
KEY_SELECT 0x161
KEY_SEMICOLON 39
KEY_SEND 231
KEY_SENDFILE 145
KEY_SETUP 141
KEY_SHOP 221
KEY_SHUFFLE 0x19a
KEY_SLASH 53
KEY_SLEEP 142
KEY_SLOW 0x199
KEY_SOUND 213
KEY_SPACE 57
KEY_SPELLCHECK 0x1b0
KEY_SPORT 220
KEY_SPREADSHEET 0x1a7
KEY_STOP 128
KEY_STOPCD 166
KEY_SUBTITLE 0x172
KEY_SUSPEND 205
KEY_SWITCHVIDEOMODE 227
KEY_SYSRQ 99
KEY_T 20
KEY_TAB 15
KEY_TAPE 0x180
KEY_TEEN 0x19e
KEY_TEXT 0x184
KEY_TIME 0x167
KEY_TITLE 0x171
KEY_TUNER 0x182
KEY_TV 0x179
KEY_TV2 0x17a
KEY_TWEN 0x19f
KEY_U 22
KEY_UNDO 131
KEY_UNKNOWN 240
KEY_UP 103
KEY_UWB 239
KEY_V 47
KEY_VCR 0x17b
KEY_VCR2 0x17c
KEY_VENDOR 0x168
KEY_VIDEO 0x189
KEY_VIDEO_NEXT 241
KEY_VIDEOPHONE 0x1a0
KEY_VIDEO_PREV 242
KEY_VOICEMAIL 0x1ac
KEY_VOLUMEDOWN 114
KEY_VOLUMEUP 115
KEY_W 17
KEY_WAKEUP 143
KEY_WIMAX 246
KEY_WLAN 238
KEY_WORDPROCESSOR 0x1a5
KEY_WWW 150
KEY_X 45
KEY_XFER 147
KEY_Y 21
KEY_YELLOW 0x190
KEY_YEN 124
KEY_Z 44
KEY_ZENKAKUHANKAKU 85
KEY_ZOOM 0x174
KEY_ZOOMIN 0x1a2
KEY_ZOOMOUT 0x1a3
KEY_ZOOMRESET 0x1a4
BTN_0 0x100
BTN_1 0x101
BTN_2 0x102
BTN_3 0x103
BTN_4 0x104
BTN_5 0x105
BTN_6 0x106
BTN_7 0x107
BTN_8 0x108
BTN_9 0x109
BTN_A 0x130
BTN_B 0x131
BTN_BACK 0x116
BTN_BASE 0x126
BTN_BASE2 0x127
BTN_BASE3 0x128
BTN_BASE4 0x129
BTN_BASE5 0x12a
BTN_BASE6 0x12b
BTN_C 0x132
BTN_DEAD 0x12f
BTN_DIGI 0x140
BTN_EXTRA 0x114
BTN_FORWARD 0x115
BTN_GAMEPAD 0x130
BTN_GEAR_DOWN 0x150
BTN_GEAR_UP 0x151
BTN_JOYSTICK 0x120
BTN_LEFT 0x110
BTN_MIDDLE 0x112
BTN_MISC 0x100
BTN_MODE 0x13c
BTN_MOUSE 0x110
BTN_PINKIE 0x125
BTN_RIGHT 0x111
BTN_SELECT 0x13a
BTN_SIDE 0x113
BTN_START 0x13b
BTN_STYLUS 0x14b
BTN_STYLUS2 0x14c
BTN_TASK 0x117
BTN_THUMB 0x121
BTN_THUMB2 0x122
BTN_THUMBL 0x13d
BTN_THUMBR 0x13e
BTN_TL 0x136
BTN_TL2 0x138
BTN_TOOL_AIRBRUSH 0x144
BTN_TOOL_BRUSH 0x142
BTN_TOOL_DOUBLETAP 0x14d
BTN_TOOL_FINGER 0x145
BTN_TOOL_LENS 0x147
BTN_TOOL_MOUSE 0x146
BTN_TOOL_PEN 0x140
BTN_TOOL_PENCIL 0x143
BTN_TOOL_QUADTAP 0x14f
BTN_TOOL_RUBBER 0x141
BTN_TOOL_TRIPLETAP 0x14e
BTN_TOP 0x123
BTN_TOP2 0x124
BTN_TOUCH 0x14a
BTN_TR 0x137
BTN_TR2 0x139
BTN_TRIGGER 0x120
BTN_WHEEL 0x150
BTN_X 0x133
BTN_Y 0x134
BTN_Z 0x135
end codes
end remote

# generated by devinput.sh (obsolete 32 bit version)
begin remote
        name            devinput
        bits            16
        eps             30
        aeps            100
        pre_data_bits   16
        pre_data        0x8001
        gap             132799
        toggle_bit      0

begin codes
KEY_0 11
KEY_102ND 86
KEY_1 2
KEY_2 3
KEY_3 4
KEY_4 5
KEY_5 6
KEY_6 7
KEY_7 8
KEY_8 9
KEY_9 10
KEY_A 30
KEY_AB 0x196
KEY_ADDRESSBOOK 0x1ad
KEY_AGAIN 129
KEY_ALTERASE 222
KEY_ANGLE 0x173
KEY_APOSTROPHE 40
KEY_ARCHIVE 0x169
KEY_AUDIO 0x188
KEY_AUX 0x186
KEY_B 48
KEY_BACK 158
KEY_BACKSLASH 43
KEY_BACKSPACE 14
KEY_BASSBOOST 209
KEY_BATTERY 236
KEY_BLUE 0x191
KEY_BLUETOOTH 237
KEY_BOOKMARKS 156
KEY_BREAK 0x19b
KEY_BRIGHTNESS_CYCLE 243
KEY_BRIGHTNESSDOWN 224
KEY_BRIGHTNESSUP 225
KEY_BRIGHTNESS_ZERO 244
KEY_BRL_DOT10 0x1fa
KEY_BRL_DOT1 0x1f1
KEY_BRL_DOT2 0x1f2
KEY_BRL_DOT3 0x1f3
KEY_BRL_DOT4 0x1f4
KEY_BRL_DOT5 0x1f5
KEY_BRL_DOT6 0x1f6
KEY_BRL_DOT7 0x1f7
KEY_BRL_DOT8 0x1f8
KEY_BRL_DOT9 0x1f9
KEY_C 46
KEY_CALC 140
KEY_CALENDAR 0x18d
KEY_CAMERA 212
KEY_CAMERA_FOCUS 0x210
KEY_CANCEL 223
KEY_CAPSLOCK 58
KEY_CD 0x17f
KEY_CHANNEL 0x16b
KEY_CHANNELDOWN 0x193
KEY_CHANNELUP 0x192
KEY_CHAT 216
KEY_CLEAR 0x163
KEY_CLOSE 206
KEY_CLOSECD 160
KEY_COFFEE 152
KEY_COMMA 51
KEY_COMPOSE 127
KEY_COMPUTER 157
KEY_CONFIG 171
KEY_CONNECT 218
KEY_CONTEXT_MENU 0x1b6
KEY_COPY 133
KEY_CUT 137
KEY_CYCLEWINDOWS 154
KEY_D 32
KEY_DASHBOARD 204
KEY_DATABASE 0x1aa
KEY_DEL_EOL 0x1c0
KEY_DEL_EOS 0x1c1
KEY_DELETE 111
KEY_DELETEFILE 146
KEY_DEL_LINE 0x1c3
KEY_DIGITS 0x19d
KEY_DIRECTION 153
KEY_DIRECTORY 0x18a
KEY_DISPLAY_OFF 245
KEY_DISPLAYTOGGLE 0x1af
KEY_DOCUMENTS 235
KEY_DOLLAR 0x1b2
KEY_DOT 52
KEY_DOWN 108
KEY_DVD 0x185
KEY_E 18
KEY_EDIT 176
KEY_EDITOR 0x1a6
KEY_EJECTCD 161
KEY_EJECTCLOSECD 162
KEY_EMAIL 215
KEY_END 107
KEY_ENTER 28
KEY_EPG 0x16d
KEY_EQUAL 13
KEY_ESC 1
KEY_EURO 0x1b3
KEY_EXIT 174
KEY_F10 68
KEY_F11 87
KEY_F12 88
KEY_F13 183
KEY_F14 184
KEY_F15 185
KEY_F1 59
KEY_F16 186
KEY_F17 187
KEY_F18 188
KEY_F19 189
KEY_F20 190
KEY_F21 191
KEY_F22 192
KEY_F23 193
KEY_F24 194
KEY_F2 60
KEY_F 33
KEY_F3 61
KEY_F4 62
KEY_F5 63
KEY_F6 64
KEY_F7 65
KEY_F8 66
KEY_F9 67
KEY_FASTFORWARD 208
KEY_FAVORITES 0x16c
KEY_FILE 144
KEY_FINANCE 219
KEY_FIND 136
KEY_FIRST 0x194
KEY_FN 0x1d0
KEY_FN_1 0x1de
KEY_FN_2 0x1df
KEY_FN_B 0x1e4
KEY_FN_D 0x1e0
KEY_FN_E 0x1e1
KEY_FN_ESC 0x1d1
KEY_FN_F 0x1e2
KEY_FN_F10 0x1db
KEY_FN_F1 0x1d2
KEY_FN_F11 0x1dc
KEY_FN_F12 0x1dd
KEY_FN_F2 0x1d3
KEY_FN_F3 0x1d4
KEY_FN_F4 0x1d5
KEY_FN_F5 0x1d6
KEY_FN_F6 0x1d7
KEY_FN_F7 0x1d8
KEY_FN_F8 0x1d9
KEY_FN_F9 0x1da
KEY_FN_S 0x1e3
KEY_FORWARD 159
KEY_FORWARDMAIL 233
KEY_FRAMEBACK 0x1b4
KEY_FRAMEFORWARD 0x1b5
KEY_FRONT 132
KEY_G 34
KEY_GAMES 0x1a1
KEY_GOTO 0x162
KEY_GRAPHICSEDITOR 0x1a8
KEY_GRAVE 41
KEY_GREEN 0x18f
KEY_H 35
KEY_HANGEUL 122
KEY_HANJA 123
KEY_HELP 138
KEY_HENKAN 92
KEY_HIRAGANA 91
KEY_HOME 102
KEY_HOMEPAGE 172
KEY_HP 211
KEY_I 23
KEY_INFO 0x166
KEY_INSERT 110
KEY_INS_LINE 0x1c2
KEY_ISO 170
KEY_J 36
KEY_K 37
KEY_KATAKANA 90
KEY_KATAKANAHIRAGANA 93
KEY_KBDILLUMDOWN 229
KEY_KBDILLUMTOGGLE 228
KEY_KBDILLUMUP 230
KEY_KEYBOARD 0x176
KEY_KP0 82
KEY_KP1 79
KEY_KP2 80
KEY_KP3 81
KEY_KP4 75
KEY_KP5 76
KEY_KP6 77
KEY_KP7 71
KEY_KP8 72
KEY_KP9 73
KEY_KPASTERISK 55
KEY_KPCOMMA 121
KEY_KPDOT 83
KEY_KPENTER 96
KEY_KPEQUAL 117
KEY_KPJPCOMMA 95
KEY_KPLEFTPAREN 179
KEY_KPMINUS 74
KEY_KPPLUS 78
KEY_KPPLUSMINUS 118
KEY_KPRIGHTPAREN 180
KEY_KPSLASH 98
KEY_L 38
KEY_LANGUAGE 0x170
KEY_LAST 0x195
KEY_LEFT 105
KEY_LEFTALT 56
KEY_LEFTBRACE 26
KEY_LEFTCTRL 29
KEY_LEFTMETA 125
KEY_LEFTSHIFT 42
KEY_LINEFEED 101
KEY_LIST 0x18b
KEY_LOGOFF 0x1b1
KEY_M 50
KEY_MACRO 112
KEY_MAIL 155
KEY_MAX 0x2ff
KEY_MEDIA 226
KEY_MEDIA_REPEAT 0x1b7
KEY_MEMO 0x18c
KEY_MENU 139
KEY_MESSENGER 0x1ae
KEY_MHP 0x16f
KEY_MINUS 12
KEY_MODE 0x175
KEY_MOVE 175
KEY_MP3 0x187
KEY_MSDOS 151
KEY_MUHENKAN 94
KEY_MUTE 113
KEY_N 49
KEY_NEW 181
KEY_NEWS 0x1ab
KEY_NEXT 0x197
KEY_NEXTSONG 163
KEY_NUMERIC_0 0x200
KEY_NUMERIC_1 0x201
KEY_NUMERIC_2 0x202
KEY_NUMERIC_3 0x203
KEY_NUMERIC_4 0x204
KEY_NUMERIC_5 0x205
KEY_NUMERIC_6 0x206
KEY_NUMERIC_7 0x207
KEY_NUMERIC_8 0x208
KEY_NUMERIC_9 0x209
KEY_NUMERIC_POUND 0x20b
KEY_NUMERIC_STAR 0x20a
KEY_NUMLOCK 69
KEY_O 24
KEY_OK 0x160
KEY_OPEN 134
KEY_OPTION 0x165
KEY_P 25
KEY_PAGEDOWN 109
KEY_PAGEUP 104
KEY_PASTE 135
KEY_PAUSE 119
KEY_PAUSECD 201
KEY_PC 0x178
KEY_PHONE 169
KEY_PLAY 207
KEY_PLAYCD 200
KEY_PLAYER 0x183
KEY_PLAYPAUSE 164
KEY_POWER 116
KEY_POWER2 0x164
KEY_PRESENTATION 0x1a9
KEY_PREVIOUS 0x19c
KEY_PREVIOUSSONG 165
KEY_PRINT 210
KEY_PROG1 148
KEY_PROG2 149
KEY_PROG3 202
KEY_PROG4 203
KEY_PROGRAM 0x16a
KEY_PROPS 130
KEY_PVR 0x16e
KEY_Q 16
KEY_QUESTION 214
KEY_R 19
KEY_RADIO 0x181
KEY_RECORD 167
KEY_RED 0x18e
KEY_REDO 182
KEY_REFRESH 173
KEY_REPLY 232
KEY_RESERVED 0
KEY_RESTART 0x198
KEY_REWIND 168
KEY_RFKILL 247
KEY_RIGHT 106
KEY_RIGHTALT 100
KEY_RIGHTBRACE 27
KEY_RIGHTCTRL 97
KEY_RIGHTMETA 126
KEY_RIGHTSHIFT 54
KEY_RO 89
KEY_S 31
KEY_SAT 0x17d
KEY_SAT2 0x17e
KEY_SAVE 234
KEY_SCALE 120
KEY_SCREEN 0x177
KEY_SCROLLDOWN 178
KEY_SCROLLLOCK 70
KEY_SCROLLUP 177
KEY_SEARCH 217
KEY_SELECT 0x161
KEY_SEMICOLON 39
KEY_SEND 231
KEY_SENDFILE 145
KEY_SETUP 141
KEY_SHOP 221
KEY_SHUFFLE 0x19a
KEY_SLASH 53
KEY_SLEEP 142
KEY_SLOW 0x199
KEY_SOUND 213
KEY_SPACE 57
KEY_SPELLCHECK 0x1b0
KEY_SPORT 220
KEY_SPREADSHEET 0x1a7
KEY_STOP 128
KEY_STOPCD 166
KEY_SUBTITLE 0x172
KEY_SUSPEND 205
KEY_SWITCHVIDEOMODE 227
KEY_SYSRQ 99
KEY_T 20
KEY_TAB 15
KEY_TAPE 0x180
KEY_TEEN 0x19e
KEY_TEXT 0x184
KEY_TIME 0x167
KEY_TITLE 0x171
KEY_TUNER 0x182
KEY_TV 0x179
KEY_TV2 0x17a
KEY_TWEN 0x19f
KEY_U 22
KEY_UNDO 131
KEY_UNKNOWN 240
KEY_UP 103
KEY_UWB 239
KEY_V 47
KEY_VCR 0x17b
KEY_VCR2 0x17c
KEY_VENDOR 0x168
KEY_VIDEO 0x189
KEY_VIDEO_NEXT 241
KEY_VIDEOPHONE 0x1a0
KEY_VIDEO_PREV 242
KEY_VOICEMAIL 0x1ac
KEY_VOLUMEDOWN 114
KEY_VOLUMEUP 115
KEY_W 17
KEY_WAKEUP 143
KEY_WIMAX 246
KEY_WLAN 238
KEY_WORDPROCESSOR 0x1a5
KEY_WWW 150
KEY_X 45
KEY_XFER 147
KEY_Y 21
KEY_YELLOW 0x190
KEY_YEN 124
KEY_Z 44
KEY_ZENKAKUHANKAKU 85
KEY_ZOOM 0x174
KEY_ZOOMIN 0x1a2
KEY_ZOOMOUT 0x1a3
KEY_ZOOMRESET 0x1a4
BTN_0 0x100
BTN_1 0x101
BTN_2 0x102
BTN_3 0x103
BTN_4 0x104
BTN_5 0x105
BTN_6 0x106
BTN_7 0x107
BTN_8 0x108
BTN_9 0x109
BTN_A 0x130
BTN_B 0x131
BTN_BACK 0x116
BTN_BASE 0x126
BTN_BASE2 0x127
BTN_BASE3 0x128
BTN_BASE4 0x129
BTN_BASE5 0x12a
BTN_BASE6 0x12b
BTN_C 0x132
BTN_DEAD 0x12f
BTN_DIGI 0x140
BTN_EXTRA 0x114
BTN_FORWARD 0x115
BTN_GAMEPAD 0x130
BTN_GEAR_DOWN 0x150
BTN_GEAR_UP 0x151
BTN_JOYSTICK 0x120
BTN_LEFT 0x110
BTN_MIDDLE 0x112
BTN_MISC 0x100
BTN_MODE 0x13c
BTN_MOUSE 0x110
BTN_PINKIE 0x125
BTN_RIGHT 0x111
BTN_SELECT 0x13a
BTN_SIDE 0x113
BTN_START 0x13b
BTN_STYLUS 0x14b
BTN_STYLUS2 0x14c
BTN_TASK 0x117
BTN_THUMB 0x121
BTN_THUMB2 0x122
BTN_THUMBL 0x13d
BTN_THUMBR 0x13e
BTN_TL 0x136
BTN_TL2 0x138
BTN_TOOL_AIRBRUSH 0x144
BTN_TOOL_BRUSH 0x142
BTN_TOOL_DOUBLETAP 0x14d
BTN_TOOL_FINGER 0x145
BTN_TOOL_LENS 0x147
BTN_TOOL_MOUSE 0x146
BTN_TOOL_PEN 0x140
BTN_TOOL_PENCIL 0x143
BTN_TOOL_QUADTAP 0x14f
BTN_TOOL_RUBBER 0x141
BTN_TOOL_TRIPLETAP 0x14e
BTN_TOP 0x123
BTN_TOP2 0x124
BTN_TOUCH 0x14a
BTN_TR 0x137
BTN_TR2 0x139
BTN_TRIGGER 0x120
BTN_WHEEL 0x150
BTN_X 0x133
BTN_Y 0x134
BTN_Z 0x135
end codes
end remote
#############################################################