//- // ========================================================================== // Copyright (C) 1995 - 2006 Autodesk, Inc. and/or its licensors. All // rights reserved. // // The coded instructions, statements, computer programs, and/or related // material (collectively the "Data") in these files contain unpublished // information proprietary to Autodesk, Inc. ("Autodesk") and/or its // licensors, which is protected by U.S. and Canadian federal copyright // law and by international treaties. // // The Data is provided for use exclusively by You. You have the right // to use, modify, and incorporate this Data into other products for // purposes authorized by the Autodesk software license agreement, // without fee. // // The copyright notices in the Software and this entire statement, // including the above license grant, this restriction and the // following disclaimer, must be included in all copies of the // Software, in whole or in part, and all derivative works of // the Software, unless such copies or derivative works are solely // in the form of machine-executable object code generated by a // source language processor. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. // AUTODESK DOES NOT MAKE AND HEREBY DISCLAIMS ANY EXPRESS OR IMPLIED // WARRANTIES INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF // NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR // PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE, OR // TRADE PRACTICE. IN NO EVENT WILL AUTODESK AND/OR ITS LICENSORS // BE LIABLE FOR ANY LOST REVENUES, DATA, OR PROFITS, OR SPECIAL, // DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES, EVEN IF AUTODESK // AND/OR ITS LICENSORS HAS BEEN ADVISED OF THE POSSIBILITY // OR PROBABILITY OF SUCH DAMAGES. // // ========================================================================== //+ ////////////////////////////////////////////////////////////////// // // 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, PLUGIN_COMPANY, "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; }