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