• 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 #ifndef TELEPHONY_IMS_SERVICE_H
17 #define TELEPHONY_IMS_SERVICE_H
18 
19 #include "singleton.h"
20 #include "event_runner.h"
21 #include "iremote_broker.h"
22 #include "system_ability.h"
23 
24 #include "telephony_log_wrapper.h"
25 #include "ims_handler.h"
26 #include "ims_stub.h"
27 
28 namespace OHOS {
29 namespace Telephony {
30 enum class ServiceRunningState { STATE_STOPPED, STATE_RUNNING };
31 
32 class ImsService : public SystemAbility, public ImsStub, public std::enable_shared_from_this<ImsService> {
33     DECLARE_DELAYED_SINGLETON(ImsService)
34     DECLEAR_SYSTEM_ABILITY(ImsService)
35 
36 public:
37     /**
38      * service OnStart
39      */
40     void OnStart() override;
41 
42     /**
43      * service OnStop
44      */
45     void OnStop() override;
46 
47     /**
48      * Register Handler
49      */
50     void RegisterHandler();
51 
52     /**
53      * Get Handler
54      * @return ImsHandler
55      */
56     std::shared_ptr<ImsHandler> GetHandler(int32_t slot);
57 
58     /**
59      * IMS Stub dial interface
60      *
61      * @param ImsCallInfo
62      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
63      */
64     int32_t Dial(const ImsCallInfo &callInfo, CLIRMode mode) override;
65 
66     /**
67      * IMS Stub HangUp interface
68      *
69      * @param ImsCallInfo
70      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
71      */
72     int32_t HangUp(const ImsCallInfo &callInfo) override;
73 
74     /**
75      * IMS Stub Reject interface
76      *
77      * @param ImsCallInfo
78      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
79      */
80     int32_t Reject(const ImsCallInfo &callInfo) override;
81 
82     /**
83      * IMS Stub Answer interface
84      *
85      * @param ImsCallInfo
86      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
87      */
88     int32_t Answer(const ImsCallInfo &callInfo) override;
89 
90     /**
91      * IMS Stub HoldCall interface
92      *
93      * @param slotId
94      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
95      */
96     int32_t HoldCall(int32_t slotId) override;
97 
98     /**
99      * IMS Stub UnHoldCall interface
100      *
101      * @param slotId
102      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
103      */
104     int32_t UnHoldCall(int32_t slotId) override;
105 
106     /**
107      * IMS Stub SwitchCall interface
108      *
109      * @param slotId
110      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
111      */
112     int32_t SwitchCall(int32_t slotId) override;
113 
114     /**
115      * IMS Stub CombineConference interface
116      *
117      * @param slotId
118      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
119      */
120     int32_t CombineConference(int32_t slotId) override;
121 
122     /**
123      * IMS Stub InviteToConference interface
124      *
125      * @param numberList
126      * @param slotId
127      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
128      */
129     int32_t InviteToConference(int32_t slotId, const std::vector<std::string> &numberList) override;
130 
131     /**
132      * IMS Stub KickOutFromConference interface
133      *
134      * @param numberList
135      * @param slotId
136      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
137      */
138     int32_t KickOutFromConference(int32_t slotId, const std::vector<std::string> &numberList) override;
139 
140     /**
141      * IMS Stub UpdateImsCallMode interface
142      *
143      * @param ImsCallInfo
144      * @param ImsCallMode
145      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
146      */
147     int32_t UpdateImsCallMode(const ImsCallInfo &callInfo, ImsCallMode mode) override;
148 
149     /**
150      * IMS Stub IsEmergencyPhoneNumber interface
151      *
152      * @param phoneNum
153      * @param slotId
154      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
155      */
156     int32_t IsEmergencyPhoneNumber(int32_t slotId, const std::string &phoneNum) override;
157 
158     /**
159      * IMS Stub StartDtmf interface
160      *
161      * @param cDtmfCode
162      * @param index
163      * @param slotId
164      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
165      */
166     int32_t StartDtmf(int32_t slotId, char cDtmfCode, int32_t index) override;
167 
168     /**
169      * IMS Stub SendDtmf interface
170      *
171      * @param cDtmfCode
172      * @param index
173      * @param slotId
174      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
175      */
176     int32_t SendDtmf(int32_t slotId, char cDtmfCode, int32_t index) override;
177 
178     /**
179      * IMS Stub StopDtmf interface
180      *
181      * @param index
182      * @param slotId
183      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
184      */
185     int32_t StopDtmf(int32_t slotId, int32_t index) override;
186 
187     /**
188      * IMS Stub StartRtt interface
189      *
190      * @param msg
191      * @param slotId
192      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
193      */
194     int32_t StartRtt(int32_t slotId, const std::string &msg) override;
195 
196     /**
197      * IMS Stub StopRtt interface
198      *
199      * @param slotId
200      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
201      */
202     int32_t StopRtt(int32_t slotId) override;
203 
204     /**
205      * IMS Stub SetDomainPreferenceMode interface
206      *
207      * @param slotId
208      * @param mode
209      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
210      */
211     int32_t SetDomainPreferenceMode(int32_t slotId, int32_t mode) override;
212 
213     /**
214      * IMS Stub GetDomainPreferenceMode interface
215      *
216      * @param slotId
217      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
218      */
219     int32_t GetDomainPreferenceMode(int32_t slotId) override;
220 
221     /**
222      * IMS Stub SetLteImsSwitchStatus interface
223      *
224      * @param slotId
225      * @param active
226      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
227      */
228     int32_t SetLteImsSwitchStatus(int32_t slotId, bool active) override;
229 
230     /**
231      * IMS Stub GetLteImsSwitchStatus interface
232      *
233      * @param slotId
234      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
235      */
236     int32_t GetLteImsSwitchStatus(int32_t slotId) override;
237 
238     /**
239      * IMS Stub SetImsConfig interface
240      *
241      * @param ImsConfigItem
242      * @param value
243      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
244      */
245     int32_t SetImsConfig(ImsConfigItem item, const std::string &value) override;
246 
247     /**
248      * IMS Stub SetImsConfig interface
249      *
250      * @param ImsConfigItem
251      * @param value
252      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
253      */
254     int32_t SetImsConfig(ImsConfigItem item, int32_t value) override;
255 
256     /**
257      * IMS Stub GetImsConfig interface
258      *
259      * @param ImsConfigItem
260      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
261      */
262     int32_t GetImsConfig(ImsConfigItem item) override;
263 
264     /**
265      * IMS Stub SetImsFeatureValue interface
266      *
267      * @param FeatureType
268      * @param value
269      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
270      */
271     int32_t SetImsFeatureValue(FeatureType type, int32_t value) override;
272 
273     /**
274      * IMS Stub GetImsFeatureValue interface
275      *
276      * @param FeatureType
277      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
278      */
279     int32_t GetImsFeatureValue(FeatureType type) override;
280 
281     /**
282      * IMS Stub SetImsSwitchEnhanceMode interface
283      *
284      * @param value
285      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
286      */
287     int32_t SetImsSwitchEnhanceMode(bool value) override;
288 
289     /**
290      * IMS Stub GetImsSwitchEnhanceMode interface
291      *
292      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
293      */
294     int32_t GetImsSwitchEnhanceMode() override;
295 
296     /**
297      * IMS Stub CtrlCamera interface
298      *
299      * @param cameraId
300      * @param callingUid
301      * @param callingPid
302      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
303      */
304     int32_t CtrlCamera(const std::u16string &cameraId, int32_t callingUid, int32_t callingPid) override;
305 
306     /**
307      * IMS Stub SetPreviewWindow interface
308      *
309      * @param x
310      * @param y
311      * @param z
312      * @param width
313      * @param height
314      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
315      */
316     int32_t SetPreviewWindow(int32_t x, int32_t y, int32_t z, int32_t width, int32_t height) override;
317 
318     /**
319      * IMS Stub SetDisplayWindow interface
320      *
321      * @param x
322      * @param y
323      * @param z
324      * @param width
325      * @param height
326      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
327      */
328     int32_t SetDisplayWindow(int32_t x, int32_t y, int32_t z, int32_t width, int32_t height) override;
329 
330     /**
331      * IMS Stub SetCameraZoom interface
332      *
333      * @param zoomRatio
334      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
335      */
336     int32_t SetCameraZoom(float zoomRatio) override;
337 
338     /**
339      * IMS Stub SetPauseImage interface
340      *
341      * @param path
342      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
343      */
344     int32_t SetPauseImage(const std::u16string &path) override;
345 
346     /**
347      * IMS Stub SetDeviceDirection interface
348      *
349      * @param rotation
350      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
351      */
352     int32_t SetDeviceDirection(int32_t rotation) override;
353 
354     /**
355      * IMS Stub SetMute interface
356      *
357      * @param mute
358      * @param slotId
359      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
360      */
361     int32_t SetMute(int32_t slotId, int32_t mute) override;
362 
363     /**
364      * IMS Stub GetMute interface
365      *
366      * @param slotId
367      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
368      */
369     int32_t GetMute(int32_t slotId) override;
370 
371     /**
372      * IMS Stub GetEmergencyCallList interface
373      *
374      * @param slotId
375      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
376      */
377     int32_t GetEmergencyCallList(int32_t slotId) override;
378 
379     /**
380      * IMS Stub InquireClip interface
381      *
382      * @param slotId
383      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
384      */
385     int32_t InquireClip(int32_t slotId) override;
386 
387     /**
388      * IMS Stub SetClir interface
389      *
390      * @param slotId
391      * @param action
392      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
393      */
394     int32_t SetClir(int32_t slotId, int32_t action) override;
395 
396     /**
397      * IMS Stub InquireClir interface
398      *
399      * @param slotId
400      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
401      */
402     int32_t InquireClir(int32_t slotId) override;
403 
404     /**
405      * IMS Stub SetCallTransfer interface
406      *
407      * @param slotId
408      * @param reason
409      * @param mode
410      * @param transferNum
411      * @param classType
412      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
413      */
414     int32_t SetCallTransfer(
415         int32_t slotId, int32_t reason, int32_t mode, const std::string &transferNum, int32_t classType) override;
416 
417     /**
418      * IMS Stub GetCallTransfer interface
419      *
420      * @param slotId
421      * @param reason
422      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
423      */
424     int32_t GetCallTransfer(int32_t slotId, int32_t reason) override;
425 
426     /**
427      * IMS Stub SetCallRestriction interface
428      *
429      * @param slotId
430      * @param fac
431      * @param mode
432      * @param pw
433      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
434      */
435     int32_t SetCallRestriction(int32_t slotId, const std::string &fac, int32_t mode, const std::string &pw) override;
436 
437     /**
438      * IMS Stub GetCallRestriction interface
439      *
440      * @param slotId
441      * @param fac
442      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
443      */
444     int32_t GetCallRestriction(int32_t slotId, const std::string &fac) override;
445 
446     /**
447      * IMS Stub SetCallWaiting interface
448      *
449      * @param slotId
450      * @param activate
451      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
452      */
453     int32_t SetCallWaiting(int32_t slotId, bool activate) override;
454 
455     /**
456      * IMS Stub GetCallWaiting interface
457      *
458      * @param slotId
459      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
460      */
461     int32_t GetCallWaiting(int32_t slotId) override;
462 
463     /**
464      * Register CallBack
465      *
466      * @param sptr<ImsCallback>
467      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
468      */
469     int32_t RegisterCellularCallBack(const sptr<ImsCallback> &callback) override;
470 
471     /**
472      * Is CellularCallBack Exists
473      *
474      * @return bool
475      */
476     bool IsCallBackExists() override;
477 
478     /**
479      * IMS Stub GetImsCallsDataRequest interface
480      *
481      * @param slotId
482      * @param lastCallsDataFlag
483      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
484      */
485     int32_t GetImsCallsDataRequest(int32_t slotId, int64_t lastCallsDataFlag) override;
486 
487     /**
488      * IMS Stub GetCallFailReason interface
489      *
490      * @param slotId
491      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
492      */
493     int32_t GetCallFailReason(int32_t slotId) override;
494 
495 public:
496     std::map<int32_t, std::shared_ptr<ImsHandler>> handlerMap_;
497 
498 private:
499     /**
500      * Init service
501      * @return whether init success
502      */
503     bool Init();
504 
505     /**
506      * Register Handler
507      */
508     void RegisterCoreServiceHandler();
509 
510     /**
511      * Create Handler
512      */
513     void CreateHandler();
514 
515     /**
516      * Handler Reset UnRegister
517      */
518     void HandlerResetUnRegister();
519 
520     /**
521      * ThreadRegister
522      */
523     void AsynchronousRegister();
524 
525 private:
526     ImsRilRequest request_;
527     ServiceRunningState state_;
528     const uint32_t CONNECT_MAX_TRY_COUNT = 20;
529     const uint32_t CONNECT_SERVICE_WAIT_TIME = 2000; // ms
530     std::shared_ptr<AppExecFwk::EventRunner> eventLoop_;
531 };
532 } // namespace Telephony
533 } // namespace OHOS
534 
535 #endif // TELEPHONY_IMS_SERVICE_H
536