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 #ifndef OPAL_LIDS_LIDPLUGINMGR_H
00033 #define OPAL_LIDS_LIDPLUGINMGR_H
00034
00035 #ifdef P_USE_PRAGMA
00036 #pragma interface
00037 #endif
00038
00039 #include <opal/buildopts.h>
00040
00041 #include <ptlib/pluginmgr.h>
00042 #include <ptlib/sound.h>
00043 #include <lids/lidplugin.h>
00044 #include <lids/lid.h>
00045
00046
00047
00048 class OpalPluginLIDRegistration : public OpalLIDRegistration
00049 {
00050 public:
00051 OpalPluginLIDRegistration(const PluginLID_Definition & definition);
00052
00053 OpalLineInterfaceDevice * Create(void * param) const;
00054
00055 private:
00056 PluginLID_Definition m_definition;
00057 };
00058
00059
00060 class OpalPluginLIDManager : public PPluginModuleManager
00061 {
00062 PCLASSINFO(OpalPluginLIDManager, PPluginModuleManager);
00063 public:
00064 OpalPluginLIDManager(PPluginManager * pluginMgr = NULL);
00065 ~OpalPluginLIDManager();
00066
00067 virtual void OnLoadPlugin(PDynaLink & dll, INT code);
00068 virtual void OnShutdown();
00069
00070 protected:
00071 PList<OpalPluginLIDRegistration> m_registrations;
00072 };
00073
00074
00075
00076 class OpalPluginLID : public OpalLineInterfaceDevice
00077 {
00078 PCLASSINFO(OpalPluginLID, OpalLineInterfaceDevice);
00079 public:
00080 OpalPluginLID(const PluginLID_Definition & definition);
00081 ~OpalPluginLID();
00082
00085 virtual PBoolean Open(
00086 const PString & device
00087 );
00088
00091 virtual PBoolean Close();
00092
00096 virtual PString GetDeviceType() const;
00097
00102 virtual PString GetDeviceName() const;
00103
00106 virtual PStringArray GetAllNames() const;
00107
00113 virtual PString GetDescription() const;
00114
00117 virtual unsigned GetLineCount() const;
00118
00125 virtual PBoolean IsLineTerminal(
00126 unsigned line
00127 );
00128
00129
00132 virtual PBoolean IsLinePresent(
00133 unsigned line,
00134 PBoolean force = PFalse
00135 );
00136
00137
00143 virtual PBoolean IsLineOffHook(
00144 unsigned line
00145 );
00146
00152 virtual PBoolean SetLineOffHook(
00153 unsigned line,
00154 PBoolean newState = PTrue
00155 );
00156
00160 virtual PBoolean HookFlash(
00161 unsigned line,
00162 unsigned flashTime = 200
00163 );
00164
00167 virtual PBoolean HasHookFlash(unsigned line);
00168
00169
00180 virtual PBoolean IsLineRinging(
00181 unsigned line,
00182 DWORD * cadence = NULL
00183 );
00184
00199 virtual PBoolean RingLine(
00200 unsigned line,
00201 PINDEX nCadence,
00202 const unsigned * pattern = NULL,
00203 unsigned frequency = 400
00204 );
00205
00206
00217 virtual PBoolean SetLineConnected(
00218 unsigned line
00219 );
00220
00228 virtual PBoolean IsLineConnected(
00229 unsigned line
00230 );
00231
00232
00239 virtual PBoolean IsLineDisconnected(
00240 unsigned line,
00241 PBoolean checkForWink = PTrue
00242 );
00243
00244
00247 virtual PBoolean SetLineToLineDirect(
00248 unsigned line1,
00249 unsigned line2,
00250 PBoolean connect
00251 );
00252
00255 virtual PBoolean IsLineToLineDirect(
00256 unsigned line1,
00257 unsigned line2
00258 );
00259
00260
00263 virtual OpalMediaFormatList GetMediaFormats() const;
00264
00267 virtual PBoolean SetReadFormat(
00268 unsigned line,
00269 const OpalMediaFormat & mediaFormat
00270 );
00271
00274 virtual PBoolean SetWriteFormat(
00275 unsigned line,
00276 const OpalMediaFormat & mediaFormat
00277 );
00278
00281 virtual OpalMediaFormat GetReadFormat(
00282 unsigned line
00283 );
00284
00287 virtual OpalMediaFormat GetWriteFormat(
00288 unsigned line
00289 );
00290
00293 virtual PBoolean StopReading(
00294 unsigned line
00295 );
00296
00299 virtual PBoolean StopWriting(
00300 unsigned line
00301 );
00302
00307 virtual PBoolean SetReadFrameSize(
00308 unsigned line,
00309 PINDEX frameSize
00310 );
00311
00316 virtual PBoolean SetWriteFrameSize(
00317 unsigned line,
00318 PINDEX frameSize
00319 );
00320
00324 virtual PINDEX GetReadFrameSize(
00325 unsigned line
00326 );
00327
00331 virtual PINDEX GetWriteFrameSize(
00332 unsigned line
00333 );
00334
00337 virtual PBoolean ReadFrame(
00338 unsigned line,
00339 void * buf,
00340 PINDEX & count
00341 );
00342
00345 virtual PBoolean WriteFrame(
00346 unsigned line,
00347 const void * buf,
00348 PINDEX count,
00349 PINDEX & written
00350 );
00351
00352
00355 virtual unsigned GetAverageSignalLevel(
00356 unsigned line,
00357 PBoolean playback
00358 );
00359
00360
00363 virtual PBoolean EnableAudio(
00364 unsigned line,
00365 PBoolean enable = PTrue
00366 );
00367
00370 virtual PBoolean IsAudioEnabled(
00371 unsigned line
00372 ) const;
00373
00374
00379 virtual PBoolean SetRecordVolume(
00380 unsigned line,
00381 unsigned volume
00382 );
00383
00388 virtual PBoolean SetPlayVolume(
00389 unsigned line,
00390 unsigned volume
00391 );
00392
00397 virtual PBoolean GetRecordVolume(
00398 unsigned line,
00399 unsigned & volume
00400 );
00401
00406 virtual PBoolean GetPlayVolume(
00407 unsigned line,
00408 unsigned & volume
00409 );
00410
00411
00415 virtual AECLevels GetAEC(
00416 unsigned line
00417 ) const;
00418
00422 virtual PBoolean SetAEC(
00423 unsigned line,
00424 AECLevels level
00425 );
00426
00430 virtual PBoolean GetVAD(
00431 unsigned line
00432 ) const;
00433
00437 virtual PBoolean SetVAD(
00438 unsigned line,
00439 PBoolean enable
00440 );
00441
00442
00456 virtual PBoolean GetCallerID(
00457 unsigned line,
00458 PString & idString,
00459 PBoolean full = PFalse
00460 );
00461
00483 virtual PBoolean SetCallerID(
00484 unsigned line,
00485 const PString & idString
00486 );
00487
00490 virtual PBoolean SendVisualMessageWaitingIndicator(
00491 unsigned line,
00492 PBoolean on
00493 );
00494
00495
00499 virtual PBoolean PlayDTMF(
00500 unsigned line,
00501 const char * digits,
00502 DWORD onTime = DefaultDTMFOnTime,
00503 DWORD offTime = DefaultDTMFOffTime
00504 );
00505
00515 virtual char ReadDTMF(
00516 unsigned line
00517 );
00518
00523 virtual PBoolean GetRemoveDTMF(
00524 unsigned line
00525 );
00526
00531 virtual PBoolean SetRemoveDTMF(
00532 unsigned line,
00533 PBoolean removeTones
00534 );
00535
00536
00539 virtual CallProgressTones IsToneDetected(
00540 unsigned line
00541 );
00542
00545 virtual CallProgressTones WaitForToneDetect(
00546 unsigned line,
00547 unsigned timeout = 3000
00548 );
00549
00552 virtual PBoolean WaitForTone(
00553 unsigned line,
00554 CallProgressTones tone,
00555 unsigned timeout = 3000
00556 );
00557
00560 virtual bool SetToneParameters(
00561 unsigned line,
00562 CallProgressTones tone,
00563 unsigned frequency1,
00564 unsigned frequency2,
00565 ToneMixingModes mode,
00566 PINDEX numCadences,
00567 const unsigned * onTimes,
00568 const unsigned * offTimes
00569 );
00570
00573 virtual PBoolean PlayTone(
00574 unsigned line,
00575 CallProgressTones tone
00576 );
00577
00580 virtual PBoolean IsTonePlaying(
00581 unsigned line
00582 );
00583
00586 virtual PBoolean StopTone(
00587 unsigned line
00588 );
00589
00590
00606 virtual CallProgressTones DialOut(
00607 unsigned line,
00608 const PString & number,
00609 const DialParams & params = DialParams()
00610 );
00611
00612
00616 virtual unsigned GetWinkDuration(
00617 unsigned line
00618 );
00619
00623 virtual PBoolean SetWinkDuration(
00624 unsigned line,
00625 unsigned winkDuration
00626 );
00627
00633 virtual PBoolean SetCountryCode(
00634 T35CountryCodes country
00635 );
00636
00639 virtual PStringList GetCountryCodeNameList() const;
00640
00641
00642
00643 protected:
00644 PDECLARE_NOTIFIER(PThread, OpalPluginLID, TonePlayer);
00645 bool StartTonePlayerThread(int tone);
00646 void StopTonePlayerThread();
00647
00648 #if PTRACING
00649 bool BadContext() const;
00650 bool BadFunction(void * fnPtr, const char * fnName) const;
00651 PluginLID_Errors CheckError(PluginLID_Errors error, const char * fnName) const;
00652 #endif
00653
00654 const PluginLID_Definition & m_definition;
00655 void * m_context;
00656 PString m_deviceName;
00657
00658 PSoundChannel m_recorder;
00659 PSoundChannel m_player;
00660 PThread * m_tonePlayer;
00661 PSyncPoint m_stopTone;
00662 bool m_lockOutTones;
00663 };
00664
00665
00666 #endif // OPAL_LIDS_LIDPLUGINMGR_H