217 lines
9.8 KiB
C
217 lines
9.8 KiB
C
/*
|
|
$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 */
|