157 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2016 SurroundIO
 | |
|  *   Author: Martin Kelly <martin@surround.io>
 | |
|  *
 | |
|  * 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 <gst/gst.h>
 | |
| #include <jni.h>
 | |
| 
 | |
| #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__ */
 |