www.pudn.com > openh323-v1_15_1-src.zip > vpblid.h
/* * vpblid.h * * Voicetronix VPB4 line interface device * * Copyright (c) 1999-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Open H323 Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: vpblid.h,v $ * Revision 1.16 2003/08/13 22:02:03 dereksmithies * Apply patch from Daniel Bichara to GetOSHandle() for VPB devices. Thanks. * * Revision 1.15 2003/03/05 06:26:41 robertj * Added function to play a WAV file to LID, thanks Pietro Ravasio * * Revision 1.14 2002/09/16 01:14:15 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.13 2002/09/03 06:19:37 robertj * Normalised the multi-include header prevention ifdef/define symbol. * * Revision 1.12 2002/08/05 10:03:47 robertj * Cosmetic changes to normalise the usage of pragma interface/implementation. * * Revision 1.11 2002/07/02 03:20:37 dereks * Fix check for line disconnected state. Remove timer on line ringing. * * Revision 1.10 2001/11/19 06:35:59 robertj * Added tone generation handling * * Revision 1.9 2001/09/13 05:27:46 robertj * Fixed incorrect return type in virtual function, thanks Vjacheslav Andrejev * * Revision 1.8 2001/02/09 05:16:24 robertj * Added #pragma interface for GNU C++. * * Revision 1.7 2001/01/25 07:27:14 robertj * Major changes to add more flexible OpalMediaFormat class to normalise * all information about media types, especially codecs. * * Revision 1.6 2001/01/24 05:34:49 robertj * Altered volume control range to be percentage, ie 100 is max volume. * * Revision 1.5 2000/11/24 10:50:52 robertj * Modified the ReadFrame/WriteFrame functions to allow for variable length codecs. * * Revision 1.4 2000/11/20 04:35:40 robertj * Changed tone detection API slightly to allow detection of multiple * simultaneous tones * * Revision 1.3 2000/05/02 04:32:25 robertj * Fixed copyright notice comment. * * Revision 1.2 2000/01/07 08:28:09 robertj * Additions and changes to line interface device base class. * * Revision 1.1 1999/12/23 23:02:35 robertj * File reorganision for separating RTP from H.323 and creation of LID for VPB support. * */ #ifndef __OPAL_VPBLID_H #define __OPAL_VPBLID_H #ifdef P_USE_PRAGMA #pragma interface #endif #include "lid.h" #include/////////////////////////////////////////////////////////////////////////////// // DR - this thread is needed to keep tones playing indefinately, as VPB // tones normally end after a defined period. class ToneThread : public PThread { PCLASSINFO(PThread, ToneThread); public: ToneThread(int handle, VPB_TONE tone); ~ToneThread(); void Main(); private: int handle; // VPB handle to play tone on VPB_TONE vpbtone; // tone parameters of tone to play PSyncPoint shutdown; // used to signal Main() to finish }; /**This class describes the Voicetronix line interface device. */ class OpalVpbDevice : public OpalLineInterfaceDevice { PCLASSINFO(OpalVpbDevice, OpalLineInterfaceDevice); public: /**Create a new, closed, device for a VPB card. */ OpalVpbDevice(); /**Destroy line interface device. This calls Close() on the device. */ ~OpalVpbDevice() { Close(); } /**Open the device. */ virtual BOOL Open( const PString & device /// Device identifier name. ); /**Close the device. */ virtual BOOL Close(); /**Get the device name. */ virtual PString GetName() const; /**Get the total number of lines supported by this device. */ virtual unsigned GetLineCount(); /**Determine if line is currently off hook. This returns TRUE if GetLineState() is a state that implies the line is off hook (eg OffHook or LineBusy). */ virtual BOOL IsLineOffHook( unsigned line /// Number of line ); /**Set the state of the line. Note that not be possible on a given line. */ virtual BOOL SetLineOffHook( unsigned line, /// Number of line BOOL newState = TRUE /// New state to set ); /**Determine if line is ringing. */ virtual BOOL IsLineRinging( unsigned line, /// Number of line DWORD * cadence = NULL /// Cadence of incoming ring ); /**Determine if line has been disconnected from a call. return TRUE if a tone is detected. */ virtual BOOL IsLineDisconnected( unsigned line, /// Number of line BOOL checkForWink = TRUE ); /**Get the media formats this device is capable of using. */ virtual OpalMediaFormat::List GetMediaFormats() const; /**Set the codec for reading. */ virtual BOOL SetReadFormat( unsigned line, /// Number of line const OpalMediaFormat & mediaFormat /// Codec type ); /**Set the codec for writing. */ virtual BOOL SetWriteFormat( unsigned line, /// Number of line const OpalMediaFormat & mediaFormat /// Codec type ); /**Get the media format (codec) for reading on the specified line. */ virtual OpalMediaFormat GetReadFormat( unsigned line /// Number of line ); /**Get the media format (codec) for writing on the specified line. */ virtual OpalMediaFormat GetWriteFormat( unsigned line /// Number of line ); /**Stop the read codec. */ virtual BOOL StopReadCodec( unsigned line /// Number of line ); /**Stop the write codec. */ virtual BOOL StopWriteCodec( unsigned line /// Number of line ); /**Set the read frame size in bytes. Note that a LID may ignore this value so always use GetReadFrameSize() for I/O. */ virtual BOOL SetReadFrameSize( unsigned line, /// Number of line PINDEX frameSize /// New frame size ); /**Set the write frame size in bytes. Note that a LID may ignore this value so always use GetReadFrameSize() for I/O. */ virtual BOOL SetWriteFrameSize( unsigned line, /// Number of line PINDEX frameSize /// New frame size ); /**Get the read frame size in bytes. All calls to ReadFrame() will return this number of bytes. */ virtual PINDEX GetReadFrameSize( unsigned line /// Number of line ); /**Get the write frame size in bytes. All calls to WriteFrame() must be this number of bytes. */ virtual PINDEX GetWriteFrameSize( unsigned line /// Number of line ); /**Low level read of a frame from the device. */ virtual BOOL ReadFrame( unsigned line, /// Number of line void * buf, /// Pointer to a block of memory to receive the read bytes. PINDEX & count /// Number of bytes read, <= GetReadFrameSize() ); /**Low level write frame to the device. */ virtual BOOL WriteFrame( unsigned line, /// Number of line const void * buf, /// Pointer to a block of memory to write. PINDEX count, /// Number of bytes to write, <= GetWriteFrameSize() PINDEX & written /// Number of bytes written, <= GetWriteFrameSize() ); /**Set volume level for recording. A value of 100 is the maximum volume possible for the hardware. A value of 0 is the minimum volume possible for the hardware. */ virtual BOOL SetRecordVolume( unsigned line, /// Number of line unsigned volume /// Volume level from 0 to 100% ); /**Set volume level for playing. A value of 100 is the maximum volume possible for the hardware. A value of 0 is the minimum volume possible for the hardware. */ virtual BOOL SetPlayVolume( unsigned line, /// Number of line unsigned volume /// Volume level from 0 to 100% ); /**Return line handle */ int GetOSHandle( unsigned line /// Number of line ); /**Read a DTMF digit detected. This may be characters from the set 0-9, A-D, * or #. A null ('\0') character indicates that there are no tones in the queue. */ virtual char ReadDTMF( unsigned line /// Number of line ); /**Play a DTMF digit. Any characters that are not in the set 0-9, A-D, * or # will be ignored. */ virtual BOOL PlayDTMF( unsigned line, /// Number of line const char * digits, /// DTMF digits to be played DWORD onTime = 90, /// Number of milliseconds to play each DTMF digit DWORD offTime = 30 /// Number of milliseconds between digits ); /**See if a tone is detected. */ virtual unsigned IsToneDetected( unsigned line /// Number of line ); virtual BOOL PlayTone( unsigned line, /// Number of line CallProgressTones tone /// Tone to be played ); virtual BOOL StopTone( unsigned line /// Number of line ); virtual BOOL PlayAudio( unsigned line, /// Number of line const PString & filename /// File Name ); virtual BOOL StopAudio( unsigned line ///Number of line ); protected: unsigned cardNumber; unsigned lineCount; enum { MaxLineCount = 8 }; struct LineState { BOOL Open(unsigned cardNumber, unsigned lineNumber); BOOL SetLineOffHook(BOOL newState); BOOL IsLineRinging(DWORD *); int handle; BOOL currentHookState; PINDEX readFormat, writeFormat; PINDEX readFrameSize, writeFrameSize; BOOL readIdle, writeIdle; PMutex DTMFmutex; BOOL DTMFplaying; ToneThread *myToneThread; } lineState[MaxLineCount]; }; #endif // __OPAL_VPBLID_H /////////////////////////////////////////////////////////////////////////////