// **************************************************************************** // // CChannelMask.h // // Include file for interfacing with the CChannelMask and CChMaskDsp // classes. // Set editor tabs to 3 for your viewing pleasure. // // CChannelMask is a handy way to specify a group of pipes simultaneously. // It should really be called "CPipeMask", but the class name predates // the term "pipe". // // CChMaskDsp is used in the comm page to specify a group of channels // at once; these are read by the DSP and must therefore be kept // in little-endian format. // //--------------------------------------------------------------------------- // // ---------------------------------------------------------------------------- // // This file is part of Echo Digital Audio's generic driver library. // Copyright Echo Digital Audio Corporation (c) 1998 - 2005 // All rights reserved // www.echoaudio.com // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // **************************************************************************** // Prevent problems with multiple includes #ifndef _CHMASKOBJECT_ #define _CHMASKOBJECT_ // // Defines // typedef unsigned long CH_MASK; #define CH_MASK_BITS (sizeof( CH_MASK ) * 8) // Max bits per mask entry #define ECHO_INVALID_CHANNEL ((WORD)(-1)) // Marks unused channel # typedef unsigned long CH_MASK_DSP; #define CH_MASK_DSP_BITS (sizeof( CH_MASK_DSP ) * 8) // Max bits per mask entry /**************************************************************************** CChannelMask ****************************************************************************/ class CChannelMask { protected: #ifdef ECHO_OS9 friend class CInOutChannelMask; #endif CH_MASK m_Mask; // One bit per output or input channel public: CChannelMask(); ~CChannelMask() {} CH_MASK GetMask() { return m_Mask; } // Returns TRUE if no bits set BOOL IsEmpty(); // Set the wPipeIndex bit in the mask void SetIndexInMask( WORD wPipeIndex ); // Clear the wPipeIndex bit in the mask void ClearIndexInMask( WORD wPipeIndex ); // Return the next bit set starting with wStartPipeIndex as an index. // If nothing set, returns ECHO_INVALID_CHANNEL. // Use this interface for enumerating thru a channel mask. WORD GetIndexFromMask( WORD wStartPipeIndex ); // Test driver channel index in mask. // Return TRUE if set BOOL TestIndexInMask( WORD wPipeIndex ); // Clear all bits in the mask void Clear(); // Clear bits in this mask that are in SrcMask void ClearMask( CChannelMask SrcMask ); // Return TRUE if any bits in source mask are set in this mask BOOL Test( CChannelMask * pSrcMask ); // // Return TRUE if the Test Mask contains all of the channels // enabled in this instance. // Use to be sure all channels in this instance exist in // another instance. // BOOL IsSubsetOf( CChannelMask& TstMask ); // // Return TRUE if the Test Mask contains at least one of the channels // enabled in this instance. // Use to find out if any channels in this instance exist in // another instance. // BOOL IsIntersectionOf( CChannelMask& TstMask ); // // Overload new & delete so memory for this object is allocated // from non-paged memory. // PVOID operator new( size_t Size ); VOID operator delete( PVOID pVoid ); // // Macintosh compiler likes "class" after friend, PC doesn't care // friend class CChMaskDsp; // Return TRUE if source mask equals this mask friend BOOLEAN operator == ( CONST CChannelMask &LVal, CONST CChannelMask &RVal ); // Copy mask bits in source to this mask CChannelMask& operator = (CONST CChannelMask & RVal); // Add mask bits in source to this mask VOID operator += (CONST CChannelMask & RVal); // Subtract mask bits in source to this mask VOID operator -= (CONST CChannelMask & RVal); // AND mask bits in source to this mask VOID operator &= (CONST CChannelMask & RVal); // OR mask bits in source to this mask VOID operator |= (CONST CChannelMask & RVal); protected : // // Store an output bit mask and an input bitmask. // We assume here that the # of outputs fits in one mask reg // void SetMask( CH_MASK OutMask, CH_MASK InMask, int nOutputs ); void SetOutMask( CH_MASK OutMask, int nOutputs ); void SetInMask( CH_MASK InMask, int nOutputs ); // // Retrieve an output bit mask and an input bitmask. // We assume here that the # of outputs fits in one mask reg // void GetMask( CH_MASK & OutMask, CH_MASK & InMask, int nOutputs ); CH_MASK GetOutMask( int nOutputs ); CH_MASK GetInMask( int nOutputs ); }; // class CChannelMask typedef CChannelMask * PCChannelMask; /**************************************************************************** CChMaskDsp ****************************************************************************/ class CChMaskDsp { public: CH_MASK_DSP m_Mask; // One bit per output or input channel // 32 bits total CChMaskDsp(); ~CChMaskDsp() {} // Returns TRUE if no bits set BOOL IsEmpty(); // Set the wPipeIndex bit in the mask void SetIndexInMask( WORD wPipeIndex ); // Clear the wPipeIndex bit in the mask void ClearIndexInMask( WORD wPipeIndex ); // Test pipe index in mask. // Return TRUE if set BOOL TestIndexInMask( WORD wPipeIndex ); // Clear all bits in the mask void Clear(); // // Overload new & delete so memory for this object is allocated // from non-paged memory. // PVOID operator new( size_t Size ); VOID operator delete( PVOID pVoid ); // // Macintosh compiler likes "class" after friend, PC doesn't care // friend class CChannelMask; // Copy mask bits in source to this mask CChMaskDsp& operator = (CONST CChannelMask & RVal); protected : }; // class CChMaskDsp typedef CChMaskDsp * PCChMaskDsp; #endif // _CHMASKOBJECT_ // CChannelMask.h