Windows Mobile 6.5 Accelerometer Screen Rotation
Windows Mobile 6.5 relied on proprietary hardware drivers, OEM-specific software abstraction layers, and low-level Windows CE display APIs to handle accelerometer-based screen rotation. Because the operating system lacked a standardized, built-in sensor framework like those found in modern mobile platforms, auto-rotation was achieved through vendor-designed background services that monitored hardware orientation vectors and programmatically triggered OS-level display adjustments.
The Lack of Native Sensor APIs
Windows Mobile 6.5 was built on the legacy Windows CE 5.2 kernel, an architecture conceived before onboard motion sensors became ubiquitous in smartphones. The core operating system did not include a unified sensor manager or native event-driven sensor application programming interfaces (APIs). Consequently, Microsoft provided no standard mechanism for third-party applications to query accelerometer data directly through the Windows Mobile Software Development Kit (SDK).
OEM Proprietary Sensor Drivers and Abstraction
To incorporate auto-rotation into flagship devices—such as the HTC HD2 or Samsung Omnia series—Original Equipment Manufacturers (OEMs) built custom sensor architectures:
- Hardware Communication: Accelerometer hardware communicated with the main processor via low-level serial interfaces, typically I2C or SPI buses.
- Proprietary Sensor Drivers: OEMs supplied custom kernel-mode drivers to interface with the sensor chips.
- Vendor DLLs: Device makers exposed the raw
accelerometer data through proprietary user-mode libraries, such as
HTC’s
HTCSensorSDK.dll. These dynamic link libraries read positional values across the X, Y, and Z axes.
Event Polling and Threshold Processing
Because the operating system did not inherently monitor physical device orientation, OEM software used background monitoring daemons to track device movement.
These daemons continuously polled the accelerometer at set intervals or listened for hardware interrupts generated when physical tilt crossed preconfigured thresholds. To avoid erratic rotation during minor movements, the software implemented low-pass filtering and hysteresis algorithms. Once the device was held past a specific angle for a defined duration, the background service registered a valid orientation change between portrait, landscape left, landscape right, or reverse portrait.
Executing the Screen Rotation
Once the monitoring software confirmed an orientation switch, it bypassed standard application logic to invoke core display changes via the Windows Graphics, Windowing, and Events Subsystem (GWES).
The software issued calls to the standard Windows CE display
configuration API, specifically ChangeDisplaySettingsEx().
The process operated as follows:
- The system populated a
DEVMODEstructure specifying target display properties. - The
dmDisplayOrientationfield was assigned a specific constant:DMDO_DEFAULT(0 degrees),DMDO_90(90 degrees counter-clockwise),DMDO_180(180 degrees), orDMDO_270(270 degrees). - The API adjusted the framebuffer mapping in the display driver and
broadcast a
WM_SETTINGCHANGEmessage across all running processes, signaling active applications to redraw their user interfaces to match the new screen dimensions.
Third-Party Adaptation and Custom Shells
Native Windows Mobile 6.5 components, such as the standard Start menu and File Explorer, were rarely configured to rotate automatically out of the box. OEMs largely confined auto-rotation to custom interfaces, such as HTC Sense (TouchFLO 3D) or specific apps like photo viewers and web browsers.
To achieve system-wide rotation across any application, power users
and independent developers reverse-engineered the OEM sensor libraries.
They created utilities such as Gyrator 2 and ThrottleRotator, which ran
as persistent background tasks, mapped custom orientation thresholds to
the vendor-specific sensor DLLs, and forced
ChangeDisplaySettingsEx() calls universally throughout the
operating system.