• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "tone.h"
17 
18 #include <thread>
19 
20 #include "telephony_log_wrapper.h"
21 
22 namespace OHOS {
23 namespace Telephony {
Tone()24 Tone::Tone() {}
25 
Tone(ToneDescriptor tone)26 Tone::Tone(ToneDescriptor tone)
27 {
28     currentToneDescriptor_ = tone;
29 }
30 
~Tone()31 Tone::~Tone() {}
32 
Init()33 void Tone::Init() {}
34 
Play()35 int32_t Tone::Play()
36 {
37     if (currentToneDescriptor_ == TONE_UNKNOWN) {
38         TELEPHONY_LOGE("tone descriptor unknown");
39         return CALL_ERR_AUDIO_UNKNOWN_TONE;
40     }
41     PlayerType playerType = PlayerType::TYPE_TONE;
42     if (IsDtmf(currentToneDescriptor_)) {
43         playerType = PlayerType::TYPE_DTMF;
44     }
45     std::thread play(AudioPlayer::Play, GetToneDescriptorPath(currentToneDescriptor_),
46         AudioStandard::AudioStreamType::STREAM_MUSIC, playerType);
47     play.detach();
48     return TELEPHONY_SUCCESS;
49 }
50 
Stop()51 int32_t Tone::Stop()
52 {
53     std::lock_guard<std::mutex> lock(mutex_);
54     if (currentToneDescriptor_ == TONE_UNKNOWN) {
55         TELEPHONY_LOGE("tone descriptor unknown");
56         return CALL_ERR_AUDIO_UNKNOWN_TONE;
57     }
58     PlayerType playerType = PlayerType::TYPE_TONE;
59     if (IsDtmf(currentToneDescriptor_)) {
60         playerType = PlayerType::TYPE_DTMF;
61     }
62     AudioPlayer::SetStop(playerType, true);
63     return TELEPHONY_SUCCESS;
64 }
65 
ConvertDigitToTone(char digit)66 ToneDescriptor Tone::ConvertDigitToTone(char digit)
67 {
68     ToneDescriptor dtmf = ToneDescriptor::TONE_UNKNOWN;
69     switch (digit) {
70         case '0':
71             dtmf = ToneDescriptor::TONE_DTMF_CHAR_0;
72             break;
73         case '1':
74             dtmf = ToneDescriptor::TONE_DTMF_CHAR_1;
75             break;
76         case '2':
77             dtmf = ToneDescriptor::TONE_DTMF_CHAR_2;
78             break;
79         case '3':
80             dtmf = ToneDescriptor::TONE_DTMF_CHAR_3;
81             break;
82         case '4':
83             dtmf = ToneDescriptor::TONE_DTMF_CHAR_4;
84             break;
85         case '5':
86             dtmf = ToneDescriptor::TONE_DTMF_CHAR_5;
87             break;
88         case '6':
89             dtmf = ToneDescriptor::TONE_DTMF_CHAR_6;
90             break;
91         case '7':
92             dtmf = ToneDescriptor::TONE_DTMF_CHAR_7;
93             break;
94         case '8':
95             dtmf = ToneDescriptor::TONE_DTMF_CHAR_8;
96             break;
97         case '9':
98             dtmf = ToneDescriptor::TONE_DTMF_CHAR_9;
99             break;
100         case 'p':
101         case 'P':
102             dtmf = ToneDescriptor::TONE_DTMF_CHAR_P;
103             break;
104         case 'w':
105         case 'W':
106             dtmf = ToneDescriptor::TONE_DTMF_CHAR_W;
107             break;
108         default:
109             break;
110     }
111     return dtmf;
112 }
113 
IsDtmf(ToneDescriptor tone)114 bool Tone::IsDtmf(ToneDescriptor tone)
115 {
116     bool ret = false;
117     switch (tone) {
118         case ToneDescriptor::TONE_DTMF_CHAR_0:
119         case ToneDescriptor::TONE_DTMF_CHAR_1:
120         case ToneDescriptor::TONE_DTMF_CHAR_2:
121         case ToneDescriptor::TONE_DTMF_CHAR_3:
122         case ToneDescriptor::TONE_DTMF_CHAR_4:
123         case ToneDescriptor::TONE_DTMF_CHAR_5:
124         case ToneDescriptor::TONE_DTMF_CHAR_6:
125         case ToneDescriptor::TONE_DTMF_CHAR_7:
126         case ToneDescriptor::TONE_DTMF_CHAR_8:
127         case ToneDescriptor::TONE_DTMF_CHAR_9:
128         case ToneDescriptor::TONE_DTMF_CHAR_P:
129         case ToneDescriptor::TONE_DTMF_CHAR_W:
130             ret = true;
131             break;
132         default:
133             break;
134     }
135     return ret;
136 }
137 
GetToneDescriptorPath(ToneDescriptor tone)138 std::string Tone::GetToneDescriptorPath(ToneDescriptor tone)
139 {
140 #ifdef ABILITY_AUDIO_SUPPORT
141     return DelayedSingleton<AudioProxy>::GetInstance()->GetToneDescriptorPath(tone);
142 #endif
143     return DelayedSingleton<AudioProxy>::GetInstance()->GetDefaultTonePath();
144 }
145 } // namespace Telephony
146 } // namespace OHOS