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