OPAL  Version 3.14.3
lidpluginmgr.h
Go to the documentation of this file.
1 /*
2  * lidpluginmgr.h
3  *
4  * Line Interface Device plugins manager
5  *
6  * Open Phone Abstraction Library (OPAL)
7  * Formally known as the Open H323 project.
8  *
9  * Copyright (C) 2005 Post Increment
10  *
11  * The contents of this file are subject to the Mozilla Public License
12  * Version 1.0 (the "License"); you may not use this file except in
13  * compliance with the License. You may obtain a copy of the License at
14  * http://www.mozilla.org/MPL/
15  *
16  * Software distributed under the License is distributed on an "AS IS"
17  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
18  * the License for the specific language governing rights and limitations
19  * under the License.
20  *
21  * The Original Code is Open Phone Abstraction Library.
22  *
23  * The Initial Developer of the Original Code is Post Increment
24  *
25  * Contributor(s): ______________________________________.
26  *
27  * $Revision: 31420 $
28  * $Author: rjongbloed $
29  * $Date: 2014-02-10 11:36:04 +1100 (Mon, 10 Feb 2014) $
30  */
31 
32 #ifndef OPAL_LIDS_LIDPLUGINMGR_H
33 #define OPAL_LIDS_LIDPLUGINMGR_H
34 
35 #ifdef P_USE_PRAGMA
36 #pragma interface
37 #endif
38 
39 #include <opal_config.h>
40 
41 #if OPAL_LID
42 
43 #include <ptlib/pluginmgr.h>
44 #include <ptlib/sound.h>
45 #include <lids/lidplugin.h>
46 #include <lids/lid.h>
47 
48 
49 
51 {
52  public:
54 
55  OpalLineInterfaceDevice * Create(void * param) const;
56 
57  private:
58  PluginLID_Definition m_definition;
59 };
60 
61 
62 class OpalPluginLIDManager : public PPluginModuleManager
63 {
64  PCLASSINFO(OpalPluginLIDManager, PPluginModuleManager);
65  public:
66  OpalPluginLIDManager(PPluginManager * pluginMgr = NULL);
68 
69  virtual void OnLoadPlugin(PDynaLink & dll, INT code);
70  virtual void OnShutdown();
71 
72  protected:
73  PList<OpalPluginLIDRegistration> m_registrations;
74 };
75 
76 
77 
79 {
81  public:
82  OpalPluginLID(const PluginLID_Definition & definition);
84 
87  virtual PBoolean Open(
88  const PString & device
89  );
90 
93  virtual PBoolean Close();
94 
98  virtual PString GetDeviceType() const;
99 
104  virtual PString GetDeviceName() const;
105 
108  virtual PStringArray GetAllNames() const;
109 
115  virtual PString GetDescription() const;
116 
119  virtual unsigned GetLineCount() const;
120 
127  virtual PBoolean IsLineTerminal(
128  unsigned line
129  );
130 
131 
134  virtual PBoolean IsLinePresent(
135  unsigned line,
136  PBoolean force = false
137  );
138 
139 
145  virtual PBoolean IsLineOffHook(
146  unsigned line
147  );
148 
154  virtual PBoolean SetLineOffHook(
155  unsigned line,
156  PBoolean newState = true
157  );
158 
162  virtual PBoolean HookFlash(
163  unsigned line,
164  unsigned flashTime = 200
165  );
166 
169  virtual PBoolean HasHookFlash(unsigned line);
170 
171 
182  virtual PBoolean IsLineRinging(
183  unsigned line,
184  DWORD * cadence = NULL
185  );
186 
201  virtual PBoolean RingLine(
202  unsigned line,
203  PINDEX nCadence,
204  const unsigned * pattern = NULL,
205  unsigned frequency = 400
206  );
207 
208 
219  virtual PBoolean SetLineConnected(
220  unsigned line
221  );
222 
230  virtual PBoolean IsLineConnected(
231  unsigned line
232  );
233 
234 
241  virtual PBoolean IsLineDisconnected(
242  unsigned line,
243  PBoolean checkForWink = true
244  );
245 
246 
249  virtual PBoolean SetLineToLineDirect(
250  unsigned line1,
251  unsigned line2,
252  PBoolean connect
253  );
254 
257  virtual PBoolean IsLineToLineDirect(
258  unsigned line1,
259  unsigned line2
260  );
261 
262 
265  virtual OpalMediaFormatList GetMediaFormats() const;
266 
269  virtual PBoolean SetReadFormat(
270  unsigned line,
271  const OpalMediaFormat & mediaFormat
272  );
273 
276  virtual PBoolean SetWriteFormat(
277  unsigned line,
278  const OpalMediaFormat & mediaFormat
279  );
280 
284  unsigned line
285  );
286 
290  unsigned line
291  );
292 
295  virtual PBoolean StopReading(
296  unsigned line
297  );
298 
301  virtual PBoolean StopWriting(
302  unsigned line
303  );
304 
309  virtual PBoolean SetReadFrameSize(
310  unsigned line,
311  PINDEX frameSize
312  );
313 
318  virtual PBoolean SetWriteFrameSize(
319  unsigned line,
320  PINDEX frameSize
321  );
322 
326  virtual PINDEX GetReadFrameSize(
327  unsigned line
328  );
329 
333  virtual PINDEX GetWriteFrameSize(
334  unsigned line
335  );
336 
339  virtual PBoolean ReadFrame(
340  unsigned line,
341  void * buf,
342  PINDEX & count
343  );
344 
347  virtual PBoolean WriteFrame(
348  unsigned line,
349  const void * buf,
350  PINDEX count,
351  PINDEX & written
352  );
353 
354 
357  virtual unsigned GetAverageSignalLevel(
358  unsigned line,
359  PBoolean playback
360  );
361 
362 
365  virtual PBoolean EnableAudio(
366  unsigned line,
367  PBoolean enable = true
368  );
369 
372  virtual PBoolean IsAudioEnabled(
373  unsigned line
374  ) const;
375 
376 
381  virtual PBoolean SetRecordVolume(
382  unsigned line,
383  unsigned volume
384  );
385 
390  virtual PBoolean SetPlayVolume(
391  unsigned line,
392  unsigned volume
393  );
394 
399  virtual PBoolean GetRecordVolume(
400  unsigned line,
401  unsigned & volume
402  );
403 
408  virtual PBoolean GetPlayVolume(
409  unsigned line,
410  unsigned & volume
411  );
412 
413 
417  virtual AECLevels GetAEC(
418  unsigned line
419  ) const;
420 
424  virtual PBoolean SetAEC(
425  unsigned line,
426  AECLevels level
427  );
428 
432  virtual PBoolean GetVAD(
433  unsigned line
434  ) const;
435 
439  virtual PBoolean SetVAD(
440  unsigned line,
441  PBoolean enable
442  );
443 
444 
458  virtual PBoolean GetCallerID(
459  unsigned line,
460  PString & idString,
461  PBoolean full = false
462  );
463 
485  virtual PBoolean SetCallerID(
486  unsigned line,
487  const PString & idString
488  );
489 
492  virtual PBoolean SendVisualMessageWaitingIndicator(
493  unsigned line,
494  PBoolean on
495  );
496 
497 
501  virtual PBoolean PlayDTMF(
502  unsigned line,
503  const char * digits,
504  DWORD onTime = DefaultDTMFOnTime,
505  DWORD offTime = DefaultDTMFOffTime
506  );
507 
517  virtual char ReadDTMF(
518  unsigned line
519  );
520 
525  virtual PBoolean GetRemoveDTMF(
526  unsigned line
527  );
528 
533  virtual PBoolean SetRemoveDTMF(
534  unsigned line,
535  PBoolean removeTones
536  );
537 
538 
542  unsigned line
543  );
544 
548  unsigned line,
549  unsigned timeout = 3000
550  );
551 
554  virtual PBoolean WaitForTone(
555  unsigned line,
556  CallProgressTones tone,
557  unsigned timeout = 3000
558  );
559 
562  virtual bool SetToneParameters(
563  unsigned line,
564  CallProgressTones tone,
565  unsigned frequency1,
566  unsigned frequency2,
567  ToneMixingModes mode,
568  PINDEX numCadences,
569  const unsigned * onTimes,
570  const unsigned * offTimes
571  );
572 
575  virtual PBoolean PlayTone(
576  unsigned line,
577  CallProgressTones tone
578  );
579 
582  virtual PBoolean IsTonePlaying(
583  unsigned line
584  );
585 
588  virtual PBoolean StopTone(
589  unsigned line
590  );
591 
592 
608  virtual CallProgressTones DialOut(
609  unsigned line,
610  const PString & number,
611  const DialParams & params = DialParams()
612  );
613 
614 
618  virtual unsigned GetWinkDuration(
619  unsigned line
620  );
621 
625  virtual PBoolean SetWinkDuration(
626  unsigned line,
627  unsigned winkDuration
628  );
629 
635  virtual PBoolean SetCountryCode(
636  T35CountryCodes country
637  );
638 
641  virtual PStringList GetCountryCodeNameList() const;
642 
643 
644 
645  protected:
646  PDECLARE_NOTIFIER(PThread, OpalPluginLID, TonePlayer);
647  bool StartTonePlayerThread(int tone);
648  void StopTonePlayerThread();
649 
650 #if PTRACING
651  bool BadContext() const;
652  bool BadFunction(void * fnPtr, const char * fnName) const;
653  PluginLID_Errors CheckError(PluginLID_Errors error, const char * fnName) const;
654 #endif
655 
657  void * m_context;
658  PString m_deviceName;
659 
660  PSoundChannel m_recorder;
661  PSoundChannel m_player;
662  PThread * m_tonePlayer;
663  PSyncPoint m_stopTone;
665 };
666 
667 
669 
670 #endif // OPAL_LID
671 
672 #endif // OPAL_LIDS_LIDPLUGINMGR_H