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(const std::string &address, const std::string &number, int type) const
156 {
157 HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, type);
158 event.dev_ = address;
159 event.str_ = number;
160 event.type_ = HFP_HF_TYPE_SUBSCRIBER_NUMBER;
161 SendMessageToService(event);
162 }
163
SetInBandRing(const std::string & address,int inBand,bool isFirstTime) const164 void HfpHfProfileEventSender::SetInBandRing(const std::string &address, int inBand, bool isFirstTime) const
165 {
166 HfpHfMessage event(HFP_HF_INTERACTIVE_EVT, inBand);
167 event.dev_ = address;
168 event.type_ = HFP_HF_TYPE_INBAND_RING;
169 event.arg3_ = isFirstTime;
170 SendMessageToService(event);
171 }
172
RingIndicationNotify(const std::string & address) const173 void HfpHfProfileEventSender::RingIndicationNotify(const std::string &address) const
174 {
175 HfpHfMessage event(HFP_HF_INTERACTIVE_EVT);
176 event.dev_ = address;
177 event.type_ = HFP_HF_TYPE_RING_ALERT;
178 SendMessageToService(event);
179 }
180
UnknownEventNotify(const std::string & address,const std::string & eventString) const181 void HfpHfProfileEventSender::UnknownEventNotify(const std::string &address, const std::string &eventString) const
182 {
183 HfpHfMessage event(HFP_HF_INTERACTIVE_EVT);
184 event.dev_ = address;
185 event.type_ = HFP_HF_TYPE_UNKNOWN;
186 event.str_ = eventString;
187 SendMessageToService(event);
188 }
189
ConnectRequest(const std::string & device,int handle,int what) const190 void HfpHfProfileEventSender::ConnectRequest(const std::string &device, int handle, int what) const
191 {
192 HfpHfMessage msg(what);
193 msg.dev_ = device;
194 msg.arg1_ = handle;
195 SendMessageToService(msg);
196 }
197
UpdateConnectState(const std::string & device,int what) const198 void HfpHfProfileEventSender::UpdateConnectState(const std::string &device, int what) const
199 {
200 HfpHfMessage msg(what);
201 msg.dev_ = device;
202 SendMessageToService(msg);
203 }
204
ScoConnectRequest(const std::string & device,int what,uint8_t linkType) const205 void HfpHfProfileEventSender::ScoConnectRequest(const std::string &device, int what, uint8_t linkType) const
206 {
207 HfpHfMessage msg(what);
208 msg.arg1_ = linkType;
209 msg.dev_ = device;
210 SendMessageToService(msg);
211 }
212
UpdateScoConnectState(const std::string & device,int what) const213 void HfpHfProfileEventSender::UpdateScoConnectState(const std::string &device, int what) const
214 {
215 HfpHfMessage msg(what);
216 msg.dev_ = device;
217 SendMessageToService(msg);
218 }
219
ProcessSdpDiscoveryResult(const std::string & device,int what) const220 void HfpHfProfileEventSender::ProcessSdpDiscoveryResult(const std::string &device, int what) const
221 {
222 HfpHfMessage msg(what);
223 msg.dev_ = device;
224 SendMessageToService(msg);
225 }
226
RemoveSateMachine(const std::string & address) const227 void HfpHfProfileEventSender::RemoveSateMachine(const std::string &address) const
228 {
229 HfpHfMessage msg(HFP_HF_REMOVE_STATE_MACHINE_EVT);
230 msg.dev_ = address;
231 SendMessageToService(msg);
232 }
233
CurrentCallsReplyDone(const std::string & address) const234 void HfpHfProfileEventSender::CurrentCallsReplyDone(const std::string &address) const
235 {
236 HfpHfMessage msg(HFP_HF_INTERACTIVE_EVT);
237 msg.dev_ = address;
238 msg.type_ = HFP_HF_TYPE_QUERY_CURRENT_CALLS_DONE;
239 SendMessageToService(msg);
240 }
241
OpenVoiceRecognitionResult(const std::string & address,int result) const242 void HfpHfProfileEventSender::OpenVoiceRecognitionResult(const std::string &address, int result) const
243 {
244 HfpHfMessage msg(HFP_HF_INTERACTIVE_EVT, result);
245 msg.dev_ = address;
246 msg.type_ = HFP_HF_TYPE_OPEN_VR_RESULT;
247 SendMessageToService(msg);
248 }
249
CloseVoiceRecognitionResult(const std::string & address,int result) const250 void HfpHfProfileEventSender::CloseVoiceRecognitionResult(const std::string &address, int result) const
251 {
252 HfpHfMessage msg(HFP_HF_INTERACTIVE_EVT, result);
253 msg.dev_ = address;
254 msg.type_ = HFP_HF_TYPE_CLOSE_VR_RESULT;
255 SendMessageToService(msg);
256 }
257
VoiceRecognitionChanged(const std::string & address,int status) const258 void HfpHfProfileEventSender::VoiceRecognitionChanged(const std::string &address, int status) const
259 {
260 HfpHfMessage msg(HFP_HF_INTERACTIVE_EVT, status);
261 msg.dev_ = address;
262 msg.type_ = HFP_HF_TYPE_VOICE_RECOGNITION_CHANGED;
263 SendMessageToService(msg);
264 }
265
GetDispatchter() const266 utility::Dispatcher *HfpHfProfileEventSender::GetDispatchter() const
267 {
268 HfpHfService *service = HfpHfService::GetService();
269 if (service != nullptr) {
270 return service->GetDispatcher();
271 } else {
272 LOG_ERROR("[HFP AG]%{public}s():hfpAgService_ is nullptr!", __FUNCTION__);
273 return nullptr;
274 }
275 }
276 } // namespace bluetooth
277 } // namespace OHOS