/* * Copyright (C) 2016 SurroundIO * Author: Martin Kelly * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef __GST_ANDROID_HARDWARE_SENSOR_H__ #define __GST_ANDROID_HARDWARE_SENSOR_H__ #include #include #include "gstsensors.h" G_BEGIN_DECLS typedef struct GstAHSensor { /* < private > */ jobject object; } GstAHSensor; typedef struct GstAHSensorData { jfloatArray array; gfloat *values; } GstAHSensorData; typedef struct GstAHSensorEvent { /* * Note that we don't use the Android event timestamp, as it's not reliable. * See https://code.google.com/p/android/issues/detail?id=7981 for more * details. */ gint32 accuracy; GstAHSensorData data; } GstAHSensorEvent; typedef struct GstAHSensorEventListener { /* < private > */ jobject object; gboolean registered; } GstAHSensorEventListener; typedef struct GstAHSensorManager { /* < private > */ jobject object; } GstAHSensorManager; gint gst_android_sensor_type_from_string (const gchar * type_str); /* android.hardware.SensorListener onSensorChanged */ typedef void (*GstAHSensorCallback) (jobject sensor_event, gpointer user_data); /* android.hardware.SensorListener onAccuracyChanged */ typedef void (*GstAHSAccuracyCallback) (jobject sensor, gint32 accuracy, gpointer user_data); gboolean gst_android_hardware_sensor_init (void); void gst_android_hardware_sensor_deinit (void); /* * Example usage (excluding error checking): * * GstAHSensorManager *manager = gst_ah_sensor_get_manager (); * GstAHSensor *sensor = * gst_ah_sensor_get_default_sensor (manager, * sensor_type); * GstAHSensorEventListener *listener = * gst_ah_sensor_create_listener * (change_cb, accuracy_cb, self); * gst_ah_sensor_register_listener (manager, listener, sensor, * SensorDelay_SENSOR_DELAY_NORMAL); */ GstAHSensorManager *gst_ah_sensor_get_manager (void); GstAHSensor *gst_ah_sensor_get_default_sensor (GstAHSensorManager * manager, gint32 sensor_type); GstAHSensorEventListener *gst_ah_sensor_create_listener (GstAHSensorCallback sensor_cb, GstAHSAccuracyCallback accuracy_cb, gpointer user_data); gboolean gst_ah_sensor_register_listener (GstAHSensorManager * self, GstAHSensorEventListener * listener, GstAHSensor * sensor, gint32 delay); void gst_ah_sensor_unregister_listener (GstAHSensorManager * self, GstAHSensorEventListener * listener); gboolean gst_ah_sensor_populate_event (GstAHSensorEvent * event, jobject event_object, gint size); void gst_ah_sensor_free_sensor_data (GstAHSensorData * data); /* * These constants come from the matching SENSOR_DELAY_* TYPE_* constants found * in the Android documentation: * * SENSOR_DELAY_*: * https://developer.android.com/reference/android/hardware/SensorManager.html * * TYPE_*: * https://developer.android.com/reference/android/hardware/Sensor.html * * They are intended to be passed into the registerListener callback for * listener registration. Note that, although these are hardcoded, we also do * paranoid runtime checks during plugin init to verify that the API values * haven't changed. This is unlikely but seems like a good precaution. When * adding values, please keep the two lists in sync. */ enum { AHS_SENSOR_DELAY_FASTEST = 0, AHS_SENSOR_DELAY_GAME = 1, AHS_SENSOR_DELAY_NORMAL = 3, AHS_SENSOR_DELAY_UI = 2 }; enum { AHS_SENSOR_TYPE_ACCELEROMETER = 0x1, AHS_SENSOR_TYPE_AMBIENT_TEMPERATURE = 0xd, AHS_SENSOR_TYPE_GAME_ROTATION_VECTOR = 0xf, AHS_SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR = 0x14, AHS_SENSOR_TYPE_GRAVITY = 0x9, AHS_SENSOR_TYPE_GYROSCOPE = 0x4, AHS_SENSOR_TYPE_GYROSCOPE_UNCALIBRATED = 0x10, AHS_SENSOR_TYPE_HEART_RATE = 0x15, AHS_SENSOR_TYPE_LIGHT = 0x5, AHS_SENSOR_TYPE_LINEAR_ACCELERATION = 0xa, AHS_SENSOR_TYPE_MAGNETIC_FIELD = 0x2, AHS_SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED = 0xe, AHS_SENSOR_TYPE_ORIENTATION = 0x3, AHS_SENSOR_TYPE_PRESSURE = 0x6, AHS_SENSOR_TYPE_PROXIMITY = 0x8, AHS_SENSOR_TYPE_RELATIVE_HUMIDITY = 0xc, AHS_SENSOR_TYPE_ROTATION_VECTOR = 0xb, AHS_SENSOR_TYPE_SIGNIFICANT_MOTION = 0x11, AHS_SENSOR_TYPE_STEP_COUNTER = 0x13, AHS_SENSOR_TYPE_STEP_DETECTOR = 0x12 }; gsize gst_ah_sensor_get_sensor_data_size (gint sensor_type); G_END_DECLS #endif /* __GST_ANDROID_HARDWARE_SENSOR_H__ */