class BubbleWrap::Motion::DeviceMotion

Public Instance Methods

active?() click to toggle source
# File motion/motion/device_motion.rb, line 124
def active?
  @manager.deviceMotionActive?
end
available?() click to toggle source
# File motion/motion/device_motion.rb, line 120
def available?
  @manager.deviceMotionAvailable?
end
convert_reference_frame(reference_frame) click to toggle source
# File motion/motion/device_motion.rb, line 105
def convert_reference_frame(reference_frame)
  case reference_frame
  when :arbitrary_z
    CMAttitudeReferenceFrameXArbitraryZVertical
  when :corrected_z
    CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
  when :magnetic_north
    CMAttitudeReferenceFrameXMagneticNorthZVertical
  when :true_north
    CMAttitudeReferenceFrameXTrueNorthZVertical
  else
    reference_frame
  end
end
data() click to toggle source
# File motion/motion/device_motion.rb, line 128
def data
  @manager.deviceMotion
end
start(options={}, &handler) click to toggle source
# File motion/motion/device_motion.rb, line 5
def start(options={}, &handler)
  if options.key?(:interval)
    @manager.deviceMotionUpdateInterval = options[:interval]
  end

  if options.key?(:reference)
    reference_frame = convert_reference_frame(options[:reference])
  else
    reference_frame = nil
  end

  if handler
    queue = convert_queue(options[:queue])

    if reference_frame
        @manager.startDeviceMotionUpdatesUsingReferenceFrame(reference_frame, toQueue: queue, withHandler: internal_handler(handler))
    else
        @manager.startDeviceMotionUpdatesToQueue(queue, withHandler: internal_handler(handler))
    end
  else
    if reference_frame
      @manager.startDeviceMotionUpdatesUsingReferenceFrame(reference_frame)
    else
      @manager.startDeviceMotionUpdates
    end
  end

  return self
end
stop() click to toggle source
# File motion/motion/device_motion.rb, line 132
def stop
  @manager.stopDeviceMotionUpdates
end

Private Instance Methods

handle_result(result_data, error, handler) click to toggle source
# File motion/motion/device_motion.rb, line 35
        def handle_result(result_data, error, handler)
  if result_data
    result = {
      data: result_data,
      attitude: result_data.attitude,
      rotation: result_data.rotationRate,
      gravity: result_data.gravity,
      acceleration: result_data.userAcceleration,
      magnetic: result_data.magneticField,
    }

    if result_data.attitude
      result.merge!({
        roll: result_data.attitude.roll,
        pitch: result_data.attitude.pitch,
        yaw: result_data.attitude.yaw,
        matrix: result_data.attitude.rotationMatrix,
        quaternion: result_data.attitude.quaternion,
      })
    end

    if result_data.rotationRate
      result.merge!({
        rotation_x: result_data.rotationRate.x,
        rotation_y: result_data.rotationRate.y,
        rotation_z: result_data.rotationRate.z,
      })
    end

    if result_data.gravity
      result.merge!({
        gravity_x: result_data.gravity.x,
        gravity_y: result_data.gravity.y,
        gravity_z: result_data.gravity.z,
      })
    end

    if result_data.userAcceleration
      result.merge!({
        acceleration_x: result_data.userAcceleration.x,
        acceleration_y: result_data.userAcceleration.y,
        acceleration_z: result_data.userAcceleration.z,
      })
    end

    if result_data.magneticField
      case result_data.magneticField.accuracy
      when CMMagneticFieldCalibrationAccuracyLow
        accuracy = :low
      when CMMagneticFieldCalibrationAccuracyMedium
        accuracy = :medium
      when CMMagneticFieldCalibrationAccuracyHigh
        accuracy = :high
      end

      result.merge!({
        field: result_data.magneticField.field,
        magnetic_x: result_data.magneticField.field.x,
        magnetic_y: result_data.magneticField.field.y,
        magnetic_z: result_data.magneticField.field.z,
        magnetic_accuracy: accuracy,
      })
    end
  else
    result = nil
  end

  handler.call(result, error)
end