summaryrefslogtreecommitdiffstats
path: root/libsensors/mlsdk/mllite/mlcontrol.h
diff options
context:
space:
mode:
Diffstat (limited to 'libsensors/mlsdk/mllite/mlcontrol.h')
-rw-r--r--libsensors/mlsdk/mllite/mlcontrol.h217
1 files changed, 217 insertions, 0 deletions
diff --git a/libsensors/mlsdk/mllite/mlcontrol.h b/libsensors/mlsdk/mllite/mlcontrol.h
new file mode 100644
index 0000000..abdefa3
--- /dev/null
+++ b/libsensors/mlsdk/mllite/mlcontrol.h
@@ -0,0 +1,217 @@
+/*
+ $License:
+ Copyright 2011 InvenSense, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ $
+ */
+/*******************************************************************************
+ *
+ * $RCSfile: mlcontrol.h,v $
+ *
+ * $Date: 2011-06-10 20:13:08 -0700 (Fri, 10 Jun 2011) $
+ *
+ * $Revision: 5629 $
+ *
+ *******************************************************************************/
+
+/*******************************************************************************/
+/** @defgroup INV_CONTROL
+
+ The Control processes gyroscopes and accelerometers to provide control
+ signals that can be used in user interfaces to manipulate objects such as
+ documents, images, cursors, menus, etc.
+
+ @{
+ @file mlcontrol.h
+ @brief Header file for the Control Library.
+*/
+/******************************************************************************/
+#ifndef MLCONTROL_H
+#define MLCONTROL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "mltypes.h"
+#include "ml.h"
+#ifdef INV_INCLUDE_LEGACY_HEADERS
+#include "mlcontrol_legacy.h"
+#endif
+
+ /* ------------ */
+ /* - Defines. - */
+ /* ------------ */
+
+ /*******************************************************************************/
+ /* Control Signals. */
+ /*******************************************************************************/
+
+#define INV_CONTROL_1 0x0001
+#define INV_CONTROL_2 0x0002
+#define INV_CONTROL_3 0x0004
+#define INV_CONTROL_4 0x0008
+
+ /*******************************************************************************/
+ /* Control Functions. */
+ /*******************************************************************************/
+
+#define INV_GRID 0x0001 // Indicates that the user will be controlling a system that
+ // has discrete steps, such as icons, menu entries, pixels, etc.
+#define INV_SMOOTH 0x0002 // Indicates that noise from unintentional motion should be filtered out.
+#define INV_DEAD_ZONE 0x0004 // Indicates that a dead zone should be used, below which sensor data is set to zero.
+#define INV_HYSTERESIS 0x0008 // Indicates that, when INV_GRID is selected, hysteresis should be used to prevent
+ // the control signal from switching rapidly across elements of the grid.</dd>
+
+ /*******************************************************************************/
+ /* Integral reset options. */
+ /*******************************************************************************/
+
+#define INV_NO_RESET 0x0000
+#define INV_RESET 0x0001
+
+ /*******************************************************************************/
+ /* Data select options. */
+ /*******************************************************************************/
+
+#define INV_CTRL_SIGNAL 0x0000
+#define INV_CTRL_GRID_NUM 0x0001
+
+ /*******************************************************************************/
+ /* Control Axis. */
+ /*******************************************************************************/
+#define INV_CTRL_PITCH 0x0000 // (INV_PITCH >> 1)
+#define INV_CTRL_ROLL 0x0001 // (INV_ROLL >> 1)
+#define INV_CTRL_YAW 0x0002 // (INV_YAW >> 1)
+
+ /*******************************************************************************/
+ /* control_params structure default values. */
+ /*******************************************************************************/
+
+#define MLCTRL_SENSITIVITY_0_DEFAULT 128
+#define MLCTRL_SENSITIVITY_1_DEFAULT 128
+#define MLCTRL_SENSITIVITY_2_DEFAULT 128
+#define MLCTRL_SENSITIVITY_3_DEFAULT 128
+#define MLCTRL_FUNCTIONS_DEFAULT 0
+#define MLCTRL_CONTROL_SIGNALS_DEFAULT 0
+#define MLCTRL_PARAMETER_ARRAY_0_DEFAULT 0
+#define MLCTRL_PARAMETER_ARRAY_1_DEFAULT 0
+#define MLCTRL_PARAMETER_ARRAY_2_DEFAULT 0
+#define MLCTRL_PARAMETER_ARRAY_3_DEFAULT 0
+#define MLCTRL_PARAMETER_AXIS_0_DEFAULT 0
+#define MLCTRL_PARAMETER_AXIS_1_DEFAULT 0
+#define MLCTRL_PARAMETER_AXIS_2_DEFAULT 0
+#define MLCTRL_PARAMETER_AXIS_3_DEFAULT 0
+#define MLCTRL_GRID_THRESHOLD_0_DEFAULT 1
+#define MLCTRL_GRID_THRESHOLD_1_DEFAULT 1
+#define MLCTRL_GRID_THRESHOLD_2_DEFAULT 1
+#define MLCTRL_GRID_THRESHOLD_3_DEFAULT 1
+#define MLCTRL_GRID_MAXIMUM_0_DEFAULT 0
+#define MLCTRL_GRID_MAXIMUM_1_DEFAULT 0
+#define MLCTRL_GRID_MAXIMUM_2_DEFAULT 0
+#define MLCTRL_GRID_MAXIMUM_3_DEFAULT 0
+#define MLCTRL_GRID_CALLBACK_DEFAULT 0
+
+ /* --------------- */
+ /* - Structures. - */
+ /* --------------- */
+
+ /**************************************************************************/
+ /* Control Parameters Structure. */
+ /**************************************************************************/
+
+ struct control_params {
+ // Sensitivity of control signal 1, 2, 3, and 4.
+ unsigned short sensitivity[4];
+ // Indicates what functions will be used. Can be a bitwise OR of INV_GRID,
+ // ML_SMOOT, INV_DEAD_ZONE, and INV_HYSTERISIS.
+ unsigned short functions;
+ // Indicates which parameter array is being assigned to a control signal.
+ // Must be one of INV_GYROS, INV_ANGULAR_VELOCITY, or
+ // INV_ANGULAR_VELOCITY_WORLD.
+ unsigned short parameterArray[4];
+ // Indicates which axis of the parameter array will be used. Must be
+ // INV_ROLL, INV_PITCH, or INV_YAW.
+ unsigned short parameterAxis[4];
+ // Threshold of the control signal at which the grid number will be
+ // incremented or decremented.
+ long gridThreshold[4];
+ // Maximum grid number for the control signal.
+ long gridMaximum[4];
+ // User defined callback that will trigger when the grid location changes.
+ void (*gridCallback) (
+ // Indicates which control signal crossed a grid threshold. Must be
+ // one of INV_CONTROL_1, INV_CONTROL_2, INV_CONTROL_3 or INV_CONTROL_4.
+ unsigned short controlSignal,
+ // An array of four numbers representing the grid number for each
+ // control signal.
+ long *gridNum,
+ // An array of four numbers representing the change in grid number
+ // for each control signal.
+ long *gridChange);
+ };
+
+ struct control_obj {
+
+ long gridNum[4]; // Current grid number for each control signal.
+ long controlInt[4]; // Current data for each control signal.
+ long lastGridNum[4]; // Previous grid number
+ unsigned char controlDir[4]; // Direction of control signal
+ long gridChange[4]; // Change in grid number
+
+ long mlGridNumDMP[4];
+ long gridNumOffset[4];
+ long prevDMPGridNum[4];
+
+ };
+
+ /* --------------------- */
+ /* - Function p-types. - */
+ /* --------------------- */
+
+ /**************************************************************************/
+ /* ML Control Functions. */
+ /**************************************************************************/
+
+ unsigned short inv_get_control_params(struct control_params *params);
+ unsigned short inv_set_control_params(struct control_params *params);
+
+ /*API for handling control signals */
+ inv_error_t inv_set_control_sensitivity(unsigned short controlSignal,
+ long sensitivity);
+ inv_error_t inv_set_control_func(unsigned short function);
+ inv_error_t inv_get_control_signal(unsigned short controlSignal,
+ unsigned short reset, long *data);
+ inv_error_t inv_get_grid_num(unsigned short controlSignal,
+ unsigned short reset, long *data);
+ inv_error_t inv_set_grid_thresh(unsigned short controlSignal,
+ long threshold);
+ inv_error_t inv_set_grid_max(unsigned short controlSignal, long maximum);
+ inv_error_t
+ inv_set_grid_callback(void (*func)
+ (unsigned short controlSignal, long *gridNum,
+ long *gridChange));
+ inv_error_t inv_set_control_data(unsigned short controlSignal,
+ unsigned short parameterArray,
+ unsigned short parameterNum);
+ inv_error_t inv_get_control_data(long *controlSignal, long *gridNum,
+ long *gridChange);
+ inv_error_t inv_update_control(struct inv_obj_t *inv_obj);
+ inv_error_t inv_enable_control(void);
+ inv_error_t inv_disable_control(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* MLCONTROL_H */