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