[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37606] branches/merwin-spacenav/intern/ ghost/intern/GHOST_NDOFManagerCocoa.mm: updated Mac code to work with latest 3Dx beta driver -- all buttons work now

Mike Erwin significant.bit at gmail.com
Fri Jun 17 23:04:23 CEST 2011


Revision: 37606
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37606
Author:   merwin
Date:     2011-06-17 21:04:23 +0000 (Fri, 17 Jun 2011)
Log Message:
-----------
updated Mac code to work with latest 3Dx beta driver -- all buttons work now

Modified Paths:
--------------
    branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerCocoa.mm

Modified: branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerCocoa.mm
===================================================================
--- branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerCocoa.mm	2011-06-17 20:01:24 UTC (rev 37605)
+++ branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerCocoa.mm	2011-06-17 21:04:23 UTC (rev 37606)
@@ -33,18 +33,17 @@
 static GHOST_SystemCocoa* ghost_system = NULL;
 static GHOST_NDOFManager* ndof_manager = NULL;
 
+// 3Dconnexion drivers before 10.x are "old"
+// not all buttons will work
+static bool has_old_driver = true;
+
 static void NDOF_DeviceAdded(io_connect_t connection)
 	{
 	printf("ndof: device added\n"); // change these: printf --> informational reports
 
-#if 0 // device preferences will be useful soon, but not for hardware model detection
+#if 0 // device preferences will be useful soon
 	ConnexionDevicePrefs p;
 	ConnexionGetCurrentDevicePrefs(kDevID_AnyDevice, &p);
-	printf("device type %d: %s\n", p.deviceID,
-		p.deviceID == kDevID_SpaceNavigator ? "SpaceNavigator" :
-		p.deviceID == kDevID_SpaceNavigatorNB ? "SpaceNavigator for Notebooks" :
-		p.deviceID == kDevID_SpaceExplorer ? "SpaceExplorer" :
-		"unknown");
 #endif
 
 	// determine exactly which device is plugged in
@@ -80,18 +79,12 @@
 					break;
 
 				case kConnexionCmdHandleButtons:
-
-					// s->buttons field has only 16 bits, not enough for SpacePilotPro
-					// look at raw USB report for more button bits
-					printf("ndof: button bits = [");
-					for (int i = 0; i < 8; ++i)
-						printf("%02x", s->report[i]);
-					printf("]\n");
-
-					ndof_manager->updateButtons(s->buttons, now);
+					{
+					int button_bits = has_old_driver ? s->buttons8 : s->buttons;
+					ndof_manager->updateButtons(button_bits, now);
 					ghost_system->notifyExternalEventProcessed();
 					break;
-
+					}
 				case kConnexionCmdAppSpecific:
 					printf("ndof: app-specific command, param = %hd, value = %d\n", s->param, s->value);
 					break;
@@ -104,9 +97,13 @@
 		case kConnexionMsgPrefsChanged:
 			printf("ndof: prefs changed\n"); // this includes app switches
 			break;
-		case kConnexionMsgDoAction:
-			printf("ndof: do action\n"); // no idea what this means
-			// 'calibrate device' in System Prefs sends this
+		case kConnexionMsgCalibrateDevice:
+			printf("ndof: calibrate\n"); // but what should blender do?
+			break;
+		case kConnexionMsgDoMapping:
+			printf("ndof: driver did something\n");
+			// sent when the driver itself consumes an NDOF event
+			// and performs whatever action is set in user prefs
 			// 3Dx header file says to ignore these
 			break;
 		default:
@@ -135,6 +132,14 @@
 			kConnexionClientModeTakeOver, kConnexionMaskAll);
 
 		printf("ndof: client id = %d\n", m_clientID);
+
+		if (SetConnexionClientButtonMask != NULL)
+			{
+			has_old_driver = false;
+			SetConnexionClientButtonMask(m_clientID, kConnexionMaskAllButtons);
+			}
+		else
+			printf("ndof: old 3Dx driver installed, some buttons may not work\n");
 		}
 	else
 		{




More information about the Bf-blender-cvs mailing list