Difference between revisions of "HDAPS"

From ThinkWiki
Jump to: navigation, search
(Other)
(Interesting links related to this project)
 
(121 intermediate revisions by 45 users not shown)
Line 3: Line 3:
 
|style="vertical-align:top" |
 
|style="vertical-align:top" |
 
=== HDAPS - IBM Active Protection System Linux Driver ===
 
=== HDAPS - IBM Active Protection System Linux Driver ===
This is the Linux driver for monitoring the acceleratometer known as [[Active Protection System|IBM Active Protection System]].
+
This is the Linux driver for monitoring the accelerometer known as [[Active Protection System|IBM Active Protection System]].
  
 
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.
 
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.
 +
 +
{{WARN|There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by [[tp_smapi]].  '''Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.'''}}
 
|}
 
|}
  
Line 15: Line 17:
 
*[http://hdaps.sourceforge.net/ Project Homepage]
 
*[http://hdaps.sourceforge.net/ Project Homepage]
 
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.
 
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.
*The driver is now in the mainline (2.6.14). (use as modul if you want use tp_smapi, Gentoo and X41)
+
*The driver is now in the mainline (2.6.14).
 +
*The [[tp_smapi]] package contains some patches to this driver. These are necessary for some recent models, and recommended for all.
  
 
=== Status ===
 
=== Status ===
A driver is included in recent Linux kernels and is actively maintained.  
+
A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi (which provides its own hdaps module).
  
 
=== How to install the driver ===
 
=== How to install the driver ===
If you are using a version of the Linux kernel < 2.6.14, please upgrade. I struggled long and hard to get the driver working with an old version of the kernel, and it was a mess. I gave up, upgraded my kernel, and one recompile later, HDAPS was working.
+
Recent Linux kernels include the <tt>hdaps</tt> driver. However, the driver in the mainline Linux kernel has two problems with recent models:
 +
* It doesn't whitelist them (you have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a line like <tt>HDAPS_DMI_MATCH_LENOVO("ThinkPad T60")</tt>)
 +
* It doesn't work reliably, e.g., it may read out constant values (0,0). See [http://sourceforge.net/mailarchive/message.php?msg_id=15350314 here].
 +
 
 +
To solve both problems, install the modified hdaps that is bundled with [[tp_smapi]].
  
 
=== Harddisk Protection ===
 
=== Harddisk Protection ===
Line 29: Line 36:
  
 
=== Input device support ===
 
=== Input device support ===
The hdaps driver in the lastest kernels (2.6.14 and later?) also exports a joystick type input device, which can be used by games.
+
In more recent versions of the Linux kernel,bVy6hxT the hdaps exports event devices with the accelerometer data.  These devices can be used as-is by some programs (e.g. hdapsd), but for most they must be handled by the additional kernel module <code>joydev</code>.
 +
 
 +
When both modules are loaded, joydev will provide standard joystick device emulation for hdaps (standard hdaps exports just one joystick device.  enhanced hdaps from tp_smapi will export two due to issues still unsolved on joydev, but the second one must not be used as a joystick).
 +
 
 +
{{WARN|Letting a program bind to these joystick devices can cause surprising results if you are not aware of it. e.g.: mplayer can act quite strangely.  Also, letting a program bind to the second joystick device from enhanced HDAPS is guaranteed to be trouble}}
 +
 
 +
Udev can be used to create device nodes in /dev for use by user space programs that access the joystick, and to set appropriate permissions.
 +
 
 +
In order for non-root users to access these device files, their permissions must be tweaked a little through an appropriate udev rule and corresponding "joy" group.
 +
 
 +
{{cmdroot|addgroup joy}}<br>
 +
{{cmdroot|adduser <you> joy}}<br>
 +
<code># echo 'SUBSYSTEM=="input", KERNEL=="js*", MODE="0660", GROUP="joy"' >> /etc/udev/hdaps-joy.rules</code><br>
 +
{{cmdroot|ln -s ../hdaps-joy.rules /etc/udev/rules.d/z60_hdaps-joy.rules}}<br>
 +
 
 +
Programs you can use to test and calibrate the device files include <code>jscalibrator</code> (gui) and <code>jstest</code>/<code>jscal</code> (cli) packaged together (at least in Debian) simply as "joystick".
  
 
=== Applications ===
 
=== Applications ===
 
====Disk head parking====
 
====Disk head parking====
* Kernel patch (apply using 'patch -p1 -l < hdaps_xx.patch')
+
You will need the kernel patch below and the hdapsd userspace daemon. The GUI monitoring is optional.
 +
 
 +
See [[How to protect the harddisk through APS]] for more information.
 +
 
 +
===== Kernel patch =====
 +
Due to significant changes in the way the libata module which handles disk i/o, applying any of the currently available patches to kernel 2.6.24 will intermittently cause system hangs when the queue is frozen (i.e., the heads are parked). It is recommended either that you stay at kernel [http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.17.tar.bz2 2.6.23] or do without disk protection in 2.6.24 until the kinks have been worked out. There has been significant work on the part of [http://lkml.org/lkml/2008/2/25/478 Elias Oltmanns], author of the more recent patches, to get this worked out and eventually get shock protection built into the mainline kernel.
 +
 
 +
Below are some links to patches for various Linux kernel versions. As noted above, your mileage may vary with the 2.6.24-rc3 patch as it was after this release candidate that things stopped working nicely.
 +
{{HINT|To apply a patch, change to the root directory of the kernel tree and run<br><code>patch -p1 -l < hdaps_xx.patch</code>}}
 +
* New interface (requires hdapsd dated 2008-10-04 or newer)
 +
** In mainline kernel 2.6.28
 +
** [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1393 disk-protect patch for kernel 2.6.27.2]
 +
* Old interface
 +
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1324/raw disk-protect patch for kernel 2.6.26]
 +
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1297/raw disk-protect patch for kernel 2.6.26-rc9]
 +
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1245/raw disk-protect patch for kernel 2.6.25-rc9] &mdash; may cause system locks (same as patch for 2.6.24-rc3). Apply [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2008-February/042226.html this fix] before.
 +
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1094 disk-protect patch for kernel 2.6.24-rc3] &mdash; may cause system locks (see [http://marc.info/?l=linux-thinkpad&m=120259594519907 here], [http://marc.info/?l=linux-thinkpad&m=120259929023300 here] and try [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2008-February/042226.html this fix])
 +
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1092 disk-protect patch for 2.6.23.8] + [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1113 error check fix]
 +
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1077 disk-protect patch for 2.6.22.9 and 2.6.23-rc9]
 +
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/993 disk-protect patch for 2.6.20-rc6]
 +
* Ancient interface
 +
**[http://www.nabble.com/attachment/9047418/0/hdaps_protect-2.6.20.patch.bz2 Latest sata/ide disk protection patch for 2.6.20]
 +
**[http://article.gmane.org/gmane.linux.kernel/470413 Latest sata/ide disk protection patch for 2.6.19-rc6]
 +
**[http://www.dresco.co.uk/hdaps/hdaps_protect-2.6.18.3-2.patch Latest sata/ide disk protection patch for 2.6.18.3]
 +
**[http://exitzero.de/t41p-configs/hdaps_protect-2.6.17.1-20060625.patch Untested patch for 2.6.17.1]: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]
 +
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]
 +
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]
 +
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]
 +
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]
 +
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] <tt> kernel 2.6.15 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)</tt>
 +
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] <tt> kernel 2.6.14 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)</tt>
 
**[http://lwn.net/Articles/154923/ disk park patch] <tt>an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)</tt>
 
**[http://lwn.net/Articles/154923/ disk park patch] <tt>an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)</tt>
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] <tt> kernel 2.6.14 *([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)</tt>
+
 
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] <tt> kernel 2.6.15 *([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)</tt>
+
===== Userspace daemon =====
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]
+
*Current version: [http://sourceforge.net/project/showfiles.php?group_id=138242&package_id=308030 hdapsd-20090401]<br>
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]
+
This version optionally reduces timer interrupts (as measured by [[PowerTOP]]), and thereby reduces power consumption on modern ("tickless") Linux kernels. Interrupt reduction requires the <tt>hdaps</tt> kernel module from [[tp_smapi]] 0.32 or newer, and a udev rule. If these are not present, it will default to an older polling method that is slightly more power-hungry. The udev rule helps hdapsd find the input device, and on most distributions it can be created as follows:
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]
+
# echo 'KERNEL=="event[0-9]*", ATTRS{phys}=="hdaps/input1",ATTRS{modalias}=="input:b0019v1014p5054e4801-*",SYMLINK+="input/hdaps/accelerometer-event"' \
**[http://whoopie.gmxhome.de/linux/patches/2.6.17-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]
+
  > /etc/udev/rules.d/51-hdaps.rules
**Untested patch for 2.6.17.1: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]
+
Then reboot or run {{cmdroot|/sbin/udevtrigger}}, and verify that the {{path|/dev/input/hdaps/accelerometer-event}} symlink exists.
*Userspace daemon
+
 
**[http://www.dresco.co.uk/hdaps/hdapsd-20060409.c Latest userspace parking daemon]
+
*[ftp://rohrmoser-engineering.de/HDAPS_Userspace_Daemon/ Modified adaptive algorithm version] - uses a different (and potentially better) algorithm for the adaptive sensivity threshold.
*GUI monitoring
+
{{HINT| Gentoo users : due to new interface your initscript won't be longer working. Read documentation before upgrading to this version.  
**[http://www.oakcourt.dyndns.org/projects/khdapsmon/ khdapsmon] <tt>KDE System Tray app similar to the Windows one (also at [http://www.kde-apps.org/content/show.php?content=34134 kde-apps.org])</tt>
+
Use an overlay listed bellow with updated versions of related packages}}
**[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20060120.tar.gz gnome-hdaps-applet] <tt>visual display of disk protection status in gnome panel</tt>
+
 
See [[How to protect the harddisk through APS]] for more information.
+
{{NOTE| Linux 2.6.33.2: with the hdaps driver from tp_smapi-0.40, hdapsd don't need udev help any more. hdapsd will loop all the event devices at /dev/input/event* to find out
 +
the accelerometer event. Kernel has to enable the input event interface (Device Drivers->input Device support ->Event interface), otherwise the /dev/input/event* will not be populated.}}
 +
 
 +
===== GUI monitoring =====
 +
*[http://roy.marples.name/node/269 khdapmonitor] KDE System Tray Monitor
 +
*[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20081204.tar.gz gnome-hdaps-applet] visual display of disk protection status in gnome panel
 +
*[http://www.kde-look.org/content/show.php/Applet+HDAPS?content=78387 applet_hdaps] KDE4 Plasmoid display disk protection status
 +
*[http://www.kde-look.org/content/show.php/HDAPS+monitor?content=103481 hdaps monitor] Other KDE4 Plasmoid display disk protection status
 +
*[http://awn.planetblur.org/index.php?shard=forum&action=g_reply&ID=1916&page=1&isLive=true ThinkHDAPS] Avant Window Manager applet for disk protection status
 +
*[http://pani.webhop.org/?id=projects:thinkhdaps ThinkHDAPS] A Gtk/Gnome panel icon based on the AWN applet.
 +
*[http://michael.orlitzky.com/code/xfce4-hdaps.php xfce4-hdaps] An XFCE4 panel plugin for the HDAPS system.
  
 
====Security & safety====
 
====Security & safety====
Line 54: Line 116:
 
====Tilt monitoring====
 
====Tilt monitoring====
 
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] <tt>a GKrellM applet displaying tilt data</tt>
 
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] <tt>a GKrellM applet displaying tilt data</tt>
*[http://rlove.org/log/2005082203.html gnome-tilt] <tt>a gnome applet showing tilt data</tt>
+
*[https://sourceforge.net/project/showfiles.php?group_id=138242 gnome-tilt] <tt>a gnome applet showing tilt data</tt>
  
====Visualisation (of ThinkPad orientation)====
+
====Visualisation of ThinkPad orientation====
*[http://rlove.org/log/2005082401.html hdaps-gl] <tt>a little app animating a 3D-ThinkPad</tt>
+
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdaps-gl] <tt>a little app animating a 3D-ThinkPad</tt>
 
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] <tt> a GNOME applet animating a 3D-ThinkPad</tt>
 
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] <tt> a GNOME applet animating a 3D-ThinkPad</tt>
 
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] <tt>a WindowMaker DockApp animating a 3D-ThinkPad</tt>
 
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] <tt>a WindowMaker DockApp animating a 3D-ThinkPad</tt>
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] <tt>keeps your display levelled when tilting the ThinkPad</tt>
+
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] <tt>keeps your display levelled when tilting the ThinkPad</tt> (warning: [http://en.wikipedia.org/wiki/Tarbomb uncompresses in the current directory]!)
  
 
====Games====
 
====Games====
*Robert Love mentions a [http://icculus.org/neverball/ Neverball] patch on [http://rlove.org/log/2005100302.html his blog] to keep the display aligned. However, the link there seems broken.
+
*[http://icculus.org/neverball/ Neverball] is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)
 
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])
 
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])
  
 
====Other====
 
====Other====
  
*[http://blog.micampe.it/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook]
+
*[http://blog.micampe.it/articles/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook] (uses EWMH)
 +
**an [http://weblogs.mozillazine.org/gerv/archives/2006/09/stablilised_smackpad.html improved version] adds stabilization (by comparing smacks to previous ones, uses EWMH)
 +
**another [http://pberndt.com/Programme/Linux/pyhdaps/index.html approach] adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)
 +
**[http://www.gnome.org/~fherrera/gtollina.c GTollina] is another smack program for use with compiz (video [http://www.gnome.org/~fherrera/blog/gtollina.html here]).
 +
*[http://blog.odonnell.nu/61.html xmms-smack.py] - move through your xmms playlist by smacking, based on the two smack scripts above.
 +
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw02aKnockBasedCommands KnockBasedCommands] - Execute commands by tapping your laptop.
 +
*[http://people.ksp.sk/~mic/Projects/Rotate rotate.py] - rotate desktop by turning your laptop
 +
*[[hdaps_ess|Enhanced smack script]] ess.py is based on the smacks scripts listed in this section. It includes stabilization, a lot of tuning options and it handles both axis (at best you should be able to map 8 commands, even if it is possible I was not able to do so). It is not perfect but on my Thinkpad it works better than the other scripts.
  
 
=== Interesting links related to this project ===
 
=== Interesting links related to this project ===
Line 76: Line 145:
 
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]
 
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]
 
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]
 
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript
+
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript*
 
+
* http://bugs.gentoo.org/show_bug.cgi?id=137345 Gentoo ebuild for gkhdaps gkrell plugin
 +
* http://bugs.gentoo.org/show_bug.cgi?id=137350 Gentoo ebuild for hdaps-gl application
 +
* http://bugs.gentoo.org/show_bug.cgi?id=137351 Gentoo ebuild for gnome hdapsgl-applet
 +
* http://bugs.gentoo.org/show_bug.cgi?id=137352 Gentoo ebuild for gnome tilt application
 +
* http://bugs.gentoo.org/show_bug.cgi?id=137353 Gentoo ebuild for wmhdaps
 +
* gnome-hdaps-applet in the Gentoo main tree
 +
* [http://lenovoblogs.com/insidethebox/?p=71 Why the ThinkPad accelerometer is only 2D] - explanation by Lenovo
  
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]]
+
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:T61]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]] [[Category:Z61m]]

Latest revision as of 09:25, 23 September 2010

HDAPS - IBM Active Protection System Linux Driver

This is the Linux driver for monitoring the accelerometer known as IBM Active Protection System.

The driver only enables reading of the acceleration data. It does not perform automatic disk head parking. But there are already some other useful applications for HDAPS, using the /sys interface it provides.

ATTENTION!
There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by tp_smapi. Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.

Features

  • provides accelerometer values via sysfs
  • provides a joystick type input device

Project Homepage / Availability

  • Project Homepage
  • The driver is included in the 2.6-mm series of kernels since August, 26th 2005.
  • The driver is now in the mainline (2.6.14).
  • The tp_smapi package contains some patches to this driver. These are necessary for some recent models, and recommended for all.

Status

A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi (which provides its own hdaps module).

How to install the driver

Recent Linux kernels include the hdaps driver. However, the driver in the mainline Linux kernel has two problems with recent models:

  • It doesn't whitelist them (you have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a line like HDAPS_DMI_MATCH_LENOVO("ThinkPad T60"))
  • It doesn't work reliably, e.g., it may read out constant values (0,0). See here.

To solve both problems, install the modified hdaps that is bundled with tp_smapi.

Harddisk Protection

As mentioned above, the hdaps kernel driver is only responsible for reading the accelerometer data and exporting it through the sysfs interface. In order to use this information to protect the disk, some additional steps are required.

See How to protect the harddisk through APS.

Input device support

In more recent versions of the Linux kernel,bVy6hxT the hdaps exports event devices with the accelerometer data. These devices can be used as-is by some programs (e.g. hdapsd), but for most they must be handled by the additional kernel module joydev.

When both modules are loaded, joydev will provide standard joystick device emulation for hdaps (standard hdaps exports just one joystick device. enhanced hdaps from tp_smapi will export two due to issues still unsolved on joydev, but the second one must not be used as a joystick).

ATTENTION!
Letting a program bind to these joystick devices can cause surprising results if you are not aware of it. e.g.: mplayer can act quite strangely. Also, letting a program bind to the second joystick device from enhanced HDAPS is guaranteed to be trouble

Udev can be used to create device nodes in /dev for use by user space programs that access the joystick, and to set appropriate permissions.

In order for non-root users to access these device files, their permissions must be tweaked a little through an appropriate udev rule and corresponding "joy" group.

# addgroup joy
# adduser <you> joy
# echo 'SUBSYSTEM=="input", KERNEL=="js*", MODE="0660", GROUP="joy"' >> /etc/udev/hdaps-joy.rules
# ln -s ../hdaps-joy.rules /etc/udev/rules.d/z60_hdaps-joy.rules

Programs you can use to test and calibrate the device files include jscalibrator (gui) and jstest/jscal (cli) packaged together (at least in Debian) simply as "joystick".

Applications

Disk head parking

You will need the kernel patch below and the hdapsd userspace daemon. The GUI monitoring is optional.

See How to protect the harddisk through APS for more information.

Kernel patch

Due to significant changes in the way the libata module which handles disk i/o, applying any of the currently available patches to kernel 2.6.24 will intermittently cause system hangs when the queue is frozen (i.e., the heads are parked). It is recommended either that you stay at kernel 2.6.23 or do without disk protection in 2.6.24 until the kinks have been worked out. There has been significant work on the part of Elias Oltmanns, author of the more recent patches, to get this worked out and eventually get shock protection built into the mainline kernel.

Below are some links to patches for various Linux kernel versions. As noted above, your mileage may vary with the 2.6.24-rc3 patch as it was after this release candidate that things stopped working nicely.

Hint:
To apply a patch, change to the root directory of the kernel tree and run
patch -p1 -l < hdaps_xx.patch
Userspace daemon

This version optionally reduces timer interrupts (as measured by PowerTOP), and thereby reduces power consumption on modern ("tickless") Linux kernels. Interrupt reduction requires the hdaps kernel module from tp_smapi 0.32 or newer, and a udev rule. If these are not present, it will default to an older polling method that is slightly more power-hungry. The udev rule helps hdapsd find the input device, and on most distributions it can be created as follows:

# echo 'KERNEL=="event[0-9]*", ATTRS{phys}=="hdaps/input1",ATTRS{modalias}=="input:b0019v1014p5054e4801-*",SYMLINK+="input/hdaps/accelerometer-event"' \
  > /etc/udev/rules.d/51-hdaps.rules

Then reboot or run # /sbin/udevtrigger, and verify that the /dev/input/hdaps/accelerometer-event symlink exists.

Hint:
Gentoo users : due to new interface your initscript won't be longer working. Read documentation before upgrading to this version.

Use an overlay listed bellow with updated versions of related packages

NOTE!
Linux 2.6.33.2: with the hdaps driver from tp_smapi-0.40, hdapsd don't need udev help any more. hdapsd will loop all the event devices at /dev/input/event* to find out the accelerometer event. Kernel has to enable the input event interface (Device Drivers->input Device support ->Event interface), otherwise the /dev/input/event* will not be populated.
GUI monitoring

Security & safety

Tilt monitoring

  • gkhdaps a GKrellM applet displaying tilt data
  • gnome-tilt a gnome applet showing tilt data

Visualisation of ThinkPad orientation

Games

  • Neverball is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)
  • Turn your ThinkPad into a Jedi Weapon (hey, it works for Mac laptops)

Other

  • smack.py - switch workspace by smacking your laptop, inspired by the SmackBook (uses EWMH)
    • an improved version adds stabilization (by comparing smacks to previous ones, uses EWMH)
    • another approach adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)
    • GTollina is another smack program for use with compiz (video here).
  • xmms-smack.py - move through your xmms playlist by smacking, based on the two smack scripts above.
  • KnockBasedCommands - Execute commands by tapping your laptop.
  • rotate.py - rotate desktop by turning your laptop
  • Enhanced smack script ess.py is based on the smacks scripts listed in this section. It includes stabilization, a lot of tuning options and it handles both axis (at best you should be able to map 8 commands, even if it is possible I was not able to do so). It is not perfect but on my Thinkpad it works better than the other scripts.

Interesting links related to this project