apple_silicon_accelerometer

A MoonBit library for accessing accelerometer, gyroscope, and lid sensor data on Apple Silicon devices.

accelerometer
gyroscope
lid sensor
apple silicon
moon add oboard/apple_silicon_accelerometer@0.1.0
Download zip
Author
Version
0.1.0
License
Apache-2.0
Last updated
4 months ago
Downloads
18
README

#oboard/apple_silicon_accelerometer

Version License

Apple Silicon MacBook sensors for MoonBit (accelerometer, gyroscope, ambient light, lid angle).

This package talks to IOKit HID and exposes a simple MoonBit API.

#Quick Start

///|
fn main {
try {
let pid = @apple_silicon_accelerometer.start_sensord_background()
@apple_silicon_accelerometer.sleep_seconds(1)
match @apple_silicon_accelerometer.accel_latest() {
Some((total, x, y, z)) =>
println("accel total=\{total} xyz=(\{x}, \{y}, \{z})")
None => println("no accel data")
}
@apple_silicon_accelerometer.stop_sensord_background(pid)
} catch {
err => println("failed: \{err}")
}
}

#Install

moon add oboard/apple_silicon_accelerometer

#Run Example

This package requires root privileges to access sensor drivers.

sudo moon run example

#API

#Parse helpers

  • parse_imu_report(report : Bytes) -> (Int, Int, Int)
  • parse_lid_angle(report : Bytes) -> Float?

#Sensor daemon control

  • run_sensord() -> Unit raise
  • start_sensord_background() -> Int raise
  • stop_sensord_background(pid : Int) -> Unit
  • sleep_seconds(seconds : Int) -> Unit

#Live snapshots

  • accel_latest() -> (total : Int, x : Int, y : Int, z : Int)?
  • gyro_latest() -> (total : Int, x : Int, y : Int, z : Int)?
  • lid_latest() -> (total : Int, angle : Float)?
  • als_latest_words() -> (total : Int, w0 : Int, w1 : Int, w2 : Int, w3 : Int)?

#Notes

  • Target platform: macOS + Apple Silicon.
  • Backend: native.
  • If you run without sudo, APIs that start sensord will raise an error.

#
accel_latest

fn accel_latest() -> (Int, Int, Int, Int)?

#
accel_scale

let accel_scale : Double

#
als_latest_words

fn als_latest_words() -> (Int, Int, Int, Int, Int)?

#
als_report_len

let als_report_len : Int

#
als_size

let als_size : Int

#
gyro_latest

fn gyro_latest() -> (Int, Int, Int, Int)?

#
gyro_scale

let gyro_scale : Double

#
imu_data_offset

let imu_data_offset : Int

#
imu_decimation

let imu_decimation : Int

#
imu_report_len

let imu_report_len : Int

#
lid_latest

fn lid_latest() -> (Int, Float)?

#
lid_report_len

let lid_report_len : Int

#
lid_size

let lid_size : Int

#
page_sensor

let page_sensor : Int

#
page_vendor

let page_vendor : Int

#
parse_imu_report

fn parse_imu_report(report : Bytes) -> (Int, Int, Int)

#
parse_lid_angle

fn parse_lid_angle(report : Bytes) -> Float?

#
report_buf_size

let report_buf_size : Int

#
report_interval_us

let report_interval_us : Int

#
ring_cap

let ring_cap : Int

#
ring_entry

let ring_entry : Int

#
run_sensord

fn run_sensord() -> Unit raise

#
shm_header

let shm_header : Int

#
shm_name_accel

let shm_name_accel : String

#
shm_name_als

let shm_name_als : String

#
shm_name_gyro

let shm_name_gyro : String

#
shm_name_lid

let shm_name_lid : String

#
shm_size

let shm_size : Int

#
sleep_seconds

fn sleep_seconds(seconds : Int) -> Unit

#
snap_header

let snap_header : Int

#
start_sensord_background

fn start_sensord_background() -> Int raise

#
stop_sensord_background

fn stop_sensord_background(pid : Int) -> Unit

#
usage_accel

let usage_accel : Int

#
usage_als

let usage_als : Int

#
usage_gyro

let usage_gyro : Int

#
usage_lid

let usage_lid : Int

Powered by MoonBit

Site sourceReport issuePackagesBuild queueSkillsStatistics

© 2026 mooncakes.io