OculusDevice = function(deviceHandle, deviceDesc, reportDesc, hmdInfo) {
  /**
   * Chrome device handle.
   * @type {!Object}
   * @private
   */
  this.handle_ = deviceHandle;

  /**
   * Device descriptor.
   * @type {!DeviceDescriptor}
   * @private
   */
  this.deviceDesc_ = deviceDesc;

  /**
   * HID report descriptor.
   * @type {!HidReportDescriptor}
   * @private
   */
  this.reportDesc_ = reportDesc;

  /**
   * Raw HMD info from the device.
   * @type {!HmdInfo}
   * @private
   */
  this.hmdInfo_ = hmdInfo;

  /**
   * Sensor fusion utility.
   * @type {!SensorFusion}
   * @private
   */
  this.sensorFusion_ = new SensorFusion();

  /**
   * Timer interval used for sending keep alives.
   * These are not within the main input pump so that we can detect device
   * removal. They must be sent more frequently than the device keep alive time
   * otherwise it will shut down.
   * @type {number|null}
   * @private
   */
  this.keepAliveInterval_ = null;

  /**
   * Whether the input pump is running.
   * If set to false the input pump will end on the next pump.
   * @type {boolean}
   * @private
   */
  this.pumping_ = false;

  /**
   * Number of outstanding pump reads.
   * To reduce latency we issue several reads at a time so that we don't have
   * to way for the full round trip on a read-request-complete cycle.
   * @type {number}
   * @private
   */
  this.outstandingReadCount_ = 0;

  /**
   * @type {number}
   * @private
   */
  this.lastTimestamp_ = 0;

  /**
   * @type {number}
   * @private
   */
  this.lastSampleCount_ = 0;

  /**
   * Sensor data from the previous packet.
   * This is used to fill in data holes when packets are dropped.
   * @type {!SensorData}
   * @private
   */
  this.lastSensorData_ = new SensorData();

  /**
   * Cached sensor data.
   * THis is updated each packet. Clone if needed.
   * @type {!SensorData}
   * @private
   */
  this.sensorData_ = new SensorData();

  /**
   * Scratch int32 array.
   * @type {!Int32Array}
   * @private
   */
  this.tempInt32_ = new Int32Array(3);

  // Start getting input.
  this.beginInputPump_();
}
Oculus Rift device.
@param {!Object} deviceHandle Chrome device handle.
@param {!DeviceDescriptor} deviceDesc Device descriptor.
@param {!HidReportDescriptor} reportDesc HID report descriptor.
@param {!HmdInfo} hmdInfo Raw HMD info.
@constructor