[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49266] branches/soc-2012-swiss_cheese/ intern/ghost: Adding Initial sensor API in GHOST
Alexander Kuznetsov
kuzsasha at gmail.com
Thu Jul 26 23:50:02 CEST 2012
Revision: 49266
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49266
Author: alexk
Date: 2012-07-26 21:49:58 +0000 (Thu, 26 Jul 2012)
Log Message:
-----------
Adding Initial sensor API in GHOST
Test sensor availibility:
getSensorsAvailability()
Enable or disable sensors:
setSensorsState()
Sensors are disabled by default
You need to supply type of sensor:
1 - Accelerometer
2 - Gyroscope
3 - Magnetic Sensor
(Please don't switch order, just append new sensors. It is hardcoded in Android)
Data is stored as a vectror in GHOST_TEventSensorData
with dimension of 3 for Accelerometer, Gyroscope and Magnetic Sensor
Other sensors can have differnt dimensions
Modified Paths:
--------------
branches/soc-2012-swiss_cheese/intern/ghost/CMakeLists.txt
branches/soc-2012-swiss_cheese/intern/ghost/GHOST_C-api.h
branches/soc-2012-swiss_cheese/intern/ghost/GHOST_ISystem.h
branches/soc-2012-swiss_cheese/intern/ghost/GHOST_Types.h
branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_C-api.cpp
branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_System.cpp
Added Paths:
-----------
branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_EventSensor.h
Modified: branches/soc-2012-swiss_cheese/intern/ghost/CMakeLists.txt
===================================================================
--- branches/soc-2012-swiss_cheese/intern/ghost/CMakeLists.txt 2012-07-26 21:22:42 UTC (rev 49265)
+++ branches/soc-2012-swiss_cheese/intern/ghost/CMakeLists.txt 2012-07-26 21:49:58 UTC (rev 49266)
@@ -75,6 +75,7 @@
intern/GHOST_EventString.h
intern/GHOST_EventTrackpad.h
intern/GHOST_EventWheel.h
+ intern/GHOST_EventSensor.h
intern/GHOST_ModifierKeys.h
intern/GHOST_System.h
intern/GHOST_SystemPaths.h
Modified: branches/soc-2012-swiss_cheese/intern/ghost/GHOST_C-api.h
===================================================================
--- branches/soc-2012-swiss_cheese/intern/ghost/GHOST_C-api.h 2012-07-26 21:22:42 UTC (rev 49265)
+++ branches/soc-2012-swiss_cheese/intern/ghost/GHOST_C-api.h 2012-07-26 21:49:58 UTC (rev 49266)
@@ -420,7 +420,31 @@
GHOST_TButtonMask mask,
int *isDown);
+/***************************************************************************************
+ * Hardware Sensor operations
+ ***************************************************************************************/
+/**
+ * Returns the availability of sensor.
+ * @param systemhandle The handle to the system
+ * @param type The type of sensor.
+ * @return Indication of availability.
+ */
+extern GHOST_TSuccess GHOST_getSensorsAvailability(GHOST_SystemHandle systemhandle,
+ GHOST_TSensorTypes type);
+
+/**
+ * Enables or disables specific sensor.
+ * @param systemhandle The handle to the system
+ * @param type The type of sensor.
+ * @param enable 1 = enable, 0 = disable
+ * @return Indication of success.
+ */
+extern GHOST_TSuccess GHOST_setSensorsState(GHOST_SystemHandle systemhandle,
+ GHOST_TSensorTypes type,
+ int enable);
+
+
/***************************************************************************************
* Drag'n'drop operations
***************************************************************************************/
Modified: branches/soc-2012-swiss_cheese/intern/ghost/GHOST_ISystem.h
===================================================================
--- branches/soc-2012-swiss_cheese/intern/ghost/GHOST_ISystem.h 2012-07-26 21:22:42 UTC (rev 49265)
+++ branches/soc-2012-swiss_cheese/intern/ghost/GHOST_ISystem.h 2012-07-26 21:49:58 UTC (rev 49266)
@@ -367,7 +367,27 @@
*/
virtual GHOST_TSuccess getButtonState(GHOST_TButtonMask mask, bool& isDown) const = 0;
+
+ /***************************************************************************************
+ * Hardware Sensor operations
+ ***************************************************************************************/
+
/**
+ * Returns the availability of sensor.
+ * @param type The type of sensor.
+ * @return Indication of availability.
+ */
+ virtual GHOST_TSuccess getSensorsAvailability(GHOST_TSensorTypes type) = 0;
+
+ /**
+ * Enables or disables specific sensor.
+ * @param type The type of sensor.
+ * @param enable 1 = enable, 0 = disable
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess setSensorsState(GHOST_TSensorTypes type, int enable) = 0;
+
+ /**
* Toggles console
* @action 0 - Hides
* 1 - Shows
Modified: branches/soc-2012-swiss_cheese/intern/ghost/GHOST_Types.h
===================================================================
--- branches/soc-2012-swiss_cheese/intern/ghost/GHOST_Types.h 2012-07-26 21:22:42 UTC (rev 49265)
+++ branches/soc-2012-swiss_cheese/intern/ghost/GHOST_Types.h 2012-07-26 21:49:58 UTC (rev 49266)
@@ -170,6 +170,8 @@
GHOST_kEventKeyUp,
// GHOST_kEventKeyAuto,
+ GHOST_kEventSensor,
+
GHOST_kEventQuit,
GHOST_kEventWindowClose,
@@ -496,7 +498,20 @@
char utf8_buf[6];
} GHOST_TEventKeyData;
+typedef enum {
+ GHOST_kSensorAccelerometer = 1,
+ GHOST_kSensorGyroscope,
+ GHOST_kSensorMagnetic
+
+} GHOST_TSensorTypes;
+
typedef struct {
+ GHOST_TSensorTypes type;
+ float dv[3];
+
+} GHOST_TEventSensorData;
+
+typedef struct {
/** Number of pixels on a line. */
GHOST_TUns32 xPixels;
/** Number of lines. */
@@ -508,6 +523,7 @@
} GHOST_DisplaySetting;
+
#ifdef _WIN32
typedef long GHOST_TEmbedderWindowID;
#endif // _WIN32
Modified: branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_C-api.cpp
===================================================================
--- branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_C-api.cpp 2012-07-26 21:22:42 UTC (rev 49265)
+++ branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_C-api.cpp 2012-07-26 21:49:58 UTC (rev 49266)
@@ -403,6 +403,23 @@
}
+extern GHOST_TSuccess GHOST_getSensorsAvailability(GHOST_SystemHandle systemhandle,
+ GHOST_TSensorTypes type)
+{
+ GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
+
+ return system->getSensorsAvailability(type);
+}
+
+extern GHOST_TSuccess GHOST_setSensorsState(GHOST_SystemHandle systemhandle,
+ GHOST_TSensorTypes type,
+ int enable)
+{
+ GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
+
+ return system->setSensorsState(type, enable && 1);
+}
+
void GHOST_setAcceptDragOperation(GHOST_WindowHandle windowhandle, GHOST_TInt8 canAccept)
{
GHOST_IWindow *window = (GHOST_IWindow *) windowhandle;
Added: branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_EventSensor.h
===================================================================
--- branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_EventSensor.h (rev 0)
+++ branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_EventSensor.h 2012-07-26 21:49:58 UTC (rev 49266)
@@ -0,0 +1,91 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2012 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ * Alexandr Kuznetsov
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file ghost/intern/GHOST_EventSensor.h
+ * \ingroup GHOST
+ * Declaration of GHOST_EventSensor class.
+ */
+
+#ifndef __GHOST_EVENTSENSOR_H__
+#define __GHOST_EVENTSENSOR_H__
+
+#include "GHOST_Event.h"
+#include "GHOST_Types.h"
+
+/**
+ * Hardware sensor event.
+ * Like Acclerometer and gyroscope.
+ * Acceleromoter and gyroscope have 3D vector
+ * While others have 1D vectors (and data for other fields is not specified)
+ */
+class GHOST_EventSensor : public GHOST_Event
+{
+public:
+ GHOST_EventSensor(GHOST_TUns64 msec, GHOST_IWindow *window, GHOST_TSensorTypes subtype, float *v)
+ : GHOST_Event(msec, GHOST_kEventSensor, window)
+ {
+ m_SensorEventData.type = subtype;
+
+ m_SensorEventData.dv[0] = v[0];
+ m_SensorEventData.dv[1] = v[1];
+ m_SensorEventData.dv[2] = v[2];
+
+ m_data = &m_SensorEventData;
+ }
+
+
+ GHOST_EventSensor(GHOST_TUns64 msec, GHOST_IWindow *window, GHOST_TSensorTypes subtype, float v)
+ : GHOST_Event(msec, GHOST_kEventSensor, window)
+ {
+ m_SensorEventData.type = subtype;
+
+ m_SensorEventData.dv[0] = v;
+
+ m_data = &m_SensorEventData;
+ }
+
+
+ GHOST_EventSensor(GHOST_TUns64 msec, GHOST_IWindow *window, GHOST_TSensorTypes subtype, float v1, float v2, float v3)
+ : GHOST_Event(msec, GHOST_kEventSensor, window)
+ {
+ m_SensorEventData.type = subtype;
+
+ m_SensorEventData.dv[0] = v1;
+ m_SensorEventData.dv[1] = v2;
+ m_SensorEventData.dv[2] = v3;
+
+ m_data = &m_SensorEventData;
+ }
+
+
+protected:
+
+ GHOST_TEventSensorData m_SensorEventData;
+};
+
+
+#endif // __GHOST_EVENTSENSOR_H__
+
Modified: branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_System.cpp
===================================================================
--- branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_System.cpp 2012-07-26 21:22:42 UTC (rev 49265)
+++ branches/soc-2012-swiss_cheese/intern/ghost/intern/GHOST_System.cpp 2012-07-26 21:49:58 UTC (rev 49266)
@@ -298,6 +298,16 @@
return success;
}
+GHOST_TSuccess GHOST_System::getSensorsAvailability(GHOST_TSensorTypes type)
+{
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess GHOST_System::setSensorsState(GHOST_TSensorTypes type, int enable)
+{
+ return GHOST_kFailure;
+}
+
GHOST_TSuccess GHOST_System::init()
{
m_timerManager = new GHOST_TimerManager();
More information about the Bf-blender-cvs
mailing list