Packages
mob
0.4.0
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.26
0.6.25
0.6.24
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.2
0.6.1
0.6.0
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.11
0.5.10
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
BEAM-on-device mobile framework for Elixir
Current section
Files
Jump to
Current section
Files
lib/mob/motion.ex
defmodule Mob.Motion do
@moduledoc """
Accelerometer and gyroscope sensor data.
No permission required.
Updates arrive at `handle_info` at the requested interval:
handle_info({:motion, %{
accel: {ax, ay, az}, # m/s² (gravity included)
gyro: {gx, gy, gz}, # rad/s
timestamp: unix_ms
}}, socket)
If you only request one sensor, the other tuple will be `{0.0, 0.0, 0.0}`.
iOS: `CMMotionManager`. Android: `SensorManager`.
"""
@type sensor :: :accelerometer | :gyro
@doc """
Start sensor updates.
Options:
- `sensors: [:accelerometer] | [:gyro] | [:accelerometer, :gyro]` (default both)
- `interval_ms: integer` — update interval in milliseconds (default `100`)
"""
@spec start(Mob.Socket.t(), keyword()) :: Mob.Socket.t()
def start(socket, opts \\ []) do
sensors = Keyword.get(opts, :sensors, [:accelerometer, :gyro])
|> Enum.map(&Atom.to_string/1)
interval_ms = Keyword.get(opts, :interval_ms, 100)
:mob_nif.motion_start(sensors, interval_ms)
socket
end
@doc """
Stop sensor updates.
"""
@spec stop(Mob.Socket.t()) :: Mob.Socket.t()
def stop(socket) do
:mob_nif.motion_stop()
socket
end
end