00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 #ifndef __OPAL_VPBLID_H
00079 #define __OPAL_VPBLID_H
00080
00081 #ifdef P_USE_PRAGMA
00082 #pragma interface
00083 #endif
00084
00085
00086 #include "lid.h"
00087 #include <vpbapi.h>
00088
00089
00091
00092
00093 class ToneThread : public PThread
00094 {
00095 PCLASSINFO(PThread, ToneThread);
00096
00097 public:
00098 ToneThread(int handle, VPB_TONE tone);
00099 ~ToneThread();
00100 void Main();
00101
00102 private:
00103 int handle;
00104 VPB_TONE vpbtone;
00105 PSyncPoint shutdown;
00106 };
00107
00108
00111 class OpalVpbDevice : public OpalLineInterfaceDevice
00112 {
00113 PCLASSINFO(OpalVpbDevice, OpalLineInterfaceDevice);
00114
00115 public:
00118 OpalVpbDevice();
00119
00123 ~OpalVpbDevice() { Close(); }
00124
00127 virtual BOOL Open(
00128 const PString & device
00129 );
00130
00133 virtual BOOL Close();
00134
00137 virtual PString GetName() const;
00138
00141 virtual unsigned GetLineCount();
00142
00143
00148 virtual BOOL IsLineOffHook(
00149 unsigned line
00150 );
00151
00155 virtual BOOL SetLineOffHook(
00156 unsigned line,
00157 BOOL newState = TRUE
00158 );
00159
00160
00163 virtual BOOL IsLineRinging(
00164 unsigned line,
00165 DWORD * cadence = NULL
00166 );
00167
00171 virtual BOOL IsLineDisconnected(
00172 unsigned line,
00173 BOOL checkForWink = TRUE
00174 );
00175
00178 virtual OpalMediaFormat::List GetMediaFormats() const;
00179
00182 virtual BOOL SetReadFormat(
00183 unsigned line,
00184 const OpalMediaFormat & mediaFormat
00185 );
00186
00189 virtual BOOL SetWriteFormat(
00190 unsigned line,
00191 const OpalMediaFormat & mediaFormat
00192 );
00193
00196 virtual OpalMediaFormat GetReadFormat(
00197 unsigned line
00198 );
00199
00202 virtual OpalMediaFormat GetWriteFormat(
00203 unsigned line
00204 );
00205
00208 virtual BOOL StopReadCodec(
00209 unsigned line
00210 );
00211
00214 virtual BOOL StopWriteCodec(
00215 unsigned line
00216 );
00217
00222 virtual BOOL SetReadFrameSize(
00223 unsigned line,
00224 PINDEX frameSize
00225 );
00226
00231 virtual BOOL SetWriteFrameSize(
00232 unsigned line,
00233 PINDEX frameSize
00234 );
00235
00239 virtual PINDEX GetReadFrameSize(
00240 unsigned line
00241 );
00242
00246 virtual PINDEX GetWriteFrameSize(
00247 unsigned line
00248 );
00249
00252 virtual BOOL ReadFrame(
00253 unsigned line,
00254 void * buf,
00255 PINDEX & count
00256 );
00257
00260 virtual BOOL WriteFrame(
00261 unsigned line,
00262 const void * buf,
00263 PINDEX count,
00264 PINDEX & written
00265 );
00266
00267
00272 virtual BOOL SetRecordVolume(
00273 unsigned line,
00274 unsigned volume
00275 );
00276
00281 virtual BOOL SetPlayVolume(
00282 unsigned line,
00283 unsigned volume
00284 );
00285
00288 int GetOSHandle(
00289 unsigned line
00290 );
00291
00297 virtual char ReadDTMF(
00298 unsigned line
00299 );
00300
00304 virtual BOOL PlayDTMF(
00305 unsigned line,
00306 const char * digits,
00307 DWORD onTime = 90,
00308 DWORD offTime = 30
00309 );
00310
00311
00314 virtual unsigned IsToneDetected(
00315 unsigned line
00316 );
00317
00318 virtual BOOL PlayTone(
00319 unsigned line,
00320 CallProgressTones tone
00321 );
00322
00323 virtual BOOL StopTone(
00324 unsigned line
00325 );
00326
00327 virtual BOOL PlayAudio(
00328 unsigned line,
00329 const PString & filename
00330 );
00331
00332 virtual BOOL StopAudio(
00333 unsigned line
00334 );
00335
00336 protected:
00337 unsigned cardNumber;
00338 unsigned lineCount;
00339
00340 enum { MaxLineCount = 8 };
00341
00342 struct LineState {
00343 BOOL Open(unsigned cardNumber, unsigned lineNumber);
00344 BOOL SetLineOffHook(BOOL newState);
00345 BOOL IsLineRinging(DWORD *);
00346
00347 int handle;
00348 BOOL currentHookState;
00349 PINDEX readFormat, writeFormat;
00350 PINDEX readFrameSize, writeFrameSize;
00351 BOOL readIdle, writeIdle;
00352 PMutex DTMFmutex;
00353 BOOL DTMFplaying;
00354 ToneThread *myToneThread;
00355 } lineState[MaxLineCount];
00356 };
00357
00358
00359 #endif // __OPAL_VPBLID_H
00360
00361