| This directory contains a simple python script for visualizing | |
| the behavior of the WindowOrientationListener. | |
| PREREQUISITES | |
| ------------- | |
| 1. Python 2.6 | |
| 2. numpy | |
| 3. matplotlib | |
| eg. sudo apt-get install python-numpy python-matplotlib | |
| USAGE | |
| ----- | |
| The tool works by scaping the debug log output from WindowOrientationListener | |
| for interesting data and then plotting it. | |
| 1. Plug in the device. Ensure that it is the only device plugged in | |
| since this script is of very little brain and will get confused otherwise. | |
| 2. Enable the Window Orientation Listener debugging data log. | |
| adb shell setprop debug.orientation.log true | |
| adb shell stop | |
| adb shell start | |
| 3. Run "orientationplot.py". | |
| WHAT IT ALL MEANS | |
| ----------------- | |
| The tool displays several time series graphs that plot the output of the | |
| WindowOrientationListener. Here you can see the raw accelerometer data, | |
| filtered accelerometer data, measured tilt and orientation angle, confidence | |
| intervals for the proposed orientation and accelerometer latency. | |
| Things to look for: | |
| 1. Ensure the filtering is not too aggressive. If the filter cut-off frequency is | |
| less than about 1Hz, then the filtered accelorometer data becomes too smooth | |
| and the latency for orientation detection goes up. One way to observe this | |
| is by holding the device vertically in one orientation then sharply turning | |
| it 90 degrees to a different orientation. Compared the rapid changes in the | |
| raw accelerometer data with the smoothed out filtered data. If the filtering | |
| is too aggressive, the filter response may lag by hundreds of milliseconds. | |
| 2. Ensure that there is an appropriate gap between adjacent orientation angles | |
| for hysteresis. Try holding the device in one orientation and slowly turning | |
| it 90 degrees. Note that the confidence intervals will all drop to 0 at some | |
| point in between the two orientations; that is the gap. The gap should be | |
| observed between all adjacent pairs of orientations when turning the device | |
| in either direction. | |
| Next try holding the device in one orientation and rapidly turning it end | |
| over end to a midpoint about 45 degrees between two opposing orientations. | |
| There should be no gap observed initially. The algorithm should pick one | |
| of the orientations and settle into it (since it is obviously quite | |
| different from the original orientation of the device). However, once it | |
| settles, the confidence values should start trending to 0 again because | |
| the measured orientation angle is now within the gap between the new | |
| orientation and the adjacent orientation. | |
| In other words, the hysteresis gap applies only when the measured orientation | |
| angle (say, 45 degrees) is between the current orientation's ideal angle | |
| (say, 0 degrees) and an adjacent orientation's ideal angle (say, 90 degrees). | |
| 3. Accelerometer jitter. The accelerometer latency graph displays the interval | |
| between sensor events as reported by the SensorEvent.timestamp field. It | |
| should be a fairly constant 60ms. If the latency jumps around wildly or | |
| greatly exceeds 60ms then there is a problem with the accelerometer or the | |
| sensor manager. | |
| 4. The orientation angle is not measured when the tilt is too close to 90 or -90 | |
| degrees (refer to MAX_TILT constant). Consequently, you should expect there | |
| to be no data. Likewise, all dependent calculations are suppressed in this case | |
| so there will be no orientation proposal either. | |
| 5. Each orientation has its own bound on allowable tilt angles. It's a good idea to | |
| verify that these limits are being enforced by gradually varying the tilt of | |
| the device until it is inside/outside the limit for each orientation. | |
| 6. Orientation changes should be significantly harder when the device is held | |
| overhead. People reading on tablets in bed often have their head turned | |
| a little to the side, or they hold the device loosely so its orientation | |
| can be a bit unusual. The tilt is a good indicator of whether the device is | |
| overhead. |