github.com/coming-chat/gomobile@v0.0.0-20220601074111-56995f7d7aba/exp/sensor/darwin_armx.m (about) 1 // Copyright 2015 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build darwin && (arm || arm64) 6 // +build darwin 7 // +build arm arm64 8 9 #import <CoreMotion/CoreMotion.h> 10 11 CMMotionManager* manager = nil; 12 13 void GoIOS_createManager() { 14 manager = [[CMMotionManager alloc] init]; 15 } 16 17 void GoIOS_startAccelerometer(float interval) { 18 manager.accelerometerUpdateInterval = interval; 19 [manager startAccelerometerUpdates]; 20 } 21 22 void GoIOS_stopAccelerometer() { 23 [manager stopAccelerometerUpdates]; 24 } 25 26 void GoIOS_readAccelerometer(int64_t* timestamp, float* v) { 27 CMAccelerometerData* data = manager.accelerometerData; 28 *timestamp = (int64_t)(data.timestamp * 1000 * 1000); 29 v[0] = data.acceleration.x; 30 v[1] = data.acceleration.y; 31 v[2] = data.acceleration.z; 32 } 33 34 void GoIOS_startGyro(float interval) { 35 manager.gyroUpdateInterval = interval; 36 [manager startGyroUpdates]; 37 } 38 39 void GoIOS_stopGyro() { 40 [manager stopGyroUpdates]; 41 } 42 43 void GoIOS_readGyro(int64_t* timestamp, float* v) { 44 CMGyroData* data = manager.gyroData; 45 *timestamp = (int64_t)(data.timestamp * 1000 * 1000); 46 v[0] = data.rotationRate.x; 47 v[1] = data.rotationRate.y; 48 v[2] = data.rotationRate.z; 49 } 50 51 void GoIOS_startMagneto(float interval) { 52 manager.magnetometerUpdateInterval = interval; 53 [manager startMagnetometerUpdates]; 54 } 55 56 void GoIOS_stopMagneto() { 57 [manager stopMagnetometerUpdates]; 58 } 59 60 void GoIOS_readMagneto(int64_t* timestamp, float* v) { 61 CMMagnetometerData* data = manager.magnetometerData; 62 *timestamp = (int64_t)(data.timestamp * 1000 * 1000); 63 v[0] = data.magneticField.x; 64 v[1] = data.magneticField.y; 65 v[2] = data.magneticField.z; 66 } 67 68 void GoIOS_destroyManager() { 69 [manager release]; 70 manager = nil; 71 }