1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// This sub-API supports the following functionalities:
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  - Telephone event transmission.
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  - DTMF tone generation.
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Usage example, omitting error checking:
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  using namespace webrtc;
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  VoiceEngine* voe = VoiceEngine::Create();
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  VoEBase* base = VoEBase::GetInterface(voe);
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  VoEDtmf* dtmf  = VoEDtmf::GetInterface(voe);
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  base->Init();
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  int ch = base->CreateChannel();
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  ...
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  dtmf->SendTelephoneEvent(ch, 7);
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  ...
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  base->DeleteChannel(ch);
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  base->Terminate();
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  base->Release();
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  dtmf->Release();
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  VoiceEngine::Delete(voe);
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VOICE_ENGINE_VOE_DTMF_H
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VOICE_ENGINE_VOE_DTMF_H
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3615a03fd972746f234e2dd9bb5540ae0b4ad6ee82turaj@webrtc.org#include "webrtc/common_types.h"
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc {
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VoiceEngine;
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// VoEDtmf
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass WEBRTC_DLLEXPORT VoEDtmf
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
46c4e54b6b46c22c03725c9d39612fd50792d018efhenrika@webrtc.org
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Factory for the VoEDtmf sub-API. Increases an internal
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // reference counter if successful. Returns NULL if the API is not
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // supported or if construction fails.
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    static VoEDtmf* GetInterface(VoiceEngine* voiceEngine);
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Releases the VoEDtmf sub-API and decreases an internal
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // reference counter. Returns the new reference count. This value should
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // be zero for all sub-API:s before the VoiceEngine object can be safely
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // deleted.
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual int Release() = 0;
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Sends telephone events either in-band or out-of-band.
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual int SendTelephoneEvent(int channel, int eventCode,
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                   bool outOfBand = true, int lengthMs = 160,
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                   int attenuationDb = 10) = 0;
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
63c4e54b6b46c22c03725c9d39612fd50792d018efhenrika@webrtc.org
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Sets the dynamic payload |type| that should be used for telephone
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // events.
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual int SetSendTelephoneEventPayloadType(int channel,
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                                 unsigned char type) = 0;
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
69c4e54b6b46c22c03725c9d39612fd50792d018efhenrika@webrtc.org
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Gets the currently set dynamic payload |type| for telephone events.
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual int GetSendTelephoneEventPayloadType(int channel,
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                                 unsigned char& type) = 0;
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Enables or disables local tone playout for received DTMF events
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // out-of-band.
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual int SetDtmfPlayoutStatus(int channel, bool enable) = 0;
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Gets the DTMF playout status.
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual int GetDtmfPlayoutStatus(int channel, bool& enabled) = 0;
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Toogles DTMF feedback state: when a DTMF tone is sent, the same tone
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // is played out on the speaker.
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual int SetDtmfFeedbackStatus(bool enable,
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                      bool directFeedback = false) = 0;
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Gets the DTMF feedback status.
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual int GetDtmfFeedbackStatus(bool& enabled, bool& directFeedback) = 0;
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Plays a DTMF feedback tone (only locally).
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual int PlayDtmfTone(int eventCode, int lengthMs = 200,
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                             int attenuationDb = 10) = 0;
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
93c4e54b6b46c22c03725c9d39612fd50792d018efhenrika@webrtc.org    // To be removed. Don't use.
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual int StartPlayingDtmfTone(int eventCode,
95c4e54b6b46c22c03725c9d39612fd50792d018efhenrika@webrtc.org        int attenuationDb = 10) { return -1; }
96c4e54b6b46c22c03725c9d39612fd50792d018efhenrika@webrtc.org    virtual int StopPlayingDtmfTone() { return -1; }
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprotected:
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    VoEDtmf() {}
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual ~VoEDtmf() {}
101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}  // namespace webrtc
104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // WEBRTC_VOICE_ENGINE_VOE_DTMF_H
106