IBM ThinkPad Accelerometer, aka "Active Protection System"

Announced in November 2003;  Probably shipped in 2004 March

Analog Devices Inc (ADI) make the sensor and boast about it in their Press Releases

Probably an ADXL311 originally and now switched to ADXL320 since the first is getting deprecated.

These eat 3 volts at about 400 micro-amps and give 2 analogue outputs back, X and Y.

At rest in the horizontal plane these will both be measuring 1g .

Falling is more than than this, rising is less than this.

Tilt is collected as gavity decreases in a sin() as the chip is tilted through 90^ degrees.

Still puzzled about *where* the values are being read in from

Initial assumption was a chip on the I2C/SMBUS.  But since it's a 2-channel a-to-d, could be anyway
---eg, existing fan monitoring chip.

Windows drivers read in 28-bytes via an IOCTL(0x733fc) on "\ShockMgr" .  (See shockprf.sys)

Apple is shipping a 2-axis sensor in new PowerBooks.  Acccessed via the smbus.
dead easy since we have (some) info.

Referred to as "Sudden Motion Sensor".  and "Mobile Motion Module".  and "Apple Motion Sensor"

Compaq has a sensor in some of their Tablet PCs to tell which way the display is rotated/pointing (Also ADI)

Windows Driver:


    The active protection system employs a heuristic learning algorithm to track
  system orientation. The Shock Manager, a system thread created by the
  Shockprf.sys of a kernel mode device driver, analyzes the variations in acceleration
  and collects system orientation data into the Shock History Database. The collected
  data is then used to tune sensitivity and predict excessive shocks. This tuning is
  important in minimizing the disk performance penalty caused by prediction
  failures. Once the Shock Manager detects a certain variation which may be
  equivalent to one usually seen just before receiving an excessive shock, the Shock
  Manager acts immediately to stop the hard disk drive.

The writes to 0xed are just to the ("non-existant") delay port.

The other two ports are super-I/O controller/IDE ports and I think the
write is to stop the drive and then stop the IDE Bus.