1895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/* 2895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall $License: 3895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall Copyright 2011 InvenSense, Inc. 4895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 5895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall Licensed under the Apache License, Version 2.0 (the "License"); 6895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall you may not use this file except in compliance with the License. 7895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall You may obtain a copy of the License at 8895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 9895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall http://www.apache.org/licenses/LICENSE-2.0 10895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 11895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall Unless required by applicable law or agreed to in writing, software 12895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall distributed under the License is distributed on an "AS IS" BASIS, 13895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall See the License for the specific language governing permissions and 15895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall limitations under the License. 16895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall $ 17895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall */ 18895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/******************************************************************************* 19895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * 20895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * $RCSfile: mlcontrol.h,v $ 21895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * 22895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * $Date: 2011-06-10 20:13:08 -0700 (Fri, 10 Jun 2011) $ 23895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * 24895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * $Revision: 5629 $ 25895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * 26895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall *******************************************************************************/ 27895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 28895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/*******************************************************************************/ 29895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/** @defgroup INV_CONTROL 30895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 31895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall The Control processes gyroscopes and accelerometers to provide control 32895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall signals that can be used in user interfaces to manipulate objects such as 33895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall documents, images, cursors, menus, etc. 34895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 35895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall @{ 36895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall @file mlcontrol.h 37895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall @brief Header file for the Control Library. 38895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall*/ 39895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/******************************************************************************/ 40895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#ifndef MLCONTROL_H 41895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCONTROL_H 42895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 43895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#ifdef __cplusplus 44895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallextern "C" { 45895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif 46895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 47895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#include "mltypes.h" 48895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#include "ml.h" 49895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#ifdef INV_INCLUDE_LEGACY_HEADERS 50895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#include "mlcontrol_legacy.h" 51895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif 52895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 53895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* ------------ */ 54895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* - Defines. - */ 55895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* ------------ */ 56895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 57895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 58895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* Control Signals. */ 59895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 60895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 61895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_CONTROL_1 0x0001 62895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_CONTROL_2 0x0002 63895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_CONTROL_3 0x0004 64895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_CONTROL_4 0x0008 65895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 66895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 67895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* Control Functions. */ 68895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 69895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 70895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_GRID 0x0001 // Indicates that the user will be controlling a system that 71895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // has discrete steps, such as icons, menu entries, pixels, etc. 72895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_SMOOTH 0x0002 // Indicates that noise from unintentional motion should be filtered out. 73895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_DEAD_ZONE 0x0004 // Indicates that a dead zone should be used, below which sensor data is set to zero. 74895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_HYSTERESIS 0x0008 // Indicates that, when INV_GRID is selected, hysteresis should be used to prevent 75895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // the control signal from switching rapidly across elements of the grid.</dd> 76895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 77895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 78895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* Integral reset options. */ 79895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 80895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 81895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_NO_RESET 0x0000 82895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_RESET 0x0001 83895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 84895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 85895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* Data select options. */ 86895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 87895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 88895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_CTRL_SIGNAL 0x0000 89895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_CTRL_GRID_NUM 0x0001 90895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 91895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 92895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* Control Axis. */ 93895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 94895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_CTRL_PITCH 0x0000 // (INV_PITCH >> 1) 95895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_CTRL_ROLL 0x0001 // (INV_ROLL >> 1) 96895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define INV_CTRL_YAW 0x0002 // (INV_YAW >> 1) 97895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 98895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 99895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* control_params structure default values. */ 100895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*******************************************************************************/ 101895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 102895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_SENSITIVITY_0_DEFAULT 128 103895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_SENSITIVITY_1_DEFAULT 128 104895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_SENSITIVITY_2_DEFAULT 128 105895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_SENSITIVITY_3_DEFAULT 128 106895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_FUNCTIONS_DEFAULT 0 107895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_CONTROL_SIGNALS_DEFAULT 0 108895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_PARAMETER_ARRAY_0_DEFAULT 0 109895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_PARAMETER_ARRAY_1_DEFAULT 0 110895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_PARAMETER_ARRAY_2_DEFAULT 0 111895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_PARAMETER_ARRAY_3_DEFAULT 0 112895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_PARAMETER_AXIS_0_DEFAULT 0 113895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_PARAMETER_AXIS_1_DEFAULT 0 114895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_PARAMETER_AXIS_2_DEFAULT 0 115895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_PARAMETER_AXIS_3_DEFAULT 0 116895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_GRID_THRESHOLD_0_DEFAULT 1 117895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_GRID_THRESHOLD_1_DEFAULT 1 118895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_GRID_THRESHOLD_2_DEFAULT 1 119895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_GRID_THRESHOLD_3_DEFAULT 1 120895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_GRID_MAXIMUM_0_DEFAULT 0 121895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_GRID_MAXIMUM_1_DEFAULT 0 122895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_GRID_MAXIMUM_2_DEFAULT 0 123895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_GRID_MAXIMUM_3_DEFAULT 0 124895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define MLCTRL_GRID_CALLBACK_DEFAULT 0 125895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 126895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* --------------- */ 127895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* - Structures. - */ 128895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* --------------- */ 129895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 130895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /**************************************************************************/ 131895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* Control Parameters Structure. */ 132895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /**************************************************************************/ 133895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 134895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall struct control_params { 135895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // Sensitivity of control signal 1, 2, 3, and 4. 136895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short sensitivity[4]; 137895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // Indicates what functions will be used. Can be a bitwise OR of INV_GRID, 138895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // ML_SMOOT, INV_DEAD_ZONE, and INV_HYSTERISIS. 139895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short functions; 140895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // Indicates which parameter array is being assigned to a control signal. 141895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // Must be one of INV_GYROS, INV_ANGULAR_VELOCITY, or 142895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // INV_ANGULAR_VELOCITY_WORLD. 143895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short parameterArray[4]; 144895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // Indicates which axis of the parameter array will be used. Must be 145895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // INV_ROLL, INV_PITCH, or INV_YAW. 146895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short parameterAxis[4]; 147895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // Threshold of the control signal at which the grid number will be 148895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // incremented or decremented. 149895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long gridThreshold[4]; 150895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // Maximum grid number for the control signal. 151895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long gridMaximum[4]; 152895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // User defined callback that will trigger when the grid location changes. 153895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall void (*gridCallback) ( 154895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // Indicates which control signal crossed a grid threshold. Must be 155895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // one of INV_CONTROL_1, INV_CONTROL_2, INV_CONTROL_3 or INV_CONTROL_4. 156895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short controlSignal, 157895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // An array of four numbers representing the grid number for each 158895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // control signal. 159895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long *gridNum, 160895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // An array of four numbers representing the change in grid number 161895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall // for each control signal. 162895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long *gridChange); 163895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall }; 164895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 165895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall struct control_obj { 166895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 167895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long gridNum[4]; // Current grid number for each control signal. 168895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long controlInt[4]; // Current data for each control signal. 169895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long lastGridNum[4]; // Previous grid number 170895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned char controlDir[4]; // Direction of control signal 171895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long gridChange[4]; // Change in grid number 172895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 173895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long mlGridNumDMP[4]; 174895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long gridNumOffset[4]; 175895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long prevDMPGridNum[4]; 176895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 177895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall }; 178895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 179895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* --------------------- */ 180895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* - Function p-types. - */ 181895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* --------------------- */ 182895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 183895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /**************************************************************************/ 184895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /* ML Control Functions. */ 185895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /**************************************************************************/ 186895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 187895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short inv_get_control_params(struct control_params *params); 188895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short inv_set_control_params(struct control_params *params); 189895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 190895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall /*API for handling control signals */ 191895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_set_control_sensitivity(unsigned short controlSignal, 192895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long sensitivity); 193895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_set_control_func(unsigned short function); 194895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_get_control_signal(unsigned short controlSignal, 195895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short reset, long *data); 196895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_get_grid_num(unsigned short controlSignal, 197895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short reset, long *data); 198895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_set_grid_thresh(unsigned short controlSignal, 199895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long threshold); 200895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_set_grid_max(unsigned short controlSignal, long maximum); 201895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t 202895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_set_grid_callback(void (*func) 203895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall (unsigned short controlSignal, long *gridNum, 204895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long *gridChange)); 205895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_set_control_data(unsigned short controlSignal, 206895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short parameterArray, 207895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall unsigned short parameterNum); 208895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_get_control_data(long *controlSignal, long *gridNum, 209895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall long *gridChange); 210895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_update_control(struct inv_obj_t *inv_obj); 211895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_enable_control(void); 212895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall inv_error_t inv_disable_control(void); 213895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall 214895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#ifdef __cplusplus 215895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall} 216895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif 217895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif /* MLCONTROL_H */ 218