# `Dala.Ui.Sensor.Motion`
[🔗](https://github.com/manhvu/dala/blob/main/lib/dala/ui/sensor/motion.ex#L1)

Accelerometer and gyroscope sensor data.

No permission required on either platform.

## Events

Updates arrive at `handle_info` at the requested interval:

    handle_info({:motion, %{
      accel:     %{x: ax, y: ay, z: az},   # m/s² (gravity included)
      gyro:      %{x: gx, y: gy, z: gz},   # rad/s
      timestamp: unix_ms
    }}, socket)

If you only request one sensor, the other map will have all-zero values.

## Usage

    # Start both sensors at 100ms interval
    socket = Dala.Ui.Sensor.Motion.start(socket)

    # Start only accelerometer at 50ms
    socket = Dala.Ui.Sensor.Motion.start(socket, sensors: [:accelerometer], interval_ms: 50)

    # Stop
    socket = Dala.Ui.Sensor.Motion.stop(socket)

iOS: `CMMotionManager`. Android: `SensorManager`.

# `sensor`

```elixir
@type sensor() :: :accelerometer | :gyro
```

# `available?`

```elixir
@spec available?() :: boolean()
```

Check if motion sensors are available on this device.

# `start`

```elixir
@spec start(
  Dala.Socket.t(),
  keyword()
) :: Dala.Socket.t()
```

Start sensor updates.

Options:
  - `sensors: [:accelerometer] | [:gyro] | [:accelerometer, :gyro]` (default both)
  - `interval_ms: integer` — update interval in milliseconds (default `100`)

# `stop`

```elixir
@spec stop(Dala.Socket.t()) :: Dala.Socket.t()
```

Stop sensor updates.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
