[Bf-blender-cvs] [c3cec82] master: ndof: rework Mac driver glue

Mike Erwin noreply at git.blender.org
Sun Oct 25 21:19:59 CET 2015


Commit: c3cec828e82de70fe92eeb7c52869d24466d4109
Author: Mike Erwin
Date:   Sat Oct 24 19:58:06 2015 +0200
Branches: master
https://developer.blender.org/rBc3cec828e82de70fe92eeb7c52869d24466d4109

ndof: rework Mac driver glue

Load driver dynamically at runtime instead of weak-linking the
3Dconnexion framework. Driver no longer needed at build time!

Works with really old drivers (as in PowerMac old), more recent
versions, and the latest which allows us to process events on a
separate thread.

===================================================================

M	intern/ghost/CMakeLists.txt
M	intern/ghost/SConscript
M	intern/ghost/intern/GHOST_NDOFManager.h
D	intern/ghost/intern/GHOST_NDOFManager3Dconnexion.c
D	intern/ghost/intern/GHOST_NDOFManager3Dconnexion.h
M	intern/ghost/intern/GHOST_NDOFManagerCocoa.h
M	intern/ghost/intern/GHOST_NDOFManagerCocoa.mm
M	intern/ghost/intern/GHOST_SystemCocoa.mm

===================================================================

diff --git a/intern/ghost/CMakeLists.txt b/intern/ghost/CMakeLists.txt
index 761bcb4..948b4bf 100644
--- a/intern/ghost/CMakeLists.txt
+++ b/intern/ghost/CMakeLists.txt
@@ -166,11 +166,6 @@ elseif(APPLE AND NOT WITH_X11)
 
 			intern/GHOST_NDOFManagerCocoa.h
 		)
-
-		list(APPEND SRC_NDOF3DCONNEXION
-			intern/GHOST_NDOFManager3Dconnexion.c
-			intern/GHOST_NDOFManager3Dconnexion.h
-		)
 	endif()
 
 	if(WITH_CODEC_QUICKTIME)
@@ -338,8 +333,3 @@ endif()
 add_definitions(${GL_DEFINITIONS})
 
 blender_add_lib(bf_intern_ghost "${SRC}" "${INC}" "${INC_SYS}")
-
-# workaround for apple clang mangling extern "C" symbols
-if(WITH_INPUT_NDOF AND APPLE)
-	blender_add_lib(bf_intern_ghostndof3dconnexion "${SRC_NDOF3DCONNEXION}" "${INC}" "${INC_SYS}")
-endif()
diff --git a/intern/ghost/SConscript b/intern/ghost/SConscript
index 7856621..0abd2c2 100644
--- a/intern/ghost/SConscript
+++ b/intern/ghost/SConscript
@@ -33,7 +33,6 @@ Import ('env')
 window_system = env['OURPLATFORM']
 
 sources = env.Glob('intern/*.cpp')
-sources2 = env.Glob('intern/GHOST_NDOFManager3Dconnexion.c')
 if window_system == 'darwin':
     sources += env.Glob('intern/*.mm')
     #remove, will be readded below if needed.
@@ -193,7 +192,3 @@ elif window_system == 'darwin' and env['C_COMPILER_ID'] == 'gcc' and  env['CCVER
 
 else:
     env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15] )
-    
-if window_system == 'darwin' and env['WITH_BF_3DMOUSE']: # build seperate to circumvent extern "C" linkage issues
-    env.BlenderLib ('bf_intern_ghostndof3dconnexion', sources2, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15] )
-
diff --git a/intern/ghost/intern/GHOST_NDOFManager.h b/intern/ghost/intern/GHOST_NDOFManager.h
index 48a4881..ba82f37 100644
--- a/intern/ghost/intern/GHOST_NDOFManager.h
+++ b/intern/ghost/intern/GHOST_NDOFManager.h
@@ -107,10 +107,13 @@ typedef enum {
 class GHOST_NDOFManager
 {
 public:
-	GHOST_NDOFManager(GHOST_System &);
-
+	GHOST_NDOFManager(GHOST_System&);
 	virtual ~GHOST_NDOFManager() {}
 
+	// whether multi-axis functionality is available (via the OS or driver)
+	// does not imply that a device is plugged in or being used
+	virtual bool available() = 0;
+
 	// each platform's device detection should call this
 	// use standard USB/HID identifiers
 	bool setDevice(unsigned short vendor_id, unsigned short product_id);
diff --git a/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.c b/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.c
deleted file mode 100644
index 01e301f..0000000
--- a/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * ***** 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.
- *
- * Contributor(s):
- *   Jake Kauth on 9/12/13.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef WITH_INPUT_NDOF
-
-#include <ConnexionClientAPI.h>
-#include <stdio.h>
-
-#include "GHOST_NDOFManager3Dconnexion.h"
-
-/* It is to be noted that these implementations are linked in as
- * 'extern "C"' calls from GHOST_NDOFManagerCocoa.
- *
- * This is done in order to
- * preserve weak linking capability (which as of clang-3.3 and xcode5
- * breaks weak linking when there is name mangling of c++ libraries.)
- *
- * We need to have the weak linked file as pure C.  Therefore we build a 
- * compiled bridge from the real weak linked calls and the calls within C++
- *
- */
-
-OSErr GHOST_NDOFManager3Dconnexion_available(void)
-{
-	// extern unsigned int InstallConnexionHandlers() __attribute__((weak_import));
-	// Make the linker happy for the framework check (see link below for more info)
-	// http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html
-	return InstallConnexionHandlers != 0;
-	// this means that the driver is installed and dynamically linked to blender
-}
-
-OSErr GHOST_NDOFManager3Dconnexion_oldDRV()
-{
-	//extern unsigned int SetConnexionClientButtonMask() __attribute__((weak_import));
-	// Make the linker happy for the framework check (see link below for more info)
-	// http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html
-	return SetConnexionClientButtonMask != 0;
-	// this means that the driver has this symbol
-}
-
-UInt16 GHOST_NDOFManager3Dconnexion_RegisterConnexionClient(UInt32 signature, UInt8 *name, UInt16 mode, UInt32 mask)
-{
-	return RegisterConnexionClient(signature,  name,  mode,  mask);
-}
-
-void GHOST_NDOFManager3Dconnexion_SetConnexionClientButtonMask(UInt16 clientID, UInt32 buttonMask)
-{
-	return SetConnexionClientButtonMask( clientID,  buttonMask);
-}
-
-void GHOST_NDOFManager3Dconnexion_UnregisterConnexionClient(UInt16 clientID)
-{
-	return UnregisterConnexionClient( clientID);
-}
-
-OSErr GHOST_NDOFManager3Dconnexion_InstallConnexionHandlers(
-        ConnexionMessageHandlerProc messageHandler,
-        ConnexionAddedHandlerProc addedHandler,
-        ConnexionRemovedHandlerProc removedHandler)
-{
-	return InstallConnexionHandlers( messageHandler,  addedHandler,  removedHandler);
-}
-
-void GHOST_NDOFManager3Dconnexion_CleanupConnexionHandlers(void)
-{
-	return CleanupConnexionHandlers();
-}
-
-OSErr GHOST_NDOFManager3Dconnexion_ConnexionControl(UInt32 message, SInt32 param, SInt32 *result)
-{
-	return ConnexionControl( message,  param, result);
-}
-
-#endif // WITH_INPUT_NDOF
diff --git a/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.h b/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.h
deleted file mode 100644
index 9a84c14..0000000
--- a/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * ***** 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.
- *
- * Contributor(s):
- *   Jake Kauth on 9/12/13.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifndef __GHOST_NDOFMANAGER3DCONNEXION_H__
-#define __GHOST_NDOFMANAGER3DCONNEXION_H__
-
-#ifdef WITH_INPUT_NDOF
-#include <ConnexionClientAPI.h>
-
-
-OSErr GHOST_NDOFManager3Dconnexion_available(void);
-OSErr GHOST_NDOFManager3Dconnexion_oldDRV(void);
-OSErr			GHOST_NDOFManager3Dconnexion_InstallConnexionHandlers(ConnexionMessageHandlerProc messageHandler, ConnexionAddedHandlerProc addedHandler, ConnexionRemovedHandlerProc removedHandler);
-void			GHOST_NDOFManager3Dconnexion_CleanupConnexionHandlers(void);
-UInt16			GHOST_NDOFManager3Dconnexion_RegisterConnexionClient(UInt32 signature, UInt8 *name, UInt16 mode, UInt32 mask);
-void			GHOST_NDOFManager3Dconnexion_SetConnexionClientButtonMask(UInt16 clientID, UInt32 buttonMask);
-void			GHOST_NDOFManager3Dconnexion_UnregisterConnexionClient(UInt16 clientID);
-OSErr	GHOST_NDOFManager3Dconnexion_ConnexionControl(UInt32 message, SInt32 param, SInt32 *result);
-
-extern OSErr InstallConnexionHandlers(ConnexionMessageHandlerProc messageHandler, ConnexionAddedHandlerProc addedHandler, ConnexionRemovedHandlerProc removedHandler) __attribute__((weak_import));
-extern void		CleanupConnexionHandlers(void) __attribute__((weak_import));
-extern UInt16 RegisterConnexionClient(UInt32 signature, UInt8 *name, UInt16 mode, UInt32 mask) __attribute__((weak_import));
-extern void SetConnexionClientButtonMask(UInt16 clientID, UInt32 buttonMask) __attribute__((weak_import));
-extern void UnregisterConnexionClient(UInt16 clientID) __attribute__((weak_import));
-extern OSErr	ConnexionControl(UInt32 message, SInt32 param, SInt32 *result) __attribute__((weak_import));
-
-
-#endif // WITH_INPUT_NDOF
-
-#endif // #include guard
diff --git a/intern/ghost/intern/GHOST_NDOFManagerCocoa.h b/intern/ghost/intern/GHOST_NDOFManagerCocoa.h
index 2a1b492..464ba48 100644
--- a/intern/ghost/intern/GHOST_NDOFManagerCocoa.h
+++ b/intern/ghost/intern/GHOST_NDOFManagerCocoa.h
@@ -26,22 +26,7 @@
 
 #ifdef WITH_INPUT_NDOF
 
-
-extern "C" {
-#include <ConnexionClientAPI.h>
-#include <stdio.h>
-}
-
-
 #include "GHOST_NDOFManager.h"
-extern "C"  OSErr   GHOST_NDOFManager3Dconnexion_available(void);
-extern "C"  OSErr   GHOST_NDOFManager3Dconnexion_oldDRV(void);
-extern "C"  OSErr   GHOST_NDOFManager3Dconnexion_InstallConnexionHandlers(ConnexionMessageHandlerProc messageHandler, ConnexionAddedHandlerProc addedHandler, ConnexionRemovedHandlerProc removedHandler);
-extern "C"  void GHOST_NDOFManager3Dconnexion_CleanupConnexionHandlers(void);
-extern "C"  UInt16  GHOST_NDOFManager3Dconnexion_RegisterConnexionClient(UInt32 signature, UInt8 *name, UInt16 mode, UInt32 mask);
-extern "C"  void    GHOST_NDOFManager3Dconnexion_SetConnexionClientButtonMask(UInt16 clientID, UInt32 buttonMask);
-extern "C"  void	GHOST_NDOFManager3Dconnexion_UnregisterConnexionClient(UInt16 clientID);
-extern "C"  OSErr	GHOST_NDOFManager3Dconnexion_ConnexionControl(UInt32 message, SInt32 param, SInt32 *result);
 
 // Event capture is handled within the NDOF mana

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list