void nsDeviceSensors::Notify(const mozilla::hal::SensorData& aSensorData) { uint32_t type = aSensorData.sensor(); const InfallibleTArray<float>& values = aSensorData.values(); size_t len = values.Length(); double x = len > 0 ? values[0] : 0.0; double y = len > 1 ? values[1] : 0.0; double z = len > 2 ? values[2] : 0.0; double w = len > 3 ? values[3] : 0.0; PRTime timestamp = aSensorData.timestamp(); nsCOMArray<nsIDOMWindow> windowListeners; for (uint32_t i = 0; i < mWindowListeners[type]->Length(); i++) { windowListeners.AppendObject(mWindowListeners[type]->SafeElementAt(i)); } for (uint32_t i = windowListeners.Count(); i > 0 ; ) { --i; nsCOMPtr<nsPIDOMWindowInner> pwindow = do_QueryInterface(windowListeners[i]); if (WindowCannotReceiveSensorEvent(pwindow)) { continue; } if (nsCOMPtr<nsIDOMDocument> domDoc = do_QueryInterface(pwindow->GetDoc())) { nsCOMPtr<mozilla::dom::EventTarget> target = do_QueryInterface(windowListeners[i]); if (type == nsIDeviceSensorData::TYPE_ACCELERATION || type == nsIDeviceSensorData::TYPE_LINEAR_ACCELERATION || type == nsIDeviceSensorData::TYPE_GYROSCOPE) { FireDOMMotionEvent(domDoc, target, type, timestamp, x, y, z); } else if (type == nsIDeviceSensorData::TYPE_ORIENTATION) { FireDOMOrientationEvent(target, x, y, z, Orientation::kAbsolute); } else if (type == nsIDeviceSensorData::TYPE_ROTATION_VECTOR) { const Orientation orient = RotationVectorToOrientation(x, y, z, w); FireDOMOrientationEvent(target, orient.alpha, orient.beta, orient.gamma, Orientation::kAbsolute); } else if (type == nsIDeviceSensorData::TYPE_GAME_ROTATION_VECTOR) { const Orientation orient = RotationVectorToOrientation(x, y, z, w); FireDOMOrientationEvent(target, orient.alpha, orient.beta, orient.gamma, Orientation::kRelative); } else if (type == nsIDeviceSensorData::TYPE_PROXIMITY) { FireDOMProximityEvent(target, x, y, z); } else if (type == nsIDeviceSensorData::TYPE_LIGHT) { FireDOMLightEvent(target, x); } } } }
void HMDInfoCardboard::Notify(const mozilla::hal::SensorData& data) { if (data.sensor() != mozilla::hal::SENSOR_GAME_ROTATION_VECTOR) return; const nsTArray<float>& sensorValues = data.values(); // This is super chatty //LOG("HMDInfoCardboard::Notify %f %f %f %f\n", sensorValues[0], sensorValues[1], sensorValues[2], sensorValues[3]); mSavedLastSensor.Set(sensorValues[0], sensorValues[1], sensorValues[2], sensorValues[3]); mSavedLastSensorTime = data.timestamp(); mNeedsSensorCompute = true; }
void nsDeviceSensors::Notify(const mozilla::hal::SensorData& aSensorData) { PRUint32 type = aSensorData.sensor(); double x = aSensorData.values()[0]; double y = aSensorData.values()[1]; double z = aSensorData.values()[2]; nsCOMArray<nsIDOMWindow> windowListeners; for (PRUint32 i = 0; i < mWindowListeners[type]->Length(); i++) { windowListeners.AppendObject(mWindowListeners[type]->SafeElementAt(i)); } for (PRUint32 i = windowListeners.Count(); i > 0 ; ) { --i; // check to see if this window is in the background. if // it is, don't send any device motion to it. nsCOMPtr<nsPIDOMWindow> pwindow = do_QueryInterface(windowListeners[i]); if (!pwindow || !pwindow->GetOuterWindow() || pwindow->GetOuterWindow()->IsBackground()) continue; nsCOMPtr<nsIDOMDocument> domdoc; windowListeners[i]->GetDocument(getter_AddRefs(domdoc)); if (domdoc) { nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(windowListeners[i]); if (type == nsIDeviceSensorData::TYPE_ACCELERATION || type == nsIDeviceSensorData::TYPE_LINEAR_ACCELERATION || type == nsIDeviceSensorData::TYPE_GYROSCOPE) FireDOMMotionEvent(domdoc, target, type, x, y, z); else if (type == nsIDeviceSensorData::TYPE_ORIENTATION) FireDOMOrientationEvent(domdoc, target, x, y, z); else if (type == nsIDeviceSensorData::TYPE_PROXIMITY) FireDOMProximityEvent(target, x, y, z); else if (type == nsIDeviceSensorData::TYPE_LIGHT) FireDOMLightEvent(target, x); } } }
void nsDeviceSensors::Notify(const mozilla::hal::SensorData& aSensorData) { uint32_t type = aSensorData.sensor(); const InfallibleTArray<float>& values = aSensorData.values(); size_t len = values.Length(); double x = len > 0 ? values[0] : 0.0; double y = len > 1 ? values[1] : 0.0; double z = len > 2 ? values[2] : 0.0; nsCOMArray<nsIDOMWindow> windowListeners; for (uint32_t i = 0; i < mWindowListeners[type]->Length(); i++) { windowListeners.AppendObject(mWindowListeners[type]->SafeElementAt(i)); } for (uint32_t i = windowListeners.Count(); i > 0 ; ) { --i; nsCOMPtr<nsPIDOMWindow> pwindow = do_QueryInterface(windowListeners[i]); if (WindowCannotReceiveSensorEvent(pwindow)) { continue; } nsCOMPtr<nsIDOMDocument> domdoc; windowListeners[i]->GetDocument(getter_AddRefs(domdoc)); if (domdoc) { nsCOMPtr<mozilla::dom::EventTarget> target = do_QueryInterface(windowListeners[i]); if (type == nsIDeviceSensorData::TYPE_ACCELERATION || type == nsIDeviceSensorData::TYPE_LINEAR_ACCELERATION || type == nsIDeviceSensorData::TYPE_GYROSCOPE) FireDOMMotionEvent(domdoc, target, type, x, y, z); else if (type == nsIDeviceSensorData::TYPE_ORIENTATION) FireDOMOrientationEvent(target, x, y, z); else if (type == nsIDeviceSensorData::TYPE_PROXIMITY) FireDOMProximityEvent(target, x, y, z); else if (type == nsIDeviceSensorData::TYPE_LIGHT) FireDOMLightEvent(target, x); } } }