Archive

Posts Tagged ‘bluetooth’

PS3 Bluetooth Remote with XBMC on Linux

January 14th, 2013 No comments

SONY DSC
 
 
 
 
 
I used my PS3 bluetooth remote for a while to control my XBMC. But not all keys were mapped because by default the device is mapped as a HID device with only several buttons mapped to actual keys. I found this great howto to be able to use and program all buttons on the remote. Follow the basic steps there to build and install the bdremote driver.

I needed to modify several scripts a bit and added an extra script to be able to log the battery level. (And maybe in the future send some sort of notification when it is almost empty)
 
 
 
 
 
I modified the rc.local script a bit:
(Make sure you set your ID correctly, eg: 00:00:00:00:00:00)

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
 
service bluetooth stop
sleep 1
/usr/local/bin/bdremoteng -a 00:00:00:00:00:00 -p 8888 -t 600 -b /home/yourusername/scripts/battery_change.sh &
sleep 1
mkdir /var/run/lirc
/usr/sbin/lircd -H null --connect 127.0.0.1:8888
sleep 1
service bluetooth start
ln -s /var/run/lirc/lircd /dev/lircd
exit 0

Used the default Lircmap.xml (~/.xbmc/userdata/Lircmap.xml):

<lircmap>
  <remote device="SonyBDRemote">
        <obc101>1</obc101>
        <obc102>2</obc102>
        <obc103>3</obc103>
        <obc104>4</obc104>
        <obc105>5</obc105>
        <obc106>6</obc106>
        <obc107>7</obc107>
        <obc108>8</obc108>
        <obc109>9</obc109>
        <obc110>0</obc110>
        <obc111>enter</obc111>
        <obc112>up</obc112>
        <obc113>right</obc113>
        <obc114>down</obc114>
        <obc115>left</obc115>
        <obc116>circle</obc116>
        <obc117>stop</obc117>
        <obc118>pause</obc118>
        <obc119>ps</obc119>
        <obc120>prev</obc120>
        <obc121>next</obc121>
        <obc122>play</obc122>
        <obc123>scanrev</obc123>
        <obc124>scanfwd</obc124>
        <obc125>cross</obc125>
        <obc126>eject</obc126>
        <obc127>select</obc127>
        <obc128>l3</obc128>
        <obc129>r3</obc129>
        <obc130>start</obc130>
        <obc131>l2</obc131>
        <obc132>r2</obc132>
        <obc133>l1</obc133>
        <obc134>r1</obc134>
        <obc135>triangle</obc135>
        <obc136>topmenu</obc136>
        <obc137>time</obc137>
        <obc138>square</obc138>
        <obc139>return</obc139>
        <obc140>clear</obc140>
        <obc141>popup</obc141>
        <obc142>steprev</obc142>
        <obc143>stepfwd</obc143>
        <obc144>subtitle</obc144>
        <obc145>audio</obc145>
        <obc146>angle</obc146>
        <obc147>display</obc147>
        <obc148>blue</obc148>
        <obc149>red</obc149>
        <obc150>green</obc150>
        <obc151>yellow</obc151>
  </remote>
</lircmap>

And I modified the keymap (~/.xbmc/userdata/keymaps/remote.xml) a bit:

<keymap>
 
  <global>
    <universalremote>
        <obc101>Number1</obc101>
        <obc102>Number2</obc102>
        <obc103>Number3</obc103>
        <obc104>Number4</obc104>
        <obc105>Number5</obc105>
        <obc106>Number6</obc106>
        <obc107>Number7</obc107>
        <obc108>Number8</obc108>
        <obc109>Number9</obc109>
        <obc110>Number0</obc110>
        <obc111>Select</obc111>
        <obc112>Up</obc112>
        <obc113>Right</obc113>
        <obc114>Down</obc114>
        <obc115>Left</obc115>
        <obc116>PreviousMenu</obc116>
        <obc117>Stop</obc117>
        <obc118>Pause</obc118>
        <obc119>XBMC.ActivateWindow(ShutDownMenu)</obc119>
        <obc120>SkipPrevious</obc120>
        <obc121>SkipNext</obc121>
        <obc122>Play</obc122>
        <obc123>Rewind</obc123>
        <obc124>FastForward</obc124>
        <obc125>Info</obc125>
        <obc126>XBMC.EjectTray()</obc126>
        <obc127>Playlist</obc127>
        <obc128>XBMC.updatelibrary(video)</obc128>
        <obc129>XBMC.updatelibrary(music)</obc129>
        <obc130>Queue</obc130>
        <obc131>VolumeDown</obc131>
        <obc132>VolumeUp</obc132>
        <obc133>PageUp</obc133>
        <obc134>PageDown</obc134>
        <obc135>ContextMenu</obc135>
        <obc136>ShowVideoMenu</obc136>
        <obc137>XBMC.ActivateWindow(settings)</obc137>
        <obc139>PreviousMenu</obc139>
        <obc140>BackSpace</obc140>
        <obc141>ContextMenu</obc141>
        <obc142>StepBack</obc142>
        <obc143>StepForward</obc143>
        <obc144>xbmc.activatewindow(pictures)</obc144>
        <obc145>xbmc.activatewindow(music)</obc145>
        <obc146>xbmc.activatewindow(video)</obc146>
        <obc147>FullScreen</obc147>
        <obc148>XBMC.ActivateWindow(favourites)</obc148>
        <obc149>ToggleWatched</obc149>
        <obc150>DecreaseRating</obc150>
        <obc151>IncreaseRating</obc151>
    </universalremote>
  </global>
 
  <fullscreenvideo>
    <universalremote>
        <obc135>XBMC.ActivateWindow(videoosd)</obc135>
        <obc138>CodecInfo</obc138>
        <obc111>AspectRatio</obc111>
        <obc116>FullScreen</obc116>
        <obc139>FullScreen</obc139>
        <obc144>NextSubtitle</obc144>
        <obc137>ShowTime</obc137>
        <obc145>AudioNextLanguage</obc145>
        <obc146>XBMC.ActivateWindow(OSDVideoSettings)</obc146>
        <obc151>XBMC.ActivateWindow(VideoBookmarks)</obc151>
        <obc112>BigStepForward</obc112>
        <obc113>StepForward</obc113>
        <obc114>BigStepBack</obc114>
        <obc115>StepBack</obc115>
    </universalremote>
  </fullscreenvideo>
 
  <visualisation>
    <universalremote>
        <obc135>XBMC.ActivateWindow(musicosd)</obc135>
        <obc138>CodecInfo</obc138>
        <obc139>FullScreen</obc139>
        <obc116>FullScreen</obc116>
        <obc137>Info</obc137>
        <obc145>XBMC.ActivateWindow(OSDAudioSettings)</obc145>
        <obc146>XBMC.ActivateWindow(visualisationsettings)</obc146>
        <obc144>XBMC.ActivateWindow(visualisationpresetlist)</obc144>
    </universalremote>
  </visualisation>
 
  <videoosd>
    <universalremote>
        <obc135>PreviousMenu</obc135>
        <obc137>ShowTime</obc137>
        <obc144>ShowSubtitles</obc144>
        <obc145>XBMC.ActivateWindow(OSDAudioSettings)</obc145>
        <obc146>XBMC.ActivateWindow(OSDVideoSettings)</obc146>
        <obc151>XBMC.ActivateWindow(VideoBookmarks)</obc151>
    </universalremote>
  </videoosd>
 
  <musicosd>
    <universalremote>
        <obc135>PreviousMenu</obc135>
        <obc137>Info</obc137>
        <obc145>XBMC.ActivateWindow(OSDAudioSettings)</obc145>
        <obc146>XBMC.ActivateWindow(visualisationsettings)</obc146>
        <obc144>XBMC.ActivateWindow(visualisationpresetlist)</obc144>
    </universalremote>
  </musicosd>
 
  <OSDVideoSettings>
    <universalremote>
        <obc137>PreviousMenu</obc137>
        <obc144>PreviousMenu</obc144>
        <obc145>PreviousMenu</obc145>
        <obc146>PreviousMenu</obc146>
    </universalremote>
  </OSDVideoSettings>
 
  <VideoBookmarks>
    <universalremote>
        <obc137>PreviousMenu</obc137>
        <obc144>PreviousMenu</obc144>
        <obc145>PreviousMenu</obc145>
        <obc146>PreviousMenu</obc146>
        <obc151>PreviousMenu</obc151>
    </universalremote>
  </VideoBookmarks>
 
  <OSDAudioSettings>
    <universalremote>
        <obc137>PreviousMenu</obc137>
        <obc144>PreviousMenu</obc144>
        <obc145>PreviousMenu</obc145>
        <obc146>PreviousMenu</obc146>
    </universalremote>
  </OSDAudioSettings>
 
  <visualisationsettings>
    <universalremote>
        <obc137>PreviousMenu</obc137>
        <obc144>PreviousMenu</obc144>
        <obc145>PreviousMenu</obc145>
        <obc146>PreviousMenu</obc146>
    </universalremote>
  </visualisationsettings>
 
  <visualisationpresetlist>
    <universalremote>
        <obc137>PreviousMenu</obc137>
        <obc144>PreviousMenu</obc144>
        <obc145>PreviousMenu</obc145>
        <obc146>PreviousMenu</obc146>
    </universalremote>
  </visualisationpresetlist>
 
  <favourites>
    <universalremote>
        <obc137>PreviousMenu</obc137>
        <obc144>PreviousMenu</obc144>
        <obc145>PreviousMenu</obc145>
        <obc146>PreviousMenu</obc146>
        <obc148>PreviousMenu</obc148>
    </universalremote>
  </favourites>
 
  <videolibrary>
    <universalremote>
        <obc139>ParentDir</obc139>
        <obc138>ReplaceWindow(videofiles)</obc138>
    </universalremote>
  </videolibrary>
 
  <videofiles>
    <universalremote>
        <obc139>ParentDir</obc139>
        <obc138>ReplaceWindow(videolibrary)</obc138>
    </universalremote>
  </videofiles>
 
  <musiclibrary>
    <universalremote>
        <obc139>ParentDir</obc139>
        <obc138>ReplaceWindow(musicfiles)</obc138>
        <!--
        <obc102>FilterSMS2</obc102>
        <obc103>FilterSMS3</obc103>
        <obc104>FilterSMS4</obc104>
        <obc105>FilterSMS5</obc105>
        <obc106>FilterSMS6</obc106>
        <obc107>FilterSMS7</obc107>
        <obc108>FilterSMS8</obc108>
        <obc109>FilterSMS9</obc109>
        -->
    </universalremote>
  </musiclibrary>
 
  <musicfiles>
    <universalremote>
        <obc139>ParentDir</obc139>
        <obc138>ReplaceWindow(musiclibrary)</obc138>
        <!-- <obc102>FilterSMS2</obc102>
        <obc103>FilterSMS3</obc103>
        <obc104>FilterSMS4</obc104>
        <obc105>FilterSMS5</obc105>
        <obc106>FilterSMS6</obc106>
        <obc107>FilterSMS7</obc107>
        <obc108>FilterSMS8</obc108>
        <obc109>FilterSMS9</obc109>
        -->
    </universalremote>
  </musicfiles>
 
  <fullscreeninfo>
    <universalremote>
        <obc125>PreviousMenu</obc125>
        <obc137>PreviousMenu</obc137>
    </universalremote>
  </fullscreeninfo>
 
  <filemanager>
    <universalremote>
        <obc139>ParentDir</obc139>
        <!-- <obc102>FilterSMS2</obc102>
        <obc103>FilterSMS3</obc103>
        <obc104>FilterSMS4</obc104>
        <obc105>FilterSMS5</obc105>
        <obc106>FilterSMS6</obc106>
        <obc107>FilterSMS7</obc107>
        <obc108>FilterSMS8</obc108>
        <obc109>FilterSMS9</obc109>
        -->
    </universalremote>
  </filemanager>
 
  <pictures>
    <universalremote>
        <obc139>ParentDir</obc139>
    </universalremote>
  </pictures>
 
  <slideshow>
    <universalremote>
        <obc101>ZoomLevel1</obc101>
        <obc102>ZoomLevel2</obc102>
        <obc103>ZoomLevel3</obc103>
        <obc104>ZoomLevel4</obc104>
        <obc105>ZoomLevel5</obc105>
        <obc106>ZoomLevel6</obc106>
        <obc107>ZoomLevel7</obc107>
        <obc108>ZoomLevel8</obc108>
        <obc109>ZoomLevel9</obc109>
        <obc110>ZoomNormal</obc110>
    </universalremote>
  </slideshow>
 
  <virtualkeyboard>
      <universalremote>
        <obc139>BackSpace</obc139>
    </universalremote>
  </virtualkeyboard>
 
  <shutdownmenu>
    <universalremote>
        <obc119>PreviousMenu</obc119>
    </universalremote>
  </shutdownmenu>
 
  <home>
    <universalremote>
        <obc116>FullScreen</obc116>
        <obc139>FullScreen</obc139>
    </universalremote>
  </home>
 
</keymap>

And the battery_change.sh script:

#!/bin/sh
echo "Current battery level is: $2" > /home/yourusername/battery_level.txt

Happy XBMC-ing! 🙂

Categories: Linux Tags: , , , , ,