//- // ========================================================================== // Copyright (C) 1995 - 2005 Alias Systems Corp. and/or its licensors. All // rights reserved. // // The coded instructions, statements, computer programs, and/or related // material (collectively the "Data") in these files are provided by Alias // Systems Corp. ("Alias") and/or its licensors for the exclusive use of the // Customer (as defined in the Alias Software License Agreement that // accompanies this Alias software). Such Customer has the right to use, // modify, and incorporate the Data into other products and to distribute such // products for use by end-users. // // THE DATA IS PROVIDED "AS IS". ALIAS HEREBY DISCLAIMS ALL WARRANTIES // RELATING TO THE DATA, INCLUDING, WITHOUT LIMITATION, ANY AND ALL EXPRESS OR // IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. IN NO EVENT SHALL ALIAS BE LIABLE FOR ANY DAMAGES // WHATSOEVER, WHETHER DIRECT, INDIRECT, SPECIAL, OR PUNITIVE, WHETHER IN AN // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, OR IN EQUITY, // ARISING OUT OF ACCESS TO, USE OF, OR RELIANCE UPON THE DATA. // ========================================================================== //+ ////////////////////////////////////////////////////////////////// // // JLCVCRdevice // // Description: // The jlcVcr class is an interface to the // JLCooper midi VCR control box. // ////////////////////////////////////////////////////////////////// #if defined (LINUX) || defined (SGI) #include #endif #include #include #include #include #include #include #include #define kVCRRewindButtonName "rewind" #define kVCRRewindButtonIndex 0 #define kVCRForwardButtonName "forward" #define kVCRForwardButtonIndex 1 #define kVCRStopButtonName "stop" #define kVCRStopButtonIndex 2 #define kVCRPlayButtonName "play" #define kVCRPlayButtonIndex 3 #define kVCRRecordButtonName "record" #define kVCRRecordButtonIndex 4 #define kVCRLastButtonIndex 5 #define kVCRScrubWheelName "scrub" #define kVCRScrubWheelIndex 0 #define kVCRLastAxisIndex 1 #define kVCRRewindUp 0x07 #define kVCRRewindDown 0x47 #define kVCRForwardUp 0x06 #define kVCRForwardDown 0x46 #define kVCRStopUp 0x05 #define kVCRStopDown 0x45 #define kVCRPlayUp 0x04 #define kVCRPlayDown 0x44 #define kVCRRecordUp 0x00 #define kVCRRecordDown 0x40 class jlcVcr : public MPxMidiInputDevice { public: jlcVcr(); virtual ~jlcVcr(); virtual void nameAxes(); virtual void nameButtons(); static void* creator(); protected: virtual MDeviceState* deviceState(); #if defined (LINUX) || defined (SGI) virtual MDeviceState* deviceState(MDevent&); #endif }; jlcVcr::jlcVcr() { setDegreesOfFreedom( kVCRLastAxisIndex ); setNumberOfButtons( kVCRLastButtonIndex ); } jlcVcr::~jlcVcr() {} void* jlcVcr::creator() { return new jlcVcr(); } // Name the buttons of this device void jlcVcr::nameButtons() { MString name; name.set(kVCRRewindButtonName); setNamedButton(name, kVCRRewindButtonIndex); name.set(kVCRForwardButtonName); setNamedButton(name, kVCRForwardButtonIndex); name.set(kVCRStopButtonName); setNamedButton(name, kVCRStopButtonIndex); name.set(kVCRPlayButtonName); setNamedButton(name, kVCRPlayButtonIndex); name.set(kVCRRecordButtonName); setNamedButton(name, kVCRRecordButtonIndex); } // Name the axes of this device void jlcVcr::nameAxes() { MString name(kVCRScrubWheelName); MDeviceChannel* scrubChannel = new MDeviceChannel(name, NULL, kVCRScrubWheelIndex); addChannel( *scrubChannel ); } MDeviceState* jlcVcr::deviceState() { return MPxMidiInputDevice::deviceState(); } // If this midi event belongs to this device then turn it // into a MDeviceState. Otherwise return NULL. #if defined (LINUX) || defined (SGI) MDeviceState* jlcVcr::deviceState(MDevent& mde) { MDeviceState * device_state = deviceState(); if ( !device_state->isNull() && (mde.msglen == 6) && (mde.sysexmsg[1] == 0x15) && (mde.sysexmsg[2] == 0x10)) { if (mde.sysexmsg[3] == 0) { // Button Event switch (mde.sysexmsg[4]) { case kVCRRewindUp: device_state->setButtonState(false, kVCRRewindButtonIndex); break; case kVCRRewindDown: device_state->setButtonState(true, kVCRRewindButtonIndex); break; case kVCRForwardUp: device_state->setButtonState(false, kVCRForwardButtonIndex); break; case kVCRForwardDown: device_state->setButtonState(true, kVCRForwardButtonIndex); break; case kVCRStopUp: device_state->setButtonState(false, kVCRStopButtonIndex); break; case kVCRStopDown: device_state->setButtonState(true, kVCRStopButtonIndex); break; case kVCRPlayUp: device_state->setButtonState(false, kVCRPlayButtonIndex); break; case kVCRPlayDown: device_state->setButtonState(true, kVCRPlayButtonIndex); break; case kVCRRecordUp: device_state->setButtonState(false, kVCRRecordButtonIndex); break; case kVCRRecordDown: device_state->setButtonState(true, kVCRRecordButtonIndex); break; } device_state->setDevicePosition(0.0, kVCRScrubWheelIndex); } else { // The scrub wheel moved int c = mde.sysexmsg[4]; if (c & 0x40) { // Check the sign bit c = c - 128; } device_state->setDevicePosition(c, kVCRScrubWheelIndex); } return device_state; } else { return NULL; } } #endif ///////////////////////////////////////////////////////// // // Register the device // ///////////////////////////////////////////////////////// MStatus initializePlugin( MObject obj ) { MStatus status; MFnPlugin plugin( obj, "Alias", "3.0", "Any"); status = plugin.registerDevice("jlcVcr", jlcVcr::creator ); if (!status) { status.perror("registerDevice"); return status; } return status; } MStatus uninitializePlugin( MObject obj ) { MStatus status; MFnPlugin plugin( obj ); status = plugin.deregisterDevice( "jlcVcr" ); if (!status) { status.perror("deregisterDevice"); return status; } return status; }