SuperCollider 3.11.2 keeps on crashing when initializing the Logitech Extreme 3D Pro with Modality on Ubuntu 22.04.1

Hello there,

I am trying to get the Logitech Extreme 3d Pro to work as a controller using the great Modality toolkit, but Supercollider crashes as soon as I try to initialize it. When I run:

MKtl.find(\hid);

The extreme 3d Pro shows up as:

/*** Possible MKtls for HID devices: ***/
	// [ product, vendor, (serial#) ]

// [ "Extreme 3D pro", "Logitech", "00000000002A" ]
	// Unknown - Create from lookupName and explore 
	// (or match with a generic desc):
MKtl('hid_0_extrem', 'hid_0_extreme_3d_pro');

When I then run:

MKtl('x', 'hid_0_extreme_3d_pro' );

It seems to briefly start polling the 3d Pro:

open device 0x562bb67477b0
start polling thread for -1233881168
HID: Opened device: a HIDInfo(Logitech, Extreme 3D pro, IDs:1133, 49685, /dev/hidraw4, 00000000002A, 22289, 0)
// MKtl('x') : opened device without desc file. 
// Maybe you want to explore this device?
MKtl('x').explore;

-> MKtl('x')

But then 3 seconds later it crashes:

Interpreter has crashed or stopped forcefully. [Exit code: 11]

Other HID and MIDI devices work perfectly with Modality or the other HID and MIDI classes.So the problem seems to be specifically related to the 3D Pro. When I try to initialize the 3D pro like this, I get the same interpreter crash.

~myhid = HID.open( 1133, 49685);

When I test the 3D Pro outside of SuperCollider inside the jstest-gtk, the joystick works perfectly.

My udev rules for /dev/hidraw4 are set up like this:
KERNEL==“hidraw*”, SUBSYSTEM==“hidraw”, MODE=“0664”, GROUP=“plugdev”

Does anyone have any idea how to solve this issue? Really need to get the 3D Pro working for a project.
Many thanks for any hints in the right direction!

All the best,
numina

Still trying to figure this out

Have you tried over on the github page, maybe raise an issue? GitHub - ModalityTeam/Modality-toolkit: A SuperCollider toolkit to simplify the creation of personal (electronic) instruments utilising hardware and software controllers of any kind.

1 Like

I had to make my own desc file for my newer Extreme 3d. I don’t remember why. You could try placing the code below in file called “logitech-extreme-3d-pro2.desc.scd” inside the MKtlDescriptions folder and see if it does the magic. From your description though, this is not the issue.

(
idInfo: "Extreme 3D pro_Logitech",
protocol: 'hid',
deviceName: "Extreme 3D pro_Logitech",
deviceType: '___',
elementTypes: [],
status: (
	linux: "unknown",
	osx: "unknown",
	win: "unknown"
),

// hardwarePages: [1, 2, 3, 4],

// deviceInfo: (
// vendorURI: 'http://company.com/products/this',
// manualURI: 'http://company.com/products/this/manual.pdf',
	// description: ,
	// features: [],
	// notes: ,
	// hasScribble: false
// ),

elementsDesc: (
	elements: [
		(
			key: \bt,
			shared: ('hidUsagePage': 9, 'elementType': 'button',
				'ioType': 'in', 'spec': \hidBut ),
			elements: [
				(key: '1', 'hidUsage': 1),
				(key: '2', 'hidUsage': 2),
				(key: '3', 'hidUsage': 3),
				(key: '4', 'hidUsage': 4),
				(key: '5', 'hidUsage': 5),
				(key: '6', 'hidUsage': 6),

				(key: '7', 'hidUsage': 7),
				(key: '8', 'hidUsage': 8),
				(key: '9', 'hidUsage': 9),
				(key: '10', 'hidUsage': 10),
				(key: '11', 'hidUsage': 11),
				(key: '12', 'hidUsage': 12)
			],
		),
		(
			key: \joy,
			shared: ('hidUsagePage': 1, 'elementType': 'joyAxis', 'ioType': 'in', 'spec': \cent1),
			elements: [
				(key: \x, 'hidUsage': 48),
				(key: \y, 'hidUsage': 49),
				(key: \z, 'hidUsage': 53)
			]
		),
		(
			key: \hat,
			'hidUsage': 57, 'hidUsagePage': 1, 'elementType': 'hatSwitch',
			'ioType': 'in', spec: \cent1inv, mode: \center),
		(
			key: \slider,
			'hidUsage': 54, 'hidUsagePage': 1, 'elementType': 'slider',
			'ioType': 'in', spec: \cent1inv, mode: \center
		)
	]
)
);

// elementsDesc: (
// 	elements: [
//
//
// 		// --------- input elements ----------
// 		( key: '_b1_', 'hidUsage': 1, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b2_', 'hidUsage': 2, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b3_', 'hidUsage': 3, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b4_', 'hidUsage': 4, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b5_', 'hidUsage': 5, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b6_', 'hidUsage': 6, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b7_', 'hidUsage': 7, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b8_', 'hidUsage': 8, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b9_', 'hidUsage': 9, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b10_', 'hidUsage': 10, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b11_', 'hidUsage': 11, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_b12_', 'hidUsage': 12, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'in', 'spec': 'hidBut' ),
// 		( key: '_X_', 'hidUsage': 48, 'hidUsagePage': 1, 'elementType': 'GenericDesktop', 'ioType': 'in', 'spec': '_X_' ),
// 		( key: '_Y_', 'hidUsage': 49, 'hidUsagePage': 1, 'elementType': 'GenericDesktop', 'ioType': 'in', 'spec': '_Y_' ),
// 		( key: '_Hat_switch_', 'hidUsage': 57, 'hidUsagePage': 1, 'elementType': 'GenericDesktop', 'ioType': 'in', 'spec': '_Hat_switch_' ),
// 		( key: '_Rz_', 'hidUsage': 53, 'hidUsagePage': 1, 'elementType': 'GenericDesktop', 'ioType': 'in', 'spec': '_Rz_' ),
// 		( key: '_Slider_', 'hidUsage': 54, 'hidUsagePage': 1, 'elementType': 'GenericDesktop', 'ioType': 'in', 'spec': '_Slider_' ),
//
// 		// --------- output elements ----------
// 		( key: '_b1_', 'hidUsage': 1, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b2_', 'hidUsage': 2, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b3_', 'hidUsage': 3, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b4_', 'hidUsage': 4, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b5_', 'hidUsage': 5, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b6_', 'hidUsage': 6, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b7_', 'hidUsage': 7, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b8_', 'hidUsage': 8, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b9_', 'hidUsage': 9, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b10_', 'hidUsage': 10, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b11_', 'hidUsage': 11, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_b12_', 'hidUsage': 12, 'hidUsagePage': 9, 'elementType': 'Button', 'ioType': 'out', 'spec': 'hidBut' ),
// 		( key: '_X_', 'hidUsage': 48, 'hidUsagePage': 1, 'elementType': 'GenericDesktop', 'ioType': 'out', 'spec': '_X_' ),
// 		( key: '_Y_', 'hidUsage': 49, 'hidUsagePage': 1, 'elementType': 'GenericDesktop', 'ioType': 'out', 'spec': '_Y_' ),
// 		( key: '_Hat_switch_', 'hidUsage': 57, 'hidUsagePage': 1, 'elementType': 'GenericDesktop', 'ioType': 'out', 'spec': '_Hat_switch_' ),
// 		( key: '_Rz_', 'hidUsage': 53, 'hidUsagePage': 1, 'elementType': 'GenericDesktop', 'ioType': 'out', 'spec': '_Rz_' ),
// 	( key: '_Slider_', 'hidUsage': 54, 'hidUsagePage': 1, 'elementType': 'GenericDesktop', 'ioType': 'out', 'spec': '_Slider_' ), 	]
// )
// );

Thanks for your suggestion. I also have the newer Extreme 3d and indeed created a new desc file resulting in the same crash as mentioned above. Just out of curiosity - what is the OS that you are on?

Otherwise I will raise indeed an issue on the Modality github page as Jordan suggested.

macOS 12.6. If you [are on] macOS try opening up Hexler Protokol and seeing if the data comes in under GamePad. It does with mine. If you don’t see it there, it is an issue with the controller or your OS, not Modality.

Sam

Thanks. Yes, I saw in the docs that it is confirmed that the Extreme 3D is working on OSX, but I am using Linux and sometimes Windows.

Maybe try it out in PD then.

1 Like

Just looked at Protokol again and there are mac, windows, and linux versions. This will at least show if you are getting the messages to the OS.

Sam

Good idea indeed! In PD the Extreme 3D works super smoothly. So I am routing it now via OSC from there to SuperCollider. Thanks for thinking along!
ps: and I added an issue to Modality github page.

1 Like