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 "hfp_hf_profile_event_sender.h"
17 
18 #include "hfp_hf_defines.h"
19 
20 namespace OHOS {
21 namespace bluetooth {
GetInstance()22 HfpHfProfileEventSender &HfpHfProfileEventSender::GetInstance()
23 {
24     static HfpHfProfileEventSender profileEventSender;
25     return profileEventSender;
26 }
27 
SendMessageToService(const HfpHfMessage & event)28 void HfpHfProfileEventSender::SendMessageToService(const HfpHfMessage &event)
29 {
30     HfpHfService *service = HfpHfService::GetService();
31     if (service != nullptr) {
32         service->PostEvent(event);
33     } else {
34         LOG_ERROR("[HFP HF]%{public}s():hfpHfService_ is nullptr!", __FUNCTION__);
35     }
36 }
37 
NetworkStateChanged(const std::string & address,int state) const38 void HfpHfProfileEventSender::NetworkStateChanged(const std::string &address, int state) const
39 {
40     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, state);
41     event.dev_ = address;
42     event.type_ = HFP_HF_TYPE_NETWORK_STATE;
43     SendMessageToService(event);
44 }
45 
NetworkRoamingChanged(const std::string & address,int state) const46 void HfpHfProfileEventSender::NetworkRoamingChanged(const std::string &address, int state) const
47 {
48     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, state);
49     event.dev_ = address;
50     event.type_ = HFP_HF_TYPE_NETWORK_ROAM;
51     SendMessageToService(event);
52 }
53 
NetworkSignalChanged(const std::string & address,int signal) const54 void HfpHfProfileEventSender::NetworkSignalChanged(const std::string &address, int signal) const
55 {
56     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, signal);
57     event.dev_ = address;
58     event.type_ = HFP_HF_TYPE_NETWORK_SIGNAL;
59     SendMessageToService(event);
60 }
61 
BatteryLevelChanged(const std::string & address,int level) const62 void HfpHfProfileEventSender::BatteryLevelChanged(const std::string &address, int level) const
63 {
64     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, level);
65     event.dev_ = address;
66     event.type_ = HFP_HF_TYPE_BATTERY_LEVEL;
67     SendMessageToService(event);
68 }
69 
CurrentOperatorReply(const std::string & address,const std::string & name) const70 void HfpHfProfileEventSender::CurrentOperatorReply(const std::string &address, const std::string &name) const
71 {
72     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT);
73     event.dev_ = address;
74     event.str_ = name;
75     event.type_ = HFP_HF_TYPE_CURRENT_OPERATOR;
76     SendMessageToService(event);
77 }
78 
CallStateNotify(const std::string & address,int call) const79 void HfpHfProfileEventSender::CallStateNotify(const std::string &address, int call) const
80 {
81     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, call);
82     event.dev_ = address;
83     event.type_ = HFP_HF_TYPE_CALL_STATE;
84     SendMessageToService(event);
85 }
86 
CallSetupStateNotify(const std::string & address,int callsetup) const87 void HfpHfProfileEventSender::CallSetupStateNotify(const std::string &address, int callsetup) const
88 {
89     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, callsetup);
90     event.dev_ = address;
91     event.type_ = HFP_HF_TYPE_CALL_SETUP_STATE;
92     SendMessageToService(event);
93 }
94 
CallHeldStateNotify(const std::string & address,int callheld) const95 void HfpHfProfileEventSender::CallHeldStateNotify(const std::string &address, int callheld) const
96 {
97     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, callheld);
98     event.dev_ = address;
99     event.type_ = HFP_HF_TYPE_CALL_HELD_STATE;
100     SendMessageToService(event);
101 }
102 
HoldResultReply(const std::string & address,int respAndHold) const103 void HfpHfProfileEventSender::HoldResultReply(const std::string &address, int respAndHold) const
104 {
105     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, respAndHold);
106     event.dev_ = address;
107     event.type_ = HFP_HF_TYPE_HOLD_RESULT;
108     SendMessageToService(event);
109 }
110 
Callinglineidentification(const std::string & address,const std::string & number) const111 void HfpHfProfileEventSender::Callinglineidentification(const std::string &address, const std::string &number) const
112 {
113     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT);
114     event.dev_ = address;
115     event.str_ = number;
116     event.type_ = HFP_HF_TYPE_CALLING_LINE_IDENTIFICATION;
117     SendMessageToService(event);
118 }
119 
CallWaitingNotify(const std::string & address,const std::string & number) const120 void HfpHfProfileEventSender::CallWaitingNotify(const std::string &address, const std::string &number) const
121 {
122     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT);
123     event.dev_ = address;
124     event.str_ = number;
125     event.type_ = HFP_HF_TYPE_CALL_WAITING;
126     SendMessageToService(event);
127 }
128 
CurrentCallsReply(const std::string & address,const HfpHfCurrentCallData & call) const129 void HfpHfProfileEventSender::CurrentCallsReply(const std::string &address, const HfpHfCurrentCallData &call) const
130 {
131     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT);
132     event.dev_ = address;
133     event.type_ = HFP_HF_TYPE_CURRENT_CALLS;
134     event.call_ = call;
135     SendMessageToService(event);
136 }
137 
SetVolume(const std::string & address,int type,int volume) const138 void HfpHfProfileEventSender::SetVolume(const std::string &address, int type, int volume) const
139 {
140     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, type);
141     event.arg3_ = volume;
142     event.dev_ = address;
143     event.type_ = HFP_HF_TYPE_SET_VOLUME;
144     SendMessageToService(event);
145 }
AtCmdResultReply(const std::string & address,int type,int cme) const146 void HfpHfProfileEventSender::AtCmdResultReply(const std::string &address, int type, int cme) const
147 {
148     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, type);
149     event.arg3_ = cme;
150     event.dev_ = address;
151     event.type_ = HFP_HF_TYPE_AT_CMD_RESULT;
152     SendMessageToService(event);
153 }
154 
SubscriberNumberReply(const std::string & address,const std::string & number,int type) const155 void HfpHfProfileEventSender::SubscriberNumberReply(
156     const std::string &address, const std::string &number, int type) const
157 {
158     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, type);
159     event.dev_ = address;
160     event.str_ = number;
161     event.type_ = HFP_HF_TYPE_SUBSCRIBER_NUMBER;
162     SendMessageToService(event);
163 }
164 
SetInBandRing(const std::string & address,int inBand,bool isFirstTime) const165 void HfpHfProfileEventSender::SetInBandRing(const std::string &address, int inBand, bool isFirstTime) const
166 {
167     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, inBand);
168     event.dev_ = address;
169     event.type_ = HFP_HF_TYPE_INBAND_RING;
170     event.arg3_ = isFirstTime;
171     SendMessageToService(event);
172 }
173 
RingIndicationNotify(const std::string & address) const174 void HfpHfProfileEventSender::RingIndicationNotify(const std::string &address) const
175 {
176     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT);
177     event.dev_ = address;
178     event.type_ = HFP_HF_TYPE_RING_ALERT;
179     SendMessageToService(event);
180 }
181 
UnknownEventNotify(const std::string & address,const std::string & eventString) const182 void HfpHfProfileEventSender::UnknownEventNotify(const std::string &address, const std::string &eventString) const
183 {
184     HfpHfMessage event(HFP_HF_INTERACTIVE_EVT);
185     event.dev_ = address;
186     event.type_ = HFP_HF_TYPE_UNKNOWN;
187     event.str_ = eventString;
188     SendMessageToService(event);
189 }
190 
ConnectRequest(const std::string & device,int handle,int what) const191 void HfpHfProfileEventSender::ConnectRequest(const std::string &device, int handle, int what) const
192 {
193     HfpHfMessage msg(what);
194     msg.dev_ = device;
195     msg.arg1_ = handle;
196     SendMessageToService(msg);
197 }
198 
UpdateConnectState(const std::string & device,int what) const199 void HfpHfProfileEventSender::UpdateConnectState(const std::string &device, int what) const
200 {
201     HfpHfMessage msg(what);
202     msg.dev_ = device;
203     SendMessageToService(msg);
204 }
205 
ScoConnectRequest(const std::string & device,int what,uint8_t linkType) const206 void HfpHfProfileEventSender::ScoConnectRequest(const std::string &device, int what, uint8_t linkType) const
207 {
208     HfpHfMessage msg(what);
209     msg.arg1_ = linkType;
210     msg.dev_ = device;
211     SendMessageToService(msg);
212 }
213 
UpdateScoConnectState(const std::string & device,int what) const214 void HfpHfProfileEventSender::UpdateScoConnectState(const std::string &device, int what) const
215 {
216     HfpHfMessage msg(what);
217     msg.dev_ = device;
218     SendMessageToService(msg);
219 }
220 
ProcessSdpDiscoveryResult(const std::string & device,int what) const221 void HfpHfProfileEventSender::ProcessSdpDiscoveryResult(const std::string &device, int what) const
222 {
223     HfpHfMessage msg(what);
224     msg.dev_ = device;
225     SendMessageToService(msg);
226 }
227 
RemoveSateMachine(const std::string & address) const228 void HfpHfProfileEventSender::RemoveSateMachine(const std::string &address) const
229 {
230     HfpHfMessage msg(HFP_HF_REMOVE_STATE_MACHINE_EVT);
231     msg.dev_ = address;
232     SendMessageToService(msg);
233 }
234 
CurrentCallsReplyDone(const std::string & address) const235 void HfpHfProfileEventSender::CurrentCallsReplyDone(const std::string &address) const
236 {
237     HfpHfMessage msg(HFP_HF_INTERACTIVE_EVT);
238     msg.dev_ = address;
239     msg.type_ = HFP_HF_TYPE_QUERY_CURRENT_CALLS_DONE;
240     SendMessageToService(msg);
241 }
242 
OpenVoiceRecognitionResult(const std::string & address,int result) const243 void HfpHfProfileEventSender::OpenVoiceRecognitionResult(const std::string &address, int result) const
244 {
245     HfpHfMessage msg(HFP_HF_INTERACTIVE_EVT, result);
246     msg.dev_ = address;
247     msg.type_ = HFP_HF_TYPE_OPEN_VR_RESULT;
248     SendMessageToService(msg);
249 }
250 
CloseVoiceRecognitionResult(const std::string & address,int result) const251 void HfpHfProfileEventSender::CloseVoiceRecognitionResult(const std::string &address, int result) const
252 {
253     HfpHfMessage msg(HFP_HF_INTERACTIVE_EVT, result);
254     msg.dev_ = address;
255     msg.type_ = HFP_HF_TYPE_CLOSE_VR_RESULT;
256     SendMessageToService(msg);
257 }
258 
VoiceRecognitionChanged(const std::string & address,int status) const259 void HfpHfProfileEventSender::VoiceRecognitionChanged(const std::string &address, int status) const
260 {
261     HfpHfMessage msg(HFP_HF_INTERACTIVE_EVT, status);
262     msg.dev_ = address;
263     msg.type_ = HFP_HF_TYPE_VOICE_RECOGNITION_CHANGED;
264     SendMessageToService(msg);
265 }
266 
GetDispatchter() const267 utility::Dispatcher *HfpHfProfileEventSender::GetDispatchter() const
268 {
269     HfpHfService *service = HfpHfService::GetService();
270     if (service != nullptr) {
271         return service->GetDispatcher();
272     } else {
273         LOG_ERROR("[HFP AG]%{public}s():hfpAgService_ is nullptr!", __FUNCTION__);
274         return nullptr;
275     }
276 }
277 }  // namespace bluetooth
278 }  // namespace OHOS