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